テストモード追加、LED有効化 left -> SerialRX, Data Recieve Complete , Serial Tx , Light Tx
Dependencies: XBee mbed NetServicesMin
serial_process/serialRecieve.cpp@0:42adca80439c, 2012-03-22 (annotated)
- Committer:
- recotana
- Date:
- Thu Mar 22 12:40:48 2012 +0000
- Revision:
- 0:42adca80439c
- Child:
- 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 | 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 |