telecommand working with junk

Dependencies:   mbed-rtos mbed

Fork of cdms_functions by green rosh

Committer:
raizel_varun
Date:
Wed Dec 24 12:01:47 2014 +0000
Revision:
2:4f10e81030c7
Parent:
1:4cd53e695c17
tc_sd data

Who changed what in which revision?

UserRevisionLine numberNew contents of line
greenroshks 0:ceaeb1b4d679 1 #include "mbed.h"
raizel_varun 1:4cd53e695c17 2 #include "rtos.h"
raizel_varun 1:4cd53e695c17 3 #include "mai.h"
raizel_varun 1:4cd53e695c17 4
raizel_varun 1:4cd53e695c17 5
raizel_varun 1:4cd53e695c17 6 const int addr = 0x20; //slave address
raizel_varun 1:4cd53e695c17 7 I2C master (D14,D15); //configure pins p27,p28 as I2C master
raizel_varun 1:4cd53e695c17 8 Serial pc (USBTX,USBRX);
raizel_varun 1:4cd53e695c17 9 DigitalOut interrupt(D9);
raizel_varun 1:4cd53e695c17 10
raizel_varun 1:4cd53e695c17 11 InterruptIn data_ready(D10);
raizel_varun 1:4cd53e695c17 12
raizel_varun 1:4cd53e695c17 13
raizel_varun 1:4cd53e695c17 14 int reset;
raizel_varun 1:4cd53e695c17 15 char writedata;
raizel_varun 1:4cd53e695c17 16 bool write2slave;
raizel_varun 1:4cd53e695c17 17 bool master_status_write;
raizel_varun 1:4cd53e695c17 18
raizel_varun 1:4cd53e695c17 19 typedef struct
raizel_varun 1:4cd53e695c17 20 {
raizel_varun 1:4cd53e695c17 21 char data; // To avoid dynamic memory allocation
raizel_varun 1:4cd53e695c17 22 int length;
raizel_varun 1:4cd53e695c17 23 }i2c_data;
raizel_varun 1:4cd53e695c17 24
raizel_varun 1:4cd53e695c17 25 typedef struct {
raizel_varun 1:4cd53e695c17 26 char Voltage[9];
raizel_varun 1:4cd53e695c17 27 char Current[5];
raizel_varun 1:4cd53e695c17 28 char Temperature[2];
raizel_varun 1:4cd53e695c17 29 char PanelTemperature[3];//read by the 4 thermistors on solar panels
raizel_varun 1:4cd53e695c17 30 char BatteryTemperature; //to be populated
raizel_varun 1:4cd53e695c17 31 char faultpoll; //polled faults
raizel_varun 1:4cd53e695c17 32 char faultir; //interrupted faults
raizel_varun 1:4cd53e695c17 33 char power_mode; //power modes
raizel_varun 1:4cd53e695c17 34 char AngularSpeed[3];
raizel_varun 1:4cd53e695c17 35 char Bnewvalue[3];
raizel_varun 1:4cd53e695c17 36
raizel_varun 1:4cd53e695c17 37 //float magnetometer,gyro=>to be addes
raizel_varun 1:4cd53e695c17 38 } hk_data;
raizel_varun 1:4cd53e695c17 39 hk_data decode_data;
raizel_varun 1:4cd53e695c17 40
raizel_varun 1:4cd53e695c17 41
raizel_varun 1:4cd53e695c17 42 //Mail<i2c_data,16> i2c_data_receive;
raizel_varun 1:4cd53e695c17 43 Mail<i2c_data,16> i2c_data_send;
raizel_varun 1:4cd53e695c17 44
raizel_varun 1:4cd53e695c17 45 Thread * ptr_t_i2c;
raizel_varun 1:4cd53e695c17 46 void FUNC_I2C_MASTER_FSLAVE(char * data,int length)
raizel_varun 1:4cd53e695c17 47 {
raizel_varun 1:4cd53e695c17 48 //printf("press backspace for master to start \n\r");
raizel_varun 1:4cd53e695c17 49 //while(1){
raizel_varun 1:4cd53e695c17 50 //interrupt = 0;
raizel_varun 1:4cd53e695c17 51 // if(pc.getc()=='z'){
raizel_varun 2:4f10e81030c7 52 //wait(0.5);
raizel_varun 1:4cd53e695c17 53 interrupt = 1;
raizel_varun 1:4cd53e695c17 54 printf("\nMaster executed\n");
raizel_varun 1:4cd53e695c17 55
raizel_varun 1:4cd53e695c17 56
raizel_varun 1:4cd53e695c17 57 bool ack0 =true;
raizel_varun 1:4cd53e695c17 58 bool loopvariable0 =true;
raizel_varun 1:4cd53e695c17 59 //char *data = new char;
raizel_varun 1:4cd53e695c17 60 //*data = 'b';
raizel_varun 1:4cd53e695c17 61
raizel_varun 1:4cd53e695c17 62
raizel_varun 1:4cd53e695c17 63
raizel_varun 1:4cd53e695c17 64 master.frequency(100000); //set clock frequency
raizel_varun 1:4cd53e695c17 65 //master.start();
raizel_varun 1:4cd53e695c17 66 /*while(write2slave)
raizel_varun 1:4cd53e695c17 67 { *writedata = pc.getc();
raizel_varun 1:4cd53e695c17 68 wait(0.5);
raizel_varun 1:4cd53e695c17 69
raizel_varun 1:4cd53e695c17 70 printf("master clk freq setup and addressing slave\n\r");
raizel_varun 1:4cd53e695c17 71 master.start(); //initiating the data transfer
raizel_varun 1:4cd53e695c17 72 master_status_write = (bool) master.write(addr|0x00,writedata,1);
raizel_varun 1:4cd53e695c17 73 if(master_status_write==0)
raizel_varun 1:4cd53e695c17 74 {
raizel_varun 1:4cd53e695c17 75 printf("master has written %c to slave\n\r",*writedata);
raizel_varun 1:4cd53e695c17 76 write2slave=false;
raizel_varun 1:4cd53e695c17 77 }
raizel_varun 1:4cd53e695c17 78
raizel_varun 1:4cd53e695c17 79
raizel_varun 1:4cd53e695c17 80 }*/
raizel_varun 1:4cd53e695c17 81
raizel_varun 1:4cd53e695c17 82 while(ack0 && data_ready == 1)
raizel_varun 1:4cd53e695c17 83 {
raizel_varun 1:4cd53e695c17 84 //printf("2 master clk freq setup and addressing slave\n\r");
raizel_varun 1:4cd53e695c17 85
raizel_varun 1:4cd53e695c17 86 master.start(); //initiating the data transfer
raizel_varun 1:4cd53e695c17 87 ack0 = master.read(addr,data,length);
raizel_varun 1:4cd53e695c17 88 }
raizel_varun 1:4cd53e695c17 89 if(!ack0)
raizel_varun 1:4cd53e695c17 90 {
raizel_varun 1:4cd53e695c17 91 printf("\n master has read %s from slave\n\r",data);
raizel_varun 1:4cd53e695c17 92 loopvariable0=false;
raizel_varun 1:4cd53e695c17 93 }
raizel_varun 1:4cd53e695c17 94 //master.stop();
raizel_varun 1:4cd53e695c17 95
raizel_varun 1:4cd53e695c17 96 //printf("done\n\r");
raizel_varun 1:4cd53e695c17 97 //delete data;
raizel_varun 1:4cd53e695c17 98 interrupt=0;
raizel_varun 1:4cd53e695c17 99 }
raizel_varun 1:4cd53e695c17 100 void TC_DECODE(char *data_hk) //getting the structure back from hk data sent by bae
raizel_varun 1:4cd53e695c17 101 {
raizel_varun 1:4cd53e695c17 102 for(int i=0;i<=7;i++)
raizel_varun 1:4cd53e695c17 103 {
raizel_varun 1:4cd53e695c17 104 decode_data.Voltage[i] = data_hk[i];
raizel_varun 1:4cd53e695c17 105 decode_data.Voltage[8] = '\0';
raizel_varun 1:4cd53e695c17 106 }
raizel_varun 1:4cd53e695c17 107 for(int i=0;i<=3;i++)
raizel_varun 1:4cd53e695c17 108 {
raizel_varun 1:4cd53e695c17 109 decode_data.Current[i] = data_hk[8+i];
raizel_varun 1:4cd53e695c17 110 decode_data.Current[4] = '\0';
raizel_varun 1:4cd53e695c17 111 }
raizel_varun 1:4cd53e695c17 112 decode_data.Temperature[0] = data_hk[12];
raizel_varun 1:4cd53e695c17 113 decode_data.Temperature[1] = '\0';
raizel_varun 1:4cd53e695c17 114 for(int i=0;i<=1;i++)
raizel_varun 1:4cd53e695c17 115 {
raizel_varun 1:4cd53e695c17 116 decode_data.PanelTemperature[i] = data_hk[13+i];
raizel_varun 1:4cd53e695c17 117 decode_data.PanelTemperature[2] = '\0';
raizel_varun 1:4cd53e695c17 118 }
raizel_varun 1:4cd53e695c17 119 decode_data.BatteryTemperature = data_hk[15];
raizel_varun 1:4cd53e695c17 120 decode_data.faultpoll = data_hk[16];
raizel_varun 1:4cd53e695c17 121 decode_data.faultir = data_hk[17];
raizel_varun 1:4cd53e695c17 122 decode_data.power_mode = data_hk[18];
raizel_varun 1:4cd53e695c17 123 for(int i=0;i<=1;i++)
raizel_varun 1:4cd53e695c17 124 {
raizel_varun 1:4cd53e695c17 125 decode_data.AngularSpeed[i] = data_hk[19+i];
raizel_varun 1:4cd53e695c17 126 decode_data.AngularSpeed[2] = '\0';
raizel_varun 1:4cd53e695c17 127 }
raizel_varun 1:4cd53e695c17 128 for(int i=0;i<=1;i++)
raizel_varun 1:4cd53e695c17 129 {
raizel_varun 1:4cd53e695c17 130 decode_data.Bnewvalue[i] = data_hk[21+i];
raizel_varun 1:4cd53e695c17 131 decode_data.Bnewvalue[2] = '\0';
raizel_varun 1:4cd53e695c17 132 }
raizel_varun 1:4cd53e695c17 133 printf("\n voltage %s\n\r",decode_data.Voltage);
raizel_varun 1:4cd53e695c17 134 printf("\n current %s\n\r",decode_data.Current);
raizel_varun 1:4cd53e695c17 135 printf("\n faultpoll %c\n\r",decode_data.faultpoll);
raizel_varun 1:4cd53e695c17 136 }
raizel_varun 1:4cd53e695c17 137
raizel_varun 1:4cd53e695c17 138 void T_I2C_MASTER_FSLAVE(void const *args)
raizel_varun 1:4cd53e695c17 139 {
raizel_varun 1:4cd53e695c17 140 char data_receive[25];
raizel_varun 1:4cd53e695c17 141
raizel_varun 1:4cd53e695c17 142 while(1)
raizel_varun 1:4cd53e695c17 143 {
raizel_varun 1:4cd53e695c17 144 Thread::signal_wait(0x1);
raizel_varun 1:4cd53e695c17 145 FUNC_I2C_MASTER_FSLAVE(data_receive,25);
raizel_varun 2:4f10e81030c7 146 TC_DECODE(data_receive);
raizel_varun 1:4cd53e695c17 147
raizel_varun 1:4cd53e695c17 148 /*i2c_data * i2c_data_r = i2c_data_receive.alloc();
raizel_varun 1:4cd53e695c17 149 strcpy(i2c_data_r->data , data_receive);
raizel_varun 1:4cd53e695c17 150 i2c_data_r->length = 25;
raizel_varun 1:4cd53e695c17 151 i2c_data_receive.put(i2c_data_r);*/
raizel_varun 1:4cd53e695c17 152 printf("\n Data received from slave is %s\n\r",data_receive);
raizel_varun 1:4cd53e695c17 153 }
raizel_varun 1:4cd53e695c17 154 }
raizel_varun 1:4cd53e695c17 155
raizel_varun 1:4cd53e695c17 156 char command;
raizel_varun 1:4cd53e695c17 157
raizel_varun 1:4cd53e695c17 158 void TC_EXECUTE()
raizel_varun 1:4cd53e695c17 159 { osEvent evt = i2c_data_send.get();
raizel_varun 1:4cd53e695c17 160 if (evt.status == osEventMail)
raizel_varun 1:4cd53e695c17 161 {
raizel_varun 1:4cd53e695c17 162 i2c_data *i2c_data_s = (i2c_data*)evt.value.p;
raizel_varun 1:4cd53e695c17 163 command = i2c_data_s -> data;
raizel_varun 1:4cd53e695c17 164 }
raizel_varun 1:4cd53e695c17 165
raizel_varun 1:4cd53e695c17 166 switch(command)
raizel_varun 1:4cd53e695c17 167 {
raizel_varun 2:4f10e81030c7 168
raizel_varun 2:4f10e81030c7 169
raizel_varun 2:4f10e81030c7 170 case '0'://void FUNC_TC_ACS_DATAACQ()
raizel_varun 2:4f10e81030c7 171 {
raizel_varun 2:4f10e81030c7 172 FUNC_MASTER_WRITE ( '0' ) ;
raizel_varun 2:4f10e81030c7 173 }
raizel_varun 2:4f10e81030c7 174 break;
raizel_varun 2:4f10e81030c7 175 case '1'://void FUNC_TC_ACS_OFF()
raizel_varun 1:4cd53e695c17 176 {
raizel_varun 1:4cd53e695c17 177 FUNC_MASTER_WRITE ( '1' ) ;
raizel_varun 2:4f10e81030c7 178 }
raizel_varun 2:4f10e81030c7 179 break;
raizel_varun 2:4f10e81030c7 180 case '2'://void FUNC_TC_ACS_RESET()
raizel_varun 2:4f10e81030c7 181 {
raizel_varun 1:4cd53e695c17 182 FUNC_MASTER_WRITE ( '2' ) ;
raizel_varun 1:4cd53e695c17 183 }
raizel_varun 1:4cd53e695c17 184 break;
raizel_varun 2:4f10e81030c7 185 case '3'://FUNC_TC_BEA_CHANGEINTTIME()
raizel_varun 1:4cd53e695c17 186 {
raizel_varun 1:4cd53e695c17 187 FUNC_MASTER_WRITE ( '3' ) ;
raizel_varun 1:4cd53e695c17 188 }
raizel_varun 1:4cd53e695c17 189 break;
raizel_varun 2:4f10e81030c7 190 case '4'://void FUNC_TC_BEA_RESET()
raizel_varun 1:4cd53e695c17 191 {
raizel_varun 2:4f10e81030c7 192 FUNC_MASTER_WRITE ( '4' ) ;
raizel_varun 1:4cd53e695c17 193 }
raizel_varun 1:4cd53e695c17 194 break;
raizel_varun 2:4f10e81030c7 195 case 5://void FUNC_TC_CDMS_RESET()
raizel_varun 1:4cd53e695c17 196 break;
raizel_varun 2:4f10e81030c7 197 case 6://void FUNC_TC_CDMS_TRANSOFF()
raizel_varun 1:4cd53e695c17 198 break;
raizel_varun 1:4cd53e695c17 199 }
raizel_varun 1:4cd53e695c17 200 }
raizel_varun 1:4cd53e695c17 201 void GETCOMMAND()
raizel_varun 1:4cd53e695c17 202 { char data = pc.getc();
raizel_varun 1:4cd53e695c17 203
raizel_varun 1:4cd53e695c17 204
raizel_varun 1:4cd53e695c17 205 i2c_data * i2c_data_s = i2c_data_send.alloc();
raizel_varun 1:4cd53e695c17 206 i2c_data_s->data = data;
raizel_varun 1:4cd53e695c17 207 i2c_data_s->length = 1;
raizel_varun 1:4cd53e695c17 208 i2c_data_send.put(i2c_data_s);
raizel_varun 1:4cd53e695c17 209 TC_EXECUTE();
raizel_varun 1:4cd53e695c17 210 i2c_data_send.free(i2c_data_s);
raizel_varun 1:4cd53e695c17 211 }
raizel_varun 1:4cd53e695c17 212 void FUNC_MASTER_WRITE(char writedata)
raizel_varun 1:4cd53e695c17 213 { //wait(1);
raizel_varun 1:4cd53e695c17 214 interrupt = 1;
raizel_varun 1:4cd53e695c17 215 write2slave=true;
raizel_varun 1:4cd53e695c17 216
raizel_varun 1:4cd53e695c17 217 master_status_write = true;
raizel_varun 1:4cd53e695c17 218
raizel_varun 1:4cd53e695c17 219
raizel_varun 1:4cd53e695c17 220 master.frequency(100000); //set clock frequency
raizel_varun 1:4cd53e695c17 221 while(write2slave && interrupt ==1)
raizel_varun 1:4cd53e695c17 222 {
raizel_varun 1:4cd53e695c17 223 printf("master clk freq setup and addressing slave\n\r");
raizel_varun 1:4cd53e695c17 224 master.start(); //initiating the data transfer
raizel_varun 1:4cd53e695c17 225 master_status_write = (bool) master.write(addr|0x00,&writedata,1);
raizel_varun 1:4cd53e695c17 226 if(master_status_write==0)
raizel_varun 1:4cd53e695c17 227 {
raizel_varun 1:4cd53e695c17 228 printf("master has written %c to slave\n\r",writedata);
raizel_varun 1:4cd53e695c17 229 write2slave = 0;
raizel_varun 1:4cd53e695c17 230 }
raizel_varun 1:4cd53e695c17 231 }
raizel_varun 1:4cd53e695c17 232 interrupt = 0;
raizel_varun 1:4cd53e695c17 233 }
raizel_varun 1:4cd53e695c17 234
raizel_varun 1:4cd53e695c17 235
raizel_varun 1:4cd53e695c17 236
raizel_varun 1:4cd53e695c17 237 void FUNC_INT()
raizel_varun 1:4cd53e695c17 238 {
raizel_varun 1:4cd53e695c17 239
raizel_varun 1:4cd53e695c17 240 ptr_t_i2c->signal_set(0x1);
raizel_varun 1:4cd53e695c17 241
raizel_varun 1:4cd53e695c17 242 }
raizel_varun 1:4cd53e695c17 243
raizel_varun 1:4cd53e695c17 244
raizel_varun 1:4cd53e695c17 245
raizel_varun 1:4cd53e695c17 246
raizel_varun 1:4cd53e695c17 247
raizel_varun 1:4cd53e695c17 248
raizel_varun 1:4cd53e695c17 249 int main()
raizel_varun 1:4cd53e695c17 250 {
raizel_varun 1:4cd53e695c17 251
raizel_varun 1:4cd53e695c17 252 ptr_t_i2c = new Thread(T_I2C_MASTER_FSLAVE);
raizel_varun 1:4cd53e695c17 253 data_ready.rise(&FUNC_INT);
raizel_varun 1:4cd53e695c17 254 printf("\nstarted master\n");
raizel_varun 1:4cd53e695c17 255 while(1)
raizel_varun 1:4cd53e695c17 256 { //Thread::wait(9000);
raizel_varun 1:4cd53e695c17 257 //interrupt = 1;
raizel_varun 1:4cd53e695c17 258
raizel_varun 1:4cd53e695c17 259 GETCOMMAND();
raizel_varun 1:4cd53e695c17 260
raizel_varun 1:4cd53e695c17 261 //interrupt = 0;
raizel_varun 1:4cd53e695c17 262 ;
raizel_varun 1:4cd53e695c17 263 }
raizel_varun 1:4cd53e695c17 264 }
raizel_varun 1:4cd53e695c17 265
raizel_varun 1:4cd53e695c17 266
greenroshks 0:ceaeb1b4d679 267
greenroshks 0:ceaeb1b4d679 268 void FUNC_TC_ACS_DATAACQ() //103 //send this data to bae and execute there. Send ascii 1. Switch off control algo and rods
raizel_varun 1:4cd53e695c17 269 { //data = 1 ;
raizel_varun 1:4cd53e695c17 270 //FUNC_WRITE2BAE();
raizel_varun 1:4cd53e695c17 271
raizel_varun 1:4cd53e695c17 272 //put data in
greenroshks 0:ceaeb1b4d679 273 //signal slave
greenroshks 0:ceaeb1b4d679 274 }
greenroshks 0:ceaeb1b4d679 275
greenroshks 0:ceaeb1b4d679 276 void FUNC_TC_ACS_OFF() //106 // send ascii 2. turn a gpio off
greenroshks 0:ceaeb1b4d679 277 {
greenroshks 0:ceaeb1b4d679 278 //put data in thread
greenroshks 0:ceaeb1b4d679 279 //signal slave
greenroshks 0:ceaeb1b4d679 280 }
greenroshks 0:ceaeb1b4d679 281
greenroshks 0:ceaeb1b4d679 282 void FUNC_TC_ACS_RESET() //107 //send ascii 3. turn acs gpio off and on. Also call initialization
greenroshks 0:ceaeb1b4d679 283 {
greenroshks 0:ceaeb1b4d679 284 //put data in thread
greenroshks 0:ceaeb1b4d679 285 //signal slave
greenroshks 0:ceaeb1b4d679 286 }
greenroshks 0:ceaeb1b4d679 287
greenroshks 0:ceaeb1b4d679 288 void FUNC_TC_BEA_CHANGEINTTIME() //202 // switch beacon interval from 30 seconds to 5 minutes in the scheduler
greenroshks 0:ceaeb1b4d679 289 {
greenroshks 0:ceaeb1b4d679 290 //put data in thread
greenroshks 0:ceaeb1b4d679 291 //signal slave
greenroshks 0:ceaeb1b4d679 292 }
greenroshks 0:ceaeb1b4d679 293
greenroshks 0:ceaeb1b4d679 294 void FUNC_TC_BEA_RESET() //203 //similar to 107
greenroshks 0:ceaeb1b4d679 295 {
greenroshks 0:ceaeb1b4d679 296 //put data in thread
greenroshks 0:ceaeb1b4d679 297 //signal slave
greenroshks 0:ceaeb1b4d679 298 }
greenroshks 0:ceaeb1b4d679 299
greenroshks 0:ceaeb1b4d679 300 void FUNC_TC_CDMS_RESET() //204
greenroshks 0:ceaeb1b4d679 301 {
greenroshks 0:ceaeb1b4d679 302 // turn gpio off
greenroshks 0:ceaeb1b4d679 303 // wait
greenroshks 0:ceaeb1b4d679 304 //turn gpio on
greenroshks 0:ceaeb1b4d679 305 //intialize
greenroshks 0:ceaeb1b4d679 306 }
greenroshks 0:ceaeb1b4d679 307
greenroshks 0:ceaeb1b4d679 308 void FUNC_TC_CDMS_TRANSOFF()
greenroshks 0:ceaeb1b4d679 309 {
greenroshks 0:ceaeb1b4d679 310 //turn gpio off
greenroshks 0:ceaeb1b4d679 311 }
greenroshks 0:ceaeb1b4d679 312
greenroshks 0:ceaeb1b4d679 313
greenroshks 0:ceaeb1b4d679 314