multi_role_processGATTDiscEvent(){
//….
// If we're discovering characteristics
else if (discInfo[connIndex].discState == BLE_DISC_STATE_CHAR)
{
// Characteristic found
MyUart_Printf(true, INFOR_FORMAT,"readByTypeRsp:%x %d %d",pMsg->method,
pMsg->msg.readByTypeRsp.numPairs, connIndex);
if ((pMsg->method == ATT_READ_BY_TYPE_RSP) &&
(pMsg->msg.readByTypeRsp.numPairs > 0))
{
// Store handle
discInfo[connIndex].charHdl = BUILD_UINT16(pMsg->msg.readByTypeRsp.pDataList[3],
pMsg->msg.readByTypeRsp.pDataList[4]);
Display_print0(dispHandle, MR_ROW_STATUS1, 0, "Simple Svc Found");
MyUart_Printf(true, INFOR_FORMAT,"Simple Svc Found,%d %x", connIndex, discInfo[connIndex].charHdl);
}
}
}
以上代码中,在获取handle的时候为什么是从pMsg->msg.readByTypeRsp.pDataList数组中的3,4中取值,在这个地方这个数组的内容定义是怎么样的
Annie Liu:
请问这是来自处理传入的ATT_READ_BY_TYPE_RSP packet 吗?
您可以在蓝牙核心规范中找到ATT_READ_BY_TYPE_RSP packet 的定义:BLUETOOTH CORE SPECIFICATION Version 5.1 | Vol 3, Part F, 3.4.4.2 Read By Type Response:
由于multi_role应用程序对characteristic 1感兴趣,因此必须查看position 3和4。我同意这有点复杂,可以用较少的硬编码方式完成。
如果您对如何读取不同服务的传入数据包感到困惑,我建议您设置一个断点并在运行时查看整个数据包。