BLE fota Robot Demo

Dependencies:   mbed-rtos mbed mbed_fota_fan_control

Fork of mbed_fota_lamp_control by KIM HyoengJun

Revision:
13:e714e2971c49
Parent:
12:e3d3676753cc
--- a/dialog_fota/app_task.cpp	Wed Sep 02 07:44:29 2015 +0000
+++ b/dialog_fota/app_task.cpp	Tue Oct 13 06:35:19 2015 +0000
@@ -11,11 +11,16 @@
 #include "app.h"
 #include "fota_server_task.h"
 #include "fan_control_task.h"
+#include "lamp_control_task.h"
 #include "mbed.h"
 
 extern DigitalOut port18;//mid
 extern DigitalOut port19;//low
 extern DigitalOut port20;//high
+
+extern DigitalOut port21;//low
+extern DigitalOut port22;//high
+
 extern uint8_t Timer_flag;
 extern uint32_t Residual_Time;
 
@@ -334,7 +339,8 @@
     if (app_env.state == APP_IDLE)
     {
         //app_set_mode(BMH);
-        app_fan_control_db_create(BMH);
+        //app_fan_control_db_create(BMH);
+        app_lamp_control_db_create(BMH);
     }
     
     return 0;
@@ -552,9 +558,170 @@
         }
     }
 }
