I2C code testing

Dependencies:   FreescaleIAP SimpleDMA mbed-rtos mbed

Fork of COM_MNG_TMTC_SIMPLE_pl123 by Siva ram

Committer:
krishanprajapat
Date:
Sat Feb 06 10:27:11 2016 +0000
Revision:
116:8f431a8bbe82
Parent:
98:fd99ddc0e0a1
added common_functions.h file

Who changed what in which revision?

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