Compression code changed and RLY_TMTC pointers managed

Dependencies:   FreescaleIAP SimpleDMA mbed-rtos mbed

Fork of CDMS_CODE by shubham c

Revision:
212:3d13a06bcd3a
Parent:
211:77bee0cbebfe
--- a/COM_POWER_ON_TX.h	Sat Jun 18 09:07:28 2016 +0000
+++ b/COM_POWER_ON_TX.h	Sun Jul 03 05:37:25 2016 +0000
@@ -1,7 +1,32 @@
+#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 Short_tc;\
+    Base_tc *beacon_tc = new Long_tc;\
     beacon_tc->next_TC = NULL;\
-    PUTshort_or_long(beacon_tc,SHORT_TC_CODE);\
+    PUTshort_or_long(beacon_tc,LONG_TC_CODE);\
     PUTcrc_pass(beacon_tc,0x1);\
     PUTexec_status(beacon_tc,0);\
     beacon_tc->TC_string[0] = 0x01;\
@@ -16,6 +41,9 @@
     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;\
 }
@@ -38,7 +66,7 @@
     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 = new Short_tm;\
+    Base_tm *tm_ptr = NULL;\
     tm_ptr =  FCTN_CDMS_RLY_TMTC(reset_BAE);\
     delete reset_BAE;\
     /*DELETE THE TM AFTER USE*/\
@@ -76,8 +104,8 @@
     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 = new Short_tm;\
-    tm_ptr =  FCTN_CDMS_RLY_TMTC(power_off_BAE);\
+    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;\
@@ -114,8 +142,8 @@
     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;\
-    tm_ptr =  FCTN_CDMS_RLY_TMTC(hk_main_ptr);\
+    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;\
@@ -135,9 +163,9 @@
 }
 
 #define P_BCN_TX_MAIN(tm_ptr) {\
-    Base_tc *bcn_tx_main_ptr = new Short_tc;\
+    Base_tc *bcn_tx_main_ptr = new Long_tc;\
     bcn_tx_main_ptr->next_TC = NULL;\
-    PUTshort_or_long(bcn_tx_main_ptr,SHORT_TC_CODE);\
+    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;\
@@ -152,6 +180,9 @@
     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;\
+    }\
     tm_ptr =  FCTN_CDMS_RLY_TMTC(bcn_tx_main_ptr);\
     delete bcn_tx_main_ptr;\
 }
@@ -165,15 +196,12 @@
             /*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;
+                Base_tm *tm_ptr = NULL;
                 SET_BCN_STANDBY(tm_ptr);
-                uint8_t standbyAck = 0;
                 uint8_t bcn_main_status = (tm_ptr->TM_string[2] & 0xEF);
-                if(( bcn_main_status == 0xC0 )||( bcn_main_status ==0xA0 ))
-                    standbyAck = 1;
-                if( /*standbyAck*/ true ){
+                if(( bcn_main_status == 0xC0 )||( bcn_main_status ==0xA0 )){
                     /*ACK RECCEIVED*/
-                    if( /*bcn_main_status == 0xA0*/ true ){
+                    if( bcn_main_status == 0xA0 ){
                         retryFlag = false;
                         RF_SW_CNTRL_TX = 1;
                         Thread::wait(25);
@@ -186,13 +214,11 @@
                 }
                 else{
                     reset_bae;
-                    Base_tm *tm_ptr2 = new Short_tm;
+                    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 ) )
-                        standbyAck2 = 1;
-                    if( standbyAck2 ){
+                    if( ( bcn_main_status2 == 0xC0 )||( bcn_main_status2 == 0xA0 ) ){
                         if( bcn_main_status2 == 0xA0 ){
                             retryFlag = false;
                             RF_SW_CNTRL_TX = 1;
@@ -202,7 +228,7 @@
                         }
                         else{
                             Thread::wait(5000);
-                        }\                           
+                        }                           
                     }
                     else{
                         retryFlag = false;
@@ -248,18 +274,16 @@
             }
         }
         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);/*RF_SW_STATUS_FLAG set to RF_COM_TX*/
         }
     }
-    //COM_TX_CNTRL = 1;
+    COM_TX_CNTRL = 1;
     uint8_t adfConfigPass = 0xFF;
     for( int i = 0 ; i < COM_TX_CONFIG_LIMIT ; ++i ){
-        /*PENDING: CONFIGURE ADF*/
+        /*PENDING: CONFIGURE ADF and set adfConfigPass*/
         if( adfConfigPass == 0xFF ){
             break;
         }
@@ -310,19 +334,76 @@
             /*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 = new Short_tm;
+            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;
-            if( ackReceived == 0xFF ){
-                Thread::wait(5000);
-                RESET_CDMS;
-            }
-            else{
-                RESET_CDMS;
-            }
             /*DELETE THE TM AFTER USE*/
             Base_tm *del_tm = tm_ptr;
             int overCount = 0;
@@ -338,28 +419,12 @@
                     break;
                 }
             }
-        }
-    }
-    else{
-        /*ADF not configured*/
-        gFLAGS = gFLAGS & (~COM_TX_STATUS_FLAG);
-        COM_POWER_OFF_TX;
-        P_CDMS_HK_MAIN;
-        uint8_t ackReceived = 0x00;
-        Base_tm *tm_ptr = new Short_tm;
-        P_BCN_TX_MAIN(tm_ptr);
-        uint8_t ackcode = tm_ptr->TM_string[2] & 0xEF;
-        if( (ackcode == 0xA0) || (ackcode == 0xC0))
-            ackReceived = 0xFF;
-        if( ackReceived == 0xFF ){
-            Thread::wait(5000);
-            RESET_CDMS;
-        }
-        else{
-            RESET_CDMS;
+            if( ackReceived == 0xFF ){
+                Thread::wait(5000);
+            }
         }
         /*DELETE THE TM AFTER USE*/
-        Base_tm *del_tm = tm_ptr;
+        Base_tm *del_tm = ptr_tm;
         int overCount = 0;
         while( del_tm != NULL ){
             if( (overCount < TM_OVERFLOW_CONSTANT) ){
@@ -373,6 +438,7 @@
                 break;
             }
         }
+        RESET_CDMS;
     }
     /*gPC.puts("COMPLETED COM_POWER_ON_TX\r\n");*/
 }
\ No newline at end of file