Bluetooth Low Energy based Firmware Over The Air with Mbed. Mbed part is a external processor of the IoT devices and communicate with a Bluetooth module. The Bluetooth module have to support BLE and implement BLE FOTA profile designed by ours. BLE FOTA profile specification is available from our GIT hub wiki(https://github.com/sevencore/BLEFOTA).

Dependencies:   mbed

Fork of mbed_fota by KIM HyoengJun

Bluetooth Low Energy based Firmware Over The Air with Mbed. Mbed part is a external processor of the IoT devices and communicate with a Bluetooth module. The Bluetooth module have to support BLE and implement BLE FOTA profile designed by ours. BLE FOTA profile specification is available from our GIT hub wiki.

Committer:
dudnwjs
Date:
Fri Jul 17 14:04:12 2015 +0000
Revision:
6:8dd20294b2aa
Parent:
5:e11b23f9aacc
Child:
7:3478c46cceef
EXT DEMO FILE OPEN COMPLETE

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dudnwjs 0:a1f6b1ba8a1e 1 #include "BleMsgHandler.h"
dudnwjs 3:1e70387e1337 2 #include "dialog_fota_config.h"
dudnwjs 4:60be78a172c2 3 #include "diss_task.h"
dudnwjs 5:e11b23f9aacc 4 #include "fota_server_task.h"
dudnwjs 4:60be78a172c2 5 #include "app_task.h"
dudnwjs 4:60be78a172c2 6
dudnwjs 6:8dd20294b2aa 7 extern "C" void mbed_reset();
dudnwjs 0:a1f6b1ba8a1e 8
dudnwjs 0:a1f6b1ba8a1e 9 namespace sevencore_fota{
dudnwjs 0:a1f6b1ba8a1e 10
dudnwjs 0:a1f6b1ba8a1e 11 BleMsgHandler::BleMsgHandler(Serial *_device)
dudnwjs 0:a1f6b1ba8a1e 12 {
dudnwjs 0:a1f6b1ba8a1e 13 print_flag = 0;
dudnwjs 0:a1f6b1ba8a1e 14 device = _device;
dudnwjs 2:dba344c91bce 15 SerialM = new SerialManager(_device);
dudnwjs 3:1e70387e1337 16 MsgQ = new MsgQueue(512);
dudnwjs 3:1e70387e1337 17 memset(recv_msg,0,512);
dudnwjs 0:a1f6b1ba8a1e 18 }
dudnwjs 0:a1f6b1ba8a1e 19
dudnwjs 0:a1f6b1ba8a1e 20 BleMsgHandler::BleMsgHandler(Serial *_device, Serial *_hostpc)
dudnwjs 0:a1f6b1ba8a1e 21 {
dudnwjs 0:a1f6b1ba8a1e 22 print_flag = 1;
dudnwjs 0:a1f6b1ba8a1e 23 device = _device;
dudnwjs 0:a1f6b1ba8a1e 24 hostpc = _hostpc;
dudnwjs 2:dba344c91bce 25 SerialM = new SerialManager(_device,_hostpc);
dudnwjs 3:1e70387e1337 26 MsgQ = new MsgQueue(512);
dudnwjs 3:1e70387e1337 27 memset(recv_msg,0,512);
dudnwjs 0:a1f6b1ba8a1e 28 }
dudnwjs 0:a1f6b1ba8a1e 29
dudnwjs 1:5cf3a6c969be 30 BleMsgHandler::~BleMsgHandler(void)
dudnwjs 1:5cf3a6c969be 31 {
dudnwjs 2:dba344c91bce 32 free(SerialM);
dudnwjs 3:1e70387e1337 33 free(MsgQ);
dudnwjs 1:5cf3a6c969be 34 }
dudnwjs 1:5cf3a6c969be 35
dudnwjs 0:a1f6b1ba8a1e 36 void BleMsgHandler::PrintTitle(void)
dudnwjs 0:a1f6b1ba8a1e 37 {
dudnwjs 0:a1f6b1ba8a1e 38 if( print_flag == 1 )
dudnwjs 5:e11b23f9aacc 39 hostpc->printf("\nSevencore Fota : BleMsg Handler Start\n");
dudnwjs 5:e11b23f9aacc 40 //SerialM->ReceiveToSerialTest();
dudnwjs 0:a1f6b1ba8a1e 41 }
dudnwjs 3:1e70387e1337 42
dudnwjs 3:1e70387e1337 43 void BleMsgHandler::BleMsgAlloc( unsigned short id,
dudnwjs 3:1e70387e1337 44 unsigned short dest_id,
dudnwjs 3:1e70387e1337 45 unsigned short src_id,
dudnwjs 3:1e70387e1337 46 unsigned short data_len,
dudnwjs 3:1e70387e1337 47 void *pdata,
dudnwjs 3:1e70387e1337 48 uint8_t *msg )
dudnwjs 3:1e70387e1337 49 {
dudnwjs 3:1e70387e1337 50 memset(msg,0,sizeof(msg));
dudnwjs 3:1e70387e1337 51 msg[0] = 0x05;
dudnwjs 3:1e70387e1337 52 memcpy(&msg[1],&id,sizeof(unsigned short));
dudnwjs 3:1e70387e1337 53 memcpy(&msg[1+1*sizeof(unsigned short)],&dest_id,sizeof(unsigned short));
dudnwjs 3:1e70387e1337 54 memcpy(&msg[1+2*sizeof(unsigned short)],&src_id,sizeof(unsigned short));
dudnwjs 3:1e70387e1337 55 memcpy(&msg[1+3*sizeof(unsigned short)],&data_len,sizeof(unsigned short));
dudnwjs 3:1e70387e1337 56 memcpy(&msg[1+4*sizeof(unsigned short)],pdata,data_len);
dudnwjs 3:1e70387e1337 57 }
dudnwjs 3:1e70387e1337 58
dudnwjs 3:1e70387e1337 59 int BleMsgHandler::BleSendMsg(uint8_t *msg, unsigned short size)
dudnwjs 3:1e70387e1337 60 {
dudnwjs 3:1e70387e1337 61 return SerialM->SendToSerial(msg,size);
dudnwjs 3:1e70387e1337 62 }
dudnwjs 3:1e70387e1337 63
dudnwjs 3:1e70387e1337 64 void BleMsgHandler::BleReceiveMsg(void)
dudnwjs 3:1e70387e1337 65 {
dudnwjs 3:1e70387e1337 66 int receive_size = -1;//default
dudnwjs 3:1e70387e1337 67 while(receive_size == -1)
dudnwjs 3:1e70387e1337 68 {
dudnwjs 3:1e70387e1337 69 receive_size = SerialM->ReceiveToSerial(recv_msg);
dudnwjs 3:1e70387e1337 70 }
dudnwjs 3:1e70387e1337 71
dudnwjs 3:1e70387e1337 72 uint8_t *msg;
dudnwjs 3:1e70387e1337 73 msg = new uint8_t[receive_size];
dudnwjs 3:1e70387e1337 74 memcpy(msg,recv_msg,receive_size);
dudnwjs 3:1e70387e1337 75 memset(recv_msg,0,512);
dudnwjs 3:1e70387e1337 76 MsgQ->EnQueue(msg);
dudnwjs 3:1e70387e1337 77 }
dudnwjs 3:1e70387e1337 78
dudnwjs 3:1e70387e1337 79 void BleMsgHandler::BleMsgHandle(void)
dudnwjs 3:1e70387e1337 80 {
dudnwjs 4:60be78a172c2 81 uint8_t *msg;
dudnwjs 4:60be78a172c2 82 ble_hdr msg_hdr;
dudnwjs 4:60be78a172c2 83 unsigned short paramPos = 1 + sizeof(msg_hdr);
dudnwjs 4:60be78a172c2 84
dudnwjs 3:1e70387e1337 85 if( print_flag == 1)
dudnwjs 3:1e70387e1337 86 hostpc->printf("Ble-Massage Handle Function!\n");
dudnwjs 4:60be78a172c2 87
dudnwjs 3:1e70387e1337 88 msg = (uint8_t*)MsgQ->DeQueue();
dudnwjs 3:1e70387e1337 89 memcpy(&msg_hdr, &msg[1], sizeof(msg_hdr));
dudnwjs 3:1e70387e1337 90
dudnwjs 3:1e70387e1337 91 if( print_flag == 1 )
dudnwjs 3:1e70387e1337 92 hostpc->printf(" handle msg : id(%d), dst(%d), src(%d), len(%d) !\n",
dudnwjs 3:1e70387e1337 93 msg_hdr.bType, msg_hdr.bDstid, msg_hdr.bSrcid, msg_hdr.bLength);
dudnwjs 3:1e70387e1337 94
dudnwjs 6:8dd20294b2aa 95 if (msg_hdr.bDstid != TASK_GTL){
dudnwjs 6:8dd20294b2aa 96 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 97 hostpc->printf("Dstid not TASK_GTL!\n");
dudnwjs 3:1e70387e1337 98 return;
dudnwjs 6:8dd20294b2aa 99 }
dudnwjs 3:1e70387e1337 100
dudnwjs 4:60be78a172c2 101 switch( msg_hdr.bType )
dudnwjs 4:60be78a172c2 102 {
dudnwjs 4:60be78a172c2 103 case GAPM_CMP_EVT:
dudnwjs 5:e11b23f9aacc 104 if( print_flag == 1)
dudnwjs 5:e11b23f9aacc 105 hostpc->printf("==> GAPM_CMP_EVT!!\n");
dudnwjs 4:60be78a172c2 106 HandleGapmCmpEvt(msg_hdr.bType,(struct gapm_cmp_evt *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid);
dudnwjs 4:60be78a172c2 107 break;
dudnwjs 4:60be78a172c2 108 case GAPM_DEVICE_READY_IND:
dudnwjs 5:e11b23f9aacc 109 if( print_flag == 1)
dudnwjs 5:e11b23f9aacc 110 hostpc->printf("==> GAPM_DEVICE_READY_IND!!\n");
dudnwjs 5:e11b23f9aacc 111 gapm_device_ready_ind_handler(msg_hdr.bType,(struct gap_ready_evt *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid,this);
dudnwjs 4:60be78a172c2 112 break;
dudnwjs 4:60be78a172c2 113 case GAPM_ADV_REPORT_IND:
dudnwjs 5:e11b23f9aacc 114 if( print_flag == 1)
dudnwjs 5:e11b23f9aacc 115 hostpc->printf("==> GAPM_ADV_REPORT_IND!!\n");
dudnwjs 4:60be78a172c2 116 gapm_adv_report_ind_handler(msg_hdr.bType,(struct gapm_adv_report_ind *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid);
dudnwjs 4:60be78a172c2 117 break;
dudnwjs 4:60be78a172c2 118 case GAPC_CMP_EVT:
dudnwjs 5:e11b23f9aacc 119 if( print_flag == 1)
dudnwjs 5:e11b23f9aacc 120 hostpc->printf("==> GAPC_CMP_EVT!!\n");
dudnwjs 4:60be78a172c2 121 HandleGapcCmpEvt(msg_hdr.bType,(struct gapc_cmp_evt *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid);
dudnwjs 4:60be78a172c2 122 break;
dudnwjs 5:e11b23f9aacc 123 case GAPC_CONNECTION_REQ_IND:
dudnwjs 5:e11b23f9aacc 124 if( print_flag == 1)
dudnwjs 5:e11b23f9aacc 125 hostpc->printf("==> GAPC_CONNECTION_REQ_IND!!\n");
dudnwjs 5:e11b23f9aacc 126 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 127 break;
dudnwjs 5:e11b23f9aacc 128 case GAPC_DISCONNECT_IND:
dudnwjs 5:e11b23f9aacc 129 if( print_flag == 1)
dudnwjs 5:e11b23f9aacc 130 hostpc->printf("==> GAPC_DISCONNECT_IND!!\n");
dudnwjs 5:e11b23f9aacc 131 gapc_disconnect_ind_handler(msg_hdr.bType,(struct gapc_disconnect_ind *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid,this);
dudnwjs 5:e11b23f9aacc 132 break;
dudnwjs 4:60be78a172c2 133 case DISS_CREATE_DB_CFM:
dudnwjs 5:e11b23f9aacc 134 if( print_flag == 1)
dudnwjs 5:e11b23f9aacc 135 hostpc->printf("==> DISS_CREATE_DB_CFM!!\n");
dudnwjs 4:60be78a172c2 136 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 137 break;
dudnwjs 4:60be78a172c2 138 case DISS_DISABLE_IND:
dudnwjs 5:e11b23f9aacc 139 if( print_flag == 1)
dudnwjs 5:e11b23f9aacc 140 hostpc->printf("==> DISS_DISABLE_IND!!\n");
dudnwjs 4:60be78a172c2 141 break;
dudnwjs 4:60be78a172c2 142 case DISS_ERROR_IND:
dudnwjs 4:60be78a172c2 143 if ( print_flag == 1)
dudnwjs 4:60be78a172c2 144 hostpc->printf("Rcved DISS_ERROR_IND Msg\n");
dudnwjs 4:60be78a172c2 145 break;
dudnwjs 5:e11b23f9aacc 146 case FOTA_SERVER_CREATE_DB_CFM:
dudnwjs 5:e11b23f9aacc 147 if( print_flag == 1)
dudnwjs 5:e11b23f9aacc 148 hostpc->printf("==> FOTA_SERVER_CREATE_DB_CFM!!\n");
dudnwjs 5:e11b23f9aacc 149 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 150 break;
dudnwjs 5:e11b23f9aacc 151 case FOTA_SERVER_DISABLE_IND:
dudnwjs 5:e11b23f9aacc 152 if( print_flag == 1)
dudnwjs 5:e11b23f9aacc 153 hostpc->printf("==> FOTA_SERVER_DISABLE_IND!!\n");
dudnwjs 5:e11b23f9aacc 154 break;
dudnwjs 5:e11b23f9aacc 155 case FOTA_SERVER_ERROR_IND:
dudnwjs 5:e11b23f9aacc 156 if ( print_flag == 1)
dudnwjs 5:e11b23f9aacc 157 hostpc->printf("Rcved FOTA_SERVER_ERROR_IND Msg\n");
dudnwjs 6:8dd20294b2aa 158 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 159 break;
dudnwjs 4:60be78a172c2 160 default:
dudnwjs 4:60be78a172c2 161 if( print_flag == 1)
dudnwjs 4:60be78a172c2 162 hostpc->printf("Massage Type Not Defined ! \n");
dudnwjs 4:60be78a172c2 163 break;
dudnwjs 4:60be78a172c2 164 }
dudnwjs 5:e11b23f9aacc 165 }//gapc_disconnect_ind_handler(GAPC_DISCONNECT_IND),(GAPC_CONNECTION_REQ_IND)gapc_connection_req_ind_handler
dudnwjs 3:1e70387e1337 166
dudnwjs 4:60be78a172c2 167 void BleMsgHandler::HandleGapmCmpEvt(unsigned short msgid,
dudnwjs 4:60be78a172c2 168 struct gapm_cmp_evt *param,
dudnwjs 4:60be78a172c2 169 unsigned short dest_id,
dudnwjs 4:60be78a172c2 170 unsigned short src_id)
dudnwjs 4:60be78a172c2 171 {
dudnwjs 4:60be78a172c2 172 if (param->status == CO_ERROR_NO_ERROR)
dudnwjs 4:60be78a172c2 173 {
dudnwjs 4:60be78a172c2 174 switch(param->operation)
dudnwjs 4:60be78a172c2 175 {
dudnwjs 4:60be78a172c2 176 case GAPM_NO_OP:// No operation.
dudnwjs 4:60be78a172c2 177 break;
dudnwjs 4:60be78a172c2 178 case GAPM_RESET:// Reset BLE subsystem: LL and HL.
dudnwjs 5:e11b23f9aacc 179 if( print_flag == 1)
dudnwjs 5:e11b23f9aacc 180 hostpc->printf("GAPM_RESET!! Start...\n");
dudnwjs 4:60be78a172c2 181 gapm_reset_completion_handler (msgid, (struct gapm_cmp_evt *)param, dest_id, src_id,this);
dudnwjs 4:60be78a172c2 182 break;
dudnwjs 4:60be78a172c2 183 case GAPM_CANCEL:// Cancel currently executed operation.
dudnwjs 6:8dd20294b2aa 184 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 185 hostpc->printf("GAPM_CANCEL\n");
dudnwjs 4:60be78a172c2 186 break;
dudnwjs 4:60be78a172c2 187 case GAPM_SET_DEV_CONFIG:// Set device configuration
dudnwjs 4:60be78a172c2 188 if( print_flag == 1)
dudnwjs 4:60be78a172c2 189 hostpc->printf("Adverting Start...\n");
dudnwjs 4:60be78a172c2 190 gapm_set_dev_config_completion_handler(msgid, (struct gapm_cmp_evt *)param, dest_id, src_id,this);
dudnwjs 4:60be78a172c2 191 break;
dudnwjs 4:60be78a172c2 192 case GAPM_SET_DEV_NAME: // Set device name
dudnwjs 6:8dd20294b2aa 193 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 194 hostpc->printf("GAPM_SET_DEV_NAME\n");
dudnwjs 4:60be78a172c2 195 break;
dudnwjs 4:60be78a172c2 196 case GAPM_SET_CHANNEL_MAP:// Set device channel map
dudnwjs 6:8dd20294b2aa 197 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 198 hostpc->printf("GAPM_SET_CHANNEL_MAP\n");
dudnwjs 4:60be78a172c2 199 break;
dudnwjs 4:60be78a172c2 200 case GAPM_GET_DEV_NAME:// Get Local device name
dudnwjs 6:8dd20294b2aa 201 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 202 hostpc->printf("GAPM_GET_DEV_NAME\n");
dudnwjs 4:60be78a172c2 203 break;
dudnwjs 4:60be78a172c2 204 case GAPM_GET_DEV_VERSION:// Get Local device version
dudnwjs 6:8dd20294b2aa 205 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 206 hostpc->printf("GAPM_GET_DEV_VERSION\n");
dudnwjs 4:60be78a172c2 207 break;
dudnwjs 4:60be78a172c2 208 case GAPM_GET_DEV_BDADDR:// Get Local device BD Address
dudnwjs 6:8dd20294b2aa 209 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 210 hostpc->printf("GAPM_GET_DEV_BDADDR\n");
dudnwjs 4:60be78a172c2 211 break;
dudnwjs 4:60be78a172c2 212 case GAPM_GET_WLIST_SIZE:// Get White List Size.
dudnwjs 6:8dd20294b2aa 213 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 214 hostpc->printf("GAPM_GET_WLIST_SIZE\n");
dudnwjs 4:60be78a172c2 215 break;
dudnwjs 4:60be78a172c2 216 case GAPM_ADD_DEV_IN_WLIST:// Add devices in white list.
dudnwjs 6:8dd20294b2aa 217 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 218 hostpc->printf("GAPM_ADD_DEV_IN_WLIST\n");
dudnwjs 4:60be78a172c2 219 break;
dudnwjs 4:60be78a172c2 220 case GAPM_RMV_DEV_FRM_WLIST:// Remove devices form white list.
dudnwjs 6:8dd20294b2aa 221 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 222 hostpc->printf("GAPM_RMV_DEV_FRM_WLIST\n");
dudnwjs 4:60be78a172c2 223 break;
dudnwjs 4:60be78a172c2 224 case GAPM_CLEAR_WLIST:// Clear all devices from white list.
dudnwjs 6:8dd20294b2aa 225 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 226 hostpc->printf("GAPM_CLEAR_WLIST\n");
dudnwjs 4:60be78a172c2 227 break;
dudnwjs 4:60be78a172c2 228 case GAPM_ADV_NON_CONN:// Start non connectable advertising
dudnwjs 4:60be78a172c2 229 case GAPM_ADV_UNDIRECT:// Start undirected connectable advertising
dudnwjs 4:60be78a172c2 230 case GAPM_ADV_DIRECT:// Start directed connectable advertising
dudnwjs 6:8dd20294b2aa 231 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 232 hostpc->printf("GAPM_ADV_~\n");
dudnwjs 6:8dd20294b2aa 233 break;
dudnwjs 4:60be78a172c2 234 case GAPM_SCAN_ACTIVE:// Start active scan operation
dudnwjs 4:60be78a172c2 235 case GAPM_SCAN_PASSIVE: // Start passive scan operation
dudnwjs 6:8dd20294b2aa 236 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 237 hostpc->printf("GAPM_SCAN_~\n");
dudnwjs 4:60be78a172c2 238 break;
dudnwjs 4:60be78a172c2 239 case GAPM_CONNECTION_DIRECT:// Direct connection operation
dudnwjs 6:8dd20294b2aa 240 //break;
dudnwjs 4:60be78a172c2 241 case GAPM_CONNECTION_AUTO:// Automatic connection operation
dudnwjs 6:8dd20294b2aa 242 //break;
dudnwjs 4:60be78a172c2 243 case GAPM_CONNECTION_SELECTIVE:// Selective connection operation
dudnwjs 6:8dd20294b2aa 244 //break;
dudnwjs 4:60be78a172c2 245 case GAPM_CONNECTION_NAME_REQUEST:// Name Request operation (requires to start a direct connection)
dudnwjs 6:8dd20294b2aa 246 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 247 hostpc->printf("GAPM_CONNECT_~\n");
dudnwjs 4:60be78a172c2 248 break;
dudnwjs 4:60be78a172c2 249 case GAPM_RESOLV_ADDR:// Resolve device address
dudnwjs 6:8dd20294b2aa 250 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 251 hostpc->printf("GAPM_RESOLV_ADDR\n");
dudnwjs 4:60be78a172c2 252 break;
dudnwjs 4:60be78a172c2 253 case GAPM_GEN_RAND_ADDR:// Generate a random address
dudnwjs 6:8dd20294b2aa 254 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 255 hostpc->printf("GAPM_GEN_RAND_ADDR\n");
dudnwjs 4:60be78a172c2 256 break;
dudnwjs 4:60be78a172c2 257 case GAPM_USE_ENC_BLOCK:// Use the controller's AES-128 block
dudnwjs 6:8dd20294b2aa 258 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 259 hostpc->printf("GAPM_USE_ENC_BLOCK\n");
dudnwjs 4:60be78a172c2 260 break;
dudnwjs 4:60be78a172c2 261 case GAPM_GEN_RAND_NB:// Generate a 8-byte random number
dudnwjs 6:8dd20294b2aa 262 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 263 hostpc->printf("GAPM_GEN_RAND_NB\n");
dudnwjs 4:60be78a172c2 264 break;
dudnwjs 4:60be78a172c2 265 case GAPM_DBG_GET_MEM_INFO:// Get memory usage
dudnwjs 6:8dd20294b2aa 266 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 267 hostpc->printf("GAPM_GAPM_DBG_GET_MEM_INFO\n");
dudnwjs 4:60be78a172c2 268 break;
dudnwjs 4:60be78a172c2 269 case GAPM_PLF_RESET:// Perform a platform reset
dudnwjs 6:8dd20294b2aa 270 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 271 hostpc->printf("GAPM_PLF_RESET\n");
dudnwjs 4:60be78a172c2 272 break;
dudnwjs 4:60be78a172c2 273 case GAPM_GET_DEV_ADV_TX_POWER:// Get device advertising power level
dudnwjs 6:8dd20294b2aa 274 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 275 hostpc->printf("GAPM_GET_DEV_ADV_TX_POWER\n");
dudnwjs 6:8dd20294b2aa 276 break;
dudnwjs 6:8dd20294b2aa 277 default:
dudnwjs 6:8dd20294b2aa 278 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 279 hostpc->printf("??????????????????????????\n");
dudnwjs 4:60be78a172c2 280 break;
dudnwjs 4:60be78a172c2 281 }
dudnwjs 6:8dd20294b2aa 282 }else{
dudnwjs 6:8dd20294b2aa 283 if( print_flag == 1)
dudnwjs 6:8dd20294b2aa 284 hostpc->printf("?status ERROR?\n");
dudnwjs 4:60be78a172c2 285 }
dudnwjs 4:60be78a172c2 286 }
dudnwjs 4:60be78a172c2 287
dudnwjs 4:60be78a172c2 288 void BleMsgHandler::HandleGapcCmpEvt(unsigned short msgid,
dudnwjs 4:60be78a172c2 289 struct gapc_cmp_evt *param,
dudnwjs 4:60be78a172c2 290 unsigned short dest_id,
dudnwjs 4:60be78a172c2 291 unsigned short src_id)
dudnwjs 4:60be78a172c2 292 {
dudnwjs 4:60be78a172c2 293 switch(param->operation)
dudnwjs 4:60be78a172c2 294 {
dudnwjs 4:60be78a172c2 295 case GAPC_NO_OP: // No operation
dudnwjs 4:60be78a172c2 296 break;
dudnwjs 4:60be78a172c2 297 case GAPC_DISCONNECT: // Disconnect link
dudnwjs 4:60be78a172c2 298 break;
dudnwjs 4:60be78a172c2 299 case GAPC_GET_PEER_NAME: // Retrieve name of peer device
dudnwjs 4:60be78a172c2 300 break;
dudnwjs 4:60be78a172c2 301 case GAPC_GET_PEER_VERSION: // Retrieve peer device version info.
dudnwjs 4:60be78a172c2 302 break;
dudnwjs 4:60be78a172c2 303 case GAPC_GET_PEER_FEATURES: // Retrieve peer device features.
dudnwjs 4:60be78a172c2 304 break;
dudnwjs 4:60be78a172c2 305 case GAPC_GET_CON_RSSI: // Retrieve connection RSSI.
dudnwjs 4:60be78a172c2 306 break;
dudnwjs 4:60be78a172c2 307 case GAPC_GET_PRIVACY: // Retrieve Privacy Info.
dudnwjs 4:60be78a172c2 308 break;
dudnwjs 4:60be78a172c2 309 case GAPC_GET_RECON_ADDR: // Retrieve Reconnection Address Value.
dudnwjs 4:60be78a172c2 310 break;
dudnwjs 4:60be78a172c2 311 case GAPC_SET_PRIVACY: // Set Privacy flag.
dudnwjs 4:60be78a172c2 312 break;
dudnwjs 4:60be78a172c2 313 case GAPC_SET_RECON_ADDR: // Set Reconnection Address Value.
dudnwjs 4:60be78a172c2 314 break;
dudnwjs 4:60be78a172c2 315 case GAPC_UPDATE_PARAMS: // Perform update of connection parameters.
dudnwjs 4:60be78a172c2 316 break;
dudnwjs 4:60be78a172c2 317 case GAPC_BOND: // Start bonding procedure.
dudnwjs 4:60be78a172c2 318 break;
dudnwjs 4:60be78a172c2 319 case GAPC_ENCRYPT: // Start encryption procedure.
dudnwjs 4:60be78a172c2 320 break;
dudnwjs 4:60be78a172c2 321 case GAPC_SECURITY_REQ: // Start security request procedure
dudnwjs 4:60be78a172c2 322 break;
dudnwjs 4:60be78a172c2 323 case GAPC_GET_CON_CHANNEL_MAP: // Retrieve Connection Channel MAP.
dudnwjs 4:60be78a172c2 324 break;
dudnwjs 4:60be78a172c2 325 }
dudnwjs 4:60be78a172c2 326 }
dudnwjs 3:1e70387e1337 327
dudnwjs 5:e11b23f9aacc 328 void BleMsgHandler::HostPcPrint(char *str)
dudnwjs 5:e11b23f9aacc 329 {
dudnwjs 5:e11b23f9aacc 330 if(print_flag == 1)
dudnwjs 5:e11b23f9aacc 331 hostpc->printf("%s",str);
dudnwjs 5:e11b23f9aacc 332 }
dudnwjs 5:e11b23f9aacc 333
dudnwjs 5:e11b23f9aacc 334 void BleMsgHandler::ReceiveToSerialTest(void)
dudnwjs 5:e11b23f9aacc 335 {
dudnwjs 5:e11b23f9aacc 336 SerialM->ReceiveToSerialTest();
dudnwjs 5:e11b23f9aacc 337 }
dudnwjs 6:8dd20294b2aa 338
dudnwjs 6:8dd20294b2aa 339 void BleMsgHandler::FirmwareDataReceive(unsigned short code_size, char *version)
dudnwjs 6:8dd20294b2aa 340 {
dudnwjs 6:8dd20294b2aa 341 unsigned short stored_data_cnt = 0;
dudnwjs 6:8dd20294b2aa 342 uint8_t databuf[FIRMWARE_DATA_FRAGMENT_SIZE]="/local/";
dudnwjs 6:8dd20294b2aa 343 if(print_flag == 1)
dudnwjs 6:8dd20294b2aa 344 hostpc->printf("\n!!File name = %s!! code_size = %d\n",version,code_size);
dudnwjs 6:8dd20294b2aa 345 memcpy(&databuf[7], version, 8);
dudnwjs 6:8dd20294b2aa 346 databuf[15] = '\0';
dudnwjs 6:8dd20294b2aa 347 hostpc->printf("\n!!name = %s!\n",databuf);
dudnwjs 6:8dd20294b2aa 348
dudnwjs 6:8dd20294b2aa 349
dudnwjs 6:8dd20294b2aa 350 DIR *d = opendir("/local/");
dudnwjs 6:8dd20294b2aa 351 struct dirent *p;
dudnwjs 6:8dd20294b2aa 352 while ((p = readdir(d)) != NULL)
dudnwjs 6:8dd20294b2aa 353 {
dudnwjs 6:8dd20294b2aa 354 if(print_flag == 1)
dudnwjs 6:8dd20294b2aa 355 hostpc->printf("%s\n", p->d_name);
dudnwjs 6:8dd20294b2aa 356 }
dudnwjs 6:8dd20294b2aa 357 closedir(d);
dudnwjs 6:8dd20294b2aa 358
dudnwjs 6:8dd20294b2aa 359 fp = fopen("/local/TEST.bin", "w");
dudnwjs 6:8dd20294b2aa 360
dudnwjs 6:8dd20294b2aa 361 SerialM->DataReceive(databuf,2);
dudnwjs 6:8dd20294b2aa 362 if(databuf[0] == 0x80 && databuf[1] == 0x46 ){
dudnwjs 6:8dd20294b2aa 363 if(print_flag == 1)
dudnwjs 6:8dd20294b2aa 364 hostpc->printf("\n!!Firmware Data Transmition Start!!\n");
dudnwjs 6:8dd20294b2aa 365 }else{
dudnwjs 6:8dd20294b2aa 366 if(print_flag == 1)
dudnwjs 6:8dd20294b2aa 367 hostpc->printf("\n!!Firmware Data Transmition ERROR!!\n");
dudnwjs 6:8dd20294b2aa 368 }
dudnwjs 6:8dd20294b2aa 369
dudnwjs 6:8dd20294b2aa 370 memset(databuf,0,FIRMWARE_DATA_FRAGMENT_SIZE);
dudnwjs 6:8dd20294b2aa 371
dudnwjs 6:8dd20294b2aa 372 while( stored_data_cnt < code_size )
dudnwjs 6:8dd20294b2aa 373 {
dudnwjs 6:8dd20294b2aa 374 if( code_size - stored_data_cnt >= FIRMWARE_DATA_FRAGMENT_SIZE ){
dudnwjs 6:8dd20294b2aa 375 SerialM->DataReceive(databuf,FIRMWARE_DATA_FRAGMENT_SIZE);
dudnwjs 6:8dd20294b2aa 376 fwrite(databuf, 1, FIRMWARE_DATA_FRAGMENT_SIZE, fp);
dudnwjs 6:8dd20294b2aa 377 stored_data_cnt += FIRMWARE_DATA_FRAGMENT_SIZE;
dudnwjs 6:8dd20294b2aa 378 }else{
dudnwjs 6:8dd20294b2aa 379 SerialM->DataReceive(databuf, code_size - stored_data_cnt);
dudnwjs 6:8dd20294b2aa 380 fwrite(databuf, 1, code_size - stored_data_cnt, fp);
dudnwjs 6:8dd20294b2aa 381 stored_data_cnt = code_size ;
dudnwjs 6:8dd20294b2aa 382 }
dudnwjs 6:8dd20294b2aa 383 memset(databuf,0,FIRMWARE_DATA_FRAGMENT_SIZE);
dudnwjs 6:8dd20294b2aa 384 }
dudnwjs 6:8dd20294b2aa 385
dudnwjs 6:8dd20294b2aa 386 SerialM->DataReceive(databuf,2);
dudnwjs 6:8dd20294b2aa 387 if(databuf[0] == 0x80 && databuf[1] == 0x46 ){
dudnwjs 6:8dd20294b2aa 388 if(print_flag == 1)
dudnwjs 6:8dd20294b2aa 389 hostpc->printf("\n!!Firmware Data Transmition END!!\n");
dudnwjs 6:8dd20294b2aa 390 }else{
dudnwjs 6:8dd20294b2aa 391 if(print_flag == 1)
dudnwjs 6:8dd20294b2aa 392 hostpc->printf("\n!!Firmware Data Transmition END ERROR!!\n");
dudnwjs 6:8dd20294b2aa 393 }
dudnwjs 6:8dd20294b2aa 394 fclose(fp);
dudnwjs 6:8dd20294b2aa 395 mbed_reset();
dudnwjs 6:8dd20294b2aa 396 }
dudnwjs 5:e11b23f9aacc 397
dudnwjs 5:e11b23f9aacc 398
dudnwjs 3:1e70387e1337 399
dudnwjs 0:a1f6b1ba8a1e 400
dudnwjs 0:a1f6b1ba8a1e 401 }//namespace