mag n gyro included

Dependencies:   mbed-rtos mbed

Fork of BAE_vr2_gingerbread2 by Seeker of Truth ,

Committer:
sakthipriya
Date:
Wed Dec 17 10:15:38 2014 +0000
Revision:
4:12fe853d8bcf
Parent:
2:7aede71f4c22
mag n gyr data included

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sakthipriya 0:e9c32e1df869 1 #include "mbed.h"
sakthipriya 0:e9c32e1df869 2 #include "rtos.h"
sakthipriya 0:e9c32e1df869 3 #include "HK.h"
sakthipriya 0:e9c32e1df869 4 #include "slave.h"
sakthipriya 0:e9c32e1df869 5 #include "beacon.h"
sakthipriya 0:e9c32e1df869 6 #include "ACS.h"
sakthipriya 0:e9c32e1df869 7 #include "fault.h"
sakthipriya 0:e9c32e1df869 8 #include "slave.h"
sakthipriya 4:12fe853d8bcf 9 #include "pin_config.h"
sakthipriya 0:e9c32e1df869 10
sakthipriya 0:e9c32e1df869 11 Serial pc(USBTX, USBRX);
sakthipriya 0:e9c32e1df869 12
sakthipriya 0:e9c32e1df869 13 InterruptIn interrupt(D9);
sakthipriya 0:e9c32e1df869 14 InterruptIn master_reset(D11);
sakthipriya 0:e9c32e1df869 15
sakthipriya 0:e9c32e1df869 16
sakthipriya 0:e9c32e1df869 17 Timer t; //To know the time of execution each thread
sakthipriya 0:e9c32e1df869 18 Timer t1;
sakthipriya 0:e9c32e1df869 19 //To know the time of entering of each thread
sakthipriya 0:e9c32e1df869 20
sakthipriya 0:e9c32e1df869 21 Thread *ptr_t_hk_acq;
sakthipriya 0:e9c32e1df869 22 Thread *ptr_t_acs;
sakthipriya 0:e9c32e1df869 23 //Thread *ptr_t_acs_write2flash;
sakthipriya 0:e9c32e1df869 24 Thread *ptr_t_bea;
sakthipriya 0:e9c32e1df869 25 //Thread *ptr_t_bea_telecommand;
sakthipriya 0:e9c32e1df869 26 //Thread *ptr_t_fault;
sakthipriya 0:e9c32e1df869 27 Thread *ptr_t_i2c;
sakthipriya 2:7aede71f4c22 28 Thread *ptr_t_wdt;
sakthipriya 0:e9c32e1df869 29
sakthipriya 0:e9c32e1df869 30
sakthipriya 0:e9c32e1df869 31
sakthipriya 0:e9c32e1df869 32 void write_to_master(char); //function to write data to master
sakthipriya 0:e9c32e1df869 33
sakthipriya 0:e9c32e1df869 34 I2CSlave slave(D14,D15); //configuring pins p27, p28 as I2Cslave
sakthipriya 0:e9c32e1df869 35
sakthipriya 0:e9c32e1df869 36
sakthipriya 0:e9c32e1df869 37 DigitalOut data_ready(D10);
sakthipriya 0:e9c32e1df869 38 int i2c_status=0; //read/write mode for i2c 0 : write2slave, 1 : write2master
sakthipriya 0:e9c32e1df869 39 int reset=0;
sakthipriya 0:e9c32e1df869 40 int temp;
sakthipriya 0:e9c32e1df869 41
sakthipriya 0:e9c32e1df869 42 typedef struct
sakthipriya 0:e9c32e1df869 43 {
sakthipriya 1:bd715ccef1bb 44 char data[25]; // To avoid dynamic memory allocation
sakthipriya 0:e9c32e1df869 45 int length;
sakthipriya 0:e9c32e1df869 46 }i2c_data;
sakthipriya 0:e9c32e1df869 47
sakthipriya 0:e9c32e1df869 48
sakthipriya 0:e9c32e1df869 49
sakthipriya 0:e9c32e1df869 50
sakthipriya 0:e9c32e1df869 51
sakthipriya 0:e9c32e1df869 52
sakthipriya 0:e9c32e1df869 53 Mail<i2c_data,16> i2c_data_receive;
sakthipriya 0:e9c32e1df869 54 Mail<i2c_data,16> i2c_data_send;
sakthipriya 0:e9c32e1df869 55
sakthipriya 0:e9c32e1df869 56 //--------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:e9c32e1df869 57 //TASK 2 : HK
sakthipriya 0:e9c32e1df869 58 //--------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:e9c32e1df869 59
sakthipriya 1:bd715ccef1bb 60 char hk_data[25];
sakthipriya 4:12fe853d8bcf 61 extern SensorData Sensor;
sakthipriya 0:e9c32e1df869 62 extern SensorDataQuantised SensorQuantised;
sakthipriya 0:e9c32e1df869 63 void t_hk_acq(void const *args)
sakthipriya 0:e9c32e1df869 64 {
sakthipriya 0:e9c32e1df869 65
sakthipriya 0:e9c32e1df869 66 while(1)
sakthipriya 0:e9c32e1df869 67 {
sakthipriya 0:e9c32e1df869 68 Thread::signal_wait(0x2);
sakthipriya 0:e9c32e1df869 69 SensorQuantised.power_mode='0';
sakthipriya 0:e9c32e1df869 70 printf("\nTHIS IS HK %f\n",t1.read());
sakthipriya 0:e9c32e1df869 71 t.start();
sakthipriya 0:e9c32e1df869 72 FAULTS();
sakthipriya 0:e9c32e1df869 73 POWER(SensorQuantised.power_mode); //The power mode algorithm is yet to be obtained
sakthipriya 0:e9c32e1df869 74 FUNC_HK_MAIN(); //Collecting HK data
sakthipriya 0:e9c32e1df869 75 //thread_2.signal_set(0x4);
sakthipriya 1:bd715ccef1bb 76 //FUNC_I2C_SLAVE_MAIN(25);
sakthipriya 0:e9c32e1df869 77 ir2master();
sakthipriya 0:e9c32e1df869 78 t.stop();
sakthipriya 0:e9c32e1df869 79 printf("The time to execute hk_acq is %f seconds\n",t.read());
sakthipriya 0:e9c32e1df869 80 t.reset();
sakthipriya 0:e9c32e1df869 81 }
sakthipriya 0:e9c32e1df869 82 }
sakthipriya 0:e9c32e1df869 83
sakthipriya 0:e9c32e1df869 84 //---------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:e9c32e1df869 85 //TASK 1 : ACS
sakthipriya 0:e9c32e1df869 86 //---------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:e9c32e1df869 87
sakthipriya 0:e9c32e1df869 88 int acs_pflag = 1;
sakthipriya 0:e9c32e1df869 89 void t_acs(void const *args)
sakthipriya 0:e9c32e1df869 90 {
sakthipriya 0:e9c32e1df869 91 float *mag_field;
sakthipriya 0:e9c32e1df869 92 float *omega;
sakthipriya 0:e9c32e1df869 93 float *moment;
sakthipriya 0:e9c32e1df869 94 while(1)
sakthipriya 0:e9c32e1df869 95 {
sakthipriya 0:e9c32e1df869 96 Thread::signal_wait(0x1);
sakthipriya 0:e9c32e1df869 97 printf("\nTHIS IS ACS %f\n",t1.read());
sakthipriya 0:e9c32e1df869 98 t.start();
sakthipriya 0:e9c32e1df869 99 mag_field= FUNC_ACS_MAG_EXEC(); //actual execution
sakthipriya 0:e9c32e1df869 100 omega = FUNC_ACS_EXEC_GYR();
sakthipriya 4:12fe853d8bcf 101 Sensor.AngularSpeed[0]= omega[0];
sakthipriya 4:12fe853d8bcf 102 Sensor.AngularSpeed[1]= omega[1];
sakthipriya 4:12fe853d8bcf 103 Sensor.AngularSpeed[2]= omega[2];
sakthipriya 0:e9c32e1df869 104
sakthipriya 4:12fe853d8bcf 105 Sensor.Bnewvalue[0] = mag_field[0];
sakthipriya 4:12fe853d8bcf 106 Sensor.Bnewvalue[1] = mag_field[1];
sakthipriya 4:12fe853d8bcf 107 Sensor.Bnewvalue[2] = mag_field[2];
sakthipriya 0:e9c32e1df869 108
sakthipriya 0:e9c32e1df869 109 if(acs_pflag == 1)
sakthipriya 0:e9c32e1df869 110 {
sakthipriya 0:e9c32e1df869 111 moment = FUNC_ACS_CNTRLALGO(mag_field,omega);
sakthipriya 0:e9c32e1df869 112 FUNC_ACS_GENPWM(moment);
sakthipriya 0:e9c32e1df869 113 }
sakthipriya 0:e9c32e1df869 114
sakthipriya 0:e9c32e1df869 115 t.reset();
sakthipriya 0:e9c32e1df869 116 }
sakthipriya 0:e9c32e1df869 117 }
sakthipriya 0:e9c32e1df869 118 /*
sakthipriya 0:e9c32e1df869 119 void t_acs_write2flash(void const *args)
sakthipriya 0:e9c32e1df869 120 {
sakthipriya 0:e9c32e1df869 121 while(1)
sakthipriya 0:e9c32e1df869 122 {
sakthipriya 0:e9c32e1df869 123 //printf("Writing in the flash\n");
sakthipriya 0:e9c32e1df869 124 osEvent evt = q_acs.get();
sakthipriya 0:e9c32e1df869 125 if(evt.status == osEventMail)
sakthipriya 0:e9c32e1df869 126 {
sakthipriya 0:e9c32e1df869 127 sensor_data *ptr = (sensor_data*)evt.value.p;
sakthipriya 0:e9c32e1df869 128 func_acs_write2flash(ptr);
sakthipriya 0:e9c32e1df869 129 q_acs.free(ptr);
sakthipriya 0:e9c32e1df869 130 }
sakthipriya 0:e9c32e1df869 131 printf("Writing acs data in the flash\n");
sakthipriya 0:e9c32e1df869 132 }
sakthipriya 0:e9c32e1df869 133 }
sakthipriya 0:e9c32e1df869 134
sakthipriya 0:e9c32e1df869 135 */
sakthipriya 0:e9c32e1df869 136 //---------------------------------------------------BEACON--------------------------------------------------------------------------------------------
sakthipriya 0:e9c32e1df869 137
sakthipriya 0:e9c32e1df869 138 int beac_flag=0; //To receive telecommand from ground.
sakthipriya 0:e9c32e1df869 139
sakthipriya 0:e9c32e1df869 140
sakthipriya 0:e9c32e1df869 141 /*void t_bea_telecommand(void const *args)
sakthipriya 0:e9c32e1df869 142 {
sakthipriya 0:e9c32e1df869 143 char c = pc.getc();
sakthipriya 0:e9c32e1df869 144 if(c=='a')
sakthipriya 0:e9c32e1df869 145 {
sakthipriya 0:e9c32e1df869 146 printf("Telecommand detected\n");
sakthipriya 0:e9c32e1df869 147 beac_flag=1;
sakthipriya 0:e9c32e1df869 148 }
sakthipriya 0:e9c32e1df869 149 }
sakthipriya 0:e9c32e1df869 150 */
sakthipriya 0:e9c32e1df869 151
sakthipriya 0:e9c32e1df869 152 void t_bea(void const *args)
sakthipriya 0:e9c32e1df869 153 {
sakthipriya 0:e9c32e1df869 154
sakthipriya 0:e9c32e1df869 155 while(1)
sakthipriya 0:e9c32e1df869 156 {
sakthipriya 0:e9c32e1df869 157 Thread::signal_wait(0x3);
sakthipriya 0:e9c32e1df869 158 printf("\nTHIS IS BEACON %f\n",t1.read());
sakthipriya 0:e9c32e1df869 159 t.start();
sakthipriya 0:e9c32e1df869 160
sakthipriya 0:e9c32e1df869 161
sakthipriya 0:e9c32e1df869 162
sakthipriya 0:e9c32e1df869 163 FUNC_BEA();
sakthipriya 0:e9c32e1df869 164
sakthipriya 0:e9c32e1df869 165
sakthipriya 0:e9c32e1df869 166 if(beac_flag==1)
sakthipriya 0:e9c32e1df869 167 {
sakthipriya 0:e9c32e1df869 168 Thread::wait(600000);
sakthipriya 0:e9c32e1df869 169 beac_flag = 0;
sakthipriya 0:e9c32e1df869 170 }
sakthipriya 0:e9c32e1df869 171
sakthipriya 0:e9c32e1df869 172 printf("The time to execute beacon thread is %f seconds\n",t.read());
sakthipriya 0:e9c32e1df869 173 t.reset();
sakthipriya 0:e9c32e1df869 174 }
sakthipriya 0:e9c32e1df869 175 }
sakthipriya 0:e9c32e1df869 176
sakthipriya 0:e9c32e1df869 177 //---------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:e9c32e1df869 178 //TASK 4 : FAULT MANAGEMENT
sakthipriya 0:e9c32e1df869 179 //---------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:e9c32e1df869 180 //Dummy fault rectifier functions
sakthipriya 0:e9c32e1df869 181
sakthipriya 0:e9c32e1df869 182 /*Mail<int,16> faults;
sakthipriya 0:e9c32e1df869 183
sakthipriya 0:e9c32e1df869 184 void FUNC_FAULT_FUNCT1()
sakthipriya 0:e9c32e1df869 185 {
sakthipriya 0:e9c32e1df869 186 printf("\nFault 1 detected... \n");
sakthipriya 0:e9c32e1df869 187 }
sakthipriya 0:e9c32e1df869 188
sakthipriya 0:e9c32e1df869 189 void FUNC_FAULT_FUNCT2()
sakthipriya 0:e9c32e1df869 190 {
sakthipriya 0:e9c32e1df869 191 printf("\nFault 2 detected...\n");
sakthipriya 0:e9c32e1df869 192 }
sakthipriya 0:e9c32e1df869 193
sakthipriya 0:e9c32e1df869 194 void T_FAULT(void const *args)
sakthipriya 0:e9c32e1df869 195 {
sakthipriya 0:e9c32e1df869 196 while(1)
sakthipriya 0:e9c32e1df869 197 {
sakthipriya 0:e9c32e1df869 198 osEvent evt = faults.get();
sakthipriya 0:e9c32e1df869 199 if(evt.status==osEventMail)
sakthipriya 0:e9c32e1df869 200 {
sakthipriya 0:e9c32e1df869 201 int *fault_id= (int *)evt.value.p;
sakthipriya 0:e9c32e1df869 202 switch(*fault_id)
sakthipriya 0:e9c32e1df869 203 {
sakthipriya 0:e9c32e1df869 204 case 1: FUNC_FAULT_FUNCT1();
sakthipriya 0:e9c32e1df869 205 break;
sakthipriya 0:e9c32e1df869 206 case 2: FUNC_FAULT_FUNCT2();
sakthipriya 0:e9c32e1df869 207 break;
sakthipriya 0:e9c32e1df869 208 }
sakthipriya 0:e9c32e1df869 209 faults.free(fault_id);
sakthipriya 0:e9c32e1df869 210 }
sakthipriya 0:e9c32e1df869 211 }
sakthipriya 0:e9c32e1df869 212 }*/
sakthipriya 0:e9c32e1df869 213
sakthipriya 0:e9c32e1df869 214 extern SensorDataQuantised SensorQuantised;
sakthipriya 0:e9c32e1df869 215
sakthipriya 0:e9c32e1df869 216
sakthipriya 0:e9c32e1df869 217 /*void T_FAULT(void const *args)
sakthipriya 0:e9c32e1df869 218 {
sakthipriya 0:e9c32e1df869 219 Sensor.power_mode='0';
sakthipriya 0:e9c32e1df869 220 while(1)
sakthipriya 0:e9c32e1df869 221 {
sakthipriya 0:e9c32e1df869 222 Thread :: signal_wait(0x2);
sakthipriya 0:e9c32e1df869 223 FAULTS();
sakthipriya 0:e9c32e1df869 224 POWER(Sensor.power_mode);
sakthipriya 0:e9c32e1df869 225 //Sensor.power_mode++; //testing ... should be removed
sakthipriya 0:e9c32e1df869 226 }
sakthipriya 0:e9c32e1df869 227 }
sakthipriya 0:e9c32e1df869 228 */
sakthipriya 2:7aede71f4c22 229 /*-------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 2:7aede71f4c22 230 -------------------------------------------------------WATCHDOG----------------------------------------------------------------------------*/
sakthipriya 2:7aede71f4c22 231 DigitalOut trigger(PIN63); // has to be changed
sakthipriya 2:7aede71f4c22 232 void T_WDT(void const * args)
sakthipriya 2:7aede71f4c22 233 {
sakthipriya 2:7aede71f4c22 234 trigger = 1;
sakthipriya 2:7aede71f4c22 235 while(true)
sakthipriya 2:7aede71f4c22 236 {
sakthipriya 2:7aede71f4c22 237 Thread::signal_wait(0x5); //signal set from scheduler or sthing. r RTOS timer nce the timing is finalized
sakthipriya 2:7aede71f4c22 238 printf("\nEntered WD\n");
sakthipriya 2:7aede71f4c22 239 trigger = !trigger;
sakthipriya 2:7aede71f4c22 240 }
sakthipriya 2:7aede71f4c22 241 }
sakthipriya 2:7aede71f4c22 242
sakthipriya 0:e9c32e1df869 243 //---------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:e9c32e1df869 244 //TASK 5 : i2c data
sakthipriya 0:e9c32e1df869 245 //---------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:e9c32e1df869 246
sakthipriya 0:e9c32e1df869 247
sakthipriya 0:e9c32e1df869 248 void C_FUNC_INT()
sakthipriya 0:e9c32e1df869 249 {
sakthipriya 0:e9c32e1df869 250 FUNC_INT();
sakthipriya 0:e9c32e1df869 251 ptr_t_i2c->signal_set(0x4);
sakthipriya 0:e9c32e1df869 252
sakthipriya 0:e9c32e1df869 253 }
sakthipriya 0:e9c32e1df869 254
sakthipriya 0:e9c32e1df869 255 void C_FUNC_RESET()
sakthipriya 0:e9c32e1df869 256 {
sakthipriya 0:e9c32e1df869 257 FUNC_RESET();
sakthipriya 0:e9c32e1df869 258 }
sakthipriya 0:e9c32e1df869 259
sakthipriya 0:e9c32e1df869 260
sakthipriya 0:e9c32e1df869 261 void C_T_I2C_BAE(void const * args)
sakthipriya 0:e9c32e1df869 262 {
sakthipriya 0:e9c32e1df869 263 //char data_send,data_receive;
sakthipriya 0:e9c32e1df869 264 while(1)
sakthipriya 0:e9c32e1df869 265 {
sakthipriya 0:e9c32e1df869 266 Thread::signal_wait(0x4);
sakthipriya 0:e9c32e1df869 267 T_I2C_BAE();
sakthipriya 0:e9c32e1df869 268 //i2c_status = temp;
sakthipriya 0:e9c32e1df869 269 //wait(0.5);
sakthipriya 0:e9c32e1df869 270 /*printf("\n entered thread\n\r");
sakthipriya 0:e9c32e1df869 271 if(i2c_status == 0 && reset !=1)
sakthipriya 0:e9c32e1df869 272 {
sakthipriya 0:e9c32e1df869 273
sakthipriya 0:e9c32e1df869 274 FUNC_I2C_WRITE2CDMS(&data_receive);
sakthipriya 0:e9c32e1df869 275 i2c_data * i2c_data_r = i2c_data_receive.alloc();
sakthipriya 0:e9c32e1df869 276 i2c_data_r->data = data_receive;
sakthipriya 0:e9c32e1df869 277 i2c_data_r->length = 1;
sakthipriya 0:e9c32e1df869 278 i2c_data_receive.put(i2c_data_r);
sakthipriya 0:e9c32e1df869 279 printf("\n Data received from CDMS is %c\n\r",data_receive);
sakthipriya 0:e9c32e1df869 280 i2c_data_receive.free(i2c_data_r); // This has to be done from a differen thread
sakthipriya 0:e9c32e1df869 281
sakthipriya 0:e9c32e1df869 282 }
sakthipriya 0:e9c32e1df869 283 else if(i2c_status ==1 && reset !=1)
sakthipriya 0:e9c32e1df869 284 {
sakthipriya 0:e9c32e1df869 285 osEvent evt = i2c_data_send.get();
sakthipriya 0:e9c32e1df869 286 if (evt.status == osEventMail)
sakthipriya 0:e9c32e1df869 287 {
sakthipriya 0:e9c32e1df869 288 i2c_data *i2c_data_s = (i2c_data*)evt.value.p;
sakthipriya 0:e9c32e1df869 289 data_send = i2c_data_s -> data;
sakthipriya 0:e9c32e1df869 290 FUNC_I2C_WRITE2CDMS(&data_send);
sakthipriya 0:e9c32e1df869 291 printf("\nData sent to CDMS is %c\n\r",data_send);
sakthipriya 0:e9c32e1df869 292 i2c_data_send.free(i2c_data_s);
sakthipriya 0:e9c32e1df869 293 i2c_status = 0;
sakthipriya 0:e9c32e1df869 294 //temp = i2c_status;
sakthipriya 0:e9c32e1df869 295 }
sakthipriya 0:e9c32e1df869 296 }
sakthipriya 0:e9c32e1df869 297 */
sakthipriya 0:e9c32e1df869 298 }
sakthipriya 0:e9c32e1df869 299 }
sakthipriya 0:e9c32e1df869 300
sakthipriya 0:e9c32e1df869 301
sakthipriya 0:e9c32e1df869 302
sakthipriya 0:e9c32e1df869 303
sakthipriya 0:e9c32e1df869 304
sakthipriya 0:e9c32e1df869 305 void FUNC_I2C_WRITE2CDMS(char *data, int length=1)
sakthipriya 0:e9c32e1df869 306 {
sakthipriya 0:e9c32e1df869 307 int slave_status = 1;
sakthipriya 0:e9c32e1df869 308
sakthipriya 0:e9c32e1df869 309 while(slave_status)
sakthipriya 0:e9c32e1df869 310 {
sakthipriya 0:e9c32e1df869 311 slave.address(0x20);
sakthipriya 0:e9c32e1df869 312 if(slave.receive()==1)
sakthipriya 0:e9c32e1df869 313 {
sakthipriya 0:e9c32e1df869 314 slave_status=slave.write(data,length);
sakthipriya 0:e9c32e1df869 315
sakthipriya 0:e9c32e1df869 316
sakthipriya 0:e9c32e1df869 317 }
sakthipriya 0:e9c32e1df869 318 else if(slave.receive()==3 || slave.receive()==2)
sakthipriya 0:e9c32e1df869 319 {
sakthipriya 0:e9c32e1df869 320 slave_status=slave.read(data,length);
sakthipriya 0:e9c32e1df869 321 }
sakthipriya 0:e9c32e1df869 322
sakthipriya 0:e9c32e1df869 323 }
sakthipriya 2:7aede71f4c22 324
sakthipriya 0:e9c32e1df869 325 printf("\ndone\n\r");
sakthipriya 0:e9c32e1df869 326
sakthipriya 0:e9c32e1df869 327 }
sakthipriya 1:bd715ccef1bb 328 char data_send[25],data_receive[25];
sakthipriya 0:e9c32e1df869 329 void T_I2C_BAE()
sakthipriya 0:e9c32e1df869 330 {
sakthipriya 0:e9c32e1df869 331 //char data_send,data_receive;
sakthipriya 0:e9c32e1df869 332 //while(1)
sakthipriya 0:e9c32e1df869 333 //{
sakthipriya 0:e9c32e1df869 334 // Thread::signal_wait(0x1);
sakthipriya 0:e9c32e1df869 335 //i2c_status = temp;
sakthipriya 0:e9c32e1df869 336 //wait(0.5);
sakthipriya 0:e9c32e1df869 337 printf("\n entered thread %d\n\r",i2c_status);
sakthipriya 0:e9c32e1df869 338 if(i2c_status == 0 && reset !=1)
sakthipriya 0:e9c32e1df869 339 {
sakthipriya 0:e9c32e1df869 340
sakthipriya 1:bd715ccef1bb 341 FUNC_I2C_WRITE2CDMS(data_receive,25);
sakthipriya 0:e9c32e1df869 342 i2c_data * i2c_data_r = i2c_data_receive.alloc();
sakthipriya 0:e9c32e1df869 343 strcpy(i2c_data_r->data,data_receive);
sakthipriya 1:bd715ccef1bb 344 i2c_data_r->length = 25;
sakthipriya 0:e9c32e1df869 345 i2c_data_receive.put(i2c_data_r);
sakthipriya 0:e9c32e1df869 346 printf("\n Data received from CDMS is %s \n\r",data_receive);
sakthipriya 0:e9c32e1df869 347 i2c_data_receive.free(i2c_data_r); // This has to be done from a differen thread
sakthipriya 0:e9c32e1df869 348
sakthipriya 0:e9c32e1df869 349 }
sakthipriya 0:e9c32e1df869 350 else if(i2c_status ==1 && reset !=1)
sakthipriya 0:e9c32e1df869 351 {
sakthipriya 0:e9c32e1df869 352 osEvent evt = i2c_data_send.get();
sakthipriya 0:e9c32e1df869 353 if (evt.status == osEventMail)
sakthipriya 0:e9c32e1df869 354 {
sakthipriya 0:e9c32e1df869 355 i2c_data *i2c_data_s = (i2c_data*)evt.value.p;
sakthipriya 0:e9c32e1df869 356 strcpy(data_send,i2c_data_s -> data);
sakthipriya 1:bd715ccef1bb 357 FUNC_I2C_WRITE2CDMS(data_send,25);
sakthipriya 0:e9c32e1df869 358 printf("\nData sent to CDMS is %s\n\r",data_send);
sakthipriya 0:e9c32e1df869 359 i2c_data_send.free(i2c_data_s);
sakthipriya 0:e9c32e1df869 360 i2c_status = 0;
sakthipriya 0:e9c32e1df869 361 //temp = i2c_status;
sakthipriya 0:e9c32e1df869 362
sakthipriya 0:e9c32e1df869 363 }
sakthipriya 0:e9c32e1df869 364 }
sakthipriya 0:e9c32e1df869 365
sakthipriya 0:e9c32e1df869 366 //}
sakthipriya 0:e9c32e1df869 367 }
sakthipriya 0:e9c32e1df869 368
sakthipriya 0:e9c32e1df869 369
sakthipriya 0:e9c32e1df869 370
sakthipriya 0:e9c32e1df869 371 void FUNC_INT()
sakthipriya 0:e9c32e1df869 372 {
sakthipriya 0:e9c32e1df869 373 reset = 0;
sakthipriya 0:e9c32e1df869 374
sakthipriya 0:e9c32e1df869 375
sakthipriya 0:e9c32e1df869 376 }
sakthipriya 0:e9c32e1df869 377
sakthipriya 0:e9c32e1df869 378 void FUNC_RESET()
sakthipriya 0:e9c32e1df869 379 {
sakthipriya 0:e9c32e1df869 380 reset = 1;
sakthipriya 0:e9c32e1df869 381 }
sakthipriya 0:e9c32e1df869 382
sakthipriya 0:e9c32e1df869 383
sakthipriya 0:e9c32e1df869 384
sakthipriya 0:e9c32e1df869 385 void ir2master()
sakthipriya 0:e9c32e1df869 386 {
sakthipriya 0:e9c32e1df869 387
sakthipriya 1:bd715ccef1bb 388 //char data[25];
sakthipriya 0:e9c32e1df869 389 //strcpy(data,"sakthi ");
sakthipriya 0:e9c32e1df869 390 //strcat(data,"priya");
sakthipriya 0:e9c32e1df869 391 strcpy(hk_data,SensorQuantised.Voltage);
sakthipriya 0:e9c32e1df869 392 strcat(hk_data,SensorQuantised.Current);
sakthipriya 0:e9c32e1df869 393 strcat(hk_data,SensorQuantised.Temperature);
sakthipriya 0:e9c32e1df869 394 strcat(hk_data,SensorQuantised.PanelTemperature);
sakthipriya 0:e9c32e1df869 395 strcat(hk_data,SensorQuantised.AngularSpeed);
sakthipriya 0:e9c32e1df869 396 strcat(hk_data,SensorQuantised.Bnewvalue);
sakthipriya 0:e9c32e1df869 397 char fdata[5] = {SensorQuantised.BatteryTemperature,SensorQuantised.faultpoll,SensorQuantised.faultir,SensorQuantised.power_mode};
sakthipriya 0:e9c32e1df869 398
sakthipriya 0:e9c32e1df869 399 /*strcat(hk_data,sfaultpoll);
sakthipriya 0:e9c32e1df869 400 strcat(hk_data,sfaultir);
sakthipriya 0:e9c32e1df869 401 strcat(hk_data,spower_mode);*/
sakthipriya 0:e9c32e1df869 402 strcat(hk_data,fdata);
sakthipriya 0:e9c32e1df869 403 printf("\nhk data : %s\n",hk_data);
sakthipriya 0:e9c32e1df869 404 data_ready=0;
sakthipriya 0:e9c32e1df869 405 //data = pcslave.getc();
sakthipriya 0:e9c32e1df869 406 reset =0;
sakthipriya 0:e9c32e1df869 407 i2c_status=1;
sakthipriya 0:e9c32e1df869 408 i2c_data * i2c_data_s = i2c_data_send.alloc();
sakthipriya 0:e9c32e1df869 409 strcpy(i2c_data_s->data,hk_data);
sakthipriya 1:bd715ccef1bb 410 i2c_data_s->length = 25;
sakthipriya 0:e9c32e1df869 411 i2c_data_send.put(i2c_data_s);
sakthipriya 0:e9c32e1df869 412 data_ready=1;
sakthipriya 0:e9c32e1df869 413 //temp = i2c_status;
sakthipriya 0:e9c32e1df869 414 }
sakthipriya 0:e9c32e1df869 415
sakthipriya 0:e9c32e1df869 416
sakthipriya 0:e9c32e1df869 417
sakthipriya 0:e9c32e1df869 418
sakthipriya 0:e9c32e1df869 419
sakthipriya 0:e9c32e1df869 420
sakthipriya 0:e9c32e1df869 421
sakthipriya 0:e9c32e1df869 422
sakthipriya 0:e9c32e1df869 423
sakthipriya 0:e9c32e1df869 424
sakthipriya 0:e9c32e1df869 425
sakthipriya 0:e9c32e1df869 426
sakthipriya 0:e9c32e1df869 427 //------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:e9c32e1df869 428 //SCHEDULER
sakthipriya 0:e9c32e1df869 429 //------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:e9c32e1df869 430 int beacon_sc = 3;
sakthipriya 0:e9c32e1df869 431 uint16_t schedcount=1;
sakthipriya 0:e9c32e1df869 432 void t_sc(void const *args)
sakthipriya 0:e9c32e1df869 433 {
sakthipriya 0:e9c32e1df869 434
sakthipriya 0:e9c32e1df869 435 printf("The value of i in scheduler is %d\n",schedcount);
sakthipriya 0:e9c32e1df869 436 if(schedcount == 65532) //to reset the counter
sakthipriya 0:e9c32e1df869 437 {
sakthipriya 0:e9c32e1df869 438 schedcount = 0;
sakthipriya 0:e9c32e1df869 439 }
sakthipriya 0:e9c32e1df869 440
sakthipriya 0:e9c32e1df869 441 if(schedcount%1==0)
sakthipriya 0:e9c32e1df869 442 {
sakthipriya 0:e9c32e1df869 443 ptr_t_acs -> signal_set(0x1);
sakthipriya 2:7aede71f4c22 444 ptr_t_wdt -> signal_set(0x5);
sakthipriya 0:e9c32e1df869 445 }
sakthipriya 0:e9c32e1df869 446 if(schedcount%2==0)
sakthipriya 0:e9c32e1df869 447 {
sakthipriya 0:e9c32e1df869 448 //ptr_t_fault -> signal_set(0x2);
sakthipriya 0:e9c32e1df869 449 ptr_t_hk_acq -> signal_set(0x2);
sakthipriya 0:e9c32e1df869 450
sakthipriya 0:e9c32e1df869 451 }
sakthipriya 0:e9c32e1df869 452 if(schedcount%beacon_sc==0)
sakthipriya 0:e9c32e1df869 453 {
sakthipriya 0:e9c32e1df869 454 if(beac_flag==0)
sakthipriya 0:e9c32e1df869 455 {
sakthipriya 0:e9c32e1df869 456
sakthipriya 1:bd715ccef1bb 457 //ptr_t_bea -> signal_set(0x3);
sakthipriya 0:e9c32e1df869 458 }
sakthipriya 0:e9c32e1df869 459 }
sakthipriya 0:e9c32e1df869 460 schedcount++;
sakthipriya 0:e9c32e1df869 461 }
sakthipriya 0:e9c32e1df869 462
sakthipriya 0:e9c32e1df869 463 //---------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:e9c32e1df869 464
sakthipriya 0:e9c32e1df869 465 int main()
sakthipriya 0:e9c32e1df869 466 {
sakthipriya 0:e9c32e1df869 467 t1.start();
sakthipriya 0:e9c32e1df869 468
sakthipriya 0:e9c32e1df869 469 ptr_t_hk_acq = new Thread(t_hk_acq);
sakthipriya 0:e9c32e1df869 470 ptr_t_acs = new Thread(t_acs);
sakthipriya 0:e9c32e1df869 471 //ptr_t_acs_write2flash = new Thread(t_acs_write2flash);
sakthipriya 0:e9c32e1df869 472 ptr_t_bea = new Thread(t_bea);
sakthipriya 0:e9c32e1df869 473 //ptr_t_bea_telecommand = new Thread(t_bea_telecommand);
sakthipriya 0:e9c32e1df869 474 //ptr_t_fault = new Thread(T_FAULT);
sakthipriya 0:e9c32e1df869 475 ptr_t_i2c = new Thread(C_T_I2C_BAE);
sakthipriya 0:e9c32e1df869 476 //ptr_t_sc = new Thread(t_sc);
sakthipriya 2:7aede71f4c22 477 ptr_t_wdt = new Thread(T_WDT);
sakthipriya 0:e9c32e1df869 478
sakthipriya 0:e9c32e1df869 479 interrupt_fault();
sakthipriya 0:e9c32e1df869 480
sakthipriya 0:e9c32e1df869 481 //ptr_t_fault -> set_priority(osPriorityRealtime);
sakthipriya 0:e9c32e1df869 482 ptr_t_acs->set_priority(osPriorityHigh);
sakthipriya 0:e9c32e1df869 483 ptr_t_i2c->set_priority(osPriorityAboveNormal);
sakthipriya 0:e9c32e1df869 484 ptr_t_hk_acq->set_priority(osPriorityNormal);
sakthipriya 0:e9c32e1df869 485 //ptr_t_acs_write2flash->set_priority(osPriorityBelowNormal);
sakthipriya 0:e9c32e1df869 486 ptr_t_bea->set_priority(osPriorityAboveNormal);
sakthipriya 0:e9c32e1df869 487 //ptr_t_bea_telecommand->set_priority(osPriorityIdle);
sakthipriya 0:e9c32e1df869 488 //ptr_t_sc->set_priority(osPriorityAboveNormal);
sakthipriya 2:7aede71f4c22 489 ptr_t_wdt -> set_priority(osPriorityIdle);
sakthipriya 0:e9c32e1df869 490
sakthipriya 0:e9c32e1df869 491
sakthipriya 0:e9c32e1df869 492 // ----------------------------------------------------------------------------------------------
sakthipriya 0:e9c32e1df869 493 //printf("\n T_FAULT priority is %d",ptr_t_fault->get_priority());
sakthipriya 0:e9c32e1df869 494 printf("\n T_ACS priority is %d",ptr_t_acs->get_priority());
sakthipriya 0:e9c32e1df869 495 printf("\n T_HK_ACQ priority is %d",ptr_t_hk_acq->get_priority());
sakthipriya 0:e9c32e1df869 496 //printf("\n T_ACS_WRITE2FLASH priority is %d",ptr_t_acs_write2flash->get_priority());
sakthipriya 0:e9c32e1df869 497 printf("\n T_BEA priority is %d",ptr_t_bea->get_priority());
sakthipriya 0:e9c32e1df869 498 RtosTimer t_sc_timer(t_sc,osTimerPeriodic);
sakthipriya 0:e9c32e1df869 499 t_sc_timer.start(10000);
sakthipriya 0:e9c32e1df869 500 printf("\n%f\n",t1.read());
sakthipriya 0:e9c32e1df869 501
sakthipriya 0:e9c32e1df869 502
sakthipriya 0:e9c32e1df869 503
sakthipriya 0:e9c32e1df869 504 master_reset.fall(&C_FUNC_RESET);
sakthipriya 0:e9c32e1df869 505 interrupt.rise(&C_FUNC_INT);
sakthipriya 0:e9c32e1df869 506
sakthipriya 0:e9c32e1df869 507 while(1)
sakthipriya 0:e9c32e1df869 508 {
sakthipriya 0:e9c32e1df869 509 //Thread::wait(10000);
sakthipriya 0:e9c32e1df869 510 //ir2master();
sakthipriya 0:e9c32e1df869 511 Thread::wait(5000);
sakthipriya 0:e9c32e1df869 512 }
sakthipriya 0:e9c32e1df869 513
sakthipriya 0:e9c32e1df869 514 }