Dummy program to demonstrate problems: working code
Dependencies: SLCD mbed-rtos mbed
Fork of MNG_TC by
MNG_TC.h@9:934fdce72b3d, 2015-07-16 (annotated)
- Committer:
- shreeshas95
- Date:
- Thu Jul 16 06:53:38 2015 +0000
- Revision:
- 9:934fdce72b3d
- Parent:
- 8:cb93c1d3209a
thread testing
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shreeshas95 | 8:cb93c1d3209a | 1 | // 8 Jul |
shreeshas95 | 8:cb93c1d3209a | 2 | // did flowchart of states |
shreeshas95 | 7:e71ecfe3a340 | 3 | |
shreeshas95 | 8:cb93c1d3209a | 4 | // 7 Jul |
shreeshas95 | 8:cb93c1d3209a | 5 | // done :decode should run once not every time tc received handle this |
shreeshas95 | 8:cb93c1d3209a | 6 | // handle sd card with cdms team |
shreeshas95 | 8:cb93c1d3209a | 7 | |
shreeshas95 | 8:cb93c1d3209a | 8 | // done :replace tc_list header with VAR_SPACE HEAD |
shreeshas95 | 8:cb93c1d3209a | 9 | // done :delete data in rcv_tc |
shreeshas95 | 8:cb93c1d3209a | 10 | // done :handle last tc in mbg and rcv_tc |
shreeshas95 | 8:cb93c1d3209a | 11 | // done :delete all tc after pass |
shreeshas95 | 8:cb93c1d3209a | 12 | |
shreeshas95 | 2:994e741028c7 | 13 | |
shreeshas95 | 2:994e741028c7 | 14 | //Jun 7 |
shreeshas95 | 2:994e741028c7 | 15 | //PROBLEM IN DELETING TC_string pointer not solved |
shreeshas95 | 2:994e741028c7 | 16 | |
shreeshas95 | 2:994e741028c7 | 17 | // Jun 6 |
shreeshas95 | 2:994e741028c7 | 18 | // WHAT IS TC exec code in L1 ack ? |
shreeshas95 | 2:994e741028c7 | 19 | // Removed class and introduced namespace |
shreeshas95 | 2:994e741028c7 | 20 | |
shreeshas95 | 0:b5b370873460 | 21 | // Apil 15 |
shreeshas95 | 0:b5b370873460 | 22 | //added back printf statements |
shreeshas95 | 0:b5b370873460 | 23 | //added back delete TC_string for debugging |
shreeshas95 | 0:b5b370873460 | 24 | |
shreeshas95 | 0:b5b370873460 | 25 | // add number of tm packets while calling snd |
shreeshas95 | 0:b5b370873460 | 26 | // function overloading z |
shreeshas95 | 0:b5b370873460 | 27 | |
shreeshas95 | 0:b5b370873460 | 28 | // starting value of packet sequence count at each pass |
shreeshas95 | 0:b5b370873460 | 29 | #define PSC_START_VALUE 1 |
shreeshas95 | 0:b5b370873460 | 30 | |
shreeshas95 | 0:b5b370873460 | 31 | // APID list |
shreeshas95 | 0:b5b370873460 | 32 | #define APID_CALLSIGN 0 |
shreeshas95 | 0:b5b370873460 | 33 | #define APID_BAE 1 |
shreeshas95 | 0:b5b370873460 | 34 | #define APID_CDMS 2 |
shreeshas95 | 0:b5b370873460 | 35 | #define APID_SPEED 3 |
shreeshas95 | 0:b5b370873460 | 36 | |
shreeshas95 | 0:b5b370873460 | 37 | // HIGH PRIORITY TC - priority list |
shreeshas95 | 0:b5b370873460 | 38 | // not correct values here |
shreeshas95 | 0:b5b370873460 | 39 | #define HPTC1 5 |
shreeshas95 | 0:b5b370873460 | 40 | #define HPTC2 6 |
shreeshas95 | 0:b5b370873460 | 41 | // Add more entries above |
shreeshas95 | 0:b5b370873460 | 42 | |
shreeshas95 | 2:994e741028c7 | 43 | // SIZE of tc in bytes |
shreeshas95 | 2:994e741028c7 | 44 | #define TC_SHORT_SIZE 11 |
shreeshas95 | 2:994e741028c7 | 45 | #define TC_LONG_SIZE 135 |
shreeshas95 | 2:994e741028c7 | 46 | |
shreeshas95 | 0:b5b370873460 | 47 | // TMID list |
shreeshas95 | 0:b5b370873460 | 48 | #define TMID_ACK_L1 10 |
shreeshas95 | 0:b5b370873460 | 49 | |
shreeshas95 | 8:cb93c1d3209a | 50 | namespace MNG_TC |
shreeshas95 | 0:b5b370873460 | 51 | { |
shreeshas95 | 8:cb93c1d3209a | 52 | unsigned char psc = PSC_START_VALUE; |
shreeshas95 | 8:cb93c1d3209a | 53 | unsigned int total_valid_TC = 0; |
shreeshas95 | 8:cb93c1d3209a | 54 | bool all_crc_pass = true; |
shreeshas95 | 8:cb93c1d3209a | 55 | bool no_missing_TC = true; |
shreeshas95 | 8:cb93c1d3209a | 56 | unsigned int exec_count = 0; |
shreeshas95 | 2:994e741028c7 | 57 | |
shreeshas95 | 2:994e741028c7 | 58 | //SECONDARY FUNCTIONS : [SHOULD NOT BE CALLED INDEPENDENTLY] |
shreeshas95 | 2:994e741028c7 | 59 | //USED BY MEMBER FUNCTIONS FOUND BELOW |
shreeshas95 | 2:994e741028c7 | 60 | |
shreeshas95 | 8:cb93c1d3209a | 61 | namespace L1_ACK{ |
shreeshas95 | 8:cb93c1d3209a | 62 | |
shreeshas95 | 8:cb93c1d3209a | 63 | void generate_L1_ack_TM(TM_list *tm_ptr){ |
shreeshas95 | 8:cb93c1d3209a | 64 | tm_ptr->next_TM = NULL; |
shreeshas95 | 8:cb93c1d3209a | 65 | tm_ptr->TM_string = new unsigned char[TM_SHORT_SIZE]; |
shreeshas95 | 8:cb93c1d3209a | 66 | // TMID |
shreeshas95 | 8:cb93c1d3209a | 67 | tm_ptr->tmid = 0xA; |
shreeshas95 | 8:cb93c1d3209a | 68 | tm_ptr->TM_string[0] = 0xaf; |
shreeshas95 | 7:e71ecfe3a340 | 69 | } |
shreeshas95 | 8:cb93c1d3209a | 70 | |
shreeshas95 | 8:cb93c1d3209a | 71 | void execode_crc(bool all_pass, TM_list *tm_ptr){ |
shreeshas95 | 8:cb93c1d3209a | 72 | |
shreeshas95 | 8:cb93c1d3209a | 73 | tm_ptr->TM_string[1] = ( all_crc_pass == true ) ? 0x01 : 0x00 ; |
shreeshas95 | 8:cb93c1d3209a | 74 | |
shreeshas95 | 8:cb93c1d3209a | 75 | uint16_t crc_checksum = CRC::crc16_gen(tm_ptr->TM_string, TM_SHORT_SIZE-2); |
shreeshas95 | 2:994e741028c7 | 76 | |
shreeshas95 | 8:cb93c1d3209a | 77 | tm_ptr->TM_string[TM_SHORT_SIZE-2] = (crc_checksum >> 8) & 0xff; |
shreeshas95 | 8:cb93c1d3209a | 78 | tm_ptr->TM_string[TM_SHORT_SIZE-1] = crc_checksum & 0xff; |
shreeshas95 | 8:cb93c1d3209a | 79 | } |
shreeshas95 | 2:994e741028c7 | 80 | } |
shreeshas95 | 2:994e741028c7 | 81 | |
shreeshas95 | 8:cb93c1d3209a | 82 | namespace EXECUTION{ |
shreeshas95 | 2:994e741028c7 | 83 | |
shreeshas95 | 8:cb93c1d3209a | 84 | TM_list* Manage_CDMS(TC_list *ptr_tc){ |
shreeshas95 | 8:cb93c1d3209a | 85 | |
shreeshas95 | 2:994e741028c7 | 86 | // DUMMY PROGRAM TO CREATE A SAMPLE TM |
shreeshas95 | 2:994e741028c7 | 87 | |
shreeshas95 | 2:994e741028c7 | 88 | // allocate memory for new tm list |
shreeshas95 | 8:cb93c1d3209a | 89 | TM_list *test_TM = new TM_list; |
shreeshas95 | 8:cb93c1d3209a | 90 | |
shreeshas95 | 8:cb93c1d3209a | 91 | test_TM->next_TM = NULL; |
shreeshas95 | 8:cb93c1d3209a | 92 | |
shreeshas95 | 2:994e741028c7 | 93 | // allocate memory for the tm string |
shreeshas95 | 8:cb93c1d3209a | 94 | unsigned char *str = new unsigned char[TM_TYPE1_SIZE]; |
shreeshas95 | 8:cb93c1d3209a | 95 | |
shreeshas95 | 8:cb93c1d3209a | 96 | |
shreeshas95 | 2:994e741028c7 | 97 | // frame type-1 is 0. [ (0 << 7) = 0 ] |
shreeshas95 | 8:cb93c1d3209a | 98 | str[0] = 0; |
shreeshas95 | 8:cb93c1d3209a | 99 | |
shreeshas95 | 2:994e741028c7 | 100 | // the tmid determines type-1, or 2 |
shreeshas95 | 2:994e741028c7 | 101 | // tmid : 0x1 belongs to type1 (dummy program) |
shreeshas95 | 8:cb93c1d3209a | 102 | test_TM->tmid = 0x1; |
shreeshas95 | 7:e71ecfe3a340 | 103 | |
shreeshas95 | 8:cb93c1d3209a | 104 | // 4 bit TMID |
shreeshas95 | 8:cb93c1d3209a | 105 | str[0] += (0x1) << 3; |
shreeshas95 | 8:cb93c1d3209a | 106 | |
shreeshas95 | 8:cb93c1d3209a | 107 | // 20 bit seq. count |
shreeshas95 | 8:cb93c1d3209a | 108 | str[0] += 0x7; |
shreeshas95 | 8:cb93c1d3209a | 109 | str[1] = 0xff; |
shreeshas95 | 8:cb93c1d3209a | 110 | str[2] = 0xff; |
shreeshas95 | 2:994e741028c7 | 111 | |
shreeshas95 | 8:cb93c1d3209a | 112 | // random data |
shreeshas95 | 8:cb93c1d3209a | 113 | for(int i = 3 ; i < (TM_TYPE1_SIZE-2) ; ++i ){ |
shreeshas95 | 8:cb93c1d3209a | 114 | str[i] = 'a'; |
shreeshas95 | 8:cb93c1d3209a | 115 | } |
shreeshas95 | 8:cb93c1d3209a | 116 | |
shreeshas95 | 7:e71ecfe3a340 | 117 | // APPEND CRC : ALL THE PROCESSES HAVE TO GENERATE AND APPEND CRC |
shreeshas95 | 8:cb93c1d3209a | 118 | uint16_t crc_checksum = CRC::crc16_gen(str, TM_TYPE1_SIZE-2); |
shreeshas95 | 8:cb93c1d3209a | 119 | str[TM_TYPE1_SIZE-2] = (crc_checksum >> 8) & 0xff; |
shreeshas95 | 8:cb93c1d3209a | 120 | str[TM_TYPE1_SIZE-1] = crc_checksum & 0xff; |
shreeshas95 | 2:994e741028c7 | 121 | |
shreeshas95 | 8:cb93c1d3209a | 122 | test_TM->TM_string = str; |
shreeshas95 | 8:cb93c1d3209a | 123 | |
shreeshas95 | 8:cb93c1d3209a | 124 | return test_TM; |
shreeshas95 | 7:e71ecfe3a340 | 125 | } |
shreeshas95 | 7:e71ecfe3a340 | 126 | |
shreeshas95 | 8:cb93c1d3209a | 127 | // TM_list* RELAY(TC_list *tc_ptr){ |
shreeshas95 | 8:cb93c1d3209a | 128 | // |
shreeshas95 | 8:cb93c1d3209a | 129 | //// FIRST send long or short tc |
shreeshas95 | 8:cb93c1d3209a | 130 | // unsigned char tc_len = ( tc_ptr->short_or_long ? TC_SHORT_SIZE : TC_LONG_SIZE ); |
shreeshas95 | 8:cb93c1d3209a | 131 | // PC.putc( tc_len ); |
shreeshas95 | 8:cb93c1d3209a | 132 | //// THE TARGET SHOULD READ 'n' MORE BYTES AS FOUND IN THE FIRST BYTE |
shreeshas95 | 8:cb93c1d3209a | 133 | // |
shreeshas95 | 8:cb93c1d3209a | 134 | //// SEND THE TC TO THE TARGET DEVICE [ALONG WITH CRC] |
shreeshas95 | 8:cb93c1d3209a | 135 | // for(unsigned int i = 0 ; i < tc_len ; ++i){ |
shreeshas95 | 8:cb93c1d3209a | 136 | // PC.putc( tc_ptr->TC_string[i] ); |
shreeshas95 | 8:cb93c1d3209a | 137 | // } |
shreeshas95 | 8:cb93c1d3209a | 138 | // |
shreeshas95 | 8:cb93c1d3209a | 139 | //// WAIT FOR THE TM |
shreeshas95 | 8:cb93c1d3209a | 140 | // TM_list* tm_head = new TM_list; |
shreeshas95 | 8:cb93c1d3209a | 141 | // TM_list* tm_ptr = tm_head; |
shreeshas95 | 8:cb93c1d3209a | 142 | // |
shreeshas95 | 8:cb93c1d3209a | 143 | //// FIRST RECEIVE NUMBER OF TM'S TO BE RECEVIVED |
shreeshas95 | 8:cb93c1d3209a | 144 | // unsigned char tm_num = PC.getc(); |
shreeshas95 | 8:cb93c1d3209a | 145 | // for(unsigned int i = 0 ; i < tm_num ; ++i){ |
shreeshas95 | 8:cb93c1d3209a | 146 | // |
shreeshas95 | 8:cb93c1d3209a | 147 | //// THEN FOR EACH TM FIRST SEND TYPE-1 OR TYPE-2 i.e. NUMBER OF BYTES TO READ |
shreeshas95 | 8:cb93c1d3209a | 148 | // unsigned char tm_len = PC.getc(); |
shreeshas95 | 8:cb93c1d3209a | 149 | // tm_ptr->TM_string = new unsigned char[tm_len]; |
shreeshas95 | 8:cb93c1d3209a | 150 | // for(unsigned int j = 0 ; j < tm_len ; ++j){ |
shreeshas95 | 8:cb93c1d3209a | 151 | // tm_ptr->TM_string[j] = PC.getc(); |
shreeshas95 | 8:cb93c1d3209a | 152 | // } |
shreeshas95 | 8:cb93c1d3209a | 153 | // |
shreeshas95 | 8:cb93c1d3209a | 154 | //// DECODE TMID FROM THE PACKET |
shreeshas95 | 8:cb93c1d3209a | 155 | // if(tm_len == 134){ |
shreeshas95 | 8:cb93c1d3209a | 156 | // unsigned char temp = tm_ptr->TM_string[0]; |
shreeshas95 | 8:cb93c1d3209a | 157 | // tm_ptr->tmid = (temp >> 3) & 0xf; |
shreeshas95 | 8:cb93c1d3209a | 158 | // } |
shreeshas95 | 8:cb93c1d3209a | 159 | // else{ |
shreeshas95 | 8:cb93c1d3209a | 160 | // unsigned char temp = tm_ptr->TM_string[4]; |
shreeshas95 | 8:cb93c1d3209a | 161 | // tm_ptr->tmid = (temp >> 4) & 0xf; |
shreeshas95 | 8:cb93c1d3209a | 162 | // } |
shreeshas95 | 8:cb93c1d3209a | 163 | // |
shreeshas95 | 8:cb93c1d3209a | 164 | //// ALLOCATE MEMORY FOR NEXT TM PACKET |
shreeshas95 | 8:cb93c1d3209a | 165 | // if( i == tm_num-1 ){ |
shreeshas95 | 8:cb93c1d3209a | 166 | // tm_ptr->next_TM = NULL; |
shreeshas95 | 8:cb93c1d3209a | 167 | // } |
shreeshas95 | 8:cb93c1d3209a | 168 | // else{ |
shreeshas95 | 8:cb93c1d3209a | 169 | // tm_ptr->next_TM = new TM_list; |
shreeshas95 | 8:cb93c1d3209a | 170 | // tm_ptr = tm_ptr->next_TM; |
shreeshas95 | 8:cb93c1d3209a | 171 | // } |
shreeshas95 | 8:cb93c1d3209a | 172 | // } |
shreeshas95 | 8:cb93c1d3209a | 173 | // |
shreeshas95 | 8:cb93c1d3209a | 174 | //// FILL IN THE tm_ptr AND RETURN |
shreeshas95 | 8:cb93c1d3209a | 175 | // return tm_head; |
shreeshas95 | 8:cb93c1d3209a | 176 | // } |
shreeshas95 | 2:994e741028c7 | 177 | |
shreeshas95 | 8:cb93c1d3209a | 178 | bool detect_ack(TM_list *tm_ptr){ |
shreeshas95 | 8:cb93c1d3209a | 179 | // printf("inside detect ack : "); |
shreeshas95 | 8:cb93c1d3209a | 180 | if( tm_ptr != NULL ){ |
shreeshas95 | 8:cb93c1d3209a | 181 | unsigned char tm_ack = tm_ptr->TM_string[3]; |
shreeshas95 | 8:cb93c1d3209a | 182 | tm_ack &= 0xFF;//Ack or Nack can be decided just by checking [5:6] bits |
shreeshas95 | 8:cb93c1d3209a | 183 | if( (tm_ack == 0xE0) || (tm_ack == 0xA0) || (tm_ack == 0xC0) ){ |
shreeshas95 | 8:cb93c1d3209a | 184 | // printf("ack found\r\n"); |
shreeshas95 | 8:cb93c1d3209a | 185 | return true; |
shreeshas95 | 8:cb93c1d3209a | 186 | } |
shreeshas95 | 8:cb93c1d3209a | 187 | else{ |
shreeshas95 | 8:cb93c1d3209a | 188 | // printf("nack found\r\n"); |
shreeshas95 | 8:cb93c1d3209a | 189 | return false; |
shreeshas95 | 8:cb93c1d3209a | 190 | } |
shreeshas95 | 7:e71ecfe3a340 | 191 | } |
shreeshas95 | 7:e71ecfe3a340 | 192 | else{ |
shreeshas95 | 8:cb93c1d3209a | 193 | // printf("nack null\r\n"); |
shreeshas95 | 7:e71ecfe3a340 | 194 | return false; |
shreeshas95 | 7:e71ecfe3a340 | 195 | } |
shreeshas95 | 2:994e741028c7 | 196 | } |
shreeshas95 | 8:cb93c1d3209a | 197 | |
shreeshas95 | 8:cb93c1d3209a | 198 | bool obosc_tc(TC_list *tc_ptr){ |
shreeshas95 | 8:cb93c1d3209a | 199 | bool OBOSC = false; |
shreeshas95 | 8:cb93c1d3209a | 200 | // check apid |
shreeshas95 | 8:cb93c1d3209a | 201 | if(tc_ptr->apid == 2){ |
shreeshas95 | 8:cb93c1d3209a | 202 | // check service type |
shreeshas95 | 8:cb93c1d3209a | 203 | if( (tc_ptr->TC_string[2]) >> 4 == 0xB ){ |
shreeshas95 | 8:cb93c1d3209a | 204 | // check service subtype |
shreeshas95 | 8:cb93c1d3209a | 205 | switch( (tc_ptr->TC_string[2]) & 0xf ){ |
shreeshas95 | 8:cb93c1d3209a | 206 | case 1: |
shreeshas95 | 8:cb93c1d3209a | 207 | case 2: |
shreeshas95 | 8:cb93c1d3209a | 208 | case 5: |
shreeshas95 | 8:cb93c1d3209a | 209 | case 6: |
shreeshas95 | 8:cb93c1d3209a | 210 | case 15: |
shreeshas95 | 8:cb93c1d3209a | 211 | OBOSC = true; |
shreeshas95 | 8:cb93c1d3209a | 212 | // printf("found obosc\r\n"); |
shreeshas95 | 8:cb93c1d3209a | 213 | } |
shreeshas95 | 8:cb93c1d3209a | 214 | } |
shreeshas95 | 8:cb93c1d3209a | 215 | } |
shreeshas95 | 8:cb93c1d3209a | 216 | |
shreeshas95 | 8:cb93c1d3209a | 217 | return OBOSC; |
shreeshas95 | 8:cb93c1d3209a | 218 | } |
shreeshas95 | 8:cb93c1d3209a | 219 | |
shreeshas95 | 8:cb93c1d3209a | 220 | TM_list* execute_obosc(TC_list *tc_ptr){ |
shreeshas95 | 8:cb93c1d3209a | 221 | return NULL; |
shreeshas95 | 9:934fdce72b3d | 222 | //// printf("inside execute obosc\r\n"); |
shreeshas95 | 9:934fdce72b3d | 223 | // unsigned char service_subtype = (tc_ptr->TC_string[2]) & 0x0F; |
shreeshas95 | 9:934fdce72b3d | 224 | // unsigned char num = 0; |
shreeshas95 | 9:934fdce72b3d | 225 | // unsigned char psc = 0x00; |
shreeshas95 | 9:934fdce72b3d | 226 | // switch( service_subtype ){ |
shreeshas95 | 9:934fdce72b3d | 227 | // case 0x01: |
shreeshas95 | 9:934fdce72b3d | 228 | // // disable tc |
shreeshas95 | 9:934fdce72b3d | 229 | // num = tc_ptr->TC_string[4]; |
shreeshas95 | 9:934fdce72b3d | 230 | // psc = tc_ptr->TC_string[3]; |
shreeshas95 | 9:934fdce72b3d | 231 | // |
shreeshas95 | 9:934fdce72b3d | 232 | // for(int i = 0 ; i < num ; ++i){ |
shreeshas95 | 9:934fdce72b3d | 233 | // TC_list *tcp = VAR_SPACE::Head_node; |
shreeshas95 | 9:934fdce72b3d | 234 | // while( tcp != NULL ){ |
shreeshas95 | 9:934fdce72b3d | 235 | // if(tcp->packet_seq_count == psc){ |
shreeshas95 | 9:934fdce72b3d | 236 | // tcp->enabled = false; |
shreeshas95 | 9:934fdce72b3d | 237 | // ++psc; |
shreeshas95 | 9:934fdce72b3d | 238 | // break; |
shreeshas95 | 9:934fdce72b3d | 239 | // } |
shreeshas95 | 9:934fdce72b3d | 240 | // } |
shreeshas95 | 9:934fdce72b3d | 241 | // } |
shreeshas95 | 9:934fdce72b3d | 242 | // break; |
shreeshas95 | 9:934fdce72b3d | 243 | // case 0x02: |
shreeshas95 | 9:934fdce72b3d | 244 | // // enable tc |
shreeshas95 | 9:934fdce72b3d | 245 | // num = tc_ptr->TC_string[4]; |
shreeshas95 | 9:934fdce72b3d | 246 | // psc = tc_ptr->TC_string[3]; |
shreeshas95 | 9:934fdce72b3d | 247 | // |
shreeshas95 | 9:934fdce72b3d | 248 | // for(int i = 0 ; i < num ; ++i){ |
shreeshas95 | 9:934fdce72b3d | 249 | // TC_list *tcp = VAR_SPACE::Head_node; |
shreeshas95 | 9:934fdce72b3d | 250 | // while( tcp != NULL ){ |
shreeshas95 | 9:934fdce72b3d | 251 | // if(tcp->packet_seq_count == psc){ |
shreeshas95 | 9:934fdce72b3d | 252 | // tcp->enabled = true; |
shreeshas95 | 9:934fdce72b3d | 253 | // ++psc; |
shreeshas95 | 9:934fdce72b3d | 254 | // break; |
shreeshas95 | 9:934fdce72b3d | 255 | // } |
shreeshas95 | 9:934fdce72b3d | 256 | // } |
shreeshas95 | 9:934fdce72b3d | 257 | // } |
shreeshas95 | 9:934fdce72b3d | 258 | // break; |
shreeshas95 | 9:934fdce72b3d | 259 | // case 0x05: |
shreeshas95 | 9:934fdce72b3d | 260 | // // retry executin of tc |
shreeshas95 | 9:934fdce72b3d | 261 | // psc = tc_ptr->TC_string[3]; |
shreeshas95 | 9:934fdce72b3d | 262 | // |
shreeshas95 | 9:934fdce72b3d | 263 | // break; |
shreeshas95 | 9:934fdce72b3d | 264 | // } |
shreeshas95 | 9:934fdce72b3d | 265 | // TM_list *tm_ptr = new TM_list; |
shreeshas95 | 9:934fdce72b3d | 266 | // tm_ptr->TM_string; |
shreeshas95 | 9:934fdce72b3d | 267 | // return NULL; |
shreeshas95 | 8:cb93c1d3209a | 268 | } |
shreeshas95 | 8:cb93c1d3209a | 269 | |
shreeshas95 | 8:cb93c1d3209a | 270 | bool sdCardOp(TC_list* tc_ptr){ |
shreeshas95 | 8:cb93c1d3209a | 271 | bool readSD = false; |
shreeshas95 | 8:cb93c1d3209a | 272 | |
shreeshas95 | 8:cb93c1d3209a | 273 | if(tc_ptr->apid == 2){ |
shreeshas95 | 8:cb93c1d3209a | 274 | if( ( (tc_ptr->TC_string[2]) >> 4) == 0xF ){ |
shreeshas95 | 8:cb93c1d3209a | 275 | switch( (tc_ptr->TC_string[2]) & 0xf ){ |
shreeshas95 | 8:cb93c1d3209a | 276 | case 0: |
shreeshas95 | 8:cb93c1d3209a | 277 | case 1: |
shreeshas95 | 8:cb93c1d3209a | 278 | case 2: |
shreeshas95 | 8:cb93c1d3209a | 279 | case 3: |
shreeshas95 | 8:cb93c1d3209a | 280 | case 4: |
shreeshas95 | 8:cb93c1d3209a | 281 | readSD = true; |
shreeshas95 | 8:cb93c1d3209a | 282 | // printf("found sdcard op\r\n"); |
shreeshas95 | 8:cb93c1d3209a | 283 | } |
shreeshas95 | 8:cb93c1d3209a | 284 | } |
shreeshas95 | 8:cb93c1d3209a | 285 | } |
shreeshas95 | 8:cb93c1d3209a | 286 | return readSD; |
shreeshas95 | 8:cb93c1d3209a | 287 | } |
shreeshas95 | 8:cb93c1d3209a | 288 | |
shreeshas95 | 8:cb93c1d3209a | 289 | TM_list* CDMS_RLY_TMTC(TC_list* tc_ptr){ |
shreeshas95 | 8:cb93c1d3209a | 290 | return NULL; |
shreeshas95 | 8:cb93c1d3209a | 291 | } |
shreeshas95 | 8:cb93c1d3209a | 292 | |
shreeshas95 | 8:cb93c1d3209a | 293 | bool inline execute_core(TC_list *tc_ptr){ |
shreeshas95 | 8:cb93c1d3209a | 294 | printf("executing core psc = %u\r\n", psc); |
shreeshas95 | 8:cb93c1d3209a | 295 | |
shreeshas95 | 8:cb93c1d3209a | 296 | if( !EXECUTION::sdCardOp(tc_ptr) ){ |
shreeshas95 | 8:cb93c1d3209a | 297 | // printf("not sd card op\r\n"); |
shreeshas95 | 8:cb93c1d3209a | 298 | TM_List *tm_ptr; |
shreeshas95 | 8:cb93c1d3209a | 299 | |
shreeshas95 | 8:cb93c1d3209a | 300 | // call relay here |
shreeshas95 | 8:cb93c1d3209a | 301 | tm_ptr = EXECUTION::CDMS_RLY_TMTC(tc_ptr); |
shreeshas95 | 8:cb93c1d3209a | 302 | |
shreeshas95 | 8:cb93c1d3209a | 303 | // SEND DATA TO GS |
shreeshas95 | 8:cb93c1d3209a | 304 | // SND_TM(tm_ptr); |
shreeshas95 | 8:cb93c1d3209a | 305 | // for rolling buffer : |
shreeshas95 | 8:cb93c1d3209a | 306 | // send EoS only if TM to next tc has not arrived yet |
shreeshas95 | 8:cb93c1d3209a | 307 | // else put the next TM itself. |
shreeshas95 | 8:cb93c1d3209a | 308 | |
shreeshas95 | 8:cb93c1d3209a | 309 | if( EXECUTION::detect_ack(tm_ptr) ){ |
shreeshas95 | 8:cb93c1d3209a | 310 | tc_ptr->exec_status = 1; |
shreeshas95 | 8:cb93c1d3209a | 311 | } |
shreeshas95 | 8:cb93c1d3209a | 312 | else{ |
shreeshas95 | 8:cb93c1d3209a | 313 | tc_ptr->exec_status = 2; |
shreeshas95 | 8:cb93c1d3209a | 314 | tc_ptr->enabled = false; |
shreeshas95 | 8:cb93c1d3209a | 315 | if( tc_ptr->abort_on_nack ){ |
shreeshas95 | 8:cb93c1d3209a | 316 | return false; |
shreeshas95 | 8:cb93c1d3209a | 317 | } |
shreeshas95 | 8:cb93c1d3209a | 318 | } |
shreeshas95 | 8:cb93c1d3209a | 319 | |
shreeshas95 | 8:cb93c1d3209a | 320 | // DELETE THE TM AFTER USE |
shreeshas95 | 8:cb93c1d3209a | 321 | while(tm_ptr != NULL){ |
shreeshas95 | 8:cb93c1d3209a | 322 | TM_list *temp = tm_ptr->next_TM; |
shreeshas95 | 8:cb93c1d3209a | 323 | delete tm_ptr; |
shreeshas95 | 8:cb93c1d3209a | 324 | tm_ptr = temp; |
shreeshas95 | 8:cb93c1d3209a | 325 | } |
shreeshas95 | 8:cb93c1d3209a | 326 | } |
shreeshas95 | 8:cb93c1d3209a | 327 | else{ |
shreeshas95 | 8:cb93c1d3209a | 328 | // write sd card code |
shreeshas95 | 8:cb93c1d3209a | 329 | } |
shreeshas95 | 8:cb93c1d3209a | 330 | return true; |
shreeshas95 | 7:e71ecfe3a340 | 331 | } |
shreeshas95 | 0:b5b370873460 | 332 | } |
shreeshas95 | 8:cb93c1d3209a | 333 | |
shreeshas95 | 8:cb93c1d3209a | 334 | // MEMBER FUNCTIONS |
shreeshas95 | 8:cb93c1d3209a | 335 | |
shreeshas95 | 2:994e741028c7 | 336 | /* |
shreeshas95 | 2:994e741028c7 | 337 | @brief: INITIALISE THE HEAD NODE AND RESET THE VARIABLES |
shreeshas95 | 2:994e741028c7 | 338 | @param: TC_list *head : head node pointer |
shreeshas95 | 2:994e741028c7 | 339 | @return: none |
shreeshas95 | 2:994e741028c7 | 340 | */ |
shreeshas95 | 8:cb93c1d3209a | 341 | void init(){ |
shreeshas95 | 4:f95195748a0c | 342 | // printf("inside init\r\n"); |
shreeshas95 | 0:b5b370873460 | 343 | total_valid_TC = 0; |
shreeshas95 | 0:b5b370873460 | 344 | all_crc_pass = true; |
shreeshas95 | 0:b5b370873460 | 345 | no_missing_TC = true; |
shreeshas95 | 8:cb93c1d3209a | 346 | psc = PSC_START_VALUE; |
shreeshas95 | 8:cb93c1d3209a | 347 | exec_count = 0; |
shreeshas95 | 2:994e741028c7 | 348 | } |
shreeshas95 | 2:994e741028c7 | 349 | |
shreeshas95 | 8:cb93c1d3209a | 350 | |
shreeshas95 | 2:994e741028c7 | 351 | /* |
shreeshas95 | 2:994e741028c7 | 352 | @brief: DELETE THE CRC FAILED TC FROM THE LIST TO FREE-UP MEMORY AND UPDATE |
shreeshas95 | 2:994e741028c7 | 353 | THE TOTAL VALID TC AND GENERATE L1_ACK_TM |
shreeshas95 | 2:994e741028c7 | 354 | @param: none |
shreeshas95 | 8:cb93c1d3209a | 355 | @return: none |
shreeshas95 | 2:994e741028c7 | 356 | */ |
shreeshas95 | 8:cb93c1d3209a | 357 | void start_with(){ |
shreeshas95 | 8:cb93c1d3209a | 358 | printf("inside start with\r\n"); |
shreeshas95 | 8:cb93c1d3209a | 359 | TC_list *current_TC = VAR_SPACE::Head_node; |
shreeshas95 | 0:b5b370873460 | 360 | |
shreeshas95 | 0:b5b370873460 | 361 | total_valid_TC = 0; |
shreeshas95 | 0:b5b370873460 | 362 | all_crc_pass = true; |
shreeshas95 | 0:b5b370873460 | 363 | |
shreeshas95 | 8:cb93c1d3209a | 364 | TM_List *l1_ack = new TM_List; |
shreeshas95 | 8:cb93c1d3209a | 365 | TM_List *l1_ack_head = l1_ack; |
shreeshas95 | 8:cb93c1d3209a | 366 | L1_ACK::generate_L1_ack_TM(l1_ack); |
shreeshas95 | 0:b5b370873460 | 367 | |
shreeshas95 | 0:b5b370873460 | 368 | int TC_count = 0; |
shreeshas95 | 8:cb93c1d3209a | 369 | // printf("outside while in start with\r\n"); |
shreeshas95 | 8:cb93c1d3209a | 370 | // TC_list *zing = VAR_SPACE::Head_node; |
shreeshas95 | 8:cb93c1d3209a | 371 | // while(zing != NULL){ |
shreeshas95 | 8:cb93c1d3209a | 372 | //// printf("packet seq count = %u\r\n", zing->packet_seq_count); |
shreeshas95 | 8:cb93c1d3209a | 373 | // zing = zing->next_TC; |
shreeshas95 | 8:cb93c1d3209a | 374 | // } |
shreeshas95 | 2:994e741028c7 | 375 | while(current_TC != NULL){ |
shreeshas95 | 2:994e741028c7 | 376 | |
shreeshas95 | 2:994e741028c7 | 377 | unsigned char temp = 0; |
shreeshas95 | 2:994e741028c7 | 378 | |
shreeshas95 | 2:994e741028c7 | 379 | // FILL PSC of the TC [ don't care whether crc pass or fail ] |
shreeshas95 | 2:994e741028c7 | 380 | // PSC starts from 4th byte |
shreeshas95 | 2:994e741028c7 | 381 | l1_ack->TM_string[3+TC_count] = current_TC->TC_string[0]; |
shreeshas95 | 0:b5b370873460 | 382 | |
shreeshas95 | 2:994e741028c7 | 383 | // IF CRC PASS |
shreeshas95 | 0:b5b370873460 | 384 | if( current_TC->crc_pass ){ |
shreeshas95 | 0:b5b370873460 | 385 | ++total_valid_TC; |
shreeshas95 | 8:cb93c1d3209a | 386 | printf("correct start with: psc = %u, short = %u\r\n", current_TC->packet_seq_count, (current_TC->short_or_long) ? 1 : 0 ); |
shreeshas95 | 0:b5b370873460 | 387 | |
shreeshas95 | 2:994e741028c7 | 388 | // set the crc pass field in TC_STATUS ??? |
shreeshas95 | 2:994e741028c7 | 389 | temp = l1_ack->TM_string[2]; |
shreeshas95 | 2:994e741028c7 | 390 | temp |= ( 1 << (7-TC_count) ); |
shreeshas95 | 2:994e741028c7 | 391 | l1_ack->TM_string[2] = temp; |
shreeshas95 | 0:b5b370873460 | 392 | |
shreeshas95 | 2:994e741028c7 | 393 | // advance to the next node |
shreeshas95 | 0:b5b370873460 | 394 | current_TC = current_TC->next_TC; |
shreeshas95 | 0:b5b370873460 | 395 | } |
shreeshas95 | 2:994e741028c7 | 396 | // if crc fail |
shreeshas95 | 0:b5b370873460 | 397 | else{ |
shreeshas95 | 8:cb93c1d3209a | 398 | printf("crc fail start with: psc = %u\r\n", current_TC->packet_seq_count); |
shreeshas95 | 2:994e741028c7 | 399 | // unset the crc pass field in TC_STATUS |
shreeshas95 | 2:994e741028c7 | 400 | temp = l1_ack->TM_string[2]; |
shreeshas95 | 2:994e741028c7 | 401 | temp &= ~( 1 << (7-TC_count) ); |
shreeshas95 | 2:994e741028c7 | 402 | l1_ack->TM_string[2] = temp; |
shreeshas95 | 0:b5b370873460 | 403 | |
shreeshas95 | 7:e71ecfe3a340 | 404 | current_TC = current_TC->next_TC; |
shreeshas95 | 0:b5b370873460 | 405 | all_crc_pass = false; |
shreeshas95 | 0:b5b370873460 | 406 | } |
shreeshas95 | 0:b5b370873460 | 407 | ++TC_count; |
shreeshas95 | 0:b5b370873460 | 408 | |
shreeshas95 | 2:994e741028c7 | 409 | // extend the TM linked list if TC_count > 7 |
shreeshas95 | 2:994e741028c7 | 410 | if(TC_count > 7){ |
shreeshas95 | 2:994e741028c7 | 411 | TC_count = 0; |
shreeshas95 | 2:994e741028c7 | 412 | |
shreeshas95 | 8:cb93c1d3209a | 413 | l1_ack->next_TM = new TM_List; |
shreeshas95 | 2:994e741028c7 | 414 | l1_ack = l1_ack->next_TM; |
shreeshas95 | 8:cb93c1d3209a | 415 | L1_ACK::generate_L1_ack_TM(l1_ack); |
shreeshas95 | 2:994e741028c7 | 416 | |
shreeshas95 | 2:994e741028c7 | 417 | // FILL TC_EXEC_CODE |
shreeshas95 | 2:994e741028c7 | 418 | // APPEND CRC TO THE TM |
shreeshas95 | 8:cb93c1d3209a | 419 | L1_ACK::execode_crc( all_crc_pass, l1_ack ); |
shreeshas95 | 2:994e741028c7 | 420 | } |
shreeshas95 | 1:df31097c8442 | 421 | } |
shreeshas95 | 1:df31097c8442 | 422 | |
shreeshas95 | 8:cb93c1d3209a | 423 | // FILL UP THE REMAINING FIELDS WITH ZEROS |
shreeshas95 | 2:994e741028c7 | 424 | while(TC_count < 8){ |
shreeshas95 | 2:994e741028c7 | 425 | l1_ack->TM_string[2] &= ~( 1 << (7-TC_count) ); |
shreeshas95 | 8:cb93c1d3209a | 426 | // l1_ack->TM_string[3+TC_count] = 0; |
shreeshas95 | 8:cb93c1d3209a | 427 | l1_ack->TM_string[3+TC_count] = 0x01; |
shreeshas95 | 2:994e741028c7 | 428 | ++TC_count; |
shreeshas95 | 2:994e741028c7 | 429 | } |
shreeshas95 | 2:994e741028c7 | 430 | |
shreeshas95 | 2:994e741028c7 | 431 | // FILL TC_EXEC_CODE |
shreeshas95 | 2:994e741028c7 | 432 | // APPEND CRC TO THE TM |
shreeshas95 | 8:cb93c1d3209a | 433 | L1_ACK::execode_crc(all_crc_pass, l1_ack); |
shreeshas95 | 2:994e741028c7 | 434 | |
shreeshas95 | 8:cb93c1d3209a | 435 | // SND_TM(l1_ack); |
shreeshas95 | 2:994e741028c7 | 436 | |
shreeshas95 | 2:994e741028c7 | 437 | // delete the TM |
shreeshas95 | 2:994e741028c7 | 438 | l1_ack = l1_ack_head; |
shreeshas95 | 2:994e741028c7 | 439 | while(l1_ack != NULL){ |
shreeshas95 | 8:cb93c1d3209a | 440 | TM_List *temp = l1_ack->next_TM; |
shreeshas95 | 2:994e741028c7 | 441 | delete l1_ack; |
shreeshas95 | 2:994e741028c7 | 442 | l1_ack = temp; |
shreeshas95 | 0:b5b370873460 | 443 | } |
shreeshas95 | 8:cb93c1d3209a | 444 | printf("finished start_with()\r\n"); |
shreeshas95 | 7:e71ecfe3a340 | 445 | } |
shreeshas95 | 0:b5b370873460 | 446 | |
shreeshas95 | 2:994e741028c7 | 447 | /* |
shreeshas95 | 8:cb93c1d3209a | 448 | @brief: check for missing tc, also check crc, i.e. |
shreeshas95 | 8:cb93c1d3209a | 449 | if true execution can be started else have to wait |
shreeshas95 | 2:994e741028c7 | 450 | @param: none |
shreeshas95 | 8:cb93c1d3209a | 451 | @return: bool indicating whether there are missing tc |
shreeshas95 | 2:994e741028c7 | 452 | */ |
shreeshas95 | 8:cb93c1d3209a | 453 | bool check_for_missing_TC(void){ |
shreeshas95 | 8:cb93c1d3209a | 454 | printf("checking for missing tc\r\n"); |
shreeshas95 | 0:b5b370873460 | 455 | no_missing_TC = true; |
shreeshas95 | 2:994e741028c7 | 456 | |
shreeshas95 | 8:cb93c1d3209a | 457 | // printf("total valid = %u\r\n", total_valid_TC); |
shreeshas95 | 8:cb93c1d3209a | 458 | |
shreeshas95 | 8:cb93c1d3209a | 459 | for(unsigned char p = PSC_START_VALUE ; p < (total_valid_TC + PSC_START_VALUE) ; ++p){ |
shreeshas95 | 0:b5b370873460 | 460 | bool flag = false; |
shreeshas95 | 8:cb93c1d3209a | 461 | TC_list *node_ptr = VAR_SPACE::Head_node; |
shreeshas95 | 8:cb93c1d3209a | 462 | // printf("checking for psc = %u\r\n", p); |
shreeshas95 | 2:994e741028c7 | 463 | |
shreeshas95 | 0:b5b370873460 | 464 | while(node_ptr != NULL){ |
shreeshas95 | 8:cb93c1d3209a | 465 | // printf("packet seq count = %u\t", node_ptr->packet_seq_count); |
shreeshas95 | 8:cb93c1d3209a | 466 | if( (node_ptr->packet_seq_count == p) && (node_ptr->crc_pass) ){ |
shreeshas95 | 0:b5b370873460 | 467 | flag = true; |
shreeshas95 | 0:b5b370873460 | 468 | break; |
shreeshas95 | 0:b5b370873460 | 469 | } |
shreeshas95 | 0:b5b370873460 | 470 | else{ |
shreeshas95 | 0:b5b370873460 | 471 | node_ptr = node_ptr->next_TC; |
shreeshas95 | 0:b5b370873460 | 472 | } |
shreeshas95 | 0:b5b370873460 | 473 | } |
shreeshas95 | 8:cb93c1d3209a | 474 | // printf("\r\n"); |
shreeshas95 | 2:994e741028c7 | 475 | if(flag == false){ |
shreeshas95 | 0:b5b370873460 | 476 | no_missing_TC = false; |
shreeshas95 | 2:994e741028c7 | 477 | break; |
shreeshas95 | 0:b5b370873460 | 478 | } |
shreeshas95 | 0:b5b370873460 | 479 | } |
shreeshas95 | 2:994e741028c7 | 480 | |
shreeshas95 | 8:cb93c1d3209a | 481 | printf("returning from check for missing tc : %u\r\n", no_missing_TC ? 1 : 0); |
shreeshas95 | 2:994e741028c7 | 482 | if(no_missing_TC){ |
shreeshas95 | 8:cb93c1d3209a | 483 | return true; |
shreeshas95 | 2:994e741028c7 | 484 | } |
shreeshas95 | 2:994e741028c7 | 485 | else{ |
shreeshas95 | 8:cb93c1d3209a | 486 | return false; |
shreeshas95 | 2:994e741028c7 | 487 | } |
shreeshas95 | 0:b5b370873460 | 488 | } |
shreeshas95 | 0:b5b370873460 | 489 | |
shreeshas95 | 8:cb93c1d3209a | 490 | |
shreeshas95 | 8:cb93c1d3209a | 491 | |
shreeshas95 | 2:994e741028c7 | 492 | /* |
shreeshas95 | 2:994e741028c7 | 493 | RUN start_with() before running execute_TC() |
shreeshas95 | 2:994e741028c7 | 494 | V1.0 |
shreeshas95 | 2:994e741028c7 | 495 | @brief: EXECUTE THE LIST OF TCs, WITH A SEQUENCE BASED ON PSC |
shreeshas95 | 2:994e741028c7 | 496 | SEND THE TC TO THE TARGET AND WAIT FOR THE TM |
shreeshas95 | 2:994e741028c7 | 497 | THEN FORWARD IT TO GS |
shreeshas95 | 2:994e741028c7 | 498 | @param: none |
shreeshas95 | 2:994e741028c7 | 499 | @return: none |
shreeshas95 | 2:994e741028c7 | 500 | */ |
shreeshas95 | 8:cb93c1d3209a | 501 | TC_list *Second_head = NULL; |
shreeshas95 | 0:b5b370873460 | 502 | void execute_TC(){ |
shreeshas95 | 2:994e741028c7 | 503 | // EXECUTE ACCORDING TO THE PSC VALUE |
shreeshas95 | 8:cb93c1d3209a | 504 | printf("inside execute tc : total valid tc = %u, psc = %u\r\n", total_valid_TC, psc); |
shreeshas95 | 0:b5b370873460 | 505 | while( psc < (total_valid_TC+PSC_START_VALUE) ){ |
shreeshas95 | 8:cb93c1d3209a | 506 | // printf("Iterating : psc = %u\r\n", psc); |
shreeshas95 | 8:cb93c1d3209a | 507 | // check for new tc received |
shreeshas95 | 8:cb93c1d3209a | 508 | bool exec_flag_local = false; |
shreeshas95 | 8:cb93c1d3209a | 509 | if( VAR_SPACE::new_tc_received ){ |
shreeshas95 | 8:cb93c1d3209a | 510 | printf("inaside new tc rx in obosc\r\n"); |
shreeshas95 | 8:cb93c1d3209a | 511 | VAR_SPACE::new_tc_received = false; |
shreeshas95 | 8:cb93c1d3209a | 512 | |
shreeshas95 | 8:cb93c1d3209a | 513 | VAR_SPACE::data_node = VAR_SPACE::head_data; |
shreeshas95 | 8:cb93c1d3209a | 514 | Second_head = VAR_SPACE::last_node; |
shreeshas95 | 8:cb93c1d3209a | 515 | COM_RCV_TC::rx_rcv_tc(); |
shreeshas95 | 8:cb93c1d3209a | 516 | Second_head = Second_head->next_TC; |
shreeshas95 | 8:cb93c1d3209a | 517 | exec_flag_local = true; |
shreeshas95 | 8:cb93c1d3209a | 518 | } |
shreeshas95 | 8:cb93c1d3209a | 519 | else if( VAR_SPACE::execute_obosc ){ |
shreeshas95 | 8:cb93c1d3209a | 520 | printf("execute obosc flag found\r\n"); |
shreeshas95 | 8:cb93c1d3209a | 521 | exec_flag_local = true; |
shreeshas95 | 8:cb93c1d3209a | 522 | } |
shreeshas95 | 8:cb93c1d3209a | 523 | if( exec_flag_local ){ |
shreeshas95 | 8:cb93c1d3209a | 524 | exec_flag_local = false; |
shreeshas95 | 8:cb93c1d3209a | 525 | |
shreeshas95 | 8:cb93c1d3209a | 526 | start_with(); |
shreeshas95 | 8:cb93c1d3209a | 527 | |
shreeshas95 | 8:cb93c1d3209a | 528 | if( !check_for_missing_TC() ){ |
shreeshas95 | 8:cb93c1d3209a | 529 | VAR_SPACE::rx_state = 3; |
shreeshas95 | 8:cb93c1d3209a | 530 | printf("exiting from obosc\r\n"); |
shreeshas95 | 8:cb93c1d3209a | 531 | return; |
shreeshas95 | 8:cb93c1d3209a | 532 | } |
shreeshas95 | 8:cb93c1d3209a | 533 | else{ |
shreeshas95 | 8:cb93c1d3209a | 534 | printf("executing obosc\r\n"); |
shreeshas95 | 8:cb93c1d3209a | 535 | // no missing tc : execute urgent |
shreeshas95 | 8:cb93c1d3209a | 536 | TC_list *tcp = Second_head; |
shreeshas95 | 8:cb93c1d3209a | 537 | while( tcp != NULL ){ |
shreeshas95 | 8:cb93c1d3209a | 538 | if( EXECUTION::obosc_tc(tcp) ){ |
shreeshas95 | 8:cb93c1d3209a | 539 | TM_list *tm_ptr = EXECUTION::execute_obosc(tcp); |
shreeshas95 | 8:cb93c1d3209a | 540 | // SND_TM(tm_ptr); |
shreeshas95 | 8:cb93c1d3209a | 541 | if( EXECUTION::detect_ack(tm_ptr) ){ |
shreeshas95 | 8:cb93c1d3209a | 542 | tcp->exec_status = 1; |
shreeshas95 | 8:cb93c1d3209a | 543 | } |
shreeshas95 | 8:cb93c1d3209a | 544 | else{ |
shreeshas95 | 8:cb93c1d3209a | 545 | tcp->exec_status = 2; |
shreeshas95 | 8:cb93c1d3209a | 546 | if( tcp->abort_on_nack ){ |
shreeshas95 | 8:cb93c1d3209a | 547 | tcp->enabled = false; |
shreeshas95 | 8:cb93c1d3209a | 548 | VAR_SPACE::rx_state = 0; |
shreeshas95 | 8:cb93c1d3209a | 549 | printf("exiting from obosc due to abort on nack\r\n"); |
shreeshas95 | 8:cb93c1d3209a | 550 | VAR_SPACE::rx_state = 0; |
shreeshas95 | 8:cb93c1d3209a | 551 | return; |
shreeshas95 | 8:cb93c1d3209a | 552 | } |
shreeshas95 | 8:cb93c1d3209a | 553 | } |
shreeshas95 | 8:cb93c1d3209a | 554 | } |
shreeshas95 | 8:cb93c1d3209a | 555 | tcp = tcp->next_TC; |
shreeshas95 | 8:cb93c1d3209a | 556 | } |
shreeshas95 | 8:cb93c1d3209a | 557 | } |
shreeshas95 | 8:cb93c1d3209a | 558 | VAR_SPACE::execute_obosc = false; |
shreeshas95 | 8:cb93c1d3209a | 559 | VAR_SPACE::rx_state = 2; |
shreeshas95 | 8:cb93c1d3209a | 560 | } |
shreeshas95 | 7:e71ecfe3a340 | 561 | |
shreeshas95 | 8:cb93c1d3209a | 562 | TC_list *tc_ptr = VAR_SPACE::Head_node; |
shreeshas95 | 2:994e741028c7 | 563 | // FIND THE TC CORRESPONDING TO THE PSC VALUE |
shreeshas95 | 2:994e741028c7 | 564 | while(tc_ptr != NULL){ |
shreeshas95 | 8:cb93c1d3209a | 565 | // printf("in while : psc = %u\r\n", psc); |
shreeshas95 | 8:cb93c1d3209a | 566 | if( (tc_ptr->packet_seq_count == psc) && (tc_ptr->crc_pass)){ |
shreeshas95 | 2:994e741028c7 | 567 | // THE TC WITH THE REQUIRED PSC HAS BEEN FOUND, NOW EXECUTE |
shreeshas95 | 7:e71ecfe3a340 | 568 | |
shreeshas95 | 8:cb93c1d3209a | 569 | if( (tc_ptr->exec_status == 0) || ((tc_ptr->exec_status == 2) && (tc_ptr->enabled)) ){ |
shreeshas95 | 8:cb93c1d3209a | 570 | // execute tc |
shreeshas95 | 7:e71ecfe3a340 | 571 | |
shreeshas95 | 8:cb93c1d3209a | 572 | ++exec_count; |
shreeshas95 | 8:cb93c1d3209a | 573 | if( EXECUTION::execute_core(tc_ptr) ){ |
shreeshas95 | 8:cb93c1d3209a | 574 | // THE TC WITH APPROPRIATE PSC IS EXECUTED, START OVER |
shreeshas95 | 8:cb93c1d3209a | 575 | break; |
shreeshas95 | 7:e71ecfe3a340 | 576 | } |
shreeshas95 | 7:e71ecfe3a340 | 577 | else{ |
shreeshas95 | 8:cb93c1d3209a | 578 | printf("returning due to abort on nack\r\n"); |
shreeshas95 | 8:cb93c1d3209a | 579 | // do something for the unexecuted telecommands |
shreeshas95 | 8:cb93c1d3209a | 580 | VAR_SPACE::rx_state = 0; |
shreeshas95 | 8:cb93c1d3209a | 581 | return; |
shreeshas95 | 7:e71ecfe3a340 | 582 | } |
shreeshas95 | 0:b5b370873460 | 583 | } |
shreeshas95 | 2:994e741028c7 | 584 | |
shreeshas95 | 8:cb93c1d3209a | 585 | else{ |
shreeshas95 | 8:cb93c1d3209a | 586 | // either (execution failed and disabled) or (successful executed) hence break |
shreeshas95 | 8:cb93c1d3209a | 587 | break; |
shreeshas95 | 8:cb93c1d3209a | 588 | } |
shreeshas95 | 0:b5b370873460 | 589 | } |
shreeshas95 | 2:994e741028c7 | 590 | tc_ptr = tc_ptr->next_TC; |
shreeshas95 | 0:b5b370873460 | 591 | } |
shreeshas95 | 8:cb93c1d3209a | 592 | ++psc; |
shreeshas95 | 7:e71ecfe3a340 | 593 | } |
shreeshas95 | 8:cb93c1d3209a | 594 | VAR_SPACE::rx_state = 0; |
shreeshas95 | 8:cb93c1d3209a | 595 | printf("exiting after successfully executing tc, total executed = %u\r\n", exec_count); |
shreeshas95 | 7:e71ecfe3a340 | 596 | } |
shreeshas95 | 8:cb93c1d3209a | 597 | } |