working version

Dependencies:   mbed mbed-rtos SimpleDMA FreescaleIAP eeprom

Fork of CDMS_CODE_FM_28JAN2017 by samp Srinivasan

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