Team Fox / Mbed 2 deprecated workinQM_5thJan_azad

Dependencies:   FreescaleIAP mbed-rtos mbed

Fork of workinQM_10thDec by Team Fox

Revision:
20:949d13045431
Parent:
19:79e69017c855
Child:
24:72bca5be7c4e
Child:
27:61c856be467e
--- a/EPS.cpp	Sat Jun 04 11:29:13 2016 +0000
+++ b/EPS.cpp	Fri Jul 01 17:55:30 2016 +0000
@@ -1,11 +1,89 @@
 #include "EPS.h"
 #include "pin_config.h"
 #include "iostream"
+
+//FOR APPEDING HK DATA===================================
+
+extern uint16_t crc_hk_data();
+
+//acs
+extern uint8_t ACS_DETUMBLING_ALGO_TYPE;
+extern uint8_t ACS_STATE;
+extern uint8_t ACS_MAG_TIME_DELAY;
+extern uint8_t ACS_DEMAG_TIME_DELAY;
+extern uint8_t ACS_Z_FIXED_MOMENT;
+extern uint16_t ACS_MM_X_COMSN;
+extern uint16_t ACS_MM_Y_COMSN;
+extern uint16_t ACS_MG_X_COMSN;
+extern uint16_t ACS_MG_Y_COMSN;
+extern uint16_t ACS_MM_Z_COMSN;
+extern uint16_t ACS_MG_Z_COMSN;
+extern uint8_t ACS_MAIN_STATUS;
+extern uint8_t ACS_STATUS;
+extern uint8_t ATS1_EVENT_STATUS_RGTR;
+extern uint8_t ATS1_SENTRAL_STATUS_RGTR;
+extern uint8_t ATS1_ERROR_RGTR;
+extern uint8_t ATS2_EVENT_STATUS_RGTR;
+extern uint8_t ATS2_SENTRAL_STATUS_RGTR;
+extern uint8_t ATS2_ERROR_RGTR;
+extern uint8_t ACS_DATA_ACQ_STATUS;
+extern uint8_t ACS_TR_X_PWM;
+extern uint8_t ACS_TR_Y_PWM;
+extern uint8_t ACS_TR_Z_PWM;
+extern uint8_t alarmmode;
+extern uint8_t controlmode_mms;
+extern uint8_t invjm_mms[9];
+extern uint8_t jm_mms[9];
+extern uint8_t bb_mms[3];
+extern uint8_t singularity_flag_mms;
+
+
+//bcn
+extern uint8_t BCN_SPND_TX;
+extern uint8_t BCN_FEN;
+extern uint8_t BCN_LONG_MSG_TYPE;
+extern uint8_t BCN_TX_MAIN_STATUS; 
+extern uint8_t BCN_TX_STATUS;
+extern uint8_t BCN_INIT_STATUS;
+extern uint8_t BCN_FAIL_COUNT;
+extern uint16_t BCN_TX_MAIN_COUNTER;
+
+//bae
+extern uint8_t BAE_RESET_COUNTER;
+extern uint8_t BAE_INIT_STATUS;
+extern uint8_t BAE_STANDBY;
+extern uint16_t BAE_I2C_COUNTER;
+
+//eps
+extern uint8_t ACS_INIT_STATUS;
+extern uint16_t EPS_MAIN_COUNTER;
+
+//main
+extern uint8_t HTR_CYCLE_COUNTER;
+extern uint16_t ACS_MAIN_COUNTER;
+
+
+//=======================================================
+
+
 /***********************************************global variable declaration***************************************************************/
 extern uint32_t BAE_STATUS;
 extern uint32_t BAE_ENABLE;
-extern uint8_t BAE_data[74];
-extern char BAE_chardata[74];   
+extern uint8_t BAE_HK_data[134];
+//extern char BAE_chardata[74]; 
+
+//implement them assign them default values  
+uint8_t EPS_BATT_TEMP_LOW;
+uint8_t EPS_BATT_TEMP_HIGH;
+uint8_t EPS_BATT_TEMP_DEFAULT;
+uint8_t EPS_SOC_LEVEL_12 = 70;
+uint8_t EPS_SOC_LEVEL_23 = 90;
+uint8_t EPS_BAT_TEMP_LOW;
+uint8_t EPS_BAT_TEMP_HIGH;
+uint8_t EPS_BAT_TEMP_DEFAULT;
+DigitalOut EPS_CHARGER_FAULT(PIN42);
+DigitalOut EPS_CHARGER_STATUS(PIN31);
+DigitalOut EPS_BATTERY_GAUGE_ALERT(PIN73);
 
 //m_I2C.frequency(10000)
 const char RCOMP0= 0x97;// don't know what it is now 
@@ -14,6 +92,8 @@
 BAE_HK_min_max bae_HK_minmax;
 BAE_HK_arch arch_data;
 
+/************************battery temperature var*********************************/
+//instead just return the approprate value.. test it
 
 //......................................Peripheral declarations.........................................................//
 Serial pc_eps(USBTX,USBRX);
@@ -49,23 +129,62 @@
 DigitalOut SelectLineb0 (PIN59); // LSB of Select Lines
 
 //*********************************************************flags********************************************************//
