MTK2502平臺使用SPP協議進行藍牙通訊實現
kal_uint32 conn_id;
S32 test_bt_spp_event_handler(U32 evt, void* para)
{
static kal_bool is_alart = KAL_FALSE;
kal_uint32 ret = 0;
kal_uint8 btspp_buff[SRV_SPP_MIN_BUFF_SIZE];
kal_uint8 spp_send_data[] = "Temp:25.36\r\n";
kal_uint8 spp_read_data[SRV_SPP_MIN_BUFF_SIZE];
srv_spp_event_cntx *cntx = (srv_spp_event_cntx*)para;
kal_prompt_trace(MOD_MMI, "[LXZ]In %s", __func__);
kal_prompt_trace(MOD_MMI, "app_btspp_cb conn_id[%d] evt[%d]",cntx->para, evt);
conn_id = cntx->para;
switch(evt){
case SRV_SPP_EVENT_BIND_FAIL:
kal_prompt_trace(MOD_MMI, "[LXZ]evt = SRV_SPP_EVENT_BIND_FAIL");
break;
case SRV_SPP_EVENT_CONNECT:
kal_prompt_trace(MOD_MMI, "[LXZ]evt = SRV_SPP_EVENT_CONNECT");
break;
case SRV_SPP_EVENT_AUTHORIZE:
kal_prompt_trace(MOD_MMI, "[LXZ]evt = VM_SRV_SPP_EVENT_AUTHORIZE");
srv_spp_accept(conn_id, btspp_buff, SRV_SPP_MIN_BUFF_SIZE / 2, SRV_SPP_MIN_BUFF_SIZE / 2);
break;
case SRV_SPP_EVENT_READY_TO_WRITE:
kal_prompt_trace(MOD_MMI, "[LXZ]evt = VM_SRV_SPP_EVENT_READY_TO_WRITE");
//srv_spp_write(conn_id, spp_data, strlen(spp_data));
break;
case SRV_SPP_EVENT_READY_TO_READ:
kal_prompt_trace(MOD_MMI, "[LXZ]evt = VM_SRV_SPP_EVENT_READY_TO_READ");
srv_spp_read(conn_id, spp_read_data, SRV_SPP_MIN_BUFF_SIZE);
//srv_spp_write(conn_id, spp_send_data, strlen(spp_send_data));
break;
case SRV_SPP_EVENT_DISCONNECT:
kal_prompt_trace(MOD_MMI, "[LXZ]evt = VM_SRV_SPP_EVENT_DISCONNECT");
break;
default:
kal_prompt_trace(MOD_MMI, "[LXZ]evt = %d", evt);
break;
}
}
void test_btspp_start(void)
{
SppHandle handle;
U32 evt_mask = 0;
kal_prompt_trace(MOD_MMI, "[LXZ]In %s", __func__);
srv_spp_init();
handle = srv_spp_open();
if (handle == SRV_SPP_INVALID_HANDLE) {
kal_prompt_trace(MOD_MMI, "[LXZ]spp_open error");
return;
} else {
kal_prompt_trace(MOD_MMI, "[LXZ]spp_open succeed");
}
evt_mask = SRV_SPP_EVENT_BIND_FAIL|
SRV_SPP_EVENT_AUTHORIZE|
SRV_SPP_EVENT_CONNECT|
SRV_SPP_EVENT_READY_TO_WRITE|
SRV_SPP_EVENT_READY_TO_READ|
SRV_SPP_EVENT_DISCONNECT;
srv_spp_set_notify_hdlr(handle, evt_mask, test_bt_spp_event_handler, NULL);
srv_spp_set_security_level(handle, SRV_SPP_SEC_NAN);
srv_spp_bind(handle, 0x1101);
}
void test_bt_cm_notifier(U32 event, void* para)
{
srv_bt_cm_dev_struct *dev_info;
kal_prompt_trace(MOD_MMI, "[LXZ]In %s", __func__);
switch (event){
case SRV_BT_CM_EVENT_ACTIVATE:{
/* After activated, continue to scan for devices */
kal_prompt_trace(MOD_MMI, "[LXZ]event = SRV_BT_CM_EVENT_ACTIVATE");
dev_info = srv_bt_cm_get_host_dev_info();
kal_prompt_trace(MOD_MMI, "[LXZ]BTCM vm_btcm_get_host_dev_info[%s][0x%02x:%02x:%02x:%02x:%02x:%02x]", dev_info->name,
((dev_info->bd_addr.nap & 0xff00) >> 8),
(dev_info->bd_addr.nap & 0x00ff),
(dev_info->bd_addr.uap),
((dev_info->bd_addr.lap & 0xff0000) >> 16),
((dev_info->bd_addr.lap & 0x00ff00) >> 8),
(dev_info->bd_addr.lap & 0x0000ff));
test_btspp_start();
break;
}
case SRV_BT_CM_EVENT_DEACTIVATE:{
kal_prompt_trace(MOD_MMI, "[LXZ]event = SRV_BT_CM_EVENT_DEACTIVATE");
break;
}
case SRV_BT_CM_EVENT_SET_VISIBILITY:{
kal_prompt_trace(MOD_MMI, "[LXZ]event = SRV_BT_CM_EVENT_SET_VISIBILITY");
break;
}
default:{
kal_prompt_trace(MOD_MMI, "[LXZ]evt = %d", event);
break;
}
}
}
void test_bt_init(void)
{
srv_bt_cm_power_status_enum bt_power_status;
U8 test_bt_name[] = "LXZ";
S32 bt_status;
srv_bt_cm_dev_struct *dev_info;
//srv_bt_cm_init();
srv_bt_cm_set_notify((srv_bt_cm_notifier)test_bt_cm_notifier,
SRV_BT_CM_EVENT_ACTIVATE |
SRV_BT_CM_EVENT_DEACTIVATE |
SRV_BT_CM_EVENT_SET_VISIBILITY |
SRV_BT_CM_EVENT_SET_NAME, NULL);
bt_power_status = srv_bt_cm_get_power_status();
if (bt_power_status == SRV_BT_CM_POWER_OFF) {
kal_prompt_trace(MOD_MMI, "[LXZ]BT OFF");
srv_bt_cm_set_host_dev_name(test_bt_name);
srv_bt_cm_set_visibility(SRV_BT_CM_VISIBILITY_ON);
bt_status = srv_bt_cm_switch_on();
kal_prompt_trace(MOD_MMI, "[LXZ]bt_status = %d", bt_status);
} else if (bt_power_status = SRV_BT_CM_POWER_ON) {
kal_prompt_trace(MOD_MMI, "[LXZ]BT ON");
srv_bt_cm_set_host_dev_name(test_bt_name);
srv_bt_cm_set_visibility(SRV_BT_CM_VISIBILITY_ON);
kal_prompt_trace(MOD_MMI, "[LXZ]BTCM vm_btcm_get_host_dev_info[%s][0x%02x:%02x:%02x:%02x:%02x:%02x]", dev_info->name,
((dev_info->bd_addr.nap & 0xff00) >> 8),
(dev_info->bd_addr.nap & 0x00ff),
(dev_info->bd_addr.uap),
((dev_info->bd_addr.lap & 0xff0000) >> 16),
((dev_info->bd_addr.lap & 0x00ff00) >> 8),
(dev_info->bd_addr.lap & 0x0000ff));
test_btspp_start();
}
}