你好
我想,我发现文件中的错误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中看到了这个问题
关键词:
设备:
我不知道你是如何计算的,但0x0002是两个字节。一个2在小endian编码中接着一个0。
是的,但如果您通过Connection Manager编写值,则会写入1(在DEC)或01(十六进制)。此操作将失败,并具有标准条件。
尝试使用Connection Manager运行示例ble_app_profile
嗨Chemax,
该值为16位,因此条件是正确的,并且您获得了无效值,因为您只发送一个字节。如果您想使用Connection Manager,请尝试像这样的明确发送两个字节“01 00“。
谢谢mt_dialog.
好的,这是工作
但0x0001(16位)和0x01(8位)的值。当我尝试编写0x01或0x0001时,我没有看到差异。
实际上,在这两种情况下,只写的最低有效位
嗨Chemax,
它是Connection Manager适用的限制,每个数字都没有空间,连接经理将其解释为单个字节我想,这是它发送的,因此如果发送0x01,则发送ONLE字节,同样适用于发送0x0001时。
谢谢mt_dialog.