Team Fox / Mbed 2 deprecated ACS_Flowchart_BAE

Dependencies:   FreescaleIAP mbed-rtos mbed

Fork of QM_BAE_review_1 by Team Fox

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 #include "pin_config.h"
00004 #include "ACS.h"
00005 #include "EPS.h"
00006 #include "BCN.h"
00007 #include "TCTM.h"
00008 
00009 #define tm_len 135
00010 #define tc_len 11
00011 #define batt_heat_low 20
00012 
00013 //***************************************************** flags *************************************************************//
00014 uint32_t BAE_STATUS = 0x00000000;
00015 uint32_t BAE_ENABLE = 0xFFFFFFFF;
00016 
00017 //i2c//
00018 char data_send_flag = 'h'; 
00019 
00020 //.........acs...............//
00021 /* char ACS_INIT_STATUS = 'q';
00022 char ACS_DATA_ACQ_STATUS = 'q';
00023 char ACS_ATS_STATUS = 'q';
00024 char ACS_MAIN_STATUS = 'q';
00025 char ACS_STATUS = 'q';
00026 
00027 char ACS_ATS_ENABLE = 'q';
00028 char ACS_DATA_ACQ_ENABLE = 'q';
00029 char ACS_STATE = 'q';*/
00030 
00031 uint8_t ACS_INIT_STATUS = 0;
00032 uint8_t ACS_DATA_ACQ_STATUS = 0;
00033 uint8_t ACS_ATS_STATUS = 0x60;
00034 uint8_t ACS_MAIN_STATUS = 0;
00035 uint8_t ACS_STATUS = 0;
00036 
00037 uint8_t ACS_ATS_ENABLE = 1;
00038 uint8_t ACS_DATA_ACQ_ENABLE = 1;
00039 uint8_t ACS_STATE = 4;
00040 
00041 //.....................eps...................//
00042 //eps init
00043 /*char EPS_INIT_STATUS = 'q';
00044 char EPS_BATTERY_GAUGE_STATUS = 'q';
00045 //eps main
00046 char EPS_MAIN_STATUS = 'q';
00047 char EPS_BATTERY_TEMP_STATUS = 'q';
00048 char EPS_STATUS = 'q';
00049 
00050 char EPS_BATTERY_HEAT_ENABLE = 'q';
00051 */
00052 
00053 uint8_t EPS_INIT_STATUS = 0;
00054 uint8_t EPS_BATTERY_GAUGE_STATUS = 0;
00055 //eps main
00056 uint8_t EPS_MAIN_STATUS = 0;
00057 uint8_t EPS_BATTERY_TEMP_STATUS = 0;
00058 uint8_t EPS_STATUS = 7; //invalid status
00059 
00060 uint8_t EPS_BATTERY_HEAT_ENABLE = 0;
00061 
00062 //.......................global variables..................................................................// new hk structure- everything has to changed based on this
00063 uint8_t BAE_data[74];  
00064 char BAE_chardata[74];     
00065     
00066 
00067 //*************************************Global declarations************************************************//
00068 const int addr = 0x20;                                            //slave address 
00069 
00070 Timer t_rfsilence;
00071 Timer t_start;
00072 Timer t_tc;
00073 Timer t_tm;
00074 Serial pc(USBTX, USBRX);
00075 int power_flag_dummy=2;
00076 float data[6];
00077 
00078 extern float moment[3];
00079 extern uint8_t BCN_FEN;
00080 extern BAE_HK_actual actual_data;
00081 extern BAE_HK_quant quant_data;
00082 extern BAE_HK_min_max bae_HK_minmax;
00083 extern BAE_HK_arch arch_data;
00084 
00085 int write_ack = 1;
00086 int read_ack = 1;
00087 char telecommand[tc_len];
00088 extern uint8_t telemetry[135];
00089 
00090 bool pf1check = 0;
00091 bool pf2check = 0;
00092 bool if1check = 0;
00093 bool if2check = 0;
00094 
00095 //*****************************************************Assigning pins******************************************************//
00096 DigitalOut ATS1_SW_ENABLE(PTC0); // enable of att sens2 switch
00097 DigitalOut ATS2_SW_ENABLE(PTC16); // enable of att sens switch
00098 
00099 InterruptIn irpt_4m_mstr(PIN38);                                      //I2c interrupt from CDMS
00100 DigitalOut irpt_2_mstr(PIN4);                                        //I2C interrupt to CDMS
00101 I2CSlave slave (PIN1,PIN2);///pin1 pin2
00102 DigitalOut batt_heat(PIN96);
00103 
00104 //ATS1_SW_ENABLE = 0;
00105 PwmOut PWM1(PIN93); //x                         //Functions used to generate PWM signal 
00106 PwmOut PWM2(PIN94); //y
00107 PwmOut PWM3(PIN95); //z                         //PWM output comes from pins p6
00108 
00109 //........faults
00110 //Polled Faults
00111 DigitalIn pf1(PIN5);//Attitude Sensor 1 OC bar fault signal
00112 DigitalIn pf2(PIN97);//Attitude Sensor 2 OC bar fault signal
00113 DigitalIn pf3(PIN83);//Fault Bar for TRXY driver
00114  
00115 //Interrupt based faults
00116 //InterruptIn  ir1(PIN73);//Battery Gauge - Alert Bar Signal
00117 InterruptIn  ir2(PIN72);//TRXY Driver TR switch Fault
00118 InterruptIn  ir3(PIN89);//TRZ Driver Fault Bar
00119 InterruptIn  ir4(PIN91);//TRZ Driver TR switch Fault
00120 InterruptIn  ir5(PIN79);//CDMS - Switch Fault
00121 InterruptIn  ir6(PIN80);//Beacon- Switch OC bar
00122 InterruptIn  ir7(PIN42);//Charger IC - Fault Bar
00123 
00124 
00125 //DigitalOut TRXY_SW_EN(PIN71);  //TR XY Switch
00126 //DigitalOut DRV_Z_SLP(PIN88);    //Sleep pin of driver z
00127 //DigitalOut TRZ_SW(PIN40);  //TR Z Switch
00128 //DigitalOut CDMS_RESET(PIN7); // CDMS RESET
00129 //DigitalOut BCN_SW(PIN14);      //Beacon switch
00130 //DigitalOut DRV_XY_SLP(PIN82);
00131 
00132 
00133 DigitalOut TRXY_SW(PIN71);  //TR XY Switch
00134 DigitalOut DRV_Z_EN(PIN88);    //Sleep pin of driver z
00135 DigitalOut TRZ_SW(PIN40);  //TR Z Switch
00136 DigitalOut CDMS_RESET(PIN7); // CDMS RESET
00137 DigitalOut BCN_SW(PIN14);      //Beacon switch
00138 DigitalOut DRV_XY_EN(PIN82);
00139 
00140 /*****************************************************************Threads USed***********************************************************************************/
00141 
00142 Thread *ptr_t_i2c;
00143 
00144 /*********************************************************FCTN HEADERS***********************************************************************************/
00145 
00146 void FCTN_ISR_I2C();
00147 void FCTN_TM();
00148 void F_ACS();
00149 void F_EPS();
00150 void F_BCN();
00151 
00152 //*******************************************ACS THREAD**************************************************//
00153 uint8_t iterP1;
00154 uint8_t iterP2;
00155 uint8_t iterI1;
00156 uint8_t iterI2;
00157 
00158  
00159 void F_ACS()
00160 {
00161     
00162 
00163     //...................//
00164     
00165     if(pf1check == 1)
00166     {
00167         if(iterP1 >= 3)
00168         {
00169             ATS1_SW_ENABLE = 1;  // turn off ats1 permanently
00170             //FCTN_SWITCH_ATS(0);  // switch on ATS2    
00171         }
00172         else    
00173         {
00174         ATS1_SW_ENABLE = 0;
00175         iterP1++;
00176         }
00177         pf1check = 0;
00178     }
00179     if(pf2check == 1)
00180     {
00181         if(iterP1 >= 3)
00182         {
00183             ATS2_SW_ENABLE = 1;  // turn off ats2 permanently
00184             ACS_DATA_ACQ_ENABLE = 0;
00185             ACS_STATE = 2 ; // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY    
00186         }
00187         else    
00188         {
00189         ATS2_SW_ENABLE = 0;
00190         iterP2++;
00191         }
00192         pf2check = 0;
00193     }
00194      if(if1check == 1)
00195     {
00196         if(iterI1 >= 3)
00197         {
00198             TRXY_SW = 0;  // turn off TRXY permanently
00199         }
00200         else    
00201         {
00202          TRXY_SW = 1;   //switch on TRXY
00203          iterI1++;
00204         }
00205     }    
00206     if(if2check == 1)
00207     {
00208         if(iterI2 >= 3)
00209         {
00210             TRZ_SW = 0;  // turn off TRZ permanently
00211             ACS_STATE = 2 ; // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY  
00212         }
00213         else    
00214         {
00215          TRZ_SW = 1;   //switch on Z
00216          iterI2++;
00217         }
00218     }
00219     
00220     //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};
00221     //b1[3] = {22, 22,10};
00222     //omega1[3] = {2.1,3.0,1.5};
00223     // ATS1_SW_ENABLE = 0;  // att sens2 switch is disabled
00224     // ATS2_SW_ENABLE = 0; // att sens switch is disabled
00225      
00226     
00227         
00228     //Thread::signal_wait(0x1);  
00229     ACS_MAIN_STATUS = 1; //set ACS_MAIN_STATUS flag 
00230     PWM1 = 0;                     //clear pwm pins
00231     PWM2 = 0;                     //clear pwm pins
00232     PWM3 = 0;                     //clear pwm pins
00233     pc.printf("\n\rEntered ACS   %f\n",t_start.read());
00234     
00235     if(ACS_DATA_ACQ_ENABLE == 1)// check if ACS_DATA_ACQ_ENABLE = 1?
00236     {
00237     //FLAG();
00238     FCTN_ATS_DATA_ACQ(); //the angular velocity is stored in the first 3 values and magnetic field values in next 3
00239     pc.printf("gyro values\n\r"); //printing the angular velocity and magnetic field values
00240     for(int i=0; i<3; i++) 
00241     {
00242         printf("%f\n\r",actual_data.AngularSpeed_actual[i]);
00243     }
00244     pc.printf("mag values\n\r");
00245     for(int i=0; i<3; i++) 
00246     {
00247         pc.printf("%f\n\r",actual_data.Bvalue_actual[i]);
00248     }
00249       //  for(int i=0;i<3;i++)
00250 //    {
00251 //    omega1[i]= data[i];
00252 //    b1[i] = data[i+3];
00253 //    }
00254     }//if ACS_DATA_ACQ_ENABLE = 1
00255      else
00256     {
00257         // Z axis actuation is the only final solution,
00258     }
00259     if(ACS_STATE == 0)        // check ACS_STATE = ACS_CONTROL_OFF?
00260     {
00261           printf("\n\r acs control off\n");
00262           FLAG();
00263           ACS_STATUS = 0;                // set ACS_STATUS = ACS_CONTROL_OFF
00264           PWM1 = 0;                     //clear pwm pins
00265           PWM2 = 0;                     //clear pwm pins
00266           PWM3 = 0;                     //clear pwm pins
00267     }
00268     else
00269     {
00270             if(actual_data.power_mode>1)
00271             
00272             {
00273                 if(ACS_STATE == 2)   // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY 
00274                 {
00275                     FLAG();
00276                     printf("\n\r z axis moment only\n");
00277                     ACS_STATUS = 2;                    // set ACS_STATUS = ACS_ZAXIS_MOMENT_ONLY   
00278                     //   FCTN_ACS_CNTRLALGO(b1, omega1);
00279                     moment[0] = 0;
00280                     moment[1] = 0;
00281                     moment[2] =1.3;// is a dummy value 
00282                     FCTN_ACS_GENPWM_MAIN(moment) ; 
00283                  }
00284                  else
00285                 {
00286                 if(ACS_STATE == 3) // check ACS_STATE = ACS_DATA_ACQ_FAILURE
00287                 {
00288                      FLAG();
00289                      printf("\n\r acs data failure "); 
00290                      ACS_STATUS = 3;                    // set ACS_STATUS = ACS_DATA_ACQ_FAILURE
00291                         PWM1 = 0;                     //clear pwm pins
00292                         PWM2 = 0;                     //clear pwm pins
00293                         PWM3 = 0;                     //clear pwm pins
00294                  }
00295                  else
00296                  {
00297                      if(ACS_STATE == 4)       // check ACS_STATE = ACS_NOMINAL_ONLY
00298                         {
00299                             FLAG();
00300                             printf("\n\r nominal");
00301                             ACS_STATUS = 4;                    // set ACS_STATUS = ACS_NOMINAL_ONLY
00302                             FCTN_ACS_CNTRLALGO(actual_data.Bvalue_actual,actual_data.AngularSpeed_actual);
00303                             printf("\n\r moment values returned by control algo \n");
00304                             for(int i=0; i<3; i++) 
00305                             {
00306                                 printf("%f\t",moment[i]);
00307                             }
00308                             FCTN_ACS_GENPWM_MAIN(moment) ;   
00309                         }
00310                         else
00311                         {
00312                             if(ACS_STATE == 5)       // check ACS_STATE = ACS_AUTO_CONTROL
00313                             {
00314                                 FLAG();
00315                                 printf("\n\r auto control");
00316                                 ACS_STATUS = 5;                    // set ACS_STATUS = ACS_AUTO_CONTROL
00317                                 //FCTN_ACS_AUTOCTRL_LOGIC                    // gotta include this code
00318                             }
00319                             else
00320                             {
00321                                 if(ACS_STATE == 6)       // check ACS_STATE = ACS_DETUMBLING_ONLY
00322                                 {
00323                                     FLAG();
00324                                     printf("\n\r Entered detumbling \n");
00325                                     ACS_STATUS = 6;                    // set ACS_STATUS = ACS_DETUMBLING_ONLY  
00326                                     FCTN_ACS_CNTRLALGO(actual_data.Bvalue_actual,actual_data.AngularSpeed_actual);  // detumbling code has to be included
00327                                     FCTN_ACS_GENPWM_MAIN(moment) ; 
00328                                 }
00329                                 else
00330                                 {
00331                                     FLAG();
00332                                     printf("\n\r invalid state");
00333                                     ACS_STATUS = 7 ;                    // set ACS_STATUS = INVALID STATE 
00334                                     PWM1 = 0;                     //clear pwm pins
00335                                     PWM2 = 0;                     //clear pwm pins
00336                                     PWM3 = 0;                     //clear pwm pins
00337                                 }//else of invalid 
00338                             }//else of autocontrol 
00339                         }//else of nominal
00340                  }//else of data acg failure
00341                 
00342                 }//else fo z axis moment only
00343             }//if power >2
00344             else
00345             {
00346                 FLAG();
00347                 printf("\n\r low power");
00348                 ACS_STATUS = 1;                    // set ACS_STATUS = ACS_LOW_POWER
00349                 PWM1 = 0;                     //clear pwm pins
00350                 PWM2 = 0;                     //clear pwm pins
00351                 PWM3 = 0;                     //clear pwm pins
00352             }
00353     } //else for acs control off
00354     ACS_MAIN_STATUS = 0; //clear ACS_MAIN_STATUS flag 
00355         
00356 }
00357 //***************************************************EPS THREAD***********************************************//
00358 
00359 void F_EPS()
00360 {
00361     
00362         pc.printf("\n\rEntered EPS   %f\n",t_start.read());
00363         EPS_MAIN_STATUS = 1; // Set EPS main status
00364         FCTN_BATT_TEMP_SENSOR_MAIN(actual_data.Batt_temp_actual);
00365           pc.printf("\n\r Battery temperature %f %f" ,actual_data.Batt_temp_actual[0], actual_data.Batt_temp_actual[1]);
00366           EPS_BATTERY_TEMP_STATUS = 1;          //set EPS_BATTERY_TEMP_STATUS
00367           if(EPS_BATTERY_HEAT_ENABLE == 1)
00368           {
00369               if((actual_data.Batt_temp_actual[0] < batt_heat_low) && (actual_data.Batt_temp_actual[1] < batt_heat_low)) // to confirm
00370               {
00371                   batt_heat = 1;    //turn on battery heater
00372               }
00373               else
00374               {
00375                   batt_heat = 0;     //turn off battery heater
00376               }
00377               
00378            } 
00379           else if(EPS_BATTERY_HEAT_ENABLE == 0)
00380           {
00381                 EPS_STATUS = 1;//EPS_STATUS = EPS_BATTERY_HEATER_DISABLED
00382           }
00383         FCTN_BATTERYGAUGE_MAIN(actual_data.Batt_gauge_actual);
00384         if (actual_data.Batt_gauge_actual[1] == 200)   //data not received
00385         {
00386           actual_data.power_mode = 1;
00387           EPS_BATTERY_GAUGE_STATUS = 0;           //clear EPS_BATTERY_GAUGE_STATUS
00388           
00389         }
00390         else
00391         {
00392           FCTN_EPS_POWERMODE(actual_data.Batt_gauge_actual[1]);            //updating power level 
00393           EPS_BATTERY_GAUGE_STATUS = 1;           //set EPS_BATTERY_GAUGE_STATUS
00394         }
00395        // if( Temperature data received)
00396         //{
00397           
00398           
00399       //  }
00400 //        else
00401 //        {
00402 //          Set battery temp to XX  
00403 //          EPS_BATTERY_TEMP_STATUS = 0;          //clear EPS_BATTERY_TEMP_STATUS
00404 //          EPS_STATUS = EPS_ERR_BATTERY_TEMP;
00405 //        }
00406         FCTN_HK_MAIN();
00407        // printf("\n\r here");
00408         FCTN_APPEND_HKDATA();
00409         minMaxHkData();
00410         //printf("\n\r here");  
00411         EPS_MAIN_STATUS = 0; // clear EPS main status 
00412 
00413 }
00414 
00415 //**************************************************BCN THREAD*******************************************************************//
00416 
00417 void F_BCN()
00418 {
00419   
00420           pc.printf("\n\rEntered BCN   %f\n",t_start.read());
00421           
00422           FCTN_BCN_TX_MAIN();
00423     
00424 }
00425 
00426 //**************************************************TCTM THREAD*******************************************************************//
00427 
00428 void T_TC(void const * args)
00429 {
00430       while(1)
00431     {
00432         Thread::signal_wait(0x4);
00433         wait_us(200);  
00434         //printf("\n\rreached\n");                                             // can be between 38 to 15700
00435         if( slave.receive() == 0)        
00436             {slave.stop();
00437             //printf("\n\rnot send\n");
00438             }     
00439         else if( slave.receive() == 1)                                     // slave writes to master
00440         {
00441              if(data_send_flag == 'h')
00442              {
00443                 //FCTN_APPEND_HKDATA();
00444                 // pc.printf("\n\r here");
00445                 write_ack=slave.write(BAE_chardata,74); 
00446                 if(write_ack==0)                
00447                     {irpt_2_mstr = 0;
00448                     printf("\n\rgot interrupt\n");
00449                     }
00450             }
00451             else if(data_send_flag == 't')
00452             {
00453                 write_ack=slave.write((char*)telemetry,tm_len);
00454                 data_send_flag = 'h';
00455                 if(write_ack==0)                
00456                     irpt_2_mstr = 0;
00457             }       
00458         }
00459         else if( slave.receive()==3 ||  slave.receive()==2)             // slave read 
00460         {
00461            read_ack=slave.read(telecommand,tc_len);
00462            t_tc.start();
00463            //pc.printf("\n\rTELECOMMAND received from CDMS is %s \n",telecommand);
00464            pc.printf("\n\r Executing Telecommand \n"); 
00465            // FCTN_TC_DECODE((uint8_t*) telecommand);
00466            
00467            FCTN_BAE_TM_TC((uint8_t*) telecommand);
00468            //telemetry = (char*)temp;
00469           
00470            FCTN_TM();
00471             t_tc.stop();
00472            printf("\n\r time taken %d",t_tc.read_us());
00473             t_tc.reset();
00474             // for(int i = 0; i<134; i++)
00475             //pc.printf("%c", telemetry[i]);
00476         } 
00477        
00478       
00479     } 
00480 }
00481 
00482 void FCTN_TM()
00483 {
00484     //irpt_2_mstr = 0; 
00485     data_send_flag = 't';
00486     pc.printf("\n\r Telemetry Generation \n");
00487     irpt_2_mstr = 1;   
00488 }
00489 
00490 
00491 //******************************************************* I2C *******************************************************************//
00492 
00493 void FCTN_I2C_ISR()
00494 {
00495      ptr_t_i2c->signal_set(0x4);
00496 }
00497 
00498 
00499 //***********************************************************FAULTS***************************************************************//
00500 /*void ir1clear()
00501 {
00502     actual_data.faultIr_status |= 0x01;   // alert
00503  
00504 }*/
00505 
00506 
00507  
00508 void ir2clear()
00509 {
00510     actual_data.faultIr_status |= 0x02;
00511     TRXY_SW = 0;   // Switch off TR XY
00512     if1check = 1;
00513 }
00514  
00515 void ir3clear()
00516 {
00517     actual_data.faultIr_status |= 0x04;
00518     DRV_Z_EN = 0;
00519     wait_us(1);
00520     DRV_Z_EN = 1;
00521  
00522 }
00523  
00524 void ir4clear()
00525 {
00526     if2check = 1;
00527     actual_data.faultIr_status |= 0x08;
00528     TRZ_SW = 0;
00529 }
00530  
00531 void ir5clear()
00532 {
00533     actual_data.faultIr_status |= 0x10;
00534     CDMS_RESET = 0;
00535     wait_us(1);
00536     CDMS_RESET = 1;
00537 }
00538  
00539 void ir6clear()
00540 {
00541     actual_data.faultIr_status |= 0x20;
00542     BCN_SW = 0;
00543     wait_us(1);
00544     BCN_SW = 1;
00545 }
00546  
00547 void ir7clear()
00548 {
00549     actual_data.faultIr_status |= 0x40;
00550 }
00551 uint8_t iter2=0,iter4 = 0; 
00552 
00553 
00554 
00555 void pollfault()
00556 {   
00557     
00558     
00559  
00560     if (pf1==0)                // OC_ATS1
00561     { 
00562         pf1check=1;
00563         actual_data.faultPoll_status |=0x01 ;
00564         ATS1_SW_ENABLE = 1;  // turn off ats1  // to be turned on next cycle in ACS
00565     }
00566     else actual_data.faultPoll_status &= 0xFE;
00567  
00568     if (pf2==0)
00569     {   
00570         pf2check=1;
00571         actual_data.faultPoll_status |=0x02 ;
00572         ATS2_SW_ENABLE = 1;  // turn off ats2  // turn on in ACS
00573     }
00574     else actual_data.faultPoll_status &= 0xFD;
00575  
00576     if (pf3==0)
00577     {   actual_data.faultPoll_status |=0x04 ;
00578         DRV_XY_EN = 0;
00579         wait_us(1);
00580         DRV_XY_EN = 1;
00581     }
00582     else actual_data.faultPoll_status &= 0xFB;
00583  
00584  
00585  
00586  
00587     /*if (ir1==1)
00588     {
00589         actual_data.faultIr_status &=0xFE;
00590     }*/
00591    
00592     if (ir2==1)
00593     {
00594         actual_data.faultIr_status &=0xFD;
00595     }
00596     if (ir3==1)
00597     {
00598         actual_data.faultIr_status &=0xFB;
00599     }
00600     if (ir4==1)
00601     {
00602         actual_data.faultIr_status &=0xF7;
00603     }
00604     if (ir5==1)
00605     {
00606         actual_data.faultIr_status &=0xEF;
00607     }
00608     if (ir6==1)
00609     {
00610         actual_data.faultIr_status &=0xDF;
00611     }if (ir7==1)
00612     {
00613         actual_data.faultIr_status &=0xBF;
00614     }
00615     
00616  
00617 }
00618   
00619 
00620 //------------------------------------------------------------------------------------------------------------------------------------------------
00621 //SCHEDULER
00622 //------------------------------------------------------------------------------------------------------------------------------------------------
00623 uint8_t schedcount=1;
00624 void T_SC(void const *args)
00625 {    
00626     printf("\n\r in scheduler");
00627    
00628     if(schedcount == 7)                         //to reset the counter
00629     {
00630         schedcount = 1;
00631     }
00632     if(schedcount%1==0)
00633     { pc.printf("\nSTATE IS !!!!!! = %x !!\n",ACS_STATE);
00634       pc.printf("\niterp1 !!!!!! = %x !!\n",iterP1);
00635       pc.printf("\niteri2 IS !!!!!! = %x !!\n",iterI2);
00636        F_ACS();
00637     }
00638     
00639     if(schedcount%2==0)
00640     {
00641     //    F_EPS();
00642     }
00643     if(schedcount%1==0)
00644     { 
00645        F_BCN();
00646     }
00647     schedcount++;
00648     printf("\n\r exited scheduler");
00649 }
00650 
00651 Timer t_flag;
00652 void FLAG()
00653 {
00654     
00655 //.............acs..................//    
00656     if(ACS_INIT_STATUS == 1)
00657         BAE_STATUS = BAE_STATUS | 0x00000080;  //set ACS_INIT_STATUS flag
00658     else if(ACS_INIT_STATUS == 0)
00659         BAE_STATUS &= 0xFFFFFF7F;              //clear ACS_INIT_STATUS flag 
00660     
00661     if(ACS_DATA_ACQ_STATUS == 1)
00662         BAE_STATUS =BAE_STATUS | 0x00000100;     //set ACS_DATA_ACQ_STATUS flag
00663     else if(ACS_DATA_ACQ_STATUS == 0)
00664         BAE_STATUS &= 0xFFFFFEFF;      //clear ACS_DATA_ACQ_STATUS flag    
00665     
00666     if(ACS_ATS_ENABLE == 1)
00667         BAE_ENABLE |= 0x00000004;
00668     else if(ACS_ATS_ENABLE == 0)
00669         BAE_ENABLE = BAE_ENABLE &0xFFFFFFFB | 0x00000004;
00670     
00671     if(ACS_DATA_ACQ_STATUS == 'f')
00672         BAE_STATUS |= 0x00000200;
00673     
00674     if(ACS_MAIN_STATUS == 1)
00675         BAE_STATUS = (BAE_STATUS | 0x00001000);     //set ACS_MAIN_STATUS flag
00676    else if(ACS_MAIN_STATUS == 0)
00677         BAE_STATUS &= 0xFFFFEFFF;     //clear ACS_MAIN_STATUS flag 
00678     
00679     if(ACS_STATUS == '0')
00680         BAE_STATUS = (BAE_STATUS & 0xFFFF1FFF);                // set ACS_STATUS = ACS_CONTROL_OFF
00681     else if(ACS_STATUS == '1')
00682         BAE_STATUS =(BAE_STATUS & 0xFFFF1FFF) | 0x00002000;                    // set ACS_STATUS = ACS_LOW_POWER
00683     else if(ACS_STATUS == '2')
00684         BAE_STATUS = (BAE_STATUS & 0xFFFF1FFF)| 0x00004000;                    // set ACS_STATUS = ACS_ZAXIS_MOMENT_ONLY  
00685     else if(ACS_STATUS == '3') 
00686         BAE_STATUS = (BAE_STATUS & 0xFFFF1FFF) | 0x00006000;                    // set ACS_STATUS = ACS_DATA_ACQ_FAILURE
00687     else if(ACS_STATUS == '4')
00688         BAE_STATUS = (BAE_STATUS & 0xFFFF1FFF) | 0x00008000;                    // set ACS_STATUS = ACS_NOMINAL_ONLY
00689     else if(ACS_STATUS == '5')
00690         BAE_STATUS =(BAE_STATUS & 0xFFFF1FFF) | 0x0000A000;                    // set ACS_STATUS = ACS_AUTO_CONTROL
00691     else if(ACS_STATUS == '6')
00692         BAE_STATUS =(BAE_STATUS & 0xFFFF1FFF) | 0x0000C000;                    // set ACS_STATUS = ACS_DETUMBLING_ONLY  
00693     else 
00694         BAE_STATUS =(BAE_STATUS & 0xFFFF1FFF) | 0x0000E000;                    // set ACS_STATUS = INVALID STATE 
00695         
00696     if(ACS_STATE == '0')
00697         BAE_ENABLE = (BAE_ENABLE & 0xFFFFFF8F);                                         //ACS_STATE = ACS_CONTROL_OFF
00698     else if(ACS_STATE == '2')
00699         BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000020);                              //   ACS_STATE = ACS_ZAXIS_MOMENT_ONLY  
00700     else if(ACS_STATE == '3')
00701         BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000030);                              //  set ACS_STATUS = ACS_DATA_ACQ_FAILURE
00702     else if(ACS_STATE == '4')
00703         BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000040);                              //  ACS_STATE = ACS_NOMINAL_ONLY
00704     else if(ACS_STATE == '5')
00705         BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000050);                              //    ACS_STATE = ACS_AUTO_CONTROL
00706     else if(ACS_STATE == '6')
00707         BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000060);                             //ACS_STATE = ACS_DETUMBLING_CONTROL
00708         
00709 //...............eps......................//
00710 
00711     
00712 if (EPS_INIT_STATUS==1)                                  // Set EPS_INIT_STATUS
00713     BAE_STATUS |= 0x00010000;                     
00714 else if(EPS_INIT_STATUS==0)                              // Clear
00715     BAE_STATUS &= 0xFFFEFFFF;
00716 
00717 
00718 if (EPS_MAIN_STATUS==1)                              // Set EPS_MAIIN_STATUS
00719     BAE_STATUS |= 0x00040000;
00720 else if(EPS_MAIN_STATUS==0)                          // Clear
00721     BAE_STATUS &= 0xFFFBFFFF;
00722 
00723 
00724 if (EPS_BATTERY_GAUGE_STATUS==1)              // Set EPS_BATTERY_GAUGE_STATUS
00725     BAE_STATUS |= 0x00020000;
00726 else if(EPS_BATTERY_GAUGE_STATUS==0)          // Clear
00727     BAE_STATUS &= 0xFFFDFFFF;
00728 
00729 
00730 if (EPS_BATTERY_TEMP_STATUS==1)             // Set EPS_BATTERY_TEMP_STATUS
00731     BAE_STATUS |= 0x00080000;
00732 else if(EPS_BATTERY_TEMP_STATUS==0)       // Clear
00733     BAE_STATUS &= 0xFFF7FFFF;
00734 
00735 if (EPS_STATUS==0)
00736     BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF);                             // Set EPS_ERR_BATTERY_TEMP
00737 else if (EPS_STATUS==1)
00738     BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00010000;           // Set EPS_BATTERY_HEATER_DISABLED
00739 else if (EPS_STATUS==2)
00740     BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00020000;           // Set EPS_ERR_HEATER_SWITCH_OFF
00741 else if (EPS_STATUS==3)
00742     BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00030000;          // Set EPS_ERR_HEATER_SWITCH_ON
00743 else if (EPS_STATUS==4)
00744     BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00040000;          // Set EPS_BATTERY_HEATER_OFF
00745 else if (EPS_STATUS==5)
00746     BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00050000;          // Set EPS_BATTERY_HEATER_ON   
00747     
00748 
00749     if(EPS_BATTERY_HEAT_ENABLE == 1)
00750         BAE_ENABLE |= 0x00000080;
00751     else if(EPS_BATTERY_HEAT_ENABLE == 0)
00752         BAE_ENABLE = BAE_ENABLE &0xFFFFFF7;    
00753     
00754 
00755    
00756     pc.printf("\n\r BAE status %x BAE ENABLE %x ",BAE_STATUS,BAE_ENABLE);
00757 }
00758 
00759 void FCTN_BAE_INIT()
00760 {
00761     printf("\n\r Initialising BAE ");
00762     //..........intial status....//
00763     ACS_STATE = 4;
00764     ACS_ATS_ENABLE = 1;
00765     ACS_DATA_ACQ_ENABLE = 1;
00766     
00767     
00768     EPS_BATTERY_HEAT_ENABLE = 1;
00769     actual_data.power_mode=3;
00770     //............intializing pins................//
00771     
00772     ATS2_SW_ENABLE = 1;
00773     ATS1_SW_ENABLE = 1;
00774     wait_ms(5);
00775     ATS1_SW_ENABLE = 0;
00776     
00777     ACS_ATS_STATUS = 0x60;  //Set Sensor 1 working , Sensor2 working and powered off by default
00778 
00779     DRV_XY_EN = 1;
00780     DRV_Z_EN = 1;
00781     TRZ_SW = 1;
00782     TRXY_SW = 1;
00783     
00784     //............................//
00785     FCTN_ACS_INIT();
00786    // FCTN_EPS_INIT();
00787     //FCTN_BCN_INIT();
00788 
00789     
00790     FLAG();
00791 }
00792 
00793 int main()
00794 {
00795     pc.printf("\n\r BAE Activated. Testing Version 1.1 \n");
00796     CDMS_RESET = 1;  
00797     /*if (BCN_FEN == 0)                       //dummy implementation
00798     {
00799         pc.printf("\n\r RF silence ");
00800         FCTN_BCN_FEN();
00801         t_rfsilence.start();//Start the timer for RF_Silence
00802         while(t_rfsilence.read() < RF_SILENCE_TIME); 
00803     }               
00804     */
00805     
00806     //ACS_INIT_STATUS = 0;
00807     //ACS_DATA_ACQ_STATUS = 0;
00808         
00809 
00810     
00811     //FLAG();
00812     FCTN_BAE_INIT();
00813     
00814     
00815     //...i2c..
00816     //strcpy(telemetry,"This is telemetry THis is sample telemetry. ffffffffffffffffffffffffffffff  end");
00817     slave.address(addr);
00818     irpt_2_mstr = 0;
00819     
00820     ptr_t_i2c = new Thread(T_TC);
00821     ptr_t_i2c->set_priority(osPriorityHigh);
00822         
00823     irpt_4m_mstr.enable_irq();
00824     irpt_4m_mstr.rise(&FCTN_I2C_ISR);
00825    // ir1.fall(&ir1clear);   //Battery Gauge - Alert Bar Signal
00826  /*   ir2.fall(&ir2clear);   //TRXY Driver TR switch Fault
00827     ir3.fall(&ir3clear);   //TRZ Driver Fault Bar
00828     ir4.fall(&ir4clear);   //TRZ Driver TR switch Fault
00829     ir5.fall(&ir5clear);   //CDMS - Switch Fault
00830     ir6.fall(&ir6clear);   //Beacon- Switch OC bar
00831     ir7.fall(&ir7clear);   //Charger IC - Fault Bar
00832     
00833     */
00834     RtosTimer t_sc_timer(T_SC,osTimerPeriodic);               // Initiating the scheduler thread
00835     t_sc_timer.start(10000);
00836     t_start.start();
00837     pc.printf("\n\rStarted scheduler %f\n\r",t_start.read()); 
00838     
00839 
00840     //FCTN_BAE_INIT();
00841     while(1);                                                   //required to prevent main from terminating
00842 }
00843