蓝牙技术
直播中

刘勇

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

在SimpleCentral_processGATTDiscEvent里面,根据UUID发现charHandle,这个charHandle在UUID改为128bit后是否还是保存为8字节?

使用CC2652R7作为BLE主机,在例程simple_central的基础上修改读写数据的UUID为128 bit。
有三个问题想要请教一下:
1、在SimpleCentral_processGATTDiscEvent里面,根据UUID发现charHandle,这个charHandle在UUID改为128bit后是否还是保存为8字节?还是要保存16字节?若还是保存8字节应该保存哪两个字节?
2、在GATT_ReadCharValue(scConnHandle, &req, selfEntity); 和 GATT_WriteCharValue(scConnHandle, &req, selfEntity); 的req.handle是否要修改为16字节?
3、有一个特征值需要打开Notify功能,我需要调用哪些接口实现?

如果有UUID已经修改为128 bit的central的例程代码可以发给我参考一下就更好了。

回帖(1)

任凭风吹

2024-5-30 16:07:07
1. 在SimpleCentral_processGATTDiscEvent里面,根据UUID发现charHandle,这个charHandle在UUID改为128bit后是否还是保存为8字节?还是要保存16字节?若还是保存8字节应该保存哪两个字节?

当使用128位UUID时,charHandle仍然保存为8字节。这是因为charHandle是用于标识GATT特征的,与UUID的长度无关。在这种情况下,你可以选择保存UUID的高8字节或低8字节,具体取决于你的应用需求。通常,保存高8字节或低8字节都可以,因为它们都是唯一的。

2. 在GATT_ReadCharValue(scConnHandle, &req, selfEntity); 和 GATT_WriteCharValue(scConnHandle, &req, selfEntity); 的req.handle是否要修改为16字节?

不需要。req.handle仍然是8字节,用于标识要读取或写入的GATT特征。即使UUID是128位,charHandle仍然是8字节。在使用128位UUID时,你可以通过其他方式(如服务UUID和特征UUID)来确保特征的唯一性。

3. 有一个特征值需要打开Notify功能,我需要调用哪些接口实现?如果有 ...

要为一个特征值打开Notify功能,你需要执行以下步骤:

a. 首先,确保你已经发现了服务和特征。这通常在SimpleCentral_processGATTDiscEvent函数中完成。

b. 接下来,你需要找到特征的客户端配置描述符(Client Characteristic Configuration Descriptor,CCCD)。这个描述符通常与特征一起出现,用于控制通知和指示。

c. 向CCCD写入一个特定的值,以启用通知。对于通知,你需要写入0x0001。这可以通过GATT_WriteCharValue函数实现。

d. 一旦CCCD被正确设置,当特征值发生变化时,设备将向你发送通知。

以下是打开Notify功能的示例代码:

```c
// 假设已经发现了服务和特征,并且已经获取了特征的handle
uint16_t charHandle = ...;
uint16_t cccdHandle = ...; // 获取特征的CCCD handle

// 准备要写入CCCD的数据
uint8_t notifyData[2] = {0x01, 0x00}; // 启用通知

// 向CCCD写入数据,启用通知
GATT_WriteCharValue(scConnHandle, &req, cccdHandle, notifyData, sizeof(notifyData));
```

请注意,具体的接口名称和参数可能因使用的BLE堆栈和库而异。请根据你使用的库和文档进行相应的调整。
举报

更多回帖

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