pl ack in tmtc

Dependencies:   FreescaleIAP SimpleDMA mbed-rtos mbed

Fork of COM_MNG_TMTC_SIMPLE_pl123 by shubham c

Committer:
shreeshas95
Date:
Tue Dec 01 10:56:10 2015 +0000
Revision:
0:f016e9e8d48b
Child:
1:a0055b3280c8
Working without COM_SND_TM

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shreeshas95 0:f016e9e8d48b 1 // 8 Jul
shreeshas95 0:f016e9e8d48b 2 // did flowchart of states
shreeshas95 0:f016e9e8d48b 3
shreeshas95 0:f016e9e8d48b 4 // handle sd card with cdms team
shreeshas95 0:f016e9e8d48b 5
shreeshas95 0:f016e9e8d48b 6 // Jun 6
shreeshas95 0:f016e9e8d48b 7 // WHAT IS TC exec code in L1 ack ?
shreeshas95 0:f016e9e8d48b 8
shreeshas95 0:f016e9e8d48b 9 #define delete_TC(tc_ptr) {\
shreeshas95 0:f016e9e8d48b 10 if(tc_ptr == gHEAD_NODE_TCL){\
shreeshas95 0:f016e9e8d48b 11 gHEAD_NODE_TCL = tc_ptr->next_TC;\
shreeshas95 0:f016e9e8d48b 12 }\
shreeshas95 0:f016e9e8d48b 13 delete tc_ptr;\
shreeshas95 0:f016e9e8d48b 14 }
shreeshas95 0:f016e9e8d48b 15
shreeshas95 0:f016e9e8d48b 16 // typeof tm_ptr: Base_tm
shreeshas95 0:f016e9e8d48b 17 // typeof tc_ptr: Base_tc
shreeshas95 0:f016e9e8d48b 18 // typeof temp_xxxx: uint8_t
shreeshas95 0:f016e9e8d48b 19 #define fill_l1_ack(tm_ptr) {\
shreeshas95 0:f016e9e8d48b 20 uint8_t temp8;\
shreeshas95 0:f016e9e8d48b 21 tm_ptr->next_TM = NULL;\
shreeshas95 0:f016e9e8d48b 22 temp8 = 0xA;\
shreeshas95 0:f016e9e8d48b 23 PUTtmid(tm_ptr->fields, temp8);\
shreeshas95 0:f016e9e8d48b 24 temp8 = 0x00;\
shreeshas95 0:f016e9e8d48b 25 PUTshort_or_long_tm(tm_ptr->fields, temp8);\
shreeshas95 0:f016e9e8d48b 26 tm_ptr->TM_string[0] = TMID_ACK_L1 << 4;\
shreeshas95 0:f016e9e8d48b 27 tm_ptr->TM_string[1] = gTOTAL_INCORRECT_SIZE_TC & 0xFF;\
shreeshas95 0:f016e9e8d48b 28 tm_ptr->TM_string[2] = gTOTAL_CRC_FAIL_TC & 0xFF;\
shreeshas95 0:f016e9e8d48b 29 tm_ptr->TM_string[3] = (gMASTER_STATE << 4) & 0xF0;\
shreeshas95 0:f016e9e8d48b 30 }
shreeshas95 0:f016e9e8d48b 31
shreeshas95 0:f016e9e8d48b 32 #define put_crc_l1_ack(tm_ptr, num_crc) {\
shreeshas95 0:f016e9e8d48b 33 tm_ptr->TM_string[2] = num_crc & 0xFF;\
shreeshas95 0:f016e9e8d48b 34 crc_checksum = crc16_gen(tm_ptr->TM_string, TM_SHORT_SIZE-2);\
shreeshas95 0:f016e9e8d48b 35 tm_ptr->TM_string[TM_SHORT_SIZE-2] = (crc_checksum >> 8) & 0xFF;\
shreeshas95 0:f016e9e8d48b 36 tm_ptr->TM_string[TM_SHORT_SIZE-1] = crc_checksum & 0xFF;\
shreeshas95 0:f016e9e8d48b 37 }
shreeshas95 0:f016e9e8d48b 38
shreeshas95 0:f016e9e8d48b 39 #define detect_ack(tm_ptr, temp_ack) {\
shreeshas95 0:f016e9e8d48b 40 uint8_t temp8;\
shreeshas95 0:f016e9e8d48b 41 if( tm_ptr != NULL ){\
shreeshas95 0:f016e9e8d48b 42 temp8 = tm_ptr->TM_string[3];\
shreeshas95 0:f016e9e8d48b 43 if((temp8 == 0xE0) || (temp8 == 0xA0) || (temp8 == 0xC0))\
shreeshas95 0:f016e9e8d48b 44 temp_ack = 0x01;\
shreeshas95 0:f016e9e8d48b 45 else\
shreeshas95 0:f016e9e8d48b 46 temp_ack = 0x00;\
shreeshas95 0:f016e9e8d48b 47 }\
shreeshas95 0:f016e9e8d48b 48 else\
shreeshas95 0:f016e9e8d48b 49 temp_ack = 0x00;\
shreeshas95 0:f016e9e8d48b 50 }
shreeshas95 0:f016e9e8d48b 51
shreeshas95 0:f016e9e8d48b 52 #define isit_obosc(tc_ptr, temp_obosc) {\
shreeshas95 0:f016e9e8d48b 53 temp_obosc = 0x00;\
shreeshas95 0:f016e9e8d48b 54 if( GETapid(tc_ptr) == 2 ){\
shreeshas95 0:f016e9e8d48b 55 if( ((tc_ptr->TC_string[2]) >> 4) == 0xB ){\
shreeshas95 0:f016e9e8d48b 56 switch( (tc_ptr->TC_string[2]) & 0xf ){\
shreeshas95 0:f016e9e8d48b 57 case 1:\
shreeshas95 0:f016e9e8d48b 58 case 2:\
shreeshas95 0:f016e9e8d48b 59 case 5:\
shreeshas95 0:f016e9e8d48b 60 case 6:\
shreeshas95 0:f016e9e8d48b 61 case 15:\
shreeshas95 0:f016e9e8d48b 62 temp_obosc = 0x01;\
shreeshas95 0:f016e9e8d48b 63 }\
shreeshas95 0:f016e9e8d48b 64 }\
shreeshas95 0:f016e9e8d48b 65 }\
shreeshas95 0:f016e9e8d48b 66 }
shreeshas95 0:f016e9e8d48b 67
shreeshas95 0:f016e9e8d48b 68 #define isit_sdcard(tc_ptr, temp_sdcard) {\
shreeshas95 0:f016e9e8d48b 69 temp_sdcard = 0x00;\
shreeshas95 0:f016e9e8d48b 70 if( GETapid(tc_ptr) == 2 ){\
shreeshas95 0:f016e9e8d48b 71 if( ( (tc_ptr->TC_string[2]) >> 4) == 0xF ){\
shreeshas95 0:f016e9e8d48b 72 switch( (tc_ptr->TC_string[2]) & 0xf ){\
shreeshas95 0:f016e9e8d48b 73 case 0:\
shreeshas95 0:f016e9e8d48b 74 case 1:\
shreeshas95 0:f016e9e8d48b 75 case 2:\
shreeshas95 0:f016e9e8d48b 76 case 3:\
shreeshas95 0:f016e9e8d48b 77 case 4:\
shreeshas95 0:f016e9e8d48b 78 temp_sdcard = 0x01;\
shreeshas95 0:f016e9e8d48b 79 }\
shreeshas95 0:f016e9e8d48b 80 }\
shreeshas95 0:f016e9e8d48b 81 }\
shreeshas95 0:f016e9e8d48b 82 }
shreeshas95 0:f016e9e8d48b 83
shreeshas95 0:f016e9e8d48b 84 /*
shreeshas95 0:f016e9e8d48b 85 @brief: check for missing tc, also check crc, i.e.
shreeshas95 0:f016e9e8d48b 86 if true execution can be started else have to wait
shreeshas95 0:f016e9e8d48b 87 decide the next state
shreeshas95 0:f016e9e8d48b 88 @param: none
shreeshas95 0:f016e9e8d48b 89 @return: bool indicating whether there are missing tc
shreeshas95 0:f016e9e8d48b 90 */
shreeshas95 0:f016e9e8d48b 91 // PENDING: LAST FRAME BIT
shreeshas95 0:f016e9e8d48b 92 /*
shreeshas95 0:f016e9e8d48b 93 for loop: check for missing tc
shreeshas95 0:f016e9e8d48b 94 if: check for incorrect sized tc
shreeshas95 0:f016e9e8d48b 95 if: check for last frame bit
shreeshas95 0:f016e9e8d48b 96 */
shreeshas95 0:f016e9e8d48b 97 #define continueToExecute(returnHere) {\
shreeshas95 0:f016e9e8d48b 98 uint8_t tempReturn = 0x00;\
shreeshas95 0:f016e9e8d48b 99 for(uint8_t p = PSC_START_VALUE ; p < (gTOTAL_VALID_TC + PSC_START_VALUE) ; ++p){\
shreeshas95 0:f016e9e8d48b 100 bool flag = false;\
shreeshas95 0:f016e9e8d48b 101 Base_tc *node_ptr = gHEAD_NODE_TCL;\
shreeshas95 0:f016e9e8d48b 102 while(node_ptr != NULL){\
shreeshas95 0:f016e9e8d48b 103 if( (GETpacket_seq_count(node_ptr) == p) && (GETcrc_pass(node_ptr) == 1) ){\
shreeshas95 0:f016e9e8d48b 104 flag = true;\
shreeshas95 0:f016e9e8d48b 105 break;\
shreeshas95 0:f016e9e8d48b 106 }\
shreeshas95 0:f016e9e8d48b 107 else{\
shreeshas95 0:f016e9e8d48b 108 node_ptr = node_ptr->next_TC;\
shreeshas95 0:f016e9e8d48b 109 }\
shreeshas95 0:f016e9e8d48b 110 }\
shreeshas95 0:f016e9e8d48b 111 if(flag == false){\
shreeshas95 0:f016e9e8d48b 112 tempReturn = 0x02;\
shreeshas95 0:f016e9e8d48b 113 break;\
shreeshas95 0:f016e9e8d48b 114 }\
shreeshas95 0:f016e9e8d48b 115 }\
shreeshas95 0:f016e9e8d48b 116 Base_tc *tcp = gHEAD_NODE_TCL;\
shreeshas95 0:f016e9e8d48b 117 while(tcp != NULL){\
shreeshas95 0:f016e9e8d48b 118 if(GETpacket_seq_count(tcp) == (gTOTAL_VALID_TC + PSC_START_VALUE - 1)){\
shreeshas95 0:f016e9e8d48b 119 if( ( (tcp->TC_string[1]) & 0x20 ) == 0x00 ){\
shreeshas95 0:f016e9e8d48b 120 tempReturn = tempReturn + 0x01;\
shreeshas95 0:f016e9e8d48b 121 }\
shreeshas95 0:f016e9e8d48b 122 break;\
shreeshas95 0:f016e9e8d48b 123 }\
shreeshas95 0:f016e9e8d48b 124 tcp = tcp->next_TC;\
shreeshas95 0:f016e9e8d48b 125 }\
shreeshas95 0:f016e9e8d48b 126 returnHere = tempReturn;\
shreeshas95 0:f016e9e8d48b 127 }
shreeshas95 0:f016e9e8d48b 128
shreeshas95 0:f016e9e8d48b 129 /*
shreeshas95 0:f016e9e8d48b 130 @brief: DELETE THE CRC FAILED TC FROM THE LIST TO FREE-UP MEMORY AND UPDATE
shreeshas95 0:f016e9e8d48b 131 THE TOTAL VALID TC AND GENERATE L1_ACK_TM
shreeshas95 0:f016e9e8d48b 132 @param: none
shreeshas95 0:f016e9e8d48b 133 @return: none
shreeshas95 0:f016e9e8d48b 134 */
shreeshas95 0:f016e9e8d48b 135 #define send_l1_ack {\
shreeshas95 0:f016e9e8d48b 136 Base_tc *current_TC = gHEAD_NODE_TCL;\
shreeshas95 0:f016e9e8d48b 137 Base_tm *l1_ack = new Short_tm;\
shreeshas95 0:f016e9e8d48b 138 Base_tm *l1_ack_head = l1_ack;\
shreeshas95 0:f016e9e8d48b 139 fill_l1_ack(l1_ack);\
shreeshas95 0:f016e9e8d48b 140 int TC_count = 0;\
shreeshas95 0:f016e9e8d48b 141 uint16_t crc_checksum = 0;\
shreeshas95 0:f016e9e8d48b 142 while(current_TC != NULL){\
shreeshas95 0:f016e9e8d48b 143 /*IF CRC PASS*/\
shreeshas95 0:f016e9e8d48b 144 if( (GETcrc_pass(current_TC) == 1) ){\
shreeshas95 0:f016e9e8d48b 145 if(TC_count > 4){\
shreeshas95 0:f016e9e8d48b 146 /*extend the TM linked list*/\
shreeshas95 0:f016e9e8d48b 147 TC_count = 0;\
shreeshas95 0:f016e9e8d48b 148 l1_ack->next_TM = new Short_tm;\
shreeshas95 0:f016e9e8d48b 149 l1_ack = l1_ack->next_TM;\
shreeshas95 0:f016e9e8d48b 150 fill_l1_ack(l1_ack);\
shreeshas95 0:f016e9e8d48b 151 /*PENDING: FILL TC_EXEC_CODE, APPEND CRC TO THE TM*/\
shreeshas95 0:f016e9e8d48b 152 put_crc_l1_ack( l1_ack, gTOTAL_CRC_FAIL_TC );\
shreeshas95 0:f016e9e8d48b 153 }\
shreeshas95 0:f016e9e8d48b 154 /*PSC starts from 7th byte*/\
shreeshas95 0:f016e9e8d48b 155 l1_ack->TM_string[6+TC_count] = current_TC->TC_string[0];\
shreeshas95 0:f016e9e8d48b 156 /*TC exec status*/\
shreeshas95 0:f016e9e8d48b 157 switch(TC_count){\
shreeshas95 0:f016e9e8d48b 158 case 0:\
shreeshas95 0:f016e9e8d48b 159 l1_ack->TM_string[3] |= (GETexec_status(current_TC)) & 0x0F;\
shreeshas95 0:f016e9e8d48b 160 break;\
shreeshas95 0:f016e9e8d48b 161 case 1:\
shreeshas95 0:f016e9e8d48b 162 l1_ack->TM_string[4] = (GETexec_status(current_TC) << 4) & 0xF0;\
shreeshas95 0:f016e9e8d48b 163 break;\
shreeshas95 0:f016e9e8d48b 164 case 2:\
shreeshas95 0:f016e9e8d48b 165 l1_ack->TM_string[4] |= (GETexec_status(current_TC)) & 0x0F;\
shreeshas95 0:f016e9e8d48b 166 break;\
shreeshas95 0:f016e9e8d48b 167 case 3:\
shreeshas95 0:f016e9e8d48b 168 l1_ack->TM_string[5] = (GETexec_status(current_TC) << 4) & 0xF0;\
shreeshas95 0:f016e9e8d48b 169 break;\
shreeshas95 0:f016e9e8d48b 170 case 4:\
shreeshas95 0:f016e9e8d48b 171 l1_ack->TM_string[5] |= (GETexec_status(current_TC)) & 0x0F;\
shreeshas95 0:f016e9e8d48b 172 }\
shreeshas95 0:f016e9e8d48b 173 ++TC_count;\
shreeshas95 0:f016e9e8d48b 174 }\
shreeshas95 0:f016e9e8d48b 175 current_TC = current_TC->next_TC;\
shreeshas95 0:f016e9e8d48b 176 }\
shreeshas95 0:f016e9e8d48b 177 /*FILL UP THE REMAINING FIELDS WITH 0x01: 0x00 => problem with GS*/\
shreeshas95 0:f016e9e8d48b 178 if(TC_count < 5){\
shreeshas95 0:f016e9e8d48b 179 while(TC_count < 5){\
shreeshas95 0:f016e9e8d48b 180 l1_ack->TM_string[6+TC_count] = current_TC->TC_string[0];\
shreeshas95 0:f016e9e8d48b 181 switch(TC_count){\
shreeshas95 0:f016e9e8d48b 182 case 0:\
shreeshas95 0:f016e9e8d48b 183 l1_ack->TM_string[3] |= (GETexec_status(current_TC)) & 0x0F;\
shreeshas95 0:f016e9e8d48b 184 break;\
shreeshas95 0:f016e9e8d48b 185 case 1:\
shreeshas95 0:f016e9e8d48b 186 l1_ack->TM_string[4] = (GETexec_status(current_TC) << 4) & 0xF0;\
shreeshas95 0:f016e9e8d48b 187 break;\
shreeshas95 0:f016e9e8d48b 188 case 2:\
shreeshas95 0:f016e9e8d48b 189 l1_ack->TM_string[4] |= (GETexec_status(current_TC)) & 0x0F;\
shreeshas95 0:f016e9e8d48b 190 break;\
shreeshas95 0:f016e9e8d48b 191 case 3:\
shreeshas95 0:f016e9e8d48b 192 l1_ack->TM_string[5] = (GETexec_status(current_TC) << 4) & 0xF0;\
shreeshas95 0:f016e9e8d48b 193 break;\
shreeshas95 0:f016e9e8d48b 194 case 4:\
shreeshas95 0:f016e9e8d48b 195 l1_ack->TM_string[5] |= (GETexec_status(current_TC)) & 0x0F;\
shreeshas95 0:f016e9e8d48b 196 }\
shreeshas95 0:f016e9e8d48b 197 ++TC_count;\
shreeshas95 0:f016e9e8d48b 198 }\
shreeshas95 0:f016e9e8d48b 199 put_crc_l1_ack(l1_ack, gTOTAL_CRC_FAIL_TC);\
shreeshas95 0:f016e9e8d48b 200 }\
shreeshas95 0:f016e9e8d48b 201 /*snd_tm.head_pointer(l1_ack_head);*/\
shreeshas95 0:f016e9e8d48b 202 /*adf_not_SDcard();*/\
shreeshas95 0:f016e9e8d48b 203 /*delete the TM*/\
shreeshas95 0:f016e9e8d48b 204 l1_ack = l1_ack_head;\
shreeshas95 0:f016e9e8d48b 205 while(l1_ack != NULL){\
shreeshas95 0:f016e9e8d48b 206 Base_tm *temp = l1_ack->next_TM;\
shreeshas95 0:f016e9e8d48b 207 delete l1_ack;\
shreeshas95 0:f016e9e8d48b 208 l1_ack = temp;\
shreeshas95 0:f016e9e8d48b 209 }\
shreeshas95 0:f016e9e8d48b 210 }
shreeshas95 0:f016e9e8d48b 211
shreeshas95 0:f016e9e8d48b 212 // CDMS TEAM CODE START
shreeshas95 0:f016e9e8d48b 213 #define CDMS_RLY_TMTC(tc_ptr, tm_ptr){\
shreeshas95 0:f016e9e8d48b 214 tm_ptr = NULL;\
shreeshas95 0:f016e9e8d48b 215 }\
shreeshas95 0:f016e9e8d48b 216 // CDMS TEAM CODE END
shreeshas95 0:f016e9e8d48b 217
shreeshas95 0:f016e9e8d48b 218 // EXECUTE OBOSC
shreeshas95 0:f016e9e8d48b 219 #define execute_obosc_core(tc_ptr, tm_ptr) {\
shreeshas95 0:f016e9e8d48b 220 uint8_t service_subtype = (tc_ptr->TC_string[2]) & 0x0F;\
shreeshas95 0:f016e9e8d48b 221 /*including both lower and upper limits*/\
shreeshas95 0:f016e9e8d48b 222 uint8_t targetL = tc_ptr->TC_string[3];\
shreeshas95 0:f016e9e8d48b 223 uint8_t targetU = targetL + tc_ptr->TC_string[4] - 1;\
shreeshas95 0:f016e9e8d48b 224 if( (targetL == 0x00) && (tc_ptr->TC_string[4] == 0) ){\
shreeshas95 0:f016e9e8d48b 225 /*PENDING: ALL REPORTS BELOW*/\
shreeshas95 0:f016e9e8d48b 226 switch(service_subtype){\
shreeshas95 0:f016e9e8d48b 227 case OBOSC_SUB_REP_TCL_D:\
shreeshas95 0:f016e9e8d48b 228 break;\
shreeshas95 0:f016e9e8d48b 229 case OBOSC_SUB_REP_LE:\
shreeshas95 0:f016e9e8d48b 230 break;\
shreeshas95 0:f016e9e8d48b 231 case OBOSC_SUB_RESET:\
shreeshas95 0:f016e9e8d48b 232 break;\
shreeshas95 0:f016e9e8d48b 233 case OBOSC_SUB_REP_TCL:\
shreeshas95 0:f016e9e8d48b 234 break;\
shreeshas95 0:f016e9e8d48b 235 }\
shreeshas95 0:f016e9e8d48b 236 }\
shreeshas95 0:f016e9e8d48b 237 else{\
shreeshas95 0:f016e9e8d48b 238 uint16_t temp16 = 2;\
shreeshas95 0:f016e9e8d48b 239 switch( service_subtype ){\
shreeshas95 0:f016e9e8d48b 240 case OBOSC_SUB_DISABLE:\
shreeshas95 0:f016e9e8d48b 241 temp16 = 2;\
shreeshas95 0:f016e9e8d48b 242 break;\
shreeshas95 0:f016e9e8d48b 243 case OBOSC_SUB_RETRY:\
shreeshas95 0:f016e9e8d48b 244 temp16 = 3;\
shreeshas95 0:f016e9e8d48b 245 break;\
shreeshas95 0:f016e9e8d48b 246 }\
shreeshas95 0:f016e9e8d48b 247 Base_tc *tcp = gHEAD_NODE_TCL;\
shreeshas95 0:f016e9e8d48b 248 while( tcp != NULL ){\
shreeshas95 0:f016e9e8d48b 249 uint16_t tcPSC = GETpacket_seq_count(tcp);\
shreeshas95 0:f016e9e8d48b 250 if( (tcPSC >= targetL) && (tcPSC <= targetU) ){\
shreeshas95 0:f016e9e8d48b 251 PUTexec_status(tcp, temp16);\
shreeshas95 0:f016e9e8d48b 252 }\
shreeshas95 0:f016e9e8d48b 253 tcp = tcp->next_TC;\
shreeshas95 0:f016e9e8d48b 254 }\
shreeshas95 0:f016e9e8d48b 255 }\
shreeshas95 0:f016e9e8d48b 256 /*PENDING: generate L234 ACK*/\
shreeshas95 0:f016e9e8d48b 257 tm_ptr = NULL;\
shreeshas95 0:f016e9e8d48b 258 }
shreeshas95 0:f016e9e8d48b 259
shreeshas95 0:f016e9e8d48b 260 #define EXECUTE_OBOSC_ONLY {\
shreeshas95 0:f016e9e8d48b 261 for(uint8_t execute_psc = gOBOSC_PSC ; execute_psc < (gTOTAL_VALID_TC+PSC_START_VALUE) ; ++execute_psc){\
shreeshas95 0:f016e9e8d48b 262 Base_tc* current_TC = gOBOSC_HEAD;\
shreeshas95 0:f016e9e8d48b 263 while( current_TC != NULL ){\
shreeshas95 0:f016e9e8d48b 264 if( (GETcrc_pass(current_TC) == 1) && (GETpacket_seq_count(current_TC) == execute_psc) ){\
shreeshas95 0:f016e9e8d48b 265 uint8_t current_exec_status = GETexec_status(current_TC);\
shreeshas95 0:f016e9e8d48b 266 if( (current_exec_status == TC_STATE_SUCCESSFULLY_EXECUTED) || (current_exec_status == TC_STATE_DISABLED) )\
shreeshas95 0:f016e9e8d48b 267 break;\
shreeshas95 0:f016e9e8d48b 268 else if( (current_exec_status == TC_STATE_EXECUTION_FAILED) && (GETabort_on_nack(current_TC) == 1) ){\
shreeshas95 0:f016e9e8d48b 269 gMASTER_STATE = TCL_STATE_ABORTED;\
shreeshas95 0:f016e9e8d48b 270 break;\
shreeshas95 0:f016e9e8d48b 271 }\
shreeshas95 0:f016e9e8d48b 272 else if( (current_exec_status == TC_STATE_UNEXECUTED) || (current_exec_status == TC_STATE_MARKED_RETRY) ){\
shreeshas95 0:f016e9e8d48b 273 Base_tm* tm_ptr = NULL;\
shreeshas95 0:f016e9e8d48b 274 uint8_t temp82 = 0x00;\
shreeshas95 0:f016e9e8d48b 275 isit_obosc(current_TC, temp82);\
shreeshas95 0:f016e9e8d48b 276 if(temp82 == 0x01){\
shreeshas95 0:f016e9e8d48b 277 /*EXECUTION OF OBOSC TC*/\
shreeshas95 0:f016e9e8d48b 278 execute_obosc_core(current_TC, tm_ptr);\
shreeshas95 0:f016e9e8d48b 279 }\
shreeshas95 0:f016e9e8d48b 280 /*snd_tm.head_pointer(tm_ptr);*/\
shreeshas95 0:f016e9e8d48b 281 /*adf_not_SDcard();*/\
shreeshas95 0:f016e9e8d48b 282 uint8_t temp83 = 0x00;\
shreeshas95 0:f016e9e8d48b 283 detect_ack(tm_ptr, temp83);\
shreeshas95 0:f016e9e8d48b 284 if( temp83 == 0x01){\
shreeshas95 0:f016e9e8d48b 285 uint16_t temp16 = TC_STATE_SUCCESSFULLY_EXECUTED;\
shreeshas95 0:f016e9e8d48b 286 PUTexec_status(current_TC, temp16);\
shreeshas95 0:f016e9e8d48b 287 }\
shreeshas95 0:f016e9e8d48b 288 else{\
shreeshas95 0:f016e9e8d48b 289 uint16_t temp16 = TC_STATE_EXECUTION_FAILED;\
shreeshas95 0:f016e9e8d48b 290 PUTexec_status(current_TC, temp16);\
shreeshas95 0:f016e9e8d48b 291 }\
shreeshas95 0:f016e9e8d48b 292 /*update last executed L1_ack*/\
shreeshas95 0:f016e9e8d48b 293 if( tm_ptr != NULL ){\
shreeshas95 0:f016e9e8d48b 294 for(int i = 0 ; i < TM_SHORT_SIZE ; ++i){\
shreeshas95 0:f016e9e8d48b 295 gLAST_L1_ACK[i] = gLAST_L1_ACK_BUFFER[i];\
shreeshas95 0:f016e9e8d48b 296 gLAST_L1_ACK_BUFFER[i] = tm_ptr->TM_string[i];\
shreeshas95 0:f016e9e8d48b 297 }\
shreeshas95 0:f016e9e8d48b 298 }\
shreeshas95 0:f016e9e8d48b 299 /*DELETE THE TM AFTER USE*/\
shreeshas95 0:f016e9e8d48b 300 while(tm_ptr != NULL){\
shreeshas95 0:f016e9e8d48b 301 Base_tm *temp = tm_ptr->next_TM;\
shreeshas95 0:f016e9e8d48b 302 delete tm_ptr;\
shreeshas95 0:f016e9e8d48b 303 tm_ptr = temp;\
shreeshas95 0:f016e9e8d48b 304 }\
shreeshas95 0:f016e9e8d48b 305 }\
shreeshas95 0:f016e9e8d48b 306 }\
shreeshas95 0:f016e9e8d48b 307 current_TC = current_TC->next_TC;\
shreeshas95 0:f016e9e8d48b 308 }\
shreeshas95 0:f016e9e8d48b 309 }\
shreeshas95 0:f016e9e8d48b 310 }
shreeshas95 0:f016e9e8d48b 311
shreeshas95 0:f016e9e8d48b 312 #define EXECUTE_TC {\
shreeshas95 0:f016e9e8d48b 313 for(uint8_t execute_psc = PSC_START_VALUE ; execute_psc < (PSC_START_VALUE+gTOTAL_VALID_TC) ; ++execute_psc ){\
shreeshas95 0:f016e9e8d48b 314 gLEDG = !gLEDG;\
shreeshas95 0:f016e9e8d48b 315 gLEDR = !gLEDR;\
shreeshas95 0:f016e9e8d48b 316 Base_tc* current_TC = gHEAD_NODE_TCL;\
shreeshas95 0:f016e9e8d48b 317 while(current_TC != NULL){\
shreeshas95 0:f016e9e8d48b 318 if( (GETcrc_pass(current_TC) == 1) && (GETpacket_seq_count(current_TC) == execute_psc) ){\
shreeshas95 0:f016e9e8d48b 319 uint8_t current_exec_status = GETexec_status(current_TC);\
shreeshas95 0:f016e9e8d48b 320 if( (current_exec_status == TC_STATE_SUCCESSFULLY_EXECUTED) || (current_exec_status == TC_STATE_DISABLED) )\
shreeshas95 0:f016e9e8d48b 321 break;\
shreeshas95 0:f016e9e8d48b 322 else if( (current_exec_status == TC_STATE_EXECUTION_FAILED) && (GETabort_on_nack(current_TC) == 1) ){\
shreeshas95 0:f016e9e8d48b 323 gMASTER_STATE = TCL_STATE_ABORTED;\
shreeshas95 0:f016e9e8d48b 324 break;\
shreeshas95 0:f016e9e8d48b 325 }\
shreeshas95 0:f016e9e8d48b 326 else if( (current_exec_status == TC_STATE_UNEXECUTED) || (current_exec_status == TC_STATE_MARKED_RETRY) ){\
shreeshas95 0:f016e9e8d48b 327 /*EXECUTION OF TC START*/\
shreeshas95 0:f016e9e8d48b 328 uint8_t temp81 = 0x00;\
shreeshas95 0:f016e9e8d48b 329 isit_sdcard(current_TC, temp81);\
shreeshas95 0:f016e9e8d48b 330 if( temp81 == 0x00 ){\
shreeshas95 0:f016e9e8d48b 331 /*EXECUTION OF NON SD-CARD (BOTH OBOSC and CDMS functions)*/\
shreeshas95 0:f016e9e8d48b 332 Base_tm *tm_ptr;\
shreeshas95 0:f016e9e8d48b 333 uint8_t temp82 = 0x00;\
shreeshas95 0:f016e9e8d48b 334 isit_obosc(current_TC, temp82);\
shreeshas95 0:f016e9e8d48b 335 if(temp82 == 0x01){\
shreeshas95 0:f016e9e8d48b 336 /*EXECUTION OF OBOSC TC*/\
shreeshas95 0:f016e9e8d48b 337 execute_obosc_core(current_TC, tm_ptr);\
shreeshas95 0:f016e9e8d48b 338 }\
shreeshas95 0:f016e9e8d48b 339 else{\
shreeshas95 0:f016e9e8d48b 340 /*call CDMS_RLY_TMTC*/\
shreeshas95 0:f016e9e8d48b 341 CDMS_RLY_TMTC(current_TC, tm_ptr);\
shreeshas95 0:f016e9e8d48b 342 }\
shreeshas95 0:f016e9e8d48b 343 /*snd_tm.head_pointer(tm_ptr);*/\
shreeshas95 0:f016e9e8d48b 344 /*adf_not_SDcard();*/\
shreeshas95 0:f016e9e8d48b 345 uint8_t temp83 = 0x00;\
shreeshas95 0:f016e9e8d48b 346 detect_ack(tm_ptr, temp83);\
shreeshas95 0:f016e9e8d48b 347 if( temp83 == 0x01){\
shreeshas95 0:f016e9e8d48b 348 uint16_t temp16 = TC_STATE_SUCCESSFULLY_EXECUTED;\
shreeshas95 0:f016e9e8d48b 349 PUTexec_status(current_TC, temp16);\
shreeshas95 0:f016e9e8d48b 350 }\
shreeshas95 0:f016e9e8d48b 351 else{\
shreeshas95 0:f016e9e8d48b 352 uint16_t temp16 = TC_STATE_EXECUTION_FAILED;\
shreeshas95 0:f016e9e8d48b 353 PUTexec_status(current_TC, temp16);\
shreeshas95 0:f016e9e8d48b 354 }\
shreeshas95 0:f016e9e8d48b 355 /*update last executed L1_ack*/\
shreeshas95 0:f016e9e8d48b 356 if( tm_ptr != NULL ){\
shreeshas95 0:f016e9e8d48b 357 for(int i = 0 ; i < TM_SHORT_SIZE ; ++i){\
shreeshas95 0:f016e9e8d48b 358 gLAST_L1_ACK[i] = gLAST_L1_ACK_BUFFER[i];\
shreeshas95 0:f016e9e8d48b 359 gLAST_L1_ACK_BUFFER[i] = tm_ptr->TM_string[i];\
shreeshas95 0:f016e9e8d48b 360 }\
shreeshas95 0:f016e9e8d48b 361 }\
shreeshas95 0:f016e9e8d48b 362 /*DELETE THE TM AFTER USE*/\
shreeshas95 0:f016e9e8d48b 363 while(tm_ptr != NULL){\
shreeshas95 0:f016e9e8d48b 364 Base_tm *temp = tm_ptr->next_TM;\
shreeshas95 0:f016e9e8d48b 365 delete tm_ptr;\
shreeshas95 0:f016e9e8d48b 366 tm_ptr = temp;\
shreeshas95 0:f016e9e8d48b 367 }\
shreeshas95 0:f016e9e8d48b 368 }\
shreeshas95 0:f016e9e8d48b 369 else{\
shreeshas95 0:f016e9e8d48b 370 /*EXECUTION OF SD-CARD DATA SENDING (OBSRS)*/\
shreeshas95 0:f016e9e8d48b 371 /*read_TC(tc_ptr);*/\
shreeshas95 0:f016e9e8d48b 372 }\
shreeshas95 0:f016e9e8d48b 373 /*ABORT ON NACK*/\
shreeshas95 0:f016e9e8d48b 374 if( (GETexec_status(current_TC) == TC_STATE_EXECUTION_FAILED) && (GETabort_on_nack(current_TC) == 1) ){\
shreeshas95 0:f016e9e8d48b 375 gMASTER_STATE = TCL_STATE_ABORTED;\
shreeshas95 0:f016e9e8d48b 376 }\
shreeshas95 0:f016e9e8d48b 377 }\
shreeshas95 0:f016e9e8d48b 378 }\
shreeshas95 0:f016e9e8d48b 379 current_TC = current_TC->next_TC;\
shreeshas95 0:f016e9e8d48b 380 }\
shreeshas95 0:f016e9e8d48b 381 if( gMASTER_STATE == TCL_STATE_ABORTED )\
shreeshas95 0:f016e9e8d48b 382 break;\
shreeshas95 0:f016e9e8d48b 383 }\
shreeshas95 0:f016e9e8d48b 384 }