Android O引入了HIDL的结构。本文不讲HIDL的实现细节。本文通过介绍蓝牙模块使用HIDL前后之间的差别,搞明白HIDL的设计思想。
蓝牙与底层的交互
- 打开并配置transport layer(UART, USB等)。
- 上电
- 下载firmware patch
- 配置firmware相关参数
- LPM(Low Power Management)相关配置(蓝牙工作时,始终要用到lmp的功能)
- 蓝牙收发数据时,transport layer(H4, BCSP等)的拆包和组包工作。
引入HIDL之前,bluedroid与底层相关的代码
主要的代码在system/bt/hci/src/下面
Bluedroid之前的代码(Android N及之前)已经对具体芯片相关的代码做了一套统一的接口。
bt/hc/src/vendor.c
static const bt_vendor_callbacks_t lib_callbacks = {
sizeof(lib_callbacks),
firmware_config_cb,
sco_config_cb,
low_power_mode_cb,
sco_audiostate_cb,
buffer_alloc_cb,
buffer_free_cb,
transmit_cb,
epilog_cb,
a2dp_offload_cb
};
static const