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 12:04:43 2015 +0000
Revision:
4:f95195748a0c
Parent:
3:eec1097c0dd6
Child:
6:6e9ae3b44e60
Uplink tested

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 4:f95195748a0c 210 // printf("inside init\r\n");
shreeshas95 0:b5b370873460 211 total_valid_TC = 0;
shreeshas95 0:b5b370873460 212 TC_list_header = head;
shreeshas95 0:b5b370873460 213 all_crc_pass = true;
shreeshas95 0:b5b370873460 214 no_missing_TC = true;
shreeshas95 0:b5b370873460 215 stop_after_current_TC = false;
shreeshas95 0:b5b370873460 216 execute_high_priority_TC = false;
shreeshas95 2:994e741028c7 217 }
shreeshas95 2:994e741028c7 218
shreeshas95 0:b5b370873460 219
shreeshas95 2:994e741028c7 220 /*
shreeshas95 2:994e741028c7 221 @brief: DELETE THE CRC FAILED TC FROM THE LIST TO FREE-UP MEMORY AND UPDATE
shreeshas95 2:994e741028c7 222 THE TOTAL VALID TC AND GENERATE L1_ACK_TM
shreeshas95 2:994e741028c7 223 @param: none
shreeshas95 2:994e741028c7 224 @return: none
shreeshas95 2:994e741028c7 225 */
shreeshas95 2:994e741028c7 226 int start_with(){
shreeshas95 4:f95195748a0c 227 // printf("inside start with\r\n");
shreeshas95 0:b5b370873460 228 TC_list *current_TC = TC_list_header;
shreeshas95 0:b5b370873460 229 TC_list *previous_TC = NULL;
shreeshas95 0:b5b370873460 230
shreeshas95 0:b5b370873460 231 total_valid_TC = 0;
shreeshas95 0:b5b370873460 232 all_crc_pass = true;
shreeshas95 0:b5b370873460 233
shreeshas95 0:b5b370873460 234 TM_List *l1_ack = new TM_List;
shreeshas95 0:b5b370873460 235 TM_List *l1_ack_head = l1_ack;
shreeshas95 2:994e741028c7 236 ACK::generate_L1_ack_TM(l1_ack);
shreeshas95 0:b5b370873460 237
shreeshas95 0:b5b370873460 238 int TC_count = 0;
shreeshas95 1:df31097c8442 239
shreeshas95 2:994e741028c7 240 while(current_TC != NULL){
shreeshas95 2:994e741028c7 241
shreeshas95 2:994e741028c7 242 unsigned char temp = 0;
shreeshas95 2:994e741028c7 243
shreeshas95 2:994e741028c7 244 // FILL PSC of the TC [ don't care whether crc pass or fail ]
shreeshas95 2:994e741028c7 245 // PSC starts from 4th byte
shreeshas95 2:994e741028c7 246 l1_ack->TM_string[3+TC_count] = current_TC->TC_string[0];
shreeshas95 0:b5b370873460 247
shreeshas95 2:994e741028c7 248 // IF CRC PASS
shreeshas95 0:b5b370873460 249 if( current_TC->crc_pass ){
shreeshas95 0:b5b370873460 250 ++total_valid_TC;
shreeshas95 0:b5b370873460 251
shreeshas95 2:994e741028c7 252 // set the crc pass field in TC_STATUS ???
shreeshas95 2:994e741028c7 253 temp = l1_ack->TM_string[2];
shreeshas95 2:994e741028c7 254 temp |= ( 1 << (7-TC_count) );
shreeshas95 2:994e741028c7 255 l1_ack->TM_string[2] = temp;
shreeshas95 0:b5b370873460 256
shreeshas95 2:994e741028c7 257 // advance to the next node
shreeshas95 0:b5b370873460 258 previous_TC = current_TC;
shreeshas95 0:b5b370873460 259 current_TC = current_TC->next_TC;
shreeshas95 0:b5b370873460 260 }
shreeshas95 2:994e741028c7 261 // if crc fail
shreeshas95 0:b5b370873460 262 else{
shreeshas95 2:994e741028c7 263 // unset the crc pass field in TC_STATUS
shreeshas95 2:994e741028c7 264 temp = l1_ack->TM_string[2];
shreeshas95 2:994e741028c7 265 temp &= ~( 1 << (7-TC_count) );
shreeshas95 2:994e741028c7 266 l1_ack->TM_string[2] = temp;
shreeshas95 0:b5b370873460 267
shreeshas95 2:994e741028c7 268 // delete and advance to the next node since CRC FAIL
shreeshas95 0:b5b370873460 269 TC_list *next = current_TC->next_TC;
shreeshas95 2:994e741028c7 270 MEMORY_MANAGEMENT::delete_TC(current_TC, previous_TC);
shreeshas95 0:b5b370873460 271 current_TC = next;
shreeshas95 0:b5b370873460 272 all_crc_pass = false;
shreeshas95 0:b5b370873460 273 }
shreeshas95 0:b5b370873460 274 ++TC_count;
shreeshas95 0:b5b370873460 275
shreeshas95 2:994e741028c7 276 // extend the TM linked list if TC_count > 7
shreeshas95 2:994e741028c7 277 if(TC_count > 7){
shreeshas95 2:994e741028c7 278 TC_count = 0;
shreeshas95 2:994e741028c7 279
shreeshas95 2:994e741028c7 280 l1_ack->next_TM = new TM_List;
shreeshas95 2:994e741028c7 281 l1_ack = l1_ack->next_TM;
shreeshas95 2:994e741028c7 282 ACK::generate_L1_ack_TM(l1_ack);
shreeshas95 2:994e741028c7 283
shreeshas95 2:994e741028c7 284 // FILL TC_EXEC_CODE
shreeshas95 2:994e741028c7 285 // APPEND CRC TO THE TM
shreeshas95 2:994e741028c7 286 ACK::execode_crc( all_crc_pass, l1_ack );
shreeshas95 2:994e741028c7 287 }
shreeshas95 1:df31097c8442 288 }
shreeshas95 1:df31097c8442 289
shreeshas95 2:994e741028c7 290 // FILL UP THE REMAINING FIELDS WITH ZEROS
shreeshas95 2:994e741028c7 291 while(TC_count < 8){
shreeshas95 2:994e741028c7 292 l1_ack->TM_string[2] &= ~( 1 << (7-TC_count) );
shreeshas95 2:994e741028c7 293 l1_ack->TM_string[3+TC_count] = 0;
shreeshas95 2:994e741028c7 294 ++TC_count;
shreeshas95 2:994e741028c7 295 }
shreeshas95 2:994e741028c7 296
shreeshas95 2:994e741028c7 297 // FILL TC_EXEC_CODE
shreeshas95 2:994e741028c7 298 // APPEND CRC TO THE TM
shreeshas95 2:994e741028c7 299 ACK::execode_crc(all_crc_pass, l1_ack);
shreeshas95 2:994e741028c7 300
shreeshas95 2:994e741028c7 301 SND_TM(l1_ack);
shreeshas95 2:994e741028c7 302
shreeshas95 2:994e741028c7 303 // delete the TM
shreeshas95 2:994e741028c7 304 l1_ack = l1_ack_head;
shreeshas95 2:994e741028c7 305 while(l1_ack != NULL){
shreeshas95 2:994e741028c7 306 TM_List *temp = l1_ack->next_TM;
shreeshas95 2:994e741028c7 307 delete l1_ack;
shreeshas95 2:994e741028c7 308 l1_ack = temp;
shreeshas95 0:b5b370873460 309 }
shreeshas95 0:b5b370873460 310
shreeshas95 2:994e741028c7 311 if(all_crc_pass == false){
shreeshas95 2:994e741028c7 312 return 0;
shreeshas95 2:994e741028c7 313 }
shreeshas95 0:b5b370873460 314
shreeshas95 2:994e741028c7 315 return 1;
shreeshas95 0:b5b370873460 316 }
shreeshas95 0:b5b370873460 317
shreeshas95 2:994e741028c7 318 /*
shreeshas95 2:994e741028c7 319 AT THIS STAGE ALL NODES ARE CRC PASS
shreeshas95 2:994e741028c7 320 @brief: decode the TCs and fill in the values in the tc-node.
shreeshas95 2:994e741028c7 321 @param: none
shreeshas95 2:994e741028c7 322 @return: none
shreeshas95 2:994e741028c7 323 */
shreeshas95 0:b5b370873460 324 void decode_TC(){
shreeshas95 0:b5b370873460 325 TC_list *node_ptr = TC_list_header;
shreeshas95 0:b5b370873460 326
shreeshas95 0:b5b370873460 327 while( node_ptr != NULL ){
shreeshas95 0:b5b370873460 328
shreeshas95 0:b5b370873460 329 unsigned char temp;
shreeshas95 0:b5b370873460 330
shreeshas95 0:b5b370873460 331 // PSC
shreeshas95 0:b5b370873460 332 node_ptr->packet_seq_count = node_ptr->TC_string[0];
shreeshas95 0:b5b370873460 333 // APID
shreeshas95 0:b5b370873460 334 temp = node_ptr->TC_string[1];
shreeshas95 0:b5b370873460 335 node_ptr->apid = (temp >> 6) & 3;
shreeshas95 0:b5b370873460 336 // Abort On Nack
shreeshas95 0:b5b370873460 337 node_ptr->abort_on_nack = (temp >> 3) & 1;
shreeshas95 0:b5b370873460 338 // default values of enable and execution
shreeshas95 0:b5b370873460 339 node_ptr->enabled = true;
shreeshas95 0:b5b370873460 340 node_ptr->valid_execution = false;
shreeshas95 0:b5b370873460 341
shreeshas95 0:b5b370873460 342 node_ptr = node_ptr->next_TC;
shreeshas95 0:b5b370873460 343 }
shreeshas95 0:b5b370873460 344 }
shreeshas95 0:b5b370873460 345
shreeshas95 2:994e741028c7 346 int check_for_missing_TC(void){
shreeshas95 0:b5b370873460 347 no_missing_TC = true;
shreeshas95 2:994e741028c7 348
shreeshas95 2:994e741028c7 349 for(unsigned char psc = PSC_START_VALUE ; psc < (total_valid_TC + PSC_START_VALUE) ; ++psc){
shreeshas95 0:b5b370873460 350 bool flag = false;
shreeshas95 0:b5b370873460 351 TC_list *node_ptr = TC_list_header;
shreeshas95 2:994e741028c7 352
shreeshas95 0:b5b370873460 353 while(node_ptr != NULL){
shreeshas95 2:994e741028c7 354 if(node_ptr->packet_seq_count == psc){
shreeshas95 0:b5b370873460 355 flag = true;
shreeshas95 0:b5b370873460 356 break;
shreeshas95 0:b5b370873460 357 }
shreeshas95 0:b5b370873460 358 else{
shreeshas95 0:b5b370873460 359 node_ptr = node_ptr->next_TC;
shreeshas95 0:b5b370873460 360 }
shreeshas95 0:b5b370873460 361 }
shreeshas95 2:994e741028c7 362
shreeshas95 2:994e741028c7 363 if(flag == false){
shreeshas95 0:b5b370873460 364 no_missing_TC = false;
shreeshas95 2:994e741028c7 365 break;
shreeshas95 0:b5b370873460 366 }
shreeshas95 0:b5b370873460 367 }
shreeshas95 2:994e741028c7 368
shreeshas95 2:994e741028c7 369 if(no_missing_TC){
shreeshas95 2:994e741028c7 370 return 1;
shreeshas95 2:994e741028c7 371 }
shreeshas95 2:994e741028c7 372 else{
shreeshas95 2:994e741028c7 373 return 0;
shreeshas95 2:994e741028c7 374 }
shreeshas95 0:b5b370873460 375 }
shreeshas95 0:b5b370873460 376
shreeshas95 2:994e741028c7 377 /*
shreeshas95 2:994e741028c7 378 RUN start_with() before running execute_TC()
shreeshas95 2:994e741028c7 379 V1.0
shreeshas95 2:994e741028c7 380 @brief: EXECUTE THE LIST OF TCs, WITH A SEQUENCE BASED ON PSC
shreeshas95 2:994e741028c7 381 SEND THE TC TO THE TARGET AND WAIT FOR THE TM
shreeshas95 2:994e741028c7 382 THEN FORWARD IT TO GS
shreeshas95 2:994e741028c7 383 @param: none
shreeshas95 2:994e741028c7 384 @return: none
shreeshas95 2:994e741028c7 385 */
shreeshas95 0:b5b370873460 386 void execute_TC(){
shreeshas95 0:b5b370873460 387 unsigned char psc = PSC_START_VALUE;
shreeshas95 2:994e741028c7 388
shreeshas95 2:994e741028c7 389 // EXECUTE ACCORDING TO THE PSC VALUE
shreeshas95 0:b5b370873460 390 while( psc < (total_valid_TC+PSC_START_VALUE) ){
shreeshas95 2:994e741028c7 391 TC_list *tc_ptr = TC_list_header;
shreeshas95 2:994e741028c7 392
shreeshas95 2:994e741028c7 393 // FIND THE TC CORRESPONDING TO THE PSC VALUE
shreeshas95 2:994e741028c7 394 while(tc_ptr != NULL){
shreeshas95 2:994e741028c7 395 if( tc_ptr->packet_seq_count == psc ){
shreeshas95 2:994e741028c7 396 // THE TC WITH THE REQUIRED PSC HAS BEEN FOUND, NOW EXECUTE
shreeshas95 2:994e741028c7 397
shreeshas95 2:994e741028c7 398 TM_List *tm_ptr;
shreeshas95 0:b5b370873460 399 if( tc_ptr->apid == APID_CDMS ){
shreeshas95 2:994e741028c7 400 // IF THE TC BELONGS TO THE CDMS uc CALL THE LOCAL FUNCTION Manage_CDMS()
shreeshas95 2:994e741028c7 401 tm_ptr = EXECUTION::Manage_CDMS(tc_ptr);
shreeshas95 2:994e741028c7 402 }
shreeshas95 2:994e741028c7 403
shreeshas95 2:994e741028c7 404 else{
shreeshas95 2:994e741028c7 405 // IF THE TC BELONGS TO OTHER MODULE, RELAY() IS CALLED WHICH ACTS AS A MESSENGER
shreeshas95 2:994e741028c7 406 tm_ptr = EXECUTION::RELAY(tc_ptr);
shreeshas95 0:b5b370873460 407 }
shreeshas95 2:994e741028c7 408
shreeshas95 2:994e741028c7 409 // SEND DATA TO GS
shreeshas95 2:994e741028c7 410 SND_TM(tm_ptr);
shreeshas95 2:994e741028c7 411
shreeshas95 2:994e741028c7 412 tc_ptr->valid_execution = true;
shreeshas95 2:994e741028c7 413
shreeshas95 2:994e741028c7 414 // DELETE THE TM AFTER USE
shreeshas95 2:994e741028c7 415 delete tm_ptr;
shreeshas95 2:994e741028c7 416
shreeshas95 2:994e741028c7 417 // THE TC WITH APPROPRIATE PSC IS EXECUTED, START OVER
shreeshas95 2:994e741028c7 418 break;
shreeshas95 0:b5b370873460 419 }
shreeshas95 2:994e741028c7 420
shreeshas95 2:994e741028c7 421 tc_ptr = tc_ptr->next_TC;
shreeshas95 0:b5b370873460 422 }
shreeshas95 2:994e741028c7 423 }
shreeshas95 0:b5b370873460 424 }
shreeshas95 3:eec1097c0dd6 425 }