WCH沁恒单片机
直播中

王敏

8年用户 1528经验值
私信 关注
[问答]

CH579主机GATT_ReadUsingCharUUID和GATT_DiscCharsByUUID有什么区别?

使用CH579做低功耗蓝牙主机。在主机例程中,获取特征值句柄的代码如下:

if ( ( pMsg->method == ATT_FIND_BY_TYPE_VALUE_RSP  &&
        pMsg->hdr.status == bleProcedureComplete ) ||
        ( pMsg->method == ATT_ERROR_RSP ) )
        {
            if ( centralSvcStartHdl != 0 )
            {
                // Discover characteristic
                centralDiscState = BLE_DISC_STATE_CHAR;
                req.startHandle = centralSvcStartHdl;
                req.endHandle = centralSvcEndHdl;

                req.type.len = ATT_BT_UUID_SIZE;
                req.type.uuid[0] = LO_UINT16(TEMPPROFILE_CHAR3_UUID);
                req.type.uuid[1] = HI_UINT16(TEMPPROFILE_CHAR3_UUID);

                GATT_ReadUsingCharUUID( centralConnHandle, &req, centralTaskId );
            }
        }
我模仿主机例程,新增了一个服务表,特征值均采用16oct,然而无法获取到特征值句柄,代码如下:

if ( ( pMsg->method == ATT_FIND_BY_TYPE_VALUE_RSP  &&
        pMsg->hdr.status == bleProcedureComplete ) ||
        ( pMsg->method == ATT_ERROR_RSP ) )
        {
            if ( centralSvcStartHdl != 0 )
            {
                // Discover characteristic
                centralDiscState = BLE_DISC_STATE_CHAR;
                req.startHandle = centralSvcStartHdl;
                req.endHandle = centralSvcEndHdl;

                req.type.len = ATT_BT_UUID_SIZE;
                req.type.uuid[0] = LO_UINT16(LED_CHAR2_UUID);
                req.type.uuid[1] = HI_UINT16(LED_CHAR2_UUID);
                GATT_ReadUsingCharUUID( centralConnHandle, &req, centralTaskId );
            }
        }
但是,如果使用如下代码,只换了GATT_DiscCharsByUUID就可以了:

if ( ( pMsg->method == ATT_FIND_BY_TYPE_VALUE_RSP  &&
        pMsg->hdr.status == bleProcedureComplete ) ||
        ( pMsg->method == ATT_ERROR_RSP ) )
        {
            if ( centralSvcStartHdl != 0 )
            {
                // Discover characteristic
                centralDiscState = BLE_DISC_STATE_CHAR;
                req.startHandle = centralSvcStartHdl;
                req.endHandle = centralSvcEndHdl;

                req.type.len = ATT_BT_UUID_SIZE;
                req.type.uuid[0] = LO_UINT16(LED_CHAR2_UUID);
                req.type.uuid[1] = HI_UINT16(LED_CHAR2_UUID);
               GATT_DiscCharsByUUID( centralConnHandle, &req, centralTaskId );
            }
        }
为什么啊?





回帖(1)

石胜厚

2022-10-18 09:45:34
如果按照主机程序的流程会先发现handle的范围,同时已知UUID,因此可以DiscCharsByUUID,且我们自己在进行蓝牙连接和透传数据时是会修改为这个的。设置为ReadUsingCharUUID是已知UUID就可以了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分