-extern char EPS_INIT_STATUS ;
-extern char EPS_BATTERY_GAUGE_STATUS ;
-extern char EPS_MAIN_STATUS;
-extern char EPS_BATTERY_TEMP_STATUS ;
-extern char EPS_STATUS ;
+extern uint8_t EPS_INIT_STATUS ;
+extern uint8_t EPS_BATTERY_GAUGE_STATUS ;
+extern uint8_t EPS_MAIN_STATUS;
+extern uint8_t EPS_BATTERY_TEMP_STATUS ;
+extern uint8_t EPS_STATUS ;
+
+extern uint8_t EPS_BTRY_HTR_AUTO ;
+
+//eps cdms fault
+extern uint8_t CDMS_SW_STATUS;
+extern DigitalOut CDMS_OC_FAULT;
+extern bool CDMS_SW_ENABLE;
+extern int CDMS_FAULT_COUNTER;
+
+//eps hw faults
+
+/********* EXTERN ACS VAR ********************/
+extern uint8_t ACS_ATS_STATUS;
+extern uint8_t ACS_TR_Z_SW_STATUS;
+extern DigitalOut ACS_TR_Z_ENABLE;
+extern DigitalOut ACS_TR_Z_OC_FAULT;
+extern DigitalOut ACS_TR_Z_FAULT;            //Driver IC fault
+extern int ACS_TR_Z_FAULT_COUNTER;
 
