Changes to be made for ATS_Fault logic and ACS_State

Dependencies:   FreescaleIAP mbed-rtos mbed

Fork of Japan_BAE_sensorworking_interrupr_reoccuring_copy by Team Fox

Revision:
5:bb592f3185cc
Parent:
4:39a4ae8c7ecd
Child:
6:036d08b62785
--- a/main.cpp	Wed Dec 30 04:57:46 2015 +0000
+++ b/main.cpp	Thu Dec 31 17:12:52 2015 +0000
@@ -8,12 +8,14 @@
 
 #define tm_len 134
 #define tc_len 135
-#define bae_data_len 150
 #define batt_heat_low 20
 //***************************************************** flags *************************************************************//
 uint32_t BAE_STATUS = 0x00000000;
 uint32_t BAE_ENABLE = 0xFFFFFFFF;
 
+//i2c//
+char data_send_flag = 'h'; 
+
 //.........acs...............//
 char ACS_INIT_STATUS = 'q';
 char ACS_DATA_ACQ_STATUS = 'q';
@@ -37,7 +39,7 @@
 char EPS_BATTERY_HEAT_ENABLE = 'q';
 
 //.......................global variables..................................................................// new hk structure- everything has to changed based on this
-char BAE_data[bae_data_len];     
+uint8_t BAE_data[73];     
     
 
 //*************************************Global declarations************************************************//
@@ -56,11 +58,15 @@
 extern BAE_HK_min_max bae_HK_minmax;
 extern BAE_HK_arch arch_data;
 
-bool write_ack = 1;
-bool read_ack = 1;
+int write_ack = 1;
+int read_ack = 1;
 char telecommand[tc_len];
 char* telemetry;
-char data_send_flag = 'h'; 
+
+bool pf1check = 0;
+bool pf2check = 0;
+bool if1check = 0;
+bool if2check = 1;
 
 //*****************************************************Assigning pins******************************************************//
 DigitalOut gpo1(PTC0); // enable of att sens2 switch
@@ -75,6 +81,30 @@
 PwmOut PWM2(PIN94); //y
 PwmOut PWM3(PIN95); //z                         //PWM output comes from pins p6
 
+//........faults
+//Polled Faults
+DigitalIn pf1(PIN5);//Attitude Sensor 1 OC bar fault signal
+DigitalIn pf2(PIN97);//Attitude Sensor 2 OC bar fault signal
+DigitalIn pf3(PIN83);//Fault Bar for TRXY driver
+ 
+//Interrupt based faults
+//InterruptIn  ir1(PIN73);//Battery Gauge - Alert Bar Signal
+InterruptIn  ir2(PIN72);//TRXY Driver TR switch Fault
+InterruptIn  ir3(PIN89);//TRZ Driver Fault Bar
+InterruptIn  ir4(PIN91);//TRZ Driver TR switch Fault
+InterruptIn  ir5(PIN79);//CDMS - Switch Fault
+InterruptIn  ir6(PIN80);//Beacon- Switch OC bar
+InterruptIn  ir7(PIN42);//Charger IC - Fault Bar
+
+DigitalOut TRXY_SW(PIN71);  //TR XY Switch
+DigitalOut DRV_Z_SLP(PIN88);    //Sleep pin of driver z
+DigitalOut TRZ_SW(PIN40);  //TR Z Switch
+DigitalOut CDMS_RESET(PIN7); // CDMS RESET
+DigitalOut BCN_SW(PIN14);      //Beacon switch
+DigitalOut DRV_XY_SLP(PIN82);
+
+
+
 
 /*****************************************************************Threads USed***********************************************************************************/
 
@@ -89,9 +119,67 @@
 void F_BCN();
 
 //*******************************************ACS THREAD**************************************************//
+uint8_t iterP1;
+uint8_t iterP2;
+uint8_t iterI1;
+uint8_t iterI2;
 
