4-10-2015 BAE_RTOS_TEST ACS_DATA_ACQ and I2C sending 25 bytes to CDMS
Fork of BAE_RTOS_test_1 by
main.cpp
- Committer:
- gkumar
- Date:
- 2015-10-04
- Revision:
- 1:b8c71afbe6e5
- Parent:
- 0:f417d854dc29
- Child:
- 2:f26706e0d779
File content as of revision 1:b8c71afbe6e5:
#include "mbed.h" #include "rtos.h" #include "pin_config.h" //#include "HK.h" #include "ACS.h" //#include "beacon.h" Serial pc(USBTX, USBRX); InterruptIn irpt_4m_mstr(PIN38); //I2c interrupt from CDMS DigitalOut irpt_2_mstr(PIN4); //I2C interrupt to CDMS I2CSlave slave (PIN1,PIN2); const int addr = 0x20; //slave address Thread *ptr_t_i2c; Timer t; // time taken from isr to reach i2c function Timer t1; Timer t_exec; //To know the time of execution each thread Timer t_start; //To know the time of entering of each thread Timer t_i2c_start; //To check the time sync in i2c communication Timer t_i2c_exec; //To know the time taken by i2c read/write function Thread *ptr_t_hk; Thread *ptr_t_acs; Thread *ptr_t_bea; /**************************************************************global variables*********************************************************************************/ char hk_data[25]; /**************************************************************funtion header**********************************************************************************/ void FCTN_HK_DATA_CATENATE(); //--------------------------------------------------------------------------------------------------------------------------------------------------- //TASK : HK //--------------------------------------------------------------------------------------------------------------------------------------------------- //extern SensorDataQuantised SensorQuantised; void T_HK(void const *args) { while(1){ Thread::signal_wait(0x2); //SensorQuantised.power_mode='3'; //default power mode(dummy) // printf("\n\rTHIS IS HK %f\n\r",t_start.read()); // t_exec.start(); // FCTN_HK_MAIN(); //Collecting HK data // FCTN_HK_DATA_CATENATE(); //sending HK data to CDMS // t_exec.stop(); // //printf("The time to execute hk_acq is %f seconds\n\r",t_exec.read()); // t_exec.reset(); printf("\n\rTHIS IS HK %f\n\r",t_start.read()); } } //--------------------------------------------------------------------------------------------------------------------------------------------------- //TASK : ACS data //--------------------------------------------------------------------------------------------------------------------------------------------------- void T_ACS(void const *args){ float mag_field1[3]; float omega1[3]; //float tauc1[3]; //float moment[3]; //float *mnm_data; while(1) { Thread::signal_wait(0x1); printf("\n\rEntered ACS %f\n",t_start.read()); FCTN_ATS_DATA_ACQ(omega1,mag_field1); //the angular velocity is stored in the first 3 values and magnetic field values in next 3 printf("\n\rmnm gyro values\n"); //printing the angular velocity and magnetic field values for(int i=0; i<3; i++) { printf("%f\t",omega1[i]); } printf("\n\r mnm mag values\n"); for(int i=0; i<3; i++) { printf("%f\t",mag_field1[i]); } t_exec.reset(); } } //--------------------------------------------------------------------------------------------------------------------------------------------------- //TASK : Beacon //--------------------------------------------------------------------------------------------------------------------------------------------------- int beac_flag=0; void T_BEA(void const *args){ while(1){ Thread::signal_wait(0x3); printf("\n\rTHIS IS BEACON %f\n\r",t_start.read()); // t_exec.start(); // FCTN_BEA_MAIN(); // if(beac_flag==1) // { // Thread::wait(600000); // beac_flag = 0; // } // printf("The time to execute beacon thread is %f seconds\n\r",t_exec.read()); // t_exec.reset(); } } //extern SensorDataQuantised SensorQuantised; //--------------------------------------------------------------------------------------------------------------------------------------------------- //TASK : Scheduler //--------------------------------------------------------------------------------------------------------------------------------------------------- uint8_t schedcount=1; void T_SC(void const *args) { if(schedcount == 4) //to reset the counter { schedcount = 1; } pc.printf("\n\rThe value of i in scheduler is %d\n\r",schedcount); if(schedcount%1==0) { ptr_t_acs -> signal_set(0x1); } if(schedcount%2==0) { ptr_t_hk -> signal_set(0x2); } if(schedcount%3==0) { ptr_t_bea -> signal_set(0x3); } schedcount++; } //--------------------------------------------------------------------------------------------------------------------------------------------------- //TASK : i2c data //--------------------------------------------------------------------------------------------------------------------------------------------------- //void FCTN_I2C_READ(char *data,int length); //void FCTN_I2C_WRITE(char *data,int length); bool write_ack = 1; bool read_ack = 1; char data_send[10]; char data_receive[10]; char short_tc[10]; char long_tc[134]; char mstr_cmd = '0'; bool cmd_flag = 1; int length=10; void T_I2C_SLAVE(void const * args) { while(1) { cmd_flag = 1; Thread::signal_wait(0x4); wait_us(100); // can be between 38 to 15700 //printf("\n\r check 1\n"); t.stop(); if( slave.receive() == 0) slave.stop(); if( slave.receive() == 1) // slave writes to master { t1.start(); write_ack=slave.write(data_send,length); t1.stop(); if(write_ack == 0) printf("\n\rData sent to CDMS is %s \n",data_send); slave.stop(); } if( slave.receive()==3 || slave.receive()==2) // slave read { t1.start(); read_ack=slave.read(data_receive,length); t1.stop(); if(read_ack == 0) printf("\n\r Data received from CDMS is %s \n",data_receive); slave.stop(); } printf("\n \r %d %d\n",t.read_us(),t1.read_us()); t.reset(); t1.reset(); } // if(cmd_flag == 1) // { // t.stop(); // if( slave.receive()==3 || slave.receive()==2) // slave read // { // // t1.start(); // read_ack=slave.read(&mstr_cmd,1); // t1.stop(); // if(read_ack == 0) // { // printf("\n\r Data received from CDMS is %c \n",mstr_cmd); // switch(mstr_cmd) // { // case 's': // length = 11; // cmd_flag = 0; // break; // // case 'l': // length = 135; // cmd_flag = 0; // break; // // case 'h': // length = 25; // cmd_flag = 0; // FCTN_I2C_WRITE(hk_data,length ); // break; // // default: // printf("\n\r invalid command \n"); // //cmd_err = 0; // cmd_flag = 1; // } // } // else // cmd_flag = 1; // } // else // cmd_flag = 1; // } // printf("\n \r %d %d\n",t.read_us(),t1.read_us()); // t.reset(); // t1.reset(); // // // } //} // //void FCTN_I2C_READ(char *data, int length ) //{ // t1.start(); // read_ack=slave.read(data,length); // t1.stop(); // if(read_ack == 0) // printf("\n\rData received from CDMS is %s \n",data); // else // printf("\n\r data not received \n"); //} // //void FCTN_I2C_WRITE(char *data,int length) //{ // t1.start(); // write_ack=slave.write(data,length); // t1.stop(); // if(write_ack == 0) // printf("\n\rData sent to CDMS is %s \n",data); // else // printf("\n\r data not sent\n"); } void FCTN_ISR_I2C() { ptr_t_i2c->signal_set(0x4); t.start(); } //void FCTN_HK_DATA_CATENATE() //{ // strcpy(hk_data,"hk_Data"); // strcat(hk_data,SensorQuantised.Voltage); // strcat(hk_data,SensorQuantised.Current); // strcat(hk_data,SensorQuantised.PanelTemperature); // strcat(hk_data,SensorQuantised.AngularSpeed); // strcat(hk_data,SensorQuantised.Bnewvalue); // char fdata[5] = {SensorQuantised.BatteryTemperature,SensorQuantised.faultpoll,SensorQuantised.faultir,SensorQuantised.power_mode}; // /*strcat(hk_data,sfaultpoll); // strcat(hk_data,sfaultir); // strcat(hk_data,spower_mode);*/ // strcat(hk_data,fdata); // printf("\n\r hk data being sent is %s ",hk_data); //} //----------------------------------------------------------------------------BAE_INIT------------------------------------------------------------- void FCTN_BAE_INIT() { slave.address(0x20); // setting slave address for BAE for I2C communication FCTN_ACS_INIT(); // Initializing mnm blue //FCTN_BAE_HK_INIT(); //FCTN_BEA_INIT(); } //--------------------------------------------------------------------------------------------------------------------------------------------------- //TASK : Main //--------------------------------------------------------------------------------------------------------------------------------------------------- int main(){ ptr_t_hk = new Thread(T_HK); ptr_t_acs = new Thread(T_ACS); ptr_t_bea = new Thread(T_BEA); ptr_t_i2c= new Thread(T_I2C_SLAVE); ptr_t_acs->set_priority(osPriorityAboveNormal); ptr_t_hk->set_priority(osPriorityAboveNormal); ptr_t_bea->set_priority(osPriorityAboveNormal); ptr_t_i2c->set_priority(osPriorityRealtime); RtosTimer t_sc_timer(T_SC,osTimerPeriodic); // Initiating the scheduler thread t_sc_timer.start(10000); printf("\n\r BAE ACTIVATED\n"); FCTN_BAE_INIT(); //strcpy(data_send,"sakthi"); slave.address(addr); irpt_4m_mstr.enable_irq(); irpt_4m_mstr.rise(&FCTN_ISR_I2C); while(1) //required to prevent main from terminating { ; } }