Repo for COM_MNG_TMTC_SIMPLE for integration with adf

Dependencies:   mbed-rtos mbed

Fork of COM_MNG_TMTC_SIMPLE by Shreesha S

Revision:
8:d1951bbdcdd8
Parent:
6:79d422d1ed42
--- a/ThreadsAndFunctions.h	Thu Dec 31 08:25:11 2015 +0000
+++ b/ThreadsAndFunctions.h	Thu Dec 31 08:39:43 2015 +0000
@@ -15,32 +15,22 @@
 // SESSION_TIMOUT ISR
 void after_session(){
     gSESSION_TIMEOUT.detach();
-    gFLAGS = gFLAGS | COM_SESSION_TIMEOUT_FLAG;
-    if( gMASTER_STATE != TCL_STATE_EXECUTING ){
-        gCOM_MNG_TMTC_THREAD->signal_set(COM_MNG_TMTC_SIGNAL_UART_INT);
-    }
+    gFLAGS = gFLAGS & (~COM_SESSION_FLAG);
+    gCOM_MNG_TMTC_THREAD->signal_set(COM_MNG_TMTC_SIGNAL_UART_INT);
 }
 
 #define reset_all {\
     Base_tc *tcp = gHEAD_NODE_TCL;\
-    gPC.puts("inside reset\r\n");\
-    gFLAGS = 0x0000;\
     while(tcp != NULL){\
         Base_tc *temp = tcp->next_TC;\
         delete tcp;\
         tcp = temp;\
     }\
-    gHEAD_NODE_TCL = NULL;\
-    gLAST_NODE_TCL = NULL;\
-    gMASTER_STATE = TCL_STATE_INCOMPLETE;\
+    rx_tc_frames = 0;\
+    rx_tc_frames = 0;\
     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_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;\
@@ -52,7 +42,6 @@
     gRX_CURRENT_DATA_NODE = gRX_HEAD_DATA_NODE;\
     gRX_COUNT = 0;\
     /*PENDING : ALL GLOBAL VAARIABLES AND FLAGS*/\
-    gPC.puts("finished reset all\r\n");\
 }
 
 #define PUT_RAW_BYTE {\
