Latest FM Code with EEPROM
Dependencies: FreescaleIAP SimpleDMA eeprom mbed-rtos mbed
Fork of CDMS_QM_03MAR2017_Flash_with_obsrs by
Diff: CDMS_HK.h
- Revision:
- 356:4484bf39526f
- Parent:
- 355:a5e72222ff26
diff -r a5e72222ff26 -r 4484bf39526f CDMS_HK.h --- a/CDMS_HK.h Tue Mar 28 08:50:07 2017 +0000 +++ b/CDMS_HK.h Sat Feb 24 10:28:56 2018 +0000 @@ -10,6 +10,8 @@ void FUNC_CDMS_GPIO_STATUS(); void minMaxHkData(); void COLLECT_CDMS_RAM(); +void IS_BAE_IN_DISTRESS(); +uint8_t SAVE_BAE(uint8_t); extern uint8_t beacon_array[134]; //extern RSSI_MAX; @@ -48,7 +50,6 @@ void FCTN_CDMS_HK_MAIN(void const *args) { uint8_t sd_stat = 0; - uint8_t hk_count=0; while(1) { gPC.printf("waiting for HK sig\n\r"); gHK_THREAD->signal_wait(HK_SIGNAL); @@ -71,11 +72,15 @@ //gPC.printf("\n\r%d\n",CDMS_WR_SD_FAULT_COUNTER); if(EN_CDMS_HK == 0x00) + { + gMutex.unlock(); //unlocked mutex continue; + } CDMS_HK_MAIN_STATUS = 0x01; CDMS_HK_MAIN_COUNTER++; + CDMS_I2C_ERR_BAE_CURRENT = CDMS_I2C_ERR_BAE_COUNTER; + - FCTN_CDMS_HK(); //collects temperatures if(!COM_RSSI_SET) @@ -109,9 +114,9 @@ CDMS_HEALTH_DATA[86+i] = CDMS_quant[i]; // Here: Have to FIT flash data. - CDMS_HEALTH_DATA[106] = (EPS_V_A_EN_STATUS<<7) | ((BAE_STATUS<<5)&0x60) | ((SD_STATUS<<3)&0x18) | ((PL_STATUS<<1)&0x06) | (PL_EPS_LATCH_SW_EN & 0x01); - // CDMS_HEALTH_DATA[107] = (RTC_INIT_STATUS<<6) | ((CDMS_RTC_DISABLE<<5)&0x20); - CDMS_HEALTH_DATA[107] = (RTC_INIT_STATUS<<6) | ((EN_RTC<<5)&0x20); // changed by samp + CDMS_HEALTH_DATA[106] = (EPS_V_A_EN_STATUS<<7) | ((BAE_STATUS<<5)&0x60) | ((SD_STATUS<<3)&0x18) | ((PL_BEE_SW_STATUS<<1)&0x06) | (PL_EPS_LATCH_SW_EN & 0x01); + CDMS_HEALTH_DATA[107] = (RTC_INIT_STATUS<<6) | ((CDMS_RTC_DISABLE<<5)&0x20); + // CDMS_HEALTH_DATA[107] = (RTC_INIT_STATUS<<6) | ((EN_RTC<<5)&0x20); // changed by samp gPC.printf("\n\r 0x%08X",EN_RTC); CDMS_HEALTH_DATA[108] = CDMS_RESET_COUNTER >>8; CDMS_HEALTH_DATA[109] = CDMS_RESET_COUNTER; @@ -185,25 +190,27 @@ /*---------------------------------- BAE HK --------------------------------------------*/ - // gPC.printf("endHK_SD2"); + //gPC.printf("\n\rDO IT NOW\r"); BAE_HK_I2C = FCTN_I2C_READ(BAE_HK,134); // gPC.printf("\nEntering BAE HK\t"); if(BAE_HK_I2C == 0) { - // gPC.printf("BAE_HK_"); + gPC.printf("BAE_HK_"); crc = crc16_gen((unsigned char *)BAE_HK,132); if(crc == ((uint16_t)BAE_HK[132] << 8) | (uint16_t)BAE_HK[133]) { gPC.printf("BAE HK data recieved through I2C\t"); TIME_LATEST_I2C_BAE = FCTN_CDMS_RD_RTC() >> 7; - /*for(int i = 0; i<15; i++) - gPC.printf("\r 0x%02X\n",BAE_HK[i]);*/ - for(int i = 0; i<4; i++) - BAE_HK[i] = time >> (3-i)*8; +// for(int i = 0; i<15; i++) //Changed to test - J +// gPC.printf("%d\t",BAE_HK[i]); +// for(int i = 0; i<4; i++) +// BAE_HK[i] = time >> (3-i)*8; + for(int i = 128; i<132; i++) + BAE_HK[i] = time >> (131-i)*8; BAE_HK_FRAME[0] = 0x28; BAE_HK_FRAME[1] = (FSC_CURRENT[5]+1) >> 16; BAE_HK_FRAME[2] = (FSC_CURRENT[5]+1) >> 8; BAE_HK_FRAME[3] = FSC_CURRENT[5]+1; for(int i = 0; i<128; i++) /*Adding actual CDMS Health data to TM frame*/ - BAE_HK_FRAME[4+i] = BAE_HK[i]; + BAE_HK_FRAME[4+i] = BAE_HK[4+i]; crc = crc16_gen(BAE_HK_FRAME,132); /*Adding CRC to TM frame*/ BAE_HK_FRAME[132] = crc >> 8; BAE_HK_FRAME[133] = crc; @@ -285,6 +292,9 @@ } else gPC.printf("long Bcn not sent\r\n"); //gPC.printf("\rCompleted Beacon\n"); + if (GIVE_UP_ON_BAE == 0) + IS_BAE_IN_DISTRESS(); + gPC.printf("\rreleasing mutex for HK_MAIN \n\r"); SCI_LED1 =0; gMutex.unlock(); @@ -333,6 +343,7 @@ min_max_data.CDMS_temp_min = saveMin(min_max_data.CDMS_temp_min,quant_data.CDMS_temp_quant); min_max_data.CDMS_temp_max = saveMax(min_max_data.CDMS_temp_max,quant_data.CDMS_temp_quant); + GPIO_FAULTS = 0; } firstCount=false; } @@ -446,6 +457,10 @@ GPIO_STATUS=(COM_TX_CNTRL)?(GPIO_STATUS)|((uint16_t)(0x1<<1)):(GPIO_STATUS)&(~((uint16_t)(0x1<<1))); // gPC.printf("%04x\n",GPIO_STATUS); gPC.printf("\n\rBAE_OC STATE = %04x",GPIO_STATUS); + if (((GPIO_STATUS) | (GPIO_FAULTS)) != 0xFFFF) + { + GPIO_FAULTS = (GPIO_FAULTS | (~(GPIO_STATUS))); + } } void VERIFY_COMRX() @@ -507,13 +522,13 @@ SD_FAULTCOUNT++; SD_STATUS = (SD_FAULTCOUNT == 3) ? DEVICE_DISABLED :DEVICE_OC_FAULT; if(SD_FAULTCOUNT == 3) { - FCTN_CDMS_WR_FLASH(2,DEVICE_DISABLED); + WRITE_TO_EEPROM(2,DEVICE_DISABLED); gPC.printf("Declaring SD card permanantly Disabled"); } } else { SD_STATUS = DEVICE_POWERED; if(SD_STATUS != DEVICE_POWERED) - FCTN_CDMS_WR_FLASH(2,DEVICE_POWERED); + WRITE_TO_EEPROM(2,DEVICE_POWERED); SD_FAULTCOUNT = 0; } } @@ -534,13 +549,13 @@ BAE_FAULTCOUNT++; BAE_STATUS = (BAE_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT; if(BAE_FAULTCOUNT == 3) { - FCTN_CDMS_WR_FLASH(1,DEVICE_DISABLED); + WRITE_TO_EEPROM(1,DEVICE_DISABLED); gPC.printf("Declaring BAE permanantly Disabled"); } } else { BAE_STATUS = DEVICE_POWERED; if(SD_STATUS != DEVICE_POWERED); - FCTN_CDMS_WR_FLASH(1,DEVICE_POWERED); + WRITE_TO_EEPROM(1,DEVICE_POWERED); BAE_FAULTCOUNT = 0; } } @@ -548,8 +563,8 @@ void HANDLE_HW_FAULT_PL() { - if(PL_STATUS != DEVICE_DISABLED) { - if(PL_STATUS == DEVICE_OC_FAULT) { + if(PL_BEE_SW_STATUS != DEVICE_DISABLED) { + if(PL_BEE_SW_STATUS == DEVICE_OC_FAULT) { gPC.printf("Switching on PL_BEE"); PYLD_DFF_CLK = 0; PYLD_DFF = 1; // Switching ON PL @@ -569,25 +584,15 @@ PYLD_DFF_CLK = 0; wait_us(1); PL_FAULTCOUNT++; - PL_STATUS = (PL_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT; + PL_BEE_SW_STATUS = (PL_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT; if(PL_FAULTCOUNT == 3) { - FCTN_CDMS_WR_FLASH(3,DEVICE_DISABLED); + WRITE_TO_EEPROM(4,DEVICE_DISABLED); gPC.printf("Declaring PL_BEE permanantly Disabled"); } } else { - if(PL_STATUS == DEVICE_OC_FAULT) { - gPC.printf("Switching off PL_BEE"); - PYLD_DFF_CLK = 0; - PYLD_DFF = 0; //Switching OFF PL - wait_us(1); - PYLD_DFF_CLK = 1; - wait_us(1); - PYLD_DFF_CLK = 0; - wait_us(1); - } - PL_STATUS = DEVICE_ENABLED; - if(PL_STATUS != DEVICE_ENABLED) - FCTN_CDMS_WR_FLASH(3,DEVICE_ENABLED); + PL_BEE_SW_STATUS = DEVICE_POWERED; + if(SD_STATUS != DEVICE_POWERED) + WRITE_TO_EEPROM(4,DEVICE_POWERED); PL_FAULTCOUNT = 0; } } @@ -662,4 +667,38 @@ CDMS_RAM[79+i] = FSC_OLD[5] >> (3-i)*8; CDMS_RAM[83] = 0x00; gPC.printf("\n\r%u %u %u %u %u",FSC_CURRENT[1],FSC_CURRENT[2],FSC_CURRENT[3],FSC_CURRENT[4],FSC_CURRENT[5]); +} + +void IS_BAE_IN_DISTRESS() +{ + if((BAE_STATUS == 1)&&(CDMS_I2C_ERR_BAE_COUNTER == (CDMS_I2C_ERR_BAE_CURRENT + 2))) + { + if (CDMS_HK_MAIN_COUNTER == (CDMS_I2C_ERR_HK_LATEST + 1)) + { + CDMS_I2C_ERR_HK_LATEST = CDMS_HK_MAIN_COUNTER; + KILL_BAE_COUNTER++; + } + else + { + CDMS_I2C_ERR_HK_LATEST = CDMS_HK_MAIN_COUNTER; + KILL_BAE_COUNTER = 1; + } + if (KILL_BAE_COUNTER >= 3) + { + GIVE_UP_ON_BAE = SAVE_BAE(KILL_BAE_COUNTER); + } + } +} + +uint8_t SAVE_BAE(uint8_t counter) +{ + BAE_SW_EN_DS = 0; + wait(5); + BAE_SW_EN_DS = 1; + + BAE_STATUS = DEVICE_POWERED; + WRITE_TO_EEPROM(1,DEVICE_POWERED); + if (counter == 6) + return 1; + return 0; } \ No newline at end of file