no honeycomb

Dependencies:   mbed-rtos mbed

Committer:
raizel_varun
Date:
Sat Dec 20 05:30:37 2014 +0000
Revision:
2:081ff4d93e91
Parent:
1:7017c91e63da
after pi;

Who changed what in which revision?

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