QITH FLAGS

Dependencies:   FreescaleIAP mbed-rtos mbed

Fork of TF_conops_BAE1_3 by Team Fox

Committer:
sakthipriya
Date:
Tue Jun 30 05:55:48 2015 +0000
Revision:
0:246d1b5f11ae
Child:
1:7185136654ce
conops in progress. to check if individual codes are r8

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sakthipriya 0:246d1b5f11ae 1 /************************************************************Header files*****************************************************************/
sakthipriya 0:246d1b5f11ae 2
sakthipriya 0:246d1b5f11ae 3 #include "mbed.h"
sakthipriya 0:246d1b5f11ae 4 #include "rtos.h"
sakthipriya 0:246d1b5f11ae 5 #include "pin_config.h"
sakthipriya 0:246d1b5f11ae 6 #include "EPS.h"
sakthipriya 0:246d1b5f11ae 7 #include "beacon.h"
sakthipriya 0:246d1b5f11ae 8 #include "ACS.h"
sakthipriya 0:246d1b5f11ae 9 #include "FreescaleIAP.h" //required for r/w to flash
sakthipriya 0:246d1b5f11ae 10
sakthipriya 0:246d1b5f11ae 11 /***********************************************************For Testing - TO BE REMOVED***************************************************/
sakthipriya 0:246d1b5f11ae 12
sakthipriya 0:246d1b5f11ae 13 Serial pc(USBTX, USBRX); //for debugging purpose. will be removed along with printf
sakthipriya 0:246d1b5f11ae 14 Timer t_exec; //To know the time of execution each thread
sakthipriya 0:246d1b5f11ae 15 Timer t_start; //To know the time of entering of each thread
sakthipriya 0:246d1b5f11ae 16 Timer t_i2c_start; //To check the time sync in i2c communication
sakthipriya 0:246d1b5f11ae 17 Timer t_i2c_exec; //To know the time taken by i2c read/write function
sakthipriya 0:246d1b5f11ae 18
sakthipriya 0:246d1b5f11ae 19 /**********************************************************configuring peripherals********************************************************/
sakthipriya 0:246d1b5f11ae 20 I2CSlave slave(PIN1,PIN2); //configuring pins as I2Cslave (sda ,scl)
sakthipriya 0:246d1b5f11ae 21 InterruptIn irpt_4m_cdms(PIN97); //I2c interrupt from CDMS
sakthipriya 0:246d1b5f11ae 22 DigitalOut irpt_2_bae(PIN90); //Sets interrupt to CDMS
sakthipriya 0:246d1b5f11ae 23
sakthipriya 0:246d1b5f11ae 24
sakthipriya 0:246d1b5f11ae 25
sakthipriya 0:246d1b5f11ae 26 /****************************************************global variables*********************************************************************/
sakthipriya 0:246d1b5f11ae 27 // flags---------------------------------------------
sakthipriya 0:246d1b5f11ae 28 uint32_t BAE_STATUS = 0x00000000;
sakthipriya 0:246d1b5f11ae 29 uint32_t BAE_ENABLE = 0xFFFFFFFF;
sakthipriya 0:246d1b5f11ae 30 //---------------------------------------------------
sakthipriya 0:246d1b5f11ae 31 char hk_data[25];
sakthipriya 0:246d1b5f11ae 32
sakthipriya 0:246d1b5f11ae 33 /*****************************************************************Threads USed***********************************************************************************/
sakthipriya 0:246d1b5f11ae 34 Thread *ptr_t_eps;
sakthipriya 0:246d1b5f11ae 35 Thread *ptr_t_acs;
sakthipriya 0:246d1b5f11ae 36 Thread *ptr_t_bea;
sakthipriya 0:246d1b5f11ae 37 Thread *ptr_t_i2c;
sakthipriya 0:246d1b5f11ae 38 //Thread *ptr_t_wdt;
sakthipriya 0:246d1b5f11ae 39
sakthipriya 0:246d1b5f11ae 40 /**********************************************************pin allocation****************************************************************************/
sakthipriya 0:246d1b5f11ae 41 extern PwmOut PWM1;
sakthipriya 0:246d1b5f11ae 42 extern PwmOut PWM2;
sakthipriya 0:246d1b5f11ae 43 extern PwmOut PWM3;
sakthipriya 0:246d1b5f11ae 44
sakthipriya 0:246d1b5f11ae 45
sakthipriya 0:246d1b5f11ae 46 /**************************************************************funtion header**********************************************************************************/
sakthipriya 0:246d1b5f11ae 47
sakthipriya 0:246d1b5f11ae 48 void FCTN_HK_DATA_CATENATE(); //combines hk structure into a string
sakthipriya 0:246d1b5f11ae 49
sakthipriya 0:246d1b5f11ae 50 //--------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:246d1b5f11ae 51 //TASK 2 : EPS
sakthipriya 0:246d1b5f11ae 52 //--------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:246d1b5f11ae 53
sakthipriya 0:246d1b5f11ae 54
sakthipriya 0:246d1b5f11ae 55 extern SensorDataQuantised SensorQuantised;
sakthipriya 0:246d1b5f11ae 56 void T_EPS(void const *args)
sakthipriya 0:246d1b5f11ae 57 {
sakthipriya 0:246d1b5f11ae 58
sakthipriya 0:246d1b5f11ae 59 while(1)
sakthipriya 0:246d1b5f11ae 60 {
sakthipriya 0:246d1b5f11ae 61 Thread::signal_wait(0x2);
sakthipriya 0:246d1b5f11ae 62 SensorQuantised.power_mode='3'; //default power mode(dummy)
sakthipriya 0:246d1b5f11ae 63 printf("\n\rTHIS IS EPS %f\n\r",t_start.read());
sakthipriya 0:246d1b5f11ae 64 t_exec.start();
sakthipriya 0:246d1b5f11ae 65 //FUNC_HK_FAULTS(); // !Actual fault management is not implemented
sakthipriya 0:246d1b5f11ae 66 //FUNC_HK_POWER(SensorQuantised.power_mode); // !The power mode algorithm is yet to be obtained
sakthipriya 0:246d1b5f11ae 67 FCTN_BAE_HK_MAIN() ; //Collecting HK data
sakthipriya 0:246d1b5f11ae 68 FCTN_HK_DATA_CATENATE(); //sending HK data to CDMS
sakthipriya 0:246d1b5f11ae 69 t_exec.stop();
sakthipriya 0:246d1b5f11ae 70 printf("The time to execute hk_acq is %f seconds\n\r",t_exec.read());
sakthipriya 0:246d1b5f11ae 71 t_exec.reset();
sakthipriya 0:246d1b5f11ae 72 }
sakthipriya 0:246d1b5f11ae 73 }
sakthipriya 0:246d1b5f11ae 74
sakthipriya 0:246d1b5f11ae 75 //---------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:246d1b5f11ae 76 //TASK 1 : ACS
sakthipriya 0:246d1b5f11ae 77 //---------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:246d1b5f11ae 78 int power_flag = 4; //temporary dummy flag
sakthipriya 0:246d1b5f11ae 79 int acs_pflag = 1;
sakthipriya 0:246d1b5f11ae 80 void T_ACS(void const *args)
sakthipriya 0:246d1b5f11ae 81 {
sakthipriya 0:246d1b5f11ae 82 float mag_field1[3];
sakthipriya 0:246d1b5f11ae 83 float omega1[3];
sakthipriya 0:246d1b5f11ae 84 //float tauc1[3];
sakthipriya 0:246d1b5f11ae 85 float moment[3];
sakthipriya 0:246d1b5f11ae 86 //float *mnm_data;
sakthipriya 0:246d1b5f11ae 87 while(1)
sakthipriya 0:246d1b5f11ae 88 {
sakthipriya 0:246d1b5f11ae 89 Thread::signal_wait(0x1);
sakthipriya 0:246d1b5f11ae 90 printf("\n\rEntered ACS %f\n",t_start.read());
sakthipriya 0:246d1b5f11ae 91 t_exec.start();
sakthipriya 0:246d1b5f11ae 92 BAE_STATUS |= 0x00000002; //set ACS_MAIN_STATUS flag to 1
sakthipriya 0:246d1b5f11ae 93 PWM1 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 94 PWM2 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 95 PWM3 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 96 omega1[0] = 1 ; //for testing
sakthipriya 0:246d1b5f11ae 97 omega1[1] = 2 ;
sakthipriya 0:246d1b5f11ae 98 omega1[2] = 3 ;
sakthipriya 0:246d1b5f11ae 99 mag_field1[0] = 10;
sakthipriya 0:246d1b5f11ae 100 mag_field1[1] = 20;
sakthipriya 0:246d1b5f11ae 101 mag_field1[2] = 30;
sakthipriya 0:246d1b5f11ae 102 if (BAE_ENABLE & 0x00000001 == 0x00000001) // check if ACS_DATA_ACQ_ENABLE = 1?
sakthipriya 0:246d1b5f11ae 103 {
sakthipriya 0:246d1b5f11ae 104 FCTN_ACS_DATA_ACQ(omega1,mag_field1);
sakthipriya 0:246d1b5f11ae 105 printf("\n\rmnm gyro values\n"); //printing the angular velocity and magnetic field values
sakthipriya 0:246d1b5f11ae 106 for(int i=0; i<3; i++)
sakthipriya 0:246d1b5f11ae 107 {
sakthipriya 0:246d1b5f11ae 108 printf("%f\t",omega1[i]);
sakthipriya 0:246d1b5f11ae 109 }
sakthipriya 0:246d1b5f11ae 110 printf("\n\r mnm mag values\n");
sakthipriya 0:246d1b5f11ae 111 for(int i=0; i<3; i++)
sakthipriya 0:246d1b5f11ae 112 {
sakthipriya 0:246d1b5f11ae 113 printf("%f\t",mag_field1[i]);
sakthipriya 0:246d1b5f11ae 114 }
sakthipriya 0:246d1b5f11ae 115 }
sakthipriya 0:246d1b5f11ae 116 if(BAE_ENABLE & 0x0000000E == 0x00000000) // check ACS_STATE = ACS_CONTROL_OFF?
sakthipriya 0:246d1b5f11ae 117 {
sakthipriya 0:246d1b5f11ae 118 BAE_STATUS |= 0x00000000; // set ACS_STATUS = ACS_CONTROL_OFF
sakthipriya 0:246d1b5f11ae 119 PWM1 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 120 PWM2 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 121 PWM3 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 122 }
sakthipriya 0:246d1b5f11ae 123 else
sakthipriya 0:246d1b5f11ae 124 {
sakthipriya 0:246d1b5f11ae 125 if(power_flag > 1)
sakthipriya 0:246d1b5f11ae 126 {
sakthipriya 0:246d1b5f11ae 127 if(BAE_ENABLE & 0x0000000E == 0x00000004) // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY
sakthipriya 0:246d1b5f11ae 128 {
sakthipriya 0:246d1b5f11ae 129 BAE_STATUS |= 0x00000018; // set ACS_STATUS = ACS_ZAXIS_MOMENT_ONLY
sakthipriya 0:246d1b5f11ae 130 FCTN_ACS_CNTRLALGO(mag_field1,omega1,moment);
sakthipriya 0:246d1b5f11ae 131 printf("\n\r moment values returned by control algo \n");
sakthipriya 0:246d1b5f11ae 132 moment[0] = 0;
sakthipriya 0:246d1b5f11ae 133 moment[1] = 0;
sakthipriya 0:246d1b5f11ae 134 printf("\n\r z axis moment %f \n",&moment[2]);
sakthipriya 0:246d1b5f11ae 135 FCTN_ACS_GENPWM_MAIN(moment) ;
sakthipriya 0:246d1b5f11ae 136 }
sakthipriya 0:246d1b5f11ae 137 else
sakthipriya 0:246d1b5f11ae 138 {
sakthipriya 0:246d1b5f11ae 139 if(BAE_ENABLE & 0x00000040 == 0x00000040) // check ACS_STATE = ACS_DATA_ACQ_FAILURE
sakthipriya 0:246d1b5f11ae 140 {
sakthipriya 0:246d1b5f11ae 141 BAE_STATUS |= 0x0000000C; // set ACS_STATUS = ACS_DATA_ACQ_FAILURE
sakthipriya 0:246d1b5f11ae 142 PWM1 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 143 PWM2 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 144 PWM3 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 145 }
sakthipriya 0:246d1b5f11ae 146 else
sakthipriya 0:246d1b5f11ae 147 {
sakthipriya 0:246d1b5f11ae 148 if(BAE_ENABLE & 0x0000000E == 0x00000008) // check ACS_STATE = ACS_NOMINAL_ONLY
sakthipriya 0:246d1b5f11ae 149 {
sakthipriya 0:246d1b5f11ae 150 BAE_STATUS |= 0x00000010; // set ACS_STATUS = ACS_NOMINAL_ONLY
sakthipriya 0:246d1b5f11ae 151 FCTN_ACS_CNTRLALGO(mag_field1,omega1,moment);
sakthipriya 0:246d1b5f11ae 152 printf("\n\r moment values returned by control algo \n");
sakthipriya 0:246d1b5f11ae 153 for(int i=0; i<3; i++)
sakthipriya 0:246d1b5f11ae 154 {
sakthipriya 0:246d1b5f11ae 155 printf("%f\t",moment[i]);
sakthipriya 0:246d1b5f11ae 156 }
sakthipriya 0:246d1b5f11ae 157 FCTN_ACS_GENPWM_MAIN(moment) ;
sakthipriya 0:246d1b5f11ae 158 }
sakthipriya 0:246d1b5f11ae 159 else
sakthipriya 0:246d1b5f11ae 160 {
sakthipriya 0:246d1b5f11ae 161 if(BAE_ENABLE & 0x0000000E == 0x0000000A) // check ACS_STATE = ACS_AUTO_CONTROL
sakthipriya 0:246d1b5f11ae 162 {
sakthipriya 0:246d1b5f11ae 163 BAE_STATUS |= 0x00000014; // set ACS_STATUS = ACS_AUTO_CONTROL
sakthipriya 0:246d1b5f11ae 164 //FCTN_ACS_AUTOCTRL_LOGIC // gotta include this code
sakthipriya 0:246d1b5f11ae 165 }
sakthipriya 0:246d1b5f11ae 166 else
sakthipriya 0:246d1b5f11ae 167 {
sakthipriya 0:246d1b5f11ae 168 if(BAE_ENABLE & 0x0000000E == 0x0000000C) // check ACS_STATE = ACS_DETUMBLING_ONLY
sakthipriya 0:246d1b5f11ae 169 {
sakthipriya 0:246d1b5f11ae 170 BAE_STATUS |= 0x00000018; // set ACS_STATUS = ACS_DETUMBLING_ONLY
sakthipriya 0:246d1b5f11ae 171 FCTN_ACS_CNTRLALGO(mag_field1,omega1,moment); // detumbling code has to be included
sakthipriya 0:246d1b5f11ae 172 FCTN_ACS_GENPWM_MAIN(moment) ;
sakthipriya 0:246d1b5f11ae 173 }
sakthipriya 0:246d1b5f11ae 174 else
sakthipriya 0:246d1b5f11ae 175 {
sakthipriya 0:246d1b5f11ae 176 BAE_STATUS |= 0x0000001C; // set ACS_STATUS = INVALID STATE
sakthipriya 0:246d1b5f11ae 177 PWM1 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 178 PWM2 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 179 PWM3 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 180 }
sakthipriya 0:246d1b5f11ae 181 }
sakthipriya 0:246d1b5f11ae 182 }
sakthipriya 0:246d1b5f11ae 183 }
sakthipriya 0:246d1b5f11ae 184 }
sakthipriya 0:246d1b5f11ae 185 }
sakthipriya 0:246d1b5f11ae 186 else
sakthipriya 0:246d1b5f11ae 187 {
sakthipriya 0:246d1b5f11ae 188 BAE_STATUS |= 0x00000004; // set ACS_STATUS = ACS_LOW_POWER
sakthipriya 0:246d1b5f11ae 189 PWM1 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 190 PWM2 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 191 PWM3 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 192 }
sakthipriya 0:246d1b5f11ae 193 }
sakthipriya 0:246d1b5f11ae 194
sakthipriya 0:246d1b5f11ae 195 BAE_STATUS &= 0xFFFFFFFD; //clear ACS_MAIN_STATUS flag to 1
sakthipriya 0:246d1b5f11ae 196 printf("\n exited acs main %f ",t_exec.read());
sakthipriya 0:246d1b5f11ae 197 t_exec.reset();
sakthipriya 0:246d1b5f11ae 198 }
sakthipriya 0:246d1b5f11ae 199 }
sakthipriya 0:246d1b5f11ae 200
sakthipriya 0:246d1b5f11ae 201 //---------------------------------------------------BEACON--------------------------------------------------------------------------------------------
sakthipriya 0:246d1b5f11ae 202
sakthipriya 0:246d1b5f11ae 203 int beac_flag=0; //To receive telecommand from ground.
sakthipriya 0:246d1b5f11ae 204
sakthipriya 0:246d1b5f11ae 205
sakthipriya 0:246d1b5f11ae 206 /*void T_BEA_TELECOMMAND(void const *args)
sakthipriya 0:246d1b5f11ae 207 {
sakthipriya 0:246d1b5f11ae 208 char c = pc.getc();
sakthipriya 0:246d1b5f11ae 209 if(c=='a')
sakthipriya 0:246d1b5f11ae 210 {
sakthipriya 0:246d1b5f11ae 211 printf("Telecommand detected\n\r");
sakthipriya 0:246d1b5f11ae 212 beac_flag=1;
sakthipriya 0:246d1b5f11ae 213 }
sakthipriya 0:246d1b5f11ae 214 }
sakthipriya 0:246d1b5f11ae 215 */
sakthipriya 0:246d1b5f11ae 216
sakthipriya 0:246d1b5f11ae 217 void T_BEA(void const *args)
sakthipriya 0:246d1b5f11ae 218 {
sakthipriya 0:246d1b5f11ae 219
sakthipriya 0:246d1b5f11ae 220 while(1)
sakthipriya 0:246d1b5f11ae 221 {
sakthipriya 0:246d1b5f11ae 222 Thread::signal_wait(0x3);
sakthipriya 0:246d1b5f11ae 223 printf("\n\rTHIS IS BEACON %f\n\r",t_start.read());
sakthipriya 0:246d1b5f11ae 224 t_exec.start();
sakthipriya 0:246d1b5f11ae 225 FCTN_BEA_MAIN();
sakthipriya 0:246d1b5f11ae 226 if(beac_flag==1)
sakthipriya 0:246d1b5f11ae 227 {
sakthipriya 0:246d1b5f11ae 228 Thread::wait(600000);
sakthipriya 0:246d1b5f11ae 229 beac_flag = 0;
sakthipriya 0:246d1b5f11ae 230 }
sakthipriya 0:246d1b5f11ae 231 printf("The time to execute beacon thread is %f seconds\n\r",t_exec.read());
sakthipriya 0:246d1b5f11ae 232 t_exec.reset();
sakthipriya 0:246d1b5f11ae 233 }
sakthipriya 0:246d1b5f11ae 234 }
sakthipriya 0:246d1b5f11ae 235
sakthipriya 0:246d1b5f11ae 236
sakthipriya 0:246d1b5f11ae 237
sakthipriya 0:246d1b5f11ae 238 extern SensorDataQuantised SensorQuantised;
sakthipriya 0:246d1b5f11ae 239
sakthipriya 0:246d1b5f11ae 240
sakthipriya 0:246d1b5f11ae 241
sakthipriya 0:246d1b5f11ae 242 //---------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:246d1b5f11ae 243 //TASK 5 : i2c data
sakthipriya 0:246d1b5f11ae 244 //---------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:246d1b5f11ae 245
sakthipriya 0:246d1b5f11ae 246
sakthipriya 0:246d1b5f11ae 247 //....................................................................................................................................
sakthipriya 0:246d1b5f11ae 248
sakthipriya 0:246d1b5f11ae 249 void FCTN_I2C_READ(char *data,int length = 1);
sakthipriya 0:246d1b5f11ae 250 void FCTN_I2C_WRITE(char *data,int length = 1);
sakthipriya 0:246d1b5f11ae 251
sakthipriya 0:246d1b5f11ae 252 Timer t; // time taken from isr to reach i2c function
sakthipriya 0:246d1b5f11ae 253 Timer t1; //time taken by read or write function in i2c function
sakthipriya 0:246d1b5f11ae 254 Timer t2; //time taken by read function when first command from master comes
sakthipriya 0:246d1b5f11ae 255 bool write_ack = 1;
sakthipriya 0:246d1b5f11ae 256 bool read_ack = 1;
sakthipriya 0:246d1b5f11ae 257 char short_tc[10];
sakthipriya 0:246d1b5f11ae 258 char long_tc[134];
sakthipriya 0:246d1b5f11ae 259 char mstr_cmd;
sakthipriya 0:246d1b5f11ae 260 bool cmd_flag = 1;
sakthipriya 0:246d1b5f11ae 261 int length;
sakthipriya 0:246d1b5f11ae 262 //char* data;
sakthipriya 0:246d1b5f11ae 263 bool cmd_err = 1;
sakthipriya 0:246d1b5f11ae 264
sakthipriya 0:246d1b5f11ae 265
sakthipriya 0:246d1b5f11ae 266 void T_I2C(void const * args)
sakthipriya 0:246d1b5f11ae 267 {
sakthipriya 0:246d1b5f11ae 268 while(1)
sakthipriya 0:246d1b5f11ae 269 {
sakthipriya 0:246d1b5f11ae 270 Thread::signal_wait(0x1);
sakthipriya 0:246d1b5f11ae 271 // printf("\n\r check2\n");
sakthipriya 0:246d1b5f11ae 272 wait_us(100);
sakthipriya 0:246d1b5f11ae 273
sakthipriya 0:246d1b5f11ae 274 if(cmd_flag == 1)
sakthipriya 0:246d1b5f11ae 275 {
sakthipriya 0:246d1b5f11ae 276 t.stop();
sakthipriya 0:246d1b5f11ae 277 if( slave.receive()==3 || slave.receive()==2) // slave read
sakthipriya 0:246d1b5f11ae 278 {
sakthipriya 0:246d1b5f11ae 279
sakthipriya 0:246d1b5f11ae 280 t1.start();
sakthipriya 0:246d1b5f11ae 281 read_ack=slave.read(&mstr_cmd,1);
sakthipriya 0:246d1b5f11ae 282 t1.stop();
sakthipriya 0:246d1b5f11ae 283 if(read_ack == 0)
sakthipriya 0:246d1b5f11ae 284 printf("\n\r Data received from CDMS is %c \n",mstr_cmd);
sakthipriya 0:246d1b5f11ae 285
sakthipriya 0:246d1b5f11ae 286 switch(mstr_cmd)
sakthipriya 0:246d1b5f11ae 287 {
sakthipriya 0:246d1b5f11ae 288 case 's':
sakthipriya 0:246d1b5f11ae 289 length = 10;
sakthipriya 0:246d1b5f11ae 290 cmd_flag = 0;
sakthipriya 0:246d1b5f11ae 291 break;
sakthipriya 0:246d1b5f11ae 292
sakthipriya 0:246d1b5f11ae 293
sakthipriya 0:246d1b5f11ae 294 case 'l':
sakthipriya 0:246d1b5f11ae 295 length = 134;
sakthipriya 0:246d1b5f11ae 296 cmd_flag = 0;
sakthipriya 0:246d1b5f11ae 297 break;
sakthipriya 0:246d1b5f11ae 298
sakthipriya 0:246d1b5f11ae 299 case 'h':
sakthipriya 0:246d1b5f11ae 300 length = 25;
sakthipriya 0:246d1b5f11ae 301 cmd_flag = 0;
sakthipriya 0:246d1b5f11ae 302 break;
sakthipriya 0:246d1b5f11ae 303
sakthipriya 0:246d1b5f11ae 304 default:
sakthipriya 0:246d1b5f11ae 305 printf("\n\r invalid command \n");
sakthipriya 0:246d1b5f11ae 306 //cmd_err = 0;
sakthipriya 0:246d1b5f11ae 307 cmd_flag = 1;
sakthipriya 0:246d1b5f11ae 308 }
sakthipriya 0:246d1b5f11ae 309
sakthipriya 0:246d1b5f11ae 310
sakthipriya 0:246d1b5f11ae 311 }
sakthipriya 0:246d1b5f11ae 312 }
sakthipriya 0:246d1b5f11ae 313 else if(cmd_flag ==0 )
sakthipriya 0:246d1b5f11ae 314 {
sakthipriya 0:246d1b5f11ae 315 t.stop();
sakthipriya 0:246d1b5f11ae 316 if( slave.receive()==3 || slave.receive()==2) // slave read
sakthipriya 0:246d1b5f11ae 317 {
sakthipriya 0:246d1b5f11ae 318
sakthipriya 0:246d1b5f11ae 319 char* data=(char*)malloc(length*sizeof(char));
sakthipriya 0:246d1b5f11ae 320 FCTN_I2C_READ(data,length);
sakthipriya 0:246d1b5f11ae 321 free(data);
sakthipriya 0:246d1b5f11ae 322 cmd_flag = 1;
sakthipriya 0:246d1b5f11ae 323 }
sakthipriya 0:246d1b5f11ae 324 if( slave.receive() == 1) // slave writes to master
sakthipriya 0:246d1b5f11ae 325 {
sakthipriya 0:246d1b5f11ae 326 FCTN_I2C_WRITE(hk_data,length );
sakthipriya 0:246d1b5f11ae 327 cmd_flag = 1;
sakthipriya 0:246d1b5f11ae 328 }
sakthipriya 0:246d1b5f11ae 329 }
sakthipriya 0:246d1b5f11ae 330 printf("\n \r %d %d\n",t.read_us(),t1.read_us());
sakthipriya 0:246d1b5f11ae 331 t.reset();
sakthipriya 0:246d1b5f11ae 332 t1.reset();
sakthipriya 0:246d1b5f11ae 333
sakthipriya 0:246d1b5f11ae 334
sakthipriya 0:246d1b5f11ae 335 }
sakthipriya 0:246d1b5f11ae 336 }
sakthipriya 0:246d1b5f11ae 337
sakthipriya 0:246d1b5f11ae 338 void FCTN_I2C_READ(char *data, int length )
sakthipriya 0:246d1b5f11ae 339 {
sakthipriya 0:246d1b5f11ae 340 t1.start();
sakthipriya 0:246d1b5f11ae 341 read_ack=slave.read(data,length);
sakthipriya 0:246d1b5f11ae 342 t1.stop();
sakthipriya 0:246d1b5f11ae 343 if(read_ack == 0)
sakthipriya 0:246d1b5f11ae 344 printf("\n\rData received from CDMS is %s \n",data);
sakthipriya 0:246d1b5f11ae 345 else
sakthipriya 0:246d1b5f11ae 346 printf("\n\r data not received \n");
sakthipriya 0:246d1b5f11ae 347 }
sakthipriya 0:246d1b5f11ae 348
sakthipriya 0:246d1b5f11ae 349 void FCTN_I2C_WRITE(char *data,int length)
sakthipriya 0:246d1b5f11ae 350 {
sakthipriya 0:246d1b5f11ae 351 t1.start();
sakthipriya 0:246d1b5f11ae 352 write_ack=slave.write(data,length);
sakthipriya 0:246d1b5f11ae 353 t1.stop();
sakthipriya 0:246d1b5f11ae 354 if(write_ack == 0)
sakthipriya 0:246d1b5f11ae 355 printf("\n\rData sent to CDMS is %s \n",data);
sakthipriya 0:246d1b5f11ae 356 else
sakthipriya 0:246d1b5f11ae 357 printf("\n\r data not sent\n");
sakthipriya 0:246d1b5f11ae 358 }
sakthipriya 0:246d1b5f11ae 359
sakthipriya 0:246d1b5f11ae 360 void FCTN_ISR_I2C()
sakthipriya 0:246d1b5f11ae 361 {
sakthipriya 0:246d1b5f11ae 362 ptr_t_i2c->signal_set(0x1);
sakthipriya 0:246d1b5f11ae 363 t.start();
sakthipriya 0:246d1b5f11ae 364 }
sakthipriya 0:246d1b5f11ae 365
sakthipriya 0:246d1b5f11ae 366 void FCTN_HK_DATA_CATENATE()
sakthipriya 0:246d1b5f11ae 367 {
sakthipriya 0:246d1b5f11ae 368 strcpy(hk_data,"hk_Data");
sakthipriya 0:246d1b5f11ae 369 strcat(hk_data,SensorQuantised.Voltage);
sakthipriya 0:246d1b5f11ae 370 strcat(hk_data,SensorQuantised.Current);
sakthipriya 0:246d1b5f11ae 371 strcat(hk_data,SensorQuantised.PanelTemperature);
sakthipriya 0:246d1b5f11ae 372 strcat(hk_data,SensorQuantised.AngularSpeed);
sakthipriya 0:246d1b5f11ae 373 strcat(hk_data,SensorQuantised.Bnewvalue);
sakthipriya 0:246d1b5f11ae 374 char fdata[5] = {SensorQuantised.BatteryTemperature,SensorQuantised.faultpoll,SensorQuantised.faultir,SensorQuantised.power_mode};
sakthipriya 0:246d1b5f11ae 375 /*strcat(hk_data,sfaultpoll);
sakthipriya 0:246d1b5f11ae 376 strcat(hk_data,sfaultir);
sakthipriya 0:246d1b5f11ae 377 strcat(hk_data,spower_mode);*/
sakthipriya 0:246d1b5f11ae 378 strcat(hk_data,fdata);
sakthipriya 0:246d1b5f11ae 379 printf("\n\r hk data being sent %s ",hk_data);
sakthipriya 0:246d1b5f11ae 380 }
sakthipriya 0:246d1b5f11ae 381
sakthipriya 0:246d1b5f11ae 382
sakthipriya 0:246d1b5f11ae 383 //------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:246d1b5f11ae 384 //TELECOMMAND
sakthipriya 0:246d1b5f11ae 385 //------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:246d1b5f11ae 386 void FUNC_I2C_TC_EXECUTE (char command)
sakthipriya 0:246d1b5f11ae 387 { switch(command)
sakthipriya 0:246d1b5f11ae 388 { case '0' : printf("command 0 executed");
sakthipriya 0:246d1b5f11ae 389 break;
sakthipriya 0:246d1b5f11ae 390 case '1' : printf("command 1 executed");
sakthipriya 0:246d1b5f11ae 391 break;
sakthipriya 0:246d1b5f11ae 392 case '2' : printf("command 2 executed");
sakthipriya 0:246d1b5f11ae 393 break;
sakthipriya 0:246d1b5f11ae 394 case '3' : printf("command 3 executed");
sakthipriya 0:246d1b5f11ae 395 }
sakthipriya 0:246d1b5f11ae 396 }
sakthipriya 0:246d1b5f11ae 397
sakthipriya 0:246d1b5f11ae 398
sakthipriya 0:246d1b5f11ae 399 //------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:246d1b5f11ae 400 //SCHEDULER
sakthipriya 0:246d1b5f11ae 401 //------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:246d1b5f11ae 402 int beacon_sc = 3;
sakthipriya 0:246d1b5f11ae 403 uint8_t schedcount=1;
sakthipriya 0:246d1b5f11ae 404 void T_SC(void const *args)
sakthipriya 0:246d1b5f11ae 405 {
sakthipriya 0:246d1b5f11ae 406
sakthipriya 0:246d1b5f11ae 407
sakthipriya 0:246d1b5f11ae 408 if(schedcount == 4) //to reset the counter
sakthipriya 0:246d1b5f11ae 409 {
sakthipriya 0:246d1b5f11ae 410 schedcount = 1;
sakthipriya 0:246d1b5f11ae 411 }
sakthipriya 0:246d1b5f11ae 412 printf("\n\rThe value of i in scheduler is %d\n\r",schedcount);
sakthipriya 0:246d1b5f11ae 413 if(schedcount%1==0)
sakthipriya 0:246d1b5f11ae 414 {
sakthipriya 0:246d1b5f11ae 415 ptr_t_acs -> signal_set(0x1);
sakthipriya 0:246d1b5f11ae 416 }
sakthipriya 0:246d1b5f11ae 417
sakthipriya 0:246d1b5f11ae 418 if(schedcount%2==0)
sakthipriya 0:246d1b5f11ae 419 {
sakthipriya 0:246d1b5f11ae 420 ptr_t_eps -> signal_set(0x2);
sakthipriya 0:246d1b5f11ae 421
sakthipriya 0:246d1b5f11ae 422 }
sakthipriya 0:246d1b5f11ae 423 if(schedcount%beacon_sc==0)
sakthipriya 0:246d1b5f11ae 424 {
sakthipriya 0:246d1b5f11ae 425 if(beac_flag==0)
sakthipriya 0:246d1b5f11ae 426 {
sakthipriya 0:246d1b5f11ae 427 ptr_t_bea -> signal_set(0x3);
sakthipriya 0:246d1b5f11ae 428 }
sakthipriya 0:246d1b5f11ae 429 }
sakthipriya 0:246d1b5f11ae 430 schedcount++;
sakthipriya 0:246d1b5f11ae 431 }
sakthipriya 0:246d1b5f11ae 432
sakthipriya 0:246d1b5f11ae 433 //--------------------------------------------------------------BAE_INIT------------------------------------------------------------------//
sakthipriya 0:246d1b5f11ae 434
sakthipriya 0:246d1b5f11ae 435 void FCTN_BAE_INIT()
sakthipriya 0:246d1b5f11ae 436 {
sakthipriya 0:246d1b5f11ae 437 BAE_STATUS |= 0x00000001; // set BAE_INIT_STATUS to 1
sakthipriya 0:246d1b5f11ae 438 irpt_4m_cdms.disable_irq(); // disable interrupts
sakthipriya 0:246d1b5f11ae 439 slave.address(0x20); // setting slave address for BAE for I2C communication
sakthipriya 0:246d1b5f11ae 440 RtosTimer t_sc_timer(T_SC,osTimerPeriodic); // Initiating the scheduler thread - starting RTOS Timer
sakthipriya 0:246d1b5f11ae 441 t_sc_timer.start(10000);
sakthipriya 0:246d1b5f11ae 442 printf("\n\rStarted scheduler %f\n\r",t_start.read());
sakthipriya 0:246d1b5f11ae 443 FCTN_EPS_INIT(); // EPS INIT
sakthipriya 0:246d1b5f11ae 444 FCTN_ACS_INIT(); // ACS INIT
sakthipriya 0:246d1b5f11ae 445 FCTN_BEA_INIT(); // Beacon INIT
sakthipriya 0:246d1b5f11ae 446 //read bootup_count from flash
sakthipriya 0:246d1b5f11ae 447 //bootup_count++;
sakthipriya 0:246d1b5f11ae 448 //update bootup_count in flash
sakthipriya 0:246d1b5f11ae 449 irpt_4m_cdms.enable_irq();
sakthipriya 0:246d1b5f11ae 450 BAE_STATUS &= 0xFFFFFFFE; // clear BAE_INIT_STATUS to 0
sakthipriya 0:246d1b5f11ae 451 }
sakthipriya 0:246d1b5f11ae 452
sakthipriya 0:246d1b5f11ae 453
sakthipriya 0:246d1b5f11ae 454 //----------------------------------------------------------------------------BAE_MAIN-------------------------------------------------------------
sakthipriya 0:246d1b5f11ae 455
sakthipriya 0:246d1b5f11ae 456 int main()
sakthipriya 0:246d1b5f11ae 457 {
sakthipriya 0:246d1b5f11ae 458 t_start.start();
sakthipriya 0:246d1b5f11ae 459 printf("\n\rIITMSAT BAE Activated \n");
sakthipriya 0:246d1b5f11ae 460
sakthipriya 0:246d1b5f11ae 461 //INITIALISING THREADS
sakthipriya 0:246d1b5f11ae 462 ptr_t_eps = new Thread(T_EPS);
sakthipriya 0:246d1b5f11ae 463 ptr_t_acs = new Thread(T_ACS);
sakthipriya 0:246d1b5f11ae 464 ptr_t_bea = new Thread(T_BEA);
sakthipriya 0:246d1b5f11ae 465 ptr_t_i2c = new Thread(T_I2C);
sakthipriya 0:246d1b5f11ae 466
sakthipriya 0:246d1b5f11ae 467 //INITIALISING INTERRUPTS
sakthipriya 0:246d1b5f11ae 468 //interrupt_fault(); //*to be included-function called when a fault interrupt is detected
sakthipriya 0:246d1b5f11ae 469 irpt_4m_cdms.fall(&FCTN_ISR_I2C); //interrupt received from CDMS
sakthipriya 0:246d1b5f11ae 470
sakthipriya 0:246d1b5f11ae 471 //Setting priority to threads
sakthipriya 0:246d1b5f11ae 472 ptr_t_acs->set_priority(osPriorityAboveNormal);
sakthipriya 0:246d1b5f11ae 473 ptr_t_eps->set_priority(osPriorityAboveNormal);
sakthipriya 0:246d1b5f11ae 474 ptr_t_bea->set_priority(osPriorityAboveNormal);
sakthipriya 0:246d1b5f11ae 475 ptr_t_i2c->set_priority(osPriorityHigh);
sakthipriya 0:246d1b5f11ae 476
sakthipriya 0:246d1b5f11ae 477 //----------------------------------------------------------------------------------------------
sakthipriya 0:246d1b5f11ae 478 printf("\n\r T_ACS priority is %d",ptr_t_acs->get_priority());
sakthipriya 0:246d1b5f11ae 479 printf("\n\r T_EPS priority is %d",ptr_t_eps->get_priority());
sakthipriya 0:246d1b5f11ae 480 printf("\n\r T_BEA priority is %d",ptr_t_bea->get_priority());
sakthipriya 0:246d1b5f11ae 481 printf("\n\r T_I2C priority is %d",ptr_t_i2c->get_priority());
sakthipriya 0:246d1b5f11ae 482 //----------------------------------------------------------------------------------------------
sakthipriya 0:246d1b5f11ae 483 FCTN_BAE_INIT();
sakthipriya 0:246d1b5f11ae 484 while(1) //required to prevent main from terminating
sakthipriya 0:246d1b5f11ae 485 {
sakthipriya 0:246d1b5f11ae 486 ;
sakthipriya 0:246d1b5f11ae 487 }
sakthipriya 0:246d1b5f11ae 488
sakthipriya 0:246d1b5f11ae 489 }