@@ -69,10 +58,6 @@
 }
 
 void COM_MNG_TMTC_FUN(void const *args){
-    if( !(gFLAGS & COM_SESSION_FLAG) ){
-        gLEDR = 1;
-        gLEDG = 1;
-    }
     while(true){
         Thread::signal_wait( COM_MNG_TMTC_SIGNAL_UART_INT );
         if( gFLAGS & UART_INT_FLAG ){
@@ -84,182 +69,82 @@
                 gFLAGS = gFLAGS | COM_RX_FLAG;
                 PUT_RAW_BYTE;
                 // PENDING : MEASURE RSSI
-                if( gFLAGS & COM_SESSION_FLAG ){
-                    gLEDR = 0;
-                    gLEDG = 0;
-                }
             }
             else if( gFLAGS & COM_RX_FLAG ){
-                gLEDR = 0;
-                gLEDG = 1;
                 PUT_RAW_BYTE;
             }
             else{
-                gLEDR = 1;
-                gLEDG = 0;
                 gFLAGS = gFLAGS | COM_RX_FLAG;
                 PUT_RAW_BYTE;
             }
         }
-        else if( gFLAGS & NEW_TC_RECEIVED ){
-            gPC.puts("NEW TC RECEIVED\r\n");
+        else if( (gFLAGS & NEW_TC_RECEIVED) && (gFLAGS & COM_MNG_TMTC_RUNNING_FLAG) ){
             gFLAGS = gFLAGS & (~NEW_TC_RECEIVED);
-            gFLAGS = gFLAGS | COM_MNG_TMTC_RUNNING_FLAG;
+            gFLAGS = gFLAGS & (~COM_RX_FLAG);
 
             // DISABLE THE RX1M INTERRUPT
             RX1M.attach(NULL);
             
-            // VERIFY CRC, REPEATED PSC AND UPDATE TOTAL_VALID_TC, INCORRECT SIZE TC, CRC FAIL TC
             while(gRX_COUNT < (RX_BUFFER_LENGTH)){
                 gRX_CURRENT_DATA_NODE->values[gRX_COUNT] = 0x00;
                 ++gRX_COUNT;
             }
             gRX_COUNT = 0;
+
+            // VERIFY CRC, REPEATED PSC AND UPDATE TOTAL_VALID_TC, INCORRECT SIZE TC, CRC FAIL TC
             raw_data_to_tc();
-            gFLAGS = gFLAGS & (~COM_RX_FLAG);
-
             if( gTOTAL_VALID_TC > 0 ){
-                gPC.printf("valid TC rx: %u\r\n", gTOTAL_VALID_TC);
-                if( gTOTAL_VALID_TC < COM_MAX_TC_LIMIT ){
-                    // CHECK WEATHER TC LIST HAS MISSING TC OR WEATHER LAST FRAME BIT IS HIGH IN THE LAST PSC-TC
-                    gPC.puts("checking for tc list complete\r\n");
-                    uint8_t tempContinue = 0xFF;
-                    continueToExecute(tempContinue);
-                    if(tempContinue == 0x00){
-                        gPC.puts("tc list is complete\r\n");
-                        // CHECK WEATHER GS VERIFICATION CODE MATCHES
-                        uint8_t tempGSver = 0x00;
-                        GScodeVerification(tempGSver);
-                        /*PENDING: INCLUDE GS VERIFICATION CODE*/
-                        if( true ){
-                            gPC.puts("GC 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);
-                                gCOM_PA_COOLING_TIMEOUT.detach();
-                                gPC.puts("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");
-                            RX1M.attach(&rx_read, Serial::RxIrq);
-                            reset_all;
-                            gFLAGS = gFLAGS & (~COM_SESSION_VALIDITY);
-                            // PENDING : ENABLE THREADS
-                            gSESSION_TIMEOUT.detach();
-                            gFLAGS = gFLAGS & (~COM_SESSION_FLAG);
-                            // WARNING: clear COM_MNG_TMTC ?
-                        }
+                // CHECK WEATHER TC LIST HAS MISSING TC OR WEATHER LAST FRAME BIT IS HIGH IN THE LAST PSC-TC
+                uint8_t tempContinue = 0xFF;
+                continueToExecute(tempContinue);
+                if(tempContinue == 0x00){
+                    // CHECK WEATHER GS VERIFICATION CODE MATCHES
+                    uint8_t tempGSver = 0x00;
+                    GScodeVerification(tempGSver);
+                    if( tempGSver ){
+                        gFLAGS = gFLAGS | COM_SESSION_VALIDITY;
+                        // PENDING : COM_POWER_ON_TX
+                        EXECUTE_OBOSC_ONLY;
+                        EXECUTE_TC;
                     }
                     else{
-                        gPC.puts("tc list is not complete\r\n");
-                        if(tempContinue & 0x01){
-                            gPC.puts("last packet bit not found\r\n");
-                        }
-                        if( tempContinue & 0x02 ){
-                            gPC.puts("missing psc found\r\n");
-                        }
-                        gPC.printf("crc fail tc = %u\r\n", gTOTAL_CRC_FAIL_TC);
-                        gPC.printf("incorrect size tc = %u\r\n", gTOTAL_INCORRECT_SIZE_TC);
-                        gPC.printf("repeated psc = %u\r\n", gTOTAL_REPEATED_TC);
-                        Base_tc *test_tc = gHEAD_NODE_TCL;
-                        while( test_tc != NULL ){
-                            int length = 0;
-                            if( GETshort_or_long_tc(test_tc) == SHORT_TC_CODE ){
-                                length = TC_SHORT_SIZE;
-                            }
-                            else{
-                                length = TC_LONG_SIZE;
-                            }
-                            for(int i = 0 ; i < length ; ++i ){
-                                gPC.printf("%x ", test_tc->TC_string[i]);
-                            }
-                            gPC.puts("\r\n");
-                            test_tc = test_tc->next_TC;
-                        }
-                        gPC.puts("\r\n");
-                        COM_POWER_ON_TX;
-                        // PENDING : POWER OFF TX
-                        RX1M.attach(&rx_read, Serial::RxIrq);
-                        gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);
+                        gFLAGS = gFLAGS & (~COM_SESSION_VALIDITY);
+                        // PENDING : ENABLE THREADS
+                        gSESSION_TIMEOUT.detach();
+                        gFLAGS = gFLAGS & (~COM_SESSION_FLAG);
                     }
                 }
                 else{
-                    COM_POWER_ON_TX;
-                    // POWER OFF TX transmitter only
-                    // WARNING: reset_all ? clear com_session ?
+                    // PENDING : COM_POWER_ON_TX
+                    // PENDING : POWER OFF TX
                     RX1M.attach(&rx_read, Serial::RxIrq);
-                    gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);
                 }
             }
-            else{
-                gPC.puts("No valid TC received\r\n");
+            else if( !(gFLAGS & COM_TX_FLAG) ){
                 RX1M.attach(&rx_read, Serial::RxIrq);
-                gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);
-                reset_all;
                 // PENDING : ENABLE THREADS
                 gSESSION_TIMEOUT.detach();
                 gFLAGS = gFLAGS & (~COM_SESSION_FLAG);
             }
         }
         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();
-                }
+            uint8_t tempPA = 0xFF;
+            isPAhot(tempPA);
+            if( tempPA == 0x00 ){
+                gCOM_PA_COOLING_TIMER.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{
-                    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;
-                }
+                gFLAGS = gFLAGS & (~COM_PA_HOT_FLAG);
+                gCOM_PA_COOLING_TIMER.detach();
+                // PENDING : COM POWER ON TX
+                EXECUTE_OBOSC_ONLY;
+                EXECUTE_TC;
             }
         }
-        else if( gFLAGS & COM_SESSION_TIMEOUT_FLAG ){
-            gPC.puts("session timeout: resetting in main\r\n");
-            COM_POWER_OFF_TX;
-            /*PENDING : ENABLE THREADS*/
-            gSESSION_TIMEOUT.detach();
-            gFLAGS = gFLAGS & (~COM_MNG_TMTC_RUNNING_FLAG);
-            gFLAGS = gFLAGS & (~COM_SESSION_FLAG);
-            reset_all;
-        }
         else{
-            gPC.puts("INVALID SIGNAL RECEIVED IN MAIN\r\n");
             // SOME INVALID SIGNAL RECEIVED
-            COM_POWER_OFF_TX;
+            
+            // PENDING : COM_POWER_OFF_TX
             reset_all;
             // PENDING : ENABLE THREADS
             gSESSION_TIMEOUT.detach();
@@ -268,41 +153,46 @@
     }
 }
 