+ 
 void F_ACS()
 {
+    if(pf1check == 1)
+    {
+        if(iterP1 >= 3)
+        {
+            gpo1 = 1;  // turn off ats1 permanently
+            //FCTN_SWITCH_ATS(0);  // switch on ATS2    
+        }
+        else    
+        {
+        gpo1 = 0;
+        iterP1++;
+        }
+    }
+    if(pf2check == 1)
+    {
+        if(iterP1 >= 3)
+        {
+            gpo2 = 1;  // turn off ats2 permanently
+            ACS_DATA_ACQ_ENABLE == 'd';
+            ACS_STATE == '2' ; // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY    
+        }
+        else    
+        {
+        gpo2 = 0;
+        iterP2++;
+        }
+    }
+     if(if1check == 1)
+    {
+        if(iterI1 >= 3)
+        {
+            TRXY_SW = 0;  // turn off TRXY permanently
+        }
+        else    
+        {
+         TRXY_SW = 1;   //switch on TRXY
+         iterI1++;
+        }
+    }    
+    if(if2check == 1)
+    {
+        if(iterI2 >= 3)
+        {
+            TRZ_SW = 0;  // turn off TRZ permanently
+            ACS_STATE == '2' ; // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY  
+        }
+        else    
+        {
+         TRZ_SW = 1;   //switch on Z
+         iterI2++;
+        }
+    }
+    
     float b1[3]={-23.376,-37.56,14.739}, omega1[3]={-1.52,2.746,0.7629}, moment1[3]= {1.0498,-1.0535,1.3246};
     //b1[3] = {22, 22,10};
     //omega1[3] = {2.1,3.0,1.5};
@@ -120,13 +208,12 @@
     for(int i=3; i<6; i++) 
     {
         pc.printf("%f\n\r",data[i]);
-        
+    }
         for(int i=0;i<3;i++)
     {
     omega1[i]= data[i];
     b1[i] = data[i+3];
     }
-    }
     }//if ACS_DATA_ACQ_ENABLE = 1
      else
     {
@@ -245,7 +332,7 @@
           EPS_BATTERY_TEMP_STATUS = 's';          //set EPS_BATTERY_TEMP_STATUS
           if(EPS_BATTERY_HEAT_ENABLE == 'e')
           {
-              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] < batt_heat_low) && (actual_data.Batt_temp_actual[1] < batt_heat_low)) // to confirm
               {
                   batt_heat = 1;    //turn on battery heater
               }
@@ -283,8 +370,8 @@
 //          EPS_STATUS = EPS_ERR_BATTERY_TEMP;
 //        }
         FCTN_HK_MAIN();
-        //FCTN_APPEND_HKDATA();
-        //minMaxHkData();
+        FCTN_APPEND_HKDATA();
+        minMaxHkData();
           
         EPS_MAIN_STATUS = 'c'; // clear EPS main status 
 
@@ -313,18 +400,24 @@
             slave.stop();     
         else if( slave.receive() == 1)                                     // slave writes to master
         {
-            write_ack=slave.write((char*)telemetry,tm_len);
-             irpt_2_mstr = 0;
+             if(data_send_flag == 'h')
+                write_ack=slave.write((char*)BAE_data,73); 
+            else if(data_send_flag == 't')
+            {
+                write_ack=slave.write(telemetry,tm_len);
+                data_send_flag = 'h';
+                irpt_2_mstr = 0;
+            }       
         }
         else if( slave.receive()==3 ||  slave.receive()==2)             // slave read 
         {
-            read_ack=slave.read(telecommand,tc_len);
-            pc.printf("\n\rTELECOMMAND received from CDMS is %s \n",telecommand);
-            pc.printf("\n\r Executing Telecommand \n"); 
+           read_ack=slave.read(telecommand,tc_len);
+           pc.printf("\n\rTELECOMMAND received from CDMS is %s \n",telecommand);
+           pc.printf("\n\r Executing Telecommand \n"); 
            // FCTN_TC_DECODE((uint8_t*) telecommand);
            uint8_t* temp = FCTN_BAE_TM_TC((uint8_t*) telecommand);
            telemetry = (char*)temp;
-            FCTN_TM();
+           FCTN_TM();
             // for(int i = 0; i<134; i++)
             //pc.printf("%c", telemetry[i]);
         } 
