Hi Shubham I am just using this to test PYLD code

Dependencies:   FreescaleIAP SimpleDMA mbed-rtos mbed

Fork of COM_MNG_TMTC_SIMPLE by Shreesha S

Committer:
ee12b079
Date:
Wed Mar 02 17:17:45 2016 +0000
Revision:
135:522f7d73d04f
Parent:
117:bfdc807f3d3c
Testing

Who changed what in which revision?

UserRevisionLine numberNew contents of line
krishanprajapat 117:bfdc807f3d3c 1 // 8 Jul
krishanprajapat 117:bfdc807f3d3c 2 // did flowchart of states
krishanprajapat 117:bfdc807f3d3c 3
krishanprajapat 117:bfdc807f3d3c 4 // handle sd card with cdms team
krishanprajapat 117:bfdc807f3d3c 5
krishanprajapat 117:bfdc807f3d3c 6 // Jun 6
krishanprajapat 117:bfdc807f3d3c 7 // WHAT IS TC exec code in L1 ack ?
krishanprajapat 117:bfdc807f3d3c 8
krishanprajapat 117:bfdc807f3d3c 9 //Jan 7
krishanprajapat 117:bfdc807f3d3c 10 //added RLY_TMTC function
krishanprajapat 117:bfdc807f3d3c 11 //added included related files
krishanprajapat 117:bfdc807f3d3c 12
krishanprajapat 117:bfdc807f3d3c 13 //#include "Flash.h"
krishanprajapat 117:bfdc807f3d3c 14 #include "cdms_rtc.h"
krishanprajapat 117:bfdc807f3d3c 15
krishanprajapat 117:bfdc807f3d3c 16 DigitalIn tm_status_4m_slv(PIN39); //I2C interrupt to CDMS from BAE
krishanprajapat 117:bfdc807f3d3c 17 //DigitalIn tm_status_4m_pl(PIN61); //I2C interrupt to CDMS from PL
krishanprajapat 117:bfdc807f3d3c 18
krishanprajapat 117:bfdc807f3d3c 19 uint8_t received = 0;
krishanprajapat 117:bfdc807f3d3c 20 uint16_t mid1;
krishanprajapat 117:bfdc807f3d3c 21 uint16_t mid2;
krishanprajapat 117:bfdc807f3d3c 22 uint16_t Nbytes;
krishanprajapat 117:bfdc807f3d3c 23 uint32_t Data[2];
krishanprajapat 117:bfdc807f3d3c 24 uint16_t nbytes;
krishanprajapat 117:bfdc807f3d3c 25 uint8_t flash_counter = 0;
krishanprajapat 117:bfdc807f3d3c 26 uint16_t crc16;
krishanprajapat 117:bfdc807f3d3c 27 uint16_t mid;
krishanprajapat 117:bfdc807f3d3c 28 uint32_t block;
krishanprajapat 117:bfdc807f3d3c 29
krishanprajapat 117:bfdc807f3d3c 30 #define delete_TC(tc_ptr) {\
krishanprajapat 117:bfdc807f3d3c 31 if(tc_ptr == gHEAD_NODE_TCL){\
krishanprajapat 117:bfdc807f3d3c 32 gHEAD_NODE_TCL = tc_ptr->next_TC;\
krishanprajapat 117:bfdc807f3d3c 33 }\
krishanprajapat 117:bfdc807f3d3c 34 delete tc_ptr;\
krishanprajapat 117:bfdc807f3d3c 35 }
krishanprajapat 117:bfdc807f3d3c 36
krishanprajapat 117:bfdc807f3d3c 37 // typeof tm_ptr: Base_tm
krishanprajapat 117:bfdc807f3d3c 38 // typeof tc_ptr: Base_tc
krishanprajapat 117:bfdc807f3d3c 39 // typeof temp_xxxx: uint8_t
krishanprajapat 117:bfdc807f3d3c 40 #define fill_l1_ack(tm_ptr) {\
krishanprajapat 117:bfdc807f3d3c 41 tm_ptr->next_TM = NULL;\
krishanprajapat 117:bfdc807f3d3c 42 tm_ptr->TM_string[0] = TMID_ACK_L1 << 4;\
krishanprajapat 117:bfdc807f3d3c 43 /*PENDING: PA TEMPERATURE*/\
krishanprajapat 117:bfdc807f3d3c 44 tm_ptr->TM_string[1] = gTOTAL_INCORRECT_SIZE_TC & 0xFF;\
krishanprajapat 117:bfdc807f3d3c 45 tm_ptr->TM_string[2] = gTOTAL_CRC_FAIL_TC & 0xFF;\
krishanprajapat 117:bfdc807f3d3c 46 }
krishanprajapat 117:bfdc807f3d3c 47
krishanprajapat 117:bfdc807f3d3c 48 #define put_crc_l1_ack(tm_ptr) {\
krishanprajapat 117:bfdc807f3d3c 49 tm_ptr->TM_string[2] = gTOTAL_CRC_FAIL_TC & 0xFF;\
krishanprajapat 117:bfdc807f3d3c 50 /*TC LIST STATUS*/\
krishanprajapat 117:bfdc807f3d3c 51 tm_ptr->TM_string[3] |= (gMASTER_STATE << 5) & 0xE0;\
krishanprajapat 117:bfdc807f3d3c 52 /*PA HOT*/\
krishanprajapat 117:bfdc807f3d3c 53 if( gFLAGS & COM_PA_HOT_FLAG ){\
krishanprajapat 117:bfdc807f3d3c 54 tm_ptr->TM_string[3] |= (1 << 4);\
krishanprajapat 117:bfdc807f3d3c 55 }\
krishanprajapat 117:bfdc807f3d3c 56 else{\
krishanprajapat 117:bfdc807f3d3c 57 tm_ptr->TM_string[3] &= ~(1 << 4);\
krishanprajapat 117:bfdc807f3d3c 58 }\
krishanprajapat 117:bfdc807f3d3c 59 uint16_t crc_checksum = crc16_gen(tm_ptr->TM_string, TM_SHORT_SIZE-2);\
krishanprajapat 117:bfdc807f3d3c 60 tm_ptr->TM_string[TM_SHORT_SIZE-2] = (crc_checksum >> 8) & 0xFF;\
krishanprajapat 117:bfdc807f3d3c 61 tm_ptr->TM_string[TM_SHORT_SIZE-1] = crc_checksum & 0xFF;\
krishanprajapat 117:bfdc807f3d3c 62 }
krishanprajapat 117:bfdc807f3d3c 63
krishanprajapat 117:bfdc807f3d3c 64 #define detect_ack(tm_ptr, temp_ack, tc_psc) {\
krishanprajapat 117:bfdc807f3d3c 65 if( tm_ptr != NULL ){\
krishanprajapat 117:bfdc807f3d3c 66 int length = TM_SHORT_SIZE;\
krishanprajapat 117:bfdc807f3d3c 67 if( GETshort_or_long_tm(tm_ptr) == SHORT_TM_CODE ){\
krishanprajapat 117:bfdc807f3d3c 68 length = TM_SHORT_SIZE;\
krishanprajapat 117:bfdc807f3d3c 69 }\
krishanprajapat 117:bfdc807f3d3c 70 else{\
krishanprajapat 117:bfdc807f3d3c 71 length = TM_LONG_SIZE;\
krishanprajapat 117:bfdc807f3d3c 72 }\
krishanprajapat 117:bfdc807f3d3c 73 uint16_t crc = crc16_gen(tm_ptr->TM_string, length-2);\
krishanprajapat 117:bfdc807f3d3c 74 if( (((crc & 0xFF00) >> 8) == tm_ptr->TM_string[length-2]) && ( (crc & 0x00FF) == tm_ptr->TM_string[length-1] ) ){\
krishanprajapat 117:bfdc807f3d3c 75 uint8_t temp8;\
krishanprajapat 117:bfdc807f3d3c 76 temp8 = tm_ptr->TM_string[TM_ACK_CODE_INDEX];\
krishanprajapat 117:bfdc807f3d3c 77 temp8 = temp8 & 0xE0;\
krishanprajapat 117:bfdc807f3d3c 78 if( (temp8 == 0xC0) || (temp8 == 0xA0) )\
krishanprajapat 117:bfdc807f3d3c 79 temp_ack = 0x01;\
krishanprajapat 117:bfdc807f3d3c 80 else{\
krishanprajapat 117:bfdc807f3d3c 81 temp_ack = 0x00;\
krishanprajapat 117:bfdc807f3d3c 82 /*CHECK FOR NACK CODE: CRC FAIL NACK*/\
krishanprajapat 117:bfdc807f3d3c 83 temp8 = tm_ptr->TM_string[TM_ACK_CODE_INDEX];\
krishanprajapat 117:bfdc807f3d3c 84 temp8 = temp8 & 0x0F;\
krishanprajapat 117:bfdc807f3d3c 85 if( temp8 == CRC_FAIL_NACK_CODE ){\
krishanprajapat 117:bfdc807f3d3c 86 tm_ptr->TM_string[2] = tc_psc;\
krishanprajapat 117:bfdc807f3d3c 87 }\
krishanprajapat 117:bfdc807f3d3c 88 }\
krishanprajapat 117:bfdc807f3d3c 89 }\
krishanprajapat 117:bfdc807f3d3c 90 else\
krishanprajapat 117:bfdc807f3d3c 91 temp_ack = 0x00;\
krishanprajapat 117:bfdc807f3d3c 92 }\
krishanprajapat 117:bfdc807f3d3c 93 else{\
krishanprajapat 117:bfdc807f3d3c 94 temp_ack = 0x00;\
krishanprajapat 117:bfdc807f3d3c 95 }\
krishanprajapat 117:bfdc807f3d3c 96 }
krishanprajapat 117:bfdc807f3d3c 97
krishanprajapat 117:bfdc807f3d3c 98 #define isit_obosc(tc_ptr, temp_obosc) {\
krishanprajapat 117:bfdc807f3d3c 99 temp_obosc = 0x00;\
krishanprajapat 117:bfdc807f3d3c 100 if( GETapid(tc_ptr) == APID_COM ){\
krishanprajapat 117:bfdc807f3d3c 101 if( ((tc_ptr->TC_string[2]) >> 4) == SERVICE_OBOSC ){\
krishanprajapat 117:bfdc807f3d3c 102 temp_obosc = 0x01;\
krishanprajapat 117:bfdc807f3d3c 103 }\
krishanprajapat 117:bfdc807f3d3c 104 }\
krishanprajapat 117:bfdc807f3d3c 105 }
krishanprajapat 117:bfdc807f3d3c 106
krishanprajapat 117:bfdc807f3d3c 107 #define isit_sdcard(tc_ptr, temp_sdcard) {\
krishanprajapat 117:bfdc807f3d3c 108 temp_sdcard = 0x00;\
krishanprajapat 117:bfdc807f3d3c 109 if( GETapid(tc_ptr) == APID_COM ){\
krishanprajapat 117:bfdc807f3d3c 110 if( ( (tc_ptr->TC_string[2]) >> 4) == SERVICE_OBSRS ){\
krishanprajapat 117:bfdc807f3d3c 111 temp_sdcard = 0x01;\
krishanprajapat 117:bfdc807f3d3c 112 }\
krishanprajapat 117:bfdc807f3d3c 113 }\
krishanprajapat 117:bfdc807f3d3c 114 }
krishanprajapat 117:bfdc807f3d3c 115
krishanprajapat 117:bfdc807f3d3c 116 #define isPAhot(returnHere){\
krishanprajapat 117:bfdc807f3d3c 117 /*PENDING : COMPLETE THIS FUNCTION*/\
krishanprajapat 117:bfdc807f3d3c 118 returnHere = 0xFF;\
krishanprajapat 117:bfdc807f3d3c 119 }
krishanprajapat 117:bfdc807f3d3c 120
krishanprajapat 117:bfdc807f3d3c 121 void after_cooling_pa(){
krishanprajapat 117:bfdc807f3d3c 122 gCOM_MNG_TMTC_THREAD->signal_set(COM_MNG_TMTC_SIGNAL_UART_INT);
krishanprajapat 117:bfdc807f3d3c 123 }
krishanprajapat 117:bfdc807f3d3c 124
krishanprajapat 117:bfdc807f3d3c 125 /*
krishanprajapat 117:bfdc807f3d3c 126 @brief: check for missing tc, also check crc, i.e.
krishanprajapat 117:bfdc807f3d3c 127 if true execution can be started else have to wait
krishanprajapat 117:bfdc807f3d3c 128 decide the next state
krishanprajapat 117:bfdc807f3d3c 129 @param: none
krishanprajapat 117:bfdc807f3d3c 130 @return: bool indicating whether there are missing tc
krishanprajapat 117:bfdc807f3d3c 131 */
krishanprajapat 117:bfdc807f3d3c 132 // PENDING: LAST FRAME BIT
krishanprajapat 117:bfdc807f3d3c 133 /*
krishanprajapat 117:bfdc807f3d3c 134 for loop: check for missing tc
krishanprajapat 117:bfdc807f3d3c 135 if: check for incorrect sized tc
krishanprajapat 117:bfdc807f3d3c 136 if: check for last frame bit
krishanprajapat 117:bfdc807f3d3c 137 */
krishanprajapat 117:bfdc807f3d3c 138 #define continueToExecute(returnHere) {\
krishanprajapat 117:bfdc807f3d3c 139 uint8_t tempReturn = 0x00;\
krishanprajapat 117:bfdc807f3d3c 140 /*search for missing psc*/\
krishanprajapat 117:bfdc807f3d3c 141 for(uint8_t p = 0x00 ; p < (gTOTAL_VALID_TC) ; ++p){\
krishanprajapat 117:bfdc807f3d3c 142 bool flag = false;\
krishanprajapat 117:bfdc807f3d3c 143 Base_tc *node_ptr = gHEAD_NODE_TCL;\
krishanprajapat 117:bfdc807f3d3c 144 while(node_ptr != NULL){\
krishanprajapat 117:bfdc807f3d3c 145 if( (GETpacket_seq_count(node_ptr) == p) && (GETcrc_pass(node_ptr) == 1) ){\
krishanprajapat 117:bfdc807f3d3c 146 flag = true;\
krishanprajapat 117:bfdc807f3d3c 147 break;\
krishanprajapat 117:bfdc807f3d3c 148 }\
krishanprajapat 117:bfdc807f3d3c 149 else{\
krishanprajapat 117:bfdc807f3d3c 150 node_ptr = node_ptr->next_TC;\
krishanprajapat 117:bfdc807f3d3c 151 }\
krishanprajapat 117:bfdc807f3d3c 152 }\
krishanprajapat 117:bfdc807f3d3c 153 if(flag == false){\
krishanprajapat 117:bfdc807f3d3c 154 tempReturn = 0x02;\
krishanprajapat 117:bfdc807f3d3c 155 break;\
krishanprajapat 117:bfdc807f3d3c 156 }\
krishanprajapat 117:bfdc807f3d3c 157 }\
krishanprajapat 117:bfdc807f3d3c 158 /*search for last packet bit*/\
krishanprajapat 117:bfdc807f3d3c 159 tempReturn = tempReturn + 0x01;\
krishanprajapat 117:bfdc807f3d3c 160 Base_tc *tcp = gHEAD_NODE_TCL;\
krishanprajapat 117:bfdc807f3d3c 161 while(tcp != NULL){\
krishanprajapat 117:bfdc807f3d3c 162 if(GETpacket_seq_count(tcp) == (gTOTAL_VALID_TC - 1)){\
krishanprajapat 117:bfdc807f3d3c 163 if( ( (tcp->TC_string[1]) & 0x20 ) == 0x20 ){\
krishanprajapat 117:bfdc807f3d3c 164 tempReturn = tempReturn - 0x01;\
krishanprajapat 117:bfdc807f3d3c 165 }\
krishanprajapat 117:bfdc807f3d3c 166 break;\
krishanprajapat 117:bfdc807f3d3c 167 }\
krishanprajapat 117:bfdc807f3d3c 168 tcp = tcp->next_TC;\
krishanprajapat 117:bfdc807f3d3c 169 }\
krishanprajapat 117:bfdc807f3d3c 170 returnHere = tempReturn;\
krishanprajapat 117:bfdc807f3d3c 171 /*UPDATE gMASTER STATE*/\
krishanprajapat 117:bfdc807f3d3c 172 if( (returnHere == 0x00) ){\
krishanprajapat 117:bfdc807f3d3c 173 if( (gMASTER_STATE == TCL_STATE_INCOMPLETE) || (gMASTER_STATE == TCL_STATE_COMPLETED) || (gMASTER_STATE == TCL_STATE_ABORTED) ){\
krishanprajapat 117:bfdc807f3d3c 174 gMASTER_STATE = TCL_STATE_EXECUTING;\
krishanprajapat 117:bfdc807f3d3c 175 }\
krishanprajapat 117:bfdc807f3d3c 176 }\
krishanprajapat 117:bfdc807f3d3c 177 else{\
krishanprajapat 117:bfdc807f3d3c 178 if( (gMASTER_STATE == TCL_STATE_INCOMPLETE) || (gMASTER_STATE == TCL_STATE_COMPLETED) ){\
krishanprajapat 117:bfdc807f3d3c 179 gMASTER_STATE = TCL_STATE_INCOMPLETE;\
krishanprajapat 117:bfdc807f3d3c 180 }\
krishanprajapat 117:bfdc807f3d3c 181 }\
krishanprajapat 117:bfdc807f3d3c 182 }
krishanprajapat 117:bfdc807f3d3c 183
krishanprajapat 117:bfdc807f3d3c 184 /*
krishanprajapat 117:bfdc807f3d3c 185 return 1 if code match
krishanprajapat 117:bfdc807f3d3c 186 return 0 if code mismatch
krishanprajapat 117:bfdc807f3d3c 187 */
krishanprajapat 117:bfdc807f3d3c 188 #define GScodeVerification(returnHere){\
krishanprajapat 117:bfdc807f3d3c 189 Base_tc *testTC = gHEAD_NODE_TCL;\
krishanprajapat 117:bfdc807f3d3c 190 uint16_t overflowCount = 0;\
krishanprajapat 117:bfdc807f3d3c 191 returnHere = 0xFF;\
krishanprajapat 117:bfdc807f3d3c 192 while( (overflowCount < TCL_OVERFLOW_CONSTANT) && (testTC != NULL) ){\
krishanprajapat 117:bfdc807f3d3c 193 if( (GETpacket_seq_count(testTC) == PSC_CALLSIGN) && (GETapid(testTC) == APID_CALLSIGN) ){\
krishanprajapat 117:bfdc807f3d3c 194 /*uint8_t temp8 = testTC->TC_string[1];*/\
krishanprajapat 117:bfdc807f3d3c 195 if( true ){\
krishanprajapat 117:bfdc807f3d3c 196 for( int i = 2 ; i <= 8 ; ++i ){\
krishanprajapat 117:bfdc807f3d3c 197 if( testTC->TC_string[i] != gGSCODE[i-2] ){\
krishanprajapat 117:bfdc807f3d3c 198 returnHere = 0;\
krishanprajapat 117:bfdc807f3d3c 199 break;\
krishanprajapat 117:bfdc807f3d3c 200 }\
krishanprajapat 117:bfdc807f3d3c 201 }\
krishanprajapat 117:bfdc807f3d3c 202 }\
krishanprajapat 117:bfdc807f3d3c 203 break;\
krishanprajapat 117:bfdc807f3d3c 204 }\
krishanprajapat 117:bfdc807f3d3c 205 testTC = testTC->next_TC;\
krishanprajapat 117:bfdc807f3d3c 206 ++overflowCount;\
krishanprajapat 117:bfdc807f3d3c 207 }\
krishanprajapat 117:bfdc807f3d3c 208 }
krishanprajapat 117:bfdc807f3d3c 209
krishanprajapat 117:bfdc807f3d3c 210 /*
krishanprajapat 117:bfdc807f3d3c 211 @brief: DELETE THE CRC FAILED TC FROM THE LIST TO FREE-UP MEMORY AND UPDATE
krishanprajapat 117:bfdc807f3d3c 212 THE TOTAL VALID TC AND GENERATE L1_ACK_TM
krishanprajapat 117:bfdc807f3d3c 213 @param: none
krishanprajapat 117:bfdc807f3d3c 214 @return: none
krishanprajapat 117:bfdc807f3d3c 215 */
krishanprajapat 117:bfdc807f3d3c 216 /*tm_ptr is the next_TM of a linked list, and should have the value NULL, i.e. tm_ptr should be the next_TM pointer of thte last node */
krishanprajapat 117:bfdc807f3d3c 217 #define get_ack_l1( tm_ptr ){\
krishanprajapat 117:bfdc807f3d3c 218 Base_tc *current_TC = gHEAD_NODE_TCL;\
krishanprajapat 117:bfdc807f3d3c 219 Base_tm *l1_ack = new Short_tm;\
krishanprajapat 117:bfdc807f3d3c 220 /*APPEND TO THE tm_ptr HERE*/\
krishanprajapat 117:bfdc807f3d3c 221 tm_ptr = l1_ack;\
krishanprajapat 117:bfdc807f3d3c 222 fill_l1_ack(l1_ack);\
krishanprajapat 117:bfdc807f3d3c 223 int TC_count = 0;\
krishanprajapat 117:bfdc807f3d3c 224 int overflowCountL1 = 0;\
krishanprajapat 117:bfdc807f3d3c 225 while(current_TC != NULL){\
krishanprajapat 117:bfdc807f3d3c 226 if( overflowCountL1 < TCL_OVERFLOW_CONSTANT ){\
krishanprajapat 117:bfdc807f3d3c 227 /*IF CRC PASS*/\
krishanprajapat 117:bfdc807f3d3c 228 if( (GETcrc_pass(current_TC) == 1) ){\
krishanprajapat 117:bfdc807f3d3c 229 if(TC_count > 4){\
krishanprajapat 117:bfdc807f3d3c 230 /*PENDING: FILL TC_EXEC_CODE, APPEND CRC TO THE TM*/\
krishanprajapat 117:bfdc807f3d3c 231 put_crc_l1_ack( l1_ack );\
krishanprajapat 117:bfdc807f3d3c 232 /*extend the TM linked list*/\
krishanprajapat 117:bfdc807f3d3c 233 TC_count = 0;\
krishanprajapat 117:bfdc807f3d3c 234 l1_ack->next_TM = new Short_tm;\
krishanprajapat 117:bfdc807f3d3c 235 l1_ack = l1_ack->next_TM;\
krishanprajapat 117:bfdc807f3d3c 236 fill_l1_ack(l1_ack);\
krishanprajapat 117:bfdc807f3d3c 237 }\
krishanprajapat 117:bfdc807f3d3c 238 /*PSC starts from 7th byte*/\
krishanprajapat 117:bfdc807f3d3c 239 l1_ack->TM_string[6+TC_count] = GETpacket_seq_count(current_TC);\
krishanprajapat 117:bfdc807f3d3c 240 /*TC exec status*/\
krishanprajapat 117:bfdc807f3d3c 241 switch(TC_count){\
krishanprajapat 117:bfdc807f3d3c 242 case 0:\
krishanprajapat 117:bfdc807f3d3c 243 l1_ack->TM_string[3] = (GETexec_status(current_TC)) & 0x0F;\
krishanprajapat 117:bfdc807f3d3c 244 break;\
krishanprajapat 117:bfdc807f3d3c 245 case 1:\
krishanprajapat 117:bfdc807f3d3c 246 l1_ack->TM_string[4] = (GETexec_status(current_TC) << 4) & 0xF0;\
krishanprajapat 117:bfdc807f3d3c 247 break;\
krishanprajapat 117:bfdc807f3d3c 248 case 2:\
krishanprajapat 117:bfdc807f3d3c 249 l1_ack->TM_string[4] |= (GETexec_status(current_TC)) & 0x0F;\
krishanprajapat 117:bfdc807f3d3c 250 break;\
krishanprajapat 117:bfdc807f3d3c 251 case 3:\
krishanprajapat 117:bfdc807f3d3c 252 l1_ack->TM_string[5] = (GETexec_status(current_TC) << 4) & 0xF0;\
krishanprajapat 117:bfdc807f3d3c 253 break;\
krishanprajapat 117:bfdc807f3d3c 254 case 4:\
krishanprajapat 117:bfdc807f3d3c 255 l1_ack->TM_string[5] |= (GETexec_status(current_TC)) & 0x0F;\
krishanprajapat 117:bfdc807f3d3c 256 }\
krishanprajapat 117:bfdc807f3d3c 257 ++TC_count;\
krishanprajapat 117:bfdc807f3d3c 258 }\
krishanprajapat 117:bfdc807f3d3c 259 current_TC = current_TC->next_TC;\
krishanprajapat 117:bfdc807f3d3c 260 ++overflowCountL1;\
krishanprajapat 117:bfdc807f3d3c 261 }\
krishanprajapat 117:bfdc807f3d3c 262 else{\
krishanprajapat 117:bfdc807f3d3c 263 /*PENDING: RESET CDMS*/\
krishanprajapat 117:bfdc807f3d3c 264 break;\
krishanprajapat 117:bfdc807f3d3c 265 }\
krishanprajapat 117:bfdc807f3d3c 266 }\
krishanprajapat 117:bfdc807f3d3c 267 /*FILL UP THE REMAINING FIELDS WITH 0x00 as PSC, AND 0xF as tc exec status*/\
krishanprajapat 117:bfdc807f3d3c 268 if( (TC_count < 5) && (TC_count != 0) ){\
krishanprajapat 117:bfdc807f3d3c 269 while(TC_count < 5){\
krishanprajapat 117:bfdc807f3d3c 270 l1_ack->TM_string[6+TC_count] = 0x00;\
krishanprajapat 117:bfdc807f3d3c 271 switch(TC_count){\
krishanprajapat 117:bfdc807f3d3c 272 case 1:\
krishanprajapat 117:bfdc807f3d3c 273 l1_ack->TM_string[4] = 0xF0;\
krishanprajapat 117:bfdc807f3d3c 274 break;\
krishanprajapat 117:bfdc807f3d3c 275 case 2:\
krishanprajapat 117:bfdc807f3d3c 276 l1_ack->TM_string[4] |= 0x0F;\
krishanprajapat 117:bfdc807f3d3c 277 break;\
krishanprajapat 117:bfdc807f3d3c 278 case 3:\
krishanprajapat 117:bfdc807f3d3c 279 l1_ack->TM_string[5] = 0xF0;\
krishanprajapat 117:bfdc807f3d3c 280 break;\
krishanprajapat 117:bfdc807f3d3c 281 case 4:\
krishanprajapat 117:bfdc807f3d3c 282 l1_ack->TM_string[5] |= 0x0F;\
krishanprajapat 117:bfdc807f3d3c 283 }\
krishanprajapat 117:bfdc807f3d3c 284 ++TC_count;\
krishanprajapat 117:bfdc807f3d3c 285 }\
krishanprajapat 117:bfdc807f3d3c 286 }\
krishanprajapat 117:bfdc807f3d3c 287 put_crc_l1_ack(l1_ack);\
krishanprajapat 117:bfdc807f3d3c 288 }
krishanprajapat 117:bfdc807f3d3c 289
krishanprajapat 117:bfdc807f3d3c 290 /*tm_ptr is the next_TM of a linked list, and should have the value NULL, i.e. tm_ptr should be the next_TM pointer of thte last node */
krishanprajapat 117:bfdc807f3d3c 291 #define get_tc_list(tm_ptr, thePSC){\
krishanprajapat 117:bfdc807f3d3c 292 uint8_t TM_PSC = 0xFF;\
krishanprajapat 117:bfdc807f3d3c 293 uint8_t TC_PSC = thePSC;\
krishanprajapat 117:bfdc807f3d3c 294 int overflowCount = 0;\
krishanprajapat 117:bfdc807f3d3c 295 uint8_t TC_LIST_TAG = 0x00;\
krishanprajapat 117:bfdc807f3d3c 296 Base_tc *temp_tc = gHEAD_NODE_TCL;\
krishanprajapat 117:bfdc807f3d3c 297 bool first_time = true;\
krishanprajapat 117:bfdc807f3d3c 298 Base_tm *current_tm = NULL;\
krishanprajapat 117:bfdc807f3d3c 299 while( temp_tc != NULL ){\
krishanprajapat 117:bfdc807f3d3c 300 if( overflowCount < TCL_OVERFLOW_CONSTANT ){\
krishanprajapat 117:bfdc807f3d3c 301 TM_PSC = TM_PSC + 1;\
krishanprajapat 117:bfdc807f3d3c 302 /*Increment TM_PSC for every new TM pointer created*/\
krishanprajapat 117:bfdc807f3d3c 303 Base_tm *temp_tm = new Long_tm;\
krishanprajapat 117:bfdc807f3d3c 304 temp_tm->next_TM = NULL;\
krishanprajapat 117:bfdc807f3d3c 305 temp_tm->TM_string[0] = 0x38;\
krishanprajapat 117:bfdc807f3d3c 306 /*Frame type(1) = 0; TMID = 0111; Spare = 000*/\
krishanprajapat 117:bfdc807f3d3c 307 temp_tm->TM_string[1] = TC_PSC;\
krishanprajapat 117:bfdc807f3d3c 308 temp_tm->TM_string[3] = TM_PSC;\
krishanprajapat 117:bfdc807f3d3c 309 int indexCustom = 4, num_of_short_tc = 0;\
krishanprajapat 117:bfdc807f3d3c 310 while(temp_tc != NULL){\
krishanprajapat 117:bfdc807f3d3c 311 if( overflowCount < TCL_OVERFLOW_CONSTANT ){\
krishanprajapat 117:bfdc807f3d3c 312 if( GETshort_or_long_tc(temp_tc) == SHORT_TC_CODE ){\
krishanprajapat 117:bfdc807f3d3c 313 for( int i = 0 ; i < TC_SHORT_SIZE ; ++i ){\
krishanprajapat 117:bfdc807f3d3c 314 temp_tm->TM_string[indexCustom + i] = temp_tc->TC_string[i];\
krishanprajapat 117:bfdc807f3d3c 315 }\
krishanprajapat 117:bfdc807f3d3c 316 indexCustom = indexCustom + TC_SHORT_SIZE;\
krishanprajapat 117:bfdc807f3d3c 317 ++overflowCount;\
krishanprajapat 117:bfdc807f3d3c 318 /*INCREMENT STUFF*/\
krishanprajapat 117:bfdc807f3d3c 319 temp_tc = temp_tc->next_TC;\
krishanprajapat 117:bfdc807f3d3c 320 num_of_short_tc = num_of_short_tc + 1;\
krishanprajapat 117:bfdc807f3d3c 321 if (temp_tc == NULL){\
krishanprajapat 117:bfdc807f3d3c 322 for (int i = indexCustom ; i < TM_LONG_SIZE-2 ; ++i){\
krishanprajapat 117:bfdc807f3d3c 323 temp_tm->TM_string[i] = 0;\
krishanprajapat 117:bfdc807f3d3c 324 /*Fill remaining values with 0*/\
krishanprajapat 117:bfdc807f3d3c 325 }\
krishanprajapat 117:bfdc807f3d3c 326 TC_LIST_TAG = num_of_short_tc;\
krishanprajapat 117:bfdc807f3d3c 327 break;\
krishanprajapat 117:bfdc807f3d3c 328 }\
krishanprajapat 117:bfdc807f3d3c 329 if( (GETshort_or_long_tc(temp_tc) == LONG_TC_CODE) || (num_of_short_tc == OBOSC_TCL_MAX_SHORT_SIZE) ){\
krishanprajapat 117:bfdc807f3d3c 330 /*Next TC is long or memory is filled*/\
krishanprajapat 117:bfdc807f3d3c 331 for(int i = indexCustom; i < TM_LONG_SIZE-2 ; ++i){\
krishanprajapat 117:bfdc807f3d3c 332 temp_tm->TM_string[i] = 0;\
krishanprajapat 117:bfdc807f3d3c 333 /*Fill remaining values with 0*/\
krishanprajapat 117:bfdc807f3d3c 334 }\
krishanprajapat 117:bfdc807f3d3c 335 TC_LIST_TAG = num_of_short_tc;\
krishanprajapat 117:bfdc807f3d3c 336 break;\
krishanprajapat 117:bfdc807f3d3c 337 }\
krishanprajapat 117:bfdc807f3d3c 338 }\
krishanprajapat 117:bfdc807f3d3c 339 else if (TC_LIST_TAG == OBOSC_TCL_TAG_LONG_FIRST_HALF){\
krishanprajapat 117:bfdc807f3d3c 340 /*Long TC, 2nd half*/\
krishanprajapat 117:bfdc807f3d3c 341 for (int i = 0; i < OBOSC_LONG_TC_SECOND_HALF_SIZE ; ++i){\
krishanprajapat 117:bfdc807f3d3c 342 temp_tm->TM_string[indexCustom + i] = temp_tc->TC_string[OBOSC_LONG_TC_FIRST_HALF_SIZE + i];\
krishanprajapat 117:bfdc807f3d3c 343 /*Fill the TM with TC_values*/\
krishanprajapat 117:bfdc807f3d3c 344 }\
krishanprajapat 117:bfdc807f3d3c 345 for (int i = OBOSC_LONG_TC_SECOND_HALF_SIZE + indexCustom ; i < TM_LONG_SIZE-2 ; ++i ){\
krishanprajapat 117:bfdc807f3d3c 346 temp_tm->TM_string[i] = 0;\
krishanprajapat 117:bfdc807f3d3c 347 /*Fill remaining values with 0*/\
krishanprajapat 117:bfdc807f3d3c 348 }\
krishanprajapat 117:bfdc807f3d3c 349 temp_tc = temp_tc->next_TC;\
krishanprajapat 117:bfdc807f3d3c 350 TC_LIST_TAG = OBOSC_TCL_TAG_LONG_SECOND_HALF;\
krishanprajapat 117:bfdc807f3d3c 351 ++overflowCount;\
krishanprajapat 117:bfdc807f3d3c 352 break;\
krishanprajapat 117:bfdc807f3d3c 353 }\
krishanprajapat 117:bfdc807f3d3c 354 else{\
krishanprajapat 117:bfdc807f3d3c 355 /*Long TC, 1st half */\
krishanprajapat 117:bfdc807f3d3c 356 for (int i = 0; i < OBOSC_LONG_TC_FIRST_HALF_SIZE; ++i){\
krishanprajapat 117:bfdc807f3d3c 357 /*gPC.printf("indexCustom = %d\r\n", indexCustom);*/\
krishanprajapat 117:bfdc807f3d3c 358 temp_tm->TM_string[indexCustom + i] = temp_tc->TC_string[i];\
krishanprajapat 117:bfdc807f3d3c 359 /*Fill the TM with TC_values*/\
krishanprajapat 117:bfdc807f3d3c 360 }\
krishanprajapat 117:bfdc807f3d3c 361 for (int i = OBOSC_LONG_TC_FIRST_HALF_SIZE + indexCustom ; i < TM_LONG_SIZE-2 ; ++i ){\
krishanprajapat 117:bfdc807f3d3c 362 temp_tm->TM_string[i] = 0;\
krishanprajapat 117:bfdc807f3d3c 363 /*Fill remaining values with 0*/\
krishanprajapat 117:bfdc807f3d3c 364 }\
krishanprajapat 117:bfdc807f3d3c 365 TC_LIST_TAG = OBOSC_TCL_TAG_LONG_FIRST_HALF;\
krishanprajapat 117:bfdc807f3d3c 366 break;\
krishanprajapat 117:bfdc807f3d3c 367 }\
krishanprajapat 117:bfdc807f3d3c 368 }\
krishanprajapat 117:bfdc807f3d3c 369 else{\
krishanprajapat 117:bfdc807f3d3c 370 /*PENDING: reset cdms*/\
krishanprajapat 117:bfdc807f3d3c 371 break;\
krishanprajapat 117:bfdc807f3d3c 372 }\
krishanprajapat 117:bfdc807f3d3c 373 }\
krishanprajapat 117:bfdc807f3d3c 374 temp_tm->TM_string[2] = TC_LIST_TAG;\
krishanprajapat 117:bfdc807f3d3c 375 /*TC_LIST_TAG as is updated in the inner while loop*/\
krishanprajapat 117:bfdc807f3d3c 376 uint16_t crc16 = crc16_gen(temp_tm->TM_string, TM_LONG_SIZE-2);\
krishanprajapat 117:bfdc807f3d3c 377 temp_tm->TM_string[TM_LONG_SIZE-2] = (crc16 & 0xFF00) >> 8 ;\
krishanprajapat 117:bfdc807f3d3c 378 temp_tm->TM_string[TM_LONG_SIZE-1] = crc16 & 0x00FF;\
krishanprajapat 117:bfdc807f3d3c 379 /*Attach this new node to the TM linked list*/\
krishanprajapat 117:bfdc807f3d3c 380 if( first_time ){\
krishanprajapat 117:bfdc807f3d3c 381 first_time = false;\
krishanprajapat 117:bfdc807f3d3c 382 tm_ptr = temp_tm;\
krishanprajapat 117:bfdc807f3d3c 383 current_tm = temp_tm;\
krishanprajapat 117:bfdc807f3d3c 384 }\
krishanprajapat 117:bfdc807f3d3c 385 else{\
krishanprajapat 117:bfdc807f3d3c 386 current_tm->next_TM = temp_tm;\
krishanprajapat 117:bfdc807f3d3c 387 current_tm = current_tm->next_TM;\
krishanprajapat 117:bfdc807f3d3c 388 }\
krishanprajapat 117:bfdc807f3d3c 389 /*Attach this new node at the end*/\
krishanprajapat 117:bfdc807f3d3c 390 }\
krishanprajapat 117:bfdc807f3d3c 391 else{\
krishanprajapat 117:bfdc807f3d3c 392 /*PENDING: reset CDMS*/\
krishanprajapat 117:bfdc807f3d3c 393 break;\
krishanprajapat 117:bfdc807f3d3c 394 }\
krishanprajapat 117:bfdc807f3d3c 395 }\
krishanprajapat 117:bfdc807f3d3c 396 }
krishanprajapat 117:bfdc807f3d3c 397
krishanprajapat 117:bfdc807f3d3c 398 // CDMS TEAM CODE START
krishanprajapat 117:bfdc807f3d3c 399 inline Base_tm* FCTN_CDMS_RLY_TMTC(Base_tc *tc_ptr){
krishanprajapat 117:bfdc807f3d3c 400 uint8_t ACKCODE = 0x00;
krishanprajapat 117:bfdc807f3d3c 401 //printf("\rTC execution in progress\r\n");
krishanprajapat 117:bfdc807f3d3c 402 Base_tm *tm_pointer = new Long_tm;
krishanprajapat 117:bfdc807f3d3c 403 Base_tm *tm_ptr = tm_pointer;
krishanprajapat 117:bfdc807f3d3c 404 received = 0;
krishanprajapat 117:bfdc807f3d3c 405 switch(GETapid(tc_ptr))
krishanprajapat 117:bfdc807f3d3c 406 {
krishanprajapat 117:bfdc807f3d3c 407 case 1: //apid=01 implies it corresponds to bae
krishanprajapat 117:bfdc807f3d3c 408 {
krishanprajapat 117:bfdc807f3d3c 409 //printf("Telecommand is for BAE\r\n");
krishanprajapat 117:bfdc807f3d3c 410 //printf("Sending TC to BAE...\r\n"); //interrupt to be sent to the bae
krishanprajapat 117:bfdc807f3d3c 411 FCTN_I2C_WRITE((char*)tc_ptr->TC_string);
krishanprajapat 117:bfdc807f3d3c 412 while(1)
krishanprajapat 117:bfdc807f3d3c 413 {
krishanprajapat 117:bfdc807f3d3c 414 wait(1); //TimeOut instead of wait
krishanprajapat 117:bfdc807f3d3c 415 if(tm_status_4m_slv == 1)
krishanprajapat 117:bfdc807f3d3c 416 {
krishanprajapat 117:bfdc807f3d3c 417 //printf("receiving...\r\n");
krishanprajapat 117:bfdc807f3d3c 418 FCTN_I2C_READ((char*)tm_pointer->TM_string,134);
krishanprajapat 117:bfdc807f3d3c 419 //printf("%s", tm_pointer->TM_string);
krishanprajapat 117:bfdc807f3d3c 420 received+=1;
krishanprajapat 117:bfdc807f3d3c 421 tm_pointer = tm_pointer->next_TM;
krishanprajapat 117:bfdc807f3d3c 422 break; //only for testing purpose
krishanprajapat 117:bfdc807f3d3c 423 }
krishanprajapat 117:bfdc807f3d3c 424 else
krishanprajapat 117:bfdc807f3d3c 425 {
krishanprajapat 117:bfdc807f3d3c 426 break;
krishanprajapat 117:bfdc807f3d3c 427 }
krishanprajapat 117:bfdc807f3d3c 428 }
krishanprajapat 117:bfdc807f3d3c 429 if(received >= 1 )
krishanprajapat 117:bfdc807f3d3c 430 {
krishanprajapat 117:bfdc807f3d3c 431 //printf("Telemetry is received from BAE\r\n");
krishanprajapat 117:bfdc807f3d3c 432 Base_tm *tm_print = tm_ptr;
krishanprajapat 117:bfdc807f3d3c 433 for(uint8_t i=0;i<received;i++)
krishanprajapat 117:bfdc807f3d3c 434 {
krishanprajapat 117:bfdc807f3d3c 435 //printf("%s", tm_print->TM_string);
krishanprajapat 117:bfdc807f3d3c 436 tm_print = tm_print->next_TM; //for check
krishanprajapat 117:bfdc807f3d3c 437 }
krishanprajapat 117:bfdc807f3d3c 438 received = 0;
krishanprajapat 117:bfdc807f3d3c 439 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 440 }
krishanprajapat 117:bfdc807f3d3c 441 else
krishanprajapat 117:bfdc807f3d3c 442 {
krishanprajapat 117:bfdc807f3d3c 443 //printf("Telemetry is not received from BAE\r\n");
krishanprajapat 117:bfdc807f3d3c 444 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 445 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 446 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 447 tm_pointer->TM_string[2] = 0x01;
krishanprajapat 117:bfdc807f3d3c 448 tm_pointer->TM_string[3] = ACKCODE; //ackcode to be decided
krishanprajapat 117:bfdc807f3d3c 449 tm_pointer->TM_string[4] = 0x01;
krishanprajapat 117:bfdc807f3d3c 450 for(uint8_t i=0;i<6;i++)
krishanprajapat 117:bfdc807f3d3c 451 {
krishanprajapat 117:bfdc807f3d3c 452 tm_pointer->TM_string[i+5] = 0;
krishanprajapat 117:bfdc807f3d3c 453 }
krishanprajapat 117:bfdc807f3d3c 454 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 455 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 456 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 457 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 458 }
krishanprajapat 117:bfdc807f3d3c 459 break;
krishanprajapat 117:bfdc807f3d3c 460 }
krishanprajapat 117:bfdc807f3d3c 461 case 2:
krishanprajapat 117:bfdc807f3d3c 462 {
krishanprajapat 117:bfdc807f3d3c 463 //gPC.printf("Telecommand is for CDMS\r\n"); //apid = 10 corresponds to cdms
krishanprajapat 117:bfdc807f3d3c 464 switch(GETservice_type(tc_ptr))
krishanprajapat 117:bfdc807f3d3c 465 {
krishanprajapat 117:bfdc807f3d3c 466 case 0x60:
krishanprajapat 117:bfdc807f3d3c 467 {
krishanprajapat 117:bfdc807f3d3c 468 //gPC.printf("service:MMS\r\n");
krishanprajapat 117:bfdc807f3d3c 469 switch(GETservice_subtype(tc_ptr))
krishanprajapat 117:bfdc807f3d3c 470 {
krishanprajapat 117:bfdc807f3d3c 471 case 0x1:
krishanprajapat 117:bfdc807f3d3c 472 {
krishanprajapat 117:bfdc807f3d3c 473 //printf("sub_service:Read from RAM_Memory\r\n");
krishanprajapat 117:bfdc807f3d3c 474 mid=(uint16_t)(tc_ptr->TC_string[3]<<4)+(uint16_t)(tc_ptr->TC_string[4]);
krishanprajapat 117:bfdc807f3d3c 475
krishanprajapat 117:bfdc807f3d3c 476 //Data[0] = FCTN_CDMS_RD_FLASH(0);
krishanprajapat 117:bfdc807f3d3c 477 //Data[1] = FCTN_CDMS_RD_FLASH(1);
krishanprajapat 117:bfdc807f3d3c 478 //tm_pointer = new Long_tm;
krishanprajapat 117:bfdc807f3d3c 479 tm_pointer->TM_string[0] = 0x30;
krishanprajapat 117:bfdc807f3d3c 480 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 481 tm_pointer->TM_string[2] = (uint8_t)(flash_counter);
krishanprajapat 117:bfdc807f3d3c 482 for(uint8_t i=0;i<4;i++)
krishanprajapat 117:bfdc807f3d3c 483 {
krishanprajapat 117:bfdc807f3d3c 484 tm_pointer->TM_string[3+i] = (uint8_t)((Data[0]>>(8*i))&0x00FF);
krishanprajapat 117:bfdc807f3d3c 485 }
krishanprajapat 117:bfdc807f3d3c 486 for(uint8_t i=4;i<8;i++)
krishanprajapat 117:bfdc807f3d3c 487 {
krishanprajapat 117:bfdc807f3d3c 488 tm_pointer->TM_string[3+i] = (uint8_t)((Data[1]>>(8*i))&0x00FF);
krishanprajapat 117:bfdc807f3d3c 489 }
krishanprajapat 117:bfdc807f3d3c 490 crc16 = crc16_gen(tm_ptr->TM_string,9);
krishanprajapat 117:bfdc807f3d3c 491 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 492 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 493 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 494 }
krishanprajapat 117:bfdc807f3d3c 495 case 0x2:
krishanprajapat 117:bfdc807f3d3c 496 {
krishanprajapat 117:bfdc807f3d3c 497 //printf("sub_service:Read from Flash_Memory\r\n");
krishanprajapat 117:bfdc807f3d3c 498 mid=(uint16_t)(tc_ptr->TC_string[3]<<4)+(uint16_t)(tc_ptr->TC_string[4]);
krishanprajapat 117:bfdc807f3d3c 499
krishanprajapat 117:bfdc807f3d3c 500 //Data[0] = FCTN_CDMS_RD_FLASH(0);
krishanprajapat 117:bfdc807f3d3c 501 //Data[1] = FCTN_CDMS_RD_FLASH(1);
krishanprajapat 117:bfdc807f3d3c 502 //tm_pointer = new Long_tm;
krishanprajapat 117:bfdc807f3d3c 503 tm_pointer->TM_string[0] = 0x30;
krishanprajapat 117:bfdc807f3d3c 504 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 505 tm_pointer->TM_string[2] = (uint8_t)(flash_counter);
krishanprajapat 117:bfdc807f3d3c 506 for(uint8_t i=0;i<4;i++)
krishanprajapat 117:bfdc807f3d3c 507 {
krishanprajapat 117:bfdc807f3d3c 508 tm_pointer->TM_string[3+i] = (uint8_t)((Data[0]>>(8*i))&0x00FF);
krishanprajapat 117:bfdc807f3d3c 509 }
krishanprajapat 117:bfdc807f3d3c 510 for(uint8_t i=4;i<8;i++)
krishanprajapat 117:bfdc807f3d3c 511 {
krishanprajapat 117:bfdc807f3d3c 512 tm_pointer->TM_string[3+i] = (uint8_t)((Data[1]>>(8*i))&0x00FF);
krishanprajapat 117:bfdc807f3d3c 513 }
krishanprajapat 117:bfdc807f3d3c 514 crc16 = crc16_gen(tm_ptr->TM_string,9);
krishanprajapat 117:bfdc807f3d3c 515 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 516 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 517 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 518 }
krishanprajapat 117:bfdc807f3d3c 519 case 0x5:
krishanprajapat 117:bfdc807f3d3c 520 {
krishanprajapat 117:bfdc807f3d3c 521 //printf("WRITE ON FLASH_MEMORY\r\n");
krishanprajapat 117:bfdc807f3d3c 522 mid=(uint16_t)(tc_ptr->TC_string[3]<<4)+(uint16_t)(tc_ptr->TC_string[4]);
krishanprajapat 117:bfdc807f3d3c 523 block = (((uint32_t)(tc_ptr->TC_string[5])<<24)|((uint32_t)(tc_ptr->TC_string[5])<<16)|((uint32_t)(tc_ptr->TC_string[5])<<8)|((uint32_t)(tc_ptr->TC_string[5])));
krishanprajapat 117:bfdc807f3d3c 524 //FCTN_CDMS_WR_FLASH(mid,block);
krishanprajapat 117:bfdc807f3d3c 525 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 526 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 527 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 528 tm_pointer->TM_string[2] = 0x01;
krishanprajapat 117:bfdc807f3d3c 529 tm_pointer->TM_string[3] = ACKCODE; //ackcode to be decided
krishanprajapat 117:bfdc807f3d3c 530 tm_pointer->TM_string[4] = 0x01;
krishanprajapat 117:bfdc807f3d3c 531 for(uint8_t i=0;i<6;i++)
krishanprajapat 117:bfdc807f3d3c 532 {
krishanprajapat 117:bfdc807f3d3c 533 tm_pointer->TM_string[i+5] = 0;
krishanprajapat 117:bfdc807f3d3c 534 }
krishanprajapat 117:bfdc807f3d3c 535 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 536 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 537 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 538 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 539 break;
krishanprajapat 117:bfdc807f3d3c 540 }
krishanprajapat 117:bfdc807f3d3c 541 default:
krishanprajapat 117:bfdc807f3d3c 542 {
krishanprajapat 117:bfdc807f3d3c 543 //printf("INVALID TC\r\n"); //Send Invalid TC Telemetry
krishanprajapat 117:bfdc807f3d3c 544 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 545 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 546 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 547 tm_pointer->TM_string[2] = 0x01;
krishanprajapat 117:bfdc807f3d3c 548 tm_pointer->TM_string[3] = ACKCODE; //ackcode to be decided
krishanprajapat 117:bfdc807f3d3c 549 tm_pointer->TM_string[4] = 0x01;
krishanprajapat 117:bfdc807f3d3c 550 for(uint8_t i=0;i<6;i++)
krishanprajapat 117:bfdc807f3d3c 551 {
krishanprajapat 117:bfdc807f3d3c 552 tm_pointer->TM_string[i+5] = 0;
krishanprajapat 117:bfdc807f3d3c 553 }
krishanprajapat 117:bfdc807f3d3c 554 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 555 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 556 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 557 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 558 }
krishanprajapat 117:bfdc807f3d3c 559 break;
krishanprajapat 117:bfdc807f3d3c 560 }
krishanprajapat 117:bfdc807f3d3c 561 }
krishanprajapat 117:bfdc807f3d3c 562 case 0x8:
krishanprajapat 117:bfdc807f3d3c 563 {
krishanprajapat 117:bfdc807f3d3c 564 //printf("service:FUNCTION MANAGEMENT SERVICE\r\n");
krishanprajapat 117:bfdc807f3d3c 565 if(GETservice_subtype(tc_ptr)==0x1)
krishanprajapat 117:bfdc807f3d3c 566 {
krishanprajapat 117:bfdc807f3d3c 567 if(GETpid(tc_ptr)==0x01)
krishanprajapat 117:bfdc807f3d3c 568 {
krishanprajapat 117:bfdc807f3d3c 569 //printf("TC_PL_INIT\r\n"); // call PWR_SWCH_ON function
krishanprajapat 117:bfdc807f3d3c 570 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 571 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 572 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 573 tm_pointer->TM_string[2] = ACKCODE;
krishanprajapat 117:bfdc807f3d3c 574 for(uint8_t i=3;i<11;i++)
krishanprajapat 117:bfdc807f3d3c 575 {
krishanprajapat 117:bfdc807f3d3c 576 tm_pointer->TM_string[i] = 0;
krishanprajapat 117:bfdc807f3d3c 577 }
krishanprajapat 117:bfdc807f3d3c 578 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 579 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 580 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 581 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 582 break;
krishanprajapat 117:bfdc807f3d3c 583 }
krishanprajapat 117:bfdc807f3d3c 584 else if(GETpid(tc_ptr)==0x02)
krishanprajapat 117:bfdc807f3d3c 585 {
krishanprajapat 117:bfdc807f3d3c 586 //printf("TC_PL_MAIN\r\n"); // call PWR_SWCH_ON function
krishanprajapat 117:bfdc807f3d3c 587 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 588 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 589 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 590 tm_pointer->TM_string[2] = ACKCODE;
krishanprajapat 117:bfdc807f3d3c 591 for(uint8_t i=3;i<11;i++)
krishanprajapat 117:bfdc807f3d3c 592 {
krishanprajapat 117:bfdc807f3d3c 593 tm_pointer->TM_string[i] = 0;
krishanprajapat 117:bfdc807f3d3c 594 }
krishanprajapat 117:bfdc807f3d3c 595 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 596 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 597 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 598 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 599 break;
krishanprajapat 117:bfdc807f3d3c 600 }
krishanprajapat 117:bfdc807f3d3c 601 else if(GETpid(tc_ptr)==0x03)
krishanprajapat 117:bfdc807f3d3c 602 {
krishanprajapat 117:bfdc807f3d3c 603 //printf("TC_COM_INIT\r\n"); // call PWR_SWCH_ON function
krishanprajapat 117:bfdc807f3d3c 604 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 605 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 606 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 607 tm_pointer->TM_string[2] = ACKCODE;
krishanprajapat 117:bfdc807f3d3c 608 for(uint8_t i=3;i<11;i++)
krishanprajapat 117:bfdc807f3d3c 609 {
krishanprajapat 117:bfdc807f3d3c 610 tm_pointer->TM_string[i] = 0;
krishanprajapat 117:bfdc807f3d3c 611 }
krishanprajapat 117:bfdc807f3d3c 612 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 613 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 614 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 615 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 616 break;
krishanprajapat 117:bfdc807f3d3c 617 }
krishanprajapat 117:bfdc807f3d3c 618 else if(GETpid(tc_ptr)==0x04)
krishanprajapat 117:bfdc807f3d3c 619 {
krishanprajapat 117:bfdc807f3d3c 620 //printf("TC_CDMS_HK_MAIN\r\n"); // call PWR_SWCH_ON function
krishanprajapat 117:bfdc807f3d3c 621 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 622 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 623 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 624 tm_pointer->TM_string[2] = ACKCODE;
krishanprajapat 117:bfdc807f3d3c 625 for(uint8_t i=3;i<11;i++)
krishanprajapat 117:bfdc807f3d3c 626 {
krishanprajapat 117:bfdc807f3d3c 627 tm_pointer->TM_string[i] = 0;
krishanprajapat 117:bfdc807f3d3c 628 }
krishanprajapat 117:bfdc807f3d3c 629 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 630 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 631 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 632 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 633 break;
krishanprajapat 117:bfdc807f3d3c 634 }
krishanprajapat 117:bfdc807f3d3c 635 else if(GETpid(tc_ptr)==0x11)
krishanprajapat 117:bfdc807f3d3c 636 {
krishanprajapat 117:bfdc807f3d3c 637 //printf("TC_SW_ON_SD\r\n"); // call PWR_SWCH_ON function
krishanprajapat 117:bfdc807f3d3c 638 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 639 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 640 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 641 tm_pointer->TM_string[2] = ACKCODE;
krishanprajapat 117:bfdc807f3d3c 642 for(uint8_t i=3;i<11;i++)
krishanprajapat 117:bfdc807f3d3c 643 {
krishanprajapat 117:bfdc807f3d3c 644 tm_pointer->TM_string[i] = 0;
krishanprajapat 117:bfdc807f3d3c 645 }
krishanprajapat 117:bfdc807f3d3c 646 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 647 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 648 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 649 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 650 break;
krishanprajapat 117:bfdc807f3d3c 651 }
krishanprajapat 117:bfdc807f3d3c 652 else if(GETpid(tc_ptr)==0x12)
krishanprajapat 117:bfdc807f3d3c 653 {
krishanprajapat 117:bfdc807f3d3c 654 //printf("TC_SW_ON_RTC\r\n"); // call PWR_SWCH_ON function
krishanprajapat 117:bfdc807f3d3c 655 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 656 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 657 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 658 tm_pointer->TM_string[2] = ACKCODE;
krishanprajapat 117:bfdc807f3d3c 659 for(uint8_t i=3;i<11;i++)
krishanprajapat 117:bfdc807f3d3c 660 {
krishanprajapat 117:bfdc807f3d3c 661 tm_pointer->TM_string[i] = 0;
krishanprajapat 117:bfdc807f3d3c 662 }
krishanprajapat 117:bfdc807f3d3c 663 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 664 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 665 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 666 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 667 break;
krishanprajapat 117:bfdc807f3d3c 668 }
krishanprajapat 117:bfdc807f3d3c 669 else if(GETpid(tc_ptr)==0x13)
krishanprajapat 117:bfdc807f3d3c 670 {
krishanprajapat 117:bfdc807f3d3c 671 //printf("TC_SW_ON_BAE\r\n"); // call PWR_SWCH_ON function
krishanprajapat 117:bfdc807f3d3c 672 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 673 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 674 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 675 tm_pointer->TM_string[2] = ACKCODE;
krishanprajapat 117:bfdc807f3d3c 676 for(uint8_t i=3;i<11;i++)
krishanprajapat 117:bfdc807f3d3c 677 {
krishanprajapat 117:bfdc807f3d3c 678 tm_pointer->TM_string[i] = 0;
krishanprajapat 117:bfdc807f3d3c 679 }
krishanprajapat 117:bfdc807f3d3c 680 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 681 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 682 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 683 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 684 break;
krishanprajapat 117:bfdc807f3d3c 685 }
krishanprajapat 117:bfdc807f3d3c 686 else if(GETpid(tc_ptr)==0x14)
krishanprajapat 117:bfdc807f3d3c 687 {
krishanprajapat 117:bfdc807f3d3c 688 //printf("TC_SW_ON_PL_DL\r\n"); // call PWR_SWCH_ON function
krishanprajapat 117:bfdc807f3d3c 689 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 690 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 691 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 692 tm_pointer->TM_string[2] = ACKCODE;
krishanprajapat 117:bfdc807f3d3c 693 for(uint8_t i=3;i<11;i++)
krishanprajapat 117:bfdc807f3d3c 694 {
krishanprajapat 117:bfdc807f3d3c 695 tm_pointer->TM_string[i] = 0;
krishanprajapat 117:bfdc807f3d3c 696 }
krishanprajapat 117:bfdc807f3d3c 697 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 698 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 699 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 700 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 701 break;
krishanprajapat 117:bfdc807f3d3c 702 }
krishanprajapat 117:bfdc807f3d3c 703 else if(GETpid(tc_ptr)==0x15)
krishanprajapat 117:bfdc807f3d3c 704 {
krishanprajapat 117:bfdc807f3d3c 705 //printf("TC_SW_ON_PL_AG_HV\r\n"); // call PWR_SWCH_ON function
krishanprajapat 117:bfdc807f3d3c 706 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 707 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 708 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 709 tm_pointer->TM_string[2] = ACKCODE;
krishanprajapat 117:bfdc807f3d3c 710 for(uint8_t i=3;i<11;i++)
krishanprajapat 117:bfdc807f3d3c 711 {
krishanprajapat 117:bfdc807f3d3c 712 tm_pointer->TM_string[i] = 0;
krishanprajapat 117:bfdc807f3d3c 713 }
krishanprajapat 117:bfdc807f3d3c 714 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 715 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 716 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 717 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 718 break;
krishanprajapat 117:bfdc807f3d3c 719 }
krishanprajapat 117:bfdc807f3d3c 720 else if(GETpid(tc_ptr)==0x16)
krishanprajapat 117:bfdc807f3d3c 721 {
krishanprajapat 117:bfdc807f3d3c 722 //printf("TC_SW_ON_V_A_EN\r\n"); // call PWR_SWCH_ON function
krishanprajapat 117:bfdc807f3d3c 723 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 724 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 725 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 726 tm_pointer->TM_string[2] = ACKCODE;
krishanprajapat 117:bfdc807f3d3c 727 for(uint8_t i=3;i<11;i++)
krishanprajapat 117:bfdc807f3d3c 728 {
krishanprajapat 117:bfdc807f3d3c 729 tm_pointer->TM_string[i] = 0;
krishanprajapat 117:bfdc807f3d3c 730 }
krishanprajapat 117:bfdc807f3d3c 731 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 732 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 733 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 734 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 735 break;
krishanprajapat 117:bfdc807f3d3c 736 }
krishanprajapat 117:bfdc807f3d3c 737 else if(GETpid(tc_ptr)==0x21)
krishanprajapat 117:bfdc807f3d3c 738 {
krishanprajapat 117:bfdc807f3d3c 739 //printf("TC_SW_OFF_SD\r\n"); // call PWR_SWCH_ON function
krishanprajapat 117:bfdc807f3d3c 740 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 741 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 742 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 743 tm_pointer->TM_string[2] = ACKCODE;
krishanprajapat 117:bfdc807f3d3c 744 for(uint8_t i=3;i<11;i++)
krishanprajapat 117:bfdc807f3d3c 745 {
krishanprajapat 117:bfdc807f3d3c 746 tm_pointer->TM_string[i] = 0;
krishanprajapat 117:bfdc807f3d3c 747 }
krishanprajapat 117:bfdc807f3d3c 748 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 749 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 750 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 751 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 752 break;
krishanprajapat 117:bfdc807f3d3c 753 }
krishanprajapat 117:bfdc807f3d3c 754 else if(GETpid(tc_ptr)==0x22)
krishanprajapat 117:bfdc807f3d3c 755 {
krishanprajapat 117:bfdc807f3d3c 756 //printf("TC_SW_OFF_RTC\r\n"); // call PWR_SWCH_ON function
krishanprajapat 117:bfdc807f3d3c 757 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 758 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 759 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 760 tm_pointer->TM_string[2] = ACKCODE;
krishanprajapat 117:bfdc807f3d3c 761 for(uint8_t i=3;i<11;i++)
krishanprajapat 117:bfdc807f3d3c 762 {
krishanprajapat 117:bfdc807f3d3c 763 tm_pointer->TM_string[i] = 0;
krishanprajapat 117:bfdc807f3d3c 764 }
krishanprajapat 117:bfdc807f3d3c 765 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 766 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 767 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 768 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 769 break;
krishanprajapat 117:bfdc807f3d3c 770 }
krishanprajapat 117:bfdc807f3d3c 771 else if(GETpid(tc_ptr)==0x23)
krishanprajapat 117:bfdc807f3d3c 772 {
krishanprajapat 117:bfdc807f3d3c 773 //printf("TC_SW_OFF_BAE\r\n"); // call PWR_SWCH_ON function
krishanprajapat 117:bfdc807f3d3c 774 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 775 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 776 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 777 tm_pointer->TM_string[2] = ACKCODE;
krishanprajapat 117:bfdc807f3d3c 778 for(uint8_t i=3;i<11;i++)
krishanprajapat 117:bfdc807f3d3c 779 {
krishanprajapat 117:bfdc807f3d3c 780 tm_pointer->TM_string[i] = 0;
krishanprajapat 117:bfdc807f3d3c 781 }
krishanprajapat 117:bfdc807f3d3c 782 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 783 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 784 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 785 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 786 break;
krishanprajapat 117:bfdc807f3d3c 787 }
krishanprajapat 117:bfdc807f3d3c 788 else if(GETpid(tc_ptr)==0x24)
krishanprajapat 117:bfdc807f3d3c 789 {
krishanprajapat 117:bfdc807f3d3c 790 //printf("TC_SW_OFF_PL_DL\r\n"); // call PWR_SWCH_ON function
krishanprajapat 117:bfdc807f3d3c 791 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 792 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 793 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 794 tm_pointer->TM_string[2] = ACKCODE;
krishanprajapat 117:bfdc807f3d3c 795 for(uint8_t i=3;i<11;i++)
krishanprajapat 117:bfdc807f3d3c 796 {
krishanprajapat 117:bfdc807f3d3c 797 tm_pointer->TM_string[i] = 0;
krishanprajapat 117:bfdc807f3d3c 798 }
krishanprajapat 117:bfdc807f3d3c 799 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 800 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 801 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 802 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 803 break;
krishanprajapat 117:bfdc807f3d3c 804 }
krishanprajapat 117:bfdc807f3d3c 805 else if(GETpid(tc_ptr)==0x25)
krishanprajapat 117:bfdc807f3d3c 806 {
krishanprajapat 117:bfdc807f3d3c 807 //printf("TC_SW_OFF_PL_AG_HV\r\n"); // call PWR_SWCH_ON function
krishanprajapat 117:bfdc807f3d3c 808 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 809 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 810 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 811 tm_pointer->TM_string[2] = ACKCODE;
krishanprajapat 117:bfdc807f3d3c 812 for(uint8_t i=3;i<11;i++)
krishanprajapat 117:bfdc807f3d3c 813 {
krishanprajapat 117:bfdc807f3d3c 814 tm_pointer->TM_string[i] = 0;
krishanprajapat 117:bfdc807f3d3c 815 }
krishanprajapat 117:bfdc807f3d3c 816 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 817 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 818 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 819 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 820 break;
krishanprajapat 117:bfdc807f3d3c 821 }
krishanprajapat 117:bfdc807f3d3c 822 else if(GETpid(tc_ptr)==0x26)
krishanprajapat 117:bfdc807f3d3c 823 {
krishanprajapat 117:bfdc807f3d3c 824 //printf("TC_SW_OFF_V_A_EN\r\n"); // call PWR_SWCH_ON function
krishanprajapat 117:bfdc807f3d3c 825 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 826 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 827 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 828 tm_pointer->TM_string[2] = ACKCODE;
krishanprajapat 117:bfdc807f3d3c 829 for(uint8_t i=3;i<11;i++)
krishanprajapat 117:bfdc807f3d3c 830 {
krishanprajapat 117:bfdc807f3d3c 831 tm_pointer->TM_string[i] = 0;
krishanprajapat 117:bfdc807f3d3c 832 }
krishanprajapat 117:bfdc807f3d3c 833 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 834 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 835 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 836 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 837 break;
krishanprajapat 117:bfdc807f3d3c 838 }
krishanprajapat 117:bfdc807f3d3c 839 else if(GETpid(tc_ptr)==0x31)
krishanprajapat 117:bfdc807f3d3c 840 {
krishanprajapat 117:bfdc807f3d3c 841 //printf("TC_RST_SD\r\n"); // call PWR_SWCH_ON function
krishanprajapat 117:bfdc807f3d3c 842 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 843 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 844 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 845 tm_pointer->TM_string[2] = ACKCODE;
krishanprajapat 117:bfdc807f3d3c 846 for(uint8_t i=3;i<11;i++)
krishanprajapat 117:bfdc807f3d3c 847 {
krishanprajapat 117:bfdc807f3d3c 848 tm_pointer->TM_string[i] = 0;
krishanprajapat 117:bfdc807f3d3c 849 }
krishanprajapat 117:bfdc807f3d3c 850 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 851 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 852 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 853 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 854 break;
krishanprajapat 117:bfdc807f3d3c 855 }
krishanprajapat 117:bfdc807f3d3c 856 else if(GETpid(tc_ptr)==0x32)
krishanprajapat 117:bfdc807f3d3c 857 {
krishanprajapat 117:bfdc807f3d3c 858 //printf("TC_RST_RTC\r\n"); // call PWR_SWCH_ON function
krishanprajapat 117:bfdc807f3d3c 859 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 860 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 861 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 862 tm_pointer->TM_string[2] = ACKCODE;
krishanprajapat 117:bfdc807f3d3c 863 for(uint8_t i=3;i<11;i++)
krishanprajapat 117:bfdc807f3d3c 864 {
krishanprajapat 117:bfdc807f3d3c 865 tm_pointer->TM_string[i] = 0;
krishanprajapat 117:bfdc807f3d3c 866 }
krishanprajapat 117:bfdc807f3d3c 867 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 868 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 869 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 870 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 871 break;
krishanprajapat 117:bfdc807f3d3c 872 }
krishanprajapat 117:bfdc807f3d3c 873 else if(GETpid(tc_ptr)==0x33)
krishanprajapat 117:bfdc807f3d3c 874 {
krishanprajapat 117:bfdc807f3d3c 875 //printf("TC_RST_BAE\r\n"); // call PWR_SWCH_ON function
krishanprajapat 117:bfdc807f3d3c 876 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 877 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 878 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 879 tm_pointer->TM_string[2] = ACKCODE;
krishanprajapat 117:bfdc807f3d3c 880 for(uint8_t i=3;i<11;i++)
krishanprajapat 117:bfdc807f3d3c 881 {
krishanprajapat 117:bfdc807f3d3c 882 tm_pointer->TM_string[i] = 0;
krishanprajapat 117:bfdc807f3d3c 883 }
krishanprajapat 117:bfdc807f3d3c 884 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 885 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 886 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 887 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 888 break;
krishanprajapat 117:bfdc807f3d3c 889 }
krishanprajapat 117:bfdc807f3d3c 890 else if(GETpid(tc_ptr)==0x34)
krishanprajapat 117:bfdc807f3d3c 891 {
krishanprajapat 117:bfdc807f3d3c 892 //printf("TC_RST_PL_DL\r\n"); // call PWR_SWCH_ON function
krishanprajapat 117:bfdc807f3d3c 893 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 894 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 895 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 896 tm_pointer->TM_string[2] = ACKCODE;
krishanprajapat 117:bfdc807f3d3c 897 for(uint8_t i=3;i<11;i++)
krishanprajapat 117:bfdc807f3d3c 898 {
krishanprajapat 117:bfdc807f3d3c 899 tm_pointer->TM_string[i] = 0;
krishanprajapat 117:bfdc807f3d3c 900 }
krishanprajapat 117:bfdc807f3d3c 901 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 902 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 903 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 904 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 905 break;
krishanprajapat 117:bfdc807f3d3c 906 break;
krishanprajapat 117:bfdc807f3d3c 907 }
krishanprajapat 117:bfdc807f3d3c 908 else if(GETpid(tc_ptr)==0xC1)
krishanprajapat 117:bfdc807f3d3c 909 {
krishanprajapat 117:bfdc807f3d3c 910 //printf("RESET_HK_COUNTER\r\n"); // call PWR_SWCH_ON function
krishanprajapat 117:bfdc807f3d3c 911 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 912 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 913 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 914 tm_pointer->TM_string[2] = ACKCODE;
krishanprajapat 117:bfdc807f3d3c 915 for(uint8_t i=3;i<11;i++)
krishanprajapat 117:bfdc807f3d3c 916 {
krishanprajapat 117:bfdc807f3d3c 917 tm_pointer->TM_string[i] = 0;
krishanprajapat 117:bfdc807f3d3c 918 }
krishanprajapat 117:bfdc807f3d3c 919 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 920 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 921 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 922 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 923 break;
krishanprajapat 117:bfdc807f3d3c 924 }
krishanprajapat 117:bfdc807f3d3c 925 else if(GETpid(tc_ptr)==0xF1)
krishanprajapat 117:bfdc807f3d3c 926 {
krishanprajapat 117:bfdc807f3d3c 927 //printf("RD_RTC\r\n"); //call RD_RTC
krishanprajapat 117:bfdc807f3d3c 928 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 929 tm_pointer->TM_string[0] = 0xD0;
krishanprajapat 117:bfdc807f3d3c 930 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 931 tm_pointer->TM_string[2] = 0x01;
krishanprajapat 117:bfdc807f3d3c 932 uint64_t time = FCTN_CDMS_RD_RTC();
krishanprajapat 117:bfdc807f3d3c 933 tm_pointer->TM_string[3] = (uint8_t)((time&0xFF00000000000000)>>56);
krishanprajapat 117:bfdc807f3d3c 934 tm_pointer->TM_string[4] = (uint8_t)((time&0x00FF000000000000)>>48);
krishanprajapat 117:bfdc807f3d3c 935 tm_pointer->TM_string[5] = (uint8_t)((time&0x0000FF0000000000)>>40);
krishanprajapat 117:bfdc807f3d3c 936 tm_pointer->TM_string[6] = (uint8_t)((time&0x000000FF00000000)>>32);
krishanprajapat 117:bfdc807f3d3c 937 tm_pointer->TM_string[7] = (uint8_t)((time&0x00000000FF000000)>>24);
krishanprajapat 117:bfdc807f3d3c 938 tm_pointer->TM_string[8] = (uint8_t)((time&0x0000000000FF0000)>>16);
krishanprajapat 117:bfdc807f3d3c 939 tm_pointer->TM_string[9] = (uint8_t)((time&0x000000000000FF00)>>8);
krishanprajapat 117:bfdc807f3d3c 940 tm_pointer->TM_string[10] = (uint8_t)(time&0x00000000000000FF);
krishanprajapat 117:bfdc807f3d3c 941 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 942 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 943 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 944 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 945 }
krishanprajapat 117:bfdc807f3d3c 946 else
krishanprajapat 117:bfdc807f3d3c 947 {
krishanprajapat 117:bfdc807f3d3c 948 //printf("INVALID TC\r\n");
krishanprajapat 117:bfdc807f3d3c 949 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 950 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 951 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 952 tm_pointer->TM_string[2] = 0x01;
krishanprajapat 117:bfdc807f3d3c 953 tm_pointer->TM_string[3] = ACKCODE; //ackcode to be decided
krishanprajapat 117:bfdc807f3d3c 954 tm_pointer->TM_string[4] = 0x01;
krishanprajapat 117:bfdc807f3d3c 955 for(uint8_t i=0;i<6;i++)
krishanprajapat 117:bfdc807f3d3c 956 {
krishanprajapat 117:bfdc807f3d3c 957 tm_pointer->TM_string[i+5] = 0;
krishanprajapat 117:bfdc807f3d3c 958 }
krishanprajapat 117:bfdc807f3d3c 959 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 960 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 961 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 962 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 963 }
krishanprajapat 117:bfdc807f3d3c 964 }
krishanprajapat 117:bfdc807f3d3c 965
krishanprajapat 117:bfdc807f3d3c 966
krishanprajapat 117:bfdc807f3d3c 967 }
krishanprajapat 117:bfdc807f3d3c 968 default:
krishanprajapat 117:bfdc807f3d3c 969 {
krishanprajapat 117:bfdc807f3d3c 970 //printf("INVALID TC"); //send invalid TC TM
krishanprajapat 117:bfdc807f3d3c 971 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 972 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 973 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 974 tm_pointer->TM_string[2] = 0x01;
krishanprajapat 117:bfdc807f3d3c 975 tm_pointer->TM_string[3] = ACKCODE; //ackcode to be decided
krishanprajapat 117:bfdc807f3d3c 976 tm_pointer->TM_string[4] = 0x01;
krishanprajapat 117:bfdc807f3d3c 977 for(uint8_t i=0;i<6;i++)
krishanprajapat 117:bfdc807f3d3c 978 {
krishanprajapat 117:bfdc807f3d3c 979 tm_pointer->TM_string[i+5] = 0;
krishanprajapat 117:bfdc807f3d3c 980 }
krishanprajapat 117:bfdc807f3d3c 981 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 982 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 983 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 984 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 985 break;
krishanprajapat 117:bfdc807f3d3c 986 }
krishanprajapat 117:bfdc807f3d3c 987 }
krishanprajapat 117:bfdc807f3d3c 988 }
krishanprajapat 117:bfdc807f3d3c 989 case 3:
krishanprajapat 117:bfdc807f3d3c 990 {
krishanprajapat 117:bfdc807f3d3c 991 //printf("Telecommand is for PL\r\n");
krishanprajapat 117:bfdc807f3d3c 992 // printf("Informing PL about TC using I2C\r\n"); //interrupt to be sent to the bae
krishanprajapat 117:bfdc807f3d3c 993 // FCTN_I2C_WRITE((char*)tc_ptr->TC_string);
krishanprajapat 117:bfdc807f3d3c 994 // printf("sent the Telecommand to BAE\r\n"); //packet along with crc will be sent when bae is ready
krishanprajapat 117:bfdc807f3d3c 995 // wait(1); //wait time is to be optimised
krishanprajapat 117:bfdc807f3d3c 996 // if(tm_status_4m_slv == 1)
krishanprajapat 117:bfdc807f3d3c 997 // {
krishanprajapat 117:bfdc807f3d3c 998 // FCTN_I2C_READ((char*)tm_ptr->TM_string);
krishanprajapat 117:bfdc807f3d3c 999 // received = 1;
krishanprajapat 117:bfdc807f3d3c 1000 // }
krishanprajapat 117:bfdc807f3d3c 1001 // if(received == 1 )
krishanprajapat 117:bfdc807f3d3c 1002 // {
krishanprajapat 117:bfdc807f3d3c 1003 // printf("Telemetry is received from BAE\r\n");
krishanprajapat 117:bfdc807f3d3c 1004 // printf("%s", tm_ptr->TM_string);
krishanprajapat 117:bfdc807f3d3c 1005 // received = 0;
krishanprajapat 117:bfdc807f3d3c 1006 // } // similar to BAE functions
krishanprajapat 117:bfdc807f3d3c 1007 break;
krishanprajapat 117:bfdc807f3d3c 1008 }
krishanprajapat 117:bfdc807f3d3c 1009 default: //invalid TC
krishanprajapat 117:bfdc807f3d3c 1010 {
krishanprajapat 117:bfdc807f3d3c 1011 //printf("INVALID TC\r\n");
krishanprajapat 117:bfdc807f3d3c 1012 //tm_pointer = new Short_tm;
krishanprajapat 117:bfdc807f3d3c 1013 tm_pointer->TM_string[0] = 0xB0;
krishanprajapat 117:bfdc807f3d3c 1014 tm_pointer->TM_string[1] = GETpacket_seq_count(tc_ptr);
krishanprajapat 117:bfdc807f3d3c 1015 tm_pointer->TM_string[2] = 0x01;
krishanprajapat 117:bfdc807f3d3c 1016 tm_pointer->TM_string[3] = ACKCODE; //ackcode to be decided
krishanprajapat 117:bfdc807f3d3c 1017 tm_pointer->TM_string[4] = 0x01;
krishanprajapat 117:bfdc807f3d3c 1018 for(uint8_t i=0;i<6;i++)
krishanprajapat 117:bfdc807f3d3c 1019 {
krishanprajapat 117:bfdc807f3d3c 1020 tm_pointer->TM_string[i+5] = 0;
krishanprajapat 117:bfdc807f3d3c 1021 }
krishanprajapat 117:bfdc807f3d3c 1022 crc16 = crc16_gen(tm_ptr->TM_string,11);
krishanprajapat 117:bfdc807f3d3c 1023 tm_pointer->TM_string[11] = (uint8_t)((crc16&0xFF00)>>8);
krishanprajapat 117:bfdc807f3d3c 1024 tm_pointer->TM_string[12] = (uint8_t)(crc16&0x00FF);
krishanprajapat 117:bfdc807f3d3c 1025 tm_pointer->next_TM = NULL; return tm_ptr;
krishanprajapat 117:bfdc807f3d3c 1026 break;
krishanprajapat 117:bfdc807f3d3c 1027 }
krishanprajapat 117:bfdc807f3d3c 1028 }
krishanprajapat 117:bfdc807f3d3c 1029 }
krishanprajapat 117:bfdc807f3d3c 1030 // CDMS TEAM CODE END
krishanprajapat 117:bfdc807f3d3c 1031 // EXECUTE OBOSC
krishanprajapat 117:bfdc807f3d3c 1032 #define execute_obosc_core(tc_ptr, tm_ptr, reset_flag) {\
krishanprajapat 117:bfdc807f3d3c 1033 uint8_t service_subtype = (tc_ptr->TC_string[2]) & 0x0F;\
krishanprajapat 117:bfdc807f3d3c 1034 uint8_t temp8 = 0x00;\
krishanprajapat 117:bfdc807f3d3c 1035 Base_tc *modify_this = gHEAD_NODE_TCL;\
krishanprajapat 117:bfdc807f3d3c 1036 int modify_overflow = 0x00;\
krishanprajapat 117:bfdc807f3d3c 1037 switch( service_subtype ){\
krishanprajapat 117:bfdc807f3d3c 1038 case OBOSC_SUB_DISABLE:\
krishanprajapat 117:bfdc807f3d3c 1039 /*gPC.puts("target psc are ");*/\
krishanprajapat 117:bfdc807f3d3c 1040 for(int i = 3 ; i < 9 ; ++i){\
krishanprajapat 117:bfdc807f3d3c 1041 /*gPC.printf("%u ", tc_ptr->TC_string[i]);*/\
krishanprajapat 117:bfdc807f3d3c 1042 }\
krishanprajapat 117:bfdc807f3d3c 1043 /*gPC.puts("\r\n");*/\
krishanprajapat 117:bfdc807f3d3c 1044 /*gPC.puts("disable type obosc\r\n");*/\
krishanprajapat 117:bfdc807f3d3c 1045 while( modify_this != NULL ){\
krishanprajapat 117:bfdc807f3d3c 1046 if( modify_overflow < TCL_OVERFLOW_CONSTANT ){\
krishanprajapat 117:bfdc807f3d3c 1047 uint8_t modify_psc = GETpacket_seq_count(modify_this);\
krishanprajapat 117:bfdc807f3d3c 1048 /*gPC.printf("mosify_psc = %u\r\n", modify_psc);*/\
krishanprajapat 117:bfdc807f3d3c 1049 for( int i = 3 ; i < 9 ; ++i ){\
krishanprajapat 117:bfdc807f3d3c 1050 uint8_t target_psc = tc_ptr->TC_string[i];\
krishanprajapat 117:bfdc807f3d3c 1051 if( (target_psc == modify_psc) && (target_psc != 0) ){\
krishanprajapat 117:bfdc807f3d3c 1052 uint16_t tempExec = TC_STATE_DISABLED;\
krishanprajapat 117:bfdc807f3d3c 1053 PUTexec_status( modify_this, tempExec );\
krishanprajapat 117:bfdc807f3d3c 1054 break;\
krishanprajapat 117:bfdc807f3d3c 1055 }\
krishanprajapat 117:bfdc807f3d3c 1056 }\
krishanprajapat 117:bfdc807f3d3c 1057 modify_this = modify_this->next_TC;\
krishanprajapat 117:bfdc807f3d3c 1058 ++modify_overflow;\
krishanprajapat 117:bfdc807f3d3c 1059 }\
krishanprajapat 117:bfdc807f3d3c 1060 else{\
krishanprajapat 117:bfdc807f3d3c 1061 /*PENDING: RESET CDMS*/\
krishanprajapat 117:bfdc807f3d3c 1062 break;\
krishanprajapat 117:bfdc807f3d3c 1063 }\
krishanprajapat 117:bfdc807f3d3c 1064 }\
krishanprajapat 117:bfdc807f3d3c 1065 break;\
krishanprajapat 117:bfdc807f3d3c 1066 case OBOSC_SUB_RETRY:\
krishanprajapat 117:bfdc807f3d3c 1067 /*gPC.puts("retry type obosc\r\n");*/\
krishanprajapat 117:bfdc807f3d3c 1068 while( modify_this != NULL ){\
krishanprajapat 117:bfdc807f3d3c 1069 if( modify_overflow < TCL_OVERFLOW_CONSTANT ){\
krishanprajapat 117:bfdc807f3d3c 1070 uint8_t modify_psc = GETpacket_seq_count(modify_this);\
krishanprajapat 117:bfdc807f3d3c 1071 for( int i = 3 ; i < 9 ; ++i ){\
krishanprajapat 117:bfdc807f3d3c 1072 uint8_t target_psc = tc_ptr->TC_string[i];\
krishanprajapat 117:bfdc807f3d3c 1073 if( (target_psc == modify_psc) && (target_psc != 0) ){\
krishanprajapat 117:bfdc807f3d3c 1074 uint16_t tempExec = TC_STATE_MARKED_RETRY;\
krishanprajapat 117:bfdc807f3d3c 1075 PUTexec_status( modify_this, tempExec );\
krishanprajapat 117:bfdc807f3d3c 1076 /*gPC.puts("reqquired tc found: disable\r\n");*/\
krishanprajapat 117:bfdc807f3d3c 1077 break;\
krishanprajapat 117:bfdc807f3d3c 1078 }\
krishanprajapat 117:bfdc807f3d3c 1079 }\
krishanprajapat 117:bfdc807f3d3c 1080 modify_this = modify_this->next_TC;\
krishanprajapat 117:bfdc807f3d3c 1081 ++modify_overflow;\
krishanprajapat 117:bfdc807f3d3c 1082 }\
krishanprajapat 117:bfdc807f3d3c 1083 else{\
krishanprajapat 117:bfdc807f3d3c 1084 /*PENDING: RESET CDMS*/\
krishanprajapat 117:bfdc807f3d3c 1085 break;\
krishanprajapat 117:bfdc807f3d3c 1086 }\
krishanprajapat 117:bfdc807f3d3c 1087 }\
krishanprajapat 117:bfdc807f3d3c 1088 break;\
krishanprajapat 117:bfdc807f3d3c 1089 }\
krishanprajapat 117:bfdc807f3d3c 1090 Base_tm *ackl234new = new Short_tm;\
krishanprajapat 117:bfdc807f3d3c 1091 ackl234new->next_TM = NULL;\
krishanprajapat 117:bfdc807f3d3c 1092 /*return telemetry pointer here*/\
krishanprajapat 117:bfdc807f3d3c 1093 tm_ptr = ackl234new;\
krishanprajapat 117:bfdc807f3d3c 1094 ackl234new->TM_string[0] = TMID_ACK_L234 << 4;\
krishanprajapat 117:bfdc807f3d3c 1095 ackl234new->TM_string[1] = GETpacket_seq_count(tc_ptr);\
krishanprajapat 117:bfdc807f3d3c 1096 ackl234new->TM_string[2] = 0xA0;\
krishanprajapat 117:bfdc807f3d3c 1097 for(int i = 3; i < 11; ++i){\
krishanprajapat 117:bfdc807f3d3c 1098 ackl234new->TM_string[i] = 0x00;\
krishanprajapat 117:bfdc807f3d3c 1099 }\
krishanprajapat 117:bfdc807f3d3c 1100 uint16_t crc = crc16_gen(ackl234new->TM_string, TM_SHORT_SIZE-2);\
krishanprajapat 117:bfdc807f3d3c 1101 ackl234new->TM_string[11] = (crc & 0xFF00) >> 8;\
krishanprajapat 117:bfdc807f3d3c 1102 ackl234new->TM_string[12] = crc & 0x00FF;\
krishanprajapat 117:bfdc807f3d3c 1103 /*ack l234 old*/\
krishanprajapat 117:bfdc807f3d3c 1104 if( service_subtype == OBOSC_SUB_REP_LE ){\
krishanprajapat 117:bfdc807f3d3c 1105 if( gLAST_TM_SHORT_OR_LONG == SHORT_TM_CODE ){\
krishanprajapat 117:bfdc807f3d3c 1106 Base_tm *ackl234old = new Short_tm;\
krishanprajapat 117:bfdc807f3d3c 1107 ackl234old->next_TM = NULL;\
krishanprajapat 117:bfdc807f3d3c 1108 /*APPEND TO ACK L234 NEW HERE*/\
krishanprajapat 117:bfdc807f3d3c 1109 ackl234new->next_TM = ackl234old;\
krishanprajapat 117:bfdc807f3d3c 1110 for( int i = 0 ; i < TM_SHORT_SIZE ; ++i ){\
krishanprajapat 117:bfdc807f3d3c 1111 ackl234old->TM_string[i] = gLAST_TM[i];\
krishanprajapat 117:bfdc807f3d3c 1112 }\
krishanprajapat 117:bfdc807f3d3c 1113 }\
krishanprajapat 117:bfdc807f3d3c 1114 else{\
krishanprajapat 117:bfdc807f3d3c 1115 Base_tm *tempLongTM = new Long_tm;\
krishanprajapat 117:bfdc807f3d3c 1116 tempLongTM->next_TM = NULL;\
krishanprajapat 117:bfdc807f3d3c 1117 /*APPEND TO ACK L234 NEW HERE*/\
krishanprajapat 117:bfdc807f3d3c 1118 ackl234new->next_TM = tempLongTM;\
krishanprajapat 117:bfdc807f3d3c 1119 for( int i = 0 ; i < TM_LONG_SIZE ; ++i ){\
krishanprajapat 117:bfdc807f3d3c 1120 tempLongTM->TM_string[i] = gLAST_TM[i];\
krishanprajapat 117:bfdc807f3d3c 1121 }\
krishanprajapat 117:bfdc807f3d3c 1122 }\
krishanprajapat 117:bfdc807f3d3c 1123 }\
krishanprajapat 117:bfdc807f3d3c 1124 else if( service_subtype == OBOSC_SUB_REP_TCLD ){\
krishanprajapat 117:bfdc807f3d3c 1125 get_tc_list(ackl234new->next_TM, GETpacket_seq_count(tc_ptr));\
krishanprajapat 117:bfdc807f3d3c 1126 }\
krishanprajapat 117:bfdc807f3d3c 1127 else if( service_subtype == OBOSC_SUB_RESET ){\
krishanprajapat 117:bfdc807f3d3c 1128 /*reset_all;*/\
krishanprajapat 117:bfdc807f3d3c 1129 reset_flag = 1;\
krishanprajapat 117:bfdc807f3d3c 1130 /*PENDING: VERIFY reset_all, RESET CDMS*/\
krishanprajapat 117:bfdc807f3d3c 1131 }\
krishanprajapat 117:bfdc807f3d3c 1132 else if( (service_subtype != OBOSC_SUB_DISABLE) && (service_subtype != OBOSC_SUB_RETRY) ){\
krishanprajapat 117:bfdc807f3d3c 1133 /*CHANGE THE ACK CODE TO INVALID TC*/\
krishanprajapat 117:bfdc807f3d3c 1134 ackl234new->TM_string[2] = 0xA2;\
krishanprajapat 117:bfdc807f3d3c 1135 }\
krishanprajapat 117:bfdc807f3d3c 1136 /*gPC.puts("completed obosc\r\n");*/\
krishanprajapat 117:bfdc807f3d3c 1137 }
krishanprajapat 117:bfdc807f3d3c 1138
krishanprajapat 117:bfdc807f3d3c 1139 /*tm_ptr is the next_TM of a linked list, and should have the value NULL, i.e. tm_ptr should be the next_TM pointer of thte last node */
krishanprajapat 117:bfdc807f3d3c 1140 #define get_call_sign(tm_ptr) {\
krishanprajapat 117:bfdc807f3d3c 1141 Base_tm* call_sign_tm = new Short_tm;\
krishanprajapat 117:bfdc807f3d3c 1142 call_sign_tm->next_TM = NULL;\
krishanprajapat 117:bfdc807f3d3c 1143 tm_ptr = call_sign_tm;\
krishanprajapat 117:bfdc807f3d3c 1144 for( int i = 0 ; i < TM_SHORT_SIZE ; ++i ){\
krishanprajapat 117:bfdc807f3d3c 1145 call_sign_tm->TM_string[i] = gCALL_SIGN_STRING[i];\
krishanprajapat 117:bfdc807f3d3c 1146 }\
krishanprajapat 117:bfdc807f3d3c 1147 }
krishanprajapat 117:bfdc807f3d3c 1148
krishanprajapat 117:bfdc807f3d3c 1149 #define EXECUTE_OBOSC_ONLY {\
krishanprajapat 117:bfdc807f3d3c 1150 int reset_flag = 0;\
krishanprajapat 117:bfdc807f3d3c 1151 for(uint8_t execute_psc = PSC_START_VALUE ; execute_psc < gTOTAL_VALID_TC ; ++execute_psc){\
krishanprajapat 117:bfdc807f3d3c 1152 Base_tc* current_TC = gHEAD_NODE_TCL;\
krishanprajapat 117:bfdc807f3d3c 1153 int overCount = 0;\
krishanprajapat 117:bfdc807f3d3c 1154 while( current_TC != NULL ){\
krishanprajapat 117:bfdc807f3d3c 1155 if( overCount < TCL_OVERFLOW_CONSTANT ){\
krishanprajapat 117:bfdc807f3d3c 1156 if( (GETcrc_pass(current_TC) == 1) && (GETpacket_seq_count(current_TC) == execute_psc) ){\
krishanprajapat 117:bfdc807f3d3c 1157 /*CHECK FOR OBOSC*/\
krishanprajapat 117:bfdc807f3d3c 1158 uint8_t temp82 = 0x00;\
krishanprajapat 117:bfdc807f3d3c 1159 isit_obosc(current_TC, temp82);\
krishanprajapat 117:bfdc807f3d3c 1160 if(temp82 == 0x01){\
krishanprajapat 117:bfdc807f3d3c 1161 uint16_t current_exec_status = GETexec_status(current_TC);\
krishanprajapat 117:bfdc807f3d3c 1162 if( (current_exec_status == TC_STATE_SUCCESSFULLY_EXECUTED) || (current_exec_status == TC_STATE_DISABLED) )\
krishanprajapat 117:bfdc807f3d3c 1163 break;\
krishanprajapat 117:bfdc807f3d3c 1164 else if( (current_exec_status == TC_STATE_UNEXECUTED) || (current_exec_status == TC_STATE_MARKED_RETRY) ){\
krishanprajapat 117:bfdc807f3d3c 1165 /*gPC.printf("It is obosc: %u\r\n", execute_psc);*/\
krishanprajapat 117:bfdc807f3d3c 1166 /*EXECUTION OF OBOSC TC*/\
krishanprajapat 117:bfdc807f3d3c 1167 /*WARNING: LARGE MEMORY UTILIZATION FOR TC-LIST-REPORT */\
krishanprajapat 117:bfdc807f3d3c 1168 Base_tm *obosc_tm_head = NULL;\
krishanprajapat 117:bfdc807f3d3c 1169 get_call_sign(obosc_tm_head);\
krishanprajapat 117:bfdc807f3d3c 1170 Base_tm *obosc_tm_core = NULL;\
krishanprajapat 117:bfdc807f3d3c 1171 execute_obosc_core(current_TC, obosc_tm_core, reset_flag);\
krishanprajapat 117:bfdc807f3d3c 1172 uint16_t temp16 = TC_STATE_SUCCESSFULLY_EXECUTED;\
krishanprajapat 117:bfdc807f3d3c 1173 PUTexec_status(current_TC, temp16);\
krishanprajapat 117:bfdc807f3d3c 1174 Base_tm *obosc_tm_current = obosc_tm_head;\
krishanprajapat 117:bfdc807f3d3c 1175 get_ack_l1(obosc_tm_current->next_TM);\
krishanprajapat 117:bfdc807f3d3c 1176 int overflowCountOBONLY = 0;\
krishanprajapat 117:bfdc807f3d3c 1177 while( obosc_tm_current->next_TM != NULL ){\
krishanprajapat 117:bfdc807f3d3c 1178 if( overflowCountOBONLY < TM_OVERFLOW_CONSTANT ){\
krishanprajapat 117:bfdc807f3d3c 1179 obosc_tm_current = obosc_tm_current->next_TM;\
krishanprajapat 117:bfdc807f3d3c 1180 ++overflowCountOBONLY;\
krishanprajapat 117:bfdc807f3d3c 1181 }\
krishanprajapat 117:bfdc807f3d3c 1182 else{\
krishanprajapat 117:bfdc807f3d3c 1183 /*PENDING: RESET CDMS*/\
krishanprajapat 117:bfdc807f3d3c 1184 break;\
krishanprajapat 117:bfdc807f3d3c 1185 }\
krishanprajapat 117:bfdc807f3d3c 1186 }\
krishanprajapat 117:bfdc807f3d3c 1187 obosc_tm_current->next_TM = obosc_tm_core;\
krishanprajapat 117:bfdc807f3d3c 1188 obosc_tm_current = obosc_tm_head;\
krishanprajapat 117:bfdc807f3d3c 1189 while( obosc_tm_current != NULL ){\
krishanprajapat 117:bfdc807f3d3c 1190 int length = TM_SHORT_SIZE;\
krishanprajapat 117:bfdc807f3d3c 1191 if( GETshort_or_long_tm(obosc_tm_current) == SHORT_TM_CODE ){\
krishanprajapat 117:bfdc807f3d3c 1192 length = TM_SHORT_SIZE;\
krishanprajapat 117:bfdc807f3d3c 1193 }\
krishanprajapat 117:bfdc807f3d3c 1194 else{\
krishanprajapat 117:bfdc807f3d3c 1195 length = TM_LONG_SIZE;\
krishanprajapat 117:bfdc807f3d3c 1196 }\
krishanprajapat 117:bfdc807f3d3c 1197 for(int i = 0 ; i < length ; ++i){\
krishanprajapat 117:bfdc807f3d3c 1198 /*gPC.putc(obosc_tm_current->TM_string[i]);*/\
krishanprajapat 117:bfdc807f3d3c 1199 }\
krishanprajapat 117:bfdc807f3d3c 1200 obosc_tm_current = obosc_tm_current->next_TM;\
krishanprajapat 117:bfdc807f3d3c 1201 }\
krishanprajapat 117:bfdc807f3d3c 1202 /*Sending OBOSC TM to GS*/\
krishanprajapat 117:bfdc807f3d3c 1203 /*snd_tm.head_pointer(obosc_tm_head);*/\
krishanprajapat 117:bfdc807f3d3c 1204 /*transmit_adf;*/\
krishanprajapat 117:bfdc807f3d3c 1205 /*DELETE THE TM AFTER USE*/\
krishanprajapat 117:bfdc807f3d3c 1206 obosc_tm_current = obosc_tm_head;\
krishanprajapat 117:bfdc807f3d3c 1207 int overCount = 0;\
krishanprajapat 117:bfdc807f3d3c 1208 while( obosc_tm_current != NULL ){\
krishanprajapat 117:bfdc807f3d3c 1209 if( (overCount < TM_OVERFLOW_CONSTANT) ){\
krishanprajapat 117:bfdc807f3d3c 1210 Base_tm *temp = obosc_tm_current->next_TM;\
krishanprajapat 117:bfdc807f3d3c 1211 delete obosc_tm_current;\
krishanprajapat 117:bfdc807f3d3c 1212 obosc_tm_current = temp;\
krishanprajapat 117:bfdc807f3d3c 1213 ++overCount;\
krishanprajapat 117:bfdc807f3d3c 1214 }\
krishanprajapat 117:bfdc807f3d3c 1215 else{\
krishanprajapat 117:bfdc807f3d3c 1216 /*PENDING: RESET CDMS: MEMORY LEAK FOUND*/\
krishanprajapat 117:bfdc807f3d3c 1217 break;\
krishanprajapat 117:bfdc807f3d3c 1218 }\
krishanprajapat 117:bfdc807f3d3c 1219 }\
krishanprajapat 117:bfdc807f3d3c 1220 if ( reset_flag ==1 ){\
krishanprajapat 117:bfdc807f3d3c 1221 reset_all;\
krishanprajapat 117:bfdc807f3d3c 1222 }\
krishanprajapat 117:bfdc807f3d3c 1223 }\
krishanprajapat 117:bfdc807f3d3c 1224 }\
krishanprajapat 117:bfdc807f3d3c 1225 }\
krishanprajapat 117:bfdc807f3d3c 1226 current_TC = current_TC->next_TC;\
krishanprajapat 117:bfdc807f3d3c 1227 ++overCount;\
krishanprajapat 117:bfdc807f3d3c 1228 }\
krishanprajapat 117:bfdc807f3d3c 1229 else{\
krishanprajapat 117:bfdc807f3d3c 1230 /*PENDING: REST CDMS: MEMORY LEAK FOUND*/\
krishanprajapat 117:bfdc807f3d3c 1231 break;\
krishanprajapat 117:bfdc807f3d3c 1232 }\
krishanprajapat 117:bfdc807f3d3c 1233 }\
krishanprajapat 117:bfdc807f3d3c 1234 }\
krishanprajapat 117:bfdc807f3d3c 1235 }
krishanprajapat 117:bfdc807f3d3c 1236
krishanprajapat 117:bfdc807f3d3c 1237 #define EXECUTE_TC {\
krishanprajapat 117:bfdc807f3d3c 1238 gMASTER_STATE = TCL_STATE_EXECUTING;\
krishanprajapat 117:bfdc807f3d3c 1239 /*gPC.printf("%u\r\n", gTOTAL_VALID_TC);*/\
krishanprajapat 117:bfdc807f3d3c 1240 for(uint8_t execute_psc = PSC_START_VALUE ; execute_psc < gTOTAL_VALID_TC ; ++execute_psc ){\
krishanprajapat 117:bfdc807f3d3c 1241 /*gPC.printf("executing normal %u\r\n", execute_psc);*/\
krishanprajapat 117:bfdc807f3d3c 1242 /*gLEDG = !gLEDG;*/\
krishanprajapat 117:bfdc807f3d3c 1243 /*gLEDR = !gLEDR;*/\
krishanprajapat 117:bfdc807f3d3c 1244 Base_tc* current_TC = gHEAD_NODE_TCL;\
krishanprajapat 117:bfdc807f3d3c 1245 int overflowCount = 0;\
krishanprajapat 117:bfdc807f3d3c 1246 while(current_TC != NULL){\
krishanprajapat 117:bfdc807f3d3c 1247 if( overflowCount < TCL_OVERFLOW_CONSTANT ){\
krishanprajapat 117:bfdc807f3d3c 1248 if( (GETcrc_pass(current_TC) == 1) && (GETpacket_seq_count(current_TC) == execute_psc) ){\
krishanprajapat 117:bfdc807f3d3c 1249 uint8_t current_exec_status = GETexec_status(current_TC);\
krishanprajapat 117:bfdc807f3d3c 1250 if( (current_exec_status == TC_STATE_SUCCESSFULLY_EXECUTED) || (current_exec_status == TC_STATE_DISABLED) ){\
krishanprajapat 117:bfdc807f3d3c 1251 /*gPC.printf("disabled or completed at %u\n", execute_psc);*/\
krishanprajapat 117:bfdc807f3d3c 1252 break;\
krishanprajapat 117:bfdc807f3d3c 1253 }\
krishanprajapat 117:bfdc807f3d3c 1254 else if( (current_exec_status == TC_STATE_EXECUTION_FAILED) && (GETabort_on_nack(current_TC) == 1) ){\
krishanprajapat 117:bfdc807f3d3c 1255 /*gPC.printf("abort on nack at %u psc\r\n", execute_psc);*/\
krishanprajapat 117:bfdc807f3d3c 1256 gMASTER_STATE = TCL_STATE_ABORTED;\
krishanprajapat 117:bfdc807f3d3c 1257 Base_tm *tm_ptr_head = NULL;\
krishanprajapat 117:bfdc807f3d3c 1258 get_call_sign(tm_ptr_head);\
krishanprajapat 117:bfdc807f3d3c 1259 Base_tm *tm_ptr = tm_ptr_head;\
krishanprajapat 117:bfdc807f3d3c 1260 get_ack_l1(tm_ptr->next_TM);\
krishanprajapat 117:bfdc807f3d3c 1261 tm_ptr = tm_ptr_head;\
krishanprajapat 117:bfdc807f3d3c 1262 while( tm_ptr != NULL ){\
krishanprajapat 117:bfdc807f3d3c 1263 int length = TM_SHORT_SIZE;\
krishanprajapat 117:bfdc807f3d3c 1264 if( GETshort_or_long_tm(tm_ptr) == SHORT_TM_CODE ){\
krishanprajapat 117:bfdc807f3d3c 1265 length = TM_SHORT_SIZE;\
krishanprajapat 117:bfdc807f3d3c 1266 }\
krishanprajapat 117:bfdc807f3d3c 1267 else{\
krishanprajapat 117:bfdc807f3d3c 1268 length = TM_LONG_SIZE;\
krishanprajapat 117:bfdc807f3d3c 1269 }\
krishanprajapat 117:bfdc807f3d3c 1270 /*gPC.puts("Printing Call Sign, ACK_L1, TM list");*/\
krishanprajapat 117:bfdc807f3d3c 1271 for(int i = 0 ; i < length ; ++i){\
krishanprajapat 117:bfdc807f3d3c 1272 /*gPC.putc(tm_ptr->TM_string[i]);*/\
krishanprajapat 117:bfdc807f3d3c 1273 }\
krishanprajapat 117:bfdc807f3d3c 1274 tm_ptr = tm_ptr->next_TM;\
krishanprajapat 117:bfdc807f3d3c 1275 }\
krishanprajapat 117:bfdc807f3d3c 1276 /*Send only call sign, ACK_L1 to GS*/\
krishanprajapat 117:bfdc807f3d3c 1277 /*snd_tm.head_pointer(tm_ptr_head);*/\
krishanprajapat 117:bfdc807f3d3c 1278 /*transmit_adf;*/\
krishanprajapat 117:bfdc807f3d3c 1279 /*DELETE THE TM AFTER USE*/\
krishanprajapat 117:bfdc807f3d3c 1280 tm_ptr = tm_ptr_head;\
krishanprajapat 117:bfdc807f3d3c 1281 int overflowCountExecute = 0;\
krishanprajapat 117:bfdc807f3d3c 1282 while(tm_ptr != NULL){\
krishanprajapat 117:bfdc807f3d3c 1283 if( overflowCountExecute < TM_OVERFLOW_CONSTANT ){\
krishanprajapat 117:bfdc807f3d3c 1284 Base_tm *temp = tm_ptr->next_TM;\
krishanprajapat 117:bfdc807f3d3c 1285 delete tm_ptr;\
krishanprajapat 117:bfdc807f3d3c 1286 tm_ptr = temp;\
krishanprajapat 117:bfdc807f3d3c 1287 ++overflowCountExecute;\
krishanprajapat 117:bfdc807f3d3c 1288 }\
krishanprajapat 117:bfdc807f3d3c 1289 else{\
krishanprajapat 117:bfdc807f3d3c 1290 /*PENDING: RESET CDMS*/\
krishanprajapat 117:bfdc807f3d3c 1291 break;\
krishanprajapat 117:bfdc807f3d3c 1292 }\
krishanprajapat 117:bfdc807f3d3c 1293 }\
krishanprajapat 117:bfdc807f3d3c 1294 break;\
krishanprajapat 117:bfdc807f3d3c 1295 }\
krishanprajapat 117:bfdc807f3d3c 1296 else if( (current_exec_status == TC_STATE_UNEXECUTED) || (current_exec_status == TC_STATE_MARKED_RETRY) ){\
krishanprajapat 117:bfdc807f3d3c 1297 /*EXECUTION OF TC START*/\
krishanprajapat 117:bfdc807f3d3c 1298 uint8_t temp81 = 0x00;\
krishanprajapat 117:bfdc807f3d3c 1299 isit_sdcard(current_TC, temp81);\
krishanprajapat 117:bfdc807f3d3c 1300 if( temp81 == 0x00 ){\
krishanprajapat 117:bfdc807f3d3c 1301 /*gPC.printf("non sd card at %u\r\n", execute_psc);*/\
krishanprajapat 117:bfdc807f3d3c 1302 /*EXECUTION OF NON SD-CARD (BOTH OBOSC and CDMS functions)*/\
krishanprajapat 117:bfdc807f3d3c 1303 Base_tm *tm_ptr_head = NULL;\
krishanprajapat 117:bfdc807f3d3c 1304 get_call_sign(tm_ptr_head);\
krishanprajapat 117:bfdc807f3d3c 1305 Base_tm *put_tm_here = NULL;\
krishanprajapat 117:bfdc807f3d3c 1306 uint8_t temp82 = 0x00;\
krishanprajapat 117:bfdc807f3d3c 1307 uint8_t tempPAhot = 0x00;\
krishanprajapat 117:bfdc807f3d3c 1308 isit_obosc(current_TC, temp82);\
krishanprajapat 117:bfdc807f3d3c 1309 if(temp82 == 0x01){\
krishanprajapat 117:bfdc807f3d3c 1310 /*gPC.printf("obosc tc inside normal tc at %u\r\n", execute_psc);*/\
krishanprajapat 117:bfdc807f3d3c 1311 /*EXECUTION OF OBOSC TC*/\
krishanprajapat 117:bfdc807f3d3c 1312 /*SKIP EXECUTION OF OBOSC HERE*/\
krishanprajapat 117:bfdc807f3d3c 1313 break;\
krishanprajapat 117:bfdc807f3d3c 1314 }\
krishanprajapat 117:bfdc807f3d3c 1315 else{\
krishanprajapat 117:bfdc807f3d3c 1316 /*gPC.printf("cdms relay tmtc at %u\r\n", execute_psc);*/\
krishanprajapat 117:bfdc807f3d3c 1317 /*call CDMS_RLY_TMTC*/\
krishanprajapat 117:bfdc807f3d3c 1318 /*CDMS_RLY_TMTC(current_TC, put_tm_here);*/\
krishanprajapat 117:bfdc807f3d3c 1319 put_tm_here = FCTN_CDMS_RLY_TMTC(current_TC);\
krishanprajapat 117:bfdc807f3d3c 1320 }\
krishanprajapat 117:bfdc807f3d3c 1321 /*DETECT ACK OR NACK*/\
krishanprajapat 117:bfdc807f3d3c 1322 uint8_t temp83 = 0x00;\
krishanprajapat 117:bfdc807f3d3c 1323 uint8_t temp84 = GETpacket_seq_count(current_TC);\
krishanprajapat 117:bfdc807f3d3c 1324 detect_ack(put_tm_here, temp83, temp84);\
krishanprajapat 117:bfdc807f3d3c 1325 if( temp83 == 0x01){\
krishanprajapat 117:bfdc807f3d3c 1326 uint16_t temp16 = TC_STATE_SUCCESSFULLY_EXECUTED;\
krishanprajapat 117:bfdc807f3d3c 1327 PUTexec_status(current_TC, temp16);\
krishanprajapat 117:bfdc807f3d3c 1328 }\
krishanprajapat 117:bfdc807f3d3c 1329 else{\
krishanprajapat 117:bfdc807f3d3c 1330 /*gPC.puts("TC_STATE_EXECUTION_FAILED");*/\
krishanprajapat 117:bfdc807f3d3c 1331 uint16_t temp16 = TC_STATE_EXECUTION_FAILED;\
krishanprajapat 117:bfdc807f3d3c 1332 PUTexec_status(current_TC, temp16);\
krishanprajapat 117:bfdc807f3d3c 1333 }\
krishanprajapat 117:bfdc807f3d3c 1334 /*ABORT ON NACK AND TC LIST COMPLETED: UPDATE IN gMASTERSTATE*/\
krishanprajapat 117:bfdc807f3d3c 1335 if( (GETexec_status(current_TC) == TC_STATE_EXECUTION_FAILED) && (GETabort_on_nack(current_TC) == 1) ){\
krishanprajapat 117:bfdc807f3d3c 1336 gMASTER_STATE = TCL_STATE_ABORTED;\
krishanprajapat 117:bfdc807f3d3c 1337 }\
krishanprajapat 117:bfdc807f3d3c 1338 else if( execute_psc == (gTOTAL_VALID_TC-1) ){\
krishanprajapat 117:bfdc807f3d3c 1339 /*LAST TC IS EXECUTED*/\
krishanprajapat 117:bfdc807f3d3c 1340 gMASTER_STATE = TCL_STATE_COMPLETED;\
krishanprajapat 117:bfdc807f3d3c 1341 }\
krishanprajapat 117:bfdc807f3d3c 1342 else{\
krishanprajapat 117:bfdc807f3d3c 1343 uint8_t check1 = 1;\
krishanprajapat 117:bfdc807f3d3c 1344 for( uint8_t test_psc = execute_psc+1 ; test_psc < gTOTAL_VALID_TC ; ++test_psc ){\
krishanprajapat 117:bfdc807f3d3c 1345 Base_tc* test_TC = gHEAD_NODE_TCL;\
krishanprajapat 117:bfdc807f3d3c 1346 while(test_TC != NULL){\
krishanprajapat 117:bfdc807f3d3c 1347 if( GETpacket_seq_count(test_TC) == test_psc ){\
krishanprajapat 117:bfdc807f3d3c 1348 uint8_t checkval;\
krishanprajapat 117:bfdc807f3d3c 1349 isit_obosc(test_TC, checkval);\
krishanprajapat 117:bfdc807f3d3c 1350 if( checkval == 0 ){\
krishanprajapat 117:bfdc807f3d3c 1351 check1 = 0;\
krishanprajapat 117:bfdc807f3d3c 1352 }\
krishanprajapat 117:bfdc807f3d3c 1353 }\
krishanprajapat 117:bfdc807f3d3c 1354 test_TC = test_TC->next_TC;\
krishanprajapat 117:bfdc807f3d3c 1355 }\
krishanprajapat 117:bfdc807f3d3c 1356 }\
krishanprajapat 117:bfdc807f3d3c 1357 if( check1 == 0x01 ){\
krishanprajapat 117:bfdc807f3d3c 1358 gMASTER_STATE = TCL_STATE_COMPLETED;\
krishanprajapat 117:bfdc807f3d3c 1359 }\
krishanprajapat 117:bfdc807f3d3c 1360 }\
krishanprajapat 117:bfdc807f3d3c 1361 /*update last executed L1_ack*/\
krishanprajapat 117:bfdc807f3d3c 1362 if( put_tm_here != NULL ){\
krishanprajapat 117:bfdc807f3d3c 1363 if( GETshort_or_long_tm(put_tm_here) == SHORT_TM_CODE ){\
krishanprajapat 117:bfdc807f3d3c 1364 for(int i = 0 ; i < TM_SHORT_SIZE ; ++i){\
krishanprajapat 117:bfdc807f3d3c 1365 gLAST_TM[i] = put_tm_here->TM_string[i];\
krishanprajapat 117:bfdc807f3d3c 1366 gLAST_TM_SHORT_OR_LONG = SHORT_TM_CODE;\
krishanprajapat 117:bfdc807f3d3c 1367 }\
krishanprajapat 117:bfdc807f3d3c 1368 }\
krishanprajapat 117:bfdc807f3d3c 1369 else{\
krishanprajapat 117:bfdc807f3d3c 1370 for( int i = 0 ; i < TM_LONG_SIZE ; ++i ){\
krishanprajapat 117:bfdc807f3d3c 1371 gLAST_TM[i] = put_tm_here->TM_string[i];\
krishanprajapat 117:bfdc807f3d3c 1372 gLAST_TM_SHORT_OR_LONG = LONG_TM_CODE;\
krishanprajapat 117:bfdc807f3d3c 1373 }\
krishanprajapat 117:bfdc807f3d3c 1374 }\
krishanprajapat 117:bfdc807f3d3c 1375 }\
krishanprajapat 117:bfdc807f3d3c 1376 /*PENDING: APPEND ACK L1*/\
krishanprajapat 117:bfdc807f3d3c 1377 Base_tm *tm_ptr = tm_ptr_head;\
krishanprajapat 117:bfdc807f3d3c 1378 get_ack_l1(tm_ptr->next_TM);\
krishanprajapat 117:bfdc807f3d3c 1379 int overflowCountExecute = 0;\
krishanprajapat 117:bfdc807f3d3c 1380 while( tm_ptr->next_TM != NULL ){\
krishanprajapat 117:bfdc807f3d3c 1381 if( overflowCountExecute < TM_OVERFLOW_CONSTANT ){\
krishanprajapat 117:bfdc807f3d3c 1382 tm_ptr = tm_ptr->next_TM;\
krishanprajapat 117:bfdc807f3d3c 1383 ++overflowCountExecute;\
krishanprajapat 117:bfdc807f3d3c 1384 }\
krishanprajapat 117:bfdc807f3d3c 1385 else{\
krishanprajapat 117:bfdc807f3d3c 1386 /*PENDING: RESET CDMS*/\
krishanprajapat 117:bfdc807f3d3c 1387 break;\
krishanprajapat 117:bfdc807f3d3c 1388 }\
krishanprajapat 117:bfdc807f3d3c 1389 }\
krishanprajapat 117:bfdc807f3d3c 1390 tm_ptr->next_TM = put_tm_here;\
krishanprajapat 117:bfdc807f3d3c 1391 /*CHECK FOR HOT PA*/\
krishanprajapat 117:bfdc807f3d3c 1392 isPAhot(tempPAhot);\
krishanprajapat 117:bfdc807f3d3c 1393 if( tempPAhot == 0x00 ){\
krishanprajapat 117:bfdc807f3d3c 1394 gFLAGS = gFLAGS | COM_PA_HOT_FLAG;\
krishanprajapat 117:bfdc807f3d3c 1395 }\
krishanprajapat 117:bfdc807f3d3c 1396 tm_ptr = tm_ptr_head;\
krishanprajapat 117:bfdc807f3d3c 1397 while( tm_ptr != NULL ){\
krishanprajapat 117:bfdc807f3d3c 1398 int length = TM_SHORT_SIZE;\
krishanprajapat 117:bfdc807f3d3c 1399 if( GETshort_or_long_tm(tm_ptr) == SHORT_TM_CODE ){\
krishanprajapat 117:bfdc807f3d3c 1400 length = TM_SHORT_SIZE;\
krishanprajapat 117:bfdc807f3d3c 1401 }\
krishanprajapat 117:bfdc807f3d3c 1402 else{\
krishanprajapat 117:bfdc807f3d3c 1403 length = TM_LONG_SIZE;\
krishanprajapat 117:bfdc807f3d3c 1404 }\
krishanprajapat 117:bfdc807f3d3c 1405 /*gPC.puts("Printing Call Sign, ACK_L1, TM list");*/\
krishanprajapat 117:bfdc807f3d3c 1406 for(int i = 0 ; i < length ; ++i){\
krishanprajapat 117:bfdc807f3d3c 1407 /*gPC.putc(tm_ptr->TM_string[i]);*/\
krishanprajapat 117:bfdc807f3d3c 1408 }\
krishanprajapat 117:bfdc807f3d3c 1409 tm_ptr = tm_ptr->next_TM;\
krishanprajapat 117:bfdc807f3d3c 1410 }\
krishanprajapat 117:bfdc807f3d3c 1411 /*SEND call sign, ACK_L1, NON OBSRS TM TO GS*/\
krishanprajapat 117:bfdc807f3d3c 1412 snd_tm.head_pointer(tm_ptr_head);\
krishanprajapat 117:bfdc807f3d3c 1413 gPC.puts("enter_adf\r\n");\
krishanprajapat 117:bfdc807f3d3c 1414 transmit_adf;\
krishanprajapat 117:bfdc807f3d3c 1415 gPC.puts("exit_adf\r\n");\
krishanprajapat 117:bfdc807f3d3c 1416 /*DELETE THE TM AFTER USE*/\
krishanprajapat 117:bfdc807f3d3c 1417 tm_ptr = tm_ptr_head;\
krishanprajapat 117:bfdc807f3d3c 1418 overflowCountExecute = 0;\
krishanprajapat 117:bfdc807f3d3c 1419 while(tm_ptr != NULL){\
krishanprajapat 117:bfdc807f3d3c 1420 if( overflowCountExecute < TM_OVERFLOW_CONSTANT ){\
krishanprajapat 117:bfdc807f3d3c 1421 Base_tm *temp = tm_ptr->next_TM;\
krishanprajapat 117:bfdc807f3d3c 1422 delete tm_ptr;\
krishanprajapat 117:bfdc807f3d3c 1423 tm_ptr = temp;\
krishanprajapat 117:bfdc807f3d3c 1424 ++overflowCountExecute;\
krishanprajapat 117:bfdc807f3d3c 1425 }\
krishanprajapat 117:bfdc807f3d3c 1426 else{\
krishanprajapat 117:bfdc807f3d3c 1427 /*PENDING: RESET CDMS*/\
krishanprajapat 117:bfdc807f3d3c 1428 break;\
krishanprajapat 117:bfdc807f3d3c 1429 }\
krishanprajapat 117:bfdc807f3d3c 1430 }\
krishanprajapat 117:bfdc807f3d3c 1431 }\
krishanprajapat 117:bfdc807f3d3c 1432 else{\
krishanprajapat 117:bfdc807f3d3c 1433 /*gPC.printf("sd card at %u\r\n", execute_psc);*/\
krishanprajapat 117:bfdc807f3d3c 1434 /*EXECUTION OF SD-CARD DATA SENDING (OBSRS)*/\
krishanprajapat 117:bfdc807f3d3c 1435 Base_tm *tm_ptr_head = NULL;\
krishanprajapat 117:bfdc807f3d3c 1436 get_call_sign(tm_ptr_head);\
krishanprajapat 117:bfdc807f3d3c 1437 Base_tm *put_tm_here = NULL;\
krishanprajapat 117:bfdc807f3d3c 1438 /*execute_obsrs(current_TC, put_tm_here)*/\
krishanprajapat 117:bfdc807f3d3c 1439 /*read_TC(current_TC);*/\
krishanprajapat 117:bfdc807f3d3c 1440 execute_OBSRS_TC(current_TC);\
krishanprajapat 117:bfdc807f3d3c 1441 gPC.puts("en_adf");\
krishanprajapat 117:bfdc807f3d3c 1442 transmit_adf;\
krishanprajapat 117:bfdc807f3d3c 1443 gPC.puts("ex_adf");\
krishanprajapat 117:bfdc807f3d3c 1444 uint8_t tempExec = TC_STATE_SUCCESSFULLY_EXECUTED;\
krishanprajapat 117:bfdc807f3d3c 1445 PUTexec_status(current_TC, tempExec);\
krishanprajapat 117:bfdc807f3d3c 1446 /*PENDING: ABORT ON NACK CHECK, gMASTER_STATE VERIFICATION WITH SD CARD, session timeout, last executed ack l234*/\
krishanprajapat 117:bfdc807f3d3c 1447 if( (GETexec_status(current_TC) == TC_STATE_EXECUTION_FAILED) && (GETabort_on_nack(current_TC) == 1) ){\
krishanprajapat 117:bfdc807f3d3c 1448 gMASTER_STATE = TCL_STATE_ABORTED;\
krishanprajapat 117:bfdc807f3d3c 1449 }\
krishanprajapat 117:bfdc807f3d3c 1450 else if( execute_psc == (gTOTAL_VALID_TC-1) ){\
krishanprajapat 117:bfdc807f3d3c 1451 gMASTER_STATE = TCL_STATE_COMPLETED;\
krishanprajapat 117:bfdc807f3d3c 1452 }\
krishanprajapat 117:bfdc807f3d3c 1453 else{\
krishanprajapat 117:bfdc807f3d3c 1454 uint8_t check1 = 1;\
krishanprajapat 117:bfdc807f3d3c 1455 for( uint8_t test_psc = execute_psc+1 ; test_psc < gTOTAL_VALID_TC ; ++test_psc ){\
krishanprajapat 117:bfdc807f3d3c 1456 Base_tc* test_TC = gHEAD_NODE_TCL;\
krishanprajapat 117:bfdc807f3d3c 1457 while(test_TC != NULL){\
krishanprajapat 117:bfdc807f3d3c 1458 if( GETpacket_seq_count(test_TC) == test_psc ){\
krishanprajapat 117:bfdc807f3d3c 1459 uint8_t checkval;\
krishanprajapat 117:bfdc807f3d3c 1460 isit_obosc(test_TC, checkval);\
krishanprajapat 117:bfdc807f3d3c 1461 if( checkval == 0 ){\
krishanprajapat 117:bfdc807f3d3c 1462 check1 = 0;\
krishanprajapat 117:bfdc807f3d3c 1463 }\
krishanprajapat 117:bfdc807f3d3c 1464 }\
krishanprajapat 117:bfdc807f3d3c 1465 test_TC = test_TC->next_TC;\
krishanprajapat 117:bfdc807f3d3c 1466 }\
krishanprajapat 117:bfdc807f3d3c 1467 }\
krishanprajapat 117:bfdc807f3d3c 1468 if( check1 == 0x01 ){\
krishanprajapat 117:bfdc807f3d3c 1469 gMASTER_STATE = TCL_STATE_COMPLETED;\
krishanprajapat 117:bfdc807f3d3c 1470 }\
krishanprajapat 117:bfdc807f3d3c 1471 }\
krishanprajapat 117:bfdc807f3d3c 1472 /*update last executed L1_ack*/\
krishanprajapat 117:bfdc807f3d3c 1473 if( put_tm_here != NULL ){\
krishanprajapat 117:bfdc807f3d3c 1474 if( GETshort_or_long_tm(put_tm_here) == SHORT_TM_CODE ){\
krishanprajapat 117:bfdc807f3d3c 1475 for(int i = 0 ; i < TM_SHORT_SIZE ; ++i){\
krishanprajapat 117:bfdc807f3d3c 1476 gLAST_TM[i] = put_tm_here->TM_string[i];\
krishanprajapat 117:bfdc807f3d3c 1477 gLAST_TM_SHORT_OR_LONG = SHORT_TM_CODE;\
krishanprajapat 117:bfdc807f3d3c 1478 }\
krishanprajapat 117:bfdc807f3d3c 1479 }\
krishanprajapat 117:bfdc807f3d3c 1480 else{\
krishanprajapat 117:bfdc807f3d3c 1481 for( int i = 0 ; i < TM_LONG_SIZE ; ++i ){\
krishanprajapat 117:bfdc807f3d3c 1482 gLAST_TM[i] = put_tm_here->TM_string[i];\
krishanprajapat 117:bfdc807f3d3c 1483 gLAST_TM_SHORT_OR_LONG = LONG_TM_CODE;\
krishanprajapat 117:bfdc807f3d3c 1484 }\
krishanprajapat 117:bfdc807f3d3c 1485 }\
krishanprajapat 117:bfdc807f3d3c 1486 }\
krishanprajapat 117:bfdc807f3d3c 1487 /*PENDING: APPEND ACK L1*/\
krishanprajapat 117:bfdc807f3d3c 1488 Base_tm *tm_ptr = tm_ptr_head;\
krishanprajapat 117:bfdc807f3d3c 1489 get_ack_l1(tm_ptr->next_TM);\
krishanprajapat 117:bfdc807f3d3c 1490 int overflowCountExecute = 0;\
krishanprajapat 117:bfdc807f3d3c 1491 while( tm_ptr->next_TM != NULL ){\
krishanprajapat 117:bfdc807f3d3c 1492 if( overflowCountExecute < TM_OVERFLOW_CONSTANT ){\
krishanprajapat 117:bfdc807f3d3c 1493 tm_ptr = tm_ptr->next_TM;\
krishanprajapat 117:bfdc807f3d3c 1494 ++overflowCountExecute;\
krishanprajapat 117:bfdc807f3d3c 1495 }\
krishanprajapat 117:bfdc807f3d3c 1496 else{\
krishanprajapat 117:bfdc807f3d3c 1497 /*PENDING: RESET CDMS*/\
krishanprajapat 117:bfdc807f3d3c 1498 break;\
krishanprajapat 117:bfdc807f3d3c 1499 }\
krishanprajapat 117:bfdc807f3d3c 1500 }\
krishanprajapat 117:bfdc807f3d3c 1501 tm_ptr->next_TM = put_tm_here;\
krishanprajapat 117:bfdc807f3d3c 1502 /*CHECK FOR HOT PA*/\
krishanprajapat 117:bfdc807f3d3c 1503 uint8_t tempPAhot = 0x00;\
krishanprajapat 117:bfdc807f3d3c 1504 isPAhot(tempPAhot);\
krishanprajapat 117:bfdc807f3d3c 1505 if( tempPAhot == 0x00 ){\
krishanprajapat 117:bfdc807f3d3c 1506 gFLAGS = gFLAGS | COM_PA_HOT_FLAG;\
krishanprajapat 117:bfdc807f3d3c 1507 }\
krishanprajapat 117:bfdc807f3d3c 1508 tm_ptr = tm_ptr_head;\
krishanprajapat 117:bfdc807f3d3c 1509 while( tm_ptr != NULL ){\
krishanprajapat 117:bfdc807f3d3c 1510 int length = TM_SHORT_SIZE;\
krishanprajapat 117:bfdc807f3d3c 1511 if( GETshort_or_long_tm(tm_ptr) == SHORT_TM_CODE ){\
krishanprajapat 117:bfdc807f3d3c 1512 length = TM_SHORT_SIZE;\
krishanprajapat 117:bfdc807f3d3c 1513 }\
krishanprajapat 117:bfdc807f3d3c 1514 else{\
krishanprajapat 117:bfdc807f3d3c 1515 length = TM_LONG_SIZE;\
krishanprajapat 117:bfdc807f3d3c 1516 }\
krishanprajapat 117:bfdc807f3d3c 1517 /*gPC.puts("Printing Call Sign, ACK_L1, TM list");*/\
krishanprajapat 117:bfdc807f3d3c 1518 for(int i = 0 ; i < length ; ++i){\
krishanprajapat 117:bfdc807f3d3c 1519 /*gPC.putc(tm_ptr->TM_string[i]);*/\
krishanprajapat 117:bfdc807f3d3c 1520 }\
krishanprajapat 117:bfdc807f3d3c 1521 tm_ptr = tm_ptr->next_TM;\
krishanprajapat 117:bfdc807f3d3c 1522 }\
krishanprajapat 117:bfdc807f3d3c 1523 /*SEND call sign, ACK_L1, OBSRS TO GS*/\
krishanprajapat 117:bfdc807f3d3c 1524 /*snd_tm.head_pointer(tm_ptr_head);*/\
krishanprajapat 117:bfdc807f3d3c 1525 /*adf_SDcard();*/\
krishanprajapat 117:bfdc807f3d3c 1526 /*DELETE THE TM AFTER USE*/\
krishanprajapat 117:bfdc807f3d3c 1527 tm_ptr = tm_ptr_head;\
krishanprajapat 117:bfdc807f3d3c 1528 overflowCountExecute = 0;\
krishanprajapat 117:bfdc807f3d3c 1529 while(tm_ptr != NULL){\
krishanprajapat 117:bfdc807f3d3c 1530 if( overflowCountExecute < TM_OVERFLOW_CONSTANT ){\
krishanprajapat 117:bfdc807f3d3c 1531 Base_tm *temp = tm_ptr->next_TM;\
krishanprajapat 117:bfdc807f3d3c 1532 delete tm_ptr;\
krishanprajapat 117:bfdc807f3d3c 1533 tm_ptr = temp;\
krishanprajapat 117:bfdc807f3d3c 1534 ++overflowCountExecute;\
krishanprajapat 117:bfdc807f3d3c 1535 }\
krishanprajapat 117:bfdc807f3d3c 1536 else{\
krishanprajapat 117:bfdc807f3d3c 1537 /*PENDING: RESET CDMS*/\
krishanprajapat 117:bfdc807f3d3c 1538 break;\
krishanprajapat 117:bfdc807f3d3c 1539 }\
krishanprajapat 117:bfdc807f3d3c 1540 }\
krishanprajapat 117:bfdc807f3d3c 1541 }\
krishanprajapat 117:bfdc807f3d3c 1542 }\
krishanprajapat 117:bfdc807f3d3c 1543 break;\
krishanprajapat 117:bfdc807f3d3c 1544 }\
krishanprajapat 117:bfdc807f3d3c 1545 current_TC = current_TC->next_TC;\
krishanprajapat 117:bfdc807f3d3c 1546 ++overflowCount;\
krishanprajapat 117:bfdc807f3d3c 1547 }\
krishanprajapat 117:bfdc807f3d3c 1548 else{\
krishanprajapat 117:bfdc807f3d3c 1549 /*PENDING: RESET CDMS*/\
krishanprajapat 117:bfdc807f3d3c 1550 break;\
krishanprajapat 117:bfdc807f3d3c 1551 }\
krishanprajapat 117:bfdc807f3d3c 1552 }\
krishanprajapat 117:bfdc807f3d3c 1553 if( gFLAGS & COM_SESSION_TIMEOUT_FLAG ){\
krishanprajapat 117:bfdc807f3d3c 1554 break;\
krishanprajapat 117:bfdc807f3d3c 1555 }\
krishanprajapat 117:bfdc807f3d3c 1556 else if( gMASTER_STATE == TCL_STATE_ABORTED ){\
krishanprajapat 117:bfdc807f3d3c 1557 /*gPC.puts("ABORTING DUE TO ABORT ON NACK\r\n");*/\
krishanprajapat 117:bfdc807f3d3c 1558 /*EXITED DUE TO ABORT ON NACK:*/\
krishanprajapat 117:bfdc807f3d3c 1559 /*PENDING : POWER OFF COM TX*/\
krishanprajapat 117:bfdc807f3d3c 1560 RX1M.attach(&rx_read, Serial::RxIrq);\
krishanprajapat 117:bfdc807f3d3c 1561 gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);\
krishanprajapat 117:bfdc807f3d3c 1562 break;\
krishanprajapat 117:bfdc807f3d3c 1563 }\
krishanprajapat 117:bfdc807f3d3c 1564 else if( gFLAGS & COM_PA_HOT_FLAG ){\
krishanprajapat 117:bfdc807f3d3c 1565 /*PA HOT: WAIT FOR TIMEOUT*/\
krishanprajapat 117:bfdc807f3d3c 1566 gCOM_PA_COOLING_TIMEOUT.attach(&after_cooling_pa, COM_PA_COOLING_TIME_LIMIT);\
krishanprajapat 117:bfdc807f3d3c 1567 /*PENDING : POWER OFF COMM TX*/\
krishanprajapat 117:bfdc807f3d3c 1568 RX1M.attach(&rx_read, Serial::RxIrq);\
krishanprajapat 117:bfdc807f3d3c 1569 gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);\
krishanprajapat 117:bfdc807f3d3c 1570 break;\
krishanprajapat 117:bfdc807f3d3c 1571 }\
krishanprajapat 117:bfdc807f3d3c 1572 /*gPC.printf("successflly executed %u tc\r\n", execute_psc);*/\
krishanprajapat 117:bfdc807f3d3c 1573 }\
krishanprajapat 117:bfdc807f3d3c 1574 if( (gMASTER_STATE == TCL_STATE_COMPLETED) || (gFLAGS & COM_SESSION_TIMEOUT_FLAG) ){\
krishanprajapat 117:bfdc807f3d3c 1575 /*gPC.printf("completed or session timed out: %x\r\n", gMASTER_STATE);*/\
krishanprajapat 117:bfdc807f3d3c 1576 /*COMPLETED EXECUTION OF TC*/\
krishanprajapat 117:bfdc807f3d3c 1577 gMASTER_STATE = TCL_STATE_COMPLETED;\
krishanprajapat 117:bfdc807f3d3c 1578 COM_POWER_OFF_TX;\
krishanprajapat 117:bfdc807f3d3c 1579 reset_all;\
krishanprajapat 117:bfdc807f3d3c 1580 /*PENDING : ENABLE THREADS*/\
krishanprajapat 117:bfdc807f3d3c 1581 gSESSION_TIMEOUT.detach();\
krishanprajapat 117:bfdc807f3d3c 1582 gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);\
krishanprajapat 117:bfdc807f3d3c 1583 gFLAGS = gFLAGS & (~COM_SESSION_FLAG);\
krishanprajapat 117:bfdc807f3d3c 1584 }\
krishanprajapat 117:bfdc807f3d3c 1585 }