Go to the documentation of this file.00001 #include <iostream>
00002
00003 #include <pigpio.h>
00004
00005 #include "rotary_encoder.hpp"
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 void re_decoder::_pulse(int gpio, int level, uint32_t tick)
00024 {
00025 if (gpio == mygpioA) levA = level; else levB = level;
00026
00027 if (gpio != lastGpio)
00028 {
00029 lastGpio = gpio;
00030
00031 if ((gpio == mygpioA) && (level == 1))
00032 {
00033 if (levB) (mycallback)(1);
00034 }
00035 else if ((gpio == mygpioB) && (level == 1))
00036 {
00037 if (levA) (mycallback)(-1);
00038 }
00039 }
00040 }
00041
00042 void re_decoder::_pulseEx(int gpio, int level, uint32_t tick, void *user)
00043 {
00044
00045
00046
00047
00048 re_decoder *mySelf = (re_decoder *) user;
00049
00050 mySelf->_pulse(gpio, level, tick);
00051 }
00052
00053 re_decoder::re_decoder(int gpioA, int gpioB, re_decoderCB_t callback)
00054 {
00055 mygpioA = gpioA;
00056 mygpioB = gpioB;
00057
00058 mycallback = callback;
00059
00060 levA=0;
00061 levB=0;
00062
00063 lastGpio = -1;
00064
00065 gpioSetMode(gpioA, PI_INPUT);
00066 gpioSetMode(gpioB, PI_INPUT);
00067
00068
00069
00070 gpioSetPullUpDown(gpioA, PI_PUD_UP);
00071 gpioSetPullUpDown(gpioB, PI_PUD_UP);
00072
00073
00074
00075 gpioSetAlertFuncEx(gpioA, _pulseEx, this);
00076 gpioSetAlertFuncEx(gpioB, _pulseEx, this);
00077 }
00078
00079 void re_decoder::re_cancel(void)
00080 {
00081 gpioSetAlertFuncEx(mygpioA, 0, this);
00082 gpioSetAlertFuncEx(mygpioB, 0, this);
00083 }
00084