embedded / RemoteIR

Dependents:   line_tracing

Committer:
Jeonghoon
Date:
Thu Jun 06 11:16:22 2019 +0000
Revision:
15:b56a97811380
Parent:
14:2fafd2e7dea8
Child:
16:3922b10d4606
20190606 success;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shintamainjp 0:ec264f4ce158 1 #include "ReceiverIR.h"
jinyoung_KIL 12:96209c979a7f 2
shintamainjp 10:c54fb1204d1e 3 #define LOCK()
shintamainjp 10:c54fb1204d1e 4 #define UNLOCK()
jinyoung_KIL 12:96209c979a7f 5
shintamainjp 0:ec264f4ce158 6 #define InRange(x,y) ((((y) * 0.7) < (x)) && ((x) < ((y) * 1.3)))
shintamainjp 0:ec264f4ce158 7
shintamainjp 9:dcfdac59ef74 8 /**
shintamainjp 9:dcfdac59ef74 9 * Constructor.
shintamainjp 9:dcfdac59ef74 10 *
shintamainjp 9:dcfdac59ef74 11 * @param rxpin Pin for receive IR signal.
shintamainjp 9:dcfdac59ef74 12 */
jinyoung_KIL 12:96209c979a7f 13
jinyoung_KIL 12:96209c979a7f 14 ReceiverIR::ReceiverIR(PinName rxpin, float _speed, PinName _pwma,PinName _pwmb, PinName _ain0, PinName _ain1, PinName _bin0, PinName _bin1)
jinyoung_KIL 12:96209c979a7f 15 : evt(rxpin), pwma(_pwma), pwmb(_pwmb),ain1(_ain1),ain0(_ain0), bin0(_bin0),bin1(_bin1) {
shintamainjp 9:dcfdac59ef74 16 init_state();
shintamainjp 0:ec264f4ce158 17 evt.fall(this, &ReceiverIR::isr_fall);
shintamainjp 0:ec264f4ce158 18 evt.rise(this, &ReceiverIR::isr_rise);
shintamainjp 0:ec264f4ce158 19 evt.mode(PullUp);
jinyoung_KIL 12:96209c979a7f 20 ticker.attach_us(this, &ReceiverIR::isr_wdt, 10 * 1000);
Jeonghoon 15:b56a97811380 21 Speed_L = 0.45 ;
jinyoung_KIL 12:96209c979a7f 22 //Speed_R = _speed *1.005;
Jeonghoon 15:b56a97811380 23 Speed_R = 0.445 ;
jinyoung_KIL 13:5e445169cf83 24 init_sp_l = Speed_L;
jinyoung_KIL 13:5e445169cf83 25 init_sp_r = Speed_R;
shintamainjp 0:ec264f4ce158 26 }
jinyoung_KIL 12:96209c979a7f 27
shintamainjp 9:dcfdac59ef74 28 /**
shintamainjp 9:dcfdac59ef74 29 * Destructor.
shintamainjp 9:dcfdac59ef74 30 */
shintamainjp 1:4adf16017a0f 31 ReceiverIR::~ReceiverIR() {
shintamainjp 1:4adf16017a0f 32 }
jinyoung_KIL 12:96209c979a7f 33
shintamainjp 9:dcfdac59ef74 34 /**
shintamainjp 9:dcfdac59ef74 35 * Get state.
shintamainjp 9:dcfdac59ef74 36 *
shintamainjp 9:dcfdac59ef74 37 * @return Current state.
shintamainjp 9:dcfdac59ef74 38 */
shintamainjp 0:ec264f4ce158 39 ReceiverIR::State ReceiverIR::getState() {
shintamainjp 9:dcfdac59ef74 40 LOCK();
shintamainjp 9:dcfdac59ef74 41 State s = work.state;
shintamainjp 9:dcfdac59ef74 42 UNLOCK();
shintamainjp 0:ec264f4ce158 43 return s;
shintamainjp 0:ec264f4ce158 44 }
jinyoung_KIL 12:96209c979a7f 45
shintamainjp 9:dcfdac59ef74 46 /**
shintamainjp 9:dcfdac59ef74 47 * Get data.
shintamainjp 9:dcfdac59ef74 48 *
shintamainjp 9:dcfdac59ef74 49 * @param format Pointer to format.
shintamainjp 9:dcfdac59ef74 50 * @param buf Buffer of a data.
shintamainjp 9:dcfdac59ef74 51 * @param bitlength Bit length of the buffer.
shintamainjp 9:dcfdac59ef74 52 *
shintamainjp 9:dcfdac59ef74 53 * @return Data bit length.
shintamainjp 9:dcfdac59ef74 54 */
shintamainjp 4:2304646f6ff5 55 int ReceiverIR::getData(RemoteIR::Format *format, uint8_t *buf, int bitlength) {
shintamainjp 9:dcfdac59ef74 56 LOCK();
jinyoung_KIL 12:96209c979a7f 57
shintamainjp 4:2304646f6ff5 58 if (bitlength < data.bitcount) {
shintamainjp 9:dcfdac59ef74 59 UNLOCK();
shintamainjp 0:ec264f4ce158 60 return -1;
shintamainjp 0:ec264f4ce158 61 }
jinyoung_KIL 12:96209c979a7f 62
shintamainjp 9:dcfdac59ef74 63 const int nbits = data.bitcount;
shintamainjp 6:e57504fc802e 64 const int nbytes = data.bitcount / 8 + (((data.bitcount % 8) != 0) ? 1 : 0);
shintamainjp 0:ec264f4ce158 65 *format = data.format;
shintamainjp 5:e158c85c55ff 66 for (int i = 0; i < nbytes; i++) {
shintamainjp 0:ec264f4ce158 67 buf[i] = data.buffer[i];
shintamainjp 0:ec264f4ce158 68 }
jinyoung_KIL 12:96209c979a7f 69
jinyoung_KIL 12:96209c979a7f 70 move(buf);
shintamainjp 0:ec264f4ce158 71 init_state();
jinyoung_KIL 12:96209c979a7f 72
shintamainjp 9:dcfdac59ef74 73 UNLOCK();
shintamainjp 9:dcfdac59ef74 74 return nbits;
shintamainjp 0:ec264f4ce158 75 }
jinyoung_KIL 12:96209c979a7f 76
jinyoung_KIL 12:96209c979a7f 77 void ReceiverIR::move(uint8_t *buf){
jinyoung_KIL 12:96209c979a7f 78 char buffer[64];
jinyoung_KIL 12:96209c979a7f 79 sprintf(buffer, "%02X%02X%02X%02X", buf[0], buf[1], buf[2], buf[3]);
jinyoung_KIL 12:96209c979a7f 80 //start
jinyoung_KIL 12:96209c979a7f 81 // if(!strncmp(buffer, "00FF09F6",8)){
jinyoung_KIL 12:96209c979a7f 82 // //pc.printf("forward!\r\n");
jinyoung_KIL 12:96209c979a7f 83 // start = 1;
jinyoung_KIL 12:96209c979a7f 84 // //forward();
jinyoung_KIL 12:96209c979a7f 85 // }
jinyoung_KIL 12:96209c979a7f 86 // forward
jinyoung_KIL 12:96209c979a7f 87 if(!strncmp(buffer, "00FF18E7",8)){
jinyoung_KIL 12:96209c979a7f 88 //pc.printf("forward!\r\n");
jinyoung_KIL 12:96209c979a7f 89 forward();
jinyoung_KIL 12:96209c979a7f 90 }
jinyoung_KIL 12:96209c979a7f 91 // back
jinyoung_KIL 12:96209c979a7f 92 if(!strncmp(buffer, "00FF52AD",8)){
jinyoung_KIL 12:96209c979a7f 93 //pc.printf("back!\r\n");
jinyoung_KIL 12:96209c979a7f 94 backward();
jinyoung_KIL 12:96209c979a7f 95 }
jinyoung_KIL 12:96209c979a7f 96 // left
jinyoung_KIL 12:96209c979a7f 97 if(!strncmp(buffer, "00FF08F7",8)){
jinyoung_KIL 13:5e445169cf83 98 //pc.printf("left!\r\n");
jinyoung_KIL 13:5e445169cf83 99 left();
jinyoung_KIL 12:96209c979a7f 100 }
jinyoung_KIL 12:96209c979a7f 101 // right
jinyoung_KIL 12:96209c979a7f 102 if(!strncmp(buffer, "00FF5AA5",8)){
jinyoung_KIL 13:5e445169cf83 103 //pc.printf("right!\r\n");
jinyoung_KIL 13:5e445169cf83 104 right();
jinyoung_KIL 12:96209c979a7f 105 }
jinyoung_KIL 12:96209c979a7f 106 // stop
jinyoung_KIL 12:96209c979a7f 107 if(!strncmp(buffer, "00FF0CF3",8)){
jinyoung_KIL 13:5e445169cf83 108 speedup_l();
jinyoung_KIL 12:96209c979a7f 109 }
jinyoung_KIL 12:96209c979a7f 110 if(!strncmp(buffer, "00FF5EA1",8)){
jinyoung_KIL 13:5e445169cf83 111 speedup_r();
jinyoung_KIL 12:96209c979a7f 112 }
jinyoung_KIL 12:96209c979a7f 113 if(!strncmp(buffer, "00FF42BD",8)){
jinyoung_KIL 13:5e445169cf83 114 speeddown_l();
jinyoung_KIL 12:96209c979a7f 115 }
jinyoung_KIL 12:96209c979a7f 116 if(!strncmp(buffer, "00FF4AB5",8)){
jinyoung_KIL 13:5e445169cf83 117 speeddown_r();
jinyoung_KIL 12:96209c979a7f 118 }
jinyoung_KIL 12:96209c979a7f 119 if(!strncmp(buffer, "00FF1CE3",8)){
jinyoung_KIL 12:96209c979a7f 120 stop();
jinyoung_KIL 13:5e445169cf83 121 }
jinyoung_KIL 13:5e445169cf83 122 if(!strncmp(buffer, "00FF45BA", 8)){
jinyoung_KIL 13:5e445169cf83 123 cal_start = 1;
jinyoung_KIL 13:5e445169cf83 124 }
jinyoung_KIL 13:5e445169cf83 125 if(!strncmp(buffer, "00FF47B8", 8)){
jinyoung_KIL 13:5e445169cf83 126 cal_stop = 1;
jinyoung_KIL 12:96209c979a7f 127 }
jinyoung_KIL 12:96209c979a7f 128 }
jinyoung_KIL 12:96209c979a7f 129
jinyoung_KIL 13:5e445169cf83 130 void ReceiverIR::speedup_l(void){
jinyoung_KIL 13:5e445169cf83 131 //Speed_L += 0.0005;
jinyoung_KIL 13:5e445169cf83 132 // if(Speed_L > 0.5){
jinyoung_KIL 13:5e445169cf83 133 // Speed_L = 0.5;
jinyoung_KIL 13:5e445169cf83 134 // }
jinyoung_KIL 13:5e445169cf83 135 // pwma = Speed_L;
Jeonghoon 15:b56a97811380 136 max += 5;
jinyoung_KIL 12:96209c979a7f 137 }
jinyoung_KIL 13:5e445169cf83 138 void ReceiverIR::speeddown_l(void){
jinyoung_KIL 13:5e445169cf83 139 //Speed_L -= 0.0005;
jinyoung_KIL 13:5e445169cf83 140 // if(Speed_L < 0){
jinyoung_KIL 13:5e445169cf83 141 // Speed_L = 0;
jinyoung_KIL 13:5e445169cf83 142 // }
jinyoung_KIL 13:5e445169cf83 143 // pwma = Speed_L;
Jeonghoon 15:b56a97811380 144 max -= 5;
jinyoung_KIL 12:96209c979a7f 145 }
jinyoung_KIL 13:5e445169cf83 146 void ReceiverIR::speedup_r(void){
jinyoung_KIL 13:5e445169cf83 147 // Speed_R += 0.0005;
jinyoung_KIL 13:5e445169cf83 148 // if(Speed_R > 0.5){
jinyoung_KIL 13:5e445169cf83 149 // Speed_R = 0.5;
jinyoung_KIL 13:5e445169cf83 150 // }
jinyoung_KIL 13:5e445169cf83 151 // pwmb = Speed_R;
Jeonghoon 14:2fafd2e7dea8 152
Jeonghoon 14:2fafd2e7dea8 153 //max += 5;
Jeonghoon 15:b56a97811380 154 ki += 500;
jinyoung_KIL 12:96209c979a7f 155 }
jinyoung_KIL 13:5e445169cf83 156 void ReceiverIR::speeddown_r(void){
jinyoung_KIL 13:5e445169cf83 157 // Speed_R -= 0.0005;
jinyoung_KIL 13:5e445169cf83 158 // if(Speed_R < 0){
jinyoung_KIL 13:5e445169cf83 159 // Speed_R = 0;
jinyoung_KIL 13:5e445169cf83 160 // }
jinyoung_KIL 13:5e445169cf83 161 // pwmb = Speed_R;
Jeonghoon 14:2fafd2e7dea8 162
Jeonghoon 14:2fafd2e7dea8 163 //max -= 5;
Jeonghoon 15:b56a97811380 164 ki -= 500;
jinyoung_KIL 12:96209c979a7f 165 }
jinyoung_KIL 12:96209c979a7f 166
jinyoung_KIL 12:96209c979a7f 167 void ReceiverIR::speed_l(float sp_l){
jinyoung_KIL 12:96209c979a7f 168 Speed_L = sp_l;
jinyoung_KIL 13:5e445169cf83 169 if(Speed_L > 0.6){
jinyoung_KIL 13:5e445169cf83 170 Speed_L = 0.6;
jinyoung_KIL 13:5e445169cf83 171 }
jinyoung_KIL 13:5e445169cf83 172 pwma = Speed_L;
jinyoung_KIL 12:96209c979a7f 173 }
jinyoung_KIL 12:96209c979a7f 174
jinyoung_KIL 12:96209c979a7f 175 void ReceiverIR::speed_r(float sp_r){
jinyoung_KIL 12:96209c979a7f 176 Speed_R = sp_r;
jinyoung_KIL 13:5e445169cf83 177 if(Speed_R > 0.6){
jinyoung_KIL 13:5e445169cf83 178 Speed_R = 0.6;
jinyoung_KIL 13:5e445169cf83 179 }
jinyoung_KIL 13:5e445169cf83 180 pwmb = Speed_R;
jinyoung_KIL 12:96209c979a7f 181 }
jinyoung_KIL 12:96209c979a7f 182
jinyoung_KIL 12:96209c979a7f 183 void ReceiverIR::forward(void){
jinyoung_KIL 12:96209c979a7f 184 pwma = Speed_L;
jinyoung_KIL 12:96209c979a7f 185 pwmb = Speed_R;
jinyoung_KIL 12:96209c979a7f 186
jinyoung_KIL 12:96209c979a7f 187 ain0 = 1;
jinyoung_KIL 12:96209c979a7f 188 ain1 = 0;
jinyoung_KIL 12:96209c979a7f 189
jinyoung_KIL 12:96209c979a7f 190 bin0 = 1;
jinyoung_KIL 12:96209c979a7f 191 bin1 = 0;
jinyoung_KIL 12:96209c979a7f 192 }
jinyoung_KIL 12:96209c979a7f 193 void ReceiverIR::backward(void){
jinyoung_KIL 12:96209c979a7f 194
jinyoung_KIL 12:96209c979a7f 195 pwma = Speed_L;
jinyoung_KIL 12:96209c979a7f 196 pwmb = Speed_R;
jinyoung_KIL 12:96209c979a7f 197
jinyoung_KIL 12:96209c979a7f 198 ain0 = 0;
jinyoung_KIL 12:96209c979a7f 199 ain1 = 1;
jinyoung_KIL 12:96209c979a7f 200
jinyoung_KIL 12:96209c979a7f 201 bin0 = 0;
jinyoung_KIL 12:96209c979a7f 202 bin1 = 1;
jinyoung_KIL 12:96209c979a7f 203 }
jinyoung_KIL 12:96209c979a7f 204
jinyoung_KIL 12:96209c979a7f 205 void ReceiverIR::left(void){
jinyoung_KIL 12:96209c979a7f 206 pwma = Speed_L*0.8;
jinyoung_KIL 12:96209c979a7f 207 pwmb = Speed_R;
jinyoung_KIL 12:96209c979a7f 208
jinyoung_KIL 12:96209c979a7f 209 ain0 = 1;
jinyoung_KIL 12:96209c979a7f 210 ain1 = 0;
jinyoung_KIL 12:96209c979a7f 211
jinyoung_KIL 12:96209c979a7f 212 bin0 = 1;
jinyoung_KIL 12:96209c979a7f 213 bin1 = 0;
jinyoung_KIL 12:96209c979a7f 214 }
jinyoung_KIL 12:96209c979a7f 215 void ReceiverIR::right(void){
jinyoung_KIL 12:96209c979a7f 216 pwma = Speed_L;
jinyoung_KIL 12:96209c979a7f 217 pwmb = Speed_R*0.85;
jinyoung_KIL 12:96209c979a7f 218
jinyoung_KIL 12:96209c979a7f 219 ain0 = 1;
jinyoung_KIL 12:96209c979a7f 220 ain1 = 0;
jinyoung_KIL 12:96209c979a7f 221
jinyoung_KIL 12:96209c979a7f 222 bin0 = 1;
jinyoung_KIL 12:96209c979a7f 223 bin1 = 0;
jinyoung_KIL 12:96209c979a7f 224 }
jinyoung_KIL 12:96209c979a7f 225 void ReceiverIR::stop(void){
jinyoung_KIL 12:96209c979a7f 226
jinyoung_KIL 12:96209c979a7f 227 pwma = 0;
jinyoung_KIL 12:96209c979a7f 228 pwmb = 0;
jinyoung_KIL 12:96209c979a7f 229
jinyoung_KIL 12:96209c979a7f 230 ain0 = 0;
jinyoung_KIL 12:96209c979a7f 231 ain1 = 0;
jinyoung_KIL 12:96209c979a7f 232
jinyoung_KIL 12:96209c979a7f 233 bin0 = 0;
jinyoung_KIL 12:96209c979a7f 234 bin1 = 0;
jinyoung_KIL 12:96209c979a7f 235 }
shintamainjp 0:ec264f4ce158 236
shintamainjp 0:ec264f4ce158 237 void ReceiverIR::init_state(void) {
shintamainjp 0:ec264f4ce158 238 work.c1 = -1;
shintamainjp 0:ec264f4ce158 239 work.c2 = -1;
shintamainjp 0:ec264f4ce158 240 work.c3 = -1;
shintamainjp 0:ec264f4ce158 241 work.d1 = -1;
shintamainjp 0:ec264f4ce158 242 work.d2 = -1;
shintamainjp 9:dcfdac59ef74 243 work.state = Idle;
shintamainjp 0:ec264f4ce158 244 data.format = RemoteIR::UNKNOWN;
shintamainjp 0:ec264f4ce158 245 data.bitcount = 0;
shintamainjp 0:ec264f4ce158 246 timer.stop();
shintamainjp 0:ec264f4ce158 247 timer.reset();
shintamainjp 0:ec264f4ce158 248 for (int i = 0; i < sizeof(data.buffer); i++) {
shintamainjp 0:ec264f4ce158 249 data.buffer[i] = 0;
shintamainjp 0:ec264f4ce158 250 }
shintamainjp 0:ec264f4ce158 251 }
jinyoung_KIL 12:96209c979a7f 252
shintamainjp 0:ec264f4ce158 253 void ReceiverIR::isr_wdt(void) {
shintamainjp 9:dcfdac59ef74 254 LOCK();
shintamainjp 0:ec264f4ce158 255 static int cnt = 0;
shintamainjp 9:dcfdac59ef74 256 if ((Idle != work.state) || ((0 <= work.c1) || (0 <= work.c2) || (0 <= work.c3) || (0 <= work.d1) || (0 <= work.d2))) {
shintamainjp 0:ec264f4ce158 257 cnt++;
shintamainjp 0:ec264f4ce158 258 if (cnt > 50) {
shintamainjp 0:ec264f4ce158 259 init_state();
shintamainjp 0:ec264f4ce158 260 cnt = 0;
shintamainjp 0:ec264f4ce158 261 }
shintamainjp 0:ec264f4ce158 262 } else {
shintamainjp 0:ec264f4ce158 263 cnt = 0;
shintamainjp 0:ec264f4ce158 264 }
shintamainjp 9:dcfdac59ef74 265 UNLOCK();
shintamainjp 0:ec264f4ce158 266 }
jinyoung_KIL 12:96209c979a7f 267
shintamainjp 0:ec264f4ce158 268 void ReceiverIR::isr_fall(void) {
shintamainjp 9:dcfdac59ef74 269 LOCK();
shintamainjp 9:dcfdac59ef74 270 switch (work.state) {
shintamainjp 0:ec264f4ce158 271 case Idle:
shintamainjp 0:ec264f4ce158 272 if (work.c1 < 0) {
shintamainjp 0:ec264f4ce158 273 timer.start();
shintamainjp 0:ec264f4ce158 274 work.c1 = timer.read_us();
shintamainjp 0:ec264f4ce158 275 } else {
shintamainjp 0:ec264f4ce158 276 work.c3 = timer.read_us();
shintamainjp 0:ec264f4ce158 277 int a = work.c2 - work.c1;
shintamainjp 0:ec264f4ce158 278 int b = work.c3 - work.c2;
shintamainjp 11:268cc2ab63bd 279 if (InRange(a, RemoteIR::TUS_NEC * 16) && InRange(b, RemoteIR::TUS_NEC * 8)) {
shintamainjp 0:ec264f4ce158 280 /*
shintamainjp 0:ec264f4ce158 281 * NEC.
shintamainjp 0:ec264f4ce158 282 */
shintamainjp 0:ec264f4ce158 283 data.format = RemoteIR::NEC;
shintamainjp 9:dcfdac59ef74 284 work.state = Receiving;
shintamainjp 0:ec264f4ce158 285 data.bitcount = 0;
shintamainjp 11:268cc2ab63bd 286 } else if (InRange(a, RemoteIR::TUS_NEC * 16) && InRange(b, RemoteIR::TUS_NEC * 4)) {
shintamainjp 0:ec264f4ce158 287 /*
shintamainjp 0:ec264f4ce158 288 * NEC Repeat.
shintamainjp 0:ec264f4ce158 289 */
shintamainjp 3:dfed23b157e6 290 data.format = RemoteIR::NEC_REPEAT;
shintamainjp 9:dcfdac59ef74 291 work.state = Received;
shintamainjp 0:ec264f4ce158 292 data.bitcount = 0;
shintamainjp 3:dfed23b157e6 293 work.c1 = -1;
shintamainjp 3:dfed23b157e6 294 work.c2 = -1;
shintamainjp 3:dfed23b157e6 295 work.c3 = -1;
shintamainjp 3:dfed23b157e6 296 work.d1 = -1;
shintamainjp 3:dfed23b157e6 297 work.d2 = -1;
shintamainjp 0:ec264f4ce158 298 } else {
shintamainjp 0:ec264f4ce158 299 init_state();
shintamainjp 0:ec264f4ce158 300 }
shintamainjp 0:ec264f4ce158 301 }
shintamainjp 0:ec264f4ce158 302 break;
shintamainjp 0:ec264f4ce158 303 case Receiving:
shintamainjp 0:ec264f4ce158 304 if (RemoteIR::NEC == data.format) {
shintamainjp 0:ec264f4ce158 305 work.d2 = timer.read_us();
shintamainjp 0:ec264f4ce158 306 int a = work.d2 - work.d1;
shintamainjp 11:268cc2ab63bd 307 if (InRange(a, RemoteIR::TUS_NEC * 3)) {
shintamainjp 0:ec264f4ce158 308 data.buffer[data.bitcount / 8] |= (1 << (data.bitcount % 8));
shintamainjp 11:268cc2ab63bd 309 } else if (InRange(a, RemoteIR::TUS_NEC * 1)) {
shintamainjp 0:ec264f4ce158 310 data.buffer[data.bitcount / 8] &= ~(1 << (data.bitcount % 8));
shintamainjp 0:ec264f4ce158 311 }
shintamainjp 0:ec264f4ce158 312 data.bitcount++;
shintamainjp 0:ec264f4ce158 313 /*
shintamainjp 0:ec264f4ce158 314 * Set timeout for tail detection automatically.
shintamainjp 0:ec264f4ce158 315 */
shintamainjp 0:ec264f4ce158 316 timeout.detach();
shintamainjp 11:268cc2ab63bd 317 timeout.attach_us(this, &ReceiverIR::isr_timeout, RemoteIR::TUS_NEC * 5);
shintamainjp 0:ec264f4ce158 318 }
shintamainjp 0:ec264f4ce158 319 break;
shintamainjp 0:ec264f4ce158 320 case Received:
shintamainjp 0:ec264f4ce158 321 break;
shintamainjp 0:ec264f4ce158 322 default:
shintamainjp 0:ec264f4ce158 323 break;
shintamainjp 0:ec264f4ce158 324 }
shintamainjp 9:dcfdac59ef74 325 UNLOCK();
shintamainjp 0:ec264f4ce158 326 }
jinyoung_KIL 12:96209c979a7f 327
shintamainjp 0:ec264f4ce158 328 void ReceiverIR::isr_rise(void) {
shintamainjp 9:dcfdac59ef74 329 LOCK();
shintamainjp 9:dcfdac59ef74 330 switch (work.state) {
shintamainjp 0:ec264f4ce158 331 case Idle:
shintamainjp 0:ec264f4ce158 332 if (0 <= work.c1) {
shintamainjp 0:ec264f4ce158 333 work.c2 = timer.read_us();
shintamainjp 0:ec264f4ce158 334 int a = work.c2 - work.c1;
shintamainjp 0:ec264f4ce158 335 } else {
shintamainjp 0:ec264f4ce158 336 init_state();
shintamainjp 0:ec264f4ce158 337 }
shintamainjp 0:ec264f4ce158 338 break;
shintamainjp 0:ec264f4ce158 339 case Receiving:
shintamainjp 0:ec264f4ce158 340 if (RemoteIR::NEC == data.format) {
shintamainjp 0:ec264f4ce158 341 work.d1 = timer.read_us();
jinyoung_KIL 12:96209c979a7f 342 }
shintamainjp 0:ec264f4ce158 343 break;
shintamainjp 0:ec264f4ce158 344 case Received:
shintamainjp 0:ec264f4ce158 345 break;
shintamainjp 0:ec264f4ce158 346 default:
shintamainjp 0:ec264f4ce158 347 break;
shintamainjp 0:ec264f4ce158 348 }
shintamainjp 9:dcfdac59ef74 349 UNLOCK();
shintamainjp 0:ec264f4ce158 350 }
jinyoung_KIL 12:96209c979a7f 351
shintamainjp 0:ec264f4ce158 352 void ReceiverIR::isr_timeout(void) {
shintamainjp 9:dcfdac59ef74 353 LOCK();
jinyoung_KIL 12:96209c979a7f 354
shintamainjp 9:dcfdac59ef74 355 if (work.state == Receiving) {
shintamainjp 9:dcfdac59ef74 356 work.state = Received;
shintamainjp 0:ec264f4ce158 357 work.c1 = -1;
shintamainjp 0:ec264f4ce158 358 work.c2 = -1;
shintamainjp 0:ec264f4ce158 359 work.c3 = -1;
shintamainjp 0:ec264f4ce158 360 work.d1 = -1;
shintamainjp 0:ec264f4ce158 361 work.d2 = -1;
shintamainjp 0:ec264f4ce158 362 }
shintamainjp 9:dcfdac59ef74 363 UNLOCK();
shintamainjp 0:ec264f4ce158 364 }
jinyoung_KIL 12:96209c979a7f 365