Dependencies:   BLE_API mbed

Revision:
8:c4130ea78471
Parent:
7:fb4c6c1dd3a9
Child:
9:501a9e6710d2
--- a/main.cpp	Wed Aug 10 06:47:28 2016 +0000
+++ b/main.cpp	Wed Aug 17 22:54:54 2016 +0000
@@ -40,12 +40,18 @@
 //static int32_t send_config = 0;
 static int32_t enviar_config_01 = 0;
 
+// variables semaforos que me permiten identificar si se debe o no enviar las tramas de configuracion de cada sensor.
 static int32_t sen_analog_in_5 = 0;
 static int32_t sen_digital_in_7 = 0;
 static int32_t act_analog_out_6 = 0;
 static int32_t act_analog_out_4 = 0;
 static int32_t act_analog_out_7 = 0;
 
+// Variables semaforo que me permiten identificar si se debe enviar la respuesta de confirmacion
+static int32_t resp_analog_out_6 = 0;
+static int32_t resp_digital_out_4 = 0;
+static int32_t resp_digital_out_7 = 0;
+
 BLE ble;
 
 // Digital IN
@@ -76,7 +82,7 @@
 static const uint8_t uart_base_uuid_rev[] = {0x1E, 0x94, 0x8D, 0xF1, 0x48, 0x31, 0x94, 0xBA, 0x75, 0x4C, 0x3E, 0x50, 0, 0, 0x3D, 0x71};
 
 // Trama de Configuracion de los Pines (a).
-static const uint8_t di_conf  [] = {0xC01,0xA1, 20, 0xA0, 40, 0xD1, 8, 0xD0, 90};        // length: 9
+static const uint8_t di_conf  [] = {0xC01,0xA1, 20, 0xA0, 40, 0xD1, 10, 0xD0, 90};        // length: 9
 
 uint8_t txPayload[TXRX_BUF_LEN] = {0,};
 uint8_t rxPayload[TXRX_BUF_LEN] = {0,};
@@ -139,9 +145,9 @@
         }
         pc.printf("Fin de la Lectura: \r\n");
 
-        // Desde el telefono desactiva el envio de tramas de la Configuracion general del mote.
+        // Desde el telefono desactiva el envio de tramas de las siguientes tramas.
         if (buf[0] == 0xDC && buf[1] == 0xC1) {              //  Dato Configuracion
-            enviar_config_01 = buf[2];           // Debe ser cero, hace que ya no se vuelva a enviar la conf general del mote
+            enviar_config_01 = buf[2];      // Debe ser cero, hace que ya no se vuelva a enviar la conf general del mote
             sen_analog_in_5 = 1;            // habilita al Sensor PT1000, para que envie su configuracion
         }
         //  PT 1000
@@ -151,18 +157,18 @@
         }
         //  sensor de luz
         if (buf[0] == 0xDC && buf[1] == 0x05 && buf[2] == 0xDD && buf[3] == 10) {
-            sen_digital_in_7 = buf[4];       // Hace que ya no se vuelva a enviar este tipo de configuracion
+            sen_digital_in_7 = buf[4];      // Hace que ya no se vuelva a enviar este tipo de configuracion
             act_analog_out_6 = 1;           //  habilita al atuador PWD, para que envie su configuracion
         }
         
         //  PWD
         if (buf[0] == 0xDC && buf[1] == 0xA && buf[2] == 0xAA && buf[3] == 40) {
-            act_analog_out_6 = buf[4];       // Hace que ya no se vuelva a enviar este tipo de configuracion
+            act_analog_out_6 = buf[4];      // Hace que ya no se vuelva a enviar este tipo de configuracion
             act_analog_out_4 = 1;           //  habilita al atuador Bomba, para que envie su configuracion
         }
         //  Actuador la Bomba
         if (buf[0] == 0xDC && buf[1] == 0xA && buf[2] == 0x0A && buf[3] == 80) {
-            act_analog_out_4 = buf[4];       // Hace que ya no se vuelva a enviar este tipo de configuracion
+            act_analog_out_4 = buf[4];      // Hace que ya no se vuelva a enviar este tipo de configuracion
             act_analog_out_7 = 1;           //  habilita al atuador Foco, para que envie su configuracion
         
         }
