14 协议栈能力
对于不同的软件包、不同的芯片系列,协议栈能力不同,汇总74于表 14.1,表 14.2 和 表 14.3。
系列 | 广播集数目 | 连接数目 | 白名单容量 | CTE | 最大 MTU |
---|---|---|---|---|---|
ING9188X | \(8\) | \(8\) | \(16\) | \(\checkmark\) | \(247\) |
ING9187X | \(8\) | \(8\) | \(16\) | \(247\) | |
ING9168X | \(5\) | \(5\) | \(8\) | \(\checkmark\) | \(247\) |
系列 | 广播集数目 | 连接数目 | 白名单容量 | CTE | 最大 MTU |
---|---|---|---|---|---|
ING9188X | \(8\) | \(26\) | \(24\) | \(\checkmark\) | \(247\) |
ING9187X | \(8\) | \(26\) | \(24\) | \(247\) | |
ING9168X | \(5\) | \(10\) | \(10\) | \(\checkmark\) | \(247\) |
系列 | 广播集数目 | 连接数目 | 白名单容量 | CTE | 最大 MTU |
---|---|---|---|---|---|
ING9188X | \(1\) | \(1\) | \(4\) | \(\checkmark\) | \(247\) |
ING9187X | \(1\) | \(1\) | \(4\) | \(247\) | |
ING9168X | \(1\) | \(1\) | \(4\) | \(\checkmark\) | \(247\) |
通过 ll_get_capabilities
和 btstack_get_capabilities
可分别获取链路层和 Host 的协议栈能力75。
https://ingchips.github.io/application-notes/an_aoa/index.html↩︎
特殊情况下,Controller、Host 也可以融合到一起运行,请参考 SDK 示例 Peripheral Console (Real-time)。↩︎
FreeRTOS 提供了
uxTaskPriorityGet
、vTaskPrioritySet
等,用于查询和修改优先级。↩︎如无特殊说明,本文档中的 App 皆指运行在芯片上的蓝牙程序。↩︎
指示服务器端主动报告特征的值。↩︎
私有事件(如 HCI_SUBEVENT_LE_VENDOR_PRO_CONNECTIONLESS_IQ_REPORT)除外。↩︎
Core Specification Supplement, Part B, Common Profile and Service Error Codes↩︎
更准确地说,只是把一条 HCI 消息放入消息队列。↩︎
地址改变后,曾与之配对的设备无法自动重连。↩︎
参照蓝牙核心规范。↩︎
ING918 芯片家族不支持此特性。↩︎
称为一个 PDU 队列(train)。↩︎
AuxPtr 里的时间偏移略有不同。↩︎
将原始编号再映射到当前的信道集合得到实际的信道号。↩︎
Periodic Advertising Sync Transfer。↩︎
PAwR 每个子事件、每个响应都只包含一个数据包,不支持 PDU 队列。↩︎
https://github.com/ingchips/ING918XX_SDK_SOURCE/blob/75cbf9928711c39e0b234ae11796bc1696111998/bundles/typical/inc/platform_api.h#L265↩︎
广播间隔小于 \(3.75ms\)。↩︎
在不引起混淆的前提下,本手册混用“广播”、“广播集”这两个名词。↩︎
请参阅 SDK 用户手册。↩︎
关闭之后,其它设备无法再与该周期广播建立同步。↩︎
后两种策略在规范中称为 Extended filter policy。ING916 和 ING918 不支持后两种策略。↩︎
即周期性地接收周期广播。↩︎
需要连接多个设备,使用白名单方式效率更高。↩︎
参考 《Controller API Reference》。↩︎
对于 v8.2 以下版本,这个函数仅用于主角色, 从角色需要使用
l2cap_request_connection_parameter_update
请求更新。↩︎调用之前建议先检查对方是否支持此特性。此 API 无论主从角色都可以调用。↩︎
在不引起混淆的前提下,本手册混用 ATT 服务器、GATT 服务器,代码里也用
att_server
代指gatt_server
。↩︎事实上,这几件事已由 Wizard 工具代劳。↩︎
在手册、工具、代码的不同位置可能使用了不同的名词,如 Profile 数据库、GATT 数据库、GATT 数据等。↩︎
协议栈里称为“会话”,规范里称为“队列”。↩︎
仅适用于有响应的写入,无响应的写入无效。↩︎
解决方法参考 L2CAP 传输队列。↩︎
解决方法参考 L2CAP 传输队列。↩︎
以及转发过来的
L2CAP_EVENT_CAN_SEND_NOW
事件。↩︎SDK v8.4.23 及以上版本。↩︎
SDK v8.4.23 及以上版本。↩︎
5.1 及更低版本里称为 LE_PSM↩︎
整个 SDU 只占用一个 K 帧↩︎
整个 SDU 占用多个 K 帧 这个事件对应其中一个 K 帧↩︎
指进入链路层发送队列。↩︎
当信用点用完或者链路层队列已满时,会出现此情况↩︎
att_server_request_can_send_now_event
是基于att_dispatch_server_request_can_send_now_event
实现的。↩︎生成时需要保证具有足够高的熵。↩︎
IRK、DHK、LTK、CSRK 等的具体含义及作用请参考蓝牙核心规范。↩︎
以及给予用户必要的提示的能力。↩︎
没必要过于频繁地更新地址。尤其是对于可解析地址,每更新一次,就意味着泄露了一点关于 IRK 的消息。↩︎
注意:当该广播是可连接的并且正在广播时,不允许修改地址。↩︎
https://www.bluetooth.com/learn-about-bluetooth/key-attributes/bluetooth-security/method-vulnerability/↩︎
dx.doi.org/10.6028/NIST.FIPS.186-4↩︎
BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 3, Part H, 2.3.6↩︎
典型值。不同软件包有所不同。↩︎
更多信息请参考《Application Note: Direction Finding Solution》, https://ingchips.github.io/application-notes/an_aoa/sdk-support.html#proprietary-solution-2↩︎
ING918 不支持此功能。↩︎
关于原理、使用方法等更多信息请参考《使用 ING916 定位传统蓝牙设备》,https://ingchips.github.io/blog/2023-03-11-legacy-aoa/↩︎
更多信息请参考《Application Note: Direction Finding Solution》, https://ingchips.github.io/application-notes/an_aoa/sdk-support.html#proprietary-solution-2↩︎
本节功能中,ING918 仅支持自定义连接间隔。↩︎
参见蓝牙核心规范 Vol 3, Part H, 2.3.5.6 LE Secure Connections pairing phase 2.↩︎
参考《Application Note: Direction Finding Solution》。↩︎
参考《Controller API Reference》。↩︎
参考《Controller API Reference》。↩︎
为防止与 Media Access Controller 混淆,蓝牙规范使用 MIC 代替 MAC。↩︎
https://ingchips.github.io/blog/2021-06-02-sdk-6/#%E5%85%BC%E5%AE%B9%E6%80%A7↩︎
只能在
app_main
就调用。↩︎对于 v8.4.12 或更旧的版本,所能存储的设备个数等于软件包所支持的连接数目。↩︎
为多个连接创建多个同步执行器的优势在于多个 GATT 客户端上的会话可以并发。↩︎
由规范规定。↩︎
https://www.bluetooth.com/specifications/assigned-numbers/↩︎
这个函数的原始版本不是严格意义上的异步操作。考虑到在一个同步执行体内可能既会用到有响应的写入,也会用到无响应的写入,加入这个 API 可以带来便利。↩︎
可以使用
btstack_push_user_runnable
。↩︎依据 SDK v8.3.7。ING916XX 协议栈能力可能发生变化。↩︎
限 SDK v8.4.13 或更高版本。↩︎