-extern char EPS_BATTERY_HEAT_ENABLE ;
+extern uint8_t ACS_TR_XY_SW_STATUS;
+extern DigitalOut ACS_TR_XY_ENABLE;
+extern DigitalOut ACS_TR_XY_OC_FAULT;
+extern DigitalOut ACS_TR_XY_FAULT;            //Driver IC fault
+extern int ACS_TR_XY_FAULT_COUNTER;
+
+//extern uint8_t ACS_ATS1_SW_STATUS;
+extern DigitalOut ATS1_SW_ENABLE;
+extern DigitalOut ACS_ATS1_OC_FAULT;
+extern int ACS_ATS1_FAULT_COUNTER;
+
+//extern uint8_t ACS_ATS2_SW_STATUS;
+
+extern DigitalOut ATS2_SW_ENABLE;
+extern DigitalOut ACS_ATS2_OC_FAULT;
+extern int ACS_ATS2_FAULT_COUNTER;
+
+/********* EXTERN BCN VAR ********************/
+extern uint8_t BCN_TX_SW_STATUS;
+extern bool BCN_TX_ENABLE;
+extern DigitalOut BCN_TX_OC_FAULT;
+extern int BCN_TX_FAULT_COUNTER;
+extern uint8_t BCN_TMP;
 
 //........................................... FUCTIONS.................................................//
 
 void FCTN_EPS_INIT()
 {
-    printf("\n\r eps init \n");
-    EPS_INIT_STATUS = 's' ;             //set EPS_INIT_STATUS flag
+////    printf("\n\r eps init \n");
+    EPS_INIT_STATUS = 1 ;             //set EPS_INIT_STATUS flag
     // FLAG();
     FCTN_BATTERYGAUGE_INIT();
-    FCTN_BATTTEMP_INIT();
     EN3V3A = 1;                             //enable dc dc converter A  
     char value=alertFlags(); // initialization part of battery gauge
     unsigned short value_u= (short int )value;
@@ -73,19 +192,191 @@
     if(value_u ==0x0001)                       // battery gauge not initialised
     {
         actual_data.power_mode = 1;
-        EPS_BATTERY_GAUGE_STATUS = 'c';               //clear EPS_BATTERY_GAUGE_STATUS
+        EPS_BATTERY_GAUGE_STATUS = 0;               //clear EPS_BATTERY_GAUGE_STATUS
     }
     else
     {
         actual_data.Batt_gauge_actual[1] = soc();
         actual_data.Batt_voltage_actual = Batt_voltage.read()*3.3; //1 corresponds to 3.3 scaling factor
-        //actual_data.Batt_voltage_data = Batt_voltage.read();/*changed 1.0*/
         FCTN_EPS_POWERMODE(actual_data.Batt_gauge_actual[1]);
-        EPS_BATTERY_GAUGE_STATUS = 's';               //set EPS_BATTERY_GAUGE_STATUS
+        EPS_BATTERY_GAUGE_STATUS = 1;               //set EPS_BATTERY_GAUGE_STATUS
     }
    
-    EPS_INIT_STATUS = 'c' ;             //clear EPS_INIT_STATUS flag
+    FCTN_BATTTEMP_INIT();
+    EPS_BATTERY_GAUGE_STATUS = 1;
+    
+    EPS_INIT_STATUS = 0 ;             //clear EPS_INIT_STATUS flag
+
+}
+
+void FCTN_EPS_HANDLE_CDMS_FAULT()
+{   //Variable names from MMS structure, if not, marked as //Temp name
+    if(CDMS_SW_STATUS == 0b11)          //powered on and oc fault
+        if(!CDMS_OC_FAULT)   
+           CDMS_SW_STATUS = 0b01;       //powered on and working
+    else
+    {
+        if(CDMS_SW_STATUS == 0b10)      //powered off and oc fault        
+            CDMS_SW_ENABLE = 1;         //Temp name
+        if(CDMS_OC_FAULT == 0)
+        {
+            CDMS_FAULT_COUNTER = 0;     //Temp name
+            CDMS_SW_STATUS = 0b01;      //powered on and working
+        }
+        else
+        {
+            CDMS_FAULT_COUNTER++;
+            if(CDMS_FAULT_COUNTER == 3)
+                CDMS_SW_STATUS = 0b11;  //powered on and oc fault
+            else
+            {
+                CDMS_SW_ENABLE = 0;         //power OFF switch
+                CDMS_SW_STATUS = 0b10;      //powered off and oc fault   
+            }
+        }
+    }     
+}
+
+void FCTN_EPS_HANDLE_HW_FAULTS()
+{   //Variable names from MMS structure, if not, marked as //Temp name
+    
+    //--------ACS_TR_Z--------//
+    if(ACS_TR_Z_SW_STATUS != 0b11)          //!disabled
+    {
+        if(ACS_TR_Z_SW_STATUS == 0b10)      //oc fault and powered off
+            ACS_TR_Z_ENABLE = 1;
+        if(ACS_TR_Z_OC_FAULT || ACS_TR_Z_FAULT)
+        {
+            ACS_TR_Z_ENABLE = 0;
+            ACS_TR_Z_FAULT_COUNTER++;       //Temp name
+            if(ACS_TR_Z_FAULT_COUNTER == 3)
+                ACS_TR_Z_SW_STATUS = 0b11;  //disabled
+                //update in flash as default state at bootup
+            else ACS_TR_Z_SW_STATUS = 0b10; //oc fault and powered off
+        }
+        else
+        {
+            ACS_TR_Z_SW_STATUS = 0b01;      //powered on and working;
+            //update in flash also
+            ACS_TR_Z_FAULT_COUNTER = 0;
+        }
+    }
+    
+    //--------ACS_TR_XY--------//
+    //Same as ACS_TR_Z, just replace Z with XY
+        if(ACS_TR_XY_SW_STATUS != 0b11)          //!disabled
+    {
+        if(ACS_TR_XY_SW_STATUS == 0b10)      //oc fault and powered off
+            ACS_TR_XY_ENABLE = 1;
+        if(ACS_TR_XY_OC_FAULT || ACS_TR_XY_FAULT)
+        {
+            ACS_TR_XY_ENABLE = 0;
+            ACS_TR_XY_FAULT_COUNTER++;       //Temp name
+            if(ACS_TR_XY_FAULT_COUNTER == 3)
+                ACS_TR_XY_SW_STATUS = 0b11;  //disabled
+                //update in flash as default state at bootup
+            else ACS_TR_XY_SW_STATUS = 0b10; //oc fault and powered off
+        }
+        else
+        {
+            ACS_TR_XY_SW_STATUS = 0b01;      //powered on and working;
+            //update in flash also
+            ACS_TR_XY_FAULT_COUNTER = 0;
+        }
+    }    
 
+    //--------ACS_ATS1--------//
+    //Same as ACS_ATS2
+    //if(ACS_ATS1_SW_STATUS & 0b1100 != 0b1100)          //!disabled 
+    if(ACS_ATS_STATUS&0xC0!=0xC0)
+    {
+        //if(ACS_ATS1_SW_STATUS & 0b1100 == 0b1000)      //oc fault and powered off
+        if(ACS_ATS_STATUS&0xC0!=0x80)
+            ATS1_SW_ENABLE = 0;                       //Temp name
+        if(ACS_ATS1_OC_FAULT)
+        {
+            ATS1_SW_ENABLE = 1;
+            ACS_ATS1_FAULT_COUNTER++;                  //Temp name
+            if(ACS_ATS1_FAULT_COUNTER == 3)
+                //ACS_ATS1_SW_STATUS = ACS_ATS1_SW_STATUS | 0b1100;  //disabled
+                ACS_ATS_STATUS = (ACS_ATS_STATUS&0x0F)|0xC0;
+                //update in flash as default state at bootup
+            else 
+            {
+                //ACS_ATS1_SW_STATUS = ACS_ATS1_SW_STATUS | 0b1000; //setting to 10xx
+                ACS_ATS_STATUS = (ACS_ATS_STATUS&0x0F)|0x80;
+                //ACS_ATS1_SW_STATUS = ACS_ATS1_SW_STATUS & 0b1011; //oc fault and powered off
+            }
+        }
+        else
+        {
+            //if(ACS_ATS1_SW_STATUS & 0b1100 == 0b1000)             //Device oc fault?
+            if(ACS_ATS_STATUS&0xC0==0x80)
+                ATS1_SW_ENABLE = 1;
+            //ACS_ATS1_SW_STATUS = ACS_ATS1_SW_STATUS & 0b0011;     //working but powered off
+            ACS_ATS_STATUS = ACS_ATS_STATUS&0x3F;
+            //Update in flash also
+            ACS_ATS1_FAULT_COUNTER = 0;
+        }
+    }
+    
+    //--------ACS_ATS2--------//
+    //if(ACS_ATS2_SW_STATUS & 0b1100 != 0b1100)          //!disabled
+    if(ACS_ATS_STATUS&0x0C!=0x0C)
+    {
+        //if(ACS_ATS2_SW_STATUS & 0b1100 == 0b1000)      //oc fault and powered off
+        if(ACS_ATS_STATUS&0x0C!=0x08)
+            ATS2_SW_ENABLE = 0;                       //Temp name
+        if(ACS_ATS2_OC_FAULT)
+        {
+            ATS2_SW_ENABLE = 1;
+            ACS_ATS2_FAULT_COUNTER++;                  //Temp name
+            if(ACS_ATS2_FAULT_COUNTER == 3)
+                //ACS_ATS2_SW_STATUS = ACS_ATS2_SW_STATUS | 0b1100;  //disabled
+                ACS_ATS_STATUS = (ACS_ATS_STATUS&0xF0)|0x0C;
+                //update in flash as default state at bootup
+            else 
+            {
+                //ACS_ATS2_SW_STATUS = ACS_ATS2_SW_STATUS | 0b1000; //setting to 10xx
+                //ACS_ATS2_SW_STATUS = ACS_ATS2_SW_STATUS & 0b1011; //oc fault and powered off
+                ACS_ATS_STATUS = (ACS_ATS_STATUS&0xF0)|0x08;
+            }
+        }
+        else
+        {
+            //if(ACS_ATS2_SW_STATUS & 0b1100 == 0b1000)             //Device oc fault?
+            if(ACS_ATS_STATUS&0x0C==0x08)
+                ATS2_SW_ENABLE = 1;
+            //ACS_ATS2_SW_STATUS = ACS_ATS2_SW_STATUS & 0b0011;     //working but powered off
+            ACS_ATS_STATUS = ACS_ATS_STATUS&0xF3;
+            //Update in flash also
+            ACS_ATS2_FAULT_COUNTER = 0;
+        }
+    }
+    
+    //--------BCN_TX----------//
+    if(BCN_TX_SW_STATUS != 0b11)          //!disabled
+    {
+        if(BCN_TX_SW_STATUS == 0b10)      //oc fault and powered off
+            BCN_TX_ENABLE = 1;            //Temp name
+        if(BCN_TX_OC_FAULT)
+        {
+            BCN_TX_ENABLE = 0;
+            BCN_TX_FAULT_COUNTER++;       //Temp name
+            if(BCN_TX_FAULT_COUNTER == 3)
+                BCN_TX_SW_STATUS = 0b11;  //disabled
+                //update in flash as default state at bootup
+            else BCN_TX_SW_STATUS = 0b10; //oc fault and powered off
+                
+        }
+        else
+        {
+            BCN_TX_SW_STATUS = 0b01;      //powered on and working;
+            //update in flash also
+            BCN_TX_FAULT_COUNTER = 0;
+        }
+    }
+    
 }
 
 //----------------------------------------------------Power algo code--------------------------------------------------------------------//
