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 22 06:09:48 2015 +0000
Revision:
2:2caf2a9a13aa
Parent:
1:a0055b3280c8
Child:
4:104dd82c99b8
Before updating for science compression

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 2:2caf2a9a13aa 84 #define isPAhot(returnHere){\
shreeshas95 2:2caf2a9a13aa 85 /*PENDING : COMPLETE THIS FUNCTION*/\
shreeshas95 2:2caf2a9a13aa 86 returnHere = 0xFF;\
shreeshas95 2:2caf2a9a13aa 87 }
shreeshas95 2:2caf2a9a13aa 88
shreeshas95 2:2caf2a9a13aa 89 void after_cooling_pa(){
shreeshas95 2:2caf2a9a13aa 90 gCOM_MNG_TMTC_THREAD->signal_set(COM_MNG_TMTC_SIGNAL_UART_INT);
shreeshas95 2:2caf2a9a13aa 91 }
shreeshas95 2:2caf2a9a13aa 92
shreeshas95 0:f016e9e8d48b 93 /*
shreeshas95 0:f016e9e8d48b 94 @brief: check for missing tc, also check crc, i.e.
shreeshas95 0:f016e9e8d48b 95 if true execution can be started else have to wait
shreeshas95 0:f016e9e8d48b 96 decide the next state
shreeshas95 0:f016e9e8d48b 97 @param: none
shreeshas95 0:f016e9e8d48b 98 @return: bool indicating whether there are missing tc
shreeshas95 0:f016e9e8d48b 99 */
shreeshas95 0:f016e9e8d48b 100 // PENDING: LAST FRAME BIT
shreeshas95 0:f016e9e8d48b 101 /*
shreeshas95 0:f016e9e8d48b 102 for loop: check for missing tc
shreeshas95 0:f016e9e8d48b 103 if: check for incorrect sized tc
shreeshas95 0:f016e9e8d48b 104 if: check for last frame bit
shreeshas95 0:f016e9e8d48b 105 */
shreeshas95 0:f016e9e8d48b 106 #define continueToExecute(returnHere) {\
shreeshas95 0:f016e9e8d48b 107 uint8_t tempReturn = 0x00;\
shreeshas95 0:f016e9e8d48b 108 for(uint8_t p = PSC_START_VALUE ; p < (gTOTAL_VALID_TC + PSC_START_VALUE) ; ++p){\
shreeshas95 0:f016e9e8d48b 109 bool flag = false;\
shreeshas95 0:f016e9e8d48b 110 Base_tc *node_ptr = gHEAD_NODE_TCL;\
shreeshas95 0:f016e9e8d48b 111 while(node_ptr != NULL){\
shreeshas95 0:f016e9e8d48b 112 if( (GETpacket_seq_count(node_ptr) == p) && (GETcrc_pass(node_ptr) == 1) ){\
shreeshas95 0:f016e9e8d48b 113 flag = true;\
shreeshas95 0:f016e9e8d48b 114 break;\
shreeshas95 0:f016e9e8d48b 115 }\
shreeshas95 0:f016e9e8d48b 116 else{\
shreeshas95 0:f016e9e8d48b 117 node_ptr = node_ptr->next_TC;\
shreeshas95 0:f016e9e8d48b 118 }\
shreeshas95 0:f016e9e8d48b 119 }\
shreeshas95 0:f016e9e8d48b 120 if(flag == false){\
shreeshas95 0:f016e9e8d48b 121 tempReturn = 0x02;\
shreeshas95 0:f016e9e8d48b 122 break;\
shreeshas95 0:f016e9e8d48b 123 }\
shreeshas95 0:f016e9e8d48b 124 }\
shreeshas95 0:f016e9e8d48b 125 Base_tc *tcp = gHEAD_NODE_TCL;\
shreeshas95 0:f016e9e8d48b 126 while(tcp != NULL){\
shreeshas95 0:f016e9e8d48b 127 if(GETpacket_seq_count(tcp) == (gTOTAL_VALID_TC + PSC_START_VALUE - 1)){\
shreeshas95 0:f016e9e8d48b 128 if( ( (tcp->TC_string[1]) & 0x20 ) == 0x00 ){\
shreeshas95 0:f016e9e8d48b 129 tempReturn = tempReturn + 0x01;\
shreeshas95 0:f016e9e8d48b 130 }\
shreeshas95 0:f016e9e8d48b 131 break;\
shreeshas95 0:f016e9e8d48b 132 }\
shreeshas95 0:f016e9e8d48b 133 tcp = tcp->next_TC;\
shreeshas95 0:f016e9e8d48b 134 }\
shreeshas95 0:f016e9e8d48b 135 returnHere = tempReturn;\
shreeshas95 0:f016e9e8d48b 136 }
shreeshas95 0:f016e9e8d48b 137
shreeshas95 0:f016e9e8d48b 138 /*
shreeshas95 2:2caf2a9a13aa 139 return 1 if code match
shreeshas95 2:2caf2a9a13aa 140 return 0 if code mismatch
shreeshas95 2:2caf2a9a13aa 141 */
shreeshas95 2:2caf2a9a13aa 142 #define GScodeVerification(returnHere){\
shreeshas95 2:2caf2a9a13aa 143 Base_tc *testTC = gHEAD_NODE_TCL;\
shreeshas95 2:2caf2a9a13aa 144 uint16_t overflowCount = 0;\
shreeshas95 2:2caf2a9a13aa 145 returnHere = 0;\
shreeshas95 2:2caf2a9a13aa 146 while( (overflowCount < TCL_OVERFLOW_CONSTANT) && (testTC != NULL) ){\
shreeshas95 2:2caf2a9a13aa 147 if( (GETpacket_seq_count(testTC) == PSC_CALLSIGN) && (GETapid(testTC) == APID_CALLSIGN) ){\
shreeshas95 2:2caf2a9a13aa 148 uint8_t temp8 = testTC->TC_string[1];\
shreeshas95 2:2caf2a9a13aa 149 if( temp8 & 0x04 ){\
shreeshas95 2:2caf2a9a13aa 150 for( int i = 2 ; i <= 8 ; ++i ){\
shreeshas95 2:2caf2a9a13aa 151 if( testTC->TC_string[i] != gGSCODE[i-2] ){\
shreeshas95 2:2caf2a9a13aa 152 returnHere = 0;\
shreeshas95 2:2caf2a9a13aa 153 break;\
shreeshas95 2:2caf2a9a13aa 154 }\
shreeshas95 2:2caf2a9a13aa 155 }\
shreeshas95 2:2caf2a9a13aa 156 }\
shreeshas95 2:2caf2a9a13aa 157 break;\
shreeshas95 2:2caf2a9a13aa 158 }\
shreeshas95 2:2caf2a9a13aa 159 testTC = testTC->next_TC;\
shreeshas95 2:2caf2a9a13aa 160 ++overflowCount;\
shreeshas95 2:2caf2a9a13aa 161 }\
shreeshas95 2:2caf2a9a13aa 162 }
shreeshas95 2:2caf2a9a13aa 163
shreeshas95 2:2caf2a9a13aa 164 /*
shreeshas95 0:f016e9e8d48b 165 @brief: DELETE THE CRC FAILED TC FROM THE LIST TO FREE-UP MEMORY AND UPDATE
shreeshas95 0:f016e9e8d48b 166 THE TOTAL VALID TC AND GENERATE L1_ACK_TM
shreeshas95 0:f016e9e8d48b 167 @param: none
shreeshas95 0:f016e9e8d48b 168 @return: none
shreeshas95 0:f016e9e8d48b 169 */
shreeshas95 0:f016e9e8d48b 170 #define send_l1_ack {\
shreeshas95 0:f016e9e8d48b 171 Base_tc *current_TC = gHEAD_NODE_TCL;\
shreeshas95 0:f016e9e8d48b 172 Base_tm *l1_ack = new Short_tm;\
shreeshas95 0:f016e9e8d48b 173 Base_tm *l1_ack_head = l1_ack;\
shreeshas95 0:f016e9e8d48b 174 fill_l1_ack(l1_ack);\
shreeshas95 0:f016e9e8d48b 175 int TC_count = 0;\
shreeshas95 0:f016e9e8d48b 176 uint16_t crc_checksum = 0;\
shreeshas95 0:f016e9e8d48b 177 while(current_TC != NULL){\
shreeshas95 0:f016e9e8d48b 178 /*IF CRC PASS*/\
shreeshas95 0:f016e9e8d48b 179 if( (GETcrc_pass(current_TC) == 1) ){\
shreeshas95 0:f016e9e8d48b 180 if(TC_count > 4){\
shreeshas95 0:f016e9e8d48b 181 /*extend the TM linked list*/\
shreeshas95 0:f016e9e8d48b 182 TC_count = 0;\
shreeshas95 0:f016e9e8d48b 183 l1_ack->next_TM = new Short_tm;\
shreeshas95 0:f016e9e8d48b 184 l1_ack = l1_ack->next_TM;\
shreeshas95 0:f016e9e8d48b 185 fill_l1_ack(l1_ack);\
shreeshas95 0:f016e9e8d48b 186 /*PENDING: FILL TC_EXEC_CODE, APPEND CRC TO THE TM*/\
shreeshas95 0:f016e9e8d48b 187 put_crc_l1_ack( l1_ack, gTOTAL_CRC_FAIL_TC );\
shreeshas95 0:f016e9e8d48b 188 }\
shreeshas95 0:f016e9e8d48b 189 /*PSC starts from 7th byte*/\
shreeshas95 0:f016e9e8d48b 190 l1_ack->TM_string[6+TC_count] = current_TC->TC_string[0];\
shreeshas95 0:f016e9e8d48b 191 /*TC exec status*/\
shreeshas95 0:f016e9e8d48b 192 switch(TC_count){\
shreeshas95 0:f016e9e8d48b 193 case 0:\
shreeshas95 0:f016e9e8d48b 194 l1_ack->TM_string[3] |= (GETexec_status(current_TC)) & 0x0F;\
shreeshas95 0:f016e9e8d48b 195 break;\
shreeshas95 0:f016e9e8d48b 196 case 1:\
shreeshas95 0:f016e9e8d48b 197 l1_ack->TM_string[4] = (GETexec_status(current_TC) << 4) & 0xF0;\
shreeshas95 0:f016e9e8d48b 198 break;\
shreeshas95 0:f016e9e8d48b 199 case 2:\
shreeshas95 0:f016e9e8d48b 200 l1_ack->TM_string[4] |= (GETexec_status(current_TC)) & 0x0F;\
shreeshas95 0:f016e9e8d48b 201 break;\
shreeshas95 0:f016e9e8d48b 202 case 3:\
shreeshas95 0:f016e9e8d48b 203 l1_ack->TM_string[5] = (GETexec_status(current_TC) << 4) & 0xF0;\
shreeshas95 0:f016e9e8d48b 204 break;\
shreeshas95 0:f016e9e8d48b 205 case 4:\
shreeshas95 0:f016e9e8d48b 206 l1_ack->TM_string[5] |= (GETexec_status(current_TC)) & 0x0F;\
shreeshas95 0:f016e9e8d48b 207 }\
shreeshas95 0:f016e9e8d48b 208 ++TC_count;\
shreeshas95 0:f016e9e8d48b 209 }\
shreeshas95 0:f016e9e8d48b 210 current_TC = current_TC->next_TC;\
shreeshas95 0:f016e9e8d48b 211 }\
shreeshas95 0:f016e9e8d48b 212 /*FILL UP THE REMAINING FIELDS WITH 0x01: 0x00 => problem with GS*/\
shreeshas95 0:f016e9e8d48b 213 if(TC_count < 5){\
shreeshas95 0:f016e9e8d48b 214 while(TC_count < 5){\
shreeshas95 0:f016e9e8d48b 215 l1_ack->TM_string[6+TC_count] = current_TC->TC_string[0];\
shreeshas95 0:f016e9e8d48b 216 switch(TC_count){\
shreeshas95 0:f016e9e8d48b 217 case 0:\
shreeshas95 0:f016e9e8d48b 218 l1_ack->TM_string[3] |= (GETexec_status(current_TC)) & 0x0F;\
shreeshas95 0:f016e9e8d48b 219 break;\
shreeshas95 0:f016e9e8d48b 220 case 1:\
shreeshas95 0:f016e9e8d48b 221 l1_ack->TM_string[4] = (GETexec_status(current_TC) << 4) & 0xF0;\
shreeshas95 0:f016e9e8d48b 222 break;\
shreeshas95 0:f016e9e8d48b 223 case 2:\
shreeshas95 0:f016e9e8d48b 224 l1_ack->TM_string[4] |= (GETexec_status(current_TC)) & 0x0F;\
shreeshas95 0:f016e9e8d48b 225 break;\
shreeshas95 0:f016e9e8d48b 226 case 3:\
shreeshas95 0:f016e9e8d48b 227 l1_ack->TM_string[5] = (GETexec_status(current_TC) << 4) & 0xF0;\
shreeshas95 0:f016e9e8d48b 228 break;\
shreeshas95 0:f016e9e8d48b 229 case 4:\
shreeshas95 0:f016e9e8d48b 230 l1_ack->TM_string[5] |= (GETexec_status(current_TC)) & 0x0F;\
shreeshas95 0:f016e9e8d48b 231 }\
shreeshas95 0:f016e9e8d48b 232 ++TC_count;\
shreeshas95 0:f016e9e8d48b 233 }\
shreeshas95 0:f016e9e8d48b 234 put_crc_l1_ack(l1_ack, gTOTAL_CRC_FAIL_TC);\
shreeshas95 0:f016e9e8d48b 235 }\
shreeshas95 1:a0055b3280c8 236 gPC.puts("Sending l1 ack\r\n");\
shreeshas95 1:a0055b3280c8 237 snd_tm.head_pointer(l1_ack_head);\
shreeshas95 1:a0055b3280c8 238 adf_not_SDcard();\
shreeshas95 0:f016e9e8d48b 239 /*delete the TM*/\
shreeshas95 0:f016e9e8d48b 240 l1_ack = l1_ack_head;\
shreeshas95 0:f016e9e8d48b 241 while(l1_ack != NULL){\
shreeshas95 0:f016e9e8d48b 242 Base_tm *temp = l1_ack->next_TM;\
shreeshas95 0:f016e9e8d48b 243 delete l1_ack;\
shreeshas95 0:f016e9e8d48b 244 l1_ack = temp;\
shreeshas95 0:f016e9e8d48b 245 }\
shreeshas95 0:f016e9e8d48b 246 }
shreeshas95 0:f016e9e8d48b 247
shreeshas95 0:f016e9e8d48b 248 // CDMS TEAM CODE START
shreeshas95 0:f016e9e8d48b 249 #define CDMS_RLY_TMTC(tc_ptr, tm_ptr){\
shreeshas95 0:f016e9e8d48b 250 tm_ptr = NULL;\
shreeshas95 0:f016e9e8d48b 251 }\
shreeshas95 0:f016e9e8d48b 252 // CDMS TEAM CODE END
shreeshas95 0:f016e9e8d48b 253
shreeshas95 0:f016e9e8d48b 254 // EXECUTE OBOSC
shreeshas95 0:f016e9e8d48b 255 #define execute_obosc_core(tc_ptr, tm_ptr) {\
shreeshas95 0:f016e9e8d48b 256 uint8_t service_subtype = (tc_ptr->TC_string[2]) & 0x0F;\
shreeshas95 0:f016e9e8d48b 257 /*including both lower and upper limits*/\
shreeshas95 0:f016e9e8d48b 258 uint8_t targetL = tc_ptr->TC_string[3];\
shreeshas95 0:f016e9e8d48b 259 uint8_t targetU = targetL + tc_ptr->TC_string[4] - 1;\
shreeshas95 0:f016e9e8d48b 260 if( (targetL == 0x00) && (tc_ptr->TC_string[4] == 0) ){\
shreeshas95 0:f016e9e8d48b 261 /*PENDING: ALL REPORTS BELOW*/\
shreeshas95 0:f016e9e8d48b 262 switch(service_subtype){\
shreeshas95 0:f016e9e8d48b 263 case OBOSC_SUB_REP_TCL_D:\
shreeshas95 0:f016e9e8d48b 264 break;\
shreeshas95 0:f016e9e8d48b 265 case OBOSC_SUB_REP_LE:\
shreeshas95 0:f016e9e8d48b 266 break;\
shreeshas95 0:f016e9e8d48b 267 case OBOSC_SUB_RESET:\
shreeshas95 0:f016e9e8d48b 268 break;\
shreeshas95 0:f016e9e8d48b 269 case OBOSC_SUB_REP_TCL:\
shreeshas95 0:f016e9e8d48b 270 break;\
shreeshas95 0:f016e9e8d48b 271 }\
shreeshas95 0:f016e9e8d48b 272 }\
shreeshas95 0:f016e9e8d48b 273 else{\
shreeshas95 0:f016e9e8d48b 274 uint16_t temp16 = 2;\
shreeshas95 0:f016e9e8d48b 275 switch( service_subtype ){\
shreeshas95 0:f016e9e8d48b 276 case OBOSC_SUB_DISABLE:\
shreeshas95 0:f016e9e8d48b 277 temp16 = 2;\
shreeshas95 0:f016e9e8d48b 278 break;\
shreeshas95 0:f016e9e8d48b 279 case OBOSC_SUB_RETRY:\
shreeshas95 0:f016e9e8d48b 280 temp16 = 3;\
shreeshas95 0:f016e9e8d48b 281 break;\
shreeshas95 0:f016e9e8d48b 282 }\
shreeshas95 0:f016e9e8d48b 283 Base_tc *tcp = gHEAD_NODE_TCL;\
shreeshas95 0:f016e9e8d48b 284 while( tcp != NULL ){\
shreeshas95 0:f016e9e8d48b 285 uint16_t tcPSC = GETpacket_seq_count(tcp);\
shreeshas95 0:f016e9e8d48b 286 if( (tcPSC >= targetL) && (tcPSC <= targetU) ){\
shreeshas95 0:f016e9e8d48b 287 PUTexec_status(tcp, temp16);\
shreeshas95 0:f016e9e8d48b 288 }\
shreeshas95 0:f016e9e8d48b 289 tcp = tcp->next_TC;\
shreeshas95 0:f016e9e8d48b 290 }\
shreeshas95 0:f016e9e8d48b 291 }\
shreeshas95 0:f016e9e8d48b 292 /*PENDING: generate L234 ACK*/\
shreeshas95 0:f016e9e8d48b 293 tm_ptr = NULL;\
shreeshas95 0:f016e9e8d48b 294 }
shreeshas95 0:f016e9e8d48b 295
shreeshas95 0:f016e9e8d48b 296 #define EXECUTE_OBOSC_ONLY {\
shreeshas95 0:f016e9e8d48b 297 for(uint8_t execute_psc = gOBOSC_PSC ; execute_psc < (gTOTAL_VALID_TC+PSC_START_VALUE) ; ++execute_psc){\
shreeshas95 0:f016e9e8d48b 298 Base_tc* current_TC = gOBOSC_HEAD;\
shreeshas95 0:f016e9e8d48b 299 while( current_TC != NULL ){\
shreeshas95 0:f016e9e8d48b 300 if( (GETcrc_pass(current_TC) == 1) && (GETpacket_seq_count(current_TC) == execute_psc) ){\
shreeshas95 0:f016e9e8d48b 301 uint8_t current_exec_status = GETexec_status(current_TC);\
shreeshas95 0:f016e9e8d48b 302 if( (current_exec_status == TC_STATE_SUCCESSFULLY_EXECUTED) || (current_exec_status == TC_STATE_DISABLED) )\
shreeshas95 0:f016e9e8d48b 303 break;\
shreeshas95 0:f016e9e8d48b 304 else if( (current_exec_status == TC_STATE_EXECUTION_FAILED) && (GETabort_on_nack(current_TC) == 1) ){\
shreeshas95 0:f016e9e8d48b 305 gMASTER_STATE = TCL_STATE_ABORTED;\
shreeshas95 0:f016e9e8d48b 306 break;\
shreeshas95 0:f016e9e8d48b 307 }\
shreeshas95 0:f016e9e8d48b 308 else if( (current_exec_status == TC_STATE_UNEXECUTED) || (current_exec_status == TC_STATE_MARKED_RETRY) ){\
shreeshas95 0:f016e9e8d48b 309 Base_tm* tm_ptr = NULL;\
shreeshas95 0:f016e9e8d48b 310 uint8_t temp82 = 0x00;\
shreeshas95 0:f016e9e8d48b 311 isit_obosc(current_TC, temp82);\
shreeshas95 0:f016e9e8d48b 312 if(temp82 == 0x01){\
shreeshas95 0:f016e9e8d48b 313 /*EXECUTION OF OBOSC TC*/\
shreeshas95 0:f016e9e8d48b 314 execute_obosc_core(current_TC, tm_ptr);\
shreeshas95 0:f016e9e8d48b 315 }\
shreeshas95 1:a0055b3280c8 316 snd_tm.head_pointer(tm_ptr);\
shreeshas95 1:a0055b3280c8 317 adf_not_SDcard();\
shreeshas95 0:f016e9e8d48b 318 uint8_t temp83 = 0x00;\
shreeshas95 0:f016e9e8d48b 319 detect_ack(tm_ptr, temp83);\
shreeshas95 0:f016e9e8d48b 320 if( temp83 == 0x01){\
shreeshas95 0:f016e9e8d48b 321 uint16_t temp16 = TC_STATE_SUCCESSFULLY_EXECUTED;\
shreeshas95 0:f016e9e8d48b 322 PUTexec_status(current_TC, temp16);\
shreeshas95 0:f016e9e8d48b 323 }\
shreeshas95 0:f016e9e8d48b 324 else{\
shreeshas95 0:f016e9e8d48b 325 uint16_t temp16 = TC_STATE_EXECUTION_FAILED;\
shreeshas95 0:f016e9e8d48b 326 PUTexec_status(current_TC, temp16);\
shreeshas95 0:f016e9e8d48b 327 }\
shreeshas95 0:f016e9e8d48b 328 /*update last executed L1_ack*/\
shreeshas95 0:f016e9e8d48b 329 if( tm_ptr != NULL ){\
shreeshas95 0:f016e9e8d48b 330 for(int i = 0 ; i < TM_SHORT_SIZE ; ++i){\
shreeshas95 0:f016e9e8d48b 331 gLAST_L1_ACK[i] = gLAST_L1_ACK_BUFFER[i];\
shreeshas95 0:f016e9e8d48b 332 gLAST_L1_ACK_BUFFER[i] = tm_ptr->TM_string[i];\
shreeshas95 0:f016e9e8d48b 333 }\
shreeshas95 0:f016e9e8d48b 334 }\
shreeshas95 0:f016e9e8d48b 335 /*DELETE THE TM AFTER USE*/\
shreeshas95 0:f016e9e8d48b 336 while(tm_ptr != NULL){\
shreeshas95 0:f016e9e8d48b 337 Base_tm *temp = tm_ptr->next_TM;\
shreeshas95 0:f016e9e8d48b 338 delete tm_ptr;\
shreeshas95 0:f016e9e8d48b 339 tm_ptr = temp;\
shreeshas95 0:f016e9e8d48b 340 }\
shreeshas95 0:f016e9e8d48b 341 }\
shreeshas95 0:f016e9e8d48b 342 }\
shreeshas95 0:f016e9e8d48b 343 current_TC = current_TC->next_TC;\
shreeshas95 0:f016e9e8d48b 344 }\
shreeshas95 0:f016e9e8d48b 345 }\
shreeshas95 0:f016e9e8d48b 346 }
shreeshas95 0:f016e9e8d48b 347
shreeshas95 0:f016e9e8d48b 348 #define EXECUTE_TC {\
shreeshas95 0:f016e9e8d48b 349 for(uint8_t execute_psc = PSC_START_VALUE ; execute_psc < (PSC_START_VALUE+gTOTAL_VALID_TC) ; ++execute_psc ){\
shreeshas95 2:2caf2a9a13aa 350 /*gLEDG = !gLEDG;*/\
shreeshas95 2:2caf2a9a13aa 351 /*gLEDR = !gLEDR;*/\
shreeshas95 2:2caf2a9a13aa 352 uint8_t tempPAhot = 0xFF;\
shreeshas95 0:f016e9e8d48b 353 Base_tc* current_TC = gHEAD_NODE_TCL;\
shreeshas95 0:f016e9e8d48b 354 while(current_TC != NULL){\
shreeshas95 0:f016e9e8d48b 355 if( (GETcrc_pass(current_TC) == 1) && (GETpacket_seq_count(current_TC) == execute_psc) ){\
shreeshas95 0:f016e9e8d48b 356 uint8_t current_exec_status = GETexec_status(current_TC);\
shreeshas95 0:f016e9e8d48b 357 if( (current_exec_status == TC_STATE_SUCCESSFULLY_EXECUTED) || (current_exec_status == TC_STATE_DISABLED) )\
shreeshas95 0:f016e9e8d48b 358 break;\
shreeshas95 0:f016e9e8d48b 359 else if( (current_exec_status == TC_STATE_EXECUTION_FAILED) && (GETabort_on_nack(current_TC) == 1) ){\
shreeshas95 0:f016e9e8d48b 360 gMASTER_STATE = TCL_STATE_ABORTED;\
shreeshas95 0:f016e9e8d48b 361 break;\
shreeshas95 0:f016e9e8d48b 362 }\
shreeshas95 0:f016e9e8d48b 363 else if( (current_exec_status == TC_STATE_UNEXECUTED) || (current_exec_status == TC_STATE_MARKED_RETRY) ){\
shreeshas95 0:f016e9e8d48b 364 /*EXECUTION OF TC START*/\
shreeshas95 0:f016e9e8d48b 365 uint8_t temp81 = 0x00;\
shreeshas95 0:f016e9e8d48b 366 isit_sdcard(current_TC, temp81);\
shreeshas95 0:f016e9e8d48b 367 if( temp81 == 0x00 ){\
shreeshas95 0:f016e9e8d48b 368 /*EXECUTION OF NON SD-CARD (BOTH OBOSC and CDMS functions)*/\
shreeshas95 0:f016e9e8d48b 369 Base_tm *tm_ptr;\
shreeshas95 0:f016e9e8d48b 370 uint8_t temp82 = 0x00;\
shreeshas95 0:f016e9e8d48b 371 isit_obosc(current_TC, temp82);\
shreeshas95 0:f016e9e8d48b 372 if(temp82 == 0x01){\
shreeshas95 0:f016e9e8d48b 373 /*EXECUTION OF OBOSC TC*/\
shreeshas95 0:f016e9e8d48b 374 execute_obosc_core(current_TC, tm_ptr);\
shreeshas95 0:f016e9e8d48b 375 }\
shreeshas95 0:f016e9e8d48b 376 else{\
shreeshas95 0:f016e9e8d48b 377 /*call CDMS_RLY_TMTC*/\
shreeshas95 0:f016e9e8d48b 378 CDMS_RLY_TMTC(current_TC, tm_ptr);\
shreeshas95 0:f016e9e8d48b 379 }\
shreeshas95 2:2caf2a9a13aa 380 /*CHECK FOR HOT PA*/\
shreeshas95 2:2caf2a9a13aa 381 isPAhot(tempPAhot);\
shreeshas95 2:2caf2a9a13aa 382 if( tempPAhot == 0x00 ){\
shreeshas95 2:2caf2a9a13aa 383 gFLAGS = gFLAGS | COM_PA_HOT_FLAG;\
shreeshas95 2:2caf2a9a13aa 384 }\
shreeshas95 2:2caf2a9a13aa 385 /*SEND DATA TO GS*/\
shreeshas95 1:a0055b3280c8 386 snd_tm.head_pointer(tm_ptr);\
shreeshas95 2:2caf2a9a13aa 387 adf_not_SDcard();\
shreeshas95 0:f016e9e8d48b 388 uint8_t temp83 = 0x00;\
shreeshas95 0:f016e9e8d48b 389 detect_ack(tm_ptr, temp83);\
shreeshas95 0:f016e9e8d48b 390 if( temp83 == 0x01){\
shreeshas95 0:f016e9e8d48b 391 uint16_t temp16 = TC_STATE_SUCCESSFULLY_EXECUTED;\
shreeshas95 0:f016e9e8d48b 392 PUTexec_status(current_TC, temp16);\
shreeshas95 0:f016e9e8d48b 393 }\
shreeshas95 0:f016e9e8d48b 394 else{\
shreeshas95 0:f016e9e8d48b 395 uint16_t temp16 = TC_STATE_EXECUTION_FAILED;\
shreeshas95 0:f016e9e8d48b 396 PUTexec_status(current_TC, temp16);\
shreeshas95 0:f016e9e8d48b 397 }\
shreeshas95 0:f016e9e8d48b 398 /*update last executed L1_ack*/\
shreeshas95 0:f016e9e8d48b 399 if( tm_ptr != NULL ){\
shreeshas95 0:f016e9e8d48b 400 for(int i = 0 ; i < TM_SHORT_SIZE ; ++i){\
shreeshas95 0:f016e9e8d48b 401 gLAST_L1_ACK[i] = gLAST_L1_ACK_BUFFER[i];\
shreeshas95 0:f016e9e8d48b 402 gLAST_L1_ACK_BUFFER[i] = tm_ptr->TM_string[i];\
shreeshas95 0:f016e9e8d48b 403 }\
shreeshas95 0:f016e9e8d48b 404 }\
shreeshas95 0:f016e9e8d48b 405 /*DELETE THE TM AFTER USE*/\
shreeshas95 0:f016e9e8d48b 406 while(tm_ptr != NULL){\
shreeshas95 0:f016e9e8d48b 407 Base_tm *temp = tm_ptr->next_TM;\
shreeshas95 0:f016e9e8d48b 408 delete tm_ptr;\
shreeshas95 0:f016e9e8d48b 409 tm_ptr = temp;\
shreeshas95 0:f016e9e8d48b 410 }\
shreeshas95 0:f016e9e8d48b 411 }\
shreeshas95 0:f016e9e8d48b 412 else{\
shreeshas95 0:f016e9e8d48b 413 /*EXECUTION OF SD-CARD DATA SENDING (OBSRS)*/\
shreeshas95 2:2caf2a9a13aa 414 /*CHECK FOR HOT PA*/\
shreeshas95 2:2caf2a9a13aa 415 isPAhot(tempPAhot);\
shreeshas95 2:2caf2a9a13aa 416 if( tempPAhot == 0x00 ){\
shreeshas95 2:2caf2a9a13aa 417 gFLAGS = gFLAGS | COM_PA_HOT_FLAG;\
shreeshas95 2:2caf2a9a13aa 418 }\
shreeshas95 1:a0055b3280c8 419 read_TC(current_TC);\
shreeshas95 0:f016e9e8d48b 420 }\
shreeshas95 0:f016e9e8d48b 421 /*ABORT ON NACK*/\
shreeshas95 0:f016e9e8d48b 422 if( (GETexec_status(current_TC) == TC_STATE_EXECUTION_FAILED) && (GETabort_on_nack(current_TC) == 1) ){\
shreeshas95 0:f016e9e8d48b 423 gMASTER_STATE = TCL_STATE_ABORTED;\
shreeshas95 0:f016e9e8d48b 424 }\
shreeshas95 0:f016e9e8d48b 425 }\
shreeshas95 0:f016e9e8d48b 426 }\
shreeshas95 0:f016e9e8d48b 427 current_TC = current_TC->next_TC;\
shreeshas95 0:f016e9e8d48b 428 }\
shreeshas95 2:2caf2a9a13aa 429 if( !(execute_psc == (PSC_START_VALUE+gTOTAL_VALID_TC-1)) ){\
shreeshas95 2:2caf2a9a13aa 430 if( tempPAhot == 0 ){\
shreeshas95 2:2caf2a9a13aa 431 gCOM_PA_COOLING_TIMER.attach(&after_cooling_pa, COM_PA_COOLING_TIME_LIMIT);\
shreeshas95 2:2caf2a9a13aa 432 /*PENDING : POWER OFF COMM TX*/\
shreeshas95 2:2caf2a9a13aa 433 RX1M.attach(&rx_read, Serial::RxIrq);\
shreeshas95 2:2caf2a9a13aa 434 gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);\
shreeshas95 2:2caf2a9a13aa 435 break;\
shreeshas95 2:2caf2a9a13aa 436 }\
shreeshas95 2:2caf2a9a13aa 437 }\
shreeshas95 2:2caf2a9a13aa 438 else if( gMASTER_STATE == TCL_STATE_ABORTED ){\
shreeshas95 2:2caf2a9a13aa 439 /*PENDING : POWER OFF COM TX*/\
shreeshas95 2:2caf2a9a13aa 440 RX1M.attach(&rx_read, Serial::RxIrq);\
shreeshas95 2:2caf2a9a13aa 441 gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);\
shreeshas95 0:f016e9e8d48b 442 break;\
shreeshas95 2:2caf2a9a13aa 443 }\
shreeshas95 2:2caf2a9a13aa 444 else{\
shreeshas95 2:2caf2a9a13aa 445 /*PENDING : COM POWER OFF TX*/\
shreeshas95 2:2caf2a9a13aa 446 reset_all;\
shreeshas95 2:2caf2a9a13aa 447 /*PENDING : ENABLE THREADS*/\
shreeshas95 2:2caf2a9a13aa 448 gSESSION_TIMEOUT.detach();\
shreeshas95 2:2caf2a9a13aa 449 gFLAGS = gFLAGS & (~COM_SESSION_FLAG);\
shreeshas95 2:2caf2a9a13aa 450 break;\
shreeshas95 2:2caf2a9a13aa 451 }\
shreeshas95 0:f016e9e8d48b 452 }\
shreeshas95 0:f016e9e8d48b 453 }