跳到主要内容

在启用通知之前尝试启动流数据时无数据

2个月前

在启用通知之前尝试启动流数据时无数据

张贴了gme_johannes10分 4回复
0旋转

嗨对话支持,

我们正在基于IOT传感器SDK(DA14585 IOT多传感器开发,V6.160.4)开发项目
如果我们连接到设备和
1.开始流数据(发送0x01至Char UUID 2EA78970-7D44-44BB-B097-26183F402409)
只有在此之后
2.启用侦听通知(Char UUID 2EA78970-7D44-44BB-B097-26183F402410)
传感器未发送任何数据。

在此之后,即使我们断开连接,我们也不会从设备接收数据,重新连接并切换序列
1.启用侦听通知和
2.开始流数据。

这是预期的行为吗?如何让设备再次开始发送数据?

谢谢
凯瑟琳娜

2个月前

PM_DIALOG.

嗨gme_johannes,

谢谢你的帖子。由于它是一个自定义代码,请您能描述一下问题是什么问题?如果我没有弄错并根据标题,则当对等设备禁用通知时,设备才会发送数据。在这种情况下,应从对等设备启用通知,以便开始通过空中发送数据。

谢谢,PM_DIALOG.

1个月前

gme_johannes 10分

正如我不知道您还在监控旧论坛,我正在重新发布我的评论
尝试开始流媒体时没有数据
这里。

嗨pm_dialog,

谢谢你回到我们身边。是的,我知道必须启用通知以便发送通知(那种显而易见的:))。但只能启动通知将无法在空中开始发送数据。为了实现这一目标,必须也开始流数据。在这里,它取决于启用它的顺序并启动:
- 首先开始流式传输数据和第二个启用通知_does not_开始发送数据。
- 首先启用通知和第二开始流数据_does_开始发送数据。

我们确实启用通知:当启用通知时,设备未发送数据(在空中)_AFter_我们发送命令以开始流数据。

我们的代码基于IOT MSK v6.160.4。我们没有实现任何自定义代码以接收通知或发送命令以开始流数据。
我们特别没有改变负责编写和发送传感器数据的代码。

这是在以下文件和函数中实现的:
- file user_dws_reports.c,函数bool user_prepare_multi_sensor_report(...)
- file user_dws_reports.c,函数void user_add_multi_sensor_report(...)
- file user_dws_reports.c,function void user_send_multi_sensor_report(...)
- file user_dws_task.c,function user_dws_val_ntf_cfm_handler(...)

当我连接到串行调试控制台(看任何ArchPrintfs的结果)时,我可以看到以下错误消息
“错误:删除NTF - <计数器>优秀NTFS”如果计数器(NTF_SENT_CNTR)是大于15的数字(有阈值#define(d)开始打印此错误消息而不是组成和发送数据报告- 在上面输入的IOT MSK V6.160.4中配置,并未被我们触及)。

每次Streaming数据都停止(发送命令停止流数据)并重新启动(发送命令开始流数据)此计数器增加两个(无论是否启用或禁用通知)

当设备与对等设备断开并重新连接时,此行为仍然存在。

通知发送计数器NTF_SENT_CNTR在功能中增加
user_send_multi_sensor_report(...)

user_send_command_reply(...)(都在file user_dws_reports.c中)
并在功能下减少
user_dws_val_ntf_cfm_handler(文件user_dws_task.c中)

通过向DWS_CONTROL_CHAR发送0x01来启动流数据(UUID 2EA78970-7D44-44BB-B097-26183F402410)
通过向DWS_CONTROL_CHAR发送0x00来停止流数据

上述该企业行为尚未由我们改变。所以我的问题重新重新装修:

是行为,设备无法从丢弃的通知中恢复,想要
(a)即使设备断开并重新连接?
(b)在启动流时,启用流_Before_通知(它不会在流启动时发生_AFter_通知时)?

我希望这描述它更清楚。

谢谢
凯瑟琳娜

1个月前

PM_DIALOG.

嗨Katharina,

IOT MSK应用程序代码提供WRBL_DWS_CONTROL_CHAR特性(可卷绕)和WRBL_DWS_CONTROL_REPLY_CHAR(通知),用于配置和控制设备

因此,每次设备连接到中央设备时,首先都应该将0x01写入控制点(WRBL_DWS_CONTROL_CHAR)特征,启用WRBL_DWS_CONTROL_REPLY_CHAR中的通知,然后启动流数据。如果设备断开连接并重新连接,则应再次遵循上述过程。

如果控制点特性用0x01写入并启动流数据而不启用WRBL_DWS_CONTROL_REPLY_CHAR中的通知,则不会在对等设备中看到流数据,因为应启用通知。

谢谢,PM_DIALOG.

1个月前

gme_johannes 10分

亲爱的pm_dialog,

您正在描述的程序1。将0x01写入控制点,2。启用WRBL_DWS_CONTROL_REPLY_CHAR的通知3。启用WRBL_DWS_MULTI_SENS_CHAR的通知)不会使设备发送数据当然但是将其留在无法恢复的状态下(通过例如,断开和重新连接)除非完全重新启动!(这是由于我在上面的冗长帖子中解释的ntf_sent_cntr)

与你的陈述相反如果我将0x01写入控制点,我将无法为WRBL_DWS_CONTROL_REPLY_CHAR启用通知(但仅启用WRBL_DWS_MULTI_SENS_CHARS的通知),我会收到传感器数据。

显然,如果我没有为WRBL_DWS_MULTI_SENS_CHAN启用通知,我将不会接收传感器数据。

接收数据的正确程序不必经常重启/重置它

  1. 启用WRBL_DWS_CONTROL_REPLY_CHAR的通知
  2. 启用WRBL_DWS_MULTI_SENS_CHAR的通知
  3. 通过将0x01写入控制点来开始流传输数据

但这不是我的问题。

我的问题是(而且我只用我的最后一个回复复制它):

是行为,设备无法从丢弃的通知中恢复,想要
(a)即使设备断开并重新连接?
(b)在启动流时,启用流_Before_通知(它不会在流启动时发生_AFter_通知时)?

谢谢
凯瑟琳娜