working version
Dependencies: mbed mbed-rtos SimpleDMA FreescaleIAP eeprom
Fork of CDMS_CODE_FM_28JAN2017 by
Diff: CDMS_HK.h
- Revision:
- 357:f3d48d62e00e
- Parent:
- 356:197c93dc2012
--- a/CDMS_HK.h Sat Feb 10 09:06:26 2018 +0000 +++ b/CDMS_HK.h Sun Apr 03 15:35:53 2022 +0000 @@ -12,6 +12,7 @@ void COLLECT_CDMS_RAM(); void IS_BAE_IN_DISTRESS(); uint8_t SAVE_BAE(uint8_t); +void FCTN_CDMS_P_MGMT(uint8_t); extern uint8_t beacon_array[134]; //extern RSSI_MAX; @@ -45,7 +46,8 @@ uint8_t BAE_HEALTH_FINAL[512] = {0}; unsigned char BAE_HK_FRAME[134] = {0}; - +//Software Timer +void int_acq1() { expired=1; } void FCTN_CDMS_HK_MAIN(void const *args) { @@ -73,7 +75,10 @@ //gPC.printf("\n\r%d\n",CDMS_WR_SD_FAULT_COUNTER); if(EN_CDMS_HK == 0x00) + { + gMutex.unlock(); continue; + } CDMS_HK_MAIN_STATUS = 0x01; CDMS_HK_MAIN_COUNTER++; CDMS_I2C_ERR_BAE_CURRENT = CDMS_I2C_ERR_BAE_COUNTER; @@ -82,6 +87,7 @@ if(!COM_RSSI_SET) { RSSI_VOLTAGE = COMRX_RSSI_VOLTAGE.read() * 3.3;//to be checked + gPC.printf("RSSI= %f",RSSI_VOLTAGE); gPC.printf("RSSI_MAX = %f",RSSI_MAX); } else { @@ -105,7 +111,7 @@ CDMS_quant[i+4]= (uint8_t)quant_data.temp_quant[i]; } minMaxHkData(); - + gPC.printf("\n\r %d",CDMS_quant[0]); CDMS_HEALTH_DATA[1] = GPIO_STATUS; //Reading GPIO Pins CDMS_HEALTH_DATA[0] = GPIO_STATUS >> 8; COLLECT_CDMS_RAM(); @@ -246,20 +252,23 @@ } // gPC.printf("Completed BAE HK\n"); - + POWER_MODE = BAE_HK[40]; // Extract Power Mode from BAE_HK + gPC.printf("POWER MODE is %d\n", POWER_MODE); + /*----------------------------------Power Management------------------------------------*/ + FCTN_CDMS_P_MGMT(POWER_MODE); /*----------------------------------Beacon message--------------------------------------*/ // Add HK bits beacon_array[0] = 0x00; - beacon_array[1] = time >> 32; + beacon_array[1] = TC_count; beacon_array[2] = time >> 24; beacon_array[3] = time >> 16; beacon_array[4] = time >> 8; beacon_array[5] = time; beacon_array[6] = SD_FAULTCOUNT >> 8; beacon_array[7] = SD_FAULTCOUNT; - beacon_array[8] = RTC_FAULTCOUNT >> 8; + beacon_array[8] = CDMS_RESET_COUNTER; beacon_array[9] = RTC_FAULTCOUNT; if(!COM_OC_SET) beacon_array[10] = (((SD_STATUS == DEVICE_DISABLED || SD_STATUS == DEVICE_OC_FAULT)?1:0)<<7)|(RTC_STATUS <<6)|(COM_RX_STATUS<<3)|(0<<2)|(COMRX_OC_FAULT<<1)|(COM_TX_OC_FAULT); @@ -268,7 +277,7 @@ beacon_array[10] = (((SD_STATUS == DEVICE_DISABLED || SD_STATUS == DEVICE_OC_FAULT)?1:0)<<7)|(RTC_STATUS <<6)|(COM_RX_STATUS<<3)|(0<<2)|(COMRX_OC_FAULT<<1)|(com_oc_sw_status); COM_OC_SET = 0; } - beacon_array[11] = (COM_RX_CNTRL <<7)|(COM_TX_CNTRL<<6); + beacon_array[11] = (COM_RX_CNTRL <<7)|(COM_TX_CNTRL<<6)|(COM_PA_IC_TMP >> 2); beacon_array[12] = CDMS_HK_MAIN_COUNTER >>8; beacon_array[13] = CDMS_HK_MAIN_COUNTER; beacon_array[14] = PL_MAIN_COUNTER >>8; @@ -289,14 +298,14 @@ y = FCTN_I2C_WRITE((char *)beacon_array,135); //134 if(y == 0) { TIME_LATEST_I2C_BAE = FCTN_CDMS_RD_RTC() >> 7; - //gPC.printf("long Bcn sent\n\r"); + gPC.printf("long Bcn sent\n\r"); } 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"); + gPC.printf("\n\rreleasing mutex for HK_MAIN \n\r"); SCI_LED1 =0; gMutex.unlock(); } @@ -440,10 +449,23 @@ //COMRX_OC_FAULT //$ GPIO_STATUS=(COMRX_OC_FAULT)?(GPIO_STATUS)|((uint16_t)(0x1<<11)):(GPIO_STATUS)&(~((uint16_t)(0x1<<11))); + // COMTX_OC_FAULT //$ GPIO_STATUS=(COM_TX_OC_FAULT)?(GPIO_STATUS)|((uint16_t)(0x1<<10)):(GPIO_STATUS)&(~((uint16_t)(0x1<<10))); // CDMS_SD_OC_FAULT GPIO_STATUS=(SD_OC_FAULT)?(GPIO_STATUS)|((uint16_t)(0x1<<9)):(GPIO_STATUS)&(~((uint16_t)(0x1<<9))); + if(SD_OC_FAULT == 0) { + gPC.printf("SD CARD DOWN"); + } + if(COMRX_OC_FAULT == 0) { + gPC.printf("COM RX DOWN"); + } + if(COM_TX_OC_FAULT == 0) { + gPC.printf("COM TX DOWN"); + } + if(BAE_OC_FAULT == 0) { + gPC.printf("BAE DOWN"); + } //BAE_OC_FAULT //$ GPIO_STATUS=(BAE_OC_FAULT)?(GPIO_STATUS)|((uint16_t)(0x1<<8)):(GPIO_STATUS)&(~((uint16_t)(0x1<<8))); @@ -531,13 +553,16 @@ SD_FAULTCOUNT++; SD_STATUS = (SD_FAULTCOUNT == 3) ? DEVICE_DISABLED :DEVICE_OC_FAULT; if(SD_FAULTCOUNT == 3) { - FCTN_CDMS_WR_FLASH(2,DEVICE_DISABLED); + //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); + //if(SD_STATUS != DEVICE_POWERED) + //FCTN_CDMS_WR_FLASH(2,DEVICE_POWERED); + WRITE_TO_EEPROM(2,DEVICE_POWERED); + wait_us(1); SD_FAULTCOUNT = 0; } } @@ -558,13 +583,15 @@ BAE_FAULTCOUNT++; BAE_STATUS = (BAE_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT; if(BAE_FAULTCOUNT == 3) { - FCTN_CDMS_WR_FLASH(1,DEVICE_DISABLED); + //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); + //FCTN_CDMS_WR_FLASH(1,DEVICE_POWERED); + WRITE_TO_EEPROM(1,DEVICE_POWERED); + wait_us(1); BAE_FAULTCOUNT = 0; } } @@ -595,13 +622,14 @@ PL_FAULTCOUNT++; PL_BEE_SW_STATUS = (PL_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT; if(PL_FAULTCOUNT == 3) { - FCTN_CDMS_WR_FLASH(4,DEVICE_DISABLED); + //FCTN_CDMS_WR_FLASH(4,DEVICE_DISABLED); + WRITE_TO_EEPROM(4,DEVICE_DISABLED); gPC.printf("Declaring PL_BEE permanantly Disabled"); } } else { PL_BEE_SW_STATUS = DEVICE_POWERED; - if(SD_STATUS != DEVICE_POWERED) - FCTN_CDMS_WR_FLASH(4,DEVICE_POWERED); + //FCTN_CDMS_WR_FLASH(4,DEVICE_POWERED); + WRITE_TO_EEPROM(4,DEVICE_POWERED); PL_FAULTCOUNT = 0; } } @@ -686,18 +714,18 @@ { CDMS_I2C_ERR_HK_LATEST = CDMS_HK_MAIN_COUNTER; KILL_BAE_COUNTER++; - gPC.printf("\n Takin aim, Boss"); + gPC.printf("\r Takin aim, Boss\n\r"); } else { CDMS_I2C_ERR_HK_LATEST = CDMS_HK_MAIN_COUNTER; KILL_BAE_COUNTER = 1; - gPC.printf("\n Target lost"); + gPC.printf("\r Target lost\n\r"); } if (KILL_BAE_COUNTER >= 3) { GIVE_UP_ON_BAE = SAVE_BAE(KILL_BAE_COUNTER); - gPC.printf("\n Kill Confirmed"); + gPC.printf("\r Kill Confirmed\n\r"); } } } @@ -709,8 +737,121 @@ BAE_SW_EN_DS = 1; BAE_STATUS = DEVICE_POWERED; - FCTN_CDMS_WR_FLASH(1,DEVICE_POWERED); + //FCTN_CDMS_WR_FLASH(1,DEVICE_POWERED); + WRITE_TO_EEPROM(1,DEVICE_POWERED); if (counter == 6) return 1; return 0; -} \ No newline at end of file +} + +void FCTN_CDMS_P_MGMT(uint8_t power_mode) +{ + if(EN_P_MGMT == 0x00) //ENABLE POWER MANAGEMENT + return; + switch(power_mode) + { + case 3: + { + if(EN_PL == 0) //Enabling PMS thread if disabled + EN_PL = 1; + break; + } + + case 2: + { + EN_PL = 0; + if(PL_STATE == 0x01) + { + gPC.printf("\r Already in Standby\n"); + break; + } + gPC.printf("\n\rCommanding PL_BEE to go to Standby State"); + if(PL_BEE_SW_STATUS == 0x03) + { + gPC.printf("\n\r Switched Off chilling out"); + break; + } + else + { + pl_next_index = -1; + Base_tm *tm_ptr_standby; + SET_PL_BEE_STANDBY(tm_ptr_standby); + if((pl_main_flag & PL_DISABLED)==PL_SUCCESS_I2C) + { + pl_main_flag = pl_main_flag & (~PL_DISABLED); + pl_main_flag |= PL_STANDBY; + PL_STATUS = 0x01; + PL_STATE = 0x01; + WRITE_TO_EEPROM(16,(uint32_t)PL_STATE); + } + break; + } + } + + case 1: + { + EN_PL = 0; + if(PL_BEE_SW_STATUS != 0x03) + { + gPC.printf("\n\rCommanding PL_BEE to go to Standby State"); + pl_next_index = -1; + 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; + WRITE_TO_EEPROM(4,DEVICE_DISABLED); + PL_STATUS = 0; + } + pl_main_flag = pl_main_flag & (~PL_DISABLED); + pl_main_flag |= PL_OFF; + PL_STATUS = 0x00; + PL_STATE = 0x00; + WRITE_TO_EEPROM(16,(uint32_t)PL_STATE); + break; + } + + default: + { + gPC.printf("Non-existant Power Mode (%d) BAE's lost it\n\r", power_mode); + } + } +} +/* +void SYS_RESET(uint_8 ack_pin){ + if(ack_pin == 1) + { + //ACKNOWLEDGE SYS RST + ack_pin = 0; + + //DISABLE THE THREADS + EN_PL = 0; + EN_CDMS_HK = 0; + + //SWITCH OFF BAE + SW_OFF_BAE(); + + //PAYLOAD IN STANDBY MODE + Base_tm *tm_ptr_standby; + SET_PL_BEE_STANDBY(tm_ptr_standby); + if((pl_main_flag & PL_DISABLED)==PL_SUCCESS_I2C) + { + pl_main_flag = pl_main_flag & (~PL_DISABLED); + pl_main_flag |= PL_STANDBY; + PL_STATUS = 0x01; + } + pl_main_flag = pl_main_flag & (~PL_MAIN_STATUS); + + //SWITCH OFF SD CARD + CDMS_SD_SW_OFF(); + + //TURN ON + WRITE_TO_EEPROM(2,DEVICE_POWERED); + WRITE_TO_EEPROM(1,DEVICE_POWERED); + + } + + + +} +*/ \ No newline at end of file