你好,
我已将我的设备配置为外设。它提供了一个服务,其中包含一个特征和描述符,它们都具有读取+写入权限。
创建特性和描述符,以最大长度为0和Gatts_flag_char_read_req标志,因为我使用请求而不是属性存储。
当远程设备连接到外设并读取或写入描述符时,它可以正常工作,我得到一个ble_evt_gatts_read_req / ble_evt_gatts_write_req事件。
当远程设备尝试读取特性时,我也会得到ble_evt_gatts_read_req事件。
但是当远程设备尝试写入特性时,我没有任何事件。
如果我增加了它的特性的最大长度,但我假设这将分配我不打算使用的额外存储器。
我想知道这是一个sdk吗?因为它与描述符合理,所以它还在读取特性时工作(并且我可以使用数据发送答案)。
此致,
安迪
设备:
嗨apoudred,
您能否让我知道您使用的项目?你有自定义服务吗?强烈建议可写特性的最大长度不等于零。当您写入特征时,您将恢复一个事件,如果长度为0,则无法获得它。因此,请尝试更改特征的最大长度,并告诉我是否能够获取活动。请注意,这不是SDK的问题。
谢谢,PM_DIALOG.
你好,
确实这是一个自定义服务。
为什么SDK的这种限制只存在于特征而不是描述符?我没有看到与其他SDK(ESP32 / TI)的限制。
我猜指定最大长度会占用额外的内存。我不会使用此内存,因为我不想使用属性存储但写请求。是否有相当于BLE_EVT_GATTS_READ_REQ标志用于写作?
谢谢,
安迪
嗨apoudred,
我正在寻找你的问题,我会尽快回复你的合适答案。
谢谢,PM_DIALOG.
你好pm_dialog,
您是否对此问题有任何更新?
此致,
安迪
嗨apoudred,
抱歉延迟,我正试图复制你的问题。如果描述符的最大长度等于零,则您将获得写入和读取请求,如您所提到的那样。在特征的情况下,如果最大长度等于零,则只需只读读取请求,而不是写请求。这不是SDK的限制,但这是BLE堆栈处理特性的最大长度的方式。如果要获得写入请求,则特性的最大长度应等于或超过1.关于您的第二个问题,没有等效的ble_evt_gatts_read_req标志进行写入
谢谢,PM_DIALOG.
你好,
是的,这是您的BLE堆栈的限制,这是您SDK的一部分。我没有看到标准BLE核心规范中的任何提及此限制。
我应该考虑使用哪个最大长度值使用通用描述符?
此致,
安迪
嗨apoudred,
描述符的最大长度没有标准值。最大长度取决于描述符的实现。
谢谢,PM_DIALOG.