赞
踩
3.3. bt_hc_worker_thread线程启动:收发HCI事件 6
3.4. Btu_task线程启动:等待并分发消息给profile模块 7
4. bluedroid扫描设备(start_discovery): 10
在移植bluedroid的过程中,以下是我总结的移植代码的方法:
1、首先必须搞清楚程序的逻辑模块;
2、掌握程序的起始和终止函数;
3、添加所有头文件;
4、注释所有函数体内容,从起始函数开始一步一步添加。
(init----->启动buif_task()任务:等待并处理来自BTA消息):
等待并处理来自BTA消息
1、因为我们已经要开始等待事件了,因此要通知JAVA/JNI层,记得刚刚我们有注册了回调,那么就通过宏HAL_CBACK(bt_hal_cbacks, thread_evt_cb, ASSOCIATE_JVM);来通知JNI
2、进入for(;;)
3、调用GKI_wait,等待一个事件的返回
4、判断事件 event == BT_EVT_TRIGGER_STACK_INIT,如果是,就调用BTA_EnableBluetooth(bte_dm_evt)初始化蓝牙芯片组
5、判断事件event & EVENT_MASK(GKI_SHUTDOWN_EVT,如果是,就对出任务循环
6、判断事件event & TASK_MBOX_1_EVT_MASK 判断是否是1号mbox里面的事件。
7、如果第6步满足判断事件,那么判断事件 event & BT_EVT_CONTEXT_SWITCH_EVT,如果是,调用btif_context_switched(p_msg)切换上下文
8、回第三步
创建线程btu_task()和bt_hc_worker_thread()
bt_hc_worker_thread():收发HCI事件
btu_task():等待并分发消息给profile模块
1、btu_init_core(); 初始化核心control block,比如BTU, BTM, L2CAP, and SDP
2、BTE_InitStack();初始化BTE控制块,比如RFCOMM, DUN, SPP, HSP2, HFP, OBX, BIP
3、#if (defined(BTU_BTA_INCLUDED) && BTU_BTA_INCLUDED == TRUE) //初始化BTA
bta_sys_init();
#endif
4、#if ( BT_USE_TRACES==TRUE ) //此宏用于调试,是否设置?
BTE_InitTraceLevels();
#endif
5、进入for(;;)
6、处理事件的列表://为什么不是全部?
TASK_MBOX_0_EVT_MASK
TIMER_0_EVT_MASK
TIMER_1_EVT_MASK
TIMER_2_EVT_MASK
RPCGEN_MSG_EVT
TASK_MBOX_2_EVT_MASK
EVENT_MASK(APPL_EVT_7) //APPL_EVT_7事件
Btu_task:从邮箱中读取参数并调用bta_sys_event()根据注册的事件及相应的事件处理函数进行处理:直接贴运行结果:
完成通过hci_h4_send_msg()将查询命令发送给蓝牙模块!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。