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

Dependencies:   XBee mbed NetServicesMin

Committer:
recotana
Date:
Thu Mar 22 12:40:48 2012 +0000
Revision:
0:42adca80439c
Child:
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 0:42adca80439c 7
recotana 0:42adca80439c 8 Payload payload;
recotana 0:42adca80439c 9 uint8_t *payByte;
recotana 0:42adca80439c 10 uint8_t payByteIndex;
recotana 0:42adca80439c 11
recotana 0:42adca80439c 12
recotana 0:42adca80439c 13 uint16_t oldFrameNumber;
recotana 0:42adca80439c 14
recotana 0:42adca80439c 15 Serial serial(USBTX, USBRX);
recotana 0:42adca80439c 16 uint8_t rxBuff[256];
recotana 0:42adca80439c 17 uint8_t rxBuffWindex;
recotana 0:42adca80439c 18 uint8_t rxBuffRindex;
recotana 0:42adca80439c 19
recotana 0:42adca80439c 20 Timer timeout;
recotana 0:42adca80439c 21 bool isFirstByte;
recotana 0:42adca80439c 22
recotana 0:42adca80439c 23 extern bool isSendContinueous;
recotana 0:42adca80439c 24
recotana 0:42adca80439c 25 uint8_t serialRead(void){
recotana 0:42adca80439c 26 uint8_t data=rxBuff[rxBuffRindex];
recotana 0:42adca80439c 27 rxBuffRindex++;
recotana 0:42adca80439c 28 return data;
recotana 0:42adca80439c 29 }
recotana 0:42adca80439c 30 bool serialCheck(void){
recotana 0:42adca80439c 31 return (rxBuffWindex!=rxBuffRindex);
recotana 0:42adca80439c 32 }
recotana 0:42adca80439c 33
recotana 0:42adca80439c 34 void serialFlush(void){
recotana 0:42adca80439c 35 rxBuffWindex=0;
recotana 0:42adca80439c 36 rxBuffRindex=0;
recotana 0:42adca80439c 37 LPC_UART0->FCR = (7 << 0);
recotana 0:42adca80439c 38 payByteIndex=0;
recotana 0:42adca80439c 39 isFirstByte=true;
recotana 0:42adca80439c 40 }
recotana 0:42adca80439c 41
recotana 0:42adca80439c 42
recotana 0:42adca80439c 43
recotana 0:42adca80439c 44 void rxCallback(void){
recotana 0:42adca80439c 45 uint8_t data=serial.getc();
recotana 0:42adca80439c 46 // if(data==0x0A && rxBuff[rxBuffWindex-1]== 0x0D) rxBuff[rxBuffWindex-1]=data; //LF escape
recotana 0:42adca80439c 47 // else
recotana 0:42adca80439c 48 rxBuff[rxBuffWindex]=data;
recotana 0:42adca80439c 49 rxBuffWindex++;
recotana 0:42adca80439c 50
recotana 0:42adca80439c 51 if(isFirstByte){
recotana 0:42adca80439c 52 timeout.reset();
recotana 0:42adca80439c 53 timeout.start();
recotana 0:42adca80439c 54
recotana 0:42adca80439c 55 }
recotana 0:42adca80439c 56 else if(timeout.read_ms() > 50){
recotana 0:42adca80439c 57 serialFlush();
recotana 0:42adca80439c 58 timeout.stop();
recotana 0:42adca80439c 59 timeout.reset();
recotana 0:42adca80439c 60 printf("--------------timeout!!\r\n");
recotana 0:42adca80439c 61 }
recotana 0:42adca80439c 62
recotana 0:42adca80439c 63 }
recotana 0:42adca80439c 64
recotana 0:42adca80439c 65 void serialSendPayload(Payload *_payload){
recotana 0:42adca80439c 66
recotana 0:42adca80439c 67 uint8_t *data = (uint8_t*)_payload;
recotana 0:42adca80439c 68
recotana 0:42adca80439c 69 printf("---reply payload\r\n");
recotana 0:42adca80439c 70 for(uint8_t i=0 ; i<data[1] ; i++) printf("%d:%02X ",i,data[i]);
recotana 0:42adca80439c 71 printf("---end\r\n");
recotana 0:42adca80439c 72 }
recotana 0:42adca80439c 73
recotana 0:42adca80439c 74
recotana 0:42adca80439c 75 void serialInit(void){
recotana 0:42adca80439c 76
recotana 0:42adca80439c 77 serial.baud(115200);
recotana 0:42adca80439c 78 serial.attach(&rxCallback);
recotana 0:42adca80439c 79 serial.format(8, Serial::None, 1);
recotana 0:42adca80439c 80 serialFlush();
recotana 0:42adca80439c 81
recotana 0:42adca80439c 82 payByte = (uint8_t*)&payload;
recotana 0:42adca80439c 83 /*
recotana 0:42adca80439c 84 payByte[0]=sizeof(Payload);
recotana 0:42adca80439c 85 payByte[1]=0;
recotana 0:42adca80439c 86
recotana 0:42adca80439c 87 payByte = (uint8_t*)&payload.ftype;
recotana 0:42adca80439c 88 */
recotana 0:42adca80439c 89
recotana 0:42adca80439c 90 timeout.stop();
recotana 0:42adca80439c 91 timeout.reset();
recotana 0:42adca80439c 92 }
recotana 0:42adca80439c 93
recotana 0:42adca80439c 94
recotana 0:42adca80439c 95
recotana 0:42adca80439c 96 void routing(Payload *_payload)
recotana 0:42adca80439c 97 {
recotana 0:42adca80439c 98
recotana 0:42adca80439c 99 switch(_payload->frame.message.command)
recotana 0:42adca80439c 100 {
recotana 0:42adca80439c 101 case SEND_SINGLE:
recotana 0:42adca80439c 102 {
recotana 0:42adca80439c 103 isSendContinueous=false;
recotana 0:42adca80439c 104 sendPayload(_payload);
recotana 0:42adca80439c 105 _payload->frame.message.command=ACK;
recotana 0:42adca80439c 106
recotana 0:42adca80439c 107 // serialSendPayload(_payload);
recotana 0:42adca80439c 108 printf("******* single send! *******\r\n");
recotana 0:42adca80439c 109
recotana 0:42adca80439c 110 }
recotana 0:42adca80439c 111 break;
recotana 0:42adca80439c 112
recotana 0:42adca80439c 113 case SEND_CONTINUEOUS:
recotana 0:42adca80439c 114 {
recotana 0:42adca80439c 115 isSendContinueous=true;
recotana 0:42adca80439c 116 sendPayload(_payload);
recotana 0:42adca80439c 117 _payload->frame.message.command=ACK;
recotana 0:42adca80439c 118 // serialSendPayload(_payload);
recotana 0:42adca80439c 119
recotana 0:42adca80439c 120 printf("******* continueous send! *******\r\n");
recotana 0:42adca80439c 121 }
recotana 0:42adca80439c 122 break;
recotana 0:42adca80439c 123
recotana 0:42adca80439c 124 case SEND_CONT_STOP:
recotana 0:42adca80439c 125 {
recotana 0:42adca80439c 126 isSendContinueous=false;
recotana 0:42adca80439c 127 _payload->frame.message.command=ACK;
recotana 0:42adca80439c 128 // serialSendPayload(_payload);
recotana 0:42adca80439c 129
recotana 0:42adca80439c 130 printf("******* continueous stop! *******\r\n");
recotana 0:42adca80439c 131 }
recotana 0:42adca80439c 132 break;
recotana 0:42adca80439c 133
recotana 0:42adca80439c 134 case RECIEVE:
recotana 0:42adca80439c 135 {
recotana 0:42adca80439c 136 // printf("****** recieve! *******\r\n");
recotana 0:42adca80439c 137 }
recotana 0:42adca80439c 138 break;
recotana 0:42adca80439c 139
recotana 0:42adca80439c 140 case PING:
recotana 0:42adca80439c 141 {
recotana 0:42adca80439c 142 _payload->frame.message.command=ACK;
recotana 0:42adca80439c 143 // serialSendPayload(_payload);
recotana 0:42adca80439c 144
recotana 0:42adca80439c 145 printf("******* ping! **************");
recotana 0:42adca80439c 146 }
recotana 0:42adca80439c 147 break;
recotana 0:42adca80439c 148
recotana 0:42adca80439c 149 case SET_TX_GAIN:
recotana 0:42adca80439c 150 {
recotana 0:42adca80439c 151 uint8_t gain=_payload->frame.message.data[0];
recotana 0:42adca80439c 152 uint8_t mid=_payload->frame.message.data[1];
recotana 0:42adca80439c 153 setTxLevel(gain , mid);
recotana 0:42adca80439c 154 _payload->frame.message.command=ACK;
recotana 0:42adca80439c 155 // serialSendPayload(_payload);
recotana 0:42adca80439c 156
recotana 0:42adca80439c 157 printf("******* set tx gain:%d mid level:%d *******\r\n",gain,mid);
recotana 0:42adca80439c 158 }
recotana 0:42adca80439c 159 break;
recotana 0:42adca80439c 160 }
recotana 0:42adca80439c 161
recotana 0:42adca80439c 162 }
recotana 0:42adca80439c 163
recotana 0:42adca80439c 164 void readProcess(void){
recotana 0:42adca80439c 165
recotana 0:42adca80439c 166
recotana 0:42adca80439c 167 if(!serialCheck()) return;
recotana 0:42adca80439c 168
recotana 0:42adca80439c 169 payByte[payByteIndex]=serialRead();
recotana 0:42adca80439c 170 payByteIndex++;
recotana 0:42adca80439c 171
recotana 0:42adca80439c 172 if(payByteIndex<(sizeof(Payload))) return;
recotana 0:42adca80439c 173
recotana 0:42adca80439c 174 payByteIndex=0;
recotana 0:42adca80439c 175
recotana 0:42adca80439c 176
recotana 0:42adca80439c 177 // networkToPayload(&payload);
recotana 0:42adca80439c 178 /*
recotana 0:42adca80439c 179 if( payload.frame.message.frameNumber == oldFrameNumber){
recotana 0:42adca80439c 180
recotana 0:42adca80439c 181 DBGF("-------- same frame.. \r\n");
recotana 0:42adca80439c 182 return;
recotana 0:42adca80439c 183 }
recotana 0:42adca80439c 184 */
recotana 0:42adca80439c 185 dumpPayload(&payload);
recotana 0:42adca80439c 186
recotana 0:42adca80439c 187
recotana 0:42adca80439c 188
recotana 0:42adca80439c 189
recotana 0:42adca80439c 190 routing(&payload);
recotana 0:42adca80439c 191
recotana 0:42adca80439c 192 oldFrameNumber= payload.frame.message.frameNumber;
recotana 0:42adca80439c 193
recotana 0:42adca80439c 194
recotana 0:42adca80439c 195 DBGF("\r\n******* tx send! *******\r\n");
recotana 0:42adca80439c 196 }
recotana 0:42adca80439c 197