テストモード追加、LED有効化 left -> SerialRX, Data Recieve Complete , Serial Tx , Light Tx

Dependencies:   XBee mbed NetServicesMin

Committer:
recotana
Date:
Wed Apr 18 07:52:46 2012 +0000
Revision:
2:dec6319cf02c
Parent:
1:36eb173eb52b

        

Who changed what in which revision?

UserRevisionLine numberNew 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