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