@@ -170,7 +176,21 @@
         if (buf[0] == 0xDC && buf[1] == 0xA && buf[2] == 0x0A && buf[3] == 10) {
             act_analog_out_7 = buf[4];       // Hace que ya no se vuelva a enviar este tipo de configuracion
         }
-
+        
+        //  Maneja las Tramas de confirmacion
+        //  PWD
+        if (buf[0] == 0xBB && buf[1] == 0xA0 && buf[2] == 40) {
+            resp_analog_out_6 = buf[3];      // Hace que ya no se vuelva a enviar este tipo de configuracion
+        }
+        //  Actuador la Bomba
+        if (buf[0] == 0xBB && buf[1] == 0xD0 && buf[2] == 80) {
+            resp_digital_out_4 = buf[3];      // Hace que ya no se vuelva a enviar este tipo de configuracion
+        
+        }
+        //  Actuador Foco
+        if (buf[0] == 0xBB && buf[1] == 0xD0 && buf[2] == 10) {
+            resp_digital_out_7 = buf[3];
+        }
 
         // Verifico si es una trama de Escitura.
         if(buf[0] == 0xEE) {
@@ -178,26 +198,31 @@
             if(buf[2] == 0xD0) {
                 if(buf[3] == 0x07 && buf[4] == 0x01) {
                     LED_SET_D7 = 1;
+                    resp_digital_out_7 = buf[1];        //  Paquete id
                 } else {
                     LED_SET_D7 = 0;
+                    resp_digital_out_7 = buf[1];        //  Paquete id
                 }
 
                 if(buf[3] == 0x04 && buf[4] == 0x01) {
                     LED_SET_D4 = 1;
                     analog_enabled = 1;
+                    resp_digital_out_4 = buf[1];        //  Paquete id
                 } else {
                     LED_SET_D4 = 0;
                     analog_enabled = 0;
+                    resp_digital_out_4 = buf[1];        //  Paquete id
                 }
-                // Verifico si es un signal Analog out
+            // Verifico si es un signal Analog out
             } else if(buf[2] == 0xA0) {
                 if(buf[3] == 0x06) {
                     float value = (float)buf[4]/255;
                     PWM = value;
                     pc.printf("PWM = %f  \r\n", value);
+                    resp_analog_out_6 = buf[1];        //  Paquete id
                 }
             }
-
+        
         } else if(buf[0] == 0xA0) {
             if(buf[1] == 0x01) {
                 analog_enabled = 1;
@@ -262,7 +287,7 @@
         buf[0] = (0xDD);                    //  Codigo de Lecturas de Datos.
         buf[1] = (0x00);                    //  Paquete
         buf[2] = (0xD1);                    //  A1| A0| D1| D0
-        buf[3] = (8);                       //  Posicion
+        buf[3] = (10);                       //  Posicion
         if (BUTTON == 1) {
             pc.printf("BUTTON == 1\r\n");
             LED_SET_D7 = 0;
@@ -278,7 +303,6 @@
     //pc.printf("enviar_config %d \r\n", enviar_config_01);
     if (enviar_config_01 == 1) {
         //  Envia la configuracion Genaral del Mote.
-        //wait_ms(tiempo_entre_envio_conf);
         pc.printf("enviar_config_01 %d \r\n", enviar_config_01);
         ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), di_conf, 9);
     }
@@ -287,11 +311,10 @@
     if (sen_analog_in_5 == 1) {
         conf_02[1] = (0x05);                 //  Categoria puede ser: A (Actuador) | 5 (Sensor)
         conf_02[2] = (0xAA);                 //  Tipo de Signal AA | DD
-        conf_02[3] = (0);                    //  Codigo del Ted
+        conf_02[3] = (37);                   //  Codigo del Ted
         conf_02[4] = (20);                   //  Posicion que ocupa en el mote
 
         pc.printf("Configuracion Detallada por Pin PT1000\r\n");
-        //wait_ms(tiempo_entre_envio_conf);
         ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), conf_02, 5);
     }
     
@@ -299,15 +322,14 @@
     if (sen_digital_in_7 == 1) {
         conf_02[1] = (0x05);                 //  Categoria puede ser: A (Actuador) | 5 (Sensor)
         conf_02[2] = (0xDD);                 //  Tipo de Signal AA | DD
-        conf_02[3] = (0);                    //  Codigo del Ted
+        conf_02[3] = (30);                    //  Codigo del Ted
         conf_02[4] = (10);                   //  Posicion que ocupa en el mote
 
         pc.printf("Configuracion Detallada por sensor de luz\r\n");
-        //wait_ms(tiempo_entre_envio_conf);
         ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), conf_02, 5);
     }
     
