Dummy program to demonstrate problems: working code

Dependencies:   SLCD mbed-rtos mbed

Fork of MNG_TC by Shreesha S

Committer:
shreeshas95
Date:
Wed Jun 24 05:59:14 2015 +0000
Revision:
3:eec1097c0dd6
Parent:
2:994e741028c7
Child:
4:f95195748a0c
included COM_MNG_TC

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shreeshas95 2:994e741028c7 1 //Jun 8
shreeshas95 2:994e741028c7 2
shreeshas95 2:994e741028c7 3
shreeshas95 2:994e741028c7 4 //Jun 7
shreeshas95 2:994e741028c7 5 //PROBLEM IN DELETING TC_string pointer not solved
shreeshas95 2:994e741028c7 6
shreeshas95 2:994e741028c7 7 // Jun 6
shreeshas95 2:994e741028c7 8 // WHAT IS TC exec code in L1 ack ?
shreeshas95 2:994e741028c7 9 // Removed class and introduced namespace
shreeshas95 2:994e741028c7 10
shreeshas95 0:b5b370873460 11 // Apil 15
shreeshas95 0:b5b370873460 12 //added back printf statements
shreeshas95 0:b5b370873460 13 //added back delete TC_string for debugging
shreeshas95 0:b5b370873460 14
shreeshas95 0:b5b370873460 15 // add number of tm packets while calling snd
shreeshas95 0:b5b370873460 16 // function overloading z
shreeshas95 0:b5b370873460 17
shreeshas95 0:b5b370873460 18 // starting value of packet sequence count at each pass
shreeshas95 0:b5b370873460 19 #define PSC_START_VALUE 1
shreeshas95 0:b5b370873460 20
shreeshas95 0:b5b370873460 21 // APID list
shreeshas95 0:b5b370873460 22 #define APID_CALLSIGN 0
shreeshas95 0:b5b370873460 23 #define APID_BAE 1
shreeshas95 0:b5b370873460 24 #define APID_CDMS 2
shreeshas95 0:b5b370873460 25 #define APID_SPEED 3
shreeshas95 0:b5b370873460 26
shreeshas95 0:b5b370873460 27 // HIGH PRIORITY TC - priority list
shreeshas95 0:b5b370873460 28 // not correct values here
shreeshas95 0:b5b370873460 29 #define HPTC1 5
shreeshas95 0:b5b370873460 30 #define HPTC2 6
shreeshas95 0:b5b370873460 31 // Add more entries above
shreeshas95 0:b5b370873460 32
shreeshas95 2:994e741028c7 33 // SIZE of tc in bytes
shreeshas95 2:994e741028c7 34 #define TC_SHORT_SIZE 11
shreeshas95 2:994e741028c7 35 #define TC_LONG_SIZE 135
shreeshas95 2:994e741028c7 36
shreeshas95 0:b5b370873460 37 // TMID list
shreeshas95 0:b5b370873460 38 #define TMID_ACK_L1 10
shreeshas95 0:b5b370873460 39
shreeshas95 2:994e741028c7 40 namespace MNG_TC
shreeshas95 0:b5b370873460 41 {
shreeshas95 0:b5b370873460 42
shreeshas95 2:994e741028c7 43 int total_valid_TC = 0;
shreeshas95 0:b5b370873460 44 TC_list *TC_list_header;
shreeshas95 2:994e741028c7 45 bool all_crc_pass = true;
shreeshas95 2:994e741028c7 46 bool no_missing_TC = true;
shreeshas95 2:994e741028c7 47 bool stop_after_current_TC = false;
shreeshas95 2:994e741028c7 48 bool execute_high_priority_TC = false;
shreeshas95 2:994e741028c7 49
shreeshas95 2:994e741028c7 50
shreeshas95 2:994e741028c7 51 //SECONDARY FUNCTIONS : [SHOULD NOT BE CALLED INDEPENDENTLY]
shreeshas95 2:994e741028c7 52 //USED BY MEMBER FUNCTIONS FOUND BELOW
shreeshas95 2:994e741028c7 53
shreeshas95 2:994e741028c7 54 namespace MEMORY_MANAGEMENT{
shreeshas95 0:b5b370873460 55
shreeshas95 2:994e741028c7 56 //PROBLEM IN DELETING TC_string POINTER
shreeshas95 2:994e741028c7 57 void delete_TC(TC_list *tc_ptr, TC_list* previous_tc){
shreeshas95 2:994e741028c7 58 // stitch the previous and next node
shreeshas95 2:994e741028c7 59 TC_list *temp_n = tc_ptr->next_TC;
shreeshas95 2:994e741028c7 60
shreeshas95 2:994e741028c7 61 if( (previous_tc != NULL) && (temp_n != NULL) ){
shreeshas95 2:994e741028c7 62 previous_tc->next_TC = temp_n;
shreeshas95 2:994e741028c7 63 }
shreeshas95 2:994e741028c7 64 else if( (previous_tc == NULL) && (temp_n != NULL) ){
shreeshas95 2:994e741028c7 65 // delete head node HENCE UPDATE HEADER
shreeshas95 2:994e741028c7 66 TC_list_header = temp_n;
shreeshas95 2:994e741028c7 67 }
shreeshas95 2:994e741028c7 68 else if( (previous_tc != NULL) && (temp_n == NULL) ){
shreeshas95 2:994e741028c7 69 // delete last node
shreeshas95 2:994e741028c7 70 previous_tc->next_TC = NULL;
shreeshas95 2:994e741028c7 71 }
shreeshas95 2:994e741028c7 72 else{
shreeshas95 2:994e741028c7 73 // delete the only single node present
shreeshas95 2:994e741028c7 74 // in which case head is the only node
shreeshas95 2:994e741028c7 75 TC_list_header = NULL;
shreeshas95 2:994e741028c7 76 }
shreeshas95 2:994e741028c7 77
shreeshas95 2:994e741028c7 78 // delete the node
shreeshas95 2:994e741028c7 79 delete tc_ptr;
shreeshas95 2:994e741028c7 80 }
shreeshas95 2:994e741028c7 81 }
shreeshas95 2:994e741028c7 82
shreeshas95 2:994e741028c7 83 namespace ACK{
shreeshas95 2:994e741028c7 84
shreeshas95 2:994e741028c7 85 void generate_L1_ack_TM(TM_list *tm_ptr){
shreeshas95 2:994e741028c7 86 tm_ptr->next_TM = NULL;
shreeshas95 2:994e741028c7 87 tm_ptr->TM_string = new unsigned char[TM_SHORT_SIZE];
shreeshas95 2:994e741028c7 88 // TMID
shreeshas95 2:994e741028c7 89 tm_ptr->tmid = 0xA;
shreeshas95 2:994e741028c7 90 tm_ptr->TM_string[0] = 0xaf;
shreeshas95 2:994e741028c7 91 }
shreeshas95 0:b5b370873460 92
shreeshas95 2:994e741028c7 93 void execode_crc(bool all_pass, TM_list *tm_ptr){
shreeshas95 2:994e741028c7 94
shreeshas95 2:994e741028c7 95 tm_ptr->TM_string[1] = ( all_crc_pass == true ) ? 0x01 : 0x00 ;
shreeshas95 2:994e741028c7 96
shreeshas95 2:994e741028c7 97 uint16_t crc_checksum = CRC::crc16_gen(tm_ptr->TM_string, TM_SHORT_SIZE-2);
shreeshas95 2:994e741028c7 98
shreeshas95 2:994e741028c7 99 tm_ptr->TM_string[TM_SHORT_SIZE-2] = (crc_checksum >> 8) & 0xff;
shreeshas95 2:994e741028c7 100 tm_ptr->TM_string[TM_SHORT_SIZE-1] = crc_checksum & 0xff;
shreeshas95 0:b5b370873460 101 }
shreeshas95 2:994e741028c7 102 }
shreeshas95 2:994e741028c7 103
shreeshas95 2:994e741028c7 104 namespace EXECUTION{
shreeshas95 2:994e741028c7 105
shreeshas95 2:994e741028c7 106 TM_list* Manage_CDMS(TC_list *ptr_tc){
shreeshas95 2:994e741028c7 107
shreeshas95 2:994e741028c7 108 // DUMMY PROGRAM TO CREATE A SAMPLE TM
shreeshas95 2:994e741028c7 109
shreeshas95 2:994e741028c7 110 // allocate memory for new tm list
shreeshas95 2:994e741028c7 111 TM_list *test_TM = new TM_list;
shreeshas95 2:994e741028c7 112
shreeshas95 2:994e741028c7 113 test_TM->next_TM = NULL;
shreeshas95 2:994e741028c7 114
shreeshas95 2:994e741028c7 115 // allocate memory for the tm string
shreeshas95 2:994e741028c7 116 unsigned char *str = new unsigned char[TM_TYPE1_SIZE];
shreeshas95 2:994e741028c7 117
shreeshas95 2:994e741028c7 118
shreeshas95 2:994e741028c7 119 // frame type-1 is 0. [ (0 << 7) = 0 ]
shreeshas95 2:994e741028c7 120 str[0] = 0;
shreeshas95 2:994e741028c7 121
shreeshas95 2:994e741028c7 122 // the tmid determines type-1, or 2
shreeshas95 2:994e741028c7 123 // tmid : 0x1 belongs to type1 (dummy program)
shreeshas95 2:994e741028c7 124 test_TM->tmid = 0x1;
shreeshas95 2:994e741028c7 125
shreeshas95 2:994e741028c7 126 // 4 bit TMID
shreeshas95 2:994e741028c7 127 str[0] += (0x1) << 3;
shreeshas95 2:994e741028c7 128
shreeshas95 2:994e741028c7 129 // 20 bit seq. count
shreeshas95 2:994e741028c7 130 str[0] += 0x7;
shreeshas95 2:994e741028c7 131 str[1] = 0xff;
shreeshas95 2:994e741028c7 132 str[2] = 0xff;
shreeshas95 2:994e741028c7 133
shreeshas95 2:994e741028c7 134 // random data
shreeshas95 2:994e741028c7 135 for(int i = 3 ; i < (TM_TYPE1_SIZE-2) ; ++i ){
shreeshas95 2:994e741028c7 136 str[i] = 'a';
shreeshas95 2:994e741028c7 137 }
shreeshas95 2:994e741028c7 138
shreeshas95 2:994e741028c7 139 // APPEND CRC : ALL THE PROCESSES HAVE TO GENERATE AND APPEND CRC
shreeshas95 2:994e741028c7 140 uint16_t crc_checksum = CRC::crc16_gen(str, TM_TYPE1_SIZE-2);
shreeshas95 2:994e741028c7 141 str[TM_TYPE1_SIZE-2] = (crc_checksum >> 8) & 0xff;
shreeshas95 2:994e741028c7 142 str[TM_TYPE1_SIZE-1] = crc_checksum & 0xff;
shreeshas95 2:994e741028c7 143
shreeshas95 2:994e741028c7 144 test_TM->TM_string = str;
shreeshas95 2:994e741028c7 145
shreeshas95 2:994e741028c7 146 return test_TM;
shreeshas95 0:b5b370873460 147 }
shreeshas95 2:994e741028c7 148
shreeshas95 2:994e741028c7 149 TM_list* RELAY(TC_list *tc_ptr){
shreeshas95 2:994e741028c7 150
shreeshas95 2:994e741028c7 151 // FIRST send long or short tc
shreeshas95 2:994e741028c7 152 unsigned char tc_len = ( tc_ptr->short_or_long ? TC_SHORT_SIZE : TC_LONG_SIZE );
shreeshas95 2:994e741028c7 153 PC.putc( tc_len );
shreeshas95 2:994e741028c7 154 // THE TARGET SHOULD READ 'n' MORE BYTES AS FOUND IN THE FIRST BYTE
shreeshas95 2:994e741028c7 155
shreeshas95 2:994e741028c7 156 // SEND THE TC TO THE TARGET DEVICE [ALONG WITH CRC]
shreeshas95 2:994e741028c7 157 for(unsigned int i = 0 ; i < tc_len ; ++i){
shreeshas95 2:994e741028c7 158 PC.putc( tc_ptr->TC_string[i] );
shreeshas95 2:994e741028c7 159 }
shreeshas95 2:994e741028c7 160
shreeshas95 2:994e741028c7 161 // WAIT FOR THE TM
shreeshas95 2:994e741028c7 162 TM_list* tm_head = new TM_list;
shreeshas95 2:994e741028c7 163 TM_list* tm_ptr = tm_head;
shreeshas95 2:994e741028c7 164
shreeshas95 2:994e741028c7 165 // FIRST RECEIVE NUMBER OF TM'S TO BE RECEVIVED
shreeshas95 2:994e741028c7 166 unsigned char tm_num = PC.getc();
shreeshas95 2:994e741028c7 167 for(unsigned int i = 0 ; i < tm_num ; ++i){
shreeshas95 2:994e741028c7 168
shreeshas95 2:994e741028c7 169 // THEN FOR EACH TM FIRST SEND TYPE-1 OR TYPE-2 i.e. NUMBER OF BYTES TO READ
shreeshas95 2:994e741028c7 170 unsigned char tm_len = PC.getc();
shreeshas95 2:994e741028c7 171 tm_ptr->TM_string = new unsigned char[tm_len];
shreeshas95 2:994e741028c7 172 for(unsigned int j = 0 ; j < tm_len ; ++j){
shreeshas95 2:994e741028c7 173 tm_ptr->TM_string[j] = PC.getc();
shreeshas95 2:994e741028c7 174 }
shreeshas95 2:994e741028c7 175
shreeshas95 2:994e741028c7 176 // DECODE TMID FROM THE PACKET
shreeshas95 2:994e741028c7 177 if(tm_len == 134){
shreeshas95 2:994e741028c7 178 unsigned char temp = tm_ptr->TM_string[0];
shreeshas95 2:994e741028c7 179 tm_ptr->tmid = (temp >> 3) & 0xf;
shreeshas95 2:994e741028c7 180 }
shreeshas95 2:994e741028c7 181 else{
shreeshas95 2:994e741028c7 182 unsigned char temp = tm_ptr->TM_string[4];
shreeshas95 2:994e741028c7 183 tm_ptr->tmid = (temp >> 4) & 0xf;
shreeshas95 2:994e741028c7 184 }
shreeshas95 2:994e741028c7 185
shreeshas95 2:994e741028c7 186 // ALLOCATE MEMORY FOR NEXT TM PACKET
shreeshas95 2:994e741028c7 187 if( i == tm_num-1 ){
shreeshas95 2:994e741028c7 188 tm_ptr->next_TM = NULL;
shreeshas95 2:994e741028c7 189 }
shreeshas95 2:994e741028c7 190 else{
shreeshas95 2:994e741028c7 191 tm_ptr->next_TM = new TM_list;
shreeshas95 2:994e741028c7 192 tm_ptr = tm_ptr->next_TM;
shreeshas95 2:994e741028c7 193 }
shreeshas95 2:994e741028c7 194 }
shreeshas95 2:994e741028c7 195
shreeshas95 2:994e741028c7 196 // FILL IN THE tm_ptr AND RETURN
shreeshas95 2:994e741028c7 197 return tm_head;
shreeshas95 2:994e741028c7 198 }
shreeshas95 2:994e741028c7 199
shreeshas95 0:b5b370873460 200 }
shreeshas95 0:b5b370873460 201
shreeshas95 2:994e741028c7 202 // MEMBER FUNCTIONS
shreeshas95 0:b5b370873460 203
shreeshas95 2:994e741028c7 204 /*
shreeshas95 2:994e741028c7 205 @brief: INITIALISE THE HEAD NODE AND RESET THE VARIABLES
shreeshas95 2:994e741028c7 206 @param: TC_list *head : head node pointer
shreeshas95 2:994e741028c7 207 @return: none
shreeshas95 2:994e741028c7 208 */
shreeshas95 2:994e741028c7 209 void init(TC_list *head){
shreeshas95 0:b5b370873460 210 total_valid_TC = 0;
shreeshas95 0:b5b370873460 211 TC_list_header = head;
shreeshas95 0:b5b370873460 212 all_crc_pass = true;
shreeshas95 0:b5b370873460 213 no_missing_TC = true;
shreeshas95 0:b5b370873460 214 stop_after_current_TC = false;
shreeshas95 0:b5b370873460 215 execute_high_priority_TC = false;
shreeshas95 2:994e741028c7 216 }
shreeshas95 2:994e741028c7 217
shreeshas95 0:b5b370873460 218
shreeshas95 2:994e741028c7 219 /*
shreeshas95 2:994e741028c7 220 @brief: DELETE THE CRC FAILED TC FROM THE LIST TO FREE-UP MEMORY AND UPDATE
shreeshas95 2:994e741028c7 221 THE TOTAL VALID TC AND GENERATE L1_ACK_TM
shreeshas95 2:994e741028c7 222 @param: none
shreeshas95 2:994e741028c7 223 @return: none
shreeshas95 2:994e741028c7 224 */
shreeshas95 2:994e741028c7 225 int start_with(){
shreeshas95 0:b5b370873460 226 TC_list *current_TC = TC_list_header;
shreeshas95 0:b5b370873460 227 TC_list *previous_TC = NULL;
shreeshas95 0:b5b370873460 228
shreeshas95 0:b5b370873460 229 total_valid_TC = 0;
shreeshas95 0:b5b370873460 230 all_crc_pass = true;
shreeshas95 0:b5b370873460 231
shreeshas95 0:b5b370873460 232 TM_List *l1_ack = new TM_List;
shreeshas95 0:b5b370873460 233 TM_List *l1_ack_head = l1_ack;
shreeshas95 2:994e741028c7 234 ACK::generate_L1_ack_TM(l1_ack);
shreeshas95 0:b5b370873460 235
shreeshas95 0:b5b370873460 236 int TC_count = 0;
shreeshas95 1:df31097c8442 237
shreeshas95 2:994e741028c7 238 while(current_TC != NULL){
shreeshas95 2:994e741028c7 239
shreeshas95 2:994e741028c7 240 unsigned char temp = 0;
shreeshas95 2:994e741028c7 241
shreeshas95 2:994e741028c7 242 // FILL PSC of the TC [ don't care whether crc pass or fail ]
shreeshas95 2:994e741028c7 243 // PSC starts from 4th byte
shreeshas95 2:994e741028c7 244 l1_ack->TM_string[3+TC_count] = current_TC->TC_string[0];
shreeshas95 0:b5b370873460 245
shreeshas95 2:994e741028c7 246 // IF CRC PASS
shreeshas95 0:b5b370873460 247 if( current_TC->crc_pass ){
shreeshas95 0:b5b370873460 248 ++total_valid_TC;
shreeshas95 0:b5b370873460 249
shreeshas95 2:994e741028c7 250 // set the crc pass field in TC_STATUS ???
shreeshas95 2:994e741028c7 251 temp = l1_ack->TM_string[2];
shreeshas95 2:994e741028c7 252 temp |= ( 1 << (7-TC_count) );
shreeshas95 2:994e741028c7 253 l1_ack->TM_string[2] = temp;
shreeshas95 0:b5b370873460 254
shreeshas95 2:994e741028c7 255 // advance to the next node
shreeshas95 0:b5b370873460 256 previous_TC = current_TC;
shreeshas95 0:b5b370873460 257 current_TC = current_TC->next_TC;
shreeshas95 0:b5b370873460 258 }
shreeshas95 2:994e741028c7 259 // if crc fail
shreeshas95 0:b5b370873460 260 else{
shreeshas95 2:994e741028c7 261 // unset the crc pass field in TC_STATUS
shreeshas95 2:994e741028c7 262 temp = l1_ack->TM_string[2];
shreeshas95 2:994e741028c7 263 temp &= ~( 1 << (7-TC_count) );
shreeshas95 2:994e741028c7 264 l1_ack->TM_string[2] = temp;
shreeshas95 0:b5b370873460 265
shreeshas95 2:994e741028c7 266 // delete and advance to the next node since CRC FAIL
shreeshas95 0:b5b370873460 267 TC_list *next = current_TC->next_TC;
shreeshas95 2:994e741028c7 268 MEMORY_MANAGEMENT::delete_TC(current_TC, previous_TC);
shreeshas95 0:b5b370873460 269 current_TC = next;
shreeshas95 0:b5b370873460 270 all_crc_pass = false;
shreeshas95 0:b5b370873460 271 }
shreeshas95 0:b5b370873460 272 ++TC_count;
shreeshas95 0:b5b370873460 273
shreeshas95 2:994e741028c7 274 // extend the TM linked list if TC_count > 7
shreeshas95 2:994e741028c7 275 if(TC_count > 7){
shreeshas95 2:994e741028c7 276 TC_count = 0;
shreeshas95 2:994e741028c7 277
shreeshas95 2:994e741028c7 278 l1_ack->next_TM = new TM_List;
shreeshas95 2:994e741028c7 279 l1_ack = l1_ack->next_TM;
shreeshas95 2:994e741028c7 280 ACK::generate_L1_ack_TM(l1_ack);
shreeshas95 2:994e741028c7 281
shreeshas95 2:994e741028c7 282 // FILL TC_EXEC_CODE
shreeshas95 2:994e741028c7 283 // APPEND CRC TO THE TM
shreeshas95 2:994e741028c7 284 ACK::execode_crc( all_crc_pass, l1_ack );
shreeshas95 2:994e741028c7 285 }
shreeshas95 1:df31097c8442 286 }
shreeshas95 1:df31097c8442 287
shreeshas95 2:994e741028c7 288 // FILL UP THE REMAINING FIELDS WITH ZEROS
shreeshas95 2:994e741028c7 289 while(TC_count < 8){
shreeshas95 2:994e741028c7 290 l1_ack->TM_string[2] &= ~( 1 << (7-TC_count) );
shreeshas95 2:994e741028c7 291 l1_ack->TM_string[3+TC_count] = 0;
shreeshas95 2:994e741028c7 292 ++TC_count;
shreeshas95 2:994e741028c7 293 }
shreeshas95 2:994e741028c7 294
shreeshas95 2:994e741028c7 295 // FILL TC_EXEC_CODE
shreeshas95 2:994e741028c7 296 // APPEND CRC TO THE TM
shreeshas95 2:994e741028c7 297 ACK::execode_crc(all_crc_pass, l1_ack);
shreeshas95 2:994e741028c7 298
shreeshas95 2:994e741028c7 299 SND_TM(l1_ack);
shreeshas95 2:994e741028c7 300
shreeshas95 2:994e741028c7 301 // delete the TM
shreeshas95 2:994e741028c7 302 l1_ack = l1_ack_head;
shreeshas95 2:994e741028c7 303 while(l1_ack != NULL){
shreeshas95 2:994e741028c7 304 TM_List *temp = l1_ack->next_TM;
shreeshas95 2:994e741028c7 305 delete l1_ack;
shreeshas95 2:994e741028c7 306 l1_ack = temp;
shreeshas95 0:b5b370873460 307 }
shreeshas95 0:b5b370873460 308
shreeshas95 2:994e741028c7 309 if(all_crc_pass == false){
shreeshas95 2:994e741028c7 310 return 0;
shreeshas95 2:994e741028c7 311 }
shreeshas95 0:b5b370873460 312
shreeshas95 2:994e741028c7 313 return 1;
shreeshas95 0:b5b370873460 314 }
shreeshas95 0:b5b370873460 315
shreeshas95 2:994e741028c7 316 /*
shreeshas95 2:994e741028c7 317 AT THIS STAGE ALL NODES ARE CRC PASS
shreeshas95 2:994e741028c7 318 @brief: decode the TCs and fill in the values in the tc-node.
shreeshas95 2:994e741028c7 319 @param: none
shreeshas95 2:994e741028c7 320 @return: none
shreeshas95 2:994e741028c7 321 */
shreeshas95 0:b5b370873460 322 void decode_TC(){
shreeshas95 0:b5b370873460 323 TC_list *node_ptr = TC_list_header;
shreeshas95 0:b5b370873460 324
shreeshas95 0:b5b370873460 325 while( node_ptr != NULL ){
shreeshas95 0:b5b370873460 326
shreeshas95 0:b5b370873460 327 unsigned char temp;
shreeshas95 0:b5b370873460 328
shreeshas95 0:b5b370873460 329 // PSC
shreeshas95 0:b5b370873460 330 node_ptr->packet_seq_count = node_ptr->TC_string[0];
shreeshas95 0:b5b370873460 331 // APID
shreeshas95 0:b5b370873460 332 temp = node_ptr->TC_string[1];
shreeshas95 0:b5b370873460 333 node_ptr->apid = (temp >> 6) & 3;
shreeshas95 0:b5b370873460 334 // Abort On Nack
shreeshas95 0:b5b370873460 335 node_ptr->abort_on_nack = (temp >> 3) & 1;
shreeshas95 0:b5b370873460 336 // default values of enable and execution
shreeshas95 0:b5b370873460 337 node_ptr->enabled = true;
shreeshas95 0:b5b370873460 338 node_ptr->valid_execution = false;
shreeshas95 0:b5b370873460 339
shreeshas95 0:b5b370873460 340 node_ptr = node_ptr->next_TC;
shreeshas95 0:b5b370873460 341 }
shreeshas95 0:b5b370873460 342 }
shreeshas95 0:b5b370873460 343
shreeshas95 2:994e741028c7 344 int check_for_missing_TC(void){
shreeshas95 0:b5b370873460 345 no_missing_TC = true;
shreeshas95 2:994e741028c7 346
shreeshas95 2:994e741028c7 347 for(unsigned char psc = PSC_START_VALUE ; psc < (total_valid_TC + PSC_START_VALUE) ; ++psc){
shreeshas95 0:b5b370873460 348 bool flag = false;
shreeshas95 0:b5b370873460 349 TC_list *node_ptr = TC_list_header;
shreeshas95 2:994e741028c7 350
shreeshas95 0:b5b370873460 351 while(node_ptr != NULL){
shreeshas95 2:994e741028c7 352 if(node_ptr->packet_seq_count == psc){
shreeshas95 0:b5b370873460 353 flag = true;
shreeshas95 0:b5b370873460 354 break;
shreeshas95 0:b5b370873460 355 }
shreeshas95 0:b5b370873460 356 else{
shreeshas95 0:b5b370873460 357 node_ptr = node_ptr->next_TC;
shreeshas95 0:b5b370873460 358 }
shreeshas95 0:b5b370873460 359 }
shreeshas95 2:994e741028c7 360
shreeshas95 2:994e741028c7 361 if(flag == false){
shreeshas95 0:b5b370873460 362 no_missing_TC = false;
shreeshas95 2:994e741028c7 363 break;
shreeshas95 0:b5b370873460 364 }
shreeshas95 0:b5b370873460 365 }
shreeshas95 2:994e741028c7 366
shreeshas95 2:994e741028c7 367 if(no_missing_TC){
shreeshas95 2:994e741028c7 368 return 1;
shreeshas95 2:994e741028c7 369 }
shreeshas95 2:994e741028c7 370 else{
shreeshas95 2:994e741028c7 371 return 0;
shreeshas95 2:994e741028c7 372 }
shreeshas95 0:b5b370873460 373 }
shreeshas95 0:b5b370873460 374
shreeshas95 2:994e741028c7 375 /*
shreeshas95 2:994e741028c7 376 RUN start_with() before running execute_TC()
shreeshas95 2:994e741028c7 377 V1.0
shreeshas95 2:994e741028c7 378 @brief: EXECUTE THE LIST OF TCs, WITH A SEQUENCE BASED ON PSC
shreeshas95 2:994e741028c7 379 SEND THE TC TO THE TARGET AND WAIT FOR THE TM
shreeshas95 2:994e741028c7 380 THEN FORWARD IT TO GS
shreeshas95 2:994e741028c7 381 @param: none
shreeshas95 2:994e741028c7 382 @return: none
shreeshas95 2:994e741028c7 383 */
shreeshas95 0:b5b370873460 384 void execute_TC(){
shreeshas95 0:b5b370873460 385 unsigned char psc = PSC_START_VALUE;
shreeshas95 2:994e741028c7 386
shreeshas95 2:994e741028c7 387 // EXECUTE ACCORDING TO THE PSC VALUE
shreeshas95 0:b5b370873460 388 while( psc < (total_valid_TC+PSC_START_VALUE) ){
shreeshas95 2:994e741028c7 389 TC_list *tc_ptr = TC_list_header;
shreeshas95 2:994e741028c7 390
shreeshas95 2:994e741028c7 391 // FIND THE TC CORRESPONDING TO THE PSC VALUE
shreeshas95 2:994e741028c7 392 while(tc_ptr != NULL){
shreeshas95 2:994e741028c7 393 if( tc_ptr->packet_seq_count == psc ){
shreeshas95 2:994e741028c7 394 // THE TC WITH THE REQUIRED PSC HAS BEEN FOUND, NOW EXECUTE
shreeshas95 2:994e741028c7 395
shreeshas95 2:994e741028c7 396 TM_List *tm_ptr;
shreeshas95 0:b5b370873460 397 if( tc_ptr->apid == APID_CDMS ){
shreeshas95 2:994e741028c7 398 // IF THE TC BELONGS TO THE CDMS uc CALL THE LOCAL FUNCTION Manage_CDMS()
shreeshas95 2:994e741028c7 399 tm_ptr = EXECUTION::Manage_CDMS(tc_ptr);
shreeshas95 2:994e741028c7 400 }
shreeshas95 2:994e741028c7 401
shreeshas95 2:994e741028c7 402 else{
shreeshas95 2:994e741028c7 403 // IF THE TC BELONGS TO OTHER MODULE, RELAY() IS CALLED WHICH ACTS AS A MESSENGER
shreeshas95 2:994e741028c7 404 tm_ptr = EXECUTION::RELAY(tc_ptr);
shreeshas95 0:b5b370873460 405 }
shreeshas95 2:994e741028c7 406
shreeshas95 2:994e741028c7 407 // SEND DATA TO GS
shreeshas95 2:994e741028c7 408 SND_TM(tm_ptr);
shreeshas95 2:994e741028c7 409
shreeshas95 2:994e741028c7 410 tc_ptr->valid_execution = true;
shreeshas95 2:994e741028c7 411
shreeshas95 2:994e741028c7 412 // DELETE THE TM AFTER USE
shreeshas95 2:994e741028c7 413 delete tm_ptr;
shreeshas95 2:994e741028c7 414
shreeshas95 2:994e741028c7 415 // THE TC WITH APPROPRIATE PSC IS EXECUTED, START OVER
shreeshas95 2:994e741028c7 416 break;
shreeshas95 0:b5b370873460 417 }
shreeshas95 2:994e741028c7 418
shreeshas95 2:994e741028c7 419 tc_ptr = tc_ptr->next_TC;
shreeshas95 0:b5b370873460 420 }
shreeshas95 2:994e741028c7 421 }
shreeshas95 0:b5b370873460 422 }
shreeshas95 3:eec1097c0dd6 423 }