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