miso dengaku / RemoteIR

Fork of RemoteIR by Shinichiro Nakamura

Committer:
misodengaku
Date:
Sat Mar 17 14:42:15 2018 +0000
Revision:
12:d86179332137
Parent:
11:268cc2ab63bd
support level inversion

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shintamainjp 0:ec264f4ce158 1 /**
shintamainjp 9:dcfdac59ef74 2 * IR receiver (Version 0.0.4)
shintamainjp 0:ec264f4ce158 3 *
shintamainjp 0:ec264f4ce158 4 * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems)
shintamainjp 0:ec264f4ce158 5 * http://shinta.main.jp/
shintamainjp 0:ec264f4ce158 6 */
shintamainjp 0:ec264f4ce158 7
shintamainjp 0:ec264f4ce158 8 #include "ReceiverIR.h"
shintamainjp 0:ec264f4ce158 9
shintamainjp 10:c54fb1204d1e 10 #define LOCK()
shintamainjp 10:c54fb1204d1e 11 #define UNLOCK()
shintamainjp 0:ec264f4ce158 12
shintamainjp 0:ec264f4ce158 13 #define InRange(x,y) ((((y) * 0.7) < (x)) && ((x) < ((y) * 1.3)))
shintamainjp 0:ec264f4ce158 14
shintamainjp 9:dcfdac59ef74 15 /**
shintamainjp 9:dcfdac59ef74 16 * Constructor.
shintamainjp 9:dcfdac59ef74 17 *
shintamainjp 9:dcfdac59ef74 18 * @param rxpin Pin for receive IR signal.
shintamainjp 9:dcfdac59ef74 19 */
misodengaku 12:d86179332137 20 ReceiverIR::ReceiverIR(PinName rxpin, bool rxInversion) : evt(rxpin)
misodengaku 12:d86179332137 21 {
shintamainjp 9:dcfdac59ef74 22 init_state();
misodengaku 12:d86179332137 23 if (rxInversion) {
misodengaku 12:d86179332137 24 evt.fall(this, &ReceiverIR::isr_rise);
misodengaku 12:d86179332137 25 evt.rise(this, &ReceiverIR::isr_fall);
misodengaku 12:d86179332137 26
misodengaku 12:d86179332137 27 } else {
misodengaku 12:d86179332137 28 evt.fall(this, &ReceiverIR::isr_fall);
misodengaku 12:d86179332137 29 evt.rise(this, &ReceiverIR::isr_rise);
misodengaku 12:d86179332137 30 }
shintamainjp 0:ec264f4ce158 31 evt.mode(PullUp);
shintamainjp 0:ec264f4ce158 32 ticker.attach_us(this, &ReceiverIR::isr_wdt, 10 * 1000);
shintamainjp 0:ec264f4ce158 33 }
shintamainjp 0:ec264f4ce158 34
shintamainjp 9:dcfdac59ef74 35 /**
shintamainjp 9:dcfdac59ef74 36 * Destructor.
shintamainjp 9:dcfdac59ef74 37 */
misodengaku 12:d86179332137 38 ReceiverIR::~ReceiverIR()
misodengaku 12:d86179332137 39 {
shintamainjp 1:4adf16017a0f 40 }
shintamainjp 1:4adf16017a0f 41
shintamainjp 9:dcfdac59ef74 42 /**
shintamainjp 9:dcfdac59ef74 43 * Get state.
shintamainjp 9:dcfdac59ef74 44 *
shintamainjp 9:dcfdac59ef74 45 * @return Current state.
shintamainjp 9:dcfdac59ef74 46 */
misodengaku 12:d86179332137 47 ReceiverIR::State ReceiverIR::getState()
misodengaku 12:d86179332137 48 {
shintamainjp 9:dcfdac59ef74 49 LOCK();
shintamainjp 9:dcfdac59ef74 50 State s = work.state;
shintamainjp 9:dcfdac59ef74 51 UNLOCK();
shintamainjp 0:ec264f4ce158 52 return s;
shintamainjp 0:ec264f4ce158 53 }
shintamainjp 0:ec264f4ce158 54
shintamainjp 9:dcfdac59ef74 55 /**
shintamainjp 9:dcfdac59ef74 56 * Get data.
shintamainjp 9:dcfdac59ef74 57 *
shintamainjp 9:dcfdac59ef74 58 * @param format Pointer to format.
shintamainjp 9:dcfdac59ef74 59 * @param buf Buffer of a data.
shintamainjp 9:dcfdac59ef74 60 * @param bitlength Bit length of the buffer.
shintamainjp 9:dcfdac59ef74 61 *
shintamainjp 9:dcfdac59ef74 62 * @return Data bit length.
shintamainjp 9:dcfdac59ef74 63 */
misodengaku 12:d86179332137 64 int ReceiverIR::getData(RemoteIR::Format *format, uint8_t *buf, int bitlength)
misodengaku 12:d86179332137 65 {
shintamainjp 9:dcfdac59ef74 66 LOCK();
shintamainjp 0:ec264f4ce158 67
shintamainjp 4:2304646f6ff5 68 if (bitlength < data.bitcount) {
shintamainjp 9:dcfdac59ef74 69 UNLOCK();
shintamainjp 0:ec264f4ce158 70 return -1;
shintamainjp 0:ec264f4ce158 71 }
shintamainjp 0:ec264f4ce158 72
shintamainjp 9:dcfdac59ef74 73 const int nbits = data.bitcount;
shintamainjp 6:e57504fc802e 74 const int nbytes = data.bitcount / 8 + (((data.bitcount % 8) != 0) ? 1 : 0);
shintamainjp 0:ec264f4ce158 75 *format = data.format;
shintamainjp 5:e158c85c55ff 76 for (int i = 0; i < nbytes; i++) {
shintamainjp 0:ec264f4ce158 77 buf[i] = data.buffer[i];
shintamainjp 0:ec264f4ce158 78 }
shintamainjp 0:ec264f4ce158 79
shintamainjp 0:ec264f4ce158 80 init_state();
shintamainjp 0:ec264f4ce158 81
shintamainjp 9:dcfdac59ef74 82 UNLOCK();
shintamainjp 9:dcfdac59ef74 83 return nbits;
shintamainjp 0:ec264f4ce158 84 }
shintamainjp 0:ec264f4ce158 85
misodengaku 12:d86179332137 86 void ReceiverIR::init_state(void)
misodengaku 12:d86179332137 87 {
shintamainjp 0:ec264f4ce158 88 work.c1 = -1;
shintamainjp 0:ec264f4ce158 89 work.c2 = -1;
shintamainjp 0:ec264f4ce158 90 work.c3 = -1;
shintamainjp 0:ec264f4ce158 91 work.d1 = -1;
shintamainjp 0:ec264f4ce158 92 work.d2 = -1;
shintamainjp 9:dcfdac59ef74 93 work.state = Idle;
shintamainjp 0:ec264f4ce158 94 data.format = RemoteIR::UNKNOWN;
shintamainjp 0:ec264f4ce158 95 data.bitcount = 0;
shintamainjp 0:ec264f4ce158 96 timer.stop();
shintamainjp 0:ec264f4ce158 97 timer.reset();
shintamainjp 0:ec264f4ce158 98 for (int i = 0; i < sizeof(data.buffer); i++) {
shintamainjp 0:ec264f4ce158 99 data.buffer[i] = 0;
shintamainjp 0:ec264f4ce158 100 }
shintamainjp 0:ec264f4ce158 101 }
shintamainjp 0:ec264f4ce158 102
misodengaku 12:d86179332137 103 void ReceiverIR::isr_wdt(void)
misodengaku 12:d86179332137 104 {
shintamainjp 9:dcfdac59ef74 105 LOCK();
shintamainjp 0:ec264f4ce158 106 static int cnt = 0;
shintamainjp 9:dcfdac59ef74 107 if ((Idle != work.state) || ((0 <= work.c1) || (0 <= work.c2) || (0 <= work.c3) || (0 <= work.d1) || (0 <= work.d2))) {
shintamainjp 0:ec264f4ce158 108 cnt++;
shintamainjp 0:ec264f4ce158 109 if (cnt > 50) {
shintamainjp 11:268cc2ab63bd 110 #if 0
shintamainjp 0:ec264f4ce158 111 printf("# WDT [c1=%d, c2=%d, c3=%d, d1=%d, d2=%d, state=%d, format=%d, bitcount=%d]\n",
shintamainjp 0:ec264f4ce158 112 work.c1,
shintamainjp 0:ec264f4ce158 113 work.c2,
shintamainjp 0:ec264f4ce158 114 work.c3,
shintamainjp 0:ec264f4ce158 115 work.d1,
shintamainjp 0:ec264f4ce158 116 work.d2,
shintamainjp 9:dcfdac59ef74 117 work.state,
shintamainjp 0:ec264f4ce158 118 data.format,
shintamainjp 0:ec264f4ce158 119 data.bitcount);
shintamainjp 0:ec264f4ce158 120 #endif
shintamainjp 0:ec264f4ce158 121 init_state();
shintamainjp 0:ec264f4ce158 122 cnt = 0;
shintamainjp 0:ec264f4ce158 123 }
shintamainjp 0:ec264f4ce158 124 } else {
shintamainjp 0:ec264f4ce158 125 cnt = 0;
shintamainjp 0:ec264f4ce158 126 }
shintamainjp 9:dcfdac59ef74 127 UNLOCK();
shintamainjp 0:ec264f4ce158 128 }
shintamainjp 0:ec264f4ce158 129
misodengaku 12:d86179332137 130 void ReceiverIR::isr_fall(void)
misodengaku 12:d86179332137 131 {
shintamainjp 9:dcfdac59ef74 132 LOCK();
shintamainjp 9:dcfdac59ef74 133 switch (work.state) {
shintamainjp 0:ec264f4ce158 134 case Idle:
shintamainjp 0:ec264f4ce158 135 if (work.c1 < 0) {
shintamainjp 0:ec264f4ce158 136 timer.start();
shintamainjp 0:ec264f4ce158 137 work.c1 = timer.read_us();
shintamainjp 0:ec264f4ce158 138 } else {
shintamainjp 0:ec264f4ce158 139 work.c3 = timer.read_us();
shintamainjp 0:ec264f4ce158 140 int a = work.c2 - work.c1;
shintamainjp 0:ec264f4ce158 141 int b = work.c3 - work.c2;
shintamainjp 11:268cc2ab63bd 142 if (InRange(a, RemoteIR::TUS_NEC * 16) && InRange(b, RemoteIR::TUS_NEC * 8)) {
shintamainjp 0:ec264f4ce158 143 /*
shintamainjp 0:ec264f4ce158 144 * NEC.
shintamainjp 0:ec264f4ce158 145 */
shintamainjp 0:ec264f4ce158 146 data.format = RemoteIR::NEC;
shintamainjp 9:dcfdac59ef74 147 work.state = Receiving;
shintamainjp 0:ec264f4ce158 148 data.bitcount = 0;
shintamainjp 11:268cc2ab63bd 149 } else if (InRange(a, RemoteIR::TUS_NEC * 16) && InRange(b, RemoteIR::TUS_NEC * 4)) {
shintamainjp 0:ec264f4ce158 150 /*
shintamainjp 0:ec264f4ce158 151 * NEC Repeat.
shintamainjp 0:ec264f4ce158 152 */
shintamainjp 3:dfed23b157e6 153 data.format = RemoteIR::NEC_REPEAT;
shintamainjp 9:dcfdac59ef74 154 work.state = Received;
shintamainjp 0:ec264f4ce158 155 data.bitcount = 0;
shintamainjp 3:dfed23b157e6 156 work.c1 = -1;
shintamainjp 3:dfed23b157e6 157 work.c2 = -1;
shintamainjp 3:dfed23b157e6 158 work.c3 = -1;
shintamainjp 3:dfed23b157e6 159 work.d1 = -1;
shintamainjp 3:dfed23b157e6 160 work.d2 = -1;
shintamainjp 11:268cc2ab63bd 161 } else if (InRange(a, RemoteIR::TUS_AEHA * 8) && InRange(b, RemoteIR::TUS_AEHA * 4)) {
shintamainjp 0:ec264f4ce158 162 /*
shintamainjp 0:ec264f4ce158 163 * AEHA.
shintamainjp 0:ec264f4ce158 164 */
shintamainjp 0:ec264f4ce158 165 data.format = RemoteIR::AEHA;
shintamainjp 9:dcfdac59ef74 166 work.state = Receiving;
shintamainjp 0:ec264f4ce158 167 data.bitcount = 0;
shintamainjp 11:268cc2ab63bd 168 } else if (InRange(a, RemoteIR::TUS_AEHA * 8) && InRange(b, RemoteIR::TUS_AEHA * 8)) {
shintamainjp 0:ec264f4ce158 169 /*
shintamainjp 0:ec264f4ce158 170 * AEHA Repeat.
shintamainjp 0:ec264f4ce158 171 */
shintamainjp 3:dfed23b157e6 172 data.format = RemoteIR::AEHA_REPEAT;
shintamainjp 9:dcfdac59ef74 173 work.state = Received;
shintamainjp 0:ec264f4ce158 174 data.bitcount = 0;
shintamainjp 3:dfed23b157e6 175 work.c1 = -1;
shintamainjp 3:dfed23b157e6 176 work.c2 = -1;
shintamainjp 3:dfed23b157e6 177 work.c3 = -1;
shintamainjp 3:dfed23b157e6 178 work.d1 = -1;
shintamainjp 3:dfed23b157e6 179 work.d2 = -1;
shintamainjp 0:ec264f4ce158 180 } else {
shintamainjp 0:ec264f4ce158 181 init_state();
shintamainjp 0:ec264f4ce158 182 }
shintamainjp 0:ec264f4ce158 183 }
shintamainjp 0:ec264f4ce158 184 break;
shintamainjp 0:ec264f4ce158 185 case Receiving:
shintamainjp 0:ec264f4ce158 186 if (RemoteIR::NEC == data.format) {
shintamainjp 0:ec264f4ce158 187 work.d2 = timer.read_us();
shintamainjp 0:ec264f4ce158 188 int a = work.d2 - work.d1;
shintamainjp 11:268cc2ab63bd 189 if (InRange(a, RemoteIR::TUS_NEC * 3)) {
shintamainjp 0:ec264f4ce158 190 data.buffer[data.bitcount / 8] |= (1 << (data.bitcount % 8));
shintamainjp 11:268cc2ab63bd 191 } else if (InRange(a, RemoteIR::TUS_NEC * 1)) {
shintamainjp 0:ec264f4ce158 192 data.buffer[data.bitcount / 8] &= ~(1 << (data.bitcount % 8));
shintamainjp 0:ec264f4ce158 193 }
shintamainjp 0:ec264f4ce158 194 data.bitcount++;
shintamainjp 3:dfed23b157e6 195 #if 0
shintamainjp 0:ec264f4ce158 196 /*
shintamainjp 0:ec264f4ce158 197 * Length of NEC is always 32 bits.
shintamainjp 0:ec264f4ce158 198 */
shintamainjp 0:ec264f4ce158 199 if (32 <= data.bitcount) {
shintamainjp 0:ec264f4ce158 200 data.state = Received;
shintamainjp 0:ec264f4ce158 201 work.c1 = -1;
shintamainjp 0:ec264f4ce158 202 work.c2 = -1;
shintamainjp 0:ec264f4ce158 203 work.c3 = -1;
shintamainjp 0:ec264f4ce158 204 work.d1 = -1;
shintamainjp 0:ec264f4ce158 205 work.d2 = -1;
shintamainjp 0:ec264f4ce158 206 }
shintamainjp 0:ec264f4ce158 207 #else
shintamainjp 0:ec264f4ce158 208 /*
shintamainjp 0:ec264f4ce158 209 * Set timeout for tail detection automatically.
shintamainjp 0:ec264f4ce158 210 */
shintamainjp 0:ec264f4ce158 211 timeout.detach();
shintamainjp 11:268cc2ab63bd 212 timeout.attach_us(this, &ReceiverIR::isr_timeout, RemoteIR::TUS_NEC * 5);
shintamainjp 0:ec264f4ce158 213 #endif
shintamainjp 0:ec264f4ce158 214 } else if (RemoteIR::AEHA == data.format) {
shintamainjp 0:ec264f4ce158 215 work.d2 = timer.read_us();
shintamainjp 0:ec264f4ce158 216 int a = work.d2 - work.d1;
shintamainjp 11:268cc2ab63bd 217 if (InRange(a, RemoteIR::TUS_AEHA * 3)) {
shintamainjp 0:ec264f4ce158 218 data.buffer[data.bitcount / 8] |= (1 << (data.bitcount % 8));
shintamainjp 11:268cc2ab63bd 219 } else if (InRange(a, RemoteIR::TUS_AEHA * 1)) {
shintamainjp 0:ec264f4ce158 220 data.buffer[data.bitcount / 8] &= ~(1 << (data.bitcount % 8));
shintamainjp 0:ec264f4ce158 221 }
shintamainjp 0:ec264f4ce158 222 data.bitcount++;
shintamainjp 3:dfed23b157e6 223 #if 0
shintamainjp 0:ec264f4ce158 224 /*
shintamainjp 0:ec264f4ce158 225 * Typical length of AEHA is 48 bits.
shintamainjp 0:ec264f4ce158 226 * Please check a specification of your remote controller if you find a problem.
shintamainjp 0:ec264f4ce158 227 */
shintamainjp 0:ec264f4ce158 228 if (48 <= data.bitcount) {
shintamainjp 0:ec264f4ce158 229 data.state = Received;
shintamainjp 0:ec264f4ce158 230 work.c1 = -1;
shintamainjp 0:ec264f4ce158 231 work.c2 = -1;
shintamainjp 0:ec264f4ce158 232 work.c3 = -1;
shintamainjp 0:ec264f4ce158 233 work.d1 = -1;
shintamainjp 0:ec264f4ce158 234 work.d2 = -1;
shintamainjp 0:ec264f4ce158 235 }
shintamainjp 0:ec264f4ce158 236 #else
shintamainjp 0:ec264f4ce158 237 /*
shintamainjp 0:ec264f4ce158 238 * Set timeout for tail detection automatically.
shintamainjp 0:ec264f4ce158 239 */
shintamainjp 0:ec264f4ce158 240 timeout.detach();
shintamainjp 11:268cc2ab63bd 241 timeout.attach_us(this, &ReceiverIR::isr_timeout, RemoteIR::TUS_AEHA * 5);
shintamainjp 0:ec264f4ce158 242 #endif
shintamainjp 0:ec264f4ce158 243 } else if (RemoteIR::SONY == data.format) {
shintamainjp 0:ec264f4ce158 244 work.d1 = timer.read_us();
shintamainjp 0:ec264f4ce158 245 }
shintamainjp 0:ec264f4ce158 246 break;
shintamainjp 0:ec264f4ce158 247 case Received:
shintamainjp 0:ec264f4ce158 248 break;
shintamainjp 0:ec264f4ce158 249 default:
shintamainjp 0:ec264f4ce158 250 break;
shintamainjp 0:ec264f4ce158 251 }
shintamainjp 9:dcfdac59ef74 252 UNLOCK();
shintamainjp 0:ec264f4ce158 253 }
shintamainjp 0:ec264f4ce158 254
misodengaku 12:d86179332137 255 void ReceiverIR::isr_rise(void)
misodengaku 12:d86179332137 256 {
shintamainjp 9:dcfdac59ef74 257 LOCK();
shintamainjp 9:dcfdac59ef74 258 switch (work.state) {
shintamainjp 0:ec264f4ce158 259 case Idle:
shintamainjp 0:ec264f4ce158 260 if (0 <= work.c1) {
shintamainjp 0:ec264f4ce158 261 work.c2 = timer.read_us();
shintamainjp 0:ec264f4ce158 262 int a = work.c2 - work.c1;
shintamainjp 11:268cc2ab63bd 263 if (InRange(a, RemoteIR::TUS_SONY * 4)) {
shintamainjp 0:ec264f4ce158 264 data.format = RemoteIR::SONY;
shintamainjp 9:dcfdac59ef74 265 work.state = Receiving;
shintamainjp 0:ec264f4ce158 266 data.bitcount = 0;
shintamainjp 0:ec264f4ce158 267 } else {
shintamainjp 0:ec264f4ce158 268 static const int MINIMUM_LEADER_WIDTH = 150;
shintamainjp 0:ec264f4ce158 269 if (a < MINIMUM_LEADER_WIDTH) {
shintamainjp 0:ec264f4ce158 270 init_state();
shintamainjp 0:ec264f4ce158 271 }
shintamainjp 0:ec264f4ce158 272 }
shintamainjp 0:ec264f4ce158 273 } else {
shintamainjp 0:ec264f4ce158 274 init_state();
shintamainjp 0:ec264f4ce158 275 }
shintamainjp 0:ec264f4ce158 276 break;
shintamainjp 0:ec264f4ce158 277 case Receiving:
shintamainjp 0:ec264f4ce158 278 if (RemoteIR::NEC == data.format) {
shintamainjp 0:ec264f4ce158 279 work.d1 = timer.read_us();
shintamainjp 0:ec264f4ce158 280 } else if (RemoteIR::AEHA == data.format) {
shintamainjp 0:ec264f4ce158 281 work.d1 = timer.read_us();
shintamainjp 0:ec264f4ce158 282 } else if (RemoteIR::SONY == data.format) {
shintamainjp 0:ec264f4ce158 283 work.d2 = timer.read_us();
shintamainjp 0:ec264f4ce158 284 int a = work.d2 - work.d1;
shintamainjp 11:268cc2ab63bd 285 if (InRange(a, RemoteIR::TUS_SONY * 2)) {
shintamainjp 0:ec264f4ce158 286 data.buffer[data.bitcount / 8] |= (1 << (data.bitcount % 8));
shintamainjp 11:268cc2ab63bd 287 } else if (InRange(a, RemoteIR::TUS_SONY * 1)) {
shintamainjp 0:ec264f4ce158 288 data.buffer[data.bitcount / 8] &= ~(1 << (data.bitcount % 8));
shintamainjp 0:ec264f4ce158 289 }
shintamainjp 0:ec264f4ce158 290 data.bitcount++;
shintamainjp 3:dfed23b157e6 291 #if 0
shintamainjp 0:ec264f4ce158 292 /*
shintamainjp 9:dcfdac59ef74 293 * How do I know the correct length? (6bits, 12bits, 15bits, 20bits...)
shintamainjp 0:ec264f4ce158 294 * By a model only?
shintamainjp 0:ec264f4ce158 295 * Please check a specification of your remote controller if you find a problem.
shintamainjp 0:ec264f4ce158 296 */
shintamainjp 0:ec264f4ce158 297 if (12 <= data.bitcount) {
shintamainjp 0:ec264f4ce158 298 data.state = Received;
shintamainjp 0:ec264f4ce158 299 work.c1 = -1;
shintamainjp 0:ec264f4ce158 300 work.c2 = -1;
shintamainjp 0:ec264f4ce158 301 work.c3 = -1;
shintamainjp 0:ec264f4ce158 302 work.d1 = -1;
shintamainjp 0:ec264f4ce158 303 work.d2 = -1;
shintamainjp 0:ec264f4ce158 304 }
shintamainjp 0:ec264f4ce158 305 #else
shintamainjp 0:ec264f4ce158 306 /*
shintamainjp 0:ec264f4ce158 307 * Set timeout for tail detection automatically.
shintamainjp 0:ec264f4ce158 308 */
shintamainjp 0:ec264f4ce158 309 timeout.detach();
shintamainjp 11:268cc2ab63bd 310 timeout.attach_us(this, &ReceiverIR::isr_timeout, RemoteIR::TUS_SONY * 4);
shintamainjp 0:ec264f4ce158 311 #endif
shintamainjp 0:ec264f4ce158 312 }
shintamainjp 0:ec264f4ce158 313 break;
shintamainjp 0:ec264f4ce158 314 case Received:
shintamainjp 0:ec264f4ce158 315 break;
shintamainjp 0:ec264f4ce158 316 default:
shintamainjp 0:ec264f4ce158 317 break;
shintamainjp 0:ec264f4ce158 318 }
shintamainjp 9:dcfdac59ef74 319 UNLOCK();
shintamainjp 0:ec264f4ce158 320 }
shintamainjp 0:ec264f4ce158 321
misodengaku 12:d86179332137 322 void ReceiverIR::isr_timeout(void)
misodengaku 12:d86179332137 323 {
shintamainjp 9:dcfdac59ef74 324 LOCK();
shintamainjp 9:dcfdac59ef74 325 #if 0
shintamainjp 9:dcfdac59ef74 326 printf("# TIMEOUT [c1=%d, c2=%d, c3=%d, d1=%d, d2=%d, state=%d, format=%d, bitcount=%d]\n",
shintamainjp 9:dcfdac59ef74 327 work.c1,
shintamainjp 9:dcfdac59ef74 328 work.c2,
shintamainjp 9:dcfdac59ef74 329 work.c3,
shintamainjp 9:dcfdac59ef74 330 work.d1,
shintamainjp 9:dcfdac59ef74 331 work.d2,
shintamainjp 9:dcfdac59ef74 332 work.state,
shintamainjp 9:dcfdac59ef74 333 data.format,
shintamainjp 9:dcfdac59ef74 334 data.bitcount);
shintamainjp 9:dcfdac59ef74 335 #endif
shintamainjp 9:dcfdac59ef74 336 if (work.state == Receiving) {
shintamainjp 9:dcfdac59ef74 337 work.state = Received;
shintamainjp 0:ec264f4ce158 338 work.c1 = -1;
shintamainjp 0:ec264f4ce158 339 work.c2 = -1;
shintamainjp 0:ec264f4ce158 340 work.c3 = -1;
shintamainjp 0:ec264f4ce158 341 work.d1 = -1;
shintamainjp 0:ec264f4ce158 342 work.d2 = -1;
shintamainjp 0:ec264f4ce158 343 }
shintamainjp 9:dcfdac59ef74 344 UNLOCK();
shintamainjp 0:ec264f4ce158 345 }