vr1.1

Dependencies:   FreescaleIAP mbed-rtos mbed

Fork of CDMS_RTOS_v1_1 by Team Fox

Revision:
12:cb3ee1ac3638
Parent:
9:7ff6d75cc09e
Child:
13:ba5dca9e18d8
--- a/PL.cpp	Mon Jul 06 06:25:14 2015 +0000
+++ b/PL.cpp	Mon Jul 06 10:31:29 2015 +0000
@@ -3,6 +3,8 @@
 #include "all_funcs.h"
 #include "Flags.h"
 
+SPISlave pl_spi(PTE18, PTE19, PTE17, PTE16 ); // mosi, miso, sclk, ssel --> using SPI1
+
 Serial sr(USBTX,USBRX);
 
 void FCTN_PL_RCV_SC_DATA()
@@ -25,53 +27,92 @@
     sr.printf("\r\r\n");
 }
 
+void FCTN_PL_SCIENCE()
+{
+   all_flags|=PL_SCIENCE_STATUS;
+   FCTN_PL_RCV_SC_DATA();
+   if(all_flags&IS_FIRST_TIME_SC_DATA == 0)                          //What happens to TIME_ELAPSED_LAST_SRP on reset? Should it be stored in Flash?  
+   {
+         TIME_ELAPSED_LAST_SRP=SRP_INTER_VAL_COUNTER;
+         SRP_INTER_VAL_COUNTER.reset();
+   }
+   else
+   {
+         SRP_INTER_VAL_COUNTER.start();
+         all_flags&=(~IS_FIRST_TIME_SC_DATA);
+   }
+   if(all_flags&IS_PL_FRAME_SIZE_CORRECT == 1)                      //How to identify FRAME_SIZE or size of data that is received via SPI?
+   {
+    //FCTN_COM_COMP_SC_DATA(scienceRawPacket);       
+    //FCTN_WR_SD(const uint8_t *, uint64_t)        //Store SD     
+    //FCTN_CDMS_WR_FLASH();                        //
+    all_flags|=PL_FRAME_SIZE_CORRECT;
+  }
+   if(all_flags&IS_PL_FRAME_SIZE_CORRECT == 0)
+    {
+        //FCTN_WR_SD(const uint8_t *, uint64_t)
+        //FCTN_CDMS_WR_FLASH();
+          PL_SCIENCE_FLAG &=~(PL_FRAME_SIZE_CORRECT);
+    }
+    if(TIME_ELAPSED_LAST_SRP>4)
+    {
+        //FCTN_CDMS_WR_FLASH();
+        all_flags|= TIME_ELAPSED_LAST_SRP_INTERVAL_HIGH;
+    }
+    if(TIME_ELAPSED_LAST_SRP<2)
+    {
+        //FCTN_CDMS_WR_FLASH();
+        all_flags|= TIME_ELAPSED_LAST_SRP_INTERVAL_LOW;
+    }
+    all_flags&=~(PL_SCIENCE_STATUS);
+}
+        
 void FCTN_PL_MAIN()
 {
-    pl_main_flags|=PL_MAIN_STATUS;
-    pl_main_flags&=~(PL_LOW_POWER);
-    pl_prev_state=pl_state;
-    if(pl_schedule==1) 
+    all_flags|=PL_MAIN_STATUS;
+    all_flags&=~(PL_LOW_POWER);
+    all_flags = all_flags|((all_flags&PL_STATE)<<2); //pl_prev_state = pl_state;
+    if(all_flags&IS_PL_SCHEDULE == 1)  //is pl_schedule == 1
     {
-        pl_state=pl_schedule_TC;
+        (all_flags&PL_STATE) = pl_schedule_TC;
     } 
     else 
     {
-        if(pl_state==PL_SCIENCE) 
+        if((all_flags&PL_PREV_STATE) == PL_SCIENCE) 
         {
             pl_state= PL_HIBERNATE;
         } 
-        else 
+        else
         {
-            pl_state=pl_prev_state;
+            all_flags = (all_flags&(~PL_STATE))|((all_flags&PL_PREV_STATE)>>2); //pl_state = pl_prev_state;
         }
     }
-
-    switch(pl_state) 
+    switch(all_flags&PL_STATE) 
     {
         case PL_OFF: 
         {
-            if(pl_prev_state!=PL_OFF) 
+            if(all_flags&PL_PREV_STATE!=PL_OFF) 
             {
                 sr.printf("Command SPEED DL to go to Standby State (I2C) \r\n");
             }
             sr.printf("Power off SPEED\r\n");
-            pl_status=PL_OFF;
+            all_flags = (all_flags&(~PL_STATUS))|PL_OFF;
             sr.printf("Disable SRP_INTERVAL_COUNTER\r\n");
-            pl_main_flags&=~(PL_MAIN_STATUS);
+            all_flags = all_flags&(~PL_MAIN_STATUS);
         }
         case PL_STANDBY: 
         {
             if(power_level<0) 
             {
-                pl_main_flags|=PL_LOW_POWER;
-                if(pl_prev_state!=PL_OFF) 
+                all_flags = all_flags|PL_LOW_POWER;
+                if(all_flags&PL_PREV_STATE!=PL_OFF) 
                 {
                     sr.printf("Command SPEED DL to go to Standby State (I2C) \r\n");
                 }
                 sr.printf("Power off SPEED\r\n");
-                pl_status=PL_OFF;
+                all_flags = (all_flags&(~PL_STATUS))|PL_OFF;
                 sr.printf("Disable SRP_INTERVAL_COUNTER\r\n");
-                pl_main_flags&=~(PL_MAIN_STATUS);
+                all_flags = all_flags&(~PL_MAIN_STATUS);
             } 
             else 
             {