Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SimpleDMA eeprom mbed-rtos mbed
Fork of CDMS_CODE_FM_28JAN2017 by
Diff: COM_POWER_ON_TX.h
- Revision:
- 215:570251b23c7b
- Parent:
- 213:867de6d350fa
- Child:
- 216:93505a6f8db7
--- a/COM_POWER_ON_TX.h Sun Jul 03 09:26:42 2016 +0000
+++ b/COM_POWER_ON_TX.h Sun Jul 03 09:47:05 2016 +0000
@@ -1,444 +1,107 @@
-#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;\
+#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 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;\
+ /*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 ){\
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;\
+ 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;\
+ }\
+ }\
}\
- 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");*/
+ 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");*/\
}
\ No newline at end of file
