
Repository for CDMS code
Dependencies: SimpleDMA mbed-rtos mbed eeprom
Fork of COM_MNG_TMTC_SIMPLE by
Revision 216:93505a6f8db7, committed 2016-07-03
- Comitter:
- chaithanyarss
- Date:
- Sun Jul 03 11:35:55 2016 +0000
- Parent:
- 215:570251b23c7b
- Child:
- 218:c63cdba0550f
- Commit message:
- merging Completed.
Changed in this revision
--- a/COM_MNG_TMTC.h Sun Jul 03 09:47:05 2016 +0000 +++ b/COM_MNG_TMTC.h Sun Jul 03 11:35:55 2016 +0000 @@ -45,7 +45,7 @@ -#define detect_ack(tm_ptr, temp_ack, tc_psc) {\ +#define detect_ack(tm_ptr, temp_ack) {\ if( tm_ptr != NULL ){\ int length = TM_SHORT_SIZE;\ if( GETshort_or_long_tm(tm_ptr) == SHORT_TM_CODE ){\ @@ -62,20 +62,20 @@ if( (temp8 == 0xC0) || (temp8 == 0xA0) )\ temp_ack = 0x01;\ else{\ - temp_ack = 0x00;\ + temp_ack = 0x02;\ /*CHECK FOR NACK CODE: CRC FAIL NACK*/\ temp8 = tm_ptr->TM_string[TM_ACK_CODE_INDEX];\ temp8 = temp8 & 0x0F;\ if( temp8 == CRC_FAIL_NACK_CODE ){\ - tm_ptr->TM_string[2] = tc_psc;\ + temp_ack = 0x04;\ }\ }\ }\ else\ - temp_ack = 0x00;\ + temp_ack = 0x03;\ }\ else{\ - temp_ack = 0x00;\ + temp_ack = 0x02;\ }\ } @@ -1047,7 +1047,7 @@ }\ else if( (service_subtype != OBOSC_SUB_DISABLE) && (service_subtype != OBOSC_SUB_RETRY) ){\ /*CHANGE THE ACK CODE TO INVALID TC*/\ - ackl234new->TM_string[2] = 0xA2;\ + ackl234new->TM_string[2] = 0xAF;\ }\ if (DEBUG)\ gPC.puts("completed obosc\r\n");\ @@ -1057,6 +1057,7 @@ #define EXECUTE_OBOSC_ONLY {\ + gMASTER_STATE = TCL_STATE_EXECUTING;\ int reset_flag = 0;\ if (DEBUG)\ gPC.puts("iNSIDE EXECUTE_OBOSC_ONLY\r\n");\
--- a/COM_POWER_OFF_TX.h Sun Jul 03 09:47:05 2016 +0000 +++ b/COM_POWER_OFF_TX.h Sun Jul 03 11:35:55 2016 +0000 @@ -1,15 +1,136 @@ +#define RESET_CDMS {\ + Base_tc *RESET_tc = new Short_tc;\ + RESET_tc->next_TC = NULL;\ + PUTshort_or_long(RESET_tc,SHORT_TC_CODE);\ + PUTcrc_pass(RESET_tc,0x1);\ + PUTexec_status(RESET_tc,0);\ + RESET_tc->TC_string[0] = 0x01;\ + RESET_tc->TC_string[1] = 0x81;\ + RESET_tc->TC_string[2] = 0x81;\ + RESET_tc->TC_string[3] = 0x38;\ + RESET_tc->TC_string[4] = 0;\ + RESET_tc->TC_string[5] = 0;\ + RESET_tc->TC_string[6] = 0;\ + RESET_tc->TC_string[7] = 0;\ + RESET_tc->TC_string[8] = 0;\ + uint16_t crc16 = crc16_gen(RESET_tc->TC_string, 9);\ + RESET_tc->TC_string[9] = (crc16 & 0xFF00)>>8;\ + RESET_tc->TC_string[10] = (crc16 & 0x00FF);\ + Base_tm *tm_ptr = NULL;\ + tm_ptr = FCTN_CDMS_RLY_TMTC(RESET_tc);\ + delete RESET_tc;\ + /*DELETE THE TM AFTER USE*/\ + Base_tm *del_tm = tm_ptr;\ + while( del_tm != NULL ){\ + Base_tm *temp = del_tm->next_TM;\ + delete del_tm;\ + del_tm = temp;\ + }\ +} + +#define power_on_bae {\ + Base_tc *power_on_BAE = new Short_tc;\ + power_on_BAE->next_TC = NULL;\ + PUTshort_or_long(power_on_BAE,SHORT_TC_CODE);\ + PUTcrc_pass(power_on_BAE,0x1);\ + PUTexec_status(power_on_BAE,0);\ + power_on_BAE->TC_string[0] = 0x01;\ + power_on_BAE->TC_string[1] = BAE_APID_SOURCE;\ + power_on_BAE->TC_string[2] = BAE_SERVICE;\ + power_on_BAE->TC_string[3] = BAE_POWER_ON_PID;\ + power_on_BAE->TC_string[4] = 0;\ + power_on_BAE->TC_string[5] = 0;\ + power_on_BAE->TC_string[6] = 0;\ + power_on_BAE->TC_string[7] = 0;\ + power_on_BAE->TC_string[8] = 0;\ + uint16_t crc16 = crc16_gen(power_on_BAE->TC_string, 9);\ + power_on_BAE->TC_string[9] = (crc16 & 0xFF00)>>8;\ + power_on_BAE->TC_string[10] = (crc16 & 0x00FF);\ + Base_tm *tm_ptr = NULL;\ + tm_ptr = FCTN_CDMS_RLY_TMTC(power_on_BAE);\ + delete power_on_BAE;\ + /*DELETE THE TM AFTER USE*/\ + Base_tm *del_tm = tm_ptr;\ + int overCount = 0;\ + while( del_tm != NULL ){\ + if( (overCount < TM_OVERFLOW_CONSTANT) ){\ + Base_tm *temp = del_tm->next_TM;\ + delete del_tm;\ + del_tm = temp;\ + ++overCount;\ + }\ + else{\ + RESET_CDMS;\ + break;\ + }\ + }\ +} + +#define resume_bcn {\ + Base_tc *beacon_tc = new Long_tc;\ + beacon_tc->next_TC = NULL;\ + PUTshort_or_long(beacon_tc,LONG_TC_CODE);\ + PUTcrc_pass(beacon_tc,0x1);\ + PUTexec_status(beacon_tc,0);\ + beacon_tc->TC_string[0] = 0x01;\ + beacon_tc->TC_string[1] = BCN_APID_SOURCE;\ + beacon_tc->TC_string[2] = BCN_SERVICE;\ + beacon_tc->TC_string[3] = 0xE2;\ + beacon_tc->TC_string[4] = 0x00;\ + beacon_tc->TC_string[5] = 0;\ + beacon_tc->TC_string[6] = 0;\ + beacon_tc->TC_string[7] = 0;\ + beacon_tc->TC_string[8] = 0;\ + uint16_t crc16 = crc16_gen(beacon_tc->TC_string, 9);\ + beacon_tc->TC_string[9] = (crc16 & 0xFF00)>>8;\ + beacon_tc->TC_string[10] = (crc16 & 0x00FF);\ + for(int i = 11; i < 135; i++){\ + beacon_tc->TC_string[i] = 0;\ + }\ + Base_tm *tm_ptr = NULL;\ + tm_ptr = FCTN_CDMS_RLY_TMTC(beacon_tc);\ + delete beacon_tc;\ + /*DELETE THE TM AFTER USE*/\ + Base_tm *del_tm = tm_ptr;\ + int overCount = 0;\ + while( del_tm != NULL ){\ + if( (overCount < TM_OVERFLOW_CONSTANT) ){\ + Base_tm *temp = del_tm->next_TM;\ + delete del_tm;\ + del_tm = temp;\ + ++overCount;\ + }\ + else{\ + RESET_CDMS;\ + break;\ + }\ + }\ +} + #define COM_POWER_OFF_TX {\ /*gPC.puts("Inside COM_POWER_OFF_TX\r\n");*/\ - /*PENDING: POWER OFF TRANSMITTER*/\ + COM_TX_CNTRL = 0;\ RX1M.attach(&rx_read, Serial::RxIrq);\ gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);\ - /*PENDING: SWITCH RF RELAY TO BEACON*/\ - /*PENDING: RF_SW_STATUS = RF_BCN*/\ - /*PENDING: POWER ON BAE*/\ - /*PENDING: SET BAE SW_EN_STATUS*/\ - /*PENDING: RESUME BEACON*/\ + RF_SW_CNTRL_BCN = 1;\ + Thread::wait(25);\ + RF_SW_CNTRL_BCN = 0;\ + gFLAGS = gFLAGS | RF_SW_STATUS_FLAG;\ + if( gFLAGS & COM_AUTO_POWER_OFF_BAE_FLAG ){\ + power_on_bae;\ + gFLAGS = gFLAGS | BAE_SW_EN_FLAG;\ + gFLAGS & (~COM_AUTO_POWER_OFF_BAE_FLAG);\ + resume_bcn;\ + }\ + else{\ + if( gFLAGS & BAE_SW_EN_FLAG ){\ + resume_bcn;\ + }\ + }\ gFLAGS = gFLAGS & (~COM_PA_HOT_FLAG);\ + gFLAGS = gFLAGS & (~COM_PA_OC_FLAG);\ gCOM_PA_COOLING_TIMEOUT.detach();\ gFLAGS = gFLAGS & (~COM_TX_FLAG);\ - /*gPC.puts("ompleted com_power_off tx\r\n");*/\ + gFLAGS = gFLAGS & (~COM_SESSION_TIMEOUT_FLAG);\ + /*gPC.puts("completed com_power_off tx\r\n");*/\ } \ No newline at end of file
--- a/COM_POWER_ON_TX.h Sun Jul 03 09:47:05 2016 +0000 +++ b/COM_POWER_ON_TX.h Sun Jul 03 11:35:55 2016 +0000 @@ -1,107 +1,444 @@ -#define COM_POWER_ON_TX {\ - /*gPC.puts("Inside COM_POWER_ON_TX\r\n");*/\ - if( !(gFLAGS & COM_TX_FLAG) ){\ - gFLAGS = gFLAGS | COM_TX_FLAG;\ - /*WARNING: INFINITE WHILE LOOP POSSIBLE: if standby ack received and bcn tx main status = 0*/\ - bool retryFlag = true;\ - while( retryFlag == true ){\ - uint8_t standbyAck = 0xFF;\ - /*PENDING: SET BEACON TO STANDBY*/\ - if( standbyAck == 0xFF ){\ - /*ACK RECCEIVED*/\ - /*PENDING: BEACON TX MAIN STATUS*/\ - if( true ){\ - retryFlag = false;\ - /*PENDING: SWITCH RELAY TO COM_TX*/\ - /*PENDING: RF_SW_STATUS = RF_COM_TX*/\ - }\ - else{\ - gCOM_MNG_TMTC_THREAD->wait(5000);\ - }\ - }\ - else{\ - /*PENDING: RESET BAE*/\ - uint8_t standbyAck2 = 0x00;\ - /*PENDING: SET BEACON TO STANDBY*/\ - if( standbyAck2 == 0xFF ){\ - /*PENDING: BEACON TX MAIN STAUTS*/\ - if( true ){\ - retryFlag = false;\ - /*PENDING: SWITCH RF RELAY TO COM TX*/\ - /*PENDING: RF_SW_STATUS = RF_COM_TX*/\ - }\ - }\ - else{\ - retryFlag = false;\ - /*PENDING: POWER OFF BEACON*/\ - /*PENDING: CLEAR BAE SW_EN*/\ - /*PENDING: SWITCH RF RELAY TO COM TX*/\ - /*PENDING: RF_SW_STATUS = RF_COM_TX*/\ - }\ - }\ +#define STANDBY_PRCS(tm_ptr){\ + Base_tc *stdby_tc = new Long_tc;\ + stdby_tc->next_TC = NULL;\ + PUTshort_or_long(stdby_tc,LONG_TC_CODE);\ + PUTcrc_pass(stdby_tc,0x1);\ + PUTexec_status(stdby_tc,0);\ + stdby_tc->TC_string[0] = 0x01;\ + stdby_tc->TC_string[1] = 0x41;\ + stdby_tc->TC_string[2] = 0x81;\ + stdby_tc->TC_string[3] = 0x40;\ + stdby_tc->TC_string[4] = 0x01;\ + stdby_tc->TC_string[5] = 0x01;\ + stdby_tc->TC_string[6] = 0x01;\ + stdby_tc->TC_string[7] = 0;\ + stdby_tc->TC_string[8] = 0;\ + uint16_t crc16 = crc16_gen(stdby_tc->TC_string, 9);\ + stdby_tc->TC_string[9] = (crc16 & 0xFF00)>>8;\ + stdby_tc->TC_string[10] = (crc16 & 0x00FF);\ + for(int i = 11; i < 135; i++){\ + stdby_tc->TC_string[i] = 0;\ + }\ + tm_ptr = FCTN_CDMS_RLY_TMTC(stdby_tc);\ + delete stdby_tc;\ +} + +#define SET_BCN_STANDBY(tm_ptr){\ + Base_tc *beacon_tc = new Long_tc;\ + beacon_tc->next_TC = NULL;\ + PUTshort_or_long(beacon_tc,LONG_TC_CODE);\ + PUTcrc_pass(beacon_tc,0x1);\ + PUTexec_status(beacon_tc,0);\ + beacon_tc->TC_string[0] = 0x01;\ + beacon_tc->TC_string[1] = BCN_APID_SOURCE;\ + beacon_tc->TC_string[2] = BCN_SERVICE;\ + beacon_tc->TC_string[3] = 0xE2;\ + beacon_tc->TC_string[4] = 0x01;\ + beacon_tc->TC_string[5] = 0;\ + beacon_tc->TC_string[6] = 0;\ + beacon_tc->TC_string[7] = 0;\ + beacon_tc->TC_string[8] = 0;\ + uint16_t crc16 = crc16_gen(beacon_tc->TC_string, 9);\ + beacon_tc->TC_string[9] = (crc16 & 0xFF00)>>8;\ + beacon_tc->TC_string[10] = (crc16 & 0x00FF);\ + for(int i = 11; i < 135; i++){\ + beacon_tc->TC_string[i] = 0;\ + }\ + tm_ptr = FCTN_CDMS_RLY_TMTC(beacon_tc);\ + delete beacon_tc;\ +} + +#define reset_bae {\ + Base_tc *reset_BAE = new Short_tc;\ + reset_BAE->next_TC = NULL;\ + PUTshort_or_long(reset_BAE,SHORT_TC_CODE);\ + PUTcrc_pass(reset_BAE,0x1);\ + PUTexec_status(reset_BAE,0);\ + reset_BAE->TC_string[0] = 0x01;\ + reset_BAE->TC_string[1] = BAE_APID_SOURCE;\ + reset_BAE->TC_string[2] = BAE_SERVICE;\ + reset_BAE->TC_string[3] = BAE_RESET_PID;\ + reset_BAE->TC_string[4] = 0;\ + reset_BAE->TC_string[5] = 0;\ + reset_BAE->TC_string[6] = 0;\ + reset_BAE->TC_string[7] = 0;\ + reset_BAE->TC_string[8] = 0;\ + uint16_t crc16 = crc16_gen(reset_BAE->TC_string, 9);\ + reset_BAE->TC_string[9] = (crc16 & 0xFF00)>>8;\ + reset_BAE->TC_string[10] = (crc16 & 0x00FF);\ + Base_tm *tm_ptr = NULL;\ + tm_ptr = FCTN_CDMS_RLY_TMTC(reset_BAE);\ + delete reset_BAE;\ + /*DELETE THE TM AFTER USE*/\ + Base_tm *del_tm = tm_ptr;\ + int overCount = 0;\ + while( del_tm != NULL ){\ + if( (overCount < TM_OVERFLOW_CONSTANT) ){\ + Base_tm *temp = del_tm->next_TM;\ + delete del_tm;\ + del_tm = temp;\ + ++overCount;\ + }\ + else{\ + RESET_CDMS;\ + break;\ }\ }\ - /*PENDING: POWER ON COM_TX*/\ - uint8_t adfConfigPass = 0xFF;\ - for( int i = 0 ; i < COM_TX_CONFIG_LIMIT ; ++i ){\ - /*PENDING: CONFIGURE ADF*/\ - if( adfConfigPass == 0xFF ){\ +} + +#define power_off_bae {\ + Base_tc *power_off_BAE = new Short_tc;\ + power_off_BAE->next_TC = NULL;\ + PUTshort_or_long(power_off_BAE,SHORT_TC_CODE);\ + PUTcrc_pass(power_off_BAE,0x1);\ + PUTexec_status(power_off_BAE,0);\ + power_off_BAE->TC_string[0] = 0x01;\ + power_off_BAE->TC_string[1] = BAE_APID_SOURCE;\ + power_off_BAE->TC_string[2] = BAE_SERVICE;\ + power_off_BAE->TC_string[3] = BAE_POWER_OFF_PID;\ + power_off_BAE->TC_string[4] = 0;\ + power_off_BAE->TC_string[5] = 0;\ + power_off_BAE->TC_string[6] = 0;\ + power_off_BAE->TC_string[7] = 0;\ + power_off_BAE->TC_string[8] = 0;\ + uint16_t crc16 = crc16_gen(power_off_BAE->TC_string, 9);\ + power_off_BAE->TC_string[9] = (crc16 & 0xFF00)>>8;\ + power_off_BAE->TC_string[10] = (crc16 & 0x00FF);\ + Base_tm *tm_ptr = NULL;\ + tm_ptr = FCTN_CDMS_RLY_TMTC(power_off_BAE);\ + delete power_off_BAE;\ + /*DELETE THE TM AFTER USE*/\ + Base_tm *del_tm = tm_ptr;\ + int overCount = 0;\ + while( del_tm != NULL ){\ + if( (overCount < TM_OVERFLOW_CONSTANT) ){\ + Base_tm *temp = del_tm->next_TM;\ + delete del_tm;\ + del_tm = temp;\ + ++overCount;\ + }\ + else{\ + RESET_CDMS;\ + break;\ + }\ + }\ +} + +#define P_CDMS_HK_MAIN {\ + Base_tc *hk_main_ptr = new Short_tc;\ + hk_main_ptr->next_TC = NULL;\ + PUTshort_or_long(hk_main_ptr,SHORT_TC_CODE);\ + PUTcrc_pass(hk_main_ptr,0x1);\ + PUTexec_status(hk_main_ptr,0);\ + hk_main_ptr->TC_string[0] = 0x01;\ + hk_main_ptr->TC_string[1] = 0x81;\ + hk_main_ptr->TC_string[2] = 0x81;\ + hk_main_ptr->TC_string[3] = 0x04;\ + hk_main_ptr->TC_string[4] = 0;\ + hk_main_ptr->TC_string[5] = 0;\ + hk_main_ptr->TC_string[6] = 0;\ + hk_main_ptr->TC_string[7] = 0;\ + hk_main_ptr->TC_string[8] = 0;\ + uint16_t crc16 = crc16_gen(hk_main_ptr->TC_string, 9);\ + hk_main_ptr->TC_string[9] = (crc16 & 0xFF00)>>8;\ + hk_main_ptr->TC_string[10] = (crc16 & 0x00FF);\ + Base_tm *tm_ptr = NULL;\ + tm_ptr = FCTN_CDMS_RLY_TMTC(hk_main_ptr);\ + delete hk_main_ptr;\ + /*DELETE THE TM AFTER USE*/\ + Base_tm *del_tm = tm_ptr;\ + int overCount = 0;\ + while( del_tm != NULL ){\ + if( (overCount < TM_OVERFLOW_CONSTANT) ){\ + Base_tm *temp = del_tm->next_TM;\ + delete del_tm;\ + del_tm = temp;\ + ++overCount;\ + }\ + else{\ + RESET_CDMS;\ break;\ }\ }\ - if( adfConfigPass == 0xFF ){\ - /*adf successfully configured*/\ - /*CALL SIGN*/\ - Base_tm *power_on_tm = NULL;\ - Base_tm *power_on_tm_head = NULL;\ - get_call_sign( power_on_tm_head );\ - power_on_tm = power_on_tm_head;\ - /*ACK L1*/\ - get_ack_l1(power_on_tm->next_TM);\ - int overFlowCountADF = 0;\ - while( power_on_tm->next_TM != NULL ){\ - if( overFlowCountADF < TM_OVERFLOW_CONSTANT ){\ - power_on_tm = power_on_tm->next_TM;\ - ++overFlowCountADF;\ - }\ - else{\ - /*PENDING: RESET CDMS*/\ - break;\ - }\ - }\ - get_tc_list(power_on_tm->next_TM, 0x00);\ - /*PENDING: TRANSMIT ABOVE TM*/\ - /*Call Sign, ACK_L1, TC_LIST*/\ - /*snd_tm.head_pointer(power_on_tm_head);*/\ - /*transmit_adf;*/\ - /*deleting the telemetry*/\ - power_on_tm = power_on_tm_head;\ - overFlowCountADF = 0;\ - while( power_on_tm != NULL ){\ - if( overFlowCountADF < TM_OVERFLOW_CONSTANT ){\ - Base_tm *temp = power_on_tm->next_TM;\ - delete power_on_tm;\ - power_on_tm = temp;\ - ++overFlowCountADF;\ - }\ - else{\ - /*PENDING: RESET CDMS*/\ - break;\ - }\ - }\ +} + +#define P_BCN_TX_MAIN(tm_ptr) {\ + Base_tc *bcn_tx_main_ptr = new Long_tc;\ + bcn_tx_main_ptr->next_TC = NULL;\ + PUTshort_or_long(bcn_tx_main_ptr,LONG_TC_CODE);\ + PUTcrc_pass(bcn_tx_main_ptr,0x1);\ + PUTexec_status(bcn_tx_main_ptr,0);\ + bcn_tx_main_ptr->TC_string[0] = 0x01;\ + bcn_tx_main_ptr->TC_string[1] = 0x41;\ + bcn_tx_main_ptr->TC_string[2] = 0x81;\ + bcn_tx_main_ptr->TC_string[3] = 0x07;\ + bcn_tx_main_ptr->TC_string[4] = 0;\ + bcn_tx_main_ptr->TC_string[5] = 0;\ + bcn_tx_main_ptr->TC_string[6] = 0;\ + bcn_tx_main_ptr->TC_string[7] = 0;\ + bcn_tx_main_ptr->TC_string[8] = 0;\ + uint16_t crc16 = crc16_gen(bcn_tx_main_ptr->TC_string, 9);\ + bcn_tx_main_ptr->TC_string[9] = (crc16 & 0xFF00)>>8;\ + bcn_tx_main_ptr->TC_string[10] = (crc16 & 0x00FF);\ + for(int i = 11; i < 135; i++){\ + bcn_tx_main_ptr->TC_string[i] = 0;\ }\ - else{\ - /*PENDING: COM_POWER OFF TX*/\ - /*PENDING: CDMS HK MAIN*/\ - uint8_t ackReceived = 0x00;\ - /*PENDING: BCN TX MAIN*/\ - if( ackReceived == 0xFF ){\ - gCOM_MNG_TMTC_THREAD->wait(5000);\ - /*PENDING: RESET CDMS*/\ - }\ - else{\ - /*PENDING: RESET CDMS*/\ - }\ - }\ - /*gPC.puts("COMPLETED COM_POWER_ON_TX\r\n");*/\ + tm_ptr = FCTN_CDMS_RLY_TMTC(bcn_tx_main_ptr);\ + delete bcn_tx_main_ptr;\ +} + +void COM_POWER_ON_TX() { + if (DEBUG) + gPC.puts("Inside COM_POWER_ON_TX\r\n"); + if( !(gFLAGS & COM_TX_FLAG) ){ + gFLAGS = gFLAGS | COM_TX_FLAG; + if( gFLAGS & BAE_SW_EN_FLAG ){ + /*WARNING: INFINITE WHILE LOOP POSSIBLE: if standby ack received and bcn tx main status = 0*/ + bool retryFlag = true; + while( retryFlag == true ){ + Base_tm *tm_ptr = NULL; + SET_BCN_STANDBY(tm_ptr); + uint8_t bcn_main_status = (tm_ptr->TM_string[2] & 0xEF); + if(( bcn_main_status == 0xC0 )||( bcn_main_status ==0xA0 )){ + /*ACK RECCEIVED*/ + if( bcn_main_status == 0xA0 ){ + retryFlag = false; + RF_SW_CNTRL_TX = 1; + Thread::wait(25); + RF_SW_CNTRL_TX = 0; + gFLAGS = gFLAGS & (~RF_SW_STATUS_FLAG);/*RF_SW_STATUS_FLAG set to RF_COM_TX*/ + } + else{ + Thread::wait(5000); + } + } + else{ + reset_bae; + Base_tm *tm_ptr2 = NULL; + SET_BCN_STANDBY(tm_ptr2); + uint8_t standbyAck2 = 0; + uint8_t bcn_main_status2 = (tm_ptr2->TM_string[2] & 0xEF); + if( ( bcn_main_status2 == 0xC0 )||( bcn_main_status2 == 0xA0 ) ){ + if( bcn_main_status2 == 0xA0 ){ + retryFlag = false; + RF_SW_CNTRL_TX = 1; + Thread::wait(25); + RF_SW_CNTRL_TX = 0; + gFLAGS = gFLAGS & (~RF_SW_STATUS_FLAG); + } + else{ + Thread::wait(5000); + } + } + else{ + retryFlag = false; + power_off_bae; + gFLAGS = gFLAGS | COM_AUTO_POWER_OFF_BAE_FLAG; + gFLAGS = gFLAGS & (~BAE_SW_EN_FLAG); + RF_SW_CNTRL_TX = 1; + Thread::wait(25); + RF_SW_CNTRL_TX = 0; + gFLAGS = gFLAGS & (~RF_SW_STATUS_FLAG);/*RF_SW_STATUS_FLAG set to RF_COM_TX*/ + } + /*DELETE THE TM AFTER USE*/ + Base_tm *del_tm = tm_ptr2; + int overCount = 0; + while( del_tm != NULL ){ + if( (overCount < TM_OVERFLOW_CONSTANT) ){ + Base_tm *temp = del_tm->next_TM; + delete del_tm; + del_tm = temp; + ++overCount; + } + else{ + RESET_CDMS; + break; + } + } + } + /*DELETE THE TM AFTER USE*/ + Base_tm *del_tm = tm_ptr; + int overCount = 0; + while( del_tm != NULL ){ + if( (overCount < TM_OVERFLOW_CONSTANT) ){ + Base_tm *temp = del_tm->next_TM; + delete del_tm; + del_tm = temp; + ++overCount; + } + else{ + RESET_CDMS; + break; + } + } + } + } + else{ + RF_SW_CNTRL_TX = 1; + Thread::wait(25); + RF_SW_CNTRL_TX = 0; + gFLAGS = gFLAGS & (~RF_SW_STATUS_FLAG);/*RF_SW_STATUS_FLAG set to RF_COM_TX*/ + } + } + COM_TX_CNTRL = 1; + uint8_t adfConfigPass = 0xFF; + for( int i = 0 ; i < COM_TX_CONFIG_LIMIT ; ++i ){ + /*PENDING: CONFIGURE ADF and set adfConfigPass*/ + if( adfConfigPass == 0xFF ){ + break; + } + } + if( adfConfigPass == 0xFF ){ + /*adf successfully configured*/ + gFLAGS = gFLAGS | COM_TX_STATUS_FLAG; + /*CALL SIGN*/ + Base_tm *power_on_tm = NULL; + Base_tm *power_on_tm_head = NULL; + get_call_sign( power_on_tm_head ); + power_on_tm = power_on_tm_head; + /*ACK L1*/ + get_ack_l1(power_on_tm->next_TM); + int overFlowCountADF = 0; + while( power_on_tm->next_TM != NULL ){ + if( overFlowCountADF < TM_OVERFLOW_CONSTANT ){ + power_on_tm = power_on_tm->next_TM; + ++overFlowCountADF; + } + else{ + RESET_CDMS; + break; + } + } + get_tc_list(power_on_tm->next_TM, 0x00); + /*Call Sign, ACK_L1, TC_LIST*/ + /*snd_tm.head_pointer(power_on_tm_head);*/ + /*transmit_adf;*/ + uint8_t transmissionPass = 0xFF; + /*PENDING: get acknowledgement of transmission*/ + /*deleting the telemetry*/ + power_on_tm = power_on_tm_head; + overFlowCountADF = 0; + while( power_on_tm != NULL ){ + if( overFlowCountADF < TM_OVERFLOW_CONSTANT ){ + Base_tm *temp = power_on_tm->next_TM; + delete power_on_tm; + power_on_tm = temp; + ++overFlowCountADF; + } + else{ + RESET_CDMS; + break; + } + } + if( transmissionPass == 0 ){ + /*NOT Transmitted succesfully*/ + COM_POWER_OFF_TX; + P_CDMS_HK_MAIN; + Base_tm *ptr_tm = NULL; + STANDBY_PRCS(ptr_tm); + uint8_t standbyACK = 0x00; + uint8_t bcn_main_status = (ptr_tm->TM_string[2] & 0xEF); + if(( bcn_main_status == 0xC0 )||( bcn_main_status ==0xA0 )){ + standbyACK = 1; + } + if(standbyACK == 1){ + uint8_t ackReceived = 0x00; + Base_tm *tm_ptr = NULL; + P_BCN_TX_MAIN(tm_ptr); + uint8_t ackcode = tm_ptr->TM_string[2] & 0xEF; + if( (ackcode == 0xA0) || (ackcode == 0xC0)) + ackReceived = 0xFF; + /*DELETE THE TM AFTER USE*/ + Base_tm *del_tm = tm_ptr; + int overCount = 0; + while( del_tm != NULL ){ + if( (overCount < TM_OVERFLOW_CONSTANT) ){ + Base_tm *temp = del_tm->next_TM; + delete del_tm; + del_tm = temp; + ++overCount; + } + else{ + RESET_CDMS; + break; + } + } + if( ackReceived == 0xFF ){ + Thread::wait(5000); + } + } + /*DELETE THE TM AFTER USE*/ + Base_tm *del_tm = ptr_tm; + int overCount = 0; + while( del_tm != NULL ){ + if( (overCount < TM_OVERFLOW_CONSTANT) ){ + Base_tm *temp = del_tm->next_TM; + delete del_tm; + del_tm = temp; + ++overCount; + } + else{ + RESET_CDMS; + break; + } + } + RESET_CDMS; + } + } + else{ + /*ADF not configured*/ + gFLAGS = gFLAGS & (~COM_TX_STATUS_FLAG); + COM_POWER_OFF_TX; + P_CDMS_HK_MAIN; + Base_tm *ptr_tm = NULL; + STANDBY_PRCS(ptr_tm); + uint8_t standbyACK = 0x00; + uint8_t bcn_main_status = (ptr_tm->TM_string[2] & 0xEF); + if(( bcn_main_status == 0xC0 )||( bcn_main_status ==0xA0 )){ + standbyACK = 1; + } + if(standbyACK == 1){ + uint8_t ackReceived = 0x00; + Base_tm *tm_ptr = NULL; + P_BCN_TX_MAIN(tm_ptr); + uint8_t ackcode = tm_ptr->TM_string[2] & 0xEF; + if( (ackcode == 0xA0) || (ackcode == 0xC0)) + ackReceived = 0xFF; + /*DELETE THE TM AFTER USE*/ + Base_tm *del_tm = tm_ptr; + int overCount = 0; + while( del_tm != NULL ){ + if( (overCount < TM_OVERFLOW_CONSTANT) ){ + Base_tm *temp = del_tm->next_TM; + delete del_tm; + del_tm = temp; + ++overCount; + } + else{ + RESET_CDMS; + break; + } + } + if( ackReceived == 0xFF ){ + Thread::wait(5000); + } + } + /*DELETE THE TM AFTER USE*/ + Base_tm *del_tm = ptr_tm; + int overCount = 0; + while( del_tm != NULL ){ + if( (overCount < TM_OVERFLOW_CONSTANT) ){ + Base_tm *temp = del_tm->next_TM; + delete del_tm; + del_tm = temp; + ++overCount; + } + else{ + RESET_CDMS; + break; + } + } + RESET_CDMS; + } + /*gPC.puts("COMPLETED COM_POWER_ON_TX\r\n");*/ } \ No newline at end of file
--- a/DefinitionsAndGlobals.h Sun Jul 03 09:47:05 2016 +0000 +++ b/DefinitionsAndGlobals.h Sun Jul 03 11:35:55 2016 +0000 @@ -159,6 +159,7 @@ COM_RX_DATA_NODE *gRX_CURRENT_DATA_NODE = NULL; // uint8_t *gRX_CURRENT_PTR = NULL; uint32_t gRX_COUNT = 0; +uint16_t gTOTAL_RAW_BYTES = 0; uint16_t gTOTAL_INCORRECT_SIZE_TC = 0x00; uint16_t gTOTAL_CRC_FAIL_TC = 0x00; uint16_t gTOTAL_REPEATED_TC = 0x00; @@ -191,6 +192,8 @@ Thread* gCOM_MNG_TMTC_THREAD = NULL; Timeout gRX_TIMEOUT; Timeout gSESSION_TIMEOUT; +Timeout gCOM_RX_DISABLE; + // COM_MNG_TMTC
--- a/P_COM_INIT.h Sun Jul 03 09:47:05 2016 +0000 +++ b/P_COM_INIT.h Sun Jul 03 11:35:55 2016 +0000 @@ -4,7 +4,7 @@ Thread::wait(25);\ RF_SW_CNTRL_BCN = 0;\ gFLAGS = gFLAGS | RF_SW_STATUS_FLAG;\ - //COM_RX_CNTRL = 0;\ + COM_RX_CNTRL = 0;\ Thread::wait(200);\ COM_RX_CNTRL = 1;\ gFLAGS = gFLAGS & (~COM_INIT_STATUS_FLAG);\
--- a/Structures.h Sun Jul 03 09:47:05 2016 +0000 +++ b/Structures.h Sun Jul 03 11:35:55 2016 +0000 @@ -27,8 +27,9 @@ 0: unexecuted 1: successfully executed 2: Execution Failed -3: Disabled -4: Marked For retry +3: CRC error +4: Disabled +5: Marked For retry */ #define TC_STATE_UNEXECUTED 0x00 #define TC_STATE_SUCCESSFULLY_EXECUTED 0x01
--- a/ThreadsAndFunctions.h Sun Jul 03 09:47:05 2016 +0000 +++ b/ThreadsAndFunctions.h Sun Jul 03 11:35:55 2016 +0000 @@ -36,6 +36,12 @@ gCOM_MNG_TMTC_THREAD->signal_set(COM_MNG_TMTC_SIGNAL_UART_INT); } +// COM_RX_DISABLE ISR +void after_com_disable(){ + gCOM_RX_DISABLE.detach(); + RX1M.attach(&rx_read, Serial::RxIrq); +} + // RX_TIMEOUT ISR void after_receive(){ gRX_TIMEOUT.detach(); @@ -63,15 +69,15 @@ }\ gHEAD_NODE_TCL = NULL;\ gLAST_NODE_TCL = NULL;\ - gMASTER_STATE = TCL_STATE_INCOMPLETE;\ + gMASTER_STATE = TCL_STATE_COMPLETED;\ gTOTAL_INCORRECT_SIZE_TC = 0;\ gTOTAL_CRC_FAIL_TC = 0;\ gTOTAL_REPEATED_TC = 0;\ gTOTAL_VALID_TC = 0;\ for(int i = 0 ; i < TM_LONG_SIZE ; ++i){\ - gLAST_TM[i] = 0x00;\ + /*gLAST_TM[i] = 0x00;*/\ }\ - gLAST_TM_SHORT_OR_LONG = SHORT_TM_CODE;\ + /*gLAST_TM_SHORT_OR_LONG = SHORT_TM_CODE;*/\ COM_RX_DATA_NODE *dataptr = gRX_HEAD_DATA_NODE;\ while( dataptr != NULL ){\ COM_RX_DATA_NODE *temp = dataptr->next_node;\ @@ -82,6 +88,7 @@ gRX_HEAD_DATA_NODE->next_node = NULL;\ gRX_CURRENT_DATA_NODE = gRX_HEAD_DATA_NODE;\ gRX_COUNT = 0;\ + gTOTAL_RAW_BYTES = 0;\ /*PENDING : ALL GLOBAL VAARIABLES AND FLAGS*/\ /*gPC.puts("finished reset all\r\n");*/\ } @@ -96,6 +103,7 @@ gRX_CURRENT_DATA_NODE = gRX_CURRENT_DATA_NODE->next_node;\ gRX_CURRENT_DATA_NODE->next_node = NULL;\ }\ + ++gTOTAL_RAW_BYTES;\ gRX_TIMEOUT.attach(&after_receive, RX_TIMEOUT_LIMIT);\ } @@ -110,10 +118,12 @@ gFLAGS = gFLAGS & (~UART_INT_FLAG); if( !(gFLAGS & COM_SESSION_FLAG) ){ // PENDING : DISABLE THREADS + // gCDMS_HK_TIMER.stop(); PL_wo_dma->stop(); gFLAGS = gFLAGS | COM_SESSION_FLAG; gSESSION_TIMEOUT.attach(&after_session, SESSION_TIME_LIMIT); gFLAGS = gFLAGS | COM_RX_FLAG; + gTOTAL_RAW_BYTES = 0; PUT_RAW_BYTE; // PENDING : MEASURE RSSI if( gFLAGS & COM_SESSION_FLAG ){ @@ -132,10 +142,15 @@ gFLAGS = gFLAGS | COM_RX_FLAG; PUT_RAW_BYTE; } + if(gTOTAL_RAW_BYTES > BYTE_OVERFLOW_CONSTANT){ + RX1M.attach(NULL); + gCOM_RX_DISABLE.attach(&after_com_disable, COM_RX_DISABLE_TIMEOUT); + after_receive(); + } } else if( gFLAGS & NEW_TC_RECEIVED ){ gPC.puts("NEW TC RECEIVED\r\n"); - Thread::wait(1000); + Thread::wait(1000);/*For testing with transmitter. To be removed later*/ gFLAGS = gFLAGS & (~NEW_TC_RECEIVED); gFLAGS = gFLAGS | COM_MNG_TMTC_RUNNING_FLAG; @@ -163,30 +178,24 @@ // CHECK WEATHER GS VERIFICATION CODE MATCHES uint8_t tempGSver = 0x00; GScodeVerification(tempGSver); - /*PENDING: INCLUDE GS VERIFICATION CODE*/ if( tempGSver == 0xFF ){ /*gPC.puts("GS code match !!\r\n");*/ gFLAGS = gFLAGS | COM_SESSION_VALIDITY; COM_POWER_ON_TX; - // PENDING: PA HOT HANDLED IN EXECUTE_XXX FUNCTIONS - uint8_t tempPAHot = 0x00; - isPAhot(tempPAHot); - if( tempPAHot == 0xFF ){ - gFLAGS = gFLAGS & ~(COM_PA_HOT_FLAG); + P_COM_HK; + if( (gFLAGS & COM_PA_HOT_FLAG) || ( gFLAGS & COM_PA_OC_FLAG ) ){ + COM_TX_CNTRL = 0; + gCOM_PA_COOLING_TIMEOUT.attach(&after_cooling_pa, COM_PA_COOLING_TIME_LIMIT); + gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG); + RX1M.attach(&rx_read, Serial::RxIrq); + } + else{ gCOM_PA_COOLING_TIMEOUT.detach(); gPC.puts("EXECUTING TELECOMMANDS\r\n"); -// DEBUF_PRINT("EXECUTING TELECOMMANDS\r\n"); EXECUTE_OBOSC_ONLY; EXECUTE_TC; gPC.puts("COMPLETED EXECUTION\r\n"); } - else{ - gFLAGS = gFLAGS | COM_PA_HOT_FLAG; - // PENDING: power off transmitter only - gCOM_PA_COOLING_TIMEOUT.attach(&after_cooling_pa, COM_PA_COOLING_TIME_LIMIT); - gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG); - RX1M.attach(&rx_read, Serial::RxIrq); - } } else{ /*gPC.puts("GS code mismatch !!\r\n");*/ @@ -194,10 +203,11 @@ reset_all; gFLAGS = gFLAGS & (~COM_SESSION_VALIDITY); // PENDING : ENABLE THREADS + // gCDMS_HK_TIMER.start(5000); PL_wo_dma->start(6000); gSESSION_TIMEOUT.detach(); gFLAGS = gFLAGS & (~COM_SESSION_FLAG); - // WARNING: clear COM_MNG_TMTC ? + gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG); } } else{ @@ -228,15 +238,16 @@ } //gPC.puts("\r\n"); COM_POWER_ON_TX; - // PENDING : POWER OFF TX + COM_TX_CNTRL = 0; RX1M.attach(&rx_read, Serial::RxIrq); gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG); } } else{ COM_POWER_ON_TX; - // POWER OFF TX transmitter only - // WARNING: reset_all ? clear com_session ? + COM_TX_CNTRL = 0; + reset_all; + gFLAGS = gFLAGS & (~COM_SESSION_FLAG); RX1M.attach(&rx_read, Serial::RxIrq); gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG); } @@ -247,6 +258,7 @@ gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG); reset_all; // PENDING : ENABLE THREADS + // gCDMS_HK_TIMER.start(5000); PL_wo_dma->start(6000); gSESSION_TIMEOUT.detach(); gFLAGS = gFLAGS & (~COM_SESSION_FLAG); @@ -254,29 +266,17 @@ } else if( gFLAGS & COM_PA_HOT_FLAG ){ /*gPC.puts("checking for PA hot in main\r\n");*/ - if( gFLAGS & COM_RX_FLAG ){ - uint8_t tempPA = 0xFF; - isPAhot(tempPA); - if( tempPA == 0x00 ){ - gCOM_PA_COOLING_TIMEOUT.attach(&after_cooling_pa, COM_PA_COOLING_TIME_LIMIT); - } - else{ - gFLAGS = gFLAGS & ~(COM_PA_HOT_FLAG); - gCOM_PA_COOLING_TIMEOUT.detach(); - } + P_COM_HK; + if((gFLAGS & COM_PA_HOT_FLAG) || (gFLAGS & COM_PA_OC_FLAG)){ + COM_TX_CNTRL = 0; + gCOM_PA_COOLING_TIMEOUT.attach(&after_cooling_pa, COM_PA_COOLING_TIME_LIMIT); } else{ - uint8_t tempPA = 0xFF; - isPAhot(tempPA); - if( tempPA == 0x00 ){ - gCOM_PA_COOLING_TIMEOUT.attach(&after_cooling_pa, COM_PA_COOLING_TIME_LIMIT); - } - else{ + gCOM_PA_COOLING_TIMEOUT.detach(); + if( !(gFLAGS & COM_RX_FLAG) ){ /*gPC.puts("PA IS COOLED DOWN\r\n");*/ - gFLAGS = gFLAGS & (~COM_PA_HOT_FLAG); gFLAGS = gFLAGS | COM_MNG_TMTC_RUNNING_FLAG; RX1M.attach(NULL); - gCOM_PA_COOLING_TIMEOUT.detach(); COM_POWER_ON_TX; EXECUTE_OBOSC_ONLY; EXECUTE_TC; @@ -287,7 +287,7 @@ /*gPC.puts("session timeout: resetting in main\r\n");*/ COM_POWER_OFF_TX; /*PENDING : ENABLE THREADS*/ - + // gCDMS_HK_TIMER.start(5000); gSESSION_TIMEOUT.detach(); gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG); gFLAGS = gFLAGS & (~COM_SESSION_FLAG); @@ -299,6 +299,7 @@ COM_POWER_OFF_TX; reset_all; // PENDING : ENABLE THREADS + // gCDMS_HK_TIMER.start(5000); PL_wo_dma->start(6000); gSESSION_TIMEOUT.detach(); gFLAGS = gFLAGS & (~COM_SESSION_FLAG);
--- a/common_functions.h Sun Jul 03 09:47:05 2016 +0000 +++ b/common_functions.h Sun Jul 03 11:35:55 2016 +0000 @@ -77,7 +77,7 @@ }\ }\ else{\ - /*PENDING: reset cdms*/\ + RESET_CDMS;\ break;\ }\ }\ @@ -99,18 +99,24 @@ /*Attach this new node at the end*/\ }\ else{\ - /*PENDING: reset CDMS*/\ + RESET_CDMS;\ break;\ }\ }\ } #define put_crc_l1_ack(tm_ptr) {\ - tm_ptr->TM_string[2] = gTOTAL_CRC_FAIL_TC & 0xFF;\ /*TC LIST STATUS*/\ - tm_ptr->TM_string[3] |= (gMASTER_STATE << 5) & 0xE0;\ + tm_ptr->TM_string[3] |= (gMASTER_STATE << 6) & 0xC0;\ /*PA HOT*/\ if( gFLAGS & COM_PA_HOT_FLAG ){\ + tm_ptr->TM_string[3] |= (1 << 5);\ + }\ + else{\ + tm_ptr->TM_string[3] &= ~(1 << 5);\ + }\ + /*PA OC*/\ + if( gFLAGS & COM_PA_OC_FLAG ){\ tm_ptr->TM_string[3] |= (1 << 4);\ }\ else{\ @@ -124,16 +130,39 @@ #define fill_l1_ack(tm_ptr) {\ tm_ptr->next_TM = NULL;\ tm_ptr->TM_string[0] = TMID_ACK_L1 << 4;\ - /*PENDING: PA TEMPERATURE*/\ tm_ptr->TM_string[1] = gTOTAL_INCORRECT_SIZE_TC & 0xFF;\ tm_ptr->TM_string[2] = gTOTAL_CRC_FAIL_TC & 0xFF;\ } +#define P_COM_HK{\ + uint8_t returnHere;\ + isPAhot(returnHere);\ + if (returnHere == 0xFF)\ + gFLAGS = gFLAGS & ~(COM_PA_HOT_FLAG);\ + else\ + gFLAGS = gFLAGS | COM_PA_HOT_FLAG;\ + if (gFLAGS & COM_PA_OC_FLAG){\ + COM_TX_CNTRL = 1;\ + wait_ms(5);\ + }\ + isPAoc(returnHere);\ + if (returnHere == 0xFF)\ + gFLAGS = gFLAGS & ~(COM_PA_OC_FLAG);\ + else\ + gFLAGS = gFLAGS | COM_PA_OC_FLAG;\ + /*P_CDMS_HANDLE_HW_FAULTS*/\ +} + #define isPAhot(returnHere){\ /*PENDING : COMPLETE THIS FUNCTION*/\ returnHere = 0xFF;\ } +#define isPAoc(returnHere){\ + /*PENDING : COMPLETE THIS FUNCTION*/\ + returnHere = 0xFF;\ +} + #define get_call_sign(tm_ptr) {\ Base_tm* call_sign_tm = new Short_tm;\ call_sign_tm->next_TM = NULL;\ @@ -156,7 +185,6 @@ /*IF CRC PASS*/\ if( (GETcrc_pass(current_TC) == 1) ){\ if(TC_count > 4){\ - /*PENDING: FILL TC_EXEC_CODE, APPEND CRC TO THE TM*/\ put_crc_l1_ack( l1_ack );\ /*extend the TM linked list*/\ TC_count = 0;\ @@ -189,7 +217,7 @@ ++overflowCountL1;\ }\ else{\ - /*PENDING: RESET CDMS*/\ + RESET_CDMS;\ break;\ }\ }\