@@ -105,8 +396,6 @@
 
 //...................................................HK...........................................//
 /*reading values*/
-uint16_t val_read;
-float readval;
 
 void FCTN_HK_MAIN()
 {
@@ -123,73 +412,33 @@
     SelectLineb3=0;
     
       //collecting data
-    for(Iteration=0; Iteration<16; Iteration++){
-            wait_ms(100);
-            readval=VoltageInput.read();
-            wait_ms(10);    
+    for(Iteration=0; Iteration<16; Iteration++)
+    {
             actual_data.voltage_actual[Iteration]=VoltageInput.read();
-            val_read=VoltageInput.read_u16();
-            //wait_ms(80);
-            printf("\n\ractual reading voltage%f",readval);
-            printf("\n\ractual raw data vol %f ",actual_data.voltage_actual[Iteration]);
-            printf("\n\ractual raw data vol in uint16_t %x ",val_read);
             actual_data.current_actual[Iteration]=CurrentInput.read();
-            readval=CurrentInput.read();
-            printf("\n\ractual reading curr%f",readval);
-            //wait_ms(80);
-            
-   /*         SelectLinea0=!(SelectLinea0);
+           
+            SelectLinea0=!(SelectLinea0);
             if(Iteration%2==1)
                 SelectLinea1=!(SelectLinea1);
             if(Iteration%4==3)
                 SelectLinea2=!(SelectLinea2);
             if(Iteration%8==7)
                 SelectLinea3=!(SelectLinea3);
-                
-    */
                 int s0,s1,s2,s3;
             s0=SelectLineb0=SelectLinea0;
-            s1=SelectLineb1=SelectLinea1;// changed to 
+            s1=SelectLineb1=SelectLinea2;
             s2=SelectLineb2=SelectLinea2;
             s3=SelectLineb3=SelectLinea3;
-            printf("\n\r  %d %d %d %d", s0,s1,s2,s3);
+////            printf("\n\r  %d %d %d %d", s0,s1,s2,s3);
 
     }
-    
-    
-      //_____________________________________________________________________________________________
-      
       for(Iteration=0; Iteration<16; Iteration++)
-      {
-          printf("\n\rRaw data is for voltage %f",actual_data.voltage_actual[Iteration]);
-      }
-      //_____________________________________________________________________________________________
-    
-      for(Iteration=0; Iteration<16; Iteration++){
-
+    {
         if(Iteration==14)
             actual_data.voltage_actual[Iteration]= (-90.7*3.3*actual_data.voltage_actual[Iteration])+190.1543;
         else
             actual_data.voltage_actual[Iteration]= actual_data.voltage_actual[Iteration]*3.3*5.63;
     }
-      
-      //_____________________________________________________________________________________________
-      
-      for(Iteration=0; Iteration<16; Iteration++)
-      {
-          printf("\n\ractual data is for voltage %f",actual_data.voltage_actual[Iteration]);
-      }
-      //_____________________________________________________________________________________________
-      
-      
-      
-      //_____________________________________________________________________________________________
-      
-      for(Iteration=0; Iteration<16; Iteration++)
-      {
-          printf("\n\rRAW data is for current %f",actual_data.current_actual[Iteration]);
-      }
-      //_____________________________________________________________________________________________  
         
     for(Iteration=0;Iteration<12;Iteration++){
         if(Iteration<8)
@@ -208,17 +457,6 @@
                 actual_data.current_actual[Iteration]=3365.4/log(7.60573*resistance);
             }
     }
-    
-      
-      //_____________________________________________________________________________________________  
-      
-      for(Iteration=0; Iteration<16; Iteration++)
-      {
-          printf("\n\ractual data is for current %f",actual_data.current_actual[Iteration]);
-      }
-      //_____________________________________________________________________________________________ 
-    
-    
     actual_data.BAE_temp_actual=(-90.7*3.3*actual_data.BAE_temp_actual)+190.1543;
     
     actual_data.Batt_voltage_actual=Batt_voltage.read()*3.3*5.63;
@@ -250,15 +488,15 @@
     
     quant_data.BAE_temp_quant=quantiz(tstart,tstep,actual_data.BAE_temp_actual);
     
-    for(Iteration=0;Iteration<3;Iteration++){
-        quant_data.AngularSpeed_quant[Iteration]=actual_data.AngularSpeed_actual[Iteration];
-        printf("\n\r w value %f",quant_data.AngularSpeed_quant[Iteration]);
-    }
+////    for(Iteration=0;Iteration<3;Iteration++){
+////        quant_data.AngularSpeed_quant[Iteration]=actual_data.AngularSpeed_actual[Iteration];
+////        printf("\n\r w value %f",quant_data.AngularSpeed_quant[Iteration]);
+////    }
     
-    for(Iteration=0;Iteration<3;Iteration++){
-        quant_data.Bvalue_quant[Iteration]=actual_data.Bvalue_actual[Iteration];
-        printf("\n\r b value %f",quant_data.Bvalue_quant[Iteration]);
-    }
+////    for(Iteration=0;Iteration<3;Iteration++){
+////        quant_data.Bvalue_quant[Iteration]=actual_data.Bvalue_actual[Iteration];
+////        printf("\n\r b value %f",quant_data.Bvalue_quant[Iteration]);
+////    }
     
     quant_data.Batt_voltage_quant=quantiz(vstart,vstep,actual_data.Batt_voltage_actual);
     
@@ -271,55 +509,173 @@
     arch_data.faultPoll_status=actual_data.faultPoll_status;
     arch_data.faultIr_status=actual_data.faultIr_status;
     arch_data.Batt_voltage=quant_data.Batt_voltage_quant;    
-    printf("\n\r in hk");
+////    printf("\n\r in hk");
     
 }
 
 void FCTN_APPEND_HKDATA()
 {
-    // quantized data
-    for (int i=0;i<16;i++)
-        BAE_data[i] = quant_data.voltage_quant[i];
-    for (int i=16;i<28;i++)
-        BAE_data[i] = quant_data.current_quant[i-16];
-    BAE_data[28] = quant_data.Batt_temp_quant[0];
-    BAE_data[29] = quant_data.Batt_temp_quant[1]; 
-    BAE_data[30] = quant_data.Batt_gauge_quant[1]; 
-    BAE_data[31] = quant_data.Batt_gauge_quant[1]; 
-    BAE_data[32] = quant_data.Batt_gauge_quant[1]; 
-    FCTN_CONVERT_FLOAT(quant_data.Batt_gauge_alerts,&BAE_data[33]);
-    BAE_data[37] = quant_data.BAE_temp_quant;
-    FCTN_CONVERT_FLOAT(quant_data.AngularSpeed_quant[0],&BAE_data[38]); 
-    //printf("\n\r outside %d %d %d %d", BAE_data[38],BAE_data[39],BAE_data[40],BAE_data[41]);
-    //std:: cout << "\n\r uint8  outside " << BAE_data[38] << '\t' << BAE_data[39] << '\t' << BAE_data[40] << '\t' << BAE_data[41] <<std::endl; 
-    FCTN_CONVERT_FLOAT(quant_data.AngularSpeed_quant[1],&BAE_data[42]); 
-    //std:: cout << "\n\r uint8  outside " << BAE_data[42] << '\t' << BAE_data[43] << '\t' << BAE_data[44] << '\t' << BAE_data[45] <<std::endl;
-    // printf("\n\r outside %d %d %d %d", BAE_data[42],BAE_data[43],BAE_data[44],BAE_data[45]);
-    FCTN_CONVERT_FLOAT(quant_data.AngularSpeed_quant[2],&BAE_data[46]); 
-     //printf("\n\r outside %d %d %d %d", BAE_data[46],BAE_data[47],BAE_data[48],BAE_data[49]);
-    //std:: cout << "\n\r uint8  outside " << BAE_data[46] << '\t' << BAE_data[47] << '\t' << BAE_data[48] << '\t' << BAE_data[49] <<std::endl;
-    FCTN_CONVERT_FLOAT(quant_data.Bvalue_quant[0],&BAE_data[50]); 
-    FCTN_CONVERT_FLOAT(quant_data.Bvalue_quant[1],&BAE_data[54]); 
-    FCTN_CONVERT_FLOAT(quant_data.Bvalue_quant[2],&BAE_data[58]); 
-    BAE_data[62] = quant_data.Batt_voltage_quant;
-    BAE_data[63] = (uint8_t)actual_data.power_mode;      
-    BAE_data[64] = actual_data.faultPoll_status; 
-    BAE_data[65] = actual_data.faultIr_status;
-    // archived data
-    BAE_data[66] = arch_data.Batt_1_temp;            //verify if uint8_t is right
-    BAE_data[67] = arch_data.Batt_2_temp; 
-    BAE_data[68] = arch_data.EPS_PCB_temp;
-    BAE_data[69] = arch_data.Batt_SOC;           
-    BAE_data[70] = (uint8_t)arch_data.power_mode;
-    BAE_data[71] = arch_data.faultPoll_status; 
-    BAE_data[72] = arch_data.faultIr_status;
-    BAE_data[73] = arch_data.Batt_voltage;
-    for(int i=0; i<73;i++)
-        BAE_chardata[i] = (char)BAE_data[i];
-    BAE_chardata[73] = '\0';
-    printf("\n\r bae ats data %c %c %c", BAE_chardata[38],BAE_chardata[39],BAE_chardata[40]);
-    printf("\n\r BAE data is %s", BAE_chardata);
+    BAE_HK_data[0] = 0x28;
+    BAE_HK_data[1] = 0x00;
+    BAE_HK_data[2] = 0x00;
+    BAE_HK_data[3] = 0x00;
+    BAE_HK_data[4] = ACS_ATS_STATUS;
+    BAE_HK_data[5] = ACS_TR_XY_SW_STATUS;
+    BAE_HK_data[5] = (BAE_HK_data[5]<<2)| ACS_TR_Z_SW_STATUS;
+    BAE_HK_data[5] = (BAE_HK_data[5]<<1) | ACS_DETUMBLING_ALGO_TYPE;
+    BAE_HK_data[5] = (BAE_HK_data[5]<<3) | ACS_STATE;
+    BAE_HK_data[6] = BCN_TX_SW_STATUS;
+    BAE_HK_data[6] = (BAE_HK_data[6]<<1) | BCN_SPND_TX;
+    BAE_HK_data[6] = (BAE_HK_data[6]<<1) | BCN_FEN;
+    BAE_HK_data[6] = (BAE_HK_data[6]<<1) | BCN_LONG_MSG_TYPE;
+    BAE_HK_data[6] = (BAE_HK_data[6]<<1) | EPS_BTRY_HTR_AUTO;//EPS_BATTERY_HEATER_ENABLE
+    //now two spares in BAE_HK_data[5]
+    BAE_HK_data[7] = BAE_RESET_COUNTER;
+    BAE_HK_data[8] = EPS_SOC_LEVEL_12; 
+    BAE_HK_data[9] = EPS_SOC_LEVEL_23;
+    BAE_HK_data[10] = ACS_MAG_TIME_DELAY;
+    BAE_HK_data[11] = ACS_DEMAG_TIME_DELAY;
+    BAE_HK_data[12] = EPS_BAT_TEMP_LOW;
+    BAE_HK_data[13] = EPS_BAT_TEMP_HIGH;
+    BAE_HK_data[14] = EPS_BAT_TEMP_DEFAULT;
+    BAE_HK_data[15] = ACS_MM_X_COMSN >> 8;
+    BAE_HK_data[16] = ACS_MM_X_COMSN;
     
+    BAE_HK_data[17] = ACS_MM_Y_COMSN >> 8;
+    BAE_HK_data[18] = ACS_MM_Y_COMSN;
+                                                                
+    BAE_HK_data[19] = ACS_MG_X_COMSN >> 8;
+    BAE_HK_data[20] = ACS_MG_X_COMSN;
+                                                                
+    BAE_HK_data[21] = ACS_MG_Y_COMSN >> 8;
+    BAE_HK_data[22] = ACS_MG_Y_COMSN;
+                                                            
+    BAE_HK_data[23] = ACS_MM_Z_COMSN >> 8;
+    BAE_HK_data[24] = ACS_MM_Z_COMSN;
+                                                                
+    BAE_HK_data[25] = ACS_MG_Z_COMSN >> 8;
+    BAE_HK_data[26] = ACS_MG_Z_COMSN;
+                                                                
+    BAE_HK_data[27] = ACS_Z_FIXED_MOMENT >> 8;
+    BAE_HK_data[28] = ACS_Z_FIXED_MOMENT; 
+                                                             
+    //BAE RAM PARAMETER
+    BAE_HK_data[29] = BAE_INIT_STATUS;
+    BAE_HK_data[29] = (BAE_HK_data[29]<<1) | 0;//change it================================
+    BAE_HK_data[29] = (BAE_HK_data[29]<<1) | BCN_INIT_STATUS; 
+    BAE_HK_data[29] = (BAE_HK_data[29]<<1) | BCN_TX_MAIN_STATUS;
+    BAE_HK_data[29] = (BAE_HK_data[29]<<3) | BCN_TX_STATUS;
+    BAE_HK_data[29] = (BAE_HK_data[29]<<3) | ACS_INIT_STATUS;
+                                                                
+    BAE_HK_data[30] = ACS_DATA_ACQ_STATUS;
+    BAE_HK_data[30] = (BAE_HK_data[30]<<1) | ACS_MAIN_STATUS;
+    BAE_HK_data[30] = (BAE_HK_data[30]<<3) | ACS_STATUS;
+    BAE_HK_data[30] = (BAE_HK_data[30]<<1) | EPS_INIT_STATUS;
+    BAE_HK_data[30] = (BAE_HK_data[30]<<3) | EPS_BATTERY_GAUGE_STATUS;
+                                                                
+    BAE_HK_data[31] = EPS_MAIN_STATUS;
+    BAE_HK_data[31] = (BAE_HK_data[31]<<1) | EPS_BATTERY_TEMP_STATUS;
+    BAE_HK_data[31] = (BAE_HK_data[31]<<3) | EPS_STATUS;
+    BAE_HK_data[31] = (BAE_HK_data[31]<<2) | CDMS_SW_STATUS;
+    //BAE_HK_data[31] = (BAE_HK_data[31]<<1) | EPS_BTRY_HTR_STATUS;//new to : implement===========
+    //spare 1
+    //spare 5
+    BAE_HK_data[32] =  BAE_STANDBY;
+    // 6 next telemetries value to be given by registers
+    BAE_HK_data[33] = ATS1_EVENT_STATUS_RGTR;
+    BAE_HK_data[34] = ATS1_SENTRAL_STATUS_RGTR;
+    BAE_HK_data[35] = ATS1_ERROR_RGTR;
+    BAE_HK_data[36] = ATS2_EVENT_STATUS_RGTR;
+    BAE_HK_data[37] = ATS2_SENTRAL_STATUS_RGTR;
+    BAE_HK_data[38] = ATS2_ERROR_RGTR;
+                                                                
+    BAE_HK_data[39] = BCN_FAIL_COUNT;
+    BAE_HK_data[40] = actual_data.power_mode;
+    BAE_HK_data[41] = HTR_CYCLE_COUNTER;//new to : implement
+                                                                
+    BAE_HK_data[42] = BAE_I2C_COUNTER;
+    BAE_HK_data[43] = BAE_I2C_COUNTER>>8;
+    BAE_HK_data[44] = ACS_MAIN_COUNTER;
+    BAE_HK_data[45] = ACS_MAIN_COUNTER>>8;
+    BAE_HK_data[46] = BCN_TX_MAIN_COUNTER;
+    BAE_HK_data[47] = BCN_TX_MAIN_COUNTER>>8;
+    BAE_HK_data[48] = EPS_MAIN_COUNTER;
+    BAE_HK_data[49] = EPS_MAIN_COUNTER>>8;
+    BAE_HK_data[50] = actual_data.bit_data_acs_mm[0];
+    BAE_HK_data[51] = actual_data.bit_data_acs_mm[0]>>8;
+    BAE_HK_data[52] = actual_data.bit_data_acs_mm[1];
+    BAE_HK_data[53] = actual_data.bit_data_acs_mm[1]>>8;
+    BAE_HK_data[54] = actual_data.bit_data_acs_mm[2];
+    BAE_HK_data[55] = actual_data.bit_data_acs_mm[2]>>8;
+                                                                
+    BAE_HK_data[56] = actual_data.bit_data_acs_mg[0];
+    BAE_HK_data[57] = actual_data.bit_data_acs_mg[0]>>8;
+    BAE_HK_data[58] = actual_data.bit_data_acs_mg[1];
+    BAE_HK_data[59] = actual_data.bit_data_acs_mg[1]>>8;
+    BAE_HK_data[60] = actual_data.bit_data_acs_mg[2];
+    BAE_HK_data[61] = actual_data.bit_data_acs_mg[2]>>8;
+                                                                
+    BAE_HK_data[62] = BCN_TX_OC_FAULT;
+    BAE_HK_data[62] = (BAE_HK_data[62]<<1) | ACS_TR_XY_ENABLE;
+    BAE_HK_data[62] = (BAE_HK_data[62]<<1) | ACS_TR_Z_ENABLE;
+    BAE_HK_data[62] = (BAE_HK_data[62]<<1) | ACS_TR_XY_OC_FAULT;
+    BAE_HK_data[62] = (BAE_HK_data[62]<<1) | ACS_TR_Z_OC_FAULT;
+    BAE_HK_data[62] = (BAE_HK_data[62]<<1) | ACS_TR_XY_FAULT;
+    BAE_HK_data[62] = (BAE_HK_data[62]<<1) | EPS_CHARGER_FAULT;
+    BAE_HK_data[62] = (BAE_HK_data[62]<<1) | EPS_CHARGER_STATUS;
+                                                                
+    BAE_HK_data[63] = (BAE_HK_data[63]<<1) | EPS_BATTERY_GAUGE_ALERT;
+    BAE_HK_data[63] = (BAE_HK_data[63]<<1) | CDMS_OC_FAULT;
+    BAE_HK_data[63] = (BAE_HK_data[63]<<1) | ACS_ATS1_OC_FAULT;
+    BAE_HK_data[63] = (BAE_HK_data[63]<<1) | ACS_ATS2_OC_FAULT;
+    BAE_HK_data[63] = (BAE_HK_data[63]<<1) | ACS_TR_Z_FAULT;
+    //3 spare
+                                                                
+    BAE_HK_data[64] = ACS_TR_X_PWM;
+    BAE_HK_data[65] = ACS_TR_Y_PWM;
+    BAE_HK_data[66] = ACS_TR_Z_PWM;
+    //spare byte
+    //assigned it to counter HTR_CYCLE_COUNTER
+                                                                
+    //assign it b_scz_angle
+    BAE_HK_data[67] = 0x00; 
+    BAE_HK_data[67] = (BAE_HK_data[65]<<1) | alarmmode;
+    BAE_HK_data[67] = (BAE_HK_data[65]<<1) | controlmode_mms;
+    //2 bit spare
+                                                                
+    for(int i=0;i<9;i++)
+        {
+            BAE_HK_data[68+i] =  invjm_mms[i];
+            BAE_HK_data[81+i] =  jm_mms[i];
+        }
+                                                                
+    for(int i=0;i<3;i++)
+        BAE_HK_data[77+i] = bb_mms[i];
+                                                                
+    BAE_HK_data[80] = singularity_flag_mms;                      
+                                                                
+    for(int i=0;i<16;i++)
+        {
+            BAE_HK_data[90+i] = quant_data.voltage_quant[i];
+            BAE_HK_data[106+i] = quant_data.current_quant[i];
+        }
+                                                                
+    BAE_HK_data[122] = quant_data.Batt_voltage_quant;
+    BAE_HK_data[123] = quant_data.BAE_temp_quant;
+    BAE_HK_data[124] = (uint8_t)(actual_data.Batt_gauge_actual[1]);
+    BAE_HK_data[125] = quant_data.Batt_temp_quant[0];
+    BAE_HK_data[126] = quant_data.Batt_temp_quant[1];
+    BAE_HK_data[127] = BCN_TMP;
+    BAE_HK_data[128] = 0x00;
+    BAE_HK_data[129] = 0x00;
+    BAE_HK_data[130] = 0x00;
+    BAE_HK_data[131] = 0x00;
+    uint16_t crc = crc_hk_data();
+    BAE_HK_data[132] = (uint8_t)(crc >> 8);
+    BAE_HK_data[133] = crc;
+
+//===================================================
+/* can be retrived from the earlier code (function)*/   
 }
 
 uint8_t quantiz(float start,float step,float x)
@@ -362,17 +718,25 @@
         bae_HK_minmax.Batt_temp_min[i] = quant_data.Batt_temp_quant[i];
         bae_HK_minmax.Batt_temp_max[i] = quant_data.Batt_temp_quant[i];
         }    