+/**
+ ****************************************************************************************
+ * @brief Handles the LAMP_CONTROL_CREATE_DB_CFM message.
+ *
+ * @param[in] msgid     Id of the message received.
+ * @param[in] param     Pointer to the parameters of the message.
+ * @param[in] dest_id   ID of the receiving task instance (TASK_GAP).
+ * @param[in] src_id    ID of the sending task instance.
+ * @param[in] BMH     Ble Message Handler class reference.
+ *
+ * @return If the message was consumed or not.
+ ****************************************************************************************
+ */
+void lamp_control_create_db_cfm_handler(unsigned short msgid,
+                                  struct lamp_control_create_db_cfm *param,
+                                  unsigned short dest_id,
+                                  unsigned short src_id,
+                                  BleMsgHandler* BMH)
+{
+    uint8_t fota_normal = 0;
+    uint8_t fota_normal_len = sizeof(fota_normal);
+    if (param->status == CO_ERROR_NO_ERROR)
+    {
+        // Initialization All Characteristic
+        {
+            uint8_t *msg;
+            struct lamp_control_set_char_val_req power_state_val;
+            unsigned short msg_size = 1+sizeof(ble_hdr)+ sizeof(lamp_control_set_char_val_req)-(4-LAMP_CONTROL_MIN_SIZE);
+            // Fill in the parameter structure
+            power_state_val.char_code     = LAMP_CONTROL_POWER_STATE_CHAR;
+            power_state_val.val_len       = LAMP_CONTROL_MIN_SIZE;
+            memcpy(&power_state_val.val[0], &fota_normal, fota_normal_len);
+            
+            msg = new uint8_t[msg_size];
+            
+            BMH->BleMsgAlloc(LAMP_CONTROL_SET_CHAR_VAL_REQ,TASK_LAMP_CONTROL, TASK_GTL,sizeof(struct lamp_control_set_char_val_req)-(4-FAN_CONTROL_MIN_SIZE),&power_state_val,msg );
+            // Send the message
+            BMH->BleSendMsg(msg,msg_size);
+            free(msg);
+        }
+        {
+            uint8_t *msg;
+            struct lamp_control_set_char_val_req light_intensity_val;
+            unsigned short msg_size = 1+sizeof(ble_hdr)+ sizeof(lamp_control_set_char_val_req)-(4-LAMP_CONTROL_MIN_SIZE);
+            // Fill in the parameter structure
+            light_intensity_val.char_code     = LAMP_CONTROL_LIGHT_INTENSITY_CHAR;
+            light_intensity_val.val_len       = LAMP_CONTROL_MIN_SIZE;
+            memcpy(&light_intensity_val.val[0], &fota_normal, fota_normal_len);
+            
+            msg = new uint8_t[msg_size];
+            
+            BMH->BleMsgAlloc(LAMP_CONTROL_SET_CHAR_VAL_REQ,TASK_LAMP_CONTROL, TASK_GTL,sizeof(struct lamp_control_set_char_val_req)-(4-LAMP_CONTROL_MIN_SIZE),&light_intensity_val,msg );
+            // Send the message
+            BMH->BleSendMsg(msg,msg_size);
+            free(msg);
+        }
+        {
+            uint8_t *msg;
+            struct lamp_control_set_char_val_req lamp_timer_val;
+            unsigned short msg_size = 1+sizeof(ble_hdr)+ sizeof(lamp_control_set_char_val_req)-(4-LAMP_CONTROL_MIN_SIZE);
+            // Fill in the parameter structure
+            lamp_timer_val.char_code     = LAMP_CONTROL_LAMP_TIMER_CHAR;
+            lamp_timer_val.val_len       = LAMP_CONTROL_MIN_SIZE;
+            memcpy(&lamp_timer_val.val[0], &fota_normal, fota_normal_len);
+            
+            msg = new uint8_t[msg_size];
+            
+            BMH->BleMsgAlloc(LAMP_CONTROL_SET_CHAR_VAL_REQ,TASK_LAMP_CONTROL, TASK_GTL,sizeof(struct lamp_control_set_char_val_req)-(4-LAMP_CONTROL_MIN_SIZE),&lamp_timer_val,msg );
+            // Send the message
+            BMH->BleSendMsg(msg,msg_size);
+            free(msg);
+        }
+        {
+            uint8_t *msg;
+            struct lamp_control_set_char_val_req residual_time_val;
+            unsigned short msg_size = 1+sizeof(ble_hdr)+ sizeof(lamp_control_set_char_val_req)-(4-LAMP_CONTROL_MAX_SIZE);
+            // Fill in the parameter structure
+            residual_time_val.char_code     = LAMP_CONTROL_RESIDUAL_TIME_CHAR;
+            residual_time_val.val_len       = LAMP_CONTROL_MAX_SIZE;
+            memcpy(&residual_time_val.val[0], &fota_normal, fota_normal_len*4);
+            
+            msg = new uint8_t[msg_size];
+            
+            BMH->BleMsgAlloc(LAMP_CONTROL_SET_CHAR_VAL_REQ,TASK_LAMP_CONTROL, TASK_GTL,sizeof(struct lamp_control_set_char_val_req)-(4-FAN_CONTROL_MAX_SIZE),&residual_time_val,msg );
+            // Send the message
+            BMH->BleSendMsg(msg,msg_size);
+            free(msg);
+        }
+    }
+    if (app_env.state == APP_IDLE)
+    {
+        app_set_mode(BMH);
+    }
+}
 
 /**
  ****************************************************************************************
+ * @brief Handles the LAMP_CONTROL_COMMAND_IND message.
+ *
+ * @param[in] msgid     Id of the message received.
+ * @param[in] param     Pointer to the parameters of the message.
+ * @param[in] dest_id   ID of the receiving task instance (TASK_GAP).
+ * @param[in] src_id    ID of the sending task instance.
+ * @param[in] BMH     Ble Message Handler class reference.
+ *
+ * @return If the message was consumed or not.
+ ****************************************************************************************
+ */
+void lamp_control_command_ind_handler(unsigned short msgid,
+                                  struct lamp_control_command_ind *param,
+                                  unsigned short dest_id,
+                                  unsigned short src_id,
+                                  BleMsgHandler* BMH)
+{
+    char str[30] = "\nLAMP remote control START!!\n";
+    BMH->HostPcPrint(str);
+    if( param->char_code == LAMP_CONTROL_POWER_STATE_CHAR){
+        if(param->command == 0){
+            Timer_flag = 0;
+            Residual_Time = 0;
+            port21 = 0;
+            port22 = 0;
+        }
+        if(param->command == 1){
+            if( port21 == 0 && port22 == 0 )
+                port21 = 1;
+        }
+    }else if( param->char_code == LAMP_CONTROL_LIGHT_INTENSITY_CHAR){
+        if( param->command == 1 ){ //low
+            port21 = 1;
+            port22 = 0;
+        }
+        else if( param->command == 2 ){ //mid
+            port21 = 0;
+            port22 = 1;
+        } 
+    }else if( param->char_code == LAMP_CONTROL_LAMP_TIMER_CHAR){
+        Timer_flag = param->command;
+    }else if( param->char_code == LAMP_CONTROL_RESIDUAL_TIME_CHAR){
+        Residual_Time = param->residual_time;
+        {
+                uint8_t fota_normal = 0;
+                uint8_t *msg;
+                struct lamp_control_set_char_val_req char_set_req;
+                unsigned short msg_size = 1+sizeof(ble_hdr)+ sizeof(lamp_control_set_char_val_req)-(4-LAMP_CONTROL_MIN_SIZE);
+                // Fill in the parameter structure
+                char_set_req.char_code     = LAMP_CONTROL_POWER_STATE_CHAR;
+                char_set_req.val_len       = LAMP_CONTROL_MIN_SIZE;
+                memcpy(&char_set_req.val[0], &fota_normal, sizeof(fota_normal));
+                
+                msg = new uint8_t[msg_size];
+                
+                BMH->BleMsgAlloc(LAMP_CONTROL_SET_CHAR_VAL_REQ
+                    ,TASK_LAMP_CONTROL, TASK_GTL
+                    ,sizeof(struct fan_control_set_char_val_req)-(4-LAMP_CONTROL_MIN_SIZE)
+                    ,&char_set_req,msg );
+                // Send the message
+                BMH->BleSendMsg(msg,msg_size);                
+                free(msg);
+        }
+    }
+}
+/**
+ ****************************************************************************************
  * @brief Handles ready indication from the GAP.
  *
  * @param[in] msgid     Id of the message received.
@@ -670,7 +837,8 @@
     
     app_dis_enable(&device,BMH);
     app_fota_server_enable(&device,BMH);
-    app_fan_control_enable(&device,BMH);
+    //app_fan_control_enable(&device,BMH);
+    app_lamp_control_enable(&device,BMH);
     app_connect_confirm(GAP_AUTH_REQ_NO_MITM_NO_BOND,&device,BMH);
    
     return 0;