Dummy program to demonstrate problems: working code

Dependencies:   SLCD mbed-rtos mbed

Fork of MNG_TC by Shreesha S

Committer:
shreeshas95
Date:
Thu Jun 11 11:20:12 2015 +0000
Revision:
2:994e741028c7
Parent:
1:df31097c8442
Child:
3:eec1097c0dd6
V1

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