Updated EPS code with flowchart v2.3 (CDMS and HW faults)

Dependencies:   FreescaleIAP mbed-rtos mbed

Fork of QM_BAE_review_1_EPS_faults by Mohamed Azad

Revision:
17:bb0d64656ba1
Parent:
16:5f0f2a3f3e8d
--- a/main.cpp	Mon Jun 13 10:37:50 2016 +0000
+++ b/main.cpp	Thu Jun 23 12:14:28 2016 +0000
@@ -8,7 +8,7 @@
 
 #define tm_len 135
 #define tc_len 11
-#define batt_heat_low 20
+//#define batt_heat_low 20
 
 //***************************************************** flags *************************************************************//
 uint32_t BAE_STATUS = 0x00000000;
@@ -47,7 +47,7 @@
 char EPS_BATTERY_TEMP_STATUS = 'q';
 char EPS_STATUS = 'q';
 
-char EPS_BATTERY_HEAT_ENABLE = 'q';
+char EPS_BATTERY_HEATER_ENABLE = 'q';
 */
 
 uint8_t EPS_INIT_STATUS = 0;
@@ -58,7 +58,10 @@
 uint8_t EPS_BATTERY_TEMP_STATUS = 0;
 uint8_t EPS_STATUS = 7; //invalid status
 
-uint8_t EPS_BATTERY_HEAT_ENABLE = 0;
+int EPS_MAIN_COUNTER = 0;
+
+uint8_t EPS_BATTERY_HEATER_ENABLE = 0;
+float EPS_BAT_TEMP_LOW = 20.0;
 
 //eps cdms fault
 uint8_t CDMS_SW_STATUS;
@@ -396,37 +399,67 @@
     
         pc.printf("\n\rEntered EPS   %f\n",t_start.read());
         EPS_MAIN_STATUS = 1; // Set EPS main status
+        EPS_MAIN_COUNTER++;
         FCTN_BATT_TEMP_SENSOR_MAIN(actual_data.Batt_temp_actual);
           pc.printf("\n\r Battery temperature %f %f" ,actual_data.Batt_temp_actual[0], actual_data.Batt_temp_actual[1]);
           EPS_BATTERY_TEMP_STATUS = 1;          //set EPS_BATTERY_TEMP_STATUS
-          if(EPS_BATTERY_HEAT_ENABLE == 1)
+          if(EPS_BATTERY_HEATER_ENABLE == 1)
           {
-              if((actual_data.Batt_temp_actual[0] < batt_heat_low) && (actual_data.Batt_temp_actual[1] < batt_heat_low)) // to confirm
+              if((actual_data.Batt_temp_actual[0] < EPS_BAT_TEMP_LOW) && (actual_data.Batt_temp_actual[1] < EPS_BAT_TEMP_LOW)) // to confirm
               {
                   batt_heat = 1;    //turn on battery heater
+                  if( actual_data.current_actual[12] == 0 )
+                    EPS_STATUS = 3; // Set EPS_ERR_HEATER_SWITCH_ON
+                  else
+                    EPS_STATUS = 5; // Set EPS_BATTERY_HEATER_ON                  
               }
               else
               {
                   batt_heat = 0;     //turn off battery heater
+                  if( actual_data.current_actual[12] == 0 )
+                    EPS_STATUS = 2; // Set EPS_ERR_HEATER_SWITCH_OFF
+                  else
+                    EPS_STATUS = 4; // Set EPS_BATTERY_HEATER_OFF  
               }
               
            } 
-          else if(EPS_BATTERY_HEAT_ENABLE == 0)
+          else if(EPS_BATTERY_HEATER_ENABLE == 0)
           {
                 EPS_STATUS = 1;//EPS_STATUS = EPS_BATTERY_HEATER_DISABLED
           }
-        FCTN_BATTERYGAUGE_MAIN(actual_data.Batt_gauge_actual);
-        if (actual_data.Batt_gauge_actual[1] == 200)   //data not received
+        
+        int BTG_MAIN_FLAG = 0;                         //Flag to check whether data received from gauge
+        if( read(REG_STATUS)  & 0x0100 == 0x0100 )     //checking if Reset Indicator bit is set
         {
-          actual_data.power_mode = 1;
-          EPS_BATTERY_GAUGE_STATUS = 0;           //clear EPS_BATTERY_GAUGE_STATUS
-          
+            FCTN_BATTERYGAUGE_INIT();
+            write(REG_STATUS, read(REG_STATUS) & 0xFEFF);   //Clearing Reset Indicator bit
+            if( EPS_BATTERY_TEMP_STATUS == 1 )
+            {
+                FCTN_BATTERYGAUGE_MAIN(actual_data.Batt_gauge_actual);
+                BTG_MAIN_FLAG = 1;
+            }
+            else
+            {
+              actual_data.power_mode = 1;
+              EPS_BATTERY_GAUGE_STATUS = 0;           //clear EPS_BATTERY_GAUGE_STATUS 
+            }
         }
-        else
+        if( read(REG_STATUS)  & 0x0100 == 0x0000 )
         {
-          FCTN_EPS_POWERMODE(actual_data.Batt_gauge_actual[1]);            //updating power level 
-          EPS_BATTERY_GAUGE_STATUS = 1;           //set EPS_BATTERY_GAUGE_STATUS
+            FCTN_BATTERYGAUGE_MAIN(actual_data.Batt_gauge_actual);
+            BTG_MAIN_FLAG = 1;
         }
+        if( BTG_MAIN_FLAG == 1 )
+            if (actual_data.Batt_gauge_actual[1] == 200)   //data not received
+            {
+              actual_data.power_mode = 1;
+              EPS_BATTERY_GAUGE_STATUS = 0;           //clear EPS_BATTERY_GAUGE_STATUS 
+            }
+            else
+            {
+              FCTN_EPS_POWERMODE(actual_data.Batt_gauge_actual[1]);            //updating power level 
+              EPS_BATTERY_GAUGE_STATUS = 1;           //set EPS_BATTERY_GAUGE_STATUS
+            }
        // if( Temperature data received)
         //{
           
@@ -440,6 +473,8 @@
 //        }
         FCTN_HK_MAIN();
        // printf("\n\r here");
+        FCTN_EPS_HANDLE_HW_FAULTS();
+        FCTN_EPS_HANDLE_CDMS_FAULT();
         FCTN_APPEND_HKDATA();
         minMaxHkData();
         //printf("\n\r here");  
@@ -781,9 +816,9 @@
     BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00050000;          // Set EPS_BATTERY_HEATER_ON   
     
 
-    if(EPS_BATTERY_HEAT_ENABLE == 1)
+    if(EPS_BATTERY_HEATER_ENABLE == 1)
         BAE_ENABLE |= 0x00000080;
-    else if(EPS_BATTERY_HEAT_ENABLE == 0)
+    else if(EPS_BATTERY_HEATER_ENABLE == 0)
         BAE_ENABLE = BAE_ENABLE &0xFFFFFF7;    
     
 
@@ -798,7 +833,7 @@
     ACS_STATE = 4;
     ACS_ATS_ENABLE = 1;
     ACS_DATA_ACQ_ENABLE = 1;
-    EPS_BATTERY_HEAT_ENABLE = 1;
+    EPS_BATTERY_HEATER_ENABLE = 1;
     actual_data.power_mode=3;
     //............intializing pins................//
     ATS1_SW_ENABLE = 0;