IRC Helicopter "HonyBee" Propo decode test program

Dependencies:   RemoteIR mbed

これは、赤外線コントロールヘリコプター"HonyBee"のPropoからの送信データを解析して、PCに表示させるテストプログラムです。 詳しくは、 http://suupen-make.blogspot.jp/2013/06/irc-helicopter-honybeembedtest-program.html を参照してください。

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?

UserRevisionLine numberNew contents of line
suupen 0:f9e49220c97a 1 /**
suupen 0:f9e49220c97a 2 * IR Propo Decode class
suupen 0:f9e49220c97a 3 * Version 0.0 130623
suupen 0:f9e49220c97a 4 *
suupen 0:f9e49220c97a 5 * Writer:suupen
suupen 0:f9e49220c97a 6 */
suupen 0:f9e49220c97a 7 #include "CodecHonyBee.h"
suupen 0:f9e49220c97a 8 #include "DecodeHonyBee.h"
suupen 0:f9e49220c97a 9
suupen 0:f9e49220c97a 10 /**
suupen 0:f9e49220c97a 11 * Constructor DecodeHonyBee
suupen 0:f9e49220c97a 12 *
suupen 0:f9e49220c97a 13 */
suupen 0:f9e49220c97a 14 DecodeHonyBee::DecodeHonyBee(){
suupen 0:f9e49220c97a 15 // nothing
suupen 0:f9e49220c97a 16 }
suupen 0:f9e49220c97a 17
suupen 0:f9e49220c97a 18 /**
suupen 0:f9e49220c97a 19 * Destructor.
suupen 0:f9e49220c97a 20 */
suupen 0:f9e49220c97a 21 DecodeHonyBee::~DecodeHonyBee(){
suupen 0:f9e49220c97a 22 // nothing
suupen 0:f9e49220c97a 23 }
suupen 0:f9e49220c97a 24
suupen 0:f9e49220c97a 25
suupen 0:f9e49220c97a 26 /**
suupen 0:f9e49220c97a 27 * Get HonyBee controller data.
suupen 0:f9e49220c97a 28 *
suupen 0:f9e49220c97a 29 * @param data Pointer to propo recive data.
suupen 0:f9e49220c97a 30 *
suupen 0:f9e49220c97a 31 * @param HonyBee Pointer to HonyBee.
suupen 0:f9e49220c97a 32 *
suupen 0:f9e49220c97a 33 * @return receive answer : ture:recive ok false:recive ng.
suupen 0:f9e49220c97a 34 */
suupen 0:f9e49220c97a 35 bool DecodeHonyBee::decode(uint8_t *data, CodecHonyBee::honyBeePropo_t *honyBee) {
suupen 0:f9e49220c97a 36
suupen 0:f9e49220c97a 37 bool ans = false;
suupen 0:f9e49220c97a 38 uint8_t wk1 = 0,wk2;
suupen 0:f9e49220c97a 39 int8_t ladder;
suupen 0:f9e49220c97a 40 uint8_t dat[3];
suupen 0:f9e49220c97a 41 uint8_t i;
suupen 0:f9e49220c97a 42
suupen 0:f9e49220c97a 43 // MSB to LSB
suupen 0:f9e49220c97a 44 for(i = 0; i < 8; i++){
suupen 0:f9e49220c97a 45
suupen 0:f9e49220c97a 46 dat[0] = dat[0] << 1;
suupen 0:f9e49220c97a 47 dat[1] = dat[1] << 1;
suupen 0:f9e49220c97a 48 dat[2] = dat[2] << 1;
suupen 0:f9e49220c97a 49
suupen 0:f9e49220c97a 50 if(((data[0] >> i) & 0x01) == 0x01){dat[0] |= 0x01;}
suupen 0:f9e49220c97a 51 if(((data[1] >> i) & 0x01) == 0x01){dat[1] |= 0x01;}
suupen 0:f9e49220c97a 52 if(((data[2] >> i) & 0x01) == 0x01){dat[2] |= 0x01;}
suupen 0:f9e49220c97a 53 }
suupen 0:f9e49220c97a 54
suupen 0:f9e49220c97a 55 // parity calculate
suupen 0:f9e49220c97a 56 for(uint8_t c=0; c < 8; c+=2){
suupen 0:f9e49220c97a 57 wk1 += ((dat[0] >> c) & 0x03);
suupen 0:f9e49220c97a 58 wk1 += ((dat[1] >> c) & 0x03);
suupen 0:f9e49220c97a 59 }
suupen 0:f9e49220c97a 60 wk1 += ((dat[2] >> 6) & 0x02);
suupen 0:f9e49220c97a 61
suupen 0:f9e49220c97a 62 wk1 &= 0x03;
suupen 0:f9e49220c97a 63 if(wk1 == 0x00){wk1 = 0x03;}
suupen 0:f9e49220c97a 64 else if(wk1 == 0x03){wk1 = 0x00;}
suupen 0:f9e49220c97a 65
suupen 0:f9e49220c97a 66 wk2 = (dat[2] >> 5) & 0x03;
suupen 0:f9e49220c97a 67
suupen 0:f9e49220c97a 68 if(wk1 == wk2){
suupen 0:f9e49220c97a 69 // parity ok
suupen 0:f9e49220c97a 70 ans =true;
suupen 0:f9e49220c97a 71 honyBee->count++;
suupen 0:f9e49220c97a 72 honyBee->band = (dat[0] >> 2) & 0x03;
suupen 0:f9e49220c97a 73 honyBee->slottle = ((dat[0] << 2) & 0x0c) | ((dat[1] >> 6) & 0x03);
suupen 0:f9e49220c97a 74 honyBee->trim = (dat[1] >> 2) & 0x0f;
suupen 0:f9e49220c97a 75 ladder = ((dat[1] << 1) & 0x06) | ((dat[2] >> 7) & 0x01);
suupen 0:f9e49220c97a 76 if(0x04 == (ladder & 0x04)){ladder |= 0xf8;}
suupen 0:f9e49220c97a 77 honyBee->ladder = ladder;
suupen 0:f9e49220c97a 78 }
suupen 0:f9e49220c97a 79 else{
suupen 0:f9e49220c97a 80 // parity ng
suupen 0:f9e49220c97a 81 // nothing
suupen 0:f9e49220c97a 82 ans = false;
suupen 0:f9e49220c97a 83 honyBee->band = 0x0F;
suupen 0:f9e49220c97a 84 }
suupen 0:f9e49220c97a 85
suupen 0:f9e49220c97a 86 return ans;
suupen 0:f9e49220c97a 87 }
suupen 0:f9e49220c97a 88
suupen 0:f9e49220c97a 89
suupen 0:f9e49220c97a 90 /**
suupen 0:f9e49220c97a 91 * Normalize HonyBee data.
suupen 0:f9e49220c97a 92 *
suupen 0:f9e49220c97a 93 * @param buf Pointer to propo recive data.
suupen 0:f9e49220c97a 94 *
suupen 0:f9e49220c97a 95 * @param propo normalize propo data.
suupen 0:f9e49220c97a 96 *
suupen 0:f9e49220c97a 97 * @return receive answer : ture:recive ok false:recive ng.
suupen 0:f9e49220c97a 98 */
suupen 0:f9e49220c97a 99 bool DecodeHonyBee::normalize(uint8_t *buf, CodecHonyBee::normalizePropo_t *propo) {
suupen 0:f9e49220c97a 100 bool ans = false;
suupen 0:f9e49220c97a 101 bool decodeCheck =false;
suupen 0:f9e49220c97a 102
suupen 0:f9e49220c97a 103 CodecHonyBee::honyBeePropo_t HonyBee;
suupen 0:f9e49220c97a 104 decodeCheck = DecodeHonyBee::decode(buf, &HonyBee);
suupen 0:f9e49220c97a 105
suupen 0:f9e49220c97a 106 if(decodeCheck == true){
suupen 0:f9e49220c97a 107 ans = true;
suupen 0:f9e49220c97a 108
suupen 0:f9e49220c97a 109 propo->count++;// = HonyBee.count;
suupen 0:f9e49220c97a 110
suupen 0:f9e49220c97a 111 switch(HonyBee.band){
suupen 0:f9e49220c97a 112 case CodecHonyBee::BAND_A:
suupen 0:f9e49220c97a 113 propo->band = 1;
suupen 0:f9e49220c97a 114 break;
suupen 0:f9e49220c97a 115 case CodecHonyBee::BAND_B:
suupen 0:f9e49220c97a 116 propo->band = 2;
suupen 0:f9e49220c97a 117 break;
suupen 0:f9e49220c97a 118 case CodecHonyBee::BAND_C:
suupen 0:f9e49220c97a 119 propo->band = 3;
suupen 0:f9e49220c97a 120 break;
suupen 0:f9e49220c97a 121 default:
suupen 0:f9e49220c97a 122 propo->band = 0;
suupen 0:f9e49220c97a 123 break;
suupen 0:f9e49220c97a 124 }
suupen 0:f9e49220c97a 125
suupen 0:f9e49220c97a 126 if(HonyBee.slottle > CodecHonyBee::SLOTTLE_MAX){HonyBee.slottle = CodecHonyBee::SLOTTLE_MAX;}
suupen 0:f9e49220c97a 127 propo->slottle = (float)HonyBee.slottle / CodecHonyBee::SLOTTLE_MAX;
suupen 0:f9e49220c97a 128
suupen 0:f9e49220c97a 129 if(HonyBee.ladder >= 0){
suupen 0:f9e49220c97a 130 if(HonyBee.ladder > CodecHonyBee::LADDER_MAX){HonyBee.ladder = CodecHonyBee::LADDER_MAX;}
suupen 0:f9e49220c97a 131 propo->ladder = (float)HonyBee.ladder / CodecHonyBee::LADDER_MAX;
suupen 0:f9e49220c97a 132 }
suupen 0:f9e49220c97a 133 else{
suupen 0:f9e49220c97a 134 if(HonyBee.ladder < CodecHonyBee::LADDER_MIN){HonyBee.ladder = CodecHonyBee::LADDER_MIN;}
suupen 0:f9e49220c97a 135 propo->ladder = -((float)HonyBee.ladder / CodecHonyBee::LADDER_MIN);
suupen 0:f9e49220c97a 136 }
suupen 0:f9e49220c97a 137
suupen 0:f9e49220c97a 138 #if 0 // not use
suupen 0:f9e49220c97a 139 if(HonyBee.elevator >= 0){
suupen 0:f9e49220c97a 140 if(HonyBee.elevator > CodecHonyBee::ELEVATOR_MAX){HonyBee.elevator = CodecHonyBee::ELEVATOR_MAX;}
suupen 0:f9e49220c97a 141 propo->elevator = (float)HonyBee.elevator / CodecHonyBee::ELEVATOR_MAX;
suupen 0:f9e49220c97a 142 }
suupen 0:f9e49220c97a 143 else{
suupen 0:f9e49220c97a 144 if(HonyBee.elevator < CodecHonyBee::ELEVATOR_MIN){HonyBee.elevator = CodecHonyBee::ELEVATOR_MIN;}
suupen 0:f9e49220c97a 145 propo->elevator = -((float)HonyBee.elevator / CodecHonyBee::ELEVATOR_MIN);
suupen 0:f9e49220c97a 146 }
suupen 0:f9e49220c97a 147 #endif // not use
suupen 0:f9e49220c97a 148
suupen 0:f9e49220c97a 149 switch (HonyBee.trim){
suupen 0:f9e49220c97a 150 case CodecHonyBee::TRIM_LEFT:
suupen 0:f9e49220c97a 151 propo->trim = -1.0;
suupen 0:f9e49220c97a 152 break;
suupen 0:f9e49220c97a 153 case CodecHonyBee::TRIM_RIGHT:
suupen 0:f9e49220c97a 154 propo->trim = 1.0;
suupen 0:f9e49220c97a 155 break;
suupen 0:f9e49220c97a 156 default:
suupen 0:f9e49220c97a 157 // case CodecHonyBee::TRIM_NEUTRAL:
suupen 0:f9e49220c97a 158 propo->trim = 0.0;
suupen 0:f9e49220c97a 159 break;
suupen 0:f9e49220c97a 160 }
suupen 0:f9e49220c97a 161
suupen 0:f9e49220c97a 162 }
suupen 0:f9e49220c97a 163 else{
suupen 0:f9e49220c97a 164 // NG
suupen 0:f9e49220c97a 165 ans = false;
suupen 0:f9e49220c97a 166 }
suupen 0:f9e49220c97a 167
suupen 0:f9e49220c97a 168 return ans;
suupen 0:f9e49220c97a 169 }
suupen 0:f9e49220c97a 170
suupen 0:f9e49220c97a 171
suupen 0:f9e49220c97a 172