This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2652R:广播动态数据时出现问题

Guru**** 2386620 points
Other Parts Discussed in Thread: SYSCONFIG
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1316206/cc2652r-problem-when-advertising-dynamic-data

器件型号:CC2652R
主题中讨论的其他器件:SysConfig

您好!

我正在尝试创建一个可以自动更改广播数据的简单外围设备。 长期而言、我想通告一些传感器数据。

我曾尝试执行该链接中提到的步骤(低功耗蓝牙5扫描和广告基础知识) 、但看起来我只能修改一次数据。 我想知道你能帮我。 如链接中所述、我在"SimplePeripheral_processAdvEvent ()"的"Case GAP_EVT_ADV_START_AFTER_ENABLE:"中添加了代码我将使用 SimpleLink CC13xx CC26xx SDK 的简单外设代码  7.10.02.23.  

下面是我的代码图片: /resized-image/__size/698x758/__key/communityserver-discussions-components-files/538/Screenshot-2024_2D00_01_2D00_22-161924.png

正如你所看到的,每次我来到这个例子,我都会增加一个应该被广播的变量(advertData2[11]= test_loop2;)。 我可以看到变量递增、但在准备再次加载缓冲区时、我收到状态为 bleGAPNotFound。  

总之、我想了解如何广播一些动态数据。  

谢谢。

乔纳森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jonathan:

    每当更改广播日期时、应先禁用广播、然后再进行更改。 您应该能够使用 memcpy 等函数或简单地迭代数组、同时修改数组中的多个元素。 请确保仅在禁用广播时才修改数据。

    此致、

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在修改数据之前使用以下命令。 此命令用于禁用广播集、如用户指南中所述。
    状态= GapAdv_prepareLoadByBuffer (advData1、false);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您能否验证是否收到了相应的禁用广播事件?

    此致、

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     在 SimplePeripheral_processGapMessage ()中创建广播句柄后,我将加载 SysConfig (loadbyHandle)生成的 advData1,我将设置掩码

    GapAdv_setEventMask (advHandleLegacy、GAP_ADV_EVT_MASK_START_AFTER_ENABLE | GAP_ADV_EVT_MASK_END_AFTER_DISABLE | GAP_ADV_EVT_MASK_SET_TERMINTED);

    我将使用 GapAdv_enable ()启用该设置。 此部件运行正常,但是程序将在 SimplePeripheral_processAdvEvent ()(Case GAP_EVT_ADV_START_AFTER_ENABLE)中更新数据。 程序第一次进入这种情况时会起作用(prepareloadbybuffer 返回成功)、因为我尝试修改 advData1、但第二次同样的函数返回  bleGAPNotFound (没有广播集使用此缓冲区)。 那么、我不知道应该使用哪种缓冲器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您是否可以尝试禁用广播、等待 收到 GAP_EVT_ADV_END_AFTER_DISABLE 事件以及在事件内部更新 Adv_DATA? 我认为这种方法是更新广播数据的最安全方法、并将帮助我们了解在设置中是否可能缺失一些内容。

    此致、

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    " 等待 GAP_EVT_ADV_END_AFTER_DISABLE 事件被接收"如何操作?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    默认情况下、 GAP_EVT_ADV_END_AFTER_DISABLE 事件已订阅。 每当 BLE5-Stack 完全禁用广播时、栈就会向应用程序发布一个事件、该事件将为 GAP_EVT_ADV_END_AFTER_DISABLE。 将捕获事件并进入 SimplePeripheral_processAdvEvent ()函数。 在该函数内、 SimplePeripheral_processAdvEvent  GAP_EVT_ADV_END_AFTER_DISABLE 属于实例、因此可以在此 case 语句中执行的任何处理或代码中保证广播被完全禁用。

    此致、

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    这就是我所做的! 我的问题是、我要尝试更新该情况下的一些数据、但这样做时、我希望程序在这种情况下运行多次、同时保持广播间隔固定。 现在、我可以再次进入这种情况语句、方法是 在处于 GAP_EVT_END_AFTER_DISABLE 中时将掩码设置为 GAP_EVT_ADV_END_AFTER_DISABLE 、但这会超过广播间隔、并且数据发送得太快。 或者、我可以将掩码设置为其他内容、但程序将无法再达到这种情况、因此数据不会更新。

    我不知道 SimplePeripheral_processAdvEvent 是否是正确的实现方式。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我的道歉,我没有意识到你已经在处理这个事件. 您似乎希望在更改数据时确保以一致的间隔发送广播。 在这种情况下、将 GAP_ADV_EVT_MASK_END 添加 到广播事件掩码中可能会有所帮助。 添加该事件掩码将  在发送广播后立即生成 GAP_EVT_ADV_START 事件。 在这种情况下、也许我们可以尝试加载更新的广播数据。

    此致、

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我找到了一种解决问题的方法、即执行与 SP_PERIOD_EVT 相同的操作。 我刚刚更改了函数 SimplePeripheral_performance_PeriodicTask 来更新数据。