+        /*
         for (int i = 0; i < 3; ++i){    
         bae_HK_minmax.Batt_gauge_min[i] = quant_data.Batt_gauge_quant[i];
         bae_HK_minmax.Batt_gauge_max[i] = quant_data.Batt_gauge_quant[i];
         }
+        */
+        bae_HK_minmax.Batt_SOC_min = quant_data.Batt_gauge_quant[1];
+        bae_HK_minmax.Batt_SOC_max = quant_data.Batt_gauge_quant[1];
+        
+        bae_HK_minmax.BCN_TEMP_min = BCN_TMP;
+        bae_HK_minmax.BCN_TEMP_min = BCN_TMP;
+        
         for (int i = 0; i < 3; ++i){    
-        bae_HK_minmax.AngularSpeed_min[i] = quant_data.AngularSpeed_quant[i];
-        bae_HK_minmax.AngularSpeed_max[i] = quant_data.AngularSpeed_quant[i];
+        bae_HK_minmax.bit_data_acs_mg_min[i] = actual_data.bit_data_acs_mg[i];
+        bae_HK_minmax.bit_data_acs_mg_max[i] = actual_data.bit_data_acs_mg[i];
         }
         for (int i = 0; i < 3; ++i){    
-        bae_HK_minmax.Bvalue_min[i] = quant_data.Bvalue_quant[i];
-        bae_HK_minmax.Bvalue_max[i] = quant_data.Bvalue_quant[i];
+        bae_HK_minmax.bit_data_acs_mm_min[i] = actual_data.bit_data_acs_mm[i];//Bvalue_quant earlier
+        bae_HK_minmax.bit_data_acs_mm_max[i] = actual_data.bit_data_acs_mm[i];
         }
         bae_HK_minmax.BAE_temp_min=quant_data.BAE_temp_quant;
         bae_HK_minmax.BAE_temp_max=quant_data.BAE_temp_quant;
