SPP藍牙實現

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();
	}
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章