你好对话框,
我最近使用我希望你有所帮助的通知遇到问题。
有一段时间我一直在运行自定义应用程序,基于BLE_APP_Peripheral示例在外部存储器中记录传感器数据。我在Android应用程序中实现了一个命令,该应用程序检索录制的数据并将其存储在Android平板电脑上的文件中。为此(基于此论坛的建议),我使用了20个字节特性,具有读取,写入和通知属性。该过程是从Android应用程序启用通知,然后向DA发送自定义命令以开始数据传输。这只是通过通知消息发送20个字节,然后等待通知通过Custs1_Val_ntf_cfm确认通知,然后使用另一个通知消息发送20个字节。然后重复该过程,直到发送所有预期数据。这有效,我已经使用这种技术发送了大块数据。
最近,我尝试在改变时向某些传感器数据添加通知。此特征已经已定义了通知属性,但我没有使用过它。这也似乎可以正常工作。当启用通知时,检测到它们时会发送传感器数据更改,我可以在Android平板电脑上显示它。每秒一次以一次慢速发生。但是,在测试时,我找到了如果我禁用传感器数据通知,然后尝试如上所述的数据传输,它将开始,传输几千字节并停止。当发生这种情况时,DA需要重置。到目前为止,我一直无法确定为什么发生这种情况。它对我没有意义为什么可以启用/禁用另一个特征的通知会导致我的数据传输特性发生故障。在我与DA14580的经验中,这似乎与未被消耗和累积的消息相似,直到系统发生故障。 I don't know how to verify if that's what is happening or not though ..... or if the problem is something else.
任何想法可能导致这个和/或我可能看的东西?到目前为止,我仔细阅读了user_custs1_def.c中的数据库描述和user_custs1_impl.c中的处理程序,并且到目前为止还没有看到任何不正确的。我在BLE_APP_PERITIALL中使用了ADC示例作为所需的指南。
谢谢,最大
嗨max44,
从您描述的行为来看,我会假设你正在生成消息,而不是消耗它们(显然设备命中不能够分配内存的断言),也许当前连接的连接间隔不是频繁足以让您发送的数据实际上不是累计的。我不确定我完全了解你表演的测试。检查您获得的断言,并确保您触及未能分配内存断言,因为您确保您的设备停止响应的原因,如果您不小心以某种方式在不实际发送的情况下生成数据。
谢谢mt_dialog.
公吨,
对不起。我试图简短而不是用太多信息来负担你。我将把我的测试更详细地描述,希望能够为您提供更清晰的图片我试图做什么以及我得到的故障。
我认为我不像上面提到的那样得到了一个断言错误,但我会重新审视这一点。我试图看看我在keil调试器中停止的地方,但并不清楚。我确实可以通过ON oud Stude获取数据传输以运行而不发生错误。也就是说,我读取并转移从SPI Flash到我的Android平板电脑的17,000字节(**)并将数据存储在平板电脑上的文件中。在检查时,平板电脑文件中的数据看起来正确。这似乎表明连接间隔是足够的,但我将其留在BLE_APP_PERITIELAL示例设置中,我认为我认为是10分钟和20 max。我曾经认为Custs1代码将根据Custs1_task.c:以下评论调整到连接间隔的内容:
gattc_cmp_evt消息,用于完成gattc_notify的完成
*一旦通知PDU已发送,请立即发送操作
* 空气。
因此,这发送了我在user_peripheral.c中获得的custs1_val_ntf_cfm,我用它来指示我可以发送下一个通知。这不是意味着BLE数据包已被传输?在我的情况下,由于我发送了20个字节,它应该在一个BLE传输中出去。
困扰我的是数据传输自身的运作,可以向Android平板电脑发送大量数据。如果我去并激活另一个特征的通知,它会导致数据传输例程失败。我难以弄清楚互动是什么.....或者如果我在某处的代码中完成了愚蠢和/或有错误。到目前为止,我在代码中没有发现错误,但我会继续看。
谢谢,最大
(** 17,000字节)。17,000可能看起来像一个奇怪的数字,但我真的在寻找16,384个字节。由于20个字节特征(如您所知由BLE数据有效载荷确定),我的数据传输算法从Flash读取1000个字节,并将其推出到Android平板电脑,其中50 x 20字节通知。我决定了最简单的事情,将要运行17个循环的迭代,让平板电脑或PC数据通过数据筛选并丢弃额外的速度。BLE模块和Android平板电脑设置为固定的17,000字节发送和接收环路。
公吨,
我终于发现了什么是错的。事实证明Android应用程序未发送描述符以禁用通知即使触及GUI上的按钮以执行此操作。我正在使用的应用程序是由蓝牙开发者Studio + Android Studio生成的,并表现与蓝色放大镜相似。我的传感器数据特性具有用于读取,写入和启用通知的GUI按钮,以与我实现的DA14580自定义服务进行交互。触摸启用通知按钮将描述符与启用值发送并更改按钮以禁用通知。触摸按钮以禁用通知时,Android应用程序刚刚重新发送启用值。由于我每秒更新传感器数据一次,我期望禁用通知将切换回以更新读取的特征数据库。相反,当我在平板电脑上禁用时,我继续发送通知,从而导致错误。
我发现禁用通知是其他Android开发人员与Android BLE服务的遇到问题,如果此论坛上的其他人遇到此问题,有一些修复程序在线建议。
我做了纠正,看起来我现在正在收到描述符值,以便现在禁用DA14580上的通知。数据传输现在似乎在启用和禁用我的传感器数据特性上的通知后工作。
所以我们现在可以关闭这个话题。谢谢收听!
问候,最大
嗨max44,
感谢分享。
最好的问候mt_dialog.