@@ -397,20 +761,28 @@
             saveMin(bae_HK_minmax.Batt_temp_min[i],quant_data.Batt_temp_quant[i]);
             saveMax(bae_HK_minmax.Batt_temp_max[i],quant_data.Batt_temp_quant[i]);
         }
+        /*
         for (int i = 0; i < 3; ++i)
         {
             saveMin(bae_HK_minmax.Batt_gauge_min[i], quant_data.Batt_gauge_quant[i]);
             saveMax(bae_HK_minmax.Batt_gauge_max[i], quant_data.Batt_gauge_quant[i]);
         }
+        */
+        saveMin(bae_HK_minmax.Batt_SOC_min, quant_data.Batt_gauge_quant[1]);
+        saveMax(bae_HK_minmax.Batt_SOC_max, quant_data.Batt_gauge_quant[1]);
+        
+        saveMin(bae_HK_minmax.BCN_TEMP_min, BCN_TMP);
+        saveMin(bae_HK_minmax.BCN_TEMP_max, BCN_TMP);
+        
         for (int i = 0; i < 3; ++i)
         {
-            saveMin(bae_HK_minmax.AngularSpeed_min[i], quant_data.AngularSpeed_quant[i]);
-            saveMax(bae_HK_minmax.AngularSpeed_max[i], quant_data.AngularSpeed_quant[i]);
+            saveMin(bae_HK_minmax.bit_data_acs_mg_min[i], actual_data.bit_data_acs_mg[i]);
+            saveMax(bae_HK_minmax.bit_data_acs_mg_max[i], actual_data.bit_data_acs_mg[i]);
         }
         for (int i = 0; i < 3; ++i)
         {
-            saveMin(bae_HK_minmax.Bvalue_min[i], quant_data.Bvalue_quant[i]);
-            saveMax(bae_HK_minmax.Bvalue_max[i], quant_data.Bvalue_quant[i]);
+            saveMin(bae_HK_minmax.bit_data_acs_mm_min[i], actual_data.bit_data_acs_mm[i]);
+            saveMax(bae_HK_minmax.bit_data_acs_mm_max[i], actual_data.bit_data_acs_mm[i]);
         }
         saveMin(bae_HK_minmax.BAE_temp_min,quant_data.BAE_temp_quant);
         saveMax(bae_HK_minmax.BAE_temp_max,quant_data.BAE_temp_quant);
@@ -437,7 +809,7 @@
 
 void FCTN_BATTERYGAUGE_MAIN(float Battery_parameters[4])
 {
-///        printf("\n\r battery gauge \n");
+////        printf("\n\r battery gauge \n");
 
         float temp=30;    //=Battery_temp  (from temp sensor on battery board)       //value of battery temperature in C currently given a dummy value. Should be updated everytime.
         tempCompensation(temp);
@@ -447,9 +819,9 @@
         Battery_parameters[1]=soc();
         Battery_parameters[2]=crate();
        
-        printf("\nVcell=%f",vcell());       //remove this for final code
-        printf("\nSOC=%f",soc());           //remove this for final code
-        printf("\nC_rate=%f",crate());      //remove this for final code
+////        printf("\nVcell=%f",vcell());       //remove this for final code
+////        printf("\nSOC=%f",soc());           //remove this for final code
+////        printf("\nC_rate=%f",crate());      //remove this for final code
 
        
         if (alerting()== true)       //alert is on
@@ -705,7 +1077,7 @@
        
         ack = m_I2C.read(m_ADDR, buff, 2);
             
-        printf("\n\r acknow %d", ack);
+////        printf("\n\r acknow %d", ack);
  
         //Return SOC in percent
         if(ack == 0)
@@ -747,6 +1119,7 @@
     //HS=0;
     spi_bt.format(8,3);
     spi_bt.frequency(1000000);
+    EPS_BATTERY_TEMP_STATUS = 1;
 } 
 
 void FCTN_BATT_TEMP_SENSOR_MAIN(float temp[2])
@@ -755,14 +1128,15 @@
     int16_t bit_data;
     float sensitivity=0.0078125;   //1 LSB = sensitivity degree celcius
     wait_ms(320);
+    //can we reduce it further ??? azad.......!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     ssn1=0;
 
     spi_bt.write(0x80);//Reading digital data from Sensor 1
     LSB = spi_bt.write(0x00);//LSB first
-    wait_ms(0);
+    wait_ms(10);
     MSB = spi_bt.write(0x00);
     wait_ms(10);
-    pc_eps.printf("%d %d\n",MSB,LSB);
+////    pc_eps.printf("%d %d\n",MSB,LSB);
     bit_data= ((uint16_t)MSB<<8)|LSB;
     wait_ms(10);
     temp[0]=(float)bit_data*sensitivity;//Converting into decimal value