sevencore fota solution development project

Dependencies:   mbed

Committer:
dudnwjs
Date:
Wed Jun 24 08:50:07 2015 +0000
Revision:
4:60be78a172c2
Parent:
3:1e70387e1337
Child:
5:e11b23f9aacc
Add advertising feature;

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 4:60be78a172c2 4 #include "app_task.h"
dudnwjs 4:60be78a172c2 5
dudnwjs 0:a1f6b1ba8a1e 6
dudnwjs 0:a1f6b1ba8a1e 7 namespace sevencore_fota{
dudnwjs 0:a1f6b1ba8a1e 8
dudnwjs 0:a1f6b1ba8a1e 9 BleMsgHandler::BleMsgHandler(Serial *_device)
dudnwjs 0:a1f6b1ba8a1e 10 {
dudnwjs 0:a1f6b1ba8a1e 11 print_flag = 0;
dudnwjs 0:a1f6b1ba8a1e 12 device = _device;
dudnwjs 2:dba344c91bce 13 SerialM = new SerialManager(_device);
dudnwjs 3:1e70387e1337 14 MsgQ = new MsgQueue(512);
dudnwjs 3:1e70387e1337 15 memset(recv_msg,0,512);
dudnwjs 0:a1f6b1ba8a1e 16 }
dudnwjs 0:a1f6b1ba8a1e 17
dudnwjs 0:a1f6b1ba8a1e 18 BleMsgHandler::BleMsgHandler(Serial *_device, Serial *_hostpc)
dudnwjs 0:a1f6b1ba8a1e 19 {
dudnwjs 0:a1f6b1ba8a1e 20 print_flag = 1;
dudnwjs 0:a1f6b1ba8a1e 21 device = _device;
dudnwjs 0:a1f6b1ba8a1e 22 hostpc = _hostpc;
dudnwjs 2:dba344c91bce 23 SerialM = new SerialManager(_device,_hostpc);
dudnwjs 3:1e70387e1337 24 MsgQ = new MsgQueue(512);
dudnwjs 3:1e70387e1337 25 memset(recv_msg,0,512);
dudnwjs 0:a1f6b1ba8a1e 26 }
dudnwjs 0:a1f6b1ba8a1e 27
dudnwjs 1:5cf3a6c969be 28 BleMsgHandler::~BleMsgHandler(void)
dudnwjs 1:5cf3a6c969be 29 {
dudnwjs 2:dba344c91bce 30 free(SerialM);
dudnwjs 3:1e70387e1337 31 free(MsgQ);
dudnwjs 1:5cf3a6c969be 32 }
dudnwjs 1:5cf3a6c969be 33
dudnwjs 0:a1f6b1ba8a1e 34 void BleMsgHandler::PrintTitle(void)
dudnwjs 0:a1f6b1ba8a1e 35 {
dudnwjs 0:a1f6b1ba8a1e 36 if( print_flag == 1 )
dudnwjs 0:a1f6b1ba8a1e 37 hostpc->printf("Sevencore Fota : BleMsg Handler Start\n");
dudnwjs 0:a1f6b1ba8a1e 38 }
dudnwjs 3:1e70387e1337 39
dudnwjs 3:1e70387e1337 40 void BleMsgHandler::BleMsgAlloc( unsigned short id,
dudnwjs 3:1e70387e1337 41 unsigned short dest_id,
dudnwjs 3:1e70387e1337 42 unsigned short src_id,
dudnwjs 3:1e70387e1337 43 unsigned short data_len,
dudnwjs 3:1e70387e1337 44 void *pdata,
dudnwjs 3:1e70387e1337 45 uint8_t *msg )
dudnwjs 3:1e70387e1337 46 {
dudnwjs 3:1e70387e1337 47 memset(msg,0,sizeof(msg));
dudnwjs 3:1e70387e1337 48 msg[0] = 0x05;
dudnwjs 3:1e70387e1337 49 memcpy(&msg[1],&id,sizeof(unsigned short));
dudnwjs 3:1e70387e1337 50 memcpy(&msg[1+1*sizeof(unsigned short)],&dest_id,sizeof(unsigned short));
dudnwjs 3:1e70387e1337 51 memcpy(&msg[1+2*sizeof(unsigned short)],&src_id,sizeof(unsigned short));
dudnwjs 3:1e70387e1337 52 memcpy(&msg[1+3*sizeof(unsigned short)],&data_len,sizeof(unsigned short));
dudnwjs 3:1e70387e1337 53 memcpy(&msg[1+4*sizeof(unsigned short)],pdata,data_len);
dudnwjs 3:1e70387e1337 54 }
dudnwjs 3:1e70387e1337 55
dudnwjs 3:1e70387e1337 56 int BleMsgHandler::BleSendMsg(uint8_t *msg, unsigned short size)
dudnwjs 3:1e70387e1337 57 {
dudnwjs 3:1e70387e1337 58 return SerialM->SendToSerial(msg,size);
dudnwjs 3:1e70387e1337 59 }
dudnwjs 3:1e70387e1337 60
dudnwjs 3:1e70387e1337 61 void BleMsgHandler::BleReceiveMsg(void)
dudnwjs 3:1e70387e1337 62 {
dudnwjs 3:1e70387e1337 63 int receive_size = -1;//default
dudnwjs 3:1e70387e1337 64 while(receive_size == -1)
dudnwjs 3:1e70387e1337 65 {
dudnwjs 3:1e70387e1337 66 receive_size = SerialM->ReceiveToSerial(recv_msg);
dudnwjs 3:1e70387e1337 67 }
dudnwjs 3:1e70387e1337 68
dudnwjs 3:1e70387e1337 69 uint8_t *msg;
dudnwjs 3:1e70387e1337 70 msg = new uint8_t[receive_size];
dudnwjs 3:1e70387e1337 71 memcpy(msg,recv_msg,receive_size);
dudnwjs 3:1e70387e1337 72 memset(recv_msg,0,512);
dudnwjs 3:1e70387e1337 73 MsgQ->EnQueue(msg);
dudnwjs 3:1e70387e1337 74 }
dudnwjs 3:1e70387e1337 75
dudnwjs 3:1e70387e1337 76 void BleMsgHandler::BleMsgHandle(void)
dudnwjs 3:1e70387e1337 77 {
dudnwjs 4:60be78a172c2 78 uint8_t *msg;
dudnwjs 4:60be78a172c2 79 ble_hdr msg_hdr;
dudnwjs 4:60be78a172c2 80 unsigned short paramPos = 1 + sizeof(msg_hdr);
dudnwjs 4:60be78a172c2 81
dudnwjs 3:1e70387e1337 82 if( print_flag == 1)
dudnwjs 3:1e70387e1337 83 hostpc->printf("Ble-Massage Handle Function!\n");
dudnwjs 4:60be78a172c2 84
dudnwjs 3:1e70387e1337 85 msg = (uint8_t*)MsgQ->DeQueue();
dudnwjs 3:1e70387e1337 86 memcpy(&msg_hdr, &msg[1], sizeof(msg_hdr));
dudnwjs 3:1e70387e1337 87
dudnwjs 3:1e70387e1337 88 if( print_flag == 1 )
dudnwjs 3:1e70387e1337 89 hostpc->printf(" handle msg : id(%d), dst(%d), src(%d), len(%d) !\n",
dudnwjs 3:1e70387e1337 90 msg_hdr.bType, msg_hdr.bDstid, msg_hdr.bSrcid, msg_hdr.bLength);
dudnwjs 3:1e70387e1337 91
dudnwjs 3:1e70387e1337 92 if (msg_hdr.bDstid != TASK_GTL)
dudnwjs 3:1e70387e1337 93 return;
dudnwjs 3:1e70387e1337 94
dudnwjs 4:60be78a172c2 95 switch( msg_hdr.bType )
dudnwjs 4:60be78a172c2 96 {
dudnwjs 4:60be78a172c2 97 case GAPM_CMP_EVT:
dudnwjs 4:60be78a172c2 98 HandleGapmCmpEvt(msg_hdr.bType,(struct gapm_cmp_evt *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid);
dudnwjs 4:60be78a172c2 99 break;
dudnwjs 4:60be78a172c2 100 case GAPM_DEVICE_READY_IND:
dudnwjs 4:60be78a172c2 101 gapm_device_ready_ind_handler(msg_hdr.bType,(void *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid,this);
dudnwjs 4:60be78a172c2 102 break;
dudnwjs 4:60be78a172c2 103 case GAPM_ADV_REPORT_IND:
dudnwjs 4:60be78a172c2 104 gapm_adv_report_ind_handler(msg_hdr.bType,(struct gapm_adv_report_ind *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid);
dudnwjs 4:60be78a172c2 105 break;
dudnwjs 4:60be78a172c2 106 case GAPC_CMP_EVT:
dudnwjs 4:60be78a172c2 107 HandleGapcCmpEvt(msg_hdr.bType,(struct gapc_cmp_evt *)&msg[paramPos],msg_hdr.bDstid,msg_hdr.bSrcid);
dudnwjs 4:60be78a172c2 108 break;
dudnwjs 4:60be78a172c2 109 case DISS_CREATE_DB_CFM:
dudnwjs 4:60be78a172c2 110 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 111 break;
dudnwjs 4:60be78a172c2 112 case DISS_DISABLE_IND:
dudnwjs 4:60be78a172c2 113 break;
dudnwjs 4:60be78a172c2 114 case DISS_ERROR_IND:
dudnwjs 4:60be78a172c2 115 if ( print_flag == 1)
dudnwjs 4:60be78a172c2 116 hostpc->printf("Rcved DISS_ERROR_IND Msg\n");
dudnwjs 4:60be78a172c2 117 break;
dudnwjs 4:60be78a172c2 118 default:
dudnwjs 4:60be78a172c2 119 if( print_flag == 1)
dudnwjs 4:60be78a172c2 120 hostpc->printf("Massage Type Not Defined ! \n");
dudnwjs 4:60be78a172c2 121 break;
dudnwjs 4:60be78a172c2 122 }
dudnwjs 3:1e70387e1337 123 }
dudnwjs 3:1e70387e1337 124
dudnwjs 4:60be78a172c2 125 void BleMsgHandler::HandleGapmCmpEvt(unsigned short msgid,
dudnwjs 4:60be78a172c2 126 struct gapm_cmp_evt *param,
dudnwjs 4:60be78a172c2 127 unsigned short dest_id,
dudnwjs 4:60be78a172c2 128 unsigned short src_id)
dudnwjs 4:60be78a172c2 129 {
dudnwjs 4:60be78a172c2 130 if (param->status == CO_ERROR_NO_ERROR)
dudnwjs 4:60be78a172c2 131 {
dudnwjs 4:60be78a172c2 132 switch(param->operation)
dudnwjs 4:60be78a172c2 133 {
dudnwjs 4:60be78a172c2 134 case GAPM_NO_OP:// No operation.
dudnwjs 4:60be78a172c2 135 break;
dudnwjs 4:60be78a172c2 136 case GAPM_RESET:// Reset BLE subsystem: LL and HL.
dudnwjs 4:60be78a172c2 137 gapm_reset_completion_handler (msgid, (struct gapm_cmp_evt *)param, dest_id, src_id,this);
dudnwjs 4:60be78a172c2 138 break;
dudnwjs 4:60be78a172c2 139 case GAPM_CANCEL:// Cancel currently executed operation.
dudnwjs 4:60be78a172c2 140 break;
dudnwjs 4:60be78a172c2 141 case GAPM_SET_DEV_CONFIG:// Set device configuration
dudnwjs 4:60be78a172c2 142 if( print_flag == 1)
dudnwjs 4:60be78a172c2 143 hostpc->printf("Adverting Start...\n");
dudnwjs 4:60be78a172c2 144 gapm_set_dev_config_completion_handler(msgid, (struct gapm_cmp_evt *)param, dest_id, src_id,this);
dudnwjs 4:60be78a172c2 145 break;
dudnwjs 4:60be78a172c2 146 case GAPM_SET_DEV_NAME: // Set device name
dudnwjs 4:60be78a172c2 147 break;
dudnwjs 4:60be78a172c2 148 case GAPM_SET_CHANNEL_MAP:// Set device channel map
dudnwjs 4:60be78a172c2 149 break;
dudnwjs 4:60be78a172c2 150 case GAPM_GET_DEV_NAME:// Get Local device name
dudnwjs 4:60be78a172c2 151 break;
dudnwjs 4:60be78a172c2 152 case GAPM_GET_DEV_VERSION:// Get Local device version
dudnwjs 4:60be78a172c2 153 break;
dudnwjs 4:60be78a172c2 154 case GAPM_GET_DEV_BDADDR:// Get Local device BD Address
dudnwjs 4:60be78a172c2 155 break;
dudnwjs 4:60be78a172c2 156 case GAPM_GET_WLIST_SIZE:// Get White List Size.
dudnwjs 4:60be78a172c2 157 break;
dudnwjs 4:60be78a172c2 158 case GAPM_ADD_DEV_IN_WLIST:// Add devices in white list.
dudnwjs 4:60be78a172c2 159 break;
dudnwjs 4:60be78a172c2 160 case GAPM_RMV_DEV_FRM_WLIST:// Remove devices form white list.
dudnwjs 4:60be78a172c2 161 break;
dudnwjs 4:60be78a172c2 162 case GAPM_CLEAR_WLIST:// Clear all devices from white list.
dudnwjs 4:60be78a172c2 163 break;
dudnwjs 4:60be78a172c2 164 case GAPM_ADV_NON_CONN:// Start non connectable advertising
dudnwjs 4:60be78a172c2 165 case GAPM_ADV_UNDIRECT:// Start undirected connectable advertising
dudnwjs 4:60be78a172c2 166 case GAPM_ADV_DIRECT:// Start directed connectable advertising
dudnwjs 4:60be78a172c2 167 break;
dudnwjs 4:60be78a172c2 168 case GAPM_SCAN_ACTIVE:// Start active scan operation
dudnwjs 4:60be78a172c2 169 case GAPM_SCAN_PASSIVE: // Start passive scan operation
dudnwjs 4:60be78a172c2 170 break;
dudnwjs 4:60be78a172c2 171 case GAPM_CONNECTION_DIRECT:// Direct connection operation
dudnwjs 4:60be78a172c2 172 break;
dudnwjs 4:60be78a172c2 173 case GAPM_CONNECTION_AUTO:// Automatic connection operation
dudnwjs 4:60be78a172c2 174 break;
dudnwjs 4:60be78a172c2 175 case GAPM_CONNECTION_SELECTIVE:// Selective connection operation
dudnwjs 4:60be78a172c2 176 break;
dudnwjs 4:60be78a172c2 177 case GAPM_CONNECTION_NAME_REQUEST:// Name Request operation (requires to start a direct connection)
dudnwjs 4:60be78a172c2 178 break;
dudnwjs 4:60be78a172c2 179 case GAPM_RESOLV_ADDR:// Resolve device address
dudnwjs 4:60be78a172c2 180 break;
dudnwjs 4:60be78a172c2 181 case GAPM_GEN_RAND_ADDR:// Generate a random address
dudnwjs 4:60be78a172c2 182 break;
dudnwjs 4:60be78a172c2 183 case GAPM_USE_ENC_BLOCK:// Use the controller's AES-128 block
dudnwjs 4:60be78a172c2 184 break;
dudnwjs 4:60be78a172c2 185 case GAPM_GEN_RAND_NB:// Generate a 8-byte random number
dudnwjs 4:60be78a172c2 186 break;
dudnwjs 4:60be78a172c2 187 case GAPM_DBG_GET_MEM_INFO:// Get memory usage
dudnwjs 4:60be78a172c2 188 break;
dudnwjs 4:60be78a172c2 189 case GAPM_PLF_RESET:// Perform a platform reset
dudnwjs 4:60be78a172c2 190 break;
dudnwjs 4:60be78a172c2 191 case GAPM_GET_DEV_ADV_TX_POWER:// Get device advertising power level
dudnwjs 4:60be78a172c2 192 break;
dudnwjs 4:60be78a172c2 193 }
dudnwjs 4:60be78a172c2 194 }
dudnwjs 4:60be78a172c2 195 }
dudnwjs 4:60be78a172c2 196
dudnwjs 4:60be78a172c2 197 void BleMsgHandler::HandleGapcCmpEvt(unsigned short msgid,
dudnwjs 4:60be78a172c2 198 struct gapc_cmp_evt *param,
dudnwjs 4:60be78a172c2 199 unsigned short dest_id,
dudnwjs 4:60be78a172c2 200 unsigned short src_id)
dudnwjs 4:60be78a172c2 201 {
dudnwjs 4:60be78a172c2 202 switch(param->operation)
dudnwjs 4:60be78a172c2 203 {
dudnwjs 4:60be78a172c2 204 case GAPC_NO_OP: // No operation
dudnwjs 4:60be78a172c2 205 break;
dudnwjs 4:60be78a172c2 206 case GAPC_DISCONNECT: // Disconnect link
dudnwjs 4:60be78a172c2 207 break;
dudnwjs 4:60be78a172c2 208 case GAPC_GET_PEER_NAME: // Retrieve name of peer device
dudnwjs 4:60be78a172c2 209 break;
dudnwjs 4:60be78a172c2 210 case GAPC_GET_PEER_VERSION: // Retrieve peer device version info.
dudnwjs 4:60be78a172c2 211 break;
dudnwjs 4:60be78a172c2 212 case GAPC_GET_PEER_FEATURES: // Retrieve peer device features.
dudnwjs 4:60be78a172c2 213 break;
dudnwjs 4:60be78a172c2 214 case GAPC_GET_CON_RSSI: // Retrieve connection RSSI.
dudnwjs 4:60be78a172c2 215 break;
dudnwjs 4:60be78a172c2 216 case GAPC_GET_PRIVACY: // Retrieve Privacy Info.
dudnwjs 4:60be78a172c2 217 break;
dudnwjs 4:60be78a172c2 218 case GAPC_GET_RECON_ADDR: // Retrieve Reconnection Address Value.
dudnwjs 4:60be78a172c2 219 break;
dudnwjs 4:60be78a172c2 220 case GAPC_SET_PRIVACY: // Set Privacy flag.
dudnwjs 4:60be78a172c2 221 break;
dudnwjs 4:60be78a172c2 222 case GAPC_SET_RECON_ADDR: // Set Reconnection Address Value.
dudnwjs 4:60be78a172c2 223 break;
dudnwjs 4:60be78a172c2 224 case GAPC_UPDATE_PARAMS: // Perform update of connection parameters.
dudnwjs 4:60be78a172c2 225 break;
dudnwjs 4:60be78a172c2 226 case GAPC_BOND: // Start bonding procedure.
dudnwjs 4:60be78a172c2 227 break;
dudnwjs 4:60be78a172c2 228 case GAPC_ENCRYPT: // Start encryption procedure.
dudnwjs 4:60be78a172c2 229 break;
dudnwjs 4:60be78a172c2 230 case GAPC_SECURITY_REQ: // Start security request procedure
dudnwjs 4:60be78a172c2 231 break;
dudnwjs 4:60be78a172c2 232 case GAPC_GET_CON_CHANNEL_MAP: // Retrieve Connection Channel MAP.
dudnwjs 4:60be78a172c2 233 break;
dudnwjs 4:60be78a172c2 234 }
dudnwjs 4:60be78a172c2 235 }
dudnwjs 3:1e70387e1337 236
dudnwjs 3:1e70387e1337 237
dudnwjs 0:a1f6b1ba8a1e 238
dudnwjs 0:a1f6b1ba8a1e 239 }//namespace