The one with the new HK

Dependencies:   mbed-rtos mbed

Fork of BAE_vr2_1_1 by Seeker of Truth ,

Committer:
raizel_varun
Date:
Tue Dec 16 11:07:33 2014 +0000
Revision:
12:ba2556c6b990
Parent:
10:ed6d3b8d1d56
Child:
13:1b37d98840d3
hk data sent using string

Who changed what in which revision?

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