![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
テストモード追加、LED有効化 left -> SerialRX, Data Recieve Complete , Serial Tx , Light Tx
Dependencies: XBee mbed NetServicesMin
serial_process/serialRecieve.cpp@2:dec6319cf02c, 2012-04-18 (annotated)
- Committer:
- recotana
- Date:
- Wed Apr 18 07:52:46 2012 +0000
- Revision:
- 2:dec6319cf02c
- Parent:
- 1:36eb173eb52b
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
recotana | 0:42adca80439c | 1 | #include "mbed.h" |
recotana | 0:42adca80439c | 2 | #include "types.h" |
recotana | 0:42adca80439c | 3 | #include "config.h" |
recotana | 0:42adca80439c | 4 | #include "serialRecieve.h" |
recotana | 0:42adca80439c | 5 | #include "data_models.h" |
recotana | 0:42adca80439c | 6 | #include "layer_frame.h" |
recotana | 1:36eb173eb52b | 7 | #include "leds.h" |
recotana | 1:36eb173eb52b | 8 | |
recotana | 1:36eb173eb52b | 9 | extern Serial pc; |
recotana | 0:42adca80439c | 10 | |
recotana | 0:42adca80439c | 11 | Payload payload; |
recotana | 0:42adca80439c | 12 | uint8_t *payByte; |
recotana | 0:42adca80439c | 13 | uint8_t payByteIndex; |
recotana | 0:42adca80439c | 14 | |
recotana | 0:42adca80439c | 15 | |
recotana | 0:42adca80439c | 16 | uint16_t oldFrameNumber; |
recotana | 0:42adca80439c | 17 | |
recotana | 0:42adca80439c | 18 | uint8_t rxBuff[256]; |
recotana | 0:42adca80439c | 19 | uint8_t rxBuffWindex; |
recotana | 0:42adca80439c | 20 | uint8_t rxBuffRindex; |
recotana | 0:42adca80439c | 21 | |
recotana | 0:42adca80439c | 22 | Timer timeout; |
recotana | 0:42adca80439c | 23 | bool isFirstByte; |
recotana | 0:42adca80439c | 24 | |
recotana | 0:42adca80439c | 25 | extern bool isSendContinueous; |
recotana | 1:36eb173eb52b | 26 | extern PrefSender spref; |
recotana | 0:42adca80439c | 27 | |
recotana | 0:42adca80439c | 28 | uint8_t serialRead(void){ |
recotana | 0:42adca80439c | 29 | uint8_t data=rxBuff[rxBuffRindex]; |
recotana | 0:42adca80439c | 30 | rxBuffRindex++; |
recotana | 0:42adca80439c | 31 | return data; |
recotana | 0:42adca80439c | 32 | } |
recotana | 0:42adca80439c | 33 | bool serialCheck(void){ |
recotana | 0:42adca80439c | 34 | return (rxBuffWindex!=rxBuffRindex); |
recotana | 0:42adca80439c | 35 | } |
recotana | 0:42adca80439c | 36 | |
recotana | 0:42adca80439c | 37 | void serialFlush(void){ |
recotana | 0:42adca80439c | 38 | rxBuffWindex=0; |
recotana | 0:42adca80439c | 39 | rxBuffRindex=0; |
recotana | 0:42adca80439c | 40 | LPC_UART0->FCR = (7 << 0); |
recotana | 0:42adca80439c | 41 | payByteIndex=0; |
recotana | 0:42adca80439c | 42 | isFirstByte=true; |
recotana | 0:42adca80439c | 43 | } |
recotana | 0:42adca80439c | 44 | |
recotana | 0:42adca80439c | 45 | |
recotana | 0:42adca80439c | 46 | |
recotana | 0:42adca80439c | 47 | void rxCallback(void){ |
recotana | 1:36eb173eb52b | 48 | uint8_t data=pc.getc(); |
recotana | 0:42adca80439c | 49 | // if(data==0x0A && rxBuff[rxBuffWindex-1]== 0x0D) rxBuff[rxBuffWindex-1]=data; //LF escape |
recotana | 0:42adca80439c | 50 | // else |
recotana | 0:42adca80439c | 51 | rxBuff[rxBuffWindex]=data; |
recotana | 0:42adca80439c | 52 | rxBuffWindex++; |
recotana | 0:42adca80439c | 53 | |
recotana | 0:42adca80439c | 54 | if(isFirstByte){ |
recotana | 0:42adca80439c | 55 | timeout.reset(); |
recotana | 0:42adca80439c | 56 | timeout.start(); |
recotana | 0:42adca80439c | 57 | |
recotana | 0:42adca80439c | 58 | } |
recotana | 0:42adca80439c | 59 | else if(timeout.read_ms() > 50){ |
recotana | 0:42adca80439c | 60 | serialFlush(); |
recotana | 0:42adca80439c | 61 | timeout.stop(); |
recotana | 0:42adca80439c | 62 | timeout.reset(); |
recotana | 1:36eb173eb52b | 63 | pc.printf("--------------timeout!!\r\n"); |
recotana | 0:42adca80439c | 64 | } |
recotana | 0:42adca80439c | 65 | |
recotana | 0:42adca80439c | 66 | } |
recotana | 0:42adca80439c | 67 | |
recotana | 0:42adca80439c | 68 | void serialSendPayload(Payload *_payload){ |
recotana | 0:42adca80439c | 69 | |
recotana | 1:36eb173eb52b | 70 | ledSerialTx(); |
recotana | 1:36eb173eb52b | 71 | |
recotana | 0:42adca80439c | 72 | uint8_t *data = (uint8_t*)_payload; |
recotana | 0:42adca80439c | 73 | |
recotana | 1:36eb173eb52b | 74 | pc.printf("\r\n---return Send Payload data \r\n"); |
recotana | 1:36eb173eb52b | 75 | |
recotana | 1:36eb173eb52b | 76 | for(uint8_t i=0 ; i<data[0] ; i++){ |
recotana | 1:36eb173eb52b | 77 | pc.printf("%d:%02X ",i,data[i]); |
recotana | 1:36eb173eb52b | 78 | } |
recotana | 1:36eb173eb52b | 79 | |
recotana | 1:36eb173eb52b | 80 | pc.printf("\r\n---end\r\n"); |
recotana | 0:42adca80439c | 81 | } |
recotana | 0:42adca80439c | 82 | |
recotana | 0:42adca80439c | 83 | |
recotana | 0:42adca80439c | 84 | void serialInit(void){ |
recotana | 0:42adca80439c | 85 | |
recotana | 1:36eb173eb52b | 86 | pc.baud(115200); |
recotana | 1:36eb173eb52b | 87 | pc.attach(&rxCallback); |
recotana | 1:36eb173eb52b | 88 | pc.format(8, Serial::None, 1); |
recotana | 0:42adca80439c | 89 | serialFlush(); |
recotana | 0:42adca80439c | 90 | |
recotana | 0:42adca80439c | 91 | payByte = (uint8_t*)&payload; |
recotana | 0:42adca80439c | 92 | /* |
recotana | 0:42adca80439c | 93 | payByte[0]=sizeof(Payload); |
recotana | 0:42adca80439c | 94 | payByte[1]=0; |
recotana | 0:42adca80439c | 95 | |
recotana | 0:42adca80439c | 96 | payByte = (uint8_t*)&payload.ftype; |
recotana | 0:42adca80439c | 97 | */ |
recotana | 0:42adca80439c | 98 | |
recotana | 0:42adca80439c | 99 | timeout.stop(); |
recotana | 0:42adca80439c | 100 | timeout.reset(); |
recotana | 0:42adca80439c | 101 | } |
recotana | 0:42adca80439c | 102 | |
recotana | 0:42adca80439c | 103 | |
recotana | 0:42adca80439c | 104 | |
recotana | 0:42adca80439c | 105 | void routing(Payload *_payload) |
recotana | 0:42adca80439c | 106 | { |
recotana | 0:42adca80439c | 107 | |
recotana | 0:42adca80439c | 108 | switch(_payload->frame.message.command) |
recotana | 0:42adca80439c | 109 | { |
recotana | 1:36eb173eb52b | 110 | |
recotana | 1:36eb173eb52b | 111 | |
recotana | 0:42adca80439c | 112 | case SEND_SINGLE: |
recotana | 0:42adca80439c | 113 | { |
recotana | 1:36eb173eb52b | 114 | spref.continueusMode=0; |
recotana | 1:36eb173eb52b | 115 | #ifndef _SERVER_TEST_MODE_ |
recotana | 0:42adca80439c | 116 | sendPayload(_payload); |
recotana | 1:36eb173eb52b | 117 | #else |
recotana | 1:36eb173eb52b | 118 | serialSendPayload(_payload); |
recotana | 1:36eb173eb52b | 119 | #endif |
recotana | 1:36eb173eb52b | 120 | |
recotana | 1:36eb173eb52b | 121 | DBGF("******* single send! *******\r\n"); |
recotana | 0:42adca80439c | 122 | |
recotana | 0:42adca80439c | 123 | } |
recotana | 0:42adca80439c | 124 | break; |
recotana | 0:42adca80439c | 125 | |
recotana | 0:42adca80439c | 126 | case SEND_CONTINUEOUS: |
recotana | 0:42adca80439c | 127 | { |
recotana | 1:36eb173eb52b | 128 | spref.continueusMode=1; |
recotana | 1:36eb173eb52b | 129 | #ifndef _SERVER_TEST_MODE_ |
recotana | 0:42adca80439c | 130 | sendPayload(_payload); |
recotana | 1:36eb173eb52b | 131 | #else |
recotana | 1:36eb173eb52b | 132 | serialSendPayload(_payload); |
recotana | 1:36eb173eb52b | 133 | #endif |
recotana | 0:42adca80439c | 134 | |
recotana | 1:36eb173eb52b | 135 | DBGF("******* continueous send! *******\r\n"); |
recotana | 0:42adca80439c | 136 | } |
recotana | 0:42adca80439c | 137 | break; |
recotana | 0:42adca80439c | 138 | |
recotana | 0:42adca80439c | 139 | case SEND_CONT_STOP: |
recotana | 0:42adca80439c | 140 | { |
recotana | 1:36eb173eb52b | 141 | spref.continueusMode=0; |
recotana | 1:36eb173eb52b | 142 | memcpy(_payload->frame.message.data,&spref,sizeof(PrefSender)); |
recotana | 1:36eb173eb52b | 143 | serialSendPayload(_payload); |
recotana | 0:42adca80439c | 144 | |
recotana | 1:36eb173eb52b | 145 | DBGF("******* continueous stop! *******\r\n"); |
recotana | 0:42adca80439c | 146 | } |
recotana | 0:42adca80439c | 147 | break; |
recotana | 0:42adca80439c | 148 | |
recotana | 0:42adca80439c | 149 | case RECIEVE: |
recotana | 0:42adca80439c | 150 | { |
recotana | 1:36eb173eb52b | 151 | DBGF("****** recieve! *******\r\n"); |
recotana | 0:42adca80439c | 152 | } |
recotana | 0:42adca80439c | 153 | break; |
recotana | 0:42adca80439c | 154 | |
recotana | 1:36eb173eb52b | 155 | case PING: |
recotana | 0:42adca80439c | 156 | { |
recotana | 1:36eb173eb52b | 157 | memcpy(_payload->frame.message.data,&spref,sizeof(PrefSender)); |
recotana | 1:36eb173eb52b | 158 | _payload->frame.message.command=PING; |
recotana | 1:36eb173eb52b | 159 | _payload->frame.message.device=LED_SENDER; |
recotana | 1:36eb173eb52b | 160 | serialSendPayload(_payload); |
recotana | 1:36eb173eb52b | 161 | DBGF("******* ping! **************"); |
recotana | 0:42adca80439c | 162 | } |
recotana | 0:42adca80439c | 163 | break; |
recotana | 0:42adca80439c | 164 | |
recotana | 0:42adca80439c | 165 | case SET_TX_GAIN: |
recotana | 0:42adca80439c | 166 | { |
recotana | 1:36eb173eb52b | 167 | spref.gainData.gain=_payload->frame.message.data[0]; |
recotana | 1:36eb173eb52b | 168 | spref.gainData.middleLevel=_payload->frame.message.data[1]; |
recotana | 1:36eb173eb52b | 169 | memcpy(_payload->frame.message.data,&spref,sizeof(PrefSender)); |
recotana | 1:36eb173eb52b | 170 | setTxLevel(&spref.gainData); |
recotana | 1:36eb173eb52b | 171 | |
recotana | 1:36eb173eb52b | 172 | serialSendPayload(_payload); |
recotana | 0:42adca80439c | 173 | |
recotana | 1:36eb173eb52b | 174 | DBGV("******* set tx gain:%d mid level:%d *******\r\n",spref.gainData.gain,spref.gainData.middleLevel); |
recotana | 0:42adca80439c | 175 | } |
recotana | 0:42adca80439c | 176 | break; |
recotana | 1:36eb173eb52b | 177 | |
recotana | 1:36eb173eb52b | 178 | case SET_LIGHT_CONTROL: |
recotana | 1:36eb173eb52b | 179 | { |
recotana | 1:36eb173eb52b | 180 | spref.lightsw = _payload->frame.message.data[0]; |
recotana | 1:36eb173eb52b | 181 | memcpy(_payload->frame.message.data,&spref,sizeof(PrefSender)); |
recotana | 1:36eb173eb52b | 182 | // _payload->frame.message.device=LED_SENDER; |
recotana | 1:36eb173eb52b | 183 | // _payload->frame.message.command=SET_LIGHT_CONTROL; |
recotana | 1:36eb173eb52b | 184 | lightIlluminateChange(spref.lightsw); |
recotana | 1:36eb173eb52b | 185 | |
recotana | 1:36eb173eb52b | 186 | serialSendPayload(_payload); |
recotana | 1:36eb173eb52b | 187 | DBGV("******* SET_LIGHT_CONTROL! %d **************", spref.lightsw); |
recotana | 1:36eb173eb52b | 188 | } |
recotana | 1:36eb173eb52b | 189 | break; |
recotana | 1:36eb173eb52b | 190 | |
recotana | 0:42adca80439c | 191 | } |
recotana | 0:42adca80439c | 192 | |
recotana | 0:42adca80439c | 193 | } |
recotana | 0:42adca80439c | 194 | |
recotana | 0:42adca80439c | 195 | void readProcess(void){ |
recotana | 0:42adca80439c | 196 | |
recotana | 0:42adca80439c | 197 | |
recotana | 0:42adca80439c | 198 | if(!serialCheck()) return; |
recotana | 1:36eb173eb52b | 199 | |
recotana | 1:36eb173eb52b | 200 | ledSerialRx(); |
recotana | 0:42adca80439c | 201 | |
recotana | 0:42adca80439c | 202 | payByte[payByteIndex]=serialRead(); |
recotana | 0:42adca80439c | 203 | payByteIndex++; |
recotana | 1:36eb173eb52b | 204 | |
recotana | 0:42adca80439c | 205 | if(payByteIndex<(sizeof(Payload))) return; |
recotana | 0:42adca80439c | 206 | |
recotana | 0:42adca80439c | 207 | payByteIndex=0; |
recotana | 1:36eb173eb52b | 208 | |
recotana | 1:36eb173eb52b | 209 | ledSerialDataCmp(); |
recotana | 0:42adca80439c | 210 | |
recotana | 1:36eb173eb52b | 211 | networkToPayload(&payload); |
recotana | 0:42adca80439c | 212 | /* |
recotana | 0:42adca80439c | 213 | if( payload.frame.message.frameNumber == oldFrameNumber){ |
recotana | 0:42adca80439c | 214 | |
recotana | 0:42adca80439c | 215 | DBGF("-------- same frame.. \r\n"); |
recotana | 0:42adca80439c | 216 | return; |
recotana | 0:42adca80439c | 217 | } |
recotana | 0:42adca80439c | 218 | */ |
recotana | 1:36eb173eb52b | 219 | // dumpPayload(&payload); |
recotana | 0:42adca80439c | 220 | |
recotana | 0:42adca80439c | 221 | |
recotana | 0:42adca80439c | 222 | |
recotana | 0:42adca80439c | 223 | |
recotana | 0:42adca80439c | 224 | routing(&payload); |
recotana | 0:42adca80439c | 225 | |
recotana | 0:42adca80439c | 226 | oldFrameNumber= payload.frame.message.frameNumber; |
recotana | 0:42adca80439c | 227 | |
recotana | 0:42adca80439c | 228 | |
recotana | 0:42adca80439c | 229 | DBGF("\r\n******* tx send! *******\r\n"); |
recotana | 0:42adca80439c | 230 | } |
recotana | 0:42adca80439c | 231 |