@@ -335,6 +428,7 @@
 void FCTN_TM()
 {
     //irpt_2_mstr = 0; 
+    data_send_flag = 't';
     pc.printf("\n\r Telemetry Generation \n");
     irpt_2_mstr = 1;   
 }
@@ -348,6 +442,125 @@
 }
 
 
+//***********************************************************FAULTS***************************************************************//
+/*void ir1clear()
+{
+    actual_data.faultIr_status |= 0x01;   // alert
+ 
+}*/
+
+
+ 
+void ir2clear()
+{
+    actual_data.faultIr_status |= 0x02;
+    TRXY_SW = 0;   // Switch off TR XY
+    if1check = 1;
+}
+ 
+void ir3clear()
+{
+    actual_data.faultIr_status |= 0x04;
+    DRV_Z_SLP = 0;
+    wait_us(1);
+    DRV_Z_SLP = 1;
+ 
+}
+ 
+void ir4clear()
+{
+    if2check = 1;
+    actual_data.faultIr_status |= 0x08;
+    TRZ_SW = 0;
+}
+ 
+void ir5clear()
+{
+    actual_data.faultIr_status |= 0x10;
+    CDMS_RESET = 0;
+    wait_us(1);
+    CDMS_RESET = 1;
+}
+ 
+void ir6clear()
+{
+    actual_data.faultIr_status |= 0x20;
+    BCN_SW = 0;
+    wait_us(1);
+    BCN_SW = 1;
+}
+ 
+void ir7clear()
+{
+    actual_data.faultIr_status |= 0x40;
+}
+uint8_t iter2=0,iter4 = 0; 
+
+
+
+void pollfault()
+{   
+    
+    
+ 
+    if (pf1==0)                // OC_ATS1
+    { 
+        pf1check=1;
+        actual_data.faultPoll_status |=0x01 ;
+        gpo1 = 1;  // turn off ats1  // to be turned on next cycle in ACS
+    }
+    else actual_data.faultPoll_status &= 0xFE;
+ 
+    if (pf2==0)
+    {   
+        pf2check=1;
+        actual_data.faultPoll_status |=0x02 ;
+        gpo2 = 1;  // turn off ats2  // turn on in ACS
+    }
+    else actual_data.faultPoll_status &= 0xFD;
+ 
+    if (pf3==0)
+    {   actual_data.faultPoll_status |=0x04 ;
+        DRV_XY_SLP = 0;
+        wait_us(1);
+        DRV_XY_SLP = 1;
+    }
+    else actual_data.faultPoll_status &= 0xFB;
+ 
+ 
+ 
+ 
+    /*if (ir1==1)
+    {
+        actual_data.faultIr_status &=0xFE;
+    }*/
+    if (ir2==1)
+    {
+        actual_data.faultIr_status &=0xFD;
+    }
+    if (ir3==1)
+    {
+        actual_data.faultIr_status &=0xFB;
+    }
+    if (ir4==1)
+    {
+        actual_data.faultIr_status &=0xF7;
+    }
+    if (ir5==1)
+    {
+        actual_data.faultIr_status &=0xEF;
+    }
+    if (ir6==1)
+    {
+        actual_data.faultIr_status &=0xDF;
+    }if (ir7==1)
+    {
+        actual_data.faultIr_status &=0xBF;
+    }
+ 
+}
+  
+
 //------------------------------------------------------------------------------------------------------------------------------------------------
 //SCHEDULER
 //------------------------------------------------------------------------------------------------------------------------------------------------
@@ -436,15 +649,49 @@
         BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000060);                             //ACS_STATE = ACS_DETUMBLING_CONTROL
         
 //...............eps......................//