-    //  Envia la configuracion del PWD una sola vez.
+    //  Envia la configuracion del PWD.
     if (act_analog_out_6 == 1) {
         conf_02[1] = (0xA);                 //  Categoria puede ser: A (Actuador) | 5 (Sensor)
         conf_02[2] = (0xAA);                 //  Tipo de Signal AA | DD
@@ -315,23 +337,21 @@
         conf_02[4] = (40);                   //  Posicion que ocupa en el mote
 
         pc.printf("Configuracion Detallada por PWD\r\n");
-        //wait_ms(tiempo_entre_envio_conf);
         ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), conf_02, 5);
     }
     
-    //  Envia la configuracion del Actuador la Bomba una sola vez.
+    //  Envia la configuracion del Actuador la Bomba.
     if (act_analog_out_4 == 1) {
         conf_02[1] = (0xA);                 //  Categoria puede ser: A (Actuador) | 5 (Sensor)
-        conf_02[2] = (0x0A);                 //  Tipo de Signal AA | DD
-        conf_02[3] = (0);                    //  Codigo del Ted
-        conf_02[4] = (80);                   //  Posicion que ocupa en el mote
+        conf_02[2] = (0x0A);                //  Tipo de Signal AA | DD
+        conf_02[3] = (0);                   //  Codigo del Ted
+        conf_02[4] = (80);                  //  Posicion que ocupa en el mote
 
         pc.printf("Configuracion Detallada por Actuador la Bomba \r\n");
-        //wait_ms(tiempo_entre_envio_conf);
         ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), conf_02, 5);
     }
     
-    //  Envia la configuracion del Actuador Foco una sola vez.
+    //  Envia la configuracion del Actuador Foco.
     if (act_analog_out_7 == 1) {
         conf_02[1] = (0xA);                 //  Categoria puede ser: A (Actuador) | 5 (Sensor)
         conf_02[2] = (0x0A);                 //  Tipo de Signal AA | DD
@@ -339,9 +359,45 @@
         conf_02[4] = (10);                   //  Posicion que ocupa en el mote
 
         pc.printf("Configuracion Detallada por Actuador Foco \r\n");
-        //wait_ms(tiempo_entre_envio_conf);
         ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), conf_02, 5);
     }
+    
+    // Envia las tramas de confirmacion hacia el gateway.
+    if (resp_analog_out_6 != 0){
+        // Envia trama de lectura
+        buf[0] = (0xDD);                    //  Codigo
+        buf[1] = resp_analog_out_6;         //  paquete id
+        buf[2] = (0xA0);                    //  A1| A0| D1| D0
+        buf[3] = (40);                      //  Posicion
+        buf[4] = PWM;                       //  Valor
+        pc.printf("resp_analog_out_6 %d\r\n", resp_analog_out_6);  // Imprimo en terminal lo que esta enviando desde el mote.
+
+        ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf, 5);    // Para el RTD
+    }
+    
+    if (resp_digital_out_4 != 0){
+        // Envia trama de lectura
+        buf[0] = (0xDD);                    //  Codigo
+        buf[1] = resp_digital_out_4;         //  paquete id
+        buf[2] = (0xD0);                    //  A1| A0| D1| D0
+        buf[3] = (80);                      //  Posicion
+        buf[4] = LED_SET_D4;                       //  Valor
+        pc.printf("resp_digital_out_4 %d\r\n", resp_digital_out_4);  // Imprimo en terminal lo que esta enviando desde el mote.
+
+        ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf, 5);    // Para el RTD
+    }
+    
+    if (resp_digital_out_7 != 0){
+        // Envia trama de lectura
+        buf[0] = (0xDD);                    //  Codigo
+        buf[1] = resp_digital_out_7;         //  paquete id
+        buf[2] = (0xD0);                    //  A1| A0| D1| D0
+        buf[3] = (10);                      //  Posicion
+        buf[4] = LED_SET_D7;                       //  Valor
+        pc.printf("resp_digital_out_7 %d\r\n", resp_digital_out_7);  // Imprimo en terminal lo que esta enviando desde el mote.
+
+        ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf, 5);    // Para el RTD
+    }
 
     wait_ms(100);
 }