telecommand working with junk

Dependencies:   mbed-rtos mbed

Fork of cdms_functions by green rosh

Committer:
raizel_varun
Date:
Sat Dec 20 06:38:45 2014 +0000
Revision:
1:4cd53e695c17
Parent:
0:ceaeb1b4d679
Child:
2:4f10e81030c7
cdms telecommad

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 1:4cd53e695c17 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 1:4cd53e695c17 146 void TC_DECODE();
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 1:4cd53e695c17 168 case '0':
raizel_varun 1:4cd53e695c17 169 {
raizel_varun 1:4cd53e695c17 170 FUNC_MASTER_WRITE ( '1' ) ;
raizel_varun 1:4cd53e695c17 171 break; }
raizel_varun 1:4cd53e695c17 172
raizel_varun 1:4cd53e695c17 173 case '1':
raizel_varun 1:4cd53e695c17 174 {
raizel_varun 1:4cd53e695c17 175 FUNC_MASTER_WRITE ( '2' ) ;
raizel_varun 1:4cd53e695c17 176 }
raizel_varun 1:4cd53e695c17 177 break;
raizel_varun 1:4cd53e695c17 178 case '2':
raizel_varun 1:4cd53e695c17 179 {
raizel_varun 1:4cd53e695c17 180 FUNC_MASTER_WRITE ( '3' ) ;
raizel_varun 1:4cd53e695c17 181 }
raizel_varun 1:4cd53e695c17 182 break;
raizel_varun 1:4cd53e695c17 183 case '3':
raizel_varun 1:4cd53e695c17 184 {
raizel_varun 1:4cd53e695c17 185 FUNC_MASTER_WRITE ( '4' ) ;
raizel_varun 1:4cd53e695c17 186 }
raizel_varun 1:4cd53e695c17 187 break;
raizel_varun 1:4cd53e695c17 188 case '4':
raizel_varun 1:4cd53e695c17 189 {
raizel_varun 1:4cd53e695c17 190 FUNC_MASTER_WRITE ( '5' ) ;
raizel_varun 1:4cd53e695c17 191 }
raizel_varun 1:4cd53e695c17 192 break;
raizel_varun 1:4cd53e695c17 193 case '5':
raizel_varun 1:4cd53e695c17 194 {
raizel_varun 1:4cd53e695c17 195 FUNC_MASTER_WRITE ( '6' ) ;
raizel_varun 1:4cd53e695c17 196 }
raizel_varun 1:4cd53e695c17 197 break;
raizel_varun 1:4cd53e695c17 198 case 6:
raizel_varun 1:4cd53e695c17 199 break;
raizel_varun 1:4cd53e695c17 200 case 7:
raizel_varun 1:4cd53e695c17 201 break;
raizel_varun 1:4cd53e695c17 202 }
raizel_varun 1:4cd53e695c17 203 }
raizel_varun 1:4cd53e695c17 204 void GETCOMMAND()
raizel_varun 1:4cd53e695c17 205 { char data = pc.getc();
raizel_varun 1:4cd53e695c17 206
raizel_varun 1:4cd53e695c17 207
raizel_varun 1:4cd53e695c17 208 i2c_data * i2c_data_s = i2c_data_send.alloc();
raizel_varun 1:4cd53e695c17 209 i2c_data_s->data = data;
raizel_varun 1:4cd53e695c17 210 i2c_data_s->length = 1;
raizel_varun 1:4cd53e695c17 211 i2c_data_send.put(i2c_data_s);
raizel_varun 1:4cd53e695c17 212 TC_EXECUTE();
raizel_varun 1:4cd53e695c17 213 i2c_data_send.free(i2c_data_s);
raizel_varun 1:4cd53e695c17 214 }
raizel_varun 1:4cd53e695c17 215 void FUNC_MASTER_WRITE(char writedata)
raizel_varun 1:4cd53e695c17 216 { //wait(1);
raizel_varun 1:4cd53e695c17 217 interrupt = 1;
raizel_varun 1:4cd53e695c17 218 write2slave=true;
raizel_varun 1:4cd53e695c17 219
raizel_varun 1:4cd53e695c17 220 master_status_write = true;
raizel_varun 1:4cd53e695c17 221
raizel_varun 1:4cd53e695c17 222
raizel_varun 1:4cd53e695c17 223 master.frequency(100000); //set clock frequency
raizel_varun 1:4cd53e695c17 224 while(write2slave && interrupt ==1)
raizel_varun 1:4cd53e695c17 225 {
raizel_varun 1:4cd53e695c17 226 printf("master clk freq setup and addressing slave\n\r");
raizel_varun 1:4cd53e695c17 227 master.start(); //initiating the data transfer
raizel_varun 1:4cd53e695c17 228 master_status_write = (bool) master.write(addr|0x00,&writedata,1);
raizel_varun 1:4cd53e695c17 229 if(master_status_write==0)
raizel_varun 1:4cd53e695c17 230 {
raizel_varun 1:4cd53e695c17 231 printf("master has written %c to slave\n\r",writedata);
raizel_varun 1:4cd53e695c17 232 write2slave = 0;
raizel_varun 1:4cd53e695c17 233 }
raizel_varun 1:4cd53e695c17 234 }
raizel_varun 1:4cd53e695c17 235 interrupt = 0;
raizel_varun 1:4cd53e695c17 236 }
raizel_varun 1:4cd53e695c17 237
raizel_varun 1:4cd53e695c17 238
raizel_varun 1:4cd53e695c17 239
raizel_varun 1:4cd53e695c17 240 void FUNC_INT()
raizel_varun 1:4cd53e695c17 241 {
raizel_varun 1:4cd53e695c17 242
raizel_varun 1:4cd53e695c17 243 ptr_t_i2c->signal_set(0x1);
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
raizel_varun 1:4cd53e695c17 250
raizel_varun 1:4cd53e695c17 251
raizel_varun 1:4cd53e695c17 252 int main()
raizel_varun 1:4cd53e695c17 253 {
raizel_varun 1:4cd53e695c17 254
raizel_varun 1:4cd53e695c17 255 ptr_t_i2c = new Thread(T_I2C_MASTER_FSLAVE);
raizel_varun 1:4cd53e695c17 256 data_ready.rise(&FUNC_INT);
raizel_varun 1:4cd53e695c17 257 printf("\nstarted master\n");
raizel_varun 1:4cd53e695c17 258 while(1)
raizel_varun 1:4cd53e695c17 259 { //Thread::wait(9000);
raizel_varun 1:4cd53e695c17 260 //interrupt = 1;
raizel_varun 1:4cd53e695c17 261
raizel_varun 1:4cd53e695c17 262 GETCOMMAND();
raizel_varun 1:4cd53e695c17 263
raizel_varun 1:4cd53e695c17 264 //interrupt = 0;
raizel_varun 1:4cd53e695c17 265 ;
raizel_varun 1:4cd53e695c17 266 }
raizel_varun 1:4cd53e695c17 267 }
raizel_varun 1:4cd53e695c17 268
raizel_varun 1:4cd53e695c17 269
greenroshks 0:ceaeb1b4d679 270
greenroshks 0:ceaeb1b4d679 271 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 272 { //data = 1 ;
raizel_varun 1:4cd53e695c17 273 //FUNC_WRITE2BAE();
raizel_varun 1:4cd53e695c17 274
raizel_varun 1:4cd53e695c17 275 //put data in
greenroshks 0:ceaeb1b4d679 276 //signal slave
greenroshks 0:ceaeb1b4d679 277 }
greenroshks 0:ceaeb1b4d679 278
greenroshks 0:ceaeb1b4d679 279 void FUNC_TC_ACS_OFF() //106 // send ascii 2. turn a gpio off
greenroshks 0:ceaeb1b4d679 280 {
greenroshks 0:ceaeb1b4d679 281 //put data in thread
greenroshks 0:ceaeb1b4d679 282 //signal slave
greenroshks 0:ceaeb1b4d679 283 }
greenroshks 0:ceaeb1b4d679 284
greenroshks 0:ceaeb1b4d679 285 void FUNC_TC_ACS_RESET() //107 //send ascii 3. turn acs gpio off and on. Also call initialization
greenroshks 0:ceaeb1b4d679 286 {
greenroshks 0:ceaeb1b4d679 287 //put data in thread
greenroshks 0:ceaeb1b4d679 288 //signal slave
greenroshks 0:ceaeb1b4d679 289 }
greenroshks 0:ceaeb1b4d679 290
greenroshks 0:ceaeb1b4d679 291 void FUNC_TC_BEA_CHANGEINTTIME() //202 // switch beacon interval from 30 seconds to 5 minutes in the scheduler
greenroshks 0:ceaeb1b4d679 292 {
greenroshks 0:ceaeb1b4d679 293 //put data in thread
greenroshks 0:ceaeb1b4d679 294 //signal slave
greenroshks 0:ceaeb1b4d679 295 }
greenroshks 0:ceaeb1b4d679 296
greenroshks 0:ceaeb1b4d679 297 void FUNC_TC_BEA_RESET() //203 //similar to 107
greenroshks 0:ceaeb1b4d679 298 {
greenroshks 0:ceaeb1b4d679 299 //put data in thread
greenroshks 0:ceaeb1b4d679 300 //signal slave
greenroshks 0:ceaeb1b4d679 301 }
greenroshks 0:ceaeb1b4d679 302
greenroshks 0:ceaeb1b4d679 303 void FUNC_TC_CDMS_RESET() //204
greenroshks 0:ceaeb1b4d679 304 {
greenroshks 0:ceaeb1b4d679 305 // turn gpio off
greenroshks 0:ceaeb1b4d679 306 // wait
greenroshks 0:ceaeb1b4d679 307 //turn gpio on
greenroshks 0:ceaeb1b4d679 308 //intialize
greenroshks 0:ceaeb1b4d679 309 }
greenroshks 0:ceaeb1b4d679 310
greenroshks 0:ceaeb1b4d679 311 void FUNC_TC_CDMS_TRANSOFF()
greenroshks 0:ceaeb1b4d679 312 {
greenroshks 0:ceaeb1b4d679 313 //turn gpio off
greenroshks 0:ceaeb1b4d679 314 }
greenroshks 0:ceaeb1b4d679 315
greenroshks 0:ceaeb1b4d679 316
greenroshks 0:ceaeb1b4d679 317