-//void SCIENCE_FUN(void const *args){
-////    SPIpayload.format(8,0);
-////    SPIpayload.frequency(1000000);
-//    for ( int i = 0 ; i < PAYLOAD_BUFFER_LENGTH ; i++ ){
-//        gPAYLOAD_BUFFER[i] = 1;
-//    }
-//
-//    // initialise the buffer for dma
-//    // SPIpayload.bulkRead_init(VAR_SPACE::payload_dma_buffer, PAYLOAD_DMA_SIZE, &payload_interrupt_fun);
-//    // start dma read
-//    // SPIpayload.bulkRead_start();
-//
-//    // attach DMA interrupt
-//    while(true){
-//         gSCIENCE_THREAD->signal_wait(0x01);
-//
-////*********************************************************THE TEST
-//        
-//        //read rtc time later
-//        uint64_t RTC_time = 0;
-//        Science_Data_Compression::complete_compression( gPAYLOAD_BUFFER , RTC_time);
-////        SPI_mutex.lock();
-////        disk_write(SDcard_lastWritten ,  5);
-////        SPI_mutex.unlock();
-//
-////**********************************************THE TEST
-//
-////        counter_for_payload++;
-////        if(counter_for_payload == 10){
-////         payload_ticker.detach();
-////         ledg = 0;
-////         PC.puts("its over\r\n");
-////        }
-//        
-////        SPIpayload.bulkRead_start();
-//
-//    }
-//}
\ No newline at end of file
+void SCIENCE_FUN(void const *args){
+//    SPIpayload.format(8,0);
+//    SPIpayload.frequency(1000000);
+    for ( int i = 0 ; i < PAYLOAD_BUFFER_LENGTH ; i++ ){
+        gPAYLOAD_BUFFER[i] = 1;
+    }
+
+    // initialise the buffer for dma
+    // SPIpayload.bulkRead_init(VAR_SPACE::payload_dma_buffer, PAYLOAD_DMA_SIZE, &payload_interrupt_fun);
+    // start dma read
+    // SPIpayload.bulkRead_start();
+
+    // attach DMA interrupt
+    while(true){
+         gSCIENCE_THREAD->signal_wait(0x01);
+
+//*********************************************************THE TEST
+        
+        //read rtc time later
+        uint64_t RTC_time = 0;
+        Science_Data_Compression::complete_compression( gPAYLOAD_BUFFER , RTC_time);
+//        SPI_mutex.lock();
+//        disk_write(SDcard_lastWritten ,  5);
+//        SPI_mutex.unlock();
+
+//**********************************************THE TEST
+
+
+
+//        counter_for_payload++;
+//        if(counter_for_payload == 10){
+//         payload_ticker.detach();
+//         ledg = 0;
+//         PC.puts("its over\r\n");
+//        }
+        
+        
+        
+        
+//        SPIpayload.bulkRead_start();
+
+    }
+}
\ No newline at end of file