Thread 中讨论的其他器件: CC2540、 BLE-STACK、 CC2640R2F、 CC2541
您好!
我已经验证了 CC2642R 以及 CC2640R2 BLE5上的行为。
先决条件:
-已编译的 BLE5堆栈的 SimplePeripheral 示例
- GATT_NO_CLIENT NOT (!) 已定义
- BLE_V42_features =隐私_1_2_CFG+EXT_DATA_LEN_CFG
>>>因此,GapBondMgr 尝试从中央设备读取仅 RPA 和 CAR 属性
在我们的案例中、中央器件是 CC2540 USB TI 软件狗、没有 RPAO 和 CAR 属性。
因此、响应是一个带有错误代码 ATT_ERR_UNSUPPORTED_REQ (0x06)的 ATT 错误响应。
BT5规范规定、如果不支持 ATT 请求、则错误响应中的句柄应为0x0000 (请参阅随附的图片)。
问题是、这个错误响应导致一个来自 BLE5堆栈的无限循环的 ATT ReadByType 请求(附上 Ellisys 文件)。
我深入探讨了它、可以看到 GATT_CLIENT.c 中的函数 gattProcessReadByType()将 lastHandle 设置 为错误响应中存储的句柄、然后...
//记住最后一个句柄
lastHandle = pErrorRsp->Handle;
并且执行新的 ReadByType:
void map_ATT_ReadByTypeReq( pClient->connHandle,&pReq->req );
然后它再次开始...
