启用通知和指示

6个帖子/ 0新
最后一篇
Chemax.
离线
最后一次露面:3年4个月前
加入:2015-01-12 07:03
启用通知和指示

你好

我想,我发现文件中的错误custom_common.c.在一个功能中int check_client_char_cfg(bool is_notification,struct gattc_write_cmd_ind const * param)。条件f(param-> length!= sizeof(uint16_t))是不正确的。

根据规范蓝牙核心4.1,Vol.3,Part G,第3.3.3.3节特征(UUID 0x2902)中的客户端特征配置可以写入其中一个值:0x0000(无通知和指示),0x0001(通知通知)or 0x0002 (indication ON), i.e param->length = 1 (byte). But functionsizeof(uint16_t)返回2(字节)。
因此,当我尝试记录1字节来启用通知时,我遇到了错误:Invalid_Attribute_Length。

我在SDK 3.0.6中看到了这个问题

关键词:
设备:
Joacimwe.
离线
最后一次露面:1年5个月前
格鲁鲁
加入:2014-01-14 06:45
我不知道你的算,

我不知道你是如何计算的,但0x0002是两个字节。一个2在小endian编码中接着一个0。

Chemax.
离线
最后一次露面:3年4个月前
加入:2015-01-12 07:03
是的,但如果你写的话

是的,但如果您通过Connection Manager编写值,则会写入1(在DEC)或01(十六进制)。此操作将失败,并具有标准条件。

尝试使用Connection Manager运行示例ble_app_profile

mt_dialog.
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
嗨Chemax,

嗨Chemax,

该值为16位,因此条件是正确的,并且您获得了无效值,因为您只发送一个字节。如果您想使用Connection Manager,请尝试像这样的明确发送两个字节“01 00“。

谢谢mt_dialog.

Chemax.
离线
最后一次露面:3年4个月前
加入:2015-01-12 07:03
好的,这是工作

好的,这是工作

但0x0001(16位)和0x01(8位)的值。当我尝试编写0x01或0x0001时,我没有看到差异。
实际上,在这两种情况下,只写的最低有效位

mt_dialog.
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
嗨Chemax,

嗨Chemax,

它是Connection Manager适用的限制,每个数字都没有空间,连接经理将其解释为单个字节我想,这是它发送的,因此如果发送0x01,则发送ONLE字节,同样适用于发送0x0001时。

谢谢mt_dialog.