Latest FM Code with EEPROM

Dependencies:   FreescaleIAP SimpleDMA eeprom mbed-rtos mbed

Fork of CDMS_QM_03MAR2017_Flash_with_obsrs by Team Fox

Revision:
356:4484bf39526f
Parent:
354:eb6c863756a8
--- a/ThreadsAndFunctions.h	Tue Mar 28 08:50:07 2017 +0000
+++ b/ThreadsAndFunctions.h	Sat Feb 24 10:28:56 2018 +0000
@@ -1,18 +1,16 @@
 //Science Thread
 //SPI ISR
-
+#include "FMS_all.h"//this is to include the 'dmaSPISlave' and payload_isr_fun
 #include "COM_MNG_TMTC.h"
 #include "adf.h"
 #include "dmaSPIslave.h"
-
+//dmaSPISlave *gPAY_SPI;
+//void payload_isr_fun(){
+//    gSCIENCE_THREAD->signal_set(SCIENCE_SIGNAL);
+//  
+//}
 
 
-dmaSPISlave *gPAY_SPI;
-
-void payload_isr_fun(){
-    gSCIENCE_THREAD->signal_set(SCIENCE_SIGNAL);
-  
-}
 
 void payload_isr_fun_dma(void const *args ){
     gSCIENCE_THREAD->signal_set(SCIENCE_SIGNAL);
@@ -30,10 +28,14 @@
     while(true){
         gPC.printf("waiting for Sci sig\n\r");
         gSCIENCE_THREAD->signal_wait(SCIENCE_SIGNAL);
-         
         gPC.printf("checking mutex in Sci\n\r");
         gMutex.lock();
         
+        if (EN_RCV_SC == 0)
+        {
+            gMutex.unlock();
+            continue;
+        }
         gPC.printf("locked mutex,entered in Sci thread\n\r"); 
   
         DMA_LED1 = 1;
@@ -45,11 +47,11 @@
       //  srp(gPAYLOAD_BUFFER);//skip one apcket when cdms resets
         //gPC.puts("exit_srp\r\n");
         //wait(2);/*timeout to be decided*/
-        if(dma)
+        if(dma)  //something wrong here
         {
      //       TIME_LATEST_I2C_SPEED = FCTN_CDMS_RD_RTC() >> 7;   
             PL_RCV_SC_DATA_COUNTER++;
-            gPAY_SPI->bulkRead_start();
+            gPAY_SPI->bulkRead_start();//something wrong here
          //     DMA_LED1 = !DMA_LED1; // added by samp
             //gPAY_SPI->bulkRead_pause();
             //gPAY_SPI->bulkRead_resume(&payload_isr_fun);
@@ -88,7 +90,11 @@
         gPC.printf("\r\nreleasing mutex for Sci\n\r");
         DMA_LED1 =0;
         //__enable_irq();
-        gMutex.unlock(); 
+        if(PL_SC_TEST){
+          PL_SC_TEST = false;
+          gCOM_MNG_TMTC_THREAD->signal_set(RCVED_SCI_DATA_SIGNAL);//used for P_PL_RCV_SC_DATA
+        }
+        gMutex.unlock();
     }
 }
 
@@ -106,12 +112,14 @@
 void rx_read(){
     gRX_CURRENT_DATA_NODE->values[gRX_COUNT] = RX1M.getc();
     //Checking RSSI
+    //gPC.printf("\nfck ths sht\n");
     if(!COM_RSSI_SET)
     RSSI_VOLTAGE = COMRX_RSSI_VOLTAGE.read() * 3.3;//to be checked
     RSSI_MAX = RSSI_VOLTAGE;
     COM_RSSI_SET = 1;
   
     gFLAGS = gFLAGS | UART_INT_FLAG;
+    
     gCOM_MNG_TMTC_THREAD->signal_set(COM_MNG_TMTC_SIGNAL_UART_INT);
 }
 
@@ -195,11 +203,15 @@
         Thread::signal_wait( COM_MNG_TMTC_SIGNAL_UART_INT );
         if( gFLAGS & UART_INT_FLAG ){
             gFLAGS = gFLAGS & (~UART_INT_FLAG);
+            //gPC.puts("in uart");
             if( !(gFLAGS & COM_SESSION_FLAG) ){
                 // DISABLE THREADS
+               // gPC.puts("1\r\n");
                 HK_counter->stop();
-                gPAY_SPI->bulkRead_pause();
-                 PL_GPIO_3_STATUS=1;
+                resume_pl_dma = 0;
+                PL_GPIO_2_STATUS = 1;//STOP SCIENCE TRANSFER &  CONTROL pin NOT STATUS
+                //gPAY_SPI->bulkRead_pause();
+                //PL_GPIO_3_STATUS=1;//problem with this
                 gFLAGS = gFLAGS | COM_SESSION_FLAG;
                 gSESSION_TIMEOUT.attach(&after_session, COM_SESSION_TIMEOUT);
                 gFLAGS = gFLAGS | COM_RX_FLAG;
@@ -214,42 +226,50 @@
             else if( gFLAGS & COM_RX_FLAG ){
                 //gLEDR = 0;
                 //gLEDG = 1;
+                                //gPC.puts("2\r\n");
+
                 PUT_RAW_BYTE;
             }
             else{
                 //gLEDR = 1;
                 //gLEDG = 0;
+                               // gPC.puts("3\r\n");
+
                 gFLAGS = gFLAGS | COM_RX_FLAG;
                 PUT_RAW_BYTE;
             }
             if(gTOTAL_RAW_BYTES > BYTE_OVERFLOW_CONSTANT){
+                                //gPC.puts("4\r\n");
+
                 RX1M.attach(NULL);
                 gCOM_RX_DISABLE.attach(&after_com_disable, COM_RX_DISABLE_TIMEOUT);
                 after_receive();
             }
         }
         else if( gFLAGS & NEW_TC_RECEIVED ){
-            gPC.puts("\n\n\n\r\rNEW TC RECEIVED\r\n");
+            gFLAGS = gFLAGS & (~NEW_TC_RECEIVED);
             /*Thread::wait(2000);*/
-            gFLAGS = gFLAGS & (~NEW_TC_RECEIVED);
             gFLAGS = gFLAGS | COM_MNG_TMTC_RUNNING_FLAG;
 
             // DISABLE THE RX1M INTERRUPT
             RX1M.attach(NULL);
-            
+            //gPC.printf("\n flags = %u \n", gFLAGS);
+            gPC.puts("\n\n\n\r\rNEW TC RECEIVED\r\n");
+            //gPC.printf("\n %u \n", gFLAGS);
             // 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;
+            COM_RST.reset();//com thread saviour
+            COM_RST.start();
             raw_data_to_tc();
+            COM_RST.stop();
             gFLAGS = gFLAGS & (~COM_RX_FLAG);
-            
             //Mutex
             gMutex.lock();
-            
-            if( gTOTAL_VALID_TC > 0 ){
+            if( gTOTAL_VALID_TC > 1 ){
                 gPC.printf("valid TC rx: %u\r\n", gTOTAL_VALID_TC);
                 //gTOTAL_VALID_TC = 1;
                 if( gTOTAL_VALID_TC < COM_MAX_TC_LIMIT ){
@@ -414,11 +434,11 @@
         if(resume_pl_dma)
         {
             
-            
-            resume_pl_dma = 0;
+            PL_GPIO_2_STATUS=0;
+           // resume_pl_dma = 0;
         }
         //gPC.puts("dma started");
-        gPAY_SPI->bulkRead_resume(&payload_isr_fun);
+        //gPAY_SPI->bulkRead_resume(&payload_isr_fun);
         gMutex.unlock();
         
     }