cdms i2c working - but not working after hk data is sent

Dependencies:   mbed-rtos mbed

Fork of pcb_test_vr1_1_2 by GOPA KUMAR K C

Revision:
4:65a2d0b97d01
Parent:
3:0931a8800543
Child:
5:bf1f3504cd9d
--- a/main.cpp	Wed May 13 06:19:25 2015 +0000
+++ b/main.cpp	Thu May 14 10:22:50 2015 +0000
@@ -22,7 +22,7 @@
 Timer i1;
 Timer i2;
 /*****************************************************************Threads USed***********************************************************************************/
-Thread *ptr_t_hk_acq;
+Thread *ptr_t_hk_acq;              //pointer:::::::::to read state of one thread from another
 Thread *ptr_t_acs;
 Thread *ptr_t_bea;
 Thread *ptr_t_i2c;
@@ -47,19 +47,19 @@
 //--------------------------------------------------------------------------------------------------------------------------------------------------
 
 char hk_data[25];
-extern SensorDataQuantised SensorQuantised;
+extern SensorDataQuantised SensorQuantised;      /// SensorDataQuantised: struct   instance :SensorQuantised
 void T_HK_ACQ(void const *args)
 {
     
     while(1)
     {
-        Thread::signal_wait(0x2);
+        Thread::signal_wait(0x2);                                  // 0x2 random should be same in master n slave 
         SensorQuantised.power_mode='3';                          //default power mode(dummy)
         printf("\n\rTHIS IS HK    %f\n\r",t1.read());
         t.start();
-        FUNC_HK_FAULTS();                                        // !Actual fault management is not implemented
-        FUNC_HK_POWER(SensorQuantised.power_mode);               // !The power mode algorithm is yet to be obtained
-        FUNC_HK_MAIN();                                          //Collecting HK data
+        FUNC_HK_FAULTS();                                        // !Actual fault management is not implemented : polling
+        FUNC_HK_POWER(SensorQuantised.power_mode);               // !The power mode algorithm is yet to be obtained  // status of power modde will decide actions
+        FUNC_HK_MAIN();                                          //Collecting HK data for ADC n 
         FUNC_I2C_IR2CDMS();                                      //sending HK data to CDMS
         t.stop();
         printf("The time to execute hk_acq is %f seconds\n\r",t.read());
@@ -71,12 +71,12 @@
 //TASK 1 : ACS
 //---------------------------------------------------------------------------------------------------------------------------------------
 
-int acs_pflag = 1;
+int acs_pflag = 1;                                                               // power mode decision flag for ACS
 void T_ACS(void const *args)
 {
-    float mag_field[3];
-    float omega[3];
-    float *mnm_data;
+    float mag_field[3]; // rm3000
+    float omega[3]; //mpu3300
+    float *mnm_data;                        // 
     float mag_field1[3];
     float omega1[3];
     float tauc1[3];
@@ -86,13 +86,13 @@
         Thread::signal_wait(0x1);
         printf("\n\rEntered ACS   %f\n",t1.read());
         t.start();
-        FUNC_ACS_MAG_EXEC(mag_field); 
+        FUNC_ACS_MAG_EXEC(mag_field); ///rm3000
         //printf("\n\r check");
          for(int i=0; i<3; i++) 
             {
             printf("%f\t",mag_field[i]);
             }                         
-        FUNC_ACS_EXEC_GYR(omega);
+        FUNC_ACS_EXEC_GYR(omega);    // mpu3300
         acs_pflag =1;                       //to be removed later 
         omega[0] = 1.0;
         omega[1] = 1.0;
@@ -100,7 +100,7 @@
         
        
        
-       /* mnm_data=EXECUTE_PNI(); //the angular velocity is stored in the first 3 values and magnetic field values in next 3
+       mnm_data=EXECUTE_PNI(); //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++) 
         {
@@ -119,8 +119,8 @@
         {
             mag_field1[i-3] = mnm_data[i];
         }
-        */
-        if(acs_pflag == 1)
+        
+        if(acs_pflag == 1)            
         {
            
             FUNC_ACS_CNTRLALGO(mag_field,omega,tauc1);
@@ -143,7 +143,8 @@
 
 //---------------------------------------------------BEACON--------------------------------------------------------------------------------------------
 
-int beac_flag=0;                                                            //To receive telecommand from ground.
+int beac_flag=0;                                                            //To receive telecommand from ground. Beacon stopped when telecomand recieved durring 
+
 
 
 /*void T_BEA_TELECOMMAND(void const *args)
@@ -166,7 +167,7 @@
         printf("\n\rTHIS IS BEACON    %f\n\r",t1.read());
         t.start();
         FUNC_BEA();
-        if(beac_flag==1)
+        if(beac_flag==1)                            // use scheduler instead
         {
             Thread::wait(600000);
             beac_flag = 0;
@@ -178,19 +179,19 @@
 
 
 
-extern SensorDataQuantised SensorQuantised;
+extern SensorDataQuantised SensorQuantised;                 // ????????
 
 /*-------------------------------------------------------------------------------------------------------------------------------------------
 -------------------------------------------------------WATCHDOG----------------------------------------------------------------------------*/
 DigitalOut trigger(PIN63);                                             // has to be changed
 void T_WDT(void const * args)
 {
-    trigger = 1;
+    trigger = 1;                            // gpio to WD input
     while(true)
     {
         Thread::signal_wait(0x5);                               //signal set from scheduler or sthing. r RTOS timer nce the timing is finalized
         printf("\n\rEntered WD\n\r");
-        trigger = !trigger;
+        trigger = !trigger;                                     /// falling edge triggered 
     }
 }
 
@@ -198,7 +199,7 @@
 //TASK 5 : i2c data
 //---------------------------------------------------------------------------------------------------------------------------------------------------
 
-void FUNC_I2C_WRITE2CDMS(char *data, int length=1)
+void FUNC_I2C_WRITE2CDMS(char *data, int length=1)                  /// BAE to CDMS read/write
 {
     int slave_status = 1;
     int inter_test = interrupt;
@@ -209,16 +210,16 @@
     //{ 
         //printf("\n\r slave status %d",slave.receive());
         //t2.stop();
-        if(slave.receive() == 0)
+        if(slave.receive() == 0)                    // 0 when not ack refer doc.
             t2.stop();
-        if( slave.receive()==1)
+        if( slave.receive()==1) // slave to master
         {
             t2.stop();
             t3.start();
-            slave_status=slave.write(data,length);
+            slave_status=slave.write(data,length);              // ack to
             t3.stop();
         }
-        else if( slave.receive()==3 ||  slave.receive()==2)
+        else if( slave.receive()==3 ||  slave.receive()==2)     // master to slave
         {
             t2.stop();
             t3.start();
@@ -244,7 +245,7 @@
         Thread::signal_wait(0x4);
         int something = interrupt;
        // printf("\n\r interrupt %d",interrupt);     
-        if(i2c_status == 0 )
+        if(i2c_status == 0 )    // read from CDMS (master)
         
         {
            // wait_ms(23);
@@ -254,22 +255,22 @@
             i2c_data_r->length = 1;
             i2c_data_receive.put(i2c_data_r);*/
             printf("\n\r Data received from CDMS is %c \n\r",data_receive);
-            FUNC_I2C_TC_EXECUTE(data_receive);                             // This has to be done from a differen thread
+            FUNC_I2C_TC_EXECUTE(data_receive);                       //  telecommand      // This has to be done from a differen thread 
             
         }
         else if(i2c_status ==1)
         {
-            osEvent evt = i2c_data_send.get();
-            if (evt.status == osEventMail) 
+            osEvent evt = i2c_data_send.get();                      // 
+            if (evt.status == osEventMail)                              //
             {
-                i2c_data *i2c_data_s = (i2c_data*)evt.value.p;
-                strcpy(data_send,i2c_data_s -> data);
+                i2c_data *i2c_data_s = (i2c_data*)evt.value.p;              //syntax recieving address of data from queue and storing it in struct
+                strcpy(data_send,i2c_data_s -> data);                       // -> data from pointer
                // wait_ms(13);
                 
-                FUNC_I2C_WRITE2CDMS(data_send,25);
+                FUNC_I2C_WRITE2CDMS(data_send,25);                          
                 printf("\n\rData sent to CDMS is %s\n\r",data_send);
                 
-                i2c_data_send.free(i2c_data_s);
+                i2c_data_send.free(i2c_data_s);             // freeing the memory location from queue
                 i2c_status = 0;
             }
         }  
@@ -279,19 +280,19 @@
 
         
 
-void FUNC_I2C_INT()
+void FUNC_I2C_INT()             // ISR from CDMS to BAE
 {
    //i1.stop();
    
   // t3.start();
-   ptr_t_i2c->signal_set(0x4);
+   ptr_t_i2c->signal_set(0x4);                  // printf dosen't work....why??????????????????
    //printf("\n ceckh\n");
    t2.start();
  //      printf("\n\r time taken from interrupt to reach i2c fn %d",t2.read_us());
 }
 
 void FUNC_I2C_IR2CDMS()
-{
+{                                   // structure cannot sent via i2c so struct quantized to string n send to cdms n store in SD
         data_ready=0; 
         //char data[25];
         strcpy(hk_data,"hk_Data");
@@ -320,7 +321,7 @@
         //data = pcslave.getc();
         
         i2c_status=1;
-        i2c_data * i2c_data_s = i2c_data_send.alloc();
+        i2c_data * i2c_data_s = i2c_data_send.alloc();  // writing to queue _____ dynamic memory allocation
         strcpy(i2c_data_s->data,hk_data);
         i2c_data_s->length = 25;
         i2c_data_send.put(i2c_data_s); 
@@ -347,7 +348,7 @@
    
 
 //------------------------------------------------------------------------------------------------------------------------------------------------
-//SCHEDULER
+//SCHEDULER                   RTOS timer can be called periodically
 //------------------------------------------------------------------------------------------------------------------------------------------------
 int beacon_sc = 3;
 uint16_t schedcount=1;
@@ -355,7 +356,7 @@
 {
     //DRDY=0;
     printf("The value of i in scheduler is %d\n\r",schedcount);
-    if(schedcount == 65532)                         //to reset the counter
+    if(schedcount == 65532)                         //to reset the counter  // when it reaches here back to intial state
     {
         schedcount = 0;
     }
@@ -400,7 +401,7 @@
     //ptr_t_sc = new Thread(T_SC);
     ptr_t_wdt = new Thread(T_WDT);
   
-    interrupt_fault();                      // Dummy function called when a fault interrupt is detected
+    interrupt_fault();                      // Dummy function called when a fault interrupt is detected // intrrupt based fault
     
     ptr_t_acs->set_priority(osPriorityAboveNormal);
     ptr_t_i2c->set_priority(osPriorityHigh);
@@ -414,14 +415,14 @@
     printf("\n\r T_ACS priority is %d",ptr_t_acs->get_priority());
     printf("\n\r T_HK_ACQ priority is %d",ptr_t_hk_acq->get_priority());
     printf("\n\r T_BEA priority is %d",ptr_t_bea->get_priority());  
-    RtosTimer t_sc_timer(T_SC,osTimerPeriodic);
+    RtosTimer t_sc_timer(T_SC,osTimerPeriodic);     //values -3 tpo +3
     t_sc_timer.start(10000);
     printf("\n\r%f\n\r",t1.read()); 
      
    interrupt.rise(&FUNC_I2C_INT);                             //interrupt received from CDMS
     while(1)                                                   //required to prevent main from terminating
     {   
-        Thread::wait(5000);
+        Thread::wait(5000);                     // main by default a thread of priority 0
     }
     
 }