![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
CDMS_CODE_samp_23SEP_DMA_flag
Dependencies: FreescaleIAP SimpleDMA mbed-rtos mbed
Fork of CDMS_CODE_samp_23SEP_DMA by
Diff: COM_POWER_ON_TX.h
- Revision:
- 144:4c20fcc105ce
- Parent:
- 137:489a93a04d6b
- Child:
- 155:ca7365c03fd7
diff -r 489a93a04d6b -r 4c20fcc105ce COM_POWER_ON_TX.h --- a/COM_POWER_ON_TX.h Thu Mar 24 04:04:33 2016 +0000 +++ b/COM_POWER_ON_TX.h Fri Apr 01 19:57:02 2016 +0000 @@ -1,13 +1,13 @@ -#define SET_BCN_STANDBY ( tm_ptr ){\ +#define SET_BCN_STANDBY(tm_ptr){\ Base_tc *beacon_tc = new Short_tc;\ beacon_tc->next_TC = NULL;\ - PUTshort_or_long(beacon_tc,0);\ + PUTshort_or_long(beacon_tc,SHORT_TC_CODE);\ PUTcrc_pass(beacon_tc,0x1);\ PUTexec_status(beacon_tc,0);\ beacon_tc->TC_string[0] = 0x01;\ - beacon_tc->TC_string[1] = 0x41;\ - beacon_tc->TC_string[2] = 0x65;\ - beacon_tc->TC_string[3] = 0x11;\ + beacon_tc->TC_string[1] = BCN_APID_SOURCE;\ + beacon_tc->TC_string[2] = BCN_SERVICE;\ + beacon_tc->TC_string[3] = BCN_DISABLE_PID;\ beacon_tc->TC_string[4] = 0x00;\ beacon_tc->TC_string[5] = 0;\ beacon_tc->TC_string[6] = 0;\ @@ -22,13 +22,13 @@ #define reset_bae {\ Base_tc *reset_BAE = new Short_tc;\ reset_BAE->next_TC = NULL;\ - PUTshort_or_long(reset_BAE,0);\ + 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] = 0x81;\ - reset_BAE->TC_string[2] = 0x81;\ - reset_BAE->TC_string[3] = 0x33;\ + 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;\ @@ -40,13 +40,13 @@ Base_tm *tm_ptr = new Short_tm;\ tm_ptr = FCTN_CDMS_RLY_TMTC(reset_BAE);\ /*DELETE THE TM AFTER USE*/\ - obosc_tm_current = tm_ptr;\ + Base_tm *del_tm = tm_ptr;\ int overCount = 0;\ - while( obosc_tm_current != NULL ){\ + while( del_tm != NULL ){\ if( (overCount < TM_OVERFLOW_CONSTANT) ){\ - Base_tm *temp = obosc_tm_current->next_TM;\ - delete obosc_tm_current;\ - obosc_tm_current = temp;\ + Base_tm *temp = del_tm->next_TM;\ + delete del_tm;\ + del_tm = temp;\ ++overCount;\ }\ else{\ @@ -59,13 +59,13 @@ #define power_off_bae {\ Base_tc *power_off_BAE = new Short_tc;\ power_off_BAE->next_TC = NULL;\ - PUTshort_or_long(power_off_BAE,0);\ + 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] = 0x81;\ - power_off_BAE->TC_string[2] = 0x81;\ - power_off_BAE->TC_string[3] = 0x23;\ + 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;\ @@ -77,13 +77,51 @@ Base_tm *tm_ptr = new Short_tm;\ tm_ptr = FCTN_CDMS_RLY_TMTC(power_off_BAE);\ /*DELETE THE TM AFTER USE*/\ - obosc_tm_current = tm_ptr;\ + Base_tm *del_tm = tm_ptr;\ int overCount = 0;\ - while( obosc_tm_current != NULL ){\ + while( del_tm != NULL ){\ if( (overCount < TM_OVERFLOW_CONSTANT) ){\ - Base_tm *temp = obosc_tm_current->next_TM;\ - delete obosc_tm_current;\ - obosc_tm_current = temp;\ + Base_tm *temp = del_tm->next_TM;\ + delete del_tm;\ + del_tm = temp;\ + ++overCount;\ + }\ + else{\ + /*PENDING: RESET CDMS: MEMORY LEAK FOUND*/\ + 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 = new Short_tm;\ + /*PENDING*/\ + /*tm_ptr = FCTN_CDMS_RLY_TMTC(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{\ @@ -93,170 +131,236 @@ }\ } -#define 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 = new Short_tm;\ - SET_BCN_STANDBY ( tm_ptr );\ - uint8_t standbyAck = (tm_ptr & 0xEF);\ - if( standbyAck == 0xE0 ){\ - /*ACK RECCEIVED*/\ - uint8_t bcn_main_status = 0xFF;\ - /*PENDING: BEACON TX MAIN STATUS from tm_ptr*/\ - if( bcn_main_status ){\ - retryFlag = false;\ - /*PENDING: SWITCH RELAY TO COM_TX*/\ - gFLAGS = gFLAGS & (~RF_SW_STATUS_FLAG);\ - }\ - else{\ - gCOM_MNG_TMTC_THREAD->wait(5000);\ - }\ - }\ - else{\ - reset_bae;\ - Base_tm *tm_ptr2 = new Short_tm;\ - SET_BCN_STANDBY ( tm_ptr2 );\ - uint8_t standbyAck2 = (tm_ptr2 & 0xEF);\ - if( standbyAck2 == 0xEF ){\ - uint8_t bcn_main_status = 0xFF;\ - /*PENDING: BEACON TX MAIN STATUS from tm_ptr2*/\ - if( bcn_main_status = 0xFF ){\ - retryFlag = false;\ - /*PENDING: SWITCH RF RELAY TO COM TX*/\ - gFLAGS = gFLAGS & (~RF_SW_STATUS_FLAG);\ - }\ - else{\ - gCOM_MNG_TMTC_THREAD->wait(5000);\ - }\ - }\ - else{\ - retryFlag = false;\ - power_off_bae;\ - gFLAGS = gFLAGS | COM_AUTO_POWER_OFF_BAE_FLAG;\ - gFLAGS = gFLAGS & (~BAE_SW_EN_FLAG);\ - /*PENDING: SWITCH RF RELAY TO COM TX*/\ - gFLAGS = gFLAGS & (~RF_SW_STATUS_FLAG);\ - }\ - /*DELETE THE TM AFTER USE*/\ - obosc_tm_current = tm_ptr2;\ - int overCount = 0;\ - while( obosc_tm_current != NULL ){\ - if( (overCount < TM_OVERFLOW_CONSTANT) ){\ - Base_tm *temp = obosc_tm_current->next_TM;\ - delete obosc_tm_current;\ - obosc_tm_current = temp;\ - ++overCount;\ - }\ - else{\ - /*PENDING: RESET CDMS: MEMORY LEAK FOUND*/\ - break;\ - }\ - }\ - }\ - /*DELETE THE TM AFTER USE*/\ - obosc_tm_current = tm_ptr;\ - int overCount = 0;\ - while( obosc_tm_current != NULL ){\ - if( (overCount < TM_OVERFLOW_CONSTANT) ){\ - Base_tm *temp = obosc_tm_current->next_TM;\ - delete obosc_tm_current;\ - obosc_tm_current = temp;\ - ++overCount;\ - }\ - else{\ - /*PENDING: RESET CDMS: MEMORY LEAK FOUND*/\ - break;\ - }\ - }\ - }\ - }\ - else{\ - power_off_bae;\ - gFLAGS = gFLAGS & (~BAE_SW_EN_FLAG);\ - /*PENDING: SWITCH RF RELAY TO COM TX*/\ - gFLAGS = gFLAGS & (~RF_SW_STATUS_FLAG);\ - }\ - }\ - /*PENDING: POWER ON COM_TX*/\ - /*power_on_com_tx_pin = 1;*/\ - uint8_t adfConfigPass = 0xFF;\ - for( int i = 0 ; i < COM_TX_CONFIG_LIMIT ; ++i ){\ - /*PENDING: CONFIGURE ADF*/\ - if( adfConfigPass == 0xFF ){\ - 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);\ - /*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;\ - }\ - }\ - if(/*NOT Transmitted succesfully*/){\ - 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*/\ - }\ - }\ - }\ - 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");*/\ +#define P_BCN_TX_MAIN(tm_ptr) {\ + Base_tc *bcn_tx_main_ptr = new Short_tc;\ + bcn_tx_main_ptr->next_TC = NULL;\ + PUTshort_or_long(bcn_tx_main_ptr,SHORT_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);\ + /*PENDING*/\ + /*tm_ptr = FCTN_CDMS_RLY_TMTC(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 = new Short_tm; + SET_BCN_STANDBY(tm_ptr); + uint8_t standbyAck = 0; + uint16_t crc = crc16_gen(tm_ptr->TM_string, TM_SHORT_SIZE-2); + if( (tm_ptr->TM_string[11] == ((crc & 0xFF00) >> 8)) && (tm_ptr->TM_string[12] == (crc & 0x00FF))) + standbyAck = 1; + if( standbyAck ){ + /*ACK RECCEIVED*/ + uint8_t bcn_main_status = (tm_ptr->TM_string[2] & 0xEF); + if( bcn_main_status == 0xE0 ){ + 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{ + reset_bae; + Base_tm *tm_ptr2 = new Short_tm; + SET_BCN_STANDBY(tm_ptr2); + uint8_t standbyAck2 = 0; + uint16_t crc2 = crc16_gen(tm_ptr2->TM_string, TM_SHORT_SIZE-2); + if( (tm_ptr2->TM_string[11] == ((crc2 & 0xFF00) >> 8)) && (tm_ptr2->TM_string[12] == (crc2 & 0x00FF))) + standbyAck2 = 1; + if( standbyAck2 ){ + uint8_t bcn_main_status2 = (tm_ptr2->TM_string[2] & 0xEF); + if( bcn_main_status2 == 0xE0 ){ + 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); + } + /*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{ + /*PENDING: RESET CDMS: MEMORY LEAK FOUND*/ + 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{ + /*PENDING: RESET CDMS: MEMORY LEAK FOUND*/ + break; + } + } + } + } + else{ + power_off_bae; + 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); + } + } + /*PENDING: POWER ON COM_TX*/ + /*power_on_com_tx_pin = 1;*/ + uint8_t adfConfigPass = 0xFF; + for( int i = 0 ; i < COM_TX_CONFIG_LIMIT ; ++i ){ + /*PENDING: CONFIGURE ADF*/ + if( adfConfigPass == 0xFF ){ + 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); + /*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; + } + } + if( true /*NOT Transmitted succesfully*/){ + COM_POWER_OFF_TX; + P_CDMS_HK_MAIN; + uint8_t ackReceived = 0x00; + Base_tm *tm_ptr; + P_BCN_TX_MAIN(tm_ptr); + if( ackReceived == 0xFF ){ + Thread::wait(5000); + /*PENDING: RESET CDMS*/ + } + else{ + /*PENDING: RESET CDMS*/ + } + /*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{ + /*PENDING: RESET CDMS: MEMORY LEAK FOUND*/ + break; + } + } + } + } + else{ + COM_POWER_OFF_TX; + P_CDMS_HK_MAIN; + uint8_t ackReceived = 0x00; + Base_tm *tm_ptr; + P_BCN_TX_MAIN(tm_ptr); + if( ackReceived == 0xFF ){ + Thread::wait(5000); + /*PENDING: RESET CDMS*/ + } + else{ + /*PENDING: RESET CDMS*/ + } + /*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{ + /*PENDING: RESET CDMS: MEMORY LEAK FOUND*/ + break; + } + } + } + /*gPC.puts("COMPLETED COM_POWER_ON_TX\r\n");*/ } \ No newline at end of file