working version

Dependencies:   mbed mbed-rtos SimpleDMA FreescaleIAP eeprom

Fork of CDMS_CODE_FM_28JAN2017 by samp Srinivasan

Committer:
samp1234
Date:
Sun Apr 03 15:35:53 2022 +0000
Revision:
357:f3d48d62e00e
Parent:
356:197c93dc2012
First commit test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shreeshas95 0:f016e9e8d48b 1 #define flushData_appendTC(bytes, outState) {\
shreeshas95 0:f016e9e8d48b 2 uint16_t tc_type = 2;\
shreeshas95 0:f016e9e8d48b 3 if( (bytes == TC_SHORT_SIZE) && (outState == 7) ){\
shreeshas95 4:104dd82c99b8 4 tc_type = SHORT_TC_CODE;\
shreeshas95 0:f016e9e8d48b 5 }\
shreeshas95 0:f016e9e8d48b 6 else if( (bytes == TC_LONG_SIZE) && (outState == 7) ){\
shreeshas95 4:104dd82c99b8 7 tc_type = LONG_TC_CODE;\
shreeshas95 0:f016e9e8d48b 8 }\
shreeshas95 0:f016e9e8d48b 9 else{\
samp1234 357:f3d48d62e00e 10 /*gPC.puts("incorrect size\r\n");*/\
shreeshas95 5:ab276a17ca07 11 /*gPC.printf("%u, %u\r\n", bytes, outState);*/\
shreeshas95 2:2caf2a9a13aa 12 ++gTOTAL_INCORRECT_SIZE_TC;\
shreeshas95 0:f016e9e8d48b 13 }\
shreeshas95 4:104dd82c99b8 14 if( tc_type == SHORT_TC_CODE ){\
shreeshas95 0:f016e9e8d48b 15 uint16_t crc_checksum = crc16_gen(rx_tempString, TC_SHORT_SIZE-2);\
shreeshas95 0:f016e9e8d48b 16 if( ( (crc_checksum & 0xFF) == rx_tempString[TC_SHORT_SIZE-1]) && ( ((crc_checksum >> 8) & 0xFF) == rx_tempString[TC_SHORT_SIZE-2] ) ){\
shreeshas95 0:f016e9e8d48b 17 uint16_t temp16;\
shreeshas95 0:f016e9e8d48b 18 Base_tc *temp_ptr = gHEAD_NODE_TCL;\
shreeshas95 0:f016e9e8d48b 19 bool repeat_flag = false;\
shreeshas95 0:f016e9e8d48b 20 uint8_t testPSC = rx_tempString[0];\
shreeshas95 0:f016e9e8d48b 21 while(temp_ptr != NULL){\
shreeshas95 0:f016e9e8d48b 22 if( GETpacket_seq_count(temp_ptr) == testPSC ){\
shreeshas95 0:f016e9e8d48b 23 repeat_flag = true;\
shreeshas95 0:f016e9e8d48b 24 break;\
shreeshas95 0:f016e9e8d48b 25 }\
shreeshas95 0:f016e9e8d48b 26 temp_ptr = temp_ptr->next_TC;\
shreeshas95 0:f016e9e8d48b 27 }\
shreeshas95 0:f016e9e8d48b 28 if( repeat_flag == false ){\
shreeshas95 5:ab276a17ca07 29 if( gTOTAL_VALID_TC == 0 ){\
shreeshas95 0:f016e9e8d48b 30 gHEAD_NODE_TCL = new Short_tc;\
shreeshas95 0:f016e9e8d48b 31 gHEAD_NODE_TCL->next_TC = NULL;\
shreeshas95 0:f016e9e8d48b 32 gLAST_NODE_TCL = gHEAD_NODE_TCL;\
shreeshas95 0:f016e9e8d48b 33 }\
shreeshas95 0:f016e9e8d48b 34 else{\
shreeshas95 0:f016e9e8d48b 35 gLAST_NODE_TCL->next_TC = new Short_tc;\
shreeshas95 4:104dd82c99b8 36 gLAST_NODE_TCL = gLAST_NODE_TCL->next_TC;\
shreeshas95 0:f016e9e8d48b 37 gLAST_NODE_TCL->next_TC = NULL;\
shreeshas95 0:f016e9e8d48b 38 }\
shreeshas95 5:ab276a17ca07 39 /*gPC.puts("printing tx string\r\n");*/\
shreeshas95 0:f016e9e8d48b 40 for(int i = 0 ; i < TC_SHORT_SIZE ; ++i){\
shreeshas95 0:f016e9e8d48b 41 gLAST_NODE_TCL->TC_string[i] = rx_tempString[i];\
samp1234 356:197c93dc2012 42 /*if (i==5) break;*/\
shreeshas95 0:f016e9e8d48b 43 }\
shreeshas95 0:f016e9e8d48b 44 PUTshort_or_long(gLAST_NODE_TCL, tc_type);\
shreeshas95 0:f016e9e8d48b 45 temp16 = 1;\
shreeshas95 0:f016e9e8d48b 46 PUTcrc_pass(gLAST_NODE_TCL, temp16);\
shreeshas95 0:f016e9e8d48b 47 temp16 = 0;\
shreeshas95 0:f016e9e8d48b 48 PUTexec_status(gLAST_NODE_TCL, temp16);\
shreeshas95 0:f016e9e8d48b 49 ++gTOTAL_VALID_TC;\
shreeshas95 0:f016e9e8d48b 50 }\
shreeshas95 2:2caf2a9a13aa 51 else{\
aniruddhv 12:ffdb29353058 52 /*gPC.puts("repeated psc short\r\n");*/\
shreeshas95 2:2caf2a9a13aa 53 ++gTOTAL_REPEATED_TC;\
shreeshas95 2:2caf2a9a13aa 54 }\
shreeshas95 0:f016e9e8d48b 55 }\
shreeshas95 0:f016e9e8d48b 56 else{\
aniruddhv 12:ffdb29353058 57 /*gPC.puts("crc fail tc short\r\n");*/\
shreeshas95 0:f016e9e8d48b 58 ++gTOTAL_CRC_FAIL_TC;\
shreeshas95 0:f016e9e8d48b 59 }\
shreeshas95 0:f016e9e8d48b 60 }\
shreeshas95 4:104dd82c99b8 61 else if( tc_type == LONG_TC_CODE ){\
shreeshas95 0:f016e9e8d48b 62 uint16_t crc_checksum = crc16_gen(rx_tempString, TC_LONG_SIZE-2);\
shreeshas95 0:f016e9e8d48b 63 if( ( (crc_checksum & 0xFF) == rx_tempString[TC_LONG_SIZE-1]) && ( ((crc_checksum >> 8) & 0xFF) == rx_tempString[TC_LONG_SIZE-2] ) ){\
shreeshas95 0:f016e9e8d48b 64 uint16_t temp16;\
shreeshas95 0:f016e9e8d48b 65 Base_tc *temp_ptr = gHEAD_NODE_TCL;\
shreeshas95 0:f016e9e8d48b 66 bool repeat_flag = false;\
shreeshas95 0:f016e9e8d48b 67 uint8_t testPSC = rx_tempString[0];\
shreeshas95 0:f016e9e8d48b 68 while(temp_ptr != NULL){\
shreeshas95 0:f016e9e8d48b 69 if( GETpacket_seq_count(temp_ptr) == testPSC ){\
shreeshas95 0:f016e9e8d48b 70 repeat_flag = true;\
shreeshas95 0:f016e9e8d48b 71 break;\
shreeshas95 0:f016e9e8d48b 72 }\
shreeshas95 0:f016e9e8d48b 73 temp_ptr = temp_ptr->next_TC;\
shreeshas95 0:f016e9e8d48b 74 }\
shreeshas95 0:f016e9e8d48b 75 if( repeat_flag == false ){\
shreeshas95 5:ab276a17ca07 76 if( gTOTAL_VALID_TC == 0 ){\
shreeshas95 0:f016e9e8d48b 77 gHEAD_NODE_TCL = new Long_tc;\
shreeshas95 0:f016e9e8d48b 78 gHEAD_NODE_TCL->next_TC = NULL;\
shreeshas95 0:f016e9e8d48b 79 gLAST_NODE_TCL = gHEAD_NODE_TCL;\
shreeshas95 0:f016e9e8d48b 80 }\
shreeshas95 0:f016e9e8d48b 81 else{\
shreeshas95 0:f016e9e8d48b 82 gLAST_NODE_TCL->next_TC = new Long_tc;\
shreeshas95 0:f016e9e8d48b 83 gLAST_NODE_TCL = gLAST_NODE_TCL->next_TC;\
shreeshas95 0:f016e9e8d48b 84 gLAST_NODE_TCL->next_TC = NULL;\
shreeshas95 0:f016e9e8d48b 85 }\
shreeshas95 5:ab276a17ca07 86 /*gPC.puts("printing tx string\r\n");*/\
shreeshas95 0:f016e9e8d48b 87 for(int i = 0 ; i < TC_LONG_SIZE ; ++i){\
shreeshas95 0:f016e9e8d48b 88 gLAST_NODE_TCL->TC_string[i] = rx_tempString[i];\
shreeshas95 0:f016e9e8d48b 89 }\
shreeshas95 0:f016e9e8d48b 90 PUTshort_or_long(gLAST_NODE_TCL, tc_type);\
shreeshas95 0:f016e9e8d48b 91 temp16 = 1;\
shreeshas95 0:f016e9e8d48b 92 PUTcrc_pass(gLAST_NODE_TCL, temp16);\
shreeshas95 0:f016e9e8d48b 93 temp16 = 0;\
shreeshas95 0:f016e9e8d48b 94 PUTexec_status(gLAST_NODE_TCL, temp16);\
shreeshas95 0:f016e9e8d48b 95 ++gTOTAL_VALID_TC;\
shreeshas95 0:f016e9e8d48b 96 }\
shreeshas95 2:2caf2a9a13aa 97 else{\
aniruddhv 12:ffdb29353058 98 /*gPC.puts("repeated psc long\r\n");*/\
shreeshas95 2:2caf2a9a13aa 99 ++gTOTAL_REPEATED_TC;\
shreeshas95 2:2caf2a9a13aa 100 }\
shreeshas95 0:f016e9e8d48b 101 }\
shreeshas95 0:f016e9e8d48b 102 else{\
aniruddhv 12:ffdb29353058 103 /*gPC.puts("crc fail tc long\r\n");*/\
shreeshas95 0:f016e9e8d48b 104 ++gTOTAL_CRC_FAIL_TC;\
shreeshas95 0:f016e9e8d48b 105 }\
shreeshas95 0:f016e9e8d48b 106 }\
shreeshas95 0:f016e9e8d48b 107 }
shreeshas95 0:f016e9e8d48b 108
shreeshas95 0:f016e9e8d48b 109 unsigned char rx_tempString[TC_LONG_SIZE+1];
shreeshas95 0:f016e9e8d48b 110
shreeshas95 0:f016e9e8d48b 111 void raw_data_to_tc(void){
aniruddhv 12:ffdb29353058 112 /*gPC.puts("inside raw_data_to_tc\r\n")*/;
shreeshas95 0:f016e9e8d48b 113 bool frame_started = false;
shreeshas95 0:f016e9e8d48b 114 bool chain_started = false;
shreeshas95 0:f016e9e8d48b 115 bool flush_called = false;
shreeshas95 0:f016e9e8d48b 116
shreeshas95 0:f016e9e8d48b 117 uint32_t bytes_read = 0;
shreeshas95 0:f016e9e8d48b 118 uint8_t state7e = 0;
shreeshas95 0:f016e9e8d48b 119 uint8_t outState = 0;
shreeshas95 0:f016e9e8d48b 120 uint32_t outByte = 0;
shreeshas95 0:f016e9e8d48b 121 uint32_t byteCount = 0;
shreeshas95 2:2caf2a9a13aa 122
shreeshas95 0:f016e9e8d48b 123 COM_RX_DATA_NODE *data_node = gRX_HEAD_DATA_NODE;
shreeshas95 0:f016e9e8d48b 124 // read byte by byte
chaithanyarss 332:7d2431ce979f 125
ee12b079 342:77b0d59897f7 126 //gPC.puts("received data : \n");
chaithanyarss 332:7d2431ce979f 127
shreeshas95 0:f016e9e8d48b 128 while( data_node != NULL ){
shreeshas95 0:f016e9e8d48b 129 for(int iBuf = 0 ; iBuf < RX_BUFFER_LENGTH ; ++iBuf ){
shreeshas95 0:f016e9e8d48b 130 uint8_t test_this = data_node->values[iBuf];
ee12b079 342:77b0d59897f7 131 //gPC.printf("0x%02X ",test_this);
shreeshas95 0:f016e9e8d48b 132 ++bytes_read;
shreeshas95 0:f016e9e8d48b 133
shreeshas95 0:f016e9e8d48b 134 // read bit by bit
shreeshas95 0:f016e9e8d48b 135 for(int i = 7 ; i >= 0 ; --i){
shreeshas95 0:f016e9e8d48b 136 unsigned char tempBit = (test_this >> i) & 1;
shreeshas95 0:f016e9e8d48b 137 bool skipIteration = false;
shreeshas95 0:f016e9e8d48b 138
shreeshas95 0:f016e9e8d48b 139 if( tempBit == 1 ){
shreeshas95 0:f016e9e8d48b 140 switch( state7e ){
shreeshas95 0:f016e9e8d48b 141 case 0:
shreeshas95 0:f016e9e8d48b 142 state7e = 0;
shreeshas95 0:f016e9e8d48b 143 break;
shreeshas95 0:f016e9e8d48b 144 case 1:
shreeshas95 0:f016e9e8d48b 145 state7e = 2;
shreeshas95 0:f016e9e8d48b 146 break;
shreeshas95 0:f016e9e8d48b 147 case 2:
shreeshas95 0:f016e9e8d48b 148 state7e = 3;
shreeshas95 0:f016e9e8d48b 149 break;
shreeshas95 0:f016e9e8d48b 150 case 3:
shreeshas95 0:f016e9e8d48b 151 state7e = 4;
shreeshas95 0:f016e9e8d48b 152 break;
shreeshas95 0:f016e9e8d48b 153 case 4:
shreeshas95 0:f016e9e8d48b 154 state7e = 5;
shreeshas95 0:f016e9e8d48b 155 break;
shreeshas95 0:f016e9e8d48b 156 case 5:
shreeshas95 0:f016e9e8d48b 157 state7e = 6;
shreeshas95 0:f016e9e8d48b 158 break;
shreeshas95 0:f016e9e8d48b 159 case 6:
shreeshas95 0:f016e9e8d48b 160 state7e = 7;
shreeshas95 0:f016e9e8d48b 161 break;
shreeshas95 0:f016e9e8d48b 162 case 7:
shreeshas95 0:f016e9e8d48b 163 // error reset
shreeshas95 0:f016e9e8d48b 164 state7e = 0;
shreeshas95 0:f016e9e8d48b 165 chain_started = false;
shreeshas95 0:f016e9e8d48b 166 frame_started = false;
shreeshas95 0:f016e9e8d48b 167 byteCount = 0;
shreeshas95 0:f016e9e8d48b 168 outByte = 0;
shreeshas95 0:f016e9e8d48b 169 outState = 0;
shreeshas95 0:f016e9e8d48b 170 skipIteration = true;
shreeshas95 0:f016e9e8d48b 171 break;
shreeshas95 0:f016e9e8d48b 172 }
shreeshas95 0:f016e9e8d48b 173 }
shreeshas95 0:f016e9e8d48b 174 else{
shreeshas95 0:f016e9e8d48b 175 switch( state7e ){
shreeshas95 0:f016e9e8d48b 176 case 0:
shreeshas95 0:f016e9e8d48b 177 case 1:
shreeshas95 0:f016e9e8d48b 178 case 2:
shreeshas95 0:f016e9e8d48b 179 case 3:
shreeshas95 0:f016e9e8d48b 180 case 4:
shreeshas95 0:f016e9e8d48b 181 case 5:
shreeshas95 0:f016e9e8d48b 182 state7e = 1;
shreeshas95 0:f016e9e8d48b 183 break;
shreeshas95 0:f016e9e8d48b 184 case 6:
shreeshas95 0:f016e9e8d48b 185 state7e = 1;
shreeshas95 0:f016e9e8d48b 186 skipIteration = true;
shreeshas95 0:f016e9e8d48b 187 break;
shreeshas95 0:f016e9e8d48b 188 case 7:
shreeshas95 0:f016e9e8d48b 189 state7e = 0;
shreeshas95 0:f016e9e8d48b 190 // detected 7e
shreeshas95 0:f016e9e8d48b 191 if( !chain_started ){
shreeshas95 0:f016e9e8d48b 192 chain_started = true;
shreeshas95 0:f016e9e8d48b 193 frame_started = true;
shreeshas95 0:f016e9e8d48b 194 byteCount = 0;
shreeshas95 0:f016e9e8d48b 195 outByte = 0;
shreeshas95 0:f016e9e8d48b 196 outState = 0;
shreeshas95 0:f016e9e8d48b 197 skipIteration = true;
shreeshas95 0:f016e9e8d48b 198 }
shreeshas95 0:f016e9e8d48b 199 else{
shreeshas95 0:f016e9e8d48b 200 flush_called = true;
shreeshas95 0:f016e9e8d48b 201 flushData_appendTC(byteCount, outState);
shreeshas95 0:f016e9e8d48b 202 byteCount = 0;
shreeshas95 0:f016e9e8d48b 203 outState = 0;
shreeshas95 0:f016e9e8d48b 204 outByte = 0;
shreeshas95 0:f016e9e8d48b 205 skipIteration = true;
shreeshas95 0:f016e9e8d48b 206 }
shreeshas95 0:f016e9e8d48b 207 break;
shreeshas95 0:f016e9e8d48b 208 }
shreeshas95 0:f016e9e8d48b 209 }
shreeshas95 0:f016e9e8d48b 210 if( (!skipIteration) && (frame_started) ){
shreeshas95 0:f016e9e8d48b 211 // write bit to output
shreeshas95 0:f016e9e8d48b 212 switch( outState ){
shreeshas95 0:f016e9e8d48b 213 case 0:
shreeshas95 0:f016e9e8d48b 214 outState = 1;
shreeshas95 0:f016e9e8d48b 215 rx_tempString[outByte] = tempBit << 7;
shreeshas95 0:f016e9e8d48b 216 break;
shreeshas95 0:f016e9e8d48b 217 case 1:
shreeshas95 0:f016e9e8d48b 218 outState = 2;
shreeshas95 0:f016e9e8d48b 219 rx_tempString[outByte] += tempBit << 6;
shreeshas95 0:f016e9e8d48b 220 break;
shreeshas95 0:f016e9e8d48b 221 case 2:
shreeshas95 0:f016e9e8d48b 222 outState = 3;
shreeshas95 0:f016e9e8d48b 223 rx_tempString[outByte] += tempBit << 5;
shreeshas95 0:f016e9e8d48b 224 break;
shreeshas95 0:f016e9e8d48b 225 case 3:
shreeshas95 0:f016e9e8d48b 226 outState = 4;
shreeshas95 0:f016e9e8d48b 227 rx_tempString[outByte] += tempBit << 4;
shreeshas95 0:f016e9e8d48b 228 break;
shreeshas95 0:f016e9e8d48b 229 case 4:
shreeshas95 0:f016e9e8d48b 230 outState = 5;
shreeshas95 0:f016e9e8d48b 231 rx_tempString[outByte] += tempBit << 3;
shreeshas95 0:f016e9e8d48b 232 break;
shreeshas95 0:f016e9e8d48b 233 case 5:
shreeshas95 0:f016e9e8d48b 234 outState = 6;
shreeshas95 0:f016e9e8d48b 235 rx_tempString[outByte] += tempBit << 2;
shreeshas95 0:f016e9e8d48b 236 break;
shreeshas95 0:f016e9e8d48b 237 case 6:
shreeshas95 0:f016e9e8d48b 238 outState = 7;
shreeshas95 0:f016e9e8d48b 239 rx_tempString[outByte] += tempBit << 1;
shreeshas95 0:f016e9e8d48b 240 break;
shreeshas95 0:f016e9e8d48b 241 case 7:
shreeshas95 0:f016e9e8d48b 242 outState = 0;
shreeshas95 0:f016e9e8d48b 243 rx_tempString[outByte] += tempBit;
shreeshas95 0:f016e9e8d48b 244 ++outByte;
shreeshas95 0:f016e9e8d48b 245 // exceeded tc length discard
shreeshas95 0:f016e9e8d48b 246 if(outByte > 135){
shreeshas95 2:2caf2a9a13aa 247 ++gTOTAL_INCORRECT_SIZE_TC;
shreeshas95 0:f016e9e8d48b 248 outByte = 0;
shreeshas95 0:f016e9e8d48b 249 }
shreeshas95 0:f016e9e8d48b 250 ++byteCount;
shreeshas95 0:f016e9e8d48b 251 break;
shreeshas95 0:f016e9e8d48b 252 }
shreeshas95 0:f016e9e8d48b 253 }
shreeshas95 0:f016e9e8d48b 254 }
shreeshas95 0:f016e9e8d48b 255 }
shreeshas95 0:f016e9e8d48b 256 COM_RX_DATA_NODE *temp = data_node->next_node;
shreeshas95 0:f016e9e8d48b 257 delete data_node;
shreeshas95 0:f016e9e8d48b 258 data_node = temp;
shreeshas95 0:f016e9e8d48b 259 }
shreeshas95 0:f016e9e8d48b 260 if( (!flush_called) && (gTOTAL_INCORRECT_SIZE_TC == 0) ){
shreeshas95 0:f016e9e8d48b 261 ++gTOTAL_INCORRECT_SIZE_TC;
shreeshas95 0:f016e9e8d48b 262 }
shreeshas95 0:f016e9e8d48b 263 gRX_HEAD_DATA_NODE = new COM_RX_DATA_NODE;
shreeshas95 0:f016e9e8d48b 264 gRX_HEAD_DATA_NODE->next_node = NULL;
shreeshas95 0:f016e9e8d48b 265 gRX_CURRENT_DATA_NODE = gRX_HEAD_DATA_NODE;
shreeshas95 2:2caf2a9a13aa 266 gRX_COUNT = 0;
shreeshas95 0:f016e9e8d48b 267
aniruddhv 12:ffdb29353058 268 /*gPC.puts("Completed conversion of raw_data\r\n")*/;
shreeshas95 0:f016e9e8d48b 269 }