Dummy program to demonstrate problems: working code

Dependencies:   SLCD mbed-rtos mbed

Fork of MNG_TC by Shreesha S

Committer:
shreeshas95
Date:
Thu Sep 17 14:15:00 2015 +0000
Revision:
17:2b04e53f3b1d
Parent:
8:cb93c1d3209a
Child:
16:de2224dd9a0d
DUMMP program to demonstrate the problems : working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shreeshas95 8:cb93c1d3209a 1 namespace COM_RCV_TC{
shreeshas95 8:cb93c1d3209a 2 unsigned int bytes_read = 0;
shreeshas95 8:cb93c1d3209a 3 unsigned int tc_frames = 0;
shreeshas95 8:cb93c1d3209a 4 unsigned char tempString[136];
shreeshas95 8:cb93c1d3209a 5 TC_list *return_this = NULL;
shreeshas95 7:e71ecfe3a340 6
shreeshas95 8:cb93c1d3209a 7 void inline attach_frame(unsigned int length){
shreeshas95 8:cb93c1d3209a 8 // allocate new node
shreeshas95 8:cb93c1d3209a 9 // handle Head node
shreeshas95 8:cb93c1d3209a 10 if( tc_frames == 0 ){
shreeshas95 8:cb93c1d3209a 11 VAR_SPACE::Head_node = new TC_list;
shreeshas95 8:cb93c1d3209a 12 VAR_SPACE::Head_node->next_TC = NULL;
shreeshas95 8:cb93c1d3209a 13 VAR_SPACE::last_node = VAR_SPACE::Head_node;
shreeshas95 3:eec1097c0dd6 14 }
shreeshas95 8:cb93c1d3209a 15 else{
shreeshas95 8:cb93c1d3209a 16 VAR_SPACE::last_node->next_TC = new TC_list;
shreeshas95 8:cb93c1d3209a 17 VAR_SPACE::last_node = VAR_SPACE::last_node->next_TC;
shreeshas95 8:cb93c1d3209a 18 VAR_SPACE::last_node->next_TC = NULL;
shreeshas95 8:cb93c1d3209a 19 }
shreeshas95 8:cb93c1d3209a 20
shreeshas95 8:cb93c1d3209a 21 // allocate memory for string
shreeshas95 8:cb93c1d3209a 22 VAR_SPACE::last_node->TC_string = new unsigned char[length];
shreeshas95 8:cb93c1d3209a 23 for(int i = 0 ; i < length ; ++i){
shreeshas95 8:cb93c1d3209a 24 VAR_SPACE::last_node->TC_string[i] = tempString[i];
shreeshas95 3:eec1097c0dd6 25 }
shreeshas95 8:cb93c1d3209a 26
shreeshas95 8:cb93c1d3209a 27 // short or long
shreeshas95 8:cb93c1d3209a 28 VAR_SPACE::last_node->short_or_long = (length == 11) ? true : false;
shreeshas95 8:cb93c1d3209a 29
shreeshas95 8:cb93c1d3209a 30 // crc pass or fail
shreeshas95 8:cb93c1d3209a 31 uint16_t crc_checksum = CRC::crc16_gen(tempString, length-2);
shreeshas95 8:cb93c1d3209a 32 if( ( (crc_checksum & 0xFF) == tempString[length-1]) && ( ((crc_checksum >> 8) & 0xFF) == tempString[length-2] ) ){
shreeshas95 8:cb93c1d3209a 33 VAR_SPACE::last_node->crc_pass = true;
shreeshas95 8:cb93c1d3209a 34 }
shreeshas95 8:cb93c1d3209a 35 else{
shreeshas95 8:cb93c1d3209a 36 VAR_SPACE::last_node->crc_pass = false;
shreeshas95 7:e71ecfe3a340 37 }
shreeshas95 6:6e9ae3b44e60 38
shreeshas95 8:cb93c1d3209a 39 // PSC
shreeshas95 8:cb93c1d3209a 40 VAR_SPACE::last_node->packet_seq_count = VAR_SPACE::last_node->TC_string[0];
shreeshas95 8:cb93c1d3209a 41
shreeshas95 8:cb93c1d3209a 42 // apid
shreeshas95 8:cb93c1d3209a 43 unsigned char tempChar = VAR_SPACE::last_node->TC_string[1];
shreeshas95 8:cb93c1d3209a 44 VAR_SPACE::last_node->apid = (tempChar >> 6) & 3;
shreeshas95 8:cb93c1d3209a 45
shreeshas95 8:cb93c1d3209a 46 // abort on nack
shreeshas95 8:cb93c1d3209a 47 VAR_SPACE::last_node->abort_on_nack = (((tempChar >> 3) & 1) == 1) ? true : false;
shreeshas95 8:cb93c1d3209a 48
shreeshas95 8:cb93c1d3209a 49 // default values of enable and execution status
shreeshas95 8:cb93c1d3209a 50 VAR_SPACE::last_node->enabled = true;
shreeshas95 8:cb93c1d3209a 51 VAR_SPACE::last_node->exec_status = 0;
shreeshas95 3:eec1097c0dd6 52
shreeshas95 8:cb93c1d3209a 53 // printf("inside attach frame : frame num = %u\r\n", tc_frames);
shreeshas95 8:cb93c1d3209a 54
shreeshas95 8:cb93c1d3209a 55 // for(int i = 0 ; i < length ; ++i){
shreeshas95 8:cb93c1d3209a 56 // std::bitset<8> b = VAR_SPACE::last_node->TC_string[i];
shreeshas95 8:cb93c1d3209a 57 // cout << b << " ";
shreeshas95 8:cb93c1d3209a 58 // }
shreeshas95 8:cb93c1d3209a 59 // cout << ENDL;
shreeshas95 8:cb93c1d3209a 60 // for( int i = 0 ; i < length ; ++i){
shreeshas95 8:cb93c1d3209a 61 // std::bitset<8> b = tempString[i];
shreeshas95 8:cb93c1d3209a 62 // cout << b << " ";
shreeshas95 8:cb93c1d3209a 63 // }
shreeshas95 8:cb93c1d3209a 64 // cout << ENDL;
shreeshas95 8:cb93c1d3209a 65
shreeshas95 8:cb93c1d3209a 66 ++tc_frames;
shreeshas95 3:eec1097c0dd6 67 }
shreeshas95 8:cb93c1d3209a 68
shreeshas95 8:cb93c1d3209a 69 void flushData(const unsigned int& bytes, const unsigned char& outState){
shreeshas95 8:cb93c1d3209a 70 if( (bytes == 11) && (outState == 7) ){
shreeshas95 8:cb93c1d3209a 71 attach_frame(11);
shreeshas95 3:eec1097c0dd6 72 }
shreeshas95 8:cb93c1d3209a 73 else if( (bytes == 135) && (outState == 7) ){
shreeshas95 8:cb93c1d3209a 74 attach_frame(135);
shreeshas95 3:eec1097c0dd6 75 }
shreeshas95 3:eec1097c0dd6 76 }
shreeshas95 3:eec1097c0dd6 77
shreeshas95 8:cb93c1d3209a 78 void rx_rcv_tc(void){
shreeshas95 8:cb93c1d3209a 79 bool frame_started = false;
shreeshas95 8:cb93c1d3209a 80 bytes_read = 0;
shreeshas95 8:cb93c1d3209a 81 unsigned char state7e = 0;
shreeshas95 8:cb93c1d3209a 82 unsigned char outState = 0;
shreeshas95 8:cb93c1d3209a 83 unsigned int outByte = 0;
shreeshas95 8:cb93c1d3209a 84 bool chain_started = false;
shreeshas95 8:cb93c1d3209a 85 unsigned int byteCount = 0;
shreeshas95 8:cb93c1d3209a 86
shreeshas95 8:cb93c1d3209a 87 // read byte by byte
shreeshas95 8:cb93c1d3209a 88 while( VAR_SPACE::data_node != NULL ){
shreeshas95 8:cb93c1d3209a 89
shreeshas95 8:cb93c1d3209a 90 unsigned char test_this = VAR_SPACE::data_node->val;
shreeshas95 8:cb93c1d3209a 91 ++bytes_read;
shreeshas95 8:cb93c1d3209a 92
shreeshas95 8:cb93c1d3209a 93 struct data_list *temp = VAR_SPACE::data_node->next;
shreeshas95 8:cb93c1d3209a 94 delete VAR_SPACE::data_node;
shreeshas95 8:cb93c1d3209a 95 VAR_SPACE::data_node = temp;
shreeshas95 8:cb93c1d3209a 96 if( bytes_read == 1 ){
shreeshas95 8:cb93c1d3209a 97 VAR_SPACE::head_data = new struct data_list;
shreeshas95 8:cb93c1d3209a 98 VAR_SPACE::head_data->next = NULL;
shreeshas95 8:cb93c1d3209a 99 VAR_SPACE::rx_new_node = VAR_SPACE::head_data;
shreeshas95 8:cb93c1d3209a 100 }
shreeshas95 8:cb93c1d3209a 101
shreeshas95 8:cb93c1d3209a 102 // read bit by bit
shreeshas95 8:cb93c1d3209a 103 for(int i = 7 ; i >= 0 ; --i){
shreeshas95 8:cb93c1d3209a 104 unsigned char tempBit = (test_this >> i) & 1;
shreeshas95 8:cb93c1d3209a 105 bool skipIteration = false;
shreeshas95 8:cb93c1d3209a 106
shreeshas95 8:cb93c1d3209a 107 if( tempBit == 1 ){
shreeshas95 8:cb93c1d3209a 108 switch( state7e ){
shreeshas95 8:cb93c1d3209a 109 case 0:
shreeshas95 8:cb93c1d3209a 110 state7e = 0;
shreeshas95 8:cb93c1d3209a 111 break;
shreeshas95 8:cb93c1d3209a 112 case 1:
shreeshas95 8:cb93c1d3209a 113 state7e = 2;
shreeshas95 8:cb93c1d3209a 114 break;
shreeshas95 8:cb93c1d3209a 115 case 2:
shreeshas95 8:cb93c1d3209a 116 state7e = 3;
shreeshas95 8:cb93c1d3209a 117 break;
shreeshas95 8:cb93c1d3209a 118 case 3:
shreeshas95 8:cb93c1d3209a 119 state7e = 4;
shreeshas95 8:cb93c1d3209a 120 break;
shreeshas95 8:cb93c1d3209a 121 case 4:
shreeshas95 8:cb93c1d3209a 122 state7e = 5;
shreeshas95 8:cb93c1d3209a 123 break;
shreeshas95 8:cb93c1d3209a 124 case 5:
shreeshas95 8:cb93c1d3209a 125 state7e = 6;
shreeshas95 8:cb93c1d3209a 126 break;
shreeshas95 8:cb93c1d3209a 127 case 6:
shreeshas95 8:cb93c1d3209a 128 state7e = 7;
shreeshas95 8:cb93c1d3209a 129 break;
shreeshas95 8:cb93c1d3209a 130 case 7:
shreeshas95 8:cb93c1d3209a 131 // error reset
shreeshas95 8:cb93c1d3209a 132 state7e = 0;
shreeshas95 8:cb93c1d3209a 133 chain_started = false;
shreeshas95 8:cb93c1d3209a 134 frame_started = false;
shreeshas95 8:cb93c1d3209a 135 byteCount = 0;
shreeshas95 8:cb93c1d3209a 136 outByte = 0;
shreeshas95 8:cb93c1d3209a 137 outState = 0;
shreeshas95 8:cb93c1d3209a 138 skipIteration = true;
shreeshas95 8:cb93c1d3209a 139 break;
shreeshas95 8:cb93c1d3209a 140 }
shreeshas95 3:eec1097c0dd6 141 }
shreeshas95 8:cb93c1d3209a 142 else{
shreeshas95 8:cb93c1d3209a 143 switch( state7e ){
shreeshas95 8:cb93c1d3209a 144 case 0:
shreeshas95 8:cb93c1d3209a 145 case 1:
shreeshas95 8:cb93c1d3209a 146 case 2:
shreeshas95 8:cb93c1d3209a 147 case 3:
shreeshas95 8:cb93c1d3209a 148 case 4:
shreeshas95 8:cb93c1d3209a 149 case 5:
shreeshas95 8:cb93c1d3209a 150 state7e = 1;
shreeshas95 8:cb93c1d3209a 151 break;
shreeshas95 8:cb93c1d3209a 152 case 6:
shreeshas95 8:cb93c1d3209a 153 state7e = 1;
shreeshas95 8:cb93c1d3209a 154 skipIteration = true;
shreeshas95 8:cb93c1d3209a 155 break;
shreeshas95 8:cb93c1d3209a 156 case 7:
shreeshas95 8:cb93c1d3209a 157 state7e = 0;
shreeshas95 8:cb93c1d3209a 158 // detected 7e
shreeshas95 8:cb93c1d3209a 159 // printf("detected 7e : chain start : %u, frame_start : %u\r\n", (chain_started ? 1 : 0), (frame_started ? 1 : 0) );
shreeshas95 8:cb93c1d3209a 160 if( !chain_started ){
shreeshas95 8:cb93c1d3209a 161 chain_started = true;
shreeshas95 8:cb93c1d3209a 162 frame_started = true;
shreeshas95 8:cb93c1d3209a 163 byteCount = 0;
shreeshas95 8:cb93c1d3209a 164 outByte = 0;
shreeshas95 8:cb93c1d3209a 165 outState = 0;
shreeshas95 8:cb93c1d3209a 166 skipIteration = true;
shreeshas95 8:cb93c1d3209a 167 }
shreeshas95 8:cb93c1d3209a 168 else{
shreeshas95 8:cb93c1d3209a 169 flushData(byteCount, outState);
shreeshas95 8:cb93c1d3209a 170 byteCount = 0;
shreeshas95 8:cb93c1d3209a 171 outState = 0;
shreeshas95 8:cb93c1d3209a 172 outByte = 0;
shreeshas95 8:cb93c1d3209a 173 skipIteration = true;
shreeshas95 8:cb93c1d3209a 174 }
shreeshas95 8:cb93c1d3209a 175 break;
shreeshas95 8:cb93c1d3209a 176 }
shreeshas95 8:cb93c1d3209a 177 }
shreeshas95 8:cb93c1d3209a 178 if( (!skipIteration) && (frame_started) ){
shreeshas95 8:cb93c1d3209a 179 // write bit to output
shreeshas95 8:cb93c1d3209a 180 switch( outState ){
shreeshas95 8:cb93c1d3209a 181 case 0:
shreeshas95 8:cb93c1d3209a 182 outState = 1;
shreeshas95 8:cb93c1d3209a 183 tempString[outByte] = tempBit << 7;
shreeshas95 8:cb93c1d3209a 184 break;
shreeshas95 8:cb93c1d3209a 185 case 1:
shreeshas95 8:cb93c1d3209a 186 outState = 2;
shreeshas95 8:cb93c1d3209a 187 tempString[outByte] += tempBit << 6;
shreeshas95 8:cb93c1d3209a 188 break;
shreeshas95 8:cb93c1d3209a 189 case 2:
shreeshas95 8:cb93c1d3209a 190 outState = 3;
shreeshas95 8:cb93c1d3209a 191 tempString[outByte] += tempBit << 5;
shreeshas95 8:cb93c1d3209a 192 break;
shreeshas95 8:cb93c1d3209a 193 case 3:
shreeshas95 8:cb93c1d3209a 194 outState = 4;
shreeshas95 8:cb93c1d3209a 195 tempString[outByte] += tempBit << 4;
shreeshas95 8:cb93c1d3209a 196 break;
shreeshas95 8:cb93c1d3209a 197 case 4:
shreeshas95 8:cb93c1d3209a 198 outState = 5;
shreeshas95 8:cb93c1d3209a 199 tempString[outByte] += tempBit << 3;
shreeshas95 8:cb93c1d3209a 200 break;
shreeshas95 8:cb93c1d3209a 201 case 5:
shreeshas95 8:cb93c1d3209a 202 outState = 6;
shreeshas95 8:cb93c1d3209a 203 tempString[outByte] += tempBit << 2;
shreeshas95 8:cb93c1d3209a 204 break;
shreeshas95 8:cb93c1d3209a 205 case 6:
shreeshas95 8:cb93c1d3209a 206 outState = 7;
shreeshas95 8:cb93c1d3209a 207 tempString[outByte] += tempBit << 1;
shreeshas95 8:cb93c1d3209a 208 break;
shreeshas95 8:cb93c1d3209a 209 case 7:
shreeshas95 8:cb93c1d3209a 210 // printf("wrote a byte in tempString\r\n");
shreeshas95 8:cb93c1d3209a 211 outState = 0;
shreeshas95 8:cb93c1d3209a 212 tempString[outByte] += tempBit;
shreeshas95 8:cb93c1d3209a 213 ++outByte;
shreeshas95 8:cb93c1d3209a 214 // exceeded tc length discard
shreeshas95 8:cb93c1d3209a 215 if(outByte > 135){
shreeshas95 8:cb93c1d3209a 216 outByte = 0;
shreeshas95 8:cb93c1d3209a 217 }
shreeshas95 8:cb93c1d3209a 218 ++byteCount;
shreeshas95 8:cb93c1d3209a 219 break;
shreeshas95 8:cb93c1d3209a 220 }
shreeshas95 3:eec1097c0dd6 221 }
shreeshas95 3:eec1097c0dd6 222 }
shreeshas95 7:e71ecfe3a340 223 }
shreeshas95 3:eec1097c0dd6 224 }
shreeshas95 8:cb93c1d3209a 225 }