Dummy program to demonstrate problems: working code
Dependencies: SLCD mbed-rtos mbed
Fork of MNG_TC by
MNG_TC.h@0:b5b370873460, 2015-04-15 (annotated)
- Committer:
- shreeshas95
- Date:
- Wed Apr 15 10:43:22 2015 +0000
- Revision:
- 0:b5b370873460
- Child:
- 1:df31097c8442
without L1 ack TM
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shreeshas95 | 0:b5b370873460 | 1 | // Apil 15 |
shreeshas95 | 0:b5b370873460 | 2 | //added back printf statements |
shreeshas95 | 0:b5b370873460 | 3 | //added back delete TC_string for debugging |
shreeshas95 | 0:b5b370873460 | 4 | |
shreeshas95 | 0:b5b370873460 | 5 | // add number of tm packets while calling snd |
shreeshas95 | 0:b5b370873460 | 6 | // function overloading z |
shreeshas95 | 0:b5b370873460 | 7 | |
shreeshas95 | 0:b5b370873460 | 8 | #include "SND_TM.h" |
shreeshas95 | 0:b5b370873460 | 9 | |
shreeshas95 | 0:b5b370873460 | 10 | // starting value of packet sequence count at each pass |
shreeshas95 | 0:b5b370873460 | 11 | #define PSC_START_VALUE 1 |
shreeshas95 | 0:b5b370873460 | 12 | |
shreeshas95 | 0:b5b370873460 | 13 | // APID list |
shreeshas95 | 0:b5b370873460 | 14 | #define APID_CALLSIGN 0 |
shreeshas95 | 0:b5b370873460 | 15 | #define APID_BAE 1 |
shreeshas95 | 0:b5b370873460 | 16 | #define APID_CDMS 2 |
shreeshas95 | 0:b5b370873460 | 17 | #define APID_SPEED 3 |
shreeshas95 | 0:b5b370873460 | 18 | |
shreeshas95 | 0:b5b370873460 | 19 | // HIGH PRIORITY TC - priority list |
shreeshas95 | 0:b5b370873460 | 20 | // not correct values here |
shreeshas95 | 0:b5b370873460 | 21 | #define HPTC1 5 |
shreeshas95 | 0:b5b370873460 | 22 | #define HPTC2 6 |
shreeshas95 | 0:b5b370873460 | 23 | // Add more entries above |
shreeshas95 | 0:b5b370873460 | 24 | |
shreeshas95 | 0:b5b370873460 | 25 | // size of short TM without CRC - in bytes |
shreeshas95 | 0:b5b370873460 | 26 | #define TM_SHORT_SIZE 11 |
shreeshas95 | 0:b5b370873460 | 27 | #define TM_LONG_SIZE 131 |
shreeshas95 | 0:b5b370873460 | 28 | |
shreeshas95 | 0:b5b370873460 | 29 | // TMID list |
shreeshas95 | 0:b5b370873460 | 30 | #define TMID_ACK_L1 10 |
shreeshas95 | 0:b5b370873460 | 31 | |
shreeshas95 | 0:b5b370873460 | 32 | typedef struct TC_list{ |
shreeshas95 | 0:b5b370873460 | 33 | // received from the RCV_TC |
shreeshas95 | 0:b5b370873460 | 34 | unsigned char *TC_string; |
shreeshas95 | 0:b5b370873460 | 35 | bool short_or_long; //'true' for short |
shreeshas95 | 0:b5b370873460 | 36 | bool crc_pass; |
shreeshas95 | 0:b5b370873460 | 37 | |
shreeshas95 | 0:b5b370873460 | 38 | // updated info - updated in MNG_TC |
shreeshas95 | 0:b5b370873460 | 39 | unsigned char packet_seq_count; |
shreeshas95 | 0:b5b370873460 | 40 | unsigned char apid; |
shreeshas95 | 0:b5b370873460 | 41 | bool abort_on_nack; |
shreeshas95 | 0:b5b370873460 | 42 | bool enabled; |
shreeshas95 | 0:b5b370873460 | 43 | bool valid_execution; |
shreeshas95 | 0:b5b370873460 | 44 | |
shreeshas95 | 0:b5b370873460 | 45 | struct TC_list *next_TC; |
shreeshas95 | 0:b5b370873460 | 46 | }TC_list; |
shreeshas95 | 0:b5b370873460 | 47 | |
shreeshas95 | 0:b5b370873460 | 48 | //typedef struct TM_list{ |
shreeshas95 | 0:b5b370873460 | 49 | // |
shreeshas95 | 0:b5b370873460 | 50 | // unsigned char *TM_string; |
shreeshas95 | 0:b5b370873460 | 51 | // // bool short_or_long; // true for short |
shreeshas95 | 0:b5b370873460 | 52 | // // pass while calling the function |
shreeshas95 | 0:b5b370873460 | 53 | // unsigned char tmid; |
shreeshas95 | 0:b5b370873460 | 54 | // |
shreeshas95 | 0:b5b370873460 | 55 | // struct TM_list *next_TM; |
shreeshas95 | 0:b5b370873460 | 56 | //}TM_List; |
shreeshas95 | 0:b5b370873460 | 57 | |
shreeshas95 | 0:b5b370873460 | 58 | class MNG_TC |
shreeshas95 | 0:b5b370873460 | 59 | { |
shreeshas95 | 0:b5b370873460 | 60 | private: |
shreeshas95 | 0:b5b370873460 | 61 | |
shreeshas95 | 0:b5b370873460 | 62 | // private variables and flags |
shreeshas95 | 0:b5b370873460 | 63 | int total_valid_TC; |
shreeshas95 | 0:b5b370873460 | 64 | TC_list *TC_list_header; |
shreeshas95 | 0:b5b370873460 | 65 | bool all_crc_pass; |
shreeshas95 | 0:b5b370873460 | 66 | bool no_missing_TC; |
shreeshas95 | 0:b5b370873460 | 67 | bool stop_after_current_TC; |
shreeshas95 | 0:b5b370873460 | 68 | bool execute_high_priority_TC; |
shreeshas95 | 0:b5b370873460 | 69 | |
shreeshas95 | 0:b5b370873460 | 70 | // private functions |
shreeshas95 | 0:b5b370873460 | 71 | void delete_TC(TC_list *tc_ptr, TC_list* previous_tc){ |
shreeshas95 | 0:b5b370873460 | 72 | // stitch the previous and next node |
shreeshas95 | 0:b5b370873460 | 73 | TC_list *temp_n = tc_ptr->next_TC; |
shreeshas95 | 0:b5b370873460 | 74 | |
shreeshas95 | 0:b5b370873460 | 75 | if( (previous_tc != NULL) && (temp_n != NULL) ){ |
shreeshas95 | 0:b5b370873460 | 76 | previous_tc->next_TC = temp_n; |
shreeshas95 | 0:b5b370873460 | 77 | } |
shreeshas95 | 0:b5b370873460 | 78 | else if( (previous_tc == NULL) && (temp_n != NULL) ){ |
shreeshas95 | 0:b5b370873460 | 79 | // delete head node |
shreeshas95 | 0:b5b370873460 | 80 | TC_list_header = temp_n; |
shreeshas95 | 0:b5b370873460 | 81 | } |
shreeshas95 | 0:b5b370873460 | 82 | else if( (previous_tc != NULL) && (temp_n == NULL) ){ |
shreeshas95 | 0:b5b370873460 | 83 | // delete last node |
shreeshas95 | 0:b5b370873460 | 84 | previous_tc->next_TC = NULL; |
shreeshas95 | 0:b5b370873460 | 85 | } |
shreeshas95 | 0:b5b370873460 | 86 | else{ |
shreeshas95 | 0:b5b370873460 | 87 | // delete the only single node present |
shreeshas95 | 0:b5b370873460 | 88 | // in which case head is the only node |
shreeshas95 | 0:b5b370873460 | 89 | TC_list_header = NULL; |
shreeshas95 | 0:b5b370873460 | 90 | } |
shreeshas95 | 0:b5b370873460 | 91 | |
shreeshas95 | 0:b5b370873460 | 92 | // delete the string |
shreeshas95 | 0:b5b370873460 | 93 | delete tc_ptr->TC_string; |
shreeshas95 | 0:b5b370873460 | 94 | // delete the node |
shreeshas95 | 0:b5b370873460 | 95 | delete tc_ptr; |
shreeshas95 | 0:b5b370873460 | 96 | } |
shreeshas95 | 0:b5b370873460 | 97 | |
shreeshas95 | 0:b5b370873460 | 98 | void generate_L1_ack_TM(TM_list *tm_ptr){ |
shreeshas95 | 0:b5b370873460 | 99 | tm_ptr->next_TM = NULL; |
shreeshas95 | 0:b5b370873460 | 100 | tm_ptr->TM_string = new unsigned char[TM_SHORT_SIZE]; |
shreeshas95 | 0:b5b370873460 | 101 | // TMID |
shreeshas95 | 0:b5b370873460 | 102 | tm_ptr->TM_string[0] = (10 << 4) & 0xf0; |
shreeshas95 | 0:b5b370873460 | 103 | // fill EXEC CODE below |
shreeshas95 | 0:b5b370873460 | 104 | } |
shreeshas95 | 0:b5b370873460 | 105 | |
shreeshas95 | 0:b5b370873460 | 106 | TM_list* manage_process(TC_list *ptr_tc){ |
shreeshas95 | 0:b5b370873460 | 107 | TM_list *test_TM = new TM_list; |
shreeshas95 | 0:b5b370873460 | 108 | test_TM->next_TM = NULL; |
shreeshas95 | 0:b5b370873460 | 109 | unsigned char *str = new unsigned char[TM_LONG_SIZE]; |
shreeshas95 | 0:b5b370873460 | 110 | //ping the TC |
shreeshas95 | 0:b5b370873460 | 111 | test_TM->tmid = 0xa; |
shreeshas95 | 0:b5b370873460 | 112 | |
shreeshas95 | 0:b5b370873460 | 113 | // 4 bit TMID |
shreeshas95 | 0:b5b370873460 | 114 | str[0] = (0xa) << 4; |
shreeshas95 | 0:b5b370873460 | 115 | |
shreeshas95 | 0:b5b370873460 | 116 | // 20 bit seq. count |
shreeshas95 | 0:b5b370873460 | 117 | str[0] += 0xf; |
shreeshas95 | 0:b5b370873460 | 118 | str[1] = 0xff; |
shreeshas95 | 0:b5b370873460 | 119 | str[2] = 0xff; |
shreeshas95 | 0:b5b370873460 | 120 | |
shreeshas95 | 0:b5b370873460 | 121 | // return data and append zeroes |
shreeshas95 | 0:b5b370873460 | 122 | for(int i = 3 ; i < 9 ; ++i ){ |
shreeshas95 | 0:b5b370873460 | 123 | str[i] = ptr_tc->TC_string[i]; |
shreeshas95 | 0:b5b370873460 | 124 | } |
shreeshas95 | 0:b5b370873460 | 125 | for(int i = 9 ; i < TM_LONG_SIZE ; ++i){ |
shreeshas95 | 0:b5b370873460 | 126 | str[i] = 0; |
shreeshas95 | 0:b5b370873460 | 127 | } |
shreeshas95 | 0:b5b370873460 | 128 | |
shreeshas95 | 0:b5b370873460 | 129 | test_TM->TM_string = str; |
shreeshas95 | 0:b5b370873460 | 130 | |
shreeshas95 | 0:b5b370873460 | 131 | return test_TM; |
shreeshas95 | 0:b5b370873460 | 132 | } |
shreeshas95 | 0:b5b370873460 | 133 | |
shreeshas95 | 0:b5b370873460 | 134 | bool detect_nack(TM_list *ptr_tm){ |
shreeshas95 | 0:b5b370873460 | 135 | bool bluff = false; |
shreeshas95 | 0:b5b370873460 | 136 | return bluff; |
shreeshas95 | 0:b5b370873460 | 137 | } |
shreeshas95 | 0:b5b370873460 | 138 | |
shreeshas95 | 0:b5b370873460 | 139 | public: |
shreeshas95 | 0:b5b370873460 | 140 | // Constructor |
shreeshas95 | 0:b5b370873460 | 141 | MNG_TC(TC_list *head){ |
shreeshas95 | 0:b5b370873460 | 142 | total_valid_TC = 0; |
shreeshas95 | 0:b5b370873460 | 143 | TC_list_header = head; |
shreeshas95 | 0:b5b370873460 | 144 | all_crc_pass = true; |
shreeshas95 | 0:b5b370873460 | 145 | no_missing_TC = true; |
shreeshas95 | 0:b5b370873460 | 146 | stop_after_current_TC = false; |
shreeshas95 | 0:b5b370873460 | 147 | execute_high_priority_TC = false; |
shreeshas95 | 0:b5b370873460 | 148 | }; |
shreeshas95 | 0:b5b370873460 | 149 | |
shreeshas95 | 0:b5b370873460 | 150 | // delete the crc failed TC from the list to free-up memory |
shreeshas95 | 0:b5b370873460 | 151 | // and update the total valid TC |
shreeshas95 | 0:b5b370873460 | 152 | // and GENERATE L1_ACK_TM |
shreeshas95 | 0:b5b370873460 | 153 | void TC_list_cleanup(){ |
shreeshas95 | 0:b5b370873460 | 154 | printf("Inside cleanup\r\n"); |
shreeshas95 | 0:b5b370873460 | 155 | TC_list *current_TC = TC_list_header; |
shreeshas95 | 0:b5b370873460 | 156 | TC_list *previous_TC = NULL; |
shreeshas95 | 0:b5b370873460 | 157 | |
shreeshas95 | 0:b5b370873460 | 158 | total_valid_TC = 0; |
shreeshas95 | 0:b5b370873460 | 159 | all_crc_pass = true; |
shreeshas95 | 0:b5b370873460 | 160 | |
shreeshas95 | 0:b5b370873460 | 161 | TM_List *l1_ack = new TM_List; |
shreeshas95 | 0:b5b370873460 | 162 | TM_List *l1_ack_head = l1_ack; |
shreeshas95 | 0:b5b370873460 | 163 | generate_L1_ack_TM(l1_ack); |
shreeshas95 | 0:b5b370873460 | 164 | |
shreeshas95 | 0:b5b370873460 | 165 | int TC_count = 0; |
shreeshas95 | 0:b5b370873460 | 166 | |
shreeshas95 | 0:b5b370873460 | 167 | while(current_TC != NULL){ |
shreeshas95 | 0:b5b370873460 | 168 | |
shreeshas95 | 0:b5b370873460 | 169 | // don't care : crc pass or fail |
shreeshas95 | 0:b5b370873460 | 170 | l1_ack->TM_string[3+TC_count] = current_TC->packet_seq_count; |
shreeshas95 | 0:b5b370873460 | 171 | |
shreeshas95 | 0:b5b370873460 | 172 | if( current_TC->crc_pass ){ |
shreeshas95 | 0:b5b370873460 | 173 | ++total_valid_TC; |
shreeshas95 | 0:b5b370873460 | 174 | |
shreeshas95 | 0:b5b370873460 | 175 | // set the crc pass field |
shreeshas95 | 0:b5b370873460 | 176 | l1_ack->TM_string[2] |= ( 1 << (7-TC_count) ); |
shreeshas95 | 0:b5b370873460 | 177 | |
shreeshas95 | 0:b5b370873460 | 178 | // advance to the next node |
shreeshas95 | 0:b5b370873460 | 179 | previous_TC = current_TC; |
shreeshas95 | 0:b5b370873460 | 180 | current_TC = current_TC->next_TC; |
shreeshas95 | 0:b5b370873460 | 181 | } |
shreeshas95 | 0:b5b370873460 | 182 | // crc fail |
shreeshas95 | 0:b5b370873460 | 183 | else{ |
shreeshas95 | 0:b5b370873460 | 184 | // unset the crc pass field |
shreeshas95 | 0:b5b370873460 | 185 | l1_ack->TM_string[2] &= ~( 1 << (7-TC_count) ); |
shreeshas95 | 0:b5b370873460 | 186 | |
shreeshas95 | 0:b5b370873460 | 187 | // delete and advance to the next node |
shreeshas95 | 0:b5b370873460 | 188 | TC_list *next = current_TC->next_TC; |
shreeshas95 | 0:b5b370873460 | 189 | delete_TC(current_TC, previous_TC); |
shreeshas95 | 0:b5b370873460 | 190 | current_TC = next; |
shreeshas95 | 0:b5b370873460 | 191 | all_crc_pass = false; |
shreeshas95 | 0:b5b370873460 | 192 | } |
shreeshas95 | 0:b5b370873460 | 193 | ++TC_count; |
shreeshas95 | 0:b5b370873460 | 194 | |
shreeshas95 | 0:b5b370873460 | 195 | // extend the linked list if TC_count > 7 |
shreeshas95 | 0:b5b370873460 | 196 | if(TC_count > 7){ |
shreeshas95 | 0:b5b370873460 | 197 | TC_count = 0; |
shreeshas95 | 0:b5b370873460 | 198 | |
shreeshas95 | 0:b5b370873460 | 199 | l1_ack->next_TM = new TM_List; |
shreeshas95 | 0:b5b370873460 | 200 | l1_ack = l1_ack->next_TM; |
shreeshas95 | 0:b5b370873460 | 201 | generate_L1_ack_TM(l1_ack); |
shreeshas95 | 0:b5b370873460 | 202 | } |
shreeshas95 | 0:b5b370873460 | 203 | } |
shreeshas95 | 0:b5b370873460 | 204 | |
shreeshas95 | 0:b5b370873460 | 205 | // SND_L1_ACK to GS |
shreeshas95 | 0:b5b370873460 | 206 | |
shreeshas95 | 0:b5b370873460 | 207 | // delete the TM |
shreeshas95 | 0:b5b370873460 | 208 | l1_ack = l1_ack_head; |
shreeshas95 | 0:b5b370873460 | 209 | while(l1_ack != NULL){ |
shreeshas95 | 0:b5b370873460 | 210 | TM_List *temp = l1_ack->next_TM; |
shreeshas95 | 0:b5b370873460 | 211 | delete l1_ack->TM_string; |
shreeshas95 | 0:b5b370873460 | 212 | delete l1_ack; |
shreeshas95 | 0:b5b370873460 | 213 | l1_ack = temp; |
shreeshas95 | 0:b5b370873460 | 214 | } |
shreeshas95 | 0:b5b370873460 | 215 | |
shreeshas95 | 0:b5b370873460 | 216 | if(all_crc_pass == false){ |
shreeshas95 | 0:b5b370873460 | 217 | // exit |
shreeshas95 | 0:b5b370873460 | 218 | } |
shreeshas95 | 0:b5b370873460 | 219 | printf("Completed cleanup\r\n"); |
shreeshas95 | 0:b5b370873460 | 220 | printf("valid TC = %d\r\n", total_valid_TC); |
shreeshas95 | 0:b5b370873460 | 221 | } |
shreeshas95 | 0:b5b370873460 | 222 | |
shreeshas95 | 0:b5b370873460 | 223 | // At this stage ALL NODES ARE CRC PASS |
shreeshas95 | 0:b5b370873460 | 224 | // decode the TCs and fill in the values in the tc-node |
shreeshas95 | 0:b5b370873460 | 225 | void decode_TC(){ |
shreeshas95 | 0:b5b370873460 | 226 | printf("Inside decode tc\r\n"); |
shreeshas95 | 0:b5b370873460 | 227 | TC_list *node_ptr = TC_list_header; |
shreeshas95 | 0:b5b370873460 | 228 | |
shreeshas95 | 0:b5b370873460 | 229 | while( node_ptr != NULL ){ |
shreeshas95 | 0:b5b370873460 | 230 | |
shreeshas95 | 0:b5b370873460 | 231 | unsigned char temp; |
shreeshas95 | 0:b5b370873460 | 232 | |
shreeshas95 | 0:b5b370873460 | 233 | // PSC |
shreeshas95 | 0:b5b370873460 | 234 | node_ptr->packet_seq_count = node_ptr->TC_string[0]; |
shreeshas95 | 0:b5b370873460 | 235 | // APID |
shreeshas95 | 0:b5b370873460 | 236 | temp = node_ptr->TC_string[1]; |
shreeshas95 | 0:b5b370873460 | 237 | printf("chr for apid is %d\r\n", temp); |
shreeshas95 | 0:b5b370873460 | 238 | node_ptr->apid = (temp >> 6) & 3; |
shreeshas95 | 0:b5b370873460 | 239 | printf("apid = %d\r\n", node_ptr->apid); |
shreeshas95 | 0:b5b370873460 | 240 | // Abort On Nack |
shreeshas95 | 0:b5b370873460 | 241 | node_ptr->abort_on_nack = (temp >> 3) & 1; |
shreeshas95 | 0:b5b370873460 | 242 | // default values of enable and execution |
shreeshas95 | 0:b5b370873460 | 243 | node_ptr->enabled = true; |
shreeshas95 | 0:b5b370873460 | 244 | node_ptr->valid_execution = false; |
shreeshas95 | 0:b5b370873460 | 245 | |
shreeshas95 | 0:b5b370873460 | 246 | node_ptr = node_ptr->next_TC; |
shreeshas95 | 0:b5b370873460 | 247 | } |
shreeshas95 | 0:b5b370873460 | 248 | printf("completed decode\r\n"); |
shreeshas95 | 0:b5b370873460 | 249 | } |
shreeshas95 | 0:b5b370873460 | 250 | |
shreeshas95 | 0:b5b370873460 | 251 | // check for missing tc |
shreeshas95 | 0:b5b370873460 | 252 | // run TC_list_cleanup() before running this function |
shreeshas95 | 0:b5b370873460 | 253 | void check_for_missing_tc(){ |
shreeshas95 | 0:b5b370873460 | 254 | printf("inside check for missing\r\n"); |
shreeshas95 | 0:b5b370873460 | 255 | no_missing_TC = true; |
shreeshas95 | 0:b5b370873460 | 256 | for(unsigned char psc = PSC_START_VALUE ; psc < (total_valid_TC+PSC_START_VALUE) ; ++psc ) { |
shreeshas95 | 0:b5b370873460 | 257 | bool flag = false; |
shreeshas95 | 0:b5b370873460 | 258 | TC_list *node_ptr = TC_list_header; |
shreeshas95 | 0:b5b370873460 | 259 | while(node_ptr != NULL){ |
shreeshas95 | 0:b5b370873460 | 260 | if( node_ptr->packet_seq_count == psc ){ |
shreeshas95 | 0:b5b370873460 | 261 | flag = true; |
shreeshas95 | 0:b5b370873460 | 262 | break; |
shreeshas95 | 0:b5b370873460 | 263 | } |
shreeshas95 | 0:b5b370873460 | 264 | else{ |
shreeshas95 | 0:b5b370873460 | 265 | node_ptr = node_ptr->next_TC; |
shreeshas95 | 0:b5b370873460 | 266 | } |
shreeshas95 | 0:b5b370873460 | 267 | } |
shreeshas95 | 0:b5b370873460 | 268 | if( flag == false ){ |
shreeshas95 | 0:b5b370873460 | 269 | no_missing_TC = false; |
shreeshas95 | 0:b5b370873460 | 270 | // packet with PSC = psc is missing !! |
shreeshas95 | 0:b5b370873460 | 271 | // exit |
shreeshas95 | 0:b5b370873460 | 272 | printf("exit\r\n"); |
shreeshas95 | 0:b5b370873460 | 273 | } |
shreeshas95 | 0:b5b370873460 | 274 | } |
shreeshas95 | 0:b5b370873460 | 275 | printf("Completed check for missing\r\n"); |
shreeshas95 | 0:b5b370873460 | 276 | } |
shreeshas95 | 0:b5b370873460 | 277 | |
shreeshas95 | 0:b5b370873460 | 278 | |
shreeshas95 | 0:b5b370873460 | 279 | // At this stage ALL NODE ARE CRC PASS and NO MISSING PACKETS |
shreeshas95 | 0:b5b370873460 | 280 | // function : send TC to the target wait and receive from target |
shreeshas95 | 0:b5b370873460 | 281 | void execute_TC(){ |
shreeshas95 | 0:b5b370873460 | 282 | printf("inside execute tc\r\n"); |
shreeshas95 | 0:b5b370873460 | 283 | unsigned char psc = PSC_START_VALUE; |
shreeshas95 | 0:b5b370873460 | 284 | while( psc < (total_valid_TC+PSC_START_VALUE) ){ |
shreeshas95 | 0:b5b370873460 | 285 | printf("psc = %d\r\n", psc); |
shreeshas95 | 0:b5b370873460 | 286 | if(stop_after_current_TC){ |
shreeshas95 | 0:b5b370873460 | 287 | // exit |
shreeshas95 | 0:b5b370873460 | 288 | printf("exit stop after current TC\r\n"); |
shreeshas95 | 0:b5b370873460 | 289 | } |
shreeshas95 | 0:b5b370873460 | 290 | else if(execute_high_priority_TC){ |
shreeshas95 | 0:b5b370873460 | 291 | printf("Inside hptc\r\n"); |
shreeshas95 | 0:b5b370873460 | 292 | TC_list *tc_ptr = TC_list_header; |
shreeshas95 | 0:b5b370873460 | 293 | while(tc_ptr != NULL){ |
shreeshas95 | 0:b5b370873460 | 294 | // high priority TC belong APID_CDMS |
shreeshas95 | 0:b5b370873460 | 295 | if( tc_ptr->apid == APID_CDMS ){ |
shreeshas95 | 0:b5b370873460 | 296 | // setup the priority order in nested if else |
shreeshas95 | 0:b5b370873460 | 297 | unsigned char temp = tc_ptr->TC_string[2]; |
shreeshas95 | 0:b5b370873460 | 298 | unsigned char service = ( temp >> 4 ) & 0xf; |
shreeshas95 | 0:b5b370873460 | 299 | TM_List *tm_ptr; |
shreeshas95 | 0:b5b370873460 | 300 | if(service == HPTC1){ |
shreeshas95 | 0:b5b370873460 | 301 | tm_ptr = manage_process(tc_ptr); |
shreeshas95 | 0:b5b370873460 | 302 | } |
shreeshas95 | 0:b5b370873460 | 303 | else if(service == HPTC2){ |
shreeshas95 | 0:b5b370873460 | 304 | tm_ptr = manage_process(tc_ptr); |
shreeshas95 | 0:b5b370873460 | 305 | } |
shreeshas95 | 0:b5b370873460 | 306 | // add more entries above |
shreeshas95 | 0:b5b370873460 | 307 | |
shreeshas95 | 0:b5b370873460 | 308 | // add number of tm packets also while calling snd |
shreeshas95 | 0:b5b370873460 | 309 | // tc_ptr : SND_TM to GS |
shreeshas95 | 0:b5b370873460 | 310 | // delete tm |
shreeshas95 | 0:b5b370873460 | 311 | |
shreeshas95 | 0:b5b370873460 | 312 | if( detect_nack(tm_ptr) ){ |
shreeshas95 | 0:b5b370873460 | 313 | if(tc_ptr->abort_on_nack){ |
shreeshas95 | 0:b5b370873460 | 314 | // exit |
shreeshas95 | 0:b5b370873460 | 315 | printf("exit"); |
shreeshas95 | 0:b5b370873460 | 316 | } |
shreeshas95 | 0:b5b370873460 | 317 | } |
shreeshas95 | 0:b5b370873460 | 318 | else{ |
shreeshas95 | 0:b5b370873460 | 319 | tc_ptr->valid_execution = true; |
shreeshas95 | 0:b5b370873460 | 320 | // delete the tc string to free up memory |
shreeshas95 | 0:b5b370873460 | 321 | delete tc_ptr->TC_string; |
shreeshas95 | 0:b5b370873460 | 322 | } |
shreeshas95 | 0:b5b370873460 | 323 | } |
shreeshas95 | 0:b5b370873460 | 324 | } |
shreeshas95 | 0:b5b370873460 | 325 | execute_high_priority_TC = false; |
shreeshas95 | 0:b5b370873460 | 326 | } |
shreeshas95 | 0:b5b370873460 | 327 | else{ |
shreeshas95 | 0:b5b370873460 | 328 | printf("executing normal TC\r\n"); |
shreeshas95 | 0:b5b370873460 | 329 | TC_list *current_TC = TC_list_header; |
shreeshas95 | 0:b5b370873460 | 330 | // find the tc corresponding to the psc |
shreeshas95 | 0:b5b370873460 | 331 | while(current_TC != NULL){ |
shreeshas95 | 0:b5b370873460 | 332 | printf("while : finding tc with psc : %d\r\n", psc); |
shreeshas95 | 0:b5b370873460 | 333 | if( current_TC->packet_seq_count == psc ){ |
shreeshas95 | 0:b5b370873460 | 334 | printf("inside IF\r\n"); |
shreeshas95 | 0:b5b370873460 | 335 | TM_List *tm_ptr; |
shreeshas95 | 0:b5b370873460 | 336 | printf("apid = %d\r\n", current_TC->apid); |
shreeshas95 | 0:b5b370873460 | 337 | if(current_TC->apid == APID_CDMS){ |
shreeshas95 | 0:b5b370873460 | 338 | printf("CDMS APID found!\r\n"); |
shreeshas95 | 0:b5b370873460 | 339 | tm_ptr = manage_process(current_TC); |
shreeshas95 | 0:b5b370873460 | 340 | } |
shreeshas95 | 0:b5b370873460 | 341 | else{ |
shreeshas95 | 0:b5b370873460 | 342 | // call RLY_TMTC |
shreeshas95 | 0:b5b370873460 | 343 | // wait and receive for TM |
shreeshas95 | 0:b5b370873460 | 344 | tm_ptr = tm_ptr; |
shreeshas95 | 0:b5b370873460 | 345 | } |
shreeshas95 | 0:b5b370873460 | 346 | |
shreeshas95 | 0:b5b370873460 | 347 | // add number of tm packets also |
shreeshas95 | 0:b5b370873460 | 348 | printf("sending data\r\n"); |
shreeshas95 | 0:b5b370873460 | 349 | SND_TM(tm_ptr, false, 1); |
shreeshas95 | 0:b5b370873460 | 350 | printf("\r\nfinished sending data\r\n"); |
shreeshas95 | 0:b5b370873460 | 351 | |
shreeshas95 | 0:b5b370873460 | 352 | if( detect_nack(tm_ptr) ){ |
shreeshas95 | 0:b5b370873460 | 353 | if(current_TC->abort_on_nack){ |
shreeshas95 | 0:b5b370873460 | 354 | // exit |
shreeshas95 | 0:b5b370873460 | 355 | printf("exit"); |
shreeshas95 | 0:b5b370873460 | 356 | } |
shreeshas95 | 0:b5b370873460 | 357 | } |
shreeshas95 | 0:b5b370873460 | 358 | else{ |
shreeshas95 | 0:b5b370873460 | 359 | current_TC->valid_execution = true; |
shreeshas95 | 0:b5b370873460 | 360 | // delete the tc string to free up memory |
shreeshas95 | 0:b5b370873460 | 361 | printf("deleting TC string\r\n"); |
shreeshas95 | 0:b5b370873460 | 362 | // delete current_TC->TC_string; |
shreeshas95 | 0:b5b370873460 | 363 | printf("finished deleting TC string\r\n"); |
shreeshas95 | 0:b5b370873460 | 364 | } |
shreeshas95 | 0:b5b370873460 | 365 | |
shreeshas95 | 0:b5b370873460 | 366 | // delete the TM received after sending to GS |
shreeshas95 | 0:b5b370873460 | 367 | printf("deleting TM received\r\n"); |
shreeshas95 | 0:b5b370873460 | 368 | delete tm_ptr->TM_string; |
shreeshas95 | 0:b5b370873460 | 369 | delete tm_ptr; |
shreeshas95 | 0:b5b370873460 | 370 | |
shreeshas95 | 0:b5b370873460 | 371 | // found the tc with psc hence break |
shreeshas95 | 0:b5b370873460 | 372 | break; |
shreeshas95 | 0:b5b370873460 | 373 | } |
shreeshas95 | 0:b5b370873460 | 374 | |
shreeshas95 | 0:b5b370873460 | 375 | current_TC = current_TC->next_TC; |
shreeshas95 | 0:b5b370873460 | 376 | } |
shreeshas95 | 0:b5b370873460 | 377 | ++psc; |
shreeshas95 | 0:b5b370873460 | 378 | } |
shreeshas95 | 0:b5b370873460 | 379 | } |
shreeshas95 | 0:b5b370873460 | 380 | printf("completed execute tc\r\n"); |
shreeshas95 | 0:b5b370873460 | 381 | } |
shreeshas95 | 0:b5b370873460 | 382 | |
shreeshas95 | 0:b5b370873460 | 383 | // ~MNG_TC(); |
shreeshas95 | 0:b5b370873460 | 384 | |
shreeshas95 | 0:b5b370873460 | 385 | /* data */ |
shreeshas95 | 0:b5b370873460 | 386 | }; |