一图解百惑
整个bluedroid可以分为两大模块:BTIF,BTE
BTIF:提供bluedroid对外的接口
BTE:bluedroid的内部处理,又细分为BTA,BTU,BTM和HCI
BTA:bluedroid中各profile的逻辑实现和处理
BTU:承接BTA与HCI
BTM:蓝牙配对与链路管理
HCI:读取或写入数据到蓝牙hw
下面以实际例子来表现个模块间的协作
tv与蓝牙音箱建立连接
上层应用建立连接时候,会调用到btif_av.c中的connect函数
btif_av.c
static bt_status_t connect(bt_bdaddr_t *bd_addr)
{
BTIF_TRACE_EVENT1("%s", __FUNCTION__);
CHECK_BTAV_INIT();
return btif_queue_connect(UUID_SERVCLASS_AUDIO_SOURCE, bd_addr, connect_int);
}
经过内部逻辑处理后,会调用到bta_av_api.c中的BTA_AvOpen函数
void BTA_AvOpen(BD_ADDR bd_addr, tBTA_AV_HNDL handle, BOOLEAN use_rc, tBTA_SEC sec_mask)
170 {
171 tBTA_AV_API_OPEN *p_buf;
172
173 if ((p_buf = (tBTA_AV_API_OPEN *) GKI_getbuf(sizeof(tBTA_AV_API_OPEN))) != NULL)
174 {
175 p_buf->hdr.event = BTA_AV_API_OPEN_EVT;
176 p_buf->hdr.layer_specific = handle;
177 bdcpy(p_buf->bd_addr, bd_addr);
178 p_buf->use_rc = use_rc;
179 p_buf->sec_mask = sec_mask;
180 p_buf->switch_res = BTA_AV_RS_NONE;
181 bta_sys_sendmsg(p_buf);
182 }
183 }