vr1.1
Dependencies: FreescaleIAP mbed-rtos mbed
Fork of CDMS_RTOS_v1_1 by
Diff: PL.cpp
- Revision:
- 12:cb3ee1ac3638
- Parent:
- 9:7ff6d75cc09e
- Child:
- 13:ba5dca9e18d8
diff -r d6dc9074075b -r cb3ee1ac3638 PL.cpp --- 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 {