bae_pl_tc_tobeupdated

Dependencies:   mbed

Committer:
pradeepvk2208
Date:
Tue Mar 08 16:23:01 2016 +0000
Revision:
0:a8848760ff84
cdms_tmtc

Who changed what in which revision?

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