CDMS code for testing sbc

Dependencies:   FreescaleIAP SimpleDMA mbed-rtos mbed

Fork of CDMS_CODE by shubham c

Revision:
262:752c8689944a
Parent:
95:42d6747900cb
Child:
263:3b872778b8c7
--- a/COM_POWER_ON_TX.h	Thu Jul 14 13:07:30 2016 +0000
+++ b/COM_POWER_ON_TX.h	Thu Jul 14 17:57:05 2016 +0000
@@ -1,107 +1,367 @@
-#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] = 0;\
+    stdby_tc->TC_string[5] = 0;\
+    stdby_tc->TC_string[6] = 0;\
+    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 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;\
         }\
-    }\
-    /*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 ){\
+        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{
+                    SW_RST_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;
+                        SW_OFF_BAE();
+                        gFLAGS = gFLAGS | COM_AUTO_POWER_OFF_BAE_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_TC;            
+        }
+    }
+    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_TC;
+    }
+    /*gPC.puts("COMPLETED COM_POWER_ON_TX\r\n");*/
 }
\ No newline at end of file