working version
Dependencies: mbed mbed-rtos SimpleDMA FreescaleIAP eeprom
Fork of CDMS_CODE_FM_28JAN2017 by
Diff: CDMS_PL.h
- Revision:
- 356:197c93dc2012
- Parent:
- 342:77b0d59897f7
- Child:
- 357:f3d48d62e00e
--- a/CDMS_PL.h Tue Mar 28 08:50:07 2017 +0000 +++ b/CDMS_PL.h Sat Feb 10 09:06:26 2018 +0000 @@ -1,5 +1,5 @@ int pl_next_index=-1; -uint8_t pl_main_flag=0; +uint8_t pl_main_flag=0x04; uint8_t PL_PREV_STATE=0x00; uint8_t POWER_LEVEL = 3; //Would be present in HK data extracted uint32_t pl_block[192]={0}; @@ -172,9 +172,9 @@ //gPC.printf("\n\rAt exit"); char state[][17] = {"STATE_OFF","STATE_STANDBY","STATE_HIBERNATE","STATE_SCIENCE"}; char status[][17] = {"PL_OFF","PL_STANDBY","PL_HIBERNATE","PL_SCIENCE","PL_SUCCESS_I2C","PL_ERR_I2C","PL_INVALID_STATE","PL_DISABLED"}; - //gPC.printf("\n\rPL_state:%s -> %s",state[(uint8_t)temp[0]],state[(uint8_t)temp2[0]]); - //gPC.printf("\n\rPL_status:%s -> %s",status[(uint8_t)temp[1]],status[(uint8_t)temp2[1]]); - //gPC.printf("\n\rPL_PREV_state:%s -> %s",state[(uint8_t)temp[2]],state[(uint8_t)temp2[2]]); + gPC.printf("\n\rPL_state:%s -> %s",state[(uint8_t)temp[0]],state[(uint8_t)temp2[0]]); + gPC.printf("\n\rPL_status:%s -> %s",status[(uint8_t)temp[1]],status[(uint8_t)temp2[1]]); + gPC.printf("\n\rPL_PREV_state:%s -> %s",state[(uint8_t)temp[2]],state[(uint8_t)temp2[2]]); } void VERIFY_TM(Base_tm *tm_ptr) { @@ -318,16 +318,20 @@ temp[2] = (PL_PREV_STATE & STATE_SCIENCE)>>2; //test2(1); - if(PL_STATUS==2 || PL_STATUS==3) + if(PL_BEE_SW_STATUS==2 || PL_BEE_SW_STATUS==3) { gPC.printf("\n\rDevice Disabled or OC Fault"); - pl_main_flag = pl_main_flag & (~PL_DISABLED); - pl_main_flag |= PL_DISABLED; //setting PL_STATUS as PL_DISABLED - PL_STATUS = 0x07; - pl_main_flag = pl_main_flag & (~PL_MAIN_STATUS); //Clearing pl_main status - PL_MAIN_status = 0; - print_exit(temp); - return; + if(PL_STATUS != 0x00) + { + pl_main_flag = pl_main_flag & (~PL_DISABLED); + pl_main_flag |= PL_DISABLED; //setting PL_STATUS as PL_DISABLED + PL_STATUS = 0x07; + pl_main_flag = pl_main_flag & (~PL_MAIN_STATUS); //Clearing pl_main status + PL_MAIN_status = 0; + print_exit(temp); + return; + } + gPC.printf("\n\r PL IN OFF BY PMS - continuing..."); } PL_PREV_STATE = (pl_main_flag & STATE_SCIENCE); //saving current pl_state uint64_t temp_time; @@ -357,6 +361,8 @@ gPC.printf("\n\rFuture block found at index = %d",pl_next_index); break; } + if(((pl_block[i+1] & 0x3FE00000) >> 21) == 0) + {pl_next_index = i + 1;} } } if((pl_next_index==-1) || pl_time==0) //RTC read failed or Future block not found @@ -385,67 +391,71 @@ } //Processing the PL schedule - if(((pl_block[pl_next_index-1] & UNEXECUTED)==3)||((pl_block[pl_next_index-1] & UNEXECUTED)==2)) - { - if(((pl_block[pl_next_index-1] & UNEXECUTED)==3)) - gPC.printf("\n\rElapsed blocked not executed"); - else - gPC.printf("\n\rElapsed block marked for retry"); + if(pl_next_index != -1 && pl_next_index != 0) + { + if(((pl_block[pl_next_index-1] & UNEXECUTED)==3)||((pl_block[pl_next_index-1] & UNEXECUTED)==2)) + { + if(((pl_block[pl_next_index-1] & UNEXECUTED)==3)) + gPC.printf("\n\rElapsed blocked not executed"); + else + gPC.printf("\n\rElapsed block marked for retry"); - gPC.printf("\n\r Retrieving pl_state from schedule"); - if((pl_block[pl_next_index-1] & 0x0000000C)==0) - { - pl_main_flag = pl_main_flag & (~STATE_SCIENCE); - pl_main_flag |= STATE_OFF; - PL_STATE = 0x00; - } - if((pl_block[pl_next_index-1] & 0x0000000C)==4) - { - pl_main_flag = pl_main_flag & (~STATE_SCIENCE); - pl_main_flag |= STATE_STANDBY; - PL_STATE = 0x01; - } - if((pl_block[pl_next_index-1] & 0x0000000C)==8) - { - pl_main_flag = pl_main_flag & (~STATE_SCIENCE); - pl_main_flag |= STATE_HIBERNATE; - PL_STATE = 0x02; - } - if((pl_block[pl_next_index-1] & 0x0000000C)==12) - { + gPC.printf("\n\r Retrieving pl_state from schedule"); + if((pl_block[pl_next_index-1] & 0x0000000C)==0) + { + pl_main_flag = pl_main_flag & (~STATE_SCIENCE); + pl_main_flag |= STATE_OFF; + PL_STATE = 0x00; + } + if((pl_block[pl_next_index-1] & 0x0000000C)==4) + { + pl_main_flag = pl_main_flag & (~STATE_SCIENCE); + pl_main_flag |= STATE_STANDBY; + PL_STATE = 0x01; + } + if((pl_block[pl_next_index-1] & 0x0000000C)==8) + { + pl_main_flag = pl_main_flag & (~STATE_SCIENCE); + pl_main_flag |= STATE_HIBERNATE; + PL_STATE = 0x02; + } + if((pl_block[pl_next_index-1] & 0x0000000C)==12) + { pl_main_flag = pl_main_flag & (~STATE_SCIENCE); pl_main_flag |= STATE_SCIENCE; PL_STATE = 0x03; + } } - } - else if((pl_block[pl_next_index-1] & UNEXECUTED)==1) - { - gPC.printf("\n\rElapsed block is executed"); - pl_main_flag = pl_main_flag & (~PL_MAIN_STATUS); //Clearing pl_main status - PL_MAIN_status = 0; - print_exit(temp); - return; - } - else if((pl_block[pl_next_index-1] & UNEXECUTED)==0) - { - //gPC.printf("\n\rEmpty Schedule Block"); - pl_main_flag = pl_main_flag & (~PL_MAIN_STATUS); //Clearing pl_main status - PL_MAIN_status = 0; - print_exit(temp); - return; - } + else if((pl_block[pl_next_index-1] & UNEXECUTED)==1) + { + gPC.printf("\n\rElapsed block is executed"); + pl_main_flag = pl_main_flag & (~PL_MAIN_STATUS); //Clearing pl_main status + PL_MAIN_status = 0; + print_exit(temp); + return; + } + else if((pl_block[pl_next_index-1] & UNEXECUTED)==0) + { + gPC.printf("\n\rEmpty Schedule Block"); + pl_main_flag = pl_main_flag & (~PL_MAIN_STATUS); //Clearing pl_main status + PL_MAIN_status = 0; + print_exit(temp); + return; + } switch(pl_main_flag & STATE_SCIENCE) //Checking PL_STATE { case STATE_OFF: { gPC.printf("\n\rEntered PL_OFF case"); - if(PL_STATUS!=0) + if(PL_BEE_SW_STATUS != 0x03) { gPC.printf("\n\rCommanding PL_BEE to go to Standby State"); Base_tm *tm_ptr_standby; SET_PL_BEE_STANDBY(tm_ptr_standby); //No ack needed now gPC.printf("\n\rPowering OFF PL_BEE"); SET_PL_BEE_OFF; + PL_BEE_SW_STATUS = 0x03; + FCTN_CDMS_WR_FLASH(4,DEVICE_DISABLED); PL_STATUS=0; } pl_main_flag = pl_main_flag & (~PL_DISABLED); @@ -462,11 +472,12 @@ case STATE_STANDBY: { gPC.printf("\n\rEntered PL_STANDBY case"); - if(PL_STATUS==0) + if(PL_BEE_SW_STATUS == 0x03) { gPC.printf("\n\rPowering on PL_BEE"); SET_PL_BEE_ON; - PL_STATUS=1; + PL_BEE_SW_STATUS = 0x01; + FCTN_CDMS_WR_FLASH(4,DEVICE_POWERED); } gPC.printf("\n\rCommanding PL_BEE to go to Standby State"); Base_tm *tm_ptr_standby; @@ -489,11 +500,12 @@ gPC.printf("\n\rEntered PL_HIBERNATE case"); if(POWER_LEVEL==2 || POWER_LEVEL==3 || POWER_LEVEL==0) { - if(PL_STATUS==0) + if(PL_BEE_SW_STATUS == 0x03) { gPC.printf("Powering on PL_BEE\r\n"); SET_PL_BEE_ON; - PL_STATUS=1; + PL_BEE_SW_STATUS = 0x01; + FCTN_CDMS_WR_FLASH(4,DEVICE_POWERED); } gPC.printf("\n\rCommanding PL_BEE to go to Hibernate State"); Base_tm *tm_ptr_hibernate; @@ -509,11 +521,12 @@ { pl_main_flag |= PL_LOW_POWER; PL_LOW_power = 1; - if(PL_STATUS==0) + if(PL_BEE_SW_STATUS == 0x03) { gPC.printf("\n\rPowering on PL_BEE"); SET_PL_BEE_ON; - PL_STATUS=1; + PL_BEE_SW_STATUS = 1; + FCTN_CDMS_WR_FLASH(4,DEVICE_POWERED); } gPC.printf("\n\rCommanding PL_BEE to go to Standby State"); Base_tm *tm_ptr_standby; @@ -544,11 +557,12 @@ if(POWER_LEVEL==3 || POWER_LEVEL==0) //POWER_LEVEL = 0 = NA { gPC.printf("\n\rPOWER_LEVEL = 3 or NA"); - if(PL_STATUS==0) + if(PL_BEE_SW_STATUS == 0x03) { gPC.printf("\n\rPowering on PL_BEE"); SET_PL_BEE_ON; - PL_STATUS=1; + PL_BEE_SW_STATUS = 1; + FCTN_CDMS_WR_FLASH(4,DEVICE_POWERED); } gPC.printf("\n\rCommanding PL_BEE to go to Science State"); Base_tm *tm_ptr_science; @@ -572,11 +586,12 @@ PL_LOW_power = 1; if(POWER_LEVEL==2 || POWER_LEVEL==3 || POWER_LEVEL==0) { - if(PL_STATUS==0) + if(PL_BEE_SW_STATUS == 0x03) { gPC.printf("\n\rPowering on PL_BEE"); SET_PL_BEE_ON; - PL_STATUS=1; + PL_BEE_SW_STATUS = 1; + FCTN_CDMS_WR_FLASH(4,DEVICE_POWERED); } gPC.printf("\n\rCommanding PL_BEE to go to Hibernate State"); Base_tm *tm_ptr_hibernate; @@ -592,11 +607,12 @@ { pl_main_flag |= PL_LOW_POWER; PL_LOW_power = 1; - if(PL_STATUS==0) + if(PL_BEE_SW_STATUS == 0x03) { gPC.printf("\n\rPowering on PL_BEE"); SET_PL_BEE_ON; - PL_STATUS=1; + PL_BEE_SW_STATUS = 1; + FCTN_CDMS_WR_FLASH(4,DEVICE_POWERED); } gPC.printf("\n\rCommanding PL_BEE to go to Standby State"); Base_tm *tm_ptr_standby; @@ -636,5 +652,6 @@ print_exit(temp); return; } + } } } \ No newline at end of file