IRC Helicopter "HonyBee" Propo decode test program
これは、赤外線コントロールヘリコプター"HonyBee"のPropoからの送信データを解析して、PCに表示させるテストプログラムです。 詳しくは、 http://suupen-make.blogspot.jp/2013/06/irc-helicopter-honybeembedtest-program.html を参照してください。
main.cpp@0:f9e49220c97a, 2013-06-23 (annotated)
- Committer:
- suupen
- Date:
- Sun Jun 23 07:28:06 2013 +0000
- Revision:
- 0:f9e49220c97a
IRC Helicopter "HonyBee" Propo decode test program
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
suupen | 0:f9e49220c97a | 1 | /** |
suupen | 0:f9e49220c97a | 2 | * HonyBee Propo Decode test program |
suupen | 0:f9e49220c97a | 3 | * 130623 |
suupen | 0:f9e49220c97a | 4 | * |
suupen | 0:f9e49220c97a | 5 | * Writer:suupen |
suupen | 0:f9e49220c97a | 6 | * |
suupen | 0:f9e49220c97a | 7 | * <circuit diagram> |
suupen | 0:f9e49220c97a | 8 | * VU(mbed) |
suupen | 0:f9e49220c97a | 9 | * | |
suupen | 0:f9e49220c97a | 10 | * |Vcc |
suupen | 0:f9e49220c97a | 11 | * --- (PL-IRM2161) IR Reciver |
suupen | 0:f9e49220c97a | 12 | * | |Vout |
suupen | 0:f9e49220c97a | 13 | * | |--- p5(mbed) |
suupen | 0:f9e49220c97a | 14 | * | | |
suupen | 0:f9e49220c97a | 15 | * --- |
suupen | 0:f9e49220c97a | 16 | * |GND |
suupen | 0:f9e49220c97a | 17 | * | |
suupen | 0:f9e49220c97a | 18 | * GND(mbed) |
suupen | 0:f9e49220c97a | 19 | * |
suupen | 0:f9e49220c97a | 20 | * <PC termnal soft> |
suupen | 0:f9e49220c97a | 21 | * tera term |
suupen | 0:f9e49220c97a | 22 | * baudrate:38400[bps] |
suupen | 0:f9e49220c97a | 23 | * data:8[bit] |
suupen | 0:f9e49220c97a | 24 | * parity:none |
suupen | 0:f9e49220c97a | 25 | * stopbit:1[bit] |
suupen | 0:f9e49220c97a | 26 | */ |
suupen | 0:f9e49220c97a | 27 | |
suupen | 0:f9e49220c97a | 28 | |
suupen | 0:f9e49220c97a | 29 | //#define PROPO_RAW_DATA // ari: zyusin data hyoji nasi:HonyBee kaiseki data hyoji |
suupen | 0:f9e49220c97a | 30 | //#define HONYBEE_NORMALIZE // ari: HonyBee data seikika hyoji nasi: HonyBee data tujyo hyoji |
suupen | 0:f9e49220c97a | 31 | |
suupen | 0:f9e49220c97a | 32 | #include "mbed.h" |
suupen | 0:f9e49220c97a | 33 | #include "ReceiverIR.h" |
suupen | 0:f9e49220c97a | 34 | |
suupen | 0:f9e49220c97a | 35 | #ifndef PROPO_RAW_DATA |
suupen | 0:f9e49220c97a | 36 | #include "CodecHonyBee.h" |
suupen | 0:f9e49220c97a | 37 | #include "DecodeHonyBee.h" |
suupen | 0:f9e49220c97a | 38 | #endif // PROPO_RAW_DATA |
suupen | 0:f9e49220c97a | 39 | |
suupen | 0:f9e49220c97a | 40 | void display_format(RemoteIR::Format format); |
suupen | 0:f9e49220c97a | 41 | void display_binary(uint8_t *buf, uint8_t cnt); |
suupen | 0:f9e49220c97a | 42 | |
suupen | 0:f9e49220c97a | 43 | Serial pc(USBTX,USBRX); |
suupen | 0:f9e49220c97a | 44 | |
suupen | 0:f9e49220c97a | 45 | |
suupen | 0:f9e49220c97a | 46 | ReceiverIR ir_rx(p5); |
suupen | 0:f9e49220c97a | 47 | |
suupen | 0:f9e49220c97a | 48 | RemoteIR::Format format; |
suupen | 0:f9e49220c97a | 49 | |
suupen | 0:f9e49220c97a | 50 | #ifndef PROPO_RAW_DATA |
suupen | 0:f9e49220c97a | 51 | DecodeHonyBee HonyBee; |
suupen | 0:f9e49220c97a | 52 | CodecHonyBee::honyBeePropo_t HonyBeeData; |
suupen | 0:f9e49220c97a | 53 | |
suupen | 0:f9e49220c97a | 54 | #ifdef HONYBEE_NORMALIZE |
suupen | 0:f9e49220c97a | 55 | CodecHonyBee::normalizePropo_t normalize; |
suupen | 0:f9e49220c97a | 56 | #endif // HONYBEE_NORMALIZE |
suupen | 0:f9e49220c97a | 57 | |
suupen | 0:f9e49220c97a | 58 | #endif // PROPO_RAW_DATA |
suupen | 0:f9e49220c97a | 59 | |
suupen | 0:f9e49220c97a | 60 | |
suupen | 0:f9e49220c97a | 61 | uint8_t buf[32]; |
suupen | 0:f9e49220c97a | 62 | int bitcount; |
suupen | 0:f9e49220c97a | 63 | |
suupen | 0:f9e49220c97a | 64 | DigitalOut myled(LED1); |
suupen | 0:f9e49220c97a | 65 | DigitalOut led2(LED2); |
suupen | 0:f9e49220c97a | 66 | DigitalIn irtest(p20); |
suupen | 0:f9e49220c97a | 67 | |
suupen | 0:f9e49220c97a | 68 | |
suupen | 0:f9e49220c97a | 69 | int main(){ |
suupen | 0:f9e49220c97a | 70 | pc.baud(38400); |
suupen | 0:f9e49220c97a | 71 | while(1){ |
suupen | 0:f9e49220c97a | 72 | |
suupen | 0:f9e49220c97a | 73 | myled =~myled; |
suupen | 0:f9e49220c97a | 74 | led2 = irtest; |
suupen | 0:f9e49220c97a | 75 | |
suupen | 0:f9e49220c97a | 76 | |
suupen | 0:f9e49220c97a | 77 | |
suupen | 0:f9e49220c97a | 78 | #ifdef PROPO_RAW_DATA |
suupen | 0:f9e49220c97a | 79 | if (ir_rx.getState() == ReceiverIR::Received) { |
suupen | 0:f9e49220c97a | 80 | bitcount = ir_rx.getData(&format, buf, sizeof(buf) * 8); |
suupen | 0:f9e49220c97a | 81 | |
suupen | 0:f9e49220c97a | 82 | display_format(format); |
suupen | 0:f9e49220c97a | 83 | display_binary(buf, ((bitcount + 7) / 8)); |
suupen | 0:f9e49220c97a | 84 | } |
suupen | 0:f9e49220c97a | 85 | else{ |
suupen | 0:f9e49220c97a | 86 | #if 0 |
suupen | 0:f9e49220c97a | 87 | switch(ir_rx.getState()){ |
suupen | 0:f9e49220c97a | 88 | |
suupen | 0:f9e49220c97a | 89 | case ReceiverIR::Idle: |
suupen | 0:f9e49220c97a | 90 | printf("Idele\n"); |
suupen | 0:f9e49220c97a | 91 | break; |
suupen | 0:f9e49220c97a | 92 | case ReceiverIR::Receiving: |
suupen | 0:f9e49220c97a | 93 | printf("Receiveing\n"); |
suupen | 0:f9e49220c97a | 94 | break; |
suupen | 0:f9e49220c97a | 95 | case ReceiverIR::Received: |
suupen | 0:f9e49220c97a | 96 | printf("Received\n"); |
suupen | 0:f9e49220c97a | 97 | break; |
suupen | 0:f9e49220c97a | 98 | } |
suupen | 0:f9e49220c97a | 99 | #endif |
suupen | 0:f9e49220c97a | 100 | } |
suupen | 0:f9e49220c97a | 101 | #endif // PROPO_RAW_DATA |
suupen | 0:f9e49220c97a | 102 | |
suupen | 0:f9e49220c97a | 103 | #ifndef PROPO_RAW_DATA |
suupen | 0:f9e49220c97a | 104 | if (ir_rx.getState() == ReceiverIR::Received) { |
suupen | 0:f9e49220c97a | 105 | bitcount = ir_rx.getData(&format, buf, sizeof(buf) * 8); |
suupen | 0:f9e49220c97a | 106 | #ifdef HONYBEE_NORMALIZE |
suupen | 0:f9e49220c97a | 107 | bool ans = HonyBee.normalize(buf, &normalize); |
suupen | 0:f9e49220c97a | 108 | if(ans == true){ |
suupen | 0:f9e49220c97a | 109 | printf("count = %02x band = %1d slottle = %f trim = %f ladder = %f elevator = %f\n",normalize.count,normalize.band,normalize.slottle,normalize.trim,normalize.ladder, normalize.elevator); |
suupen | 0:f9e49220c97a | 110 | } |
suupen | 0:f9e49220c97a | 111 | else{ |
suupen | 0:f9e49220c97a | 112 | printf("NG\n"); |
suupen | 0:f9e49220c97a | 113 | } |
suupen | 0:f9e49220c97a | 114 | #else // ~HONYBEE_NORMALIZE |
suupen | 0:f9e49220c97a | 115 | bool ans = HonyBee.decode(buf, &HonyBeeData); |
suupen | 0:f9e49220c97a | 116 | if(ans == true){ |
suupen | 0:f9e49220c97a | 117 | printf("count = %02x band = %02x slottle = %03d trim = %03d ladder = %03d \n",HonyBeeData.count,HonyBeeData.band,HonyBeeData.slottle,HonyBeeData.trim,HonyBeeData.ladder); |
suupen | 0:f9e49220c97a | 118 | } |
suupen | 0:f9e49220c97a | 119 | else{ |
suupen | 0:f9e49220c97a | 120 | printf("NG\n"); |
suupen | 0:f9e49220c97a | 121 | } |
suupen | 0:f9e49220c97a | 122 | #endif// HONYBEE_NORMALIZE |
suupen | 0:f9e49220c97a | 123 | |
suupen | 0:f9e49220c97a | 124 | } |
suupen | 0:f9e49220c97a | 125 | #endif // PROPO_RAW_DATA |
suupen | 0:f9e49220c97a | 126 | |
suupen | 0:f9e49220c97a | 127 | } |
suupen | 0:f9e49220c97a | 128 | |
suupen | 0:f9e49220c97a | 129 | } |
suupen | 0:f9e49220c97a | 130 | |
suupen | 0:f9e49220c97a | 131 | /** |
suupen | 0:f9e49220c97a | 132 | * Display a format of a data. |
suupen | 0:f9e49220c97a | 133 | */ |
suupen | 0:f9e49220c97a | 134 | void display_format(RemoteIR::Format format) { |
suupen | 0:f9e49220c97a | 135 | switch (format) { |
suupen | 0:f9e49220c97a | 136 | case RemoteIR::UNKNOWN: |
suupen | 0:f9e49220c97a | 137 | pc.printf("????????"); |
suupen | 0:f9e49220c97a | 138 | break; |
suupen | 0:f9e49220c97a | 139 | case RemoteIR::NEC: |
suupen | 0:f9e49220c97a | 140 | pc.printf("NEC "); |
suupen | 0:f9e49220c97a | 141 | break; |
suupen | 0:f9e49220c97a | 142 | case RemoteIR::NEC_REPEAT: |
suupen | 0:f9e49220c97a | 143 | pc.printf("NEC (R)"); |
suupen | 0:f9e49220c97a | 144 | break; |
suupen | 0:f9e49220c97a | 145 | case RemoteIR::AEHA: |
suupen | 0:f9e49220c97a | 146 | pc.printf("AEHA "); |
suupen | 0:f9e49220c97a | 147 | break; |
suupen | 0:f9e49220c97a | 148 | case RemoteIR::AEHA_REPEAT: |
suupen | 0:f9e49220c97a | 149 | pc.printf("AEHA (R)"); |
suupen | 0:f9e49220c97a | 150 | break; |
suupen | 0:f9e49220c97a | 151 | case RemoteIR::SONY: //HONEY_BEE: |
suupen | 0:f9e49220c97a | 152 | pc.printf("SONY or HONEY_BEE "); |
suupen | 0:f9e49220c97a | 153 | break; |
suupen | 0:f9e49220c97a | 154 | |
suupen | 0:f9e49220c97a | 155 | #ifdef Swift_PROTCOL |
suupen | 0:f9e49220c97a | 156 | case RemoteIR::Swift: |
suupen | 0:f9e49220c97a | 157 | pc.printf("Swift "); |
suupen | 0:f9e49220c97a | 158 | break; |
suupen | 0:f9e49220c97a | 159 | #endif // Swift_PROPO |
suupen | 0:f9e49220c97a | 160 | default: |
suupen | 0:f9e49220c97a | 161 | pc.printf("unknown "); |
suupen | 0:f9e49220c97a | 162 | break; |
suupen | 0:f9e49220c97a | 163 | } |
suupen | 0:f9e49220c97a | 164 | } |
suupen | 0:f9e49220c97a | 165 | |
suupen | 0:f9e49220c97a | 166 | void display_binary(uint8_t *buf, uint8_t cnt){ |
suupen | 0:f9e49220c97a | 167 | uint8_t i; |
suupen | 0:f9e49220c97a | 168 | uint8_t bitcnt; |
suupen | 0:f9e49220c97a | 169 | uint8_t dat; |
suupen | 0:f9e49220c97a | 170 | uint16_t checkbit; |
suupen | 0:f9e49220c97a | 171 | |
suupen | 0:f9e49220c97a | 172 | for(i = 0; i < cnt; i++){ |
suupen | 0:f9e49220c97a | 173 | checkbit = 0x0080; |
suupen | 0:f9e49220c97a | 174 | dat = *(buf + i); |
suupen | 0:f9e49220c97a | 175 | printf("%02x:",dat); |
suupen | 0:f9e49220c97a | 176 | for(bitcnt = 0; bitcnt < 8; bitcnt++){ |
suupen | 0:f9e49220c97a | 177 | if( checkbit & dat){printf("1");} |
suupen | 0:f9e49220c97a | 178 | else {printf("0");} |
suupen | 0:f9e49220c97a | 179 | |
suupen | 0:f9e49220c97a | 180 | checkbit = checkbit >> 1; |
suupen | 0:f9e49220c97a | 181 | if(bitcnt == 3){printf(" ");} |
suupen | 0:f9e49220c97a | 182 | } |
suupen | 0:f9e49220c97a | 183 | printf(" "); |
suupen | 0:f9e49220c97a | 184 | } |
suupen | 0:f9e49220c97a | 185 | printf("\n"); |
suupen | 0:f9e49220c97a | 186 | } |
suupen | 0:f9e49220c97a | 187 | |
suupen | 0:f9e49220c97a | 188 | |
suupen | 0:f9e49220c97a | 189 |