Fan Control Demo

Dependencies:   mbed-rtos mbed

Fork of mbed_fota by KIM HyoengJun

Committer:
dudnwjs
Date:
Tue Oct 13 06:33:39 2015 +0000
Revision:
13:e6b38e2ebda2
Parent:
12:e3d3676753cc
fan demo;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dudnwjs 8:9eec2c246a85 1 /**
dudnwjs 8:9eec2c246a85 2 * @file BleMsgHandler.cpp
dudnwjs 9:fcf91f563147 3 * @brief Ble message handler ( Ble message is communication mathod between Mbed and DA14583 )
dudnwjs 8:9eec2c246a85 4 * Copyright 2015 SEVENCORE Co., Ltd.
dudnwjs 8:9eec2c246a85 5 *
dudnwjs 8:9eec2c246a85 6 * @author HyeongJun Kim
dudnwjs 8:9eec2c246a85 7 * @version 1.0.0
dudnwjs 8:9eec2c246a85 8 * @date 2015-08-19
dudnwjs 8:9eec2c246a85 9 */
dudnwjs 8:9eec2c246a85 10
dudnwjs 0:a1f6b1ba8a1e 11 #include "BleMsgHandler.h"
dudnwjs 3:1e70387e1337 12 #include "dialog_fota_config.h"
dudnwjs 4:60be78a172c2 13 #include "diss_task.h"
dudnwjs 5:e11b23f9aacc 14 #include "fota_server_task.h"
dudnwjs 4:60be78a172c2 15 #include "app_task.h"
dudnwjs 12:e3d3676753cc 16 #include "fan_control_task.h"
dudnwjs 4:60be78a172c2 17
dudnwjs 8:9eec2c246a85 18 /**
dudnwjs 8:9eec2c246a85 19 ****************************************************************************************
dudnwjs 8:9eec2c246a85 20 * @addtogroup ext_fota module
dudnwjs 8:9eec2c246a85 21 * @brief Ble message Handler Class Mathod Definition.
dudnwjs 8:9eec2c246a85 22 *
dudnwjs 8:9eec2c246a85 23 * @{
dudnwjs 8:9eec2c246a85 24 ****************************************************************************************
dudnwjs 8:9eec2c246a85 25 */
dudnwjs 8:9eec2c246a85 26
dudnwjs 6:8dd20294b2aa 27 extern "C" void mbed_reset();
dudnwjs 0:a1f6b1ba8a1e 28
dudnwjs 0:a1f6b1ba8a1e 29 namespace sevencore_fota{
dudnwjs 8:9eec2c246a85 30
dudnwjs 8:9eec2c246a85 31 /**
dudnwjs 8:9eec2c246a85 32 ****************************************************************************************
dudnwjs 8:9eec2c246a85 33 * @brief Ble message Handler Constructor.
dudnwjs 8:9eec2c246a85 34 * @param[in] mbed serial class reference to device.
dudnwjs 8:9eec2c246a85 35 * @detail Create SerialManager instance and Create inner MsgQueue
dudnwjs 8:9eec2c246a85 36 ****************************************************************************************
dudnwjs 8:9eec2c246a85 37 */
dudnwjs 0:a1f6b1ba8a1e 38 BleMsgHandler::BleMsgHandler(Serial *_device)
dudnwjs 0:a1f6b1ba8a1e 39 {
dudnwjs 0:a1f6b1ba8a1e 40 print_flag = 0;
dudnwjs 0:a1f6b1ba8a1e 41 device = _device;
dudnwjs 2:dba344c91bce 42 SerialM = new SerialManager(_device);
dudnwjs 3:1e70387e1337 43 MsgQ = new MsgQueue(512);
dudnwjs 3:1e70387e1337 44 memset(recv_msg,0,512);
dudnwjs 0:a1f6b1ba8a1e 45 }
dudnwjs 8:9eec2c246a85 46 /**
dudnwjs 8:9eec2c246a85 47 ****************************************************************************************
dudnwjs 8:9eec2c246a85 48 * @brief Ble message Handler Constructor.
dudnwjs 8:9eec2c246a85 49 * @param[in] mbed serial class reference to device.
dudnwjs 8:9eec2c246a85 50 * @param[in] mbed serial class reference to hostpc.
dudnwjs 8:9eec2c246a85 51 * @detail Create SerialManager instance and Create inner MsgQueue
dudnwjs 8:9eec2c246a85 52 ****************************************************************************************
dudnwjs 8:9eec2c246a85 53 */
dudnwjs 0:a1f6b1ba8a1e 54 BleMsgHandler::BleMsgHandler(Serial *_device, Serial *_hostpc)
dudnwjs 0:a1f6b1ba8a1e 55 {
dudnwjs 0:a1f6b1ba8a1e 56 print_flag = 1;
dudnwjs 0:a1f6b1ba8a1e 57 device = _device;
dudnwjs 0:a1f6b1ba8a1e 58 hostpc = _hostpc;
dudnwjs 2:dba344c91bce 59 SerialM = new SerialManager(_device,_hostpc);
dudnwjs 3:1e70387e1337 60 MsgQ = new MsgQueue(512);
dudnwjs 8:9eec2c246a85 61 memset(recv_msg,0,512);
dudnwjs 0:a1f6b1ba8a1e 62 }
dudnwjs 8:9eec2c246a85 63 /**
dudnwjs 8:9eec2c246a85 64 ****************************************************************************************
dudnwjs 8:9eec2c246a85 65 * @brief Ble message Handler Destructor.
dudnwjs 8:9eec2c246a85 66 ****************************************************************************************
dudnwjs 8:9eec2c246a85 67 */
dudnwjs 1:5cf3a6c969be 68 BleMsgHandler::~BleMsgHandler(void)
dudnwjs 1:5cf3a6c969be 69 {
dudnwjs 2:dba344c91bce 70 free(SerialM);
dudnwjs 3:1e70387e1337 71 free(MsgQ);
dudnwjs 1:5cf3a6c969be 72 }
dudnwjs 8:9eec2c246a85 73 /**
dudnwjs 8:9eec2c246a85 74 ****************************************************************************************
dudnwjs 8:9eec2c246a85 75 * @brief Ble message handler Start title print function.
dudnwjs 8:9eec2c246a85 76 ****************************************************************************************
dudnwjs 8:9eec2c246a85 77 */
dudnwjs 0:a1f6b1ba8a1e 78 void BleMsgHandler::PrintTitle(void)
dudnwjs 0:a1f6b1ba8a1e 79 {
dudnwjs 0:a1f6b1ba8a1e 80 if( print_flag == 1 )
dudnwjs 5:e11b23f9aacc 81 hostpc->printf("\nSevencore Fota : BleMsg Handler Start\n");
dudnwjs 5:e11b23f9aacc 82 //SerialM->ReceiveToSerialTest();
dudnwjs 0:a1f6b1ba8a1e 83 }
dudnwjs 8:9eec2c246a85 84 /**
dudnwjs 8:9eec2c246a85 85 ****************************************************************************************
dudnwjs 8:9eec2c246a85 86 * @brief Create ble message.
dudnwjs 8:9eec2c246a85 87 * @param[in] 16byte ble message type. @ref structure 'ble_hdr' member 'bType'
dudnwjs 8:9eec2c246a85 88 * @param[in] 16byte ble dest task id(number). @ref structure 'ble_hdr' member 'bDstid'
dudnwjs 8:9eec2c246a85 89 * @param[in] 16byte ble source task id(number). @ref structure 'ble_hdr' member 'bSrcid'
dudnwjs 8:9eec2c246a85 90 * @param[in] 16byte ble message data length. @ref structure 'ble_hdr' member 'bLength'
dudnwjs 8:9eec2c246a85 91 * @param[in] input data pointer.
dudnwjs 8:9eec2c246a85 92 * @param[in] message alloc output pointer.
dudnwjs 8:9eec2c246a85 93 ****************************************************************************************
dudnwjs 8:9eec2c246a85 94 */
dudnwjs 3:1e70387e1337 95 void BleMsgHandler::BleMsgAlloc( unsigned short id,
dudnwjs 3:1e70387e1337 96 unsigned short dest_id,
dudnwjs 3:1e70387e1337 97 unsigned short src_id,
dudnwjs 3:1e70387e1337 98 unsigned short data_len,
dudnwjs 3:1e70387e1337 99 void *pdata,
dudnwjs 3:1e70387e1337 100 uint8_t *msg )
dudnwjs 3:1e70387e1337 101 {
dudnwjs 3:1e70387e1337 102 memset(msg,0,sizeof(msg));
dudnwjs 3:1e70387e1337 103 msg[0] = 0x05;
dudnwjs 3:1e70387e1337 104 memcpy(&msg[1],&id,sizeof(unsigned short));
dudnwjs 3:1e70387e1337 105 memcpy(&msg[1+1*sizeof(unsigned short)],&dest_id,sizeof(unsigned short));
dudnwjs 3:1e70387e1337 106 memcpy(&msg[1+2*sizeof(unsigned short)],&src_id,sizeof(unsigned short));
dudnwjs 3:1e70387e1337 107 memcpy(&msg[1+3*sizeof(unsigned short)],&data_len,sizeof(unsigned short));
dudnwjs 3:1e70387e1337 108 memcpy(&msg[1+4*sizeof(unsigned short)],pdata,data_len);
dudnwjs 3:1e70387e1337 109 }
dudnwjs 8:9eec2c246a85 110 /**
dudnwjs 8:9eec2c246a85 111 ****************************************************************************************
dudnwjs 8:9eec2c246a85 112 * @brief Send ble message to device.
dudnwjs 8:9eec2c246a85 113 * @param[in] sending message pointer
dudnwjs 8:9eec2c246a85 114 * @param[in] message size.
dudnwjs 8:9eec2c246a85 115 ****************************************************************************************
dudnwjs 8:9eec2c246a85 116 */
dudnwjs 3:1e70387e1337 117 int BleMsgHandler::BleSendMsg(uint8_t *msg, unsigned short size)
dudnwjs 3:1e70387e1337 118 {
dudnwjs 3:1e70387e1337 119 return SerialM->SendToSerial(msg,size);
dudnwjs 3:1e70387e1337 120 }
dudnwjs 8:9eec2c246a85 121 /**
dudnwjs 8:9eec2c246a85 122 ****************************************************************************************
dudnwjs 8:9eec2c246a85 123 * @brief Receive ble message from device.
dudnwjs 8:9eec2c246a85 124 * @detail Received message insert inner MsgQueue
dudnwjs 8:9eec2c246a85 125 ****************************************************************************************
dudnwjs 8:9eec2c246a85 126 */
dudnwjs 3:1e70387e1337 127 void BleMsgHandler::BleReceiveMsg(void)
dudnwjs 3:1e70387e1337 128 {
dudnwjs 3:1e70387e1337 129 int receive_size = -1;//default
dudnwjs 3:1e70387e1337 130 while(receive_size == -1)
dudnwjs 3:1e70387e1337 131 {
dudnwjs 3:1e70387e1337 132 receive_size = SerialM->ReceiveToSerial(recv_msg);
dudnwjs 3:1e70387e1337 133 }
dudnwjs 3:1e70387e1337 134
dudnwjs 3:1e70387e1337 135 uint8_t *msg;
dudnwjs 3:1e70387e1337 136 msg = new uint8_t[receive_size];
dudnwjs 3:1e70387e1337 137 memcpy(msg,recv_msg,receive_size);
dudnwjs 3:1e70387e1337 138 memset(recv_msg,0,512);
dudnwjs 3:1e70387e1337 139 MsgQ->EnQueue(msg);
dudnwjs 3:1e70387e1337 140 }
dudnwjs 8:9eec2c246a85 141 /**
dudnwjs 8:9eec2c246a85 142 ****************************************************************************************
dudnwjs 8:9eec2c246a85 143 * @brief Get message from MsgQueue and Execute corresponding function.
dudnwjs 8:9eec2c246a85 144 * @detail After get message, extract message type. Each message type connect corresponding function
dudnwjs 8:9eec2c246a85 145 ****************************************************************************************
dudnwjs 8:9eec2c246a85 146 */
dudnwjs 3:1e70387e1337 147 void BleMsgHandler::BleMsgHandle(void)
dudnwjs 3:1e70387e1337 148 {
dudnwjs 4:60be78a172c2 149 uint8_t *msg;
dudnwjs 4:60be78a172c2 150 ble_hdr msg_hdr;
dudnwjs 4:60be78a172c2 151 unsigned short paramPos = 1 + sizeof(msg_hdr);
dudnwjs 4:60be78a172c2 152
dudnwjs 3:1e70387e1337 153 if( print_flag == 1)
dudnwjs 8:9eec2c246a85 154 hostpc->printf("Ble-message Handle Function!\n");
dudnwjs 4:60be78a172c2 155
dudnwjs 3:1e70387e1337 156 msg = (uint8_t*)MsgQ->DeQueue();
dudnwjs 3:1e70387e1337 157 memcpy(&msg_hdr, &msg[1], sizeof(msg_hdr));
dudnwjs 3:1e70387e1337 158
dudnwjs 3:1e70387e1337 159 if( print_flag == 1 )
dudnwjs 3:1e70387e1337 160 hostpc->printf(" handle msg : id(%d), dst(%d), src(%d), len(%d) !\n",
dudnwjs 3:1e70387e1337 161 msg_hdr.bType, msg_hdr.bDstid, msg_hdr.bSrcid, msg_hdr.bLength);
dudnwjs 3:1e70387e1337 162
dudnwjs 6:8dd20294b2aa 163 if (msg_hdr.bDstid != TASK_GTL){
dudnwjs 6:8dd20294b2aa 164 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 165 hostpc->printf("Dstid not TASK_GTL!\n");
dudnwjs 3:1e70387e1337 166 return;
dudnwjs 6:8dd20294b2aa 167 }
dudnwjs 3:1e70387e1337 168
dudnwjs 4:60be78a172c2 169 switch( msg_hdr.bType )
dudnwjs 4:60be78a172c2 170 {
dudnwjs 4:60be78a172c2 171 case GAPM_CMP_EVT:
dudnwjs 5:e11b23f9aacc 172 if( print_flag == 1)
dudnwjs 5:e11b23f9aacc 173 hostpc->printf("==> GAPM_CMP_EVT!!\n");
dudnwjs 4:60be78a172c2 174 HandleGapmCmpEvt(msg_hdr.bType,(struct gapm_cmp_evt *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid);
dudnwjs 4:60be78a172c2 175 break;
dudnwjs 4:60be78a172c2 176 case GAPM_DEVICE_READY_IND:
dudnwjs 5:e11b23f9aacc 177 if( print_flag == 1)
dudnwjs 5:e11b23f9aacc 178 hostpc->printf("==> GAPM_DEVICE_READY_IND!!\n");
dudnwjs 5:e11b23f9aacc 179 gapm_device_ready_ind_handler(msg_hdr.bType,(struct gap_ready_evt *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid,this);
dudnwjs 4:60be78a172c2 180 break;
dudnwjs 4:60be78a172c2 181 case GAPM_ADV_REPORT_IND:
dudnwjs 5:e11b23f9aacc 182 if( print_flag == 1)
dudnwjs 5:e11b23f9aacc 183 hostpc->printf("==> GAPM_ADV_REPORT_IND!!\n");
dudnwjs 4:60be78a172c2 184 gapm_adv_report_ind_handler(msg_hdr.bType,(struct gapm_adv_report_ind *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid);
dudnwjs 4:60be78a172c2 185 break;
dudnwjs 4:60be78a172c2 186 case GAPC_CMP_EVT:
dudnwjs 5:e11b23f9aacc 187 if( print_flag == 1)
dudnwjs 5:e11b23f9aacc 188 hostpc->printf("==> GAPC_CMP_EVT!!\n");
dudnwjs 4:60be78a172c2 189 HandleGapcCmpEvt(msg_hdr.bType,(struct gapc_cmp_evt *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid);
dudnwjs 4:60be78a172c2 190 break;
dudnwjs 5:e11b23f9aacc 191 case GAPC_CONNECTION_REQ_IND:
dudnwjs 5:e11b23f9aacc 192 if( print_flag == 1)
dudnwjs 5:e11b23f9aacc 193 hostpc->printf("==> GAPC_CONNECTION_REQ_IND!!\n");
dudnwjs 5:e11b23f9aacc 194 gapc_connection_req_ind_handler(msg_hdr.bType,(struct gapc_connection_req_ind *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid,this);
dudnwjs 5:e11b23f9aacc 195 break;
dudnwjs 5:e11b23f9aacc 196 case GAPC_DISCONNECT_IND:
dudnwjs 5:e11b23f9aacc 197 if( print_flag == 1)
dudnwjs 5:e11b23f9aacc 198 hostpc->printf("==> GAPC_DISCONNECT_IND!!\n");
dudnwjs 5:e11b23f9aacc 199 gapc_disconnect_ind_handler(msg_hdr.bType,(struct gapc_disconnect_ind *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid,this);
dudnwjs 5:e11b23f9aacc 200 break;
dudnwjs 4:60be78a172c2 201 case DISS_CREATE_DB_CFM:
dudnwjs 5:e11b23f9aacc 202 if( print_flag == 1)
dudnwjs 5:e11b23f9aacc 203 hostpc->printf("==> DISS_CREATE_DB_CFM!!\n");
dudnwjs 4:60be78a172c2 204 diss_create_db_cfm_handler(msg_hdr.bType,(struct diss_create_db_cfm *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid,this);
dudnwjs 4:60be78a172c2 205 break;
dudnwjs 4:60be78a172c2 206 case DISS_DISABLE_IND:
dudnwjs 5:e11b23f9aacc 207 if( print_flag == 1)
dudnwjs 5:e11b23f9aacc 208 hostpc->printf("==> DISS_DISABLE_IND!!\n");
dudnwjs 4:60be78a172c2 209 break;
dudnwjs 4:60be78a172c2 210 case DISS_ERROR_IND:
dudnwjs 4:60be78a172c2 211 if ( print_flag == 1)
dudnwjs 4:60be78a172c2 212 hostpc->printf("Rcved DISS_ERROR_IND Msg\n");
dudnwjs 4:60be78a172c2 213 break;
dudnwjs 5:e11b23f9aacc 214 case FOTA_SERVER_CREATE_DB_CFM:
dudnwjs 5:e11b23f9aacc 215 if( print_flag == 1)
dudnwjs 5:e11b23f9aacc 216 hostpc->printf("==> FOTA_SERVER_CREATE_DB_CFM!!\n");
dudnwjs 5:e11b23f9aacc 217 fota_server_create_db_cfm_handler(msg_hdr.bType,(struct fota_server_create_db_cfm *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid,this);
dudnwjs 5:e11b23f9aacc 218 break;
dudnwjs 5:e11b23f9aacc 219 case FOTA_SERVER_DISABLE_IND:
dudnwjs 5:e11b23f9aacc 220 if( print_flag == 1)
dudnwjs 12:e3d3676753cc 221 hostpc->printf("==> FOTA_SERVER_DISABLE_IND!!\n");
dudnwjs 12:e3d3676753cc 222 break;
dudnwjs 12:e3d3676753cc 223 case FOTA_SERVER_DATA_FLASH_IND:
dudnwjs 12:e3d3676753cc 224 if ( print_flag == 1)
dudnwjs 12:e3d3676753cc 225 hostpc->printf("Rcved FOTA_SERVER_DATA_FLASH_IND Msg\n");
dudnwjs 12:e3d3676753cc 226 fota_server_data_flash_ind_handler(msg_hdr.bType,(struct fota_server_data_flash_ind *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid,this);
dudnwjs 5:e11b23f9aacc 227 break;
dudnwjs 5:e11b23f9aacc 228 case FOTA_SERVER_ERROR_IND:
dudnwjs 5:e11b23f9aacc 229 if ( print_flag == 1)
dudnwjs 5:e11b23f9aacc 230 hostpc->printf("Rcved FOTA_SERVER_ERROR_IND Msg\n");
dudnwjs 12:e3d3676753cc 231 break;
dudnwjs 12:e3d3676753cc 232 case FAN_CONTROL_CREATE_DB_CFM:
dudnwjs 12:e3d3676753cc 233 if ( print_flag == 1)
dudnwjs 12:e3d3676753cc 234 hostpc->printf("Rcved FAN_CONTROL_CREATE_DB_CFM Msg\n");
dudnwjs 12:e3d3676753cc 235 fan_control_create_db_cfm_handler(msg_hdr.bType,(struct fan_control_create_db_cfm *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid,this);
dudnwjs 12:e3d3676753cc 236 break;
dudnwjs 12:e3d3676753cc 237 case FAN_CONTROL_DISABLE_IND:
dudnwjs 12:e3d3676753cc 238 if( print_flag == 1)
dudnwjs 12:e3d3676753cc 239 hostpc->printf("==> FAN_CONTROL_DISABLE_IND!!\n");
dudnwjs 12:e3d3676753cc 240 break;
dudnwjs 12:e3d3676753cc 241 case FAN_CONTROL_COMMAND_IND:
dudnwjs 12:e3d3676753cc 242 if( print_flag == 1)
dudnwjs 12:e3d3676753cc 243 hostpc->printf("==> FAN_CONTROL_COMMAND_IND msg\n");
dudnwjs 12:e3d3676753cc 244 fan_control_command_ind_handler(msg_hdr.bType,(struct fan_control_command_ind *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid,this);
dudnwjs 12:e3d3676753cc 245 break;
dudnwjs 12:e3d3676753cc 246 case FAN_CONTROL_ERROR_IND:
dudnwjs 12:e3d3676753cc 247 if( print_flag == 1)
dudnwjs 12:e3d3676753cc 248 hostpc->printf("==> FAN_CONTROL_ERROR_IND !!\n");
dudnwjs 12:e3d3676753cc 249 break;
dudnwjs 4:60be78a172c2 250 default:
dudnwjs 4:60be78a172c2 251 if( print_flag == 1)
dudnwjs 8:9eec2c246a85 252 hostpc->printf("message Type Not Defined ! \n");
dudnwjs 4:60be78a172c2 253 break;
dudnwjs 4:60be78a172c2 254 }
dudnwjs 5:e11b23f9aacc 255 }//gapc_disconnect_ind_handler(GAPC_DISCONNECT_IND),(GAPC_CONNECTION_REQ_IND)gapc_connection_req_ind_handler
dudnwjs 8:9eec2c246a85 256 /**
dudnwjs 8:9eec2c246a85 257 ****************************************************************************************
dudnwjs 8:9eec2c246a85 258 * @brief GAPM Command Event Handler.
dudnwjs 8:9eec2c246a85 259 * @detail After get GAPM command, extract operation. Each operation connect corresponding function
dudnwjs 8:9eec2c246a85 260 ****************************************************************************************
dudnwjs 8:9eec2c246a85 261 */
dudnwjs 4:60be78a172c2 262 void BleMsgHandler::HandleGapmCmpEvt(unsigned short msgid,
dudnwjs 4:60be78a172c2 263 struct gapm_cmp_evt *param,
dudnwjs 4:60be78a172c2 264 unsigned short dest_id,
dudnwjs 4:60be78a172c2 265 unsigned short src_id)
dudnwjs 4:60be78a172c2 266 {
dudnwjs 4:60be78a172c2 267 if (param->status == CO_ERROR_NO_ERROR)
dudnwjs 4:60be78a172c2 268 {
dudnwjs 4:60be78a172c2 269 switch(param->operation)
dudnwjs 4:60be78a172c2 270 {
dudnwjs 4:60be78a172c2 271 case GAPM_NO_OP:// No operation.
dudnwjs 4:60be78a172c2 272 break;
dudnwjs 4:60be78a172c2 273 case GAPM_RESET:// Reset BLE subsystem: LL and HL.
dudnwjs 5:e11b23f9aacc 274 if( print_flag == 1)
dudnwjs 5:e11b23f9aacc 275 hostpc->printf("GAPM_RESET!! Start...\n");
dudnwjs 4:60be78a172c2 276 gapm_reset_completion_handler (msgid, (struct gapm_cmp_evt *)param, dest_id, src_id,this);
dudnwjs 4:60be78a172c2 277 break;
dudnwjs 4:60be78a172c2 278 case GAPM_CANCEL:// Cancel currently executed operation.
dudnwjs 6:8dd20294b2aa 279 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 280 hostpc->printf("GAPM_CANCEL\n");
dudnwjs 4:60be78a172c2 281 break;
dudnwjs 4:60be78a172c2 282 case GAPM_SET_DEV_CONFIG:// Set device configuration
dudnwjs 4:60be78a172c2 283 if( print_flag == 1)
dudnwjs 4:60be78a172c2 284 hostpc->printf("Adverting Start...\n");
dudnwjs 4:60be78a172c2 285 gapm_set_dev_config_completion_handler(msgid, (struct gapm_cmp_evt *)param, dest_id, src_id,this);
dudnwjs 4:60be78a172c2 286 break;
dudnwjs 4:60be78a172c2 287 case GAPM_SET_DEV_NAME: // Set device name
dudnwjs 6:8dd20294b2aa 288 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 289 hostpc->printf("GAPM_SET_DEV_NAME\n");
dudnwjs 4:60be78a172c2 290 break;
dudnwjs 4:60be78a172c2 291 case GAPM_SET_CHANNEL_MAP:// Set device channel map
dudnwjs 6:8dd20294b2aa 292 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 293 hostpc->printf("GAPM_SET_CHANNEL_MAP\n");
dudnwjs 4:60be78a172c2 294 break;
dudnwjs 4:60be78a172c2 295 case GAPM_GET_DEV_NAME:// Get Local device name
dudnwjs 6:8dd20294b2aa 296 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 297 hostpc->printf("GAPM_GET_DEV_NAME\n");
dudnwjs 4:60be78a172c2 298 break;
dudnwjs 4:60be78a172c2 299 case GAPM_GET_DEV_VERSION:// Get Local device version
dudnwjs 6:8dd20294b2aa 300 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 301 hostpc->printf("GAPM_GET_DEV_VERSION\n");
dudnwjs 4:60be78a172c2 302 break;
dudnwjs 4:60be78a172c2 303 case GAPM_GET_DEV_BDADDR:// Get Local device BD Address
dudnwjs 6:8dd20294b2aa 304 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 305 hostpc->printf("GAPM_GET_DEV_BDADDR\n");
dudnwjs 4:60be78a172c2 306 break;
dudnwjs 4:60be78a172c2 307 case GAPM_GET_WLIST_SIZE:// Get White List Size.
dudnwjs 6:8dd20294b2aa 308 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 309 hostpc->printf("GAPM_GET_WLIST_SIZE\n");
dudnwjs 4:60be78a172c2 310 break;
dudnwjs 4:60be78a172c2 311 case GAPM_ADD_DEV_IN_WLIST:// Add devices in white list.
dudnwjs 6:8dd20294b2aa 312 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 313 hostpc->printf("GAPM_ADD_DEV_IN_WLIST\n");
dudnwjs 4:60be78a172c2 314 break;
dudnwjs 4:60be78a172c2 315 case GAPM_RMV_DEV_FRM_WLIST:// Remove devices form white list.
dudnwjs 6:8dd20294b2aa 316 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 317 hostpc->printf("GAPM_RMV_DEV_FRM_WLIST\n");
dudnwjs 4:60be78a172c2 318 break;
dudnwjs 4:60be78a172c2 319 case GAPM_CLEAR_WLIST:// Clear all devices from white list.
dudnwjs 6:8dd20294b2aa 320 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 321 hostpc->printf("GAPM_CLEAR_WLIST\n");
dudnwjs 4:60be78a172c2 322 break;
dudnwjs 4:60be78a172c2 323 case GAPM_ADV_NON_CONN:// Start non connectable advertising
dudnwjs 4:60be78a172c2 324 case GAPM_ADV_UNDIRECT:// Start undirected connectable advertising
dudnwjs 4:60be78a172c2 325 case GAPM_ADV_DIRECT:// Start directed connectable advertising
dudnwjs 6:8dd20294b2aa 326 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 327 hostpc->printf("GAPM_ADV_~\n");
dudnwjs 6:8dd20294b2aa 328 break;
dudnwjs 4:60be78a172c2 329 case GAPM_SCAN_ACTIVE:// Start active scan operation
dudnwjs 4:60be78a172c2 330 case GAPM_SCAN_PASSIVE: // Start passive scan operation
dudnwjs 6:8dd20294b2aa 331 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 332 hostpc->printf("GAPM_SCAN_~\n");
dudnwjs 4:60be78a172c2 333 break;
dudnwjs 4:60be78a172c2 334 case GAPM_CONNECTION_DIRECT:// Direct connection operation
dudnwjs 6:8dd20294b2aa 335 //break;
dudnwjs 4:60be78a172c2 336 case GAPM_CONNECTION_AUTO:// Automatic connection operation
dudnwjs 6:8dd20294b2aa 337 //break;
dudnwjs 4:60be78a172c2 338 case GAPM_CONNECTION_SELECTIVE:// Selective connection operation
dudnwjs 6:8dd20294b2aa 339 //break;
dudnwjs 4:60be78a172c2 340 case GAPM_CONNECTION_NAME_REQUEST:// Name Request operation (requires to start a direct connection)
dudnwjs 6:8dd20294b2aa 341 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 342 hostpc->printf("GAPM_CONNECT_~\n");
dudnwjs 4:60be78a172c2 343 break;
dudnwjs 4:60be78a172c2 344 case GAPM_RESOLV_ADDR:// Resolve device address
dudnwjs 6:8dd20294b2aa 345 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 346 hostpc->printf("GAPM_RESOLV_ADDR\n");
dudnwjs 4:60be78a172c2 347 break;
dudnwjs 4:60be78a172c2 348 case GAPM_GEN_RAND_ADDR:// Generate a random address
dudnwjs 6:8dd20294b2aa 349 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 350 hostpc->printf("GAPM_GEN_RAND_ADDR\n");
dudnwjs 4:60be78a172c2 351 break;
dudnwjs 4:60be78a172c2 352 case GAPM_USE_ENC_BLOCK:// Use the controller's AES-128 block
dudnwjs 6:8dd20294b2aa 353 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 354 hostpc->printf("GAPM_USE_ENC_BLOCK\n");
dudnwjs 4:60be78a172c2 355 break;
dudnwjs 4:60be78a172c2 356 case GAPM_GEN_RAND_NB:// Generate a 8-byte random number
dudnwjs 6:8dd20294b2aa 357 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 358 hostpc->printf("GAPM_GEN_RAND_NB\n");
dudnwjs 4:60be78a172c2 359 break;
dudnwjs 4:60be78a172c2 360 case GAPM_DBG_GET_MEM_INFO:// Get memory usage
dudnwjs 6:8dd20294b2aa 361 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 362 hostpc->printf("GAPM_GAPM_DBG_GET_MEM_INFO\n");
dudnwjs 4:60be78a172c2 363 break;
dudnwjs 4:60be78a172c2 364 case GAPM_PLF_RESET:// Perform a platform reset
dudnwjs 6:8dd20294b2aa 365 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 366 hostpc->printf("GAPM_PLF_RESET\n");
dudnwjs 4:60be78a172c2 367 break;
dudnwjs 4:60be78a172c2 368 case GAPM_GET_DEV_ADV_TX_POWER:// Get device advertising power level
dudnwjs 6:8dd20294b2aa 369 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 370 hostpc->printf("GAPM_GET_DEV_ADV_TX_POWER\n");
dudnwjs 6:8dd20294b2aa 371 break;
dudnwjs 6:8dd20294b2aa 372 default:
dudnwjs 6:8dd20294b2aa 373 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 374 hostpc->printf("??????????????????????????\n");
dudnwjs 4:60be78a172c2 375 break;
dudnwjs 4:60be78a172c2 376 }
dudnwjs 6:8dd20294b2aa 377 }else{
dudnwjs 6:8dd20294b2aa 378 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 379 hostpc->printf("?status ERROR?\n");
dudnwjs 4:60be78a172c2 380 }
dudnwjs 4:60be78a172c2 381 }
dudnwjs 8:9eec2c246a85 382 /**
dudnwjs 8:9eec2c246a85 383 ****************************************************************************************
dudnwjs 8:9eec2c246a85 384 * @brief GAPC Command Event Handler.
dudnwjs 8:9eec2c246a85 385 * @detail After get GAPC command, extract operation. Each operation connect corresponding function
dudnwjs 8:9eec2c246a85 386 ****************************************************************************************
dudnwjs 8:9eec2c246a85 387 */
dudnwjs 4:60be78a172c2 388 void BleMsgHandler::HandleGapcCmpEvt(unsigned short msgid,
dudnwjs 4:60be78a172c2 389 struct gapc_cmp_evt *param,
dudnwjs 4:60be78a172c2 390 unsigned short dest_id,
dudnwjs 4:60be78a172c2 391 unsigned short src_id)
dudnwjs 4:60be78a172c2 392 {
dudnwjs 4:60be78a172c2 393 switch(param->operation)
dudnwjs 4:60be78a172c2 394 {
dudnwjs 4:60be78a172c2 395 case GAPC_NO_OP: // No operation
dudnwjs 4:60be78a172c2 396 break;
dudnwjs 4:60be78a172c2 397 case GAPC_DISCONNECT: // Disconnect link
dudnwjs 4:60be78a172c2 398 break;
dudnwjs 4:60be78a172c2 399 case GAPC_GET_PEER_NAME: // Retrieve name of peer device
dudnwjs 4:60be78a172c2 400 break;
dudnwjs 4:60be78a172c2 401 case GAPC_GET_PEER_VERSION: // Retrieve peer device version info.
dudnwjs 4:60be78a172c2 402 break;
dudnwjs 4:60be78a172c2 403 case GAPC_GET_PEER_FEATURES: // Retrieve peer device features.
dudnwjs 4:60be78a172c2 404 break;
dudnwjs 4:60be78a172c2 405 case GAPC_GET_CON_RSSI: // Retrieve connection RSSI.
dudnwjs 4:60be78a172c2 406 break;
dudnwjs 4:60be78a172c2 407 case GAPC_GET_PRIVACY: // Retrieve Privacy Info.
dudnwjs 4:60be78a172c2 408 break;
dudnwjs 4:60be78a172c2 409 case GAPC_GET_RECON_ADDR: // Retrieve Reconnection Address Value.
dudnwjs 4:60be78a172c2 410 break;
dudnwjs 4:60be78a172c2 411 case GAPC_SET_PRIVACY: // Set Privacy flag.
dudnwjs 4:60be78a172c2 412 break;
dudnwjs 4:60be78a172c2 413 case GAPC_SET_RECON_ADDR: // Set Reconnection Address Value.
dudnwjs 4:60be78a172c2 414 break;
dudnwjs 4:60be78a172c2 415 case GAPC_UPDATE_PARAMS: // Perform update of connection parameters.
dudnwjs 4:60be78a172c2 416 break;
dudnwjs 4:60be78a172c2 417 case GAPC_BOND: // Start bonding procedure.
dudnwjs 4:60be78a172c2 418 break;
dudnwjs 4:60be78a172c2 419 case GAPC_ENCRYPT: // Start encryption procedure.
dudnwjs 4:60be78a172c2 420 break;
dudnwjs 4:60be78a172c2 421 case GAPC_SECURITY_REQ: // Start security request procedure
dudnwjs 4:60be78a172c2 422 break;
dudnwjs 4:60be78a172c2 423 case GAPC_GET_CON_CHANNEL_MAP: // Retrieve Connection Channel MAP.
dudnwjs 4:60be78a172c2 424 break;
dudnwjs 4:60be78a172c2 425 }
dudnwjs 4:60be78a172c2 426 }
dudnwjs 8:9eec2c246a85 427 /**
dudnwjs 8:9eec2c246a85 428 ****************************************************************************************
dudnwjs 8:9eec2c246a85 429 * @brief Debugging message output to hostpc.
dudnwjs 8:9eec2c246a85 430 * @param[in] output char array pointer
dudnwjs 8:9eec2c246a85 431 ****************************************************************************************
dudnwjs 8:9eec2c246a85 432 */
dudnwjs 5:e11b23f9aacc 433 void BleMsgHandler::HostPcPrint(char *str)
dudnwjs 5:e11b23f9aacc 434 {
dudnwjs 5:e11b23f9aacc 435 if(print_flag == 1)
dudnwjs 5:e11b23f9aacc 436 hostpc->printf("%s",str);
dudnwjs 5:e11b23f9aacc 437 }
dudnwjs 8:9eec2c246a85 438 /**
dudnwjs 8:9eec2c246a85 439 ****************************************************************************************
dudnwjs 8:9eec2c246a85 440 * @brief Receive test method
dudnwjs 8:9eec2c246a85 441 ****************************************************************************************
dudnwjs 8:9eec2c246a85 442 */
dudnwjs 5:e11b23f9aacc 443 void BleMsgHandler::ReceiveToSerialTest(void)
dudnwjs 5:e11b23f9aacc 444 {
dudnwjs 5:e11b23f9aacc 445 SerialM->ReceiveToSerialTest();
dudnwjs 5:e11b23f9aacc 446 }
dudnwjs 8:9eec2c246a85 447 /**
dudnwjs 8:9eec2c246a85 448 ****************************************************************************************
dudnwjs 8:9eec2c246a85 449 * @brief Receive and Store Da14583 flash data.
dudnwjs 8:9eec2c246a85 450 * @param[in] mbed binary file size
dudnwjs 8:9eec2c246a85 451 * @param[in] mbed binary version string
dudnwjs 8:9eec2c246a85 452 ****************************************************************************************
dudnwjs 8:9eec2c246a85 453 */
dudnwjs 6:8dd20294b2aa 454 void BleMsgHandler::FirmwareDataReceive(unsigned short code_size, char *version)
dudnwjs 6:8dd20294b2aa 455 {
dudnwjs 6:8dd20294b2aa 456 unsigned short stored_data_cnt = 0;
dudnwjs 7:3478c46cceef 457 char path[20]="/local/";
dudnwjs 7:3478c46cceef 458 char databuf[FIRMWARE_DATA_FRAGMENT_SIZE]="/local/";
dudnwjs 6:8dd20294b2aa 459 if(print_flag == 1)
dudnwjs 6:8dd20294b2aa 460 hostpc->printf("\n!!File name = %s!! code_size = %d\n",version,code_size);
dudnwjs 7:3478c46cceef 461 strcat(databuf, version);
dudnwjs 7:3478c46cceef 462 strcat(databuf, ".BIN");
dudnwjs 6:8dd20294b2aa 463 hostpc->printf("\n!!name = %s!\n",databuf);
dudnwjs 6:8dd20294b2aa 464
dudnwjs 6:8dd20294b2aa 465
dudnwjs 6:8dd20294b2aa 466 DIR *d = opendir("/local/");
dudnwjs 6:8dd20294b2aa 467 struct dirent *p;
dudnwjs 6:8dd20294b2aa 468 while ((p = readdir(d)) != NULL)
dudnwjs 6:8dd20294b2aa 469 {
dudnwjs 7:3478c46cceef 470 hostpc->printf("%s,%d\n", p->d_name,strcmp(strchr(p->d_name,'.')+1,"BIN"));
dudnwjs 7:3478c46cceef 471 if( strcmp(strchr(p->d_name,'.')+1,"BIN") == 0 ){
dudnwjs 7:3478c46cceef 472 strcat(path,p->d_name);
dudnwjs 7:3478c46cceef 473 hostpc->printf("%s\n",path);
dudnwjs 7:3478c46cceef 474 remove(path);
dudnwjs 7:3478c46cceef 475 strcpy(path,"/local/");
dudnwjs 7:3478c46cceef 476 }
dudnwjs 6:8dd20294b2aa 477 }
dudnwjs 6:8dd20294b2aa 478 closedir(d);
dudnwjs 6:8dd20294b2aa 479
dudnwjs 7:3478c46cceef 480 fp = fopen(databuf, "w");
dudnwjs 6:8dd20294b2aa 481
dudnwjs 7:3478c46cceef 482 SerialM->DataReceive((uint8_t*)databuf,2);
dudnwjs 6:8dd20294b2aa 483 if(databuf[0] == 0x80 && databuf[1] == 0x46 ){
dudnwjs 6:8dd20294b2aa 484 if(print_flag == 1)
dudnwjs 6:8dd20294b2aa 485 hostpc->printf("\n!!Firmware Data Transmition Start!!\n");
dudnwjs 6:8dd20294b2aa 486 }else{
dudnwjs 6:8dd20294b2aa 487 if(print_flag == 1)
dudnwjs 6:8dd20294b2aa 488 hostpc->printf("\n!!Firmware Data Transmition ERROR!!\n");
dudnwjs 6:8dd20294b2aa 489 }
dudnwjs 6:8dd20294b2aa 490
dudnwjs 6:8dd20294b2aa 491 memset(databuf,0,FIRMWARE_DATA_FRAGMENT_SIZE);
dudnwjs 6:8dd20294b2aa 492
dudnwjs 6:8dd20294b2aa 493 while( stored_data_cnt < code_size )
dudnwjs 6:8dd20294b2aa 494 {
dudnwjs 6:8dd20294b2aa 495 if( code_size - stored_data_cnt >= FIRMWARE_DATA_FRAGMENT_SIZE ){
dudnwjs 7:3478c46cceef 496 SerialM->DataReceive((uint8_t*)databuf,FIRMWARE_DATA_FRAGMENT_SIZE);
dudnwjs 6:8dd20294b2aa 497 fwrite(databuf, 1, FIRMWARE_DATA_FRAGMENT_SIZE, fp);
dudnwjs 6:8dd20294b2aa 498 stored_data_cnt += FIRMWARE_DATA_FRAGMENT_SIZE;
dudnwjs 6:8dd20294b2aa 499 }else{
dudnwjs 7:3478c46cceef 500 SerialM->DataReceive((uint8_t*)databuf, code_size - stored_data_cnt);
dudnwjs 6:8dd20294b2aa 501 fwrite(databuf, 1, code_size - stored_data_cnt, fp);
dudnwjs 6:8dd20294b2aa 502 stored_data_cnt = code_size ;
dudnwjs 6:8dd20294b2aa 503 }
dudnwjs 6:8dd20294b2aa 504 memset(databuf,0,FIRMWARE_DATA_FRAGMENT_SIZE);
dudnwjs 6:8dd20294b2aa 505 }
dudnwjs 6:8dd20294b2aa 506
dudnwjs 7:3478c46cceef 507 SerialM->DataReceive((uint8_t*)databuf,2);
dudnwjs 6:8dd20294b2aa 508 if(databuf[0] == 0x80 && databuf[1] == 0x46 ){
dudnwjs 6:8dd20294b2aa 509 if(print_flag == 1)
dudnwjs 6:8dd20294b2aa 510 hostpc->printf("\n!!Firmware Data Transmition END!!\n");
dudnwjs 6:8dd20294b2aa 511 }else{
dudnwjs 6:8dd20294b2aa 512 if(print_flag == 1)
dudnwjs 6:8dd20294b2aa 513 hostpc->printf("\n!!Firmware Data Transmition END ERROR!!\n");
dudnwjs 6:8dd20294b2aa 514 }
dudnwjs 6:8dd20294b2aa 515 fclose(fp);
dudnwjs 8:9eec2c246a85 516 wait(5);
dudnwjs 8:9eec2c246a85 517 if(print_flag == 1)
dudnwjs 8:9eec2c246a85 518 hostpc->printf("\n!!RESET MBED!!\n");
dudnwjs 6:8dd20294b2aa 519 mbed_reset();
dudnwjs 6:8dd20294b2aa 520 }
dudnwjs 5:e11b23f9aacc 521
dudnwjs 5:e11b23f9aacc 522
dudnwjs 3:1e70387e1337 523
dudnwjs 0:a1f6b1ba8a1e 524
dudnwjs 0:a1f6b1ba8a1e 525 }//namespace
dudnwjs 8:9eec2c246a85 526 /// @} ext_fota module