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