BLE fota Robot Demo
Dependencies: mbed-rtos mbed mbed_fota_fan_control
Fork of mbed_fota_lamp_control by
Diff: dialog_fota/app_task.cpp
- 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;