not workin

Dependencies:   mbed-rtos mbed

Fork of BAE_FRDM_INTEGRATION by green rosh

Revision:
9:6bcc165ee457
Parent:
8:667fbc82d634
--- a/main.cpp	Mon Dec 15 05:58:23 2014 +0000
+++ b/main.cpp	Tue Dec 16 11:37:09 2014 +0000
@@ -220,6 +220,105 @@
     }    
 }
 */
+
+//------------------------------------------------------------------------------------------------------------------------------------------------
+//I2C SLAVE
+//------------------------------------------------------------------------------------------------------------------------------------------------
+typedef struct
+{
+    char data;          // To avoid dynamic memory allocation
+    int length;
+}i2c_data;
+
+Mail<i2c_data,16> i2c_data_receive;           
+Mail<i2c_data,16> i2c_data_send;   
+
+InterruptIn interrupt(D9);  
+InterruptIn master_reset(D11);                 
+DigitalOut data_ready(D10);    
+int reset =0;
+int i2c_status = 0;     
+
+
+
+void FUNC_INT()
+{
+  // char * data = new char;
+   //*data = 'a';
+   //printf("\nInterrupt from master detected\n");
+   reset =0;
+   ptr_t_i2c->signal_set(0x1);
+  // 
+   //delete data;
+}
+
+void FUNC_RESET()
+{
+    reset =1;
+}
+
+void ir2master()
+{
+        
+        char data = 'a';
+        //strcpy(data,"sakthi ");
+        //strcat(data,"priya");
+       /* 
+        strcpy(hk_data,Sensor.Temperature);                                                 //Sending to CDMS via I2C
+        strcat(hk_data,Sensor.Current); 
+        strcat(hk_data,Sensor.Voltage);
+        strcat(hk_data,sfaultpoll);
+        strcat(hk_data,sfaultir);
+        strcat(hk_data,spower_mode);
+        strcat(hk_data,ffp);*/
+        data_ready=0;
+        //data = pcslave.getc();
+        reset =0;
+        i2c_status=1;
+        i2c_data * i2c_data_s = i2c_data_send.alloc();
+        i2c_data_s->data = data;
+        i2c_data_s->length = 1;
+        i2c_data_send.put(i2c_data_s); 
+        data_ready=1;
+        //temp = i2c_status;
+}
+
+void T_I2C_BAE(void const * args)
+{
+    char data_send,data_receive;
+    //data_send = 'a';
+    while(1)
+    {
+        Thread::signal_wait(0x1);
+        printf("\ndetected interrupt\n");
+        if(i2c_status == 0 && reset==0)
+        {
+            
+            FUNC_I2C_WRITE2CDMS(&data_receive,1);
+            //printf("\n Data received from CDMS is %c\n",data_receive);
+            i2c_data * i2c_data_r = i2c_data_receive.alloc();
+            i2c_data_r->data = data_receive;
+            i2c_data_r->length = 1;
+            i2c_data_receive.put(i2c_data_r);
+        }
+        else if(i2c_status ==1 && reset ==1)
+        {
+            osEvent evt = i2c_data_send.get();
+            if (evt.status == osEventMail) 
+            {
+                i2c_data *i2c_data_s = (i2c_data*)evt.value.p;
+                //printf("\nData read from CDMS is %c\n",i2c_data_r->data);
+                data_send = i2c_data_s -> data;
+                FUNC_I2C_WRITE2CDMS(&data_send,1);
+                printf("\nData sent to CDMS is %c\n",data_send);
+                i2c_data_send.free(i2c_data_s);
+                i2c_status = 0;
+                //delete i2c_data_r;
+            }
+        }   
+    }
+}
+
 //------------------------------------------------------------------------------------------------------------------------------------------------
 //SCHEDULER
 //------------------------------------------------------------------------------------------------------------------------------------------------
@@ -236,7 +335,7 @@
     
     if(schedcount%1==0)
     {
-        ptr_t_acs -> signal_set(0x1);
+        //ptr_t_acs -> signal_set(0x1);
     }
     if(schedcount%2==0)
     {
@@ -249,7 +348,7 @@
         if(beac_flag==0)
         {
             
-            ptr_t_bea -> signal_set(0x3);
+           // ptr_t_bea -> signal_set(0x3);
         }
     }
     schedcount++;
@@ -288,8 +387,11 @@
     t_sc_timer.start(10000);
     printf("\n%f\n",t1.read()); 
         
+    master_reset.fall(&FUNC_RESET);
+    interrupt.rise(&FUNC_INT);
     while(1)
     {   
+        ir2master();
         Thread::wait(10000);
         ;
     }