跳过主要内容

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

DA14585

6个月前

发布的gme_johannes15分 6回复
0的问题

嗨对话框支持,

我们正在开发一个基于物联网传感器SDK的项目(DA14585物联网多传感器开发,v6.160.4)
如果我们连接到设备和
1.开始流数据(发送0x01至Char UUID 2EA78970-7D44-44BB-B097-26183F402409)
只有在这之后
2.启用监听通知(char uuid 2ea78970-7d44-44bb-b097-26183f402410)
传感器没有发送任何数据。

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

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

谢谢你!
凯瑟琳

6个月前

PM_Dialog

嗨gme_johannes,

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

谢谢,PM_Dialog

6个月前

gme_johannes 15分

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

嗨PM_Dialog,

谢谢你回到我们身边。是的,我知道为了发送通知,必须启用通知(有点明显:))。但只有启用通知,才不会开始通过空中发送数据。为了实现这一点,流数据也必须启动。这里它取决于启用和启动的序列:
- 首先开始流式传输数据和第二个启用通知_does not_开始发送数据。
-首先启用通知,然后启动流数据_does_开始发送数据。

我们确实启用了通知:当通知启用时,设备不发送数据(通过空中)_after_我们发送命令开始流数据。

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

这是在以下文件和函数中实现的:
- file user_dws_reports.c, function 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)开始印刷这个错误消息,而不是编写和发送数据报告,这也是预配置在上述物联网MSK v6.160.4并不是感动我们)。

每次流数据停止(发送命令停止流数据)和重新启动(发送命令开始流数据)时,该计数器增加2(无论是否启用通知)

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

通知发送计数器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中)

流式数据通过发送0x01到dws_control_char (uuid 2ea78970-7d44-44bb-b097-26183f402410)启动
通过向dws_control_char发送0x00来停止流数据

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

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

我希望这描述它更清楚。

谢谢你!
凯瑟琳

5个月前

PM_Dialog

你好,凯瑟琳娜,

物联网MSK应用代码提供了wrbl_dws_control_char特征(可写)和wrbl_dws_control_reply_char(可通知),用于配置和控制设备

因此,每次设备连接到Central设备时,首先应该将0x01写入控制点(wrbl_dws_control_char)特征,启用wrbl_dws_control_reply_char中的通知,然后开始流数据。如果设备断开并重新连接,则应再次执行上述步骤。

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

谢谢,PM_Dialog

5个月前

gme_johannes 15分

亲爱的pm_dialog,

你描述的过程1.写入0x01到控制点,2.启用wrbl_dws_control_reply_char的通知3.启用WRBL_DWS_MULTI_SENS_CHAR的通知)不会使设备发送数据当然但要让它处于一种无法恢复的状态(通过例如,断开和重新连接)除非完全重新启动!(这是由于我在上面的冗长帖子中解释的ntf_sent_cntr)

与你的说法相反,我将接收传感器数据,如果我不启用wrbl_dws_control_reply_char的通知(但只启用wrbl_dws_multi_sens_char的通知),当我写入0x01到控制点。

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

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

  1. 启用wrbl_dws_control_reply_char的通知
  2. 启用WRBL_DWS_MULTI_SENS_CHAR的通知
  3. 将0x01写入控制点开始流数据

但这不是我的问题。

我的问题是(我只是从我上次的回复中抄下来的):

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

谢谢你!
凯瑟琳

3个月前

gme_johannes 15分

亲爱的pm_dialog,

为了解决上述问题,我们现在手动将ntf_sent_cntr重置为0

  • 写入0x00到控制点(STOP_COMMAND /停止流)

  • 断开设备的连接

这可以解决所描述的问题,即,只要从中央设备断开设备即使NTF_SENT_CNTR超过某个阈值,设备就不会重新传输数据。通过这种方法,设备不必完全重新启动其固件以便能够再次发送数据。

无论如何,谢谢
凯瑟琳

3个月前

PM_Dialog

你好,凯瑟琳娜,

感谢在我们的论坛上分享修复。

问候,pm_dialog