Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbed_fota by
ext_fota/BleMsgHandler.cpp
- Committer:
- dudnwjs
- Date:
- 2015-06-24
- Revision:
- 4:60be78a172c2
- Parent:
- 3:1e70387e1337
- Child:
- 5:e11b23f9aacc
File content as of revision 4:60be78a172c2:
#include "BleMsgHandler.h"
#include "dialog_fota_config.h"
#include "diss_task.h"
#include "app_task.h"
namespace sevencore_fota{
BleMsgHandler::BleMsgHandler(Serial *_device)
{
print_flag = 0;
device = _device;
SerialM = new SerialManager(_device);
MsgQ = new MsgQueue(512);
memset(recv_msg,0,512);
}
BleMsgHandler::BleMsgHandler(Serial *_device, Serial *_hostpc)
{
print_flag = 1;
device = _device;
hostpc = _hostpc;
SerialM = new SerialManager(_device,_hostpc);
MsgQ = new MsgQueue(512);
memset(recv_msg,0,512);
}
BleMsgHandler::~BleMsgHandler(void)
{
free(SerialM);
free(MsgQ);
}
void BleMsgHandler::PrintTitle(void)
{
if( print_flag == 1 )
hostpc->printf("Sevencore Fota : BleMsg Handler Start\n");
}
void BleMsgHandler::BleMsgAlloc( unsigned short id,
unsigned short dest_id,
unsigned short src_id,
unsigned short data_len,
void *pdata,
uint8_t *msg )
{
memset(msg,0,sizeof(msg));
msg[0] = 0x05;
memcpy(&msg[1],&id,sizeof(unsigned short));
memcpy(&msg[1+1*sizeof(unsigned short)],&dest_id,sizeof(unsigned short));
memcpy(&msg[1+2*sizeof(unsigned short)],&src_id,sizeof(unsigned short));
memcpy(&msg[1+3*sizeof(unsigned short)],&data_len,sizeof(unsigned short));
memcpy(&msg[1+4*sizeof(unsigned short)],pdata,data_len);
}
int BleMsgHandler::BleSendMsg(uint8_t *msg, unsigned short size)
{
return SerialM->SendToSerial(msg,size);
}
void BleMsgHandler::BleReceiveMsg(void)
{
int receive_size = -1;//default
while(receive_size == -1)
{
receive_size = SerialM->ReceiveToSerial(recv_msg);
}
uint8_t *msg;
msg = new uint8_t[receive_size];
memcpy(msg,recv_msg,receive_size);
memset(recv_msg,0,512);
MsgQ->EnQueue(msg);
}
void BleMsgHandler::BleMsgHandle(void)
{
uint8_t *msg;
ble_hdr msg_hdr;
unsigned short paramPos = 1 + sizeof(msg_hdr);
if( print_flag == 1)
hostpc->printf("Ble-Massage Handle Function!\n");
msg = (uint8_t*)MsgQ->DeQueue();
memcpy(&msg_hdr, &msg[1], sizeof(msg_hdr));
if( print_flag == 1 )
hostpc->printf(" handle msg : id(%d), dst(%d), src(%d), len(%d) !\n",
msg_hdr.bType, msg_hdr.bDstid, msg_hdr.bSrcid, msg_hdr.bLength);
if (msg_hdr.bDstid != TASK_GTL)
return;
switch( msg_hdr.bType )
{
case GAPM_CMP_EVT:
HandleGapmCmpEvt(msg_hdr.bType,(struct gapm_cmp_evt *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid);
break;
case GAPM_DEVICE_READY_IND:
gapm_device_ready_ind_handler(msg_hdr.bType,(void *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid,this);
break;
case GAPM_ADV_REPORT_IND:
gapm_adv_report_ind_handler(msg_hdr.bType,(struct gapm_adv_report_ind *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid);
break;
case GAPC_CMP_EVT:
HandleGapcCmpEvt(msg_hdr.bType,(struct gapc_cmp_evt *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid);
break;
case DISS_CREATE_DB_CFM:
diss_create_db_cfm_handler(msg_hdr.bType,(struct diss_create_db_cfm *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid,this);
break;
case DISS_DISABLE_IND:
break;
case DISS_ERROR_IND:
if ( print_flag == 1)
hostpc->printf("Rcved DISS_ERROR_IND Msg\n");
break;
default:
if( print_flag == 1)
hostpc->printf("Massage Type Not Defined ! \n");
break;
}
}
void BleMsgHandler::HandleGapmCmpEvt(unsigned short msgid,
struct gapm_cmp_evt *param,
unsigned short dest_id,
unsigned short src_id)
{
if (param->status == CO_ERROR_NO_ERROR)
{
switch(param->operation)
{
case GAPM_NO_OP:// No operation.
break;
case GAPM_RESET:// Reset BLE subsystem: LL and HL.
gapm_reset_completion_handler (msgid, (struct gapm_cmp_evt *)param, dest_id, src_id,this);
break;
case GAPM_CANCEL:// Cancel currently executed operation.
break;
case GAPM_SET_DEV_CONFIG:// Set device configuration
if( print_flag == 1)
hostpc->printf("Adverting Start...\n");
gapm_set_dev_config_completion_handler(msgid, (struct gapm_cmp_evt *)param, dest_id, src_id,this);
break;
case GAPM_SET_DEV_NAME: // Set device name
break;
case GAPM_SET_CHANNEL_MAP:// Set device channel map
break;
case GAPM_GET_DEV_NAME:// Get Local device name
break;
case GAPM_GET_DEV_VERSION:// Get Local device version
break;
case GAPM_GET_DEV_BDADDR:// Get Local device BD Address
break;
case GAPM_GET_WLIST_SIZE:// Get White List Size.
break;
case GAPM_ADD_DEV_IN_WLIST:// Add devices in white list.
break;
case GAPM_RMV_DEV_FRM_WLIST:// Remove devices form white list.
break;
case GAPM_CLEAR_WLIST:// Clear all devices from white list.
break;
case GAPM_ADV_NON_CONN:// Start non connectable advertising
case GAPM_ADV_UNDIRECT:// Start undirected connectable advertising
case GAPM_ADV_DIRECT:// Start directed connectable advertising
break;
case GAPM_SCAN_ACTIVE:// Start active scan operation
case GAPM_SCAN_PASSIVE: // Start passive scan operation
break;
case GAPM_CONNECTION_DIRECT:// Direct connection operation
break;
case GAPM_CONNECTION_AUTO:// Automatic connection operation
break;
case GAPM_CONNECTION_SELECTIVE:// Selective connection operation
break;
case GAPM_CONNECTION_NAME_REQUEST:// Name Request operation (requires to start a direct connection)
break;
case GAPM_RESOLV_ADDR:// Resolve device address
break;
case GAPM_GEN_RAND_ADDR:// Generate a random address
break;
case GAPM_USE_ENC_BLOCK:// Use the controller's AES-128 block
break;
case GAPM_GEN_RAND_NB:// Generate a 8-byte random number
break;
case GAPM_DBG_GET_MEM_INFO:// Get memory usage
break;
case GAPM_PLF_RESET:// Perform a platform reset
break;
case GAPM_GET_DEV_ADV_TX_POWER:// Get device advertising power level
break;
}
}
}
void BleMsgHandler::HandleGapcCmpEvt(unsigned short msgid,
struct gapc_cmp_evt *param,
unsigned short dest_id,
unsigned short src_id)
{
switch(param->operation)
{
case GAPC_NO_OP: // No operation
break;
case GAPC_DISCONNECT: // Disconnect link
break;
case GAPC_GET_PEER_NAME: // Retrieve name of peer device
break;
case GAPC_GET_PEER_VERSION: // Retrieve peer device version info.
break;
case GAPC_GET_PEER_FEATURES: // Retrieve peer device features.
break;
case GAPC_GET_CON_RSSI: // Retrieve connection RSSI.
break;
case GAPC_GET_PRIVACY: // Retrieve Privacy Info.
break;
case GAPC_GET_RECON_ADDR: // Retrieve Reconnection Address Value.
break;
case GAPC_SET_PRIVACY: // Set Privacy flag.
break;
case GAPC_SET_RECON_ADDR: // Set Reconnection Address Value.
break;
case GAPC_UPDATE_PARAMS: // Perform update of connection parameters.
break;
case GAPC_BOND: // Start bonding procedure.
break;
case GAPC_ENCRYPT: // Start encryption procedure.
break;
case GAPC_SECURITY_REQ: // Start security request procedure
break;
case GAPC_GET_CON_CHANNEL_MAP: // Retrieve Connection Channel MAP.
break;
}
}
}//namespace