-    if(EPS_INIT_STATUS == 's')
-        BAE_STATUS |= 0x00010000;               //set EPS_INIT_STATUS flag
-    else if(EPS_INIT_STATUS == 'c')
-        BAE_STATUS &= 0xFFFEFFFF;               //clear EPS_INIT_STATUS flag
-    if(EPS_BATTERY_GAUGE_STATUS == 'c')
-        BAE_STATUS &= 0xFFFDFFFF;               //clear EPS_BATTERY_GAUGE_STATUS
-    else if(EPS_BATTERY_GAUGE_STATUS == 's')
-        BAE_STATUS |= 0x00020000;               //set EPS_BATTERY_GAUGE_STATUS
-        
+
+    
+if (EPS_INIT_STATUS=='s')                                  // Set EPS_INIT_STATUS
+    BAE_STATUS |= 0x00010000;                     
+else if(EPS_INIT_STATUS=='c')                              // Clear
+    BAE_STATUS &= 0xFFFEFFFF;
+
+
+if (EPS_MAIN_STATUS=='s')                              // Set EPS_MAIIN_STATUS
+    BAE_STATUS |= 0x00040000;
+else if(EPS_MAIN_STATUS=='c')                          // Clear
+    BAE_STATUS &= 0xFFFBFFFF;
+
+
+if (EPS_BATTERY_GAUGE_STATUS=='s')              // Set EPS_BATTERY_GAUGE_STATUS
+    BAE_STATUS |= 0x00020000;
+else if(EPS_BATTERY_GAUGE_STATUS=='c')          // Clear
+    BAE_STATUS &= 0xFFFDFFFF;
+
+
+if (EPS_BATTERY_TEMP_STATUS=='s')             // Set EPS_BATTERY_TEMP_STATUS
+    BAE_STATUS |= 0x00080000;
+else if(EPS_BATTERY_TEMP_STATUS=='c')       // Clear
+    BAE_STATUS &= 0xFFF7FFFF;
+
+if (EPS_STATUS==0)
+    BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF);                             // Set EPS_ERR_BATTERY_TEMP
+else if (EPS_STATUS==1)
+    BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00010000;           // Set EPS_BATTERY_HEATER_DISABLED
+else if (EPS_STATUS==2)
+    BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00020000;           // Set EPS_ERR_HEATER_SWITCH_OFF
+else if (EPS_STATUS==3)
+    BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00030000;          // Set EPS_ERR_HEATER_SWITCH_ON
+else if (EPS_STATUS==4)
+    BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00040000;          // Set EPS_BATTERY_HEATER_OFF
+else if (EPS_STATUS==5)
+    BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00050000;          // Set EPS_BATTERY_HEATER_ON   
+    
+
+    if(EPS_BATTERY_HEAT_ENABLE == 'e')
+        BAE_ENABLE |= 0x00000080;
+    else if(EPS_BATTERY_HEAT_ENABLE == 'd')
+        BAE_ENABLE = BAE_ENABLE &0xFFFFFF7;    
     
 
    
@@ -495,9 +742,16 @@
     
     ptr_t_i2c = new Thread(T_TC);
     ptr_t_i2c->set_priority(osPriorityHigh);
-    
+        
     irpt_4m_mstr.enable_irq();
     irpt_4m_mstr.rise(&FCTN_I2C_ISR);
+   // ir1.fall(&ir1clear);   //Battery Gauge - Alert Bar Signal
+    ir2.fall(&ir2clear);   //TRXY Driver TR switch Fault
+    ir3.fall(&ir3clear);   //TRZ Driver Fault Bar
+    ir4.fall(&ir4clear);   //TRZ Driver TR switch Fault
+    ir5.fall(&ir5clear);   //CDMS - Switch Fault
+    ir6.fall(&ir6clear);   //Beacon- Switch OC bar
+    ir7.fall(&ir7clear);   //Charger IC - Fault Bar
     RtosTimer t_sc_timer(T_SC,osTimerPeriodic);               // Initiating the scheduler thread
     t_sc_timer.start(10000);
     t_start.start();