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.

[参考译文] CC2340R5:每个扫描窗口中未生成唯一的广播报告。

Guru**** 2528390 points
Other Parts Discussed in Thread: CC2340R5

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1545682/cc2340r5-unique-advertising-reports-not-generated-at-each-scan-window

器件型号:CC2340R5


工具/软件:

您好、

我们使用 CC2340R5 进行开发、并以中央模式运行器件。

我们已按如下所示设置扫描参数:

1.扫描间隔:4000ms

2.扫描窗口:220ms

3.扫描持续时间:655350  

4、扫描周期:0

4.重复过滤器: 已启用。

预期器件每 4 秒 ( 扫描间隔 ) 并扫描 220ms ( 扫描窗口 ) 在 220ms 的扫描窗口期间、我们期望在每个扫描窗口生成广播报告。  

我们目前面临的问题是,广告报告只是第一次生成,对于后续扫描窗口,广告报告 不会生成。

在提出这个问题时、TI 团队要求我在 syscfg 和测试中禁用重复的滤波器、当我们禁用重复的滤波器时、我们会看到在每个扫描窗口都会生成广播报告、但生成的大多数报告都是重复的器件。

我们希望找到以下解决办法。

假设有 10 个器件位于 cc2340r5 EVK 的 1m 以内、名为 Dev1、Dev2、Dev3 等

cc2340r5 每 4 秒启动一次扫描、我们希望看到每个扫描窗口的唯一 DEV 地址。  

例如:扫描窗口–1:我们得到 Dev-1、Dev-2、Dev-3

扫描窗口–2:我们得到 Dev-4、Dev-5、Dev-6

以此类推。

禁用重复筛选器后、我们会看到以下结果。

扫描窗口 1:Dev1、Dev1、Dev2、Dev2、Dev3

扫描窗口 2:Dev2、Dev1、Dev3、Dev4

以此类推。

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

    您好:

    感谢您联系我们! 您能澄清一下您的问题吗? 如果我理解正确、您希望帮助创建一个手动过滤重复扫描并打印出广告设备地址的示例?

    此致、

    Tarek D

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

    尊敬的 Terek:

    我的查询是、当使用 syscfg 启用重复滤波器时、在每个扫描窗口中、TI 的 BLE 栈是否会提供唯一地址?

    在大多数器件中、它在堆栈层进行处理。 我们希望您确认栈是否可以处理此问题?  

    现在、我的设备每 4 秒唤醒一次、当启用重复滤波器时、BLE 堆栈无法生成任何“ BLEAPPUTIL_ADV_REPORT

    触发事件。

    谢谢、

    Sandeep Singh

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

    您好 Sandeep、

    这确实是非常奇怪的行为。 能否请提供您正在使用的 SDK 版本和示例? 我想尝试重现此问题。

    此致、

    Tarek D

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

    尊敬的 Terek:

    我使用的是 最新的 SDK 版本。 我使用了 SDK 中的 basic_ble 示例代码。

    下面随附了我们当前使用的工程和文件。

    e2e.ti.com/.../app_5F00_central.c
    e2e.ti.com/.../duplicateFilterEnabledScan.zip

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

    您好 Sendeep、

    感谢您提供此服务! 通过查看代码、我相信您的问题是您在扫描禁用事件内打印广播报告、而不是在广播报告事件内打印。  

    我建议查看我们的 扫描和广播 SimpleLink Academy、它演示了如何高效地做到这一点。

    我希望这对您有所帮助!

    此致、

    Tarek D

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

    尊敬的 Terek:

    我在之前的注释中分享了我的 app_central.c、 您将看到我已注册“ BLEAPPUTIL_ADV_REPORT “事件。

    在 scanEventHanlder 中、我添加了以下代码:

    用例 BLEAPPUTIL_ADV_REPORT:

    advRpt++;
    Log_printf (LogModule_0、Log_info、“BLEAPPUTIL_ADV_REPORT!“);
    }休息;

    此外、我还补充了一个反码、看看我收到了多少份报告。 我还确认此值仅在第一个扫描窗口上更新。

    谢谢、

    Sandeep

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

    您好:

    明白了! 您能否分享一下您的 SDK 版本号、您所做的修改、以便我可以尝试在我这边复制这个问题?

    此致、

    Tarek D

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

    尊敬的 Tarek:

    SDK 版本为:  simplelink_lowpower_f3_SDK_9_11_00_18

    在 SYSCFG 中、我启用了重复的筛选器。

    我已经与您共享了 app_central.c。

    扫描开始参数:

    BLEAppUtil_ScanStart_t centralScanStartParams =
    {
     /*! Zero for continuously scanning */
     .scanPeriod     = 0, /* Units of 1.28sec */
    
     /*! Scan Duration shall be greater than to scan interval,*/
     /*! Zero continuously scanning. */
     .scanDuration   = 0, /* Units of 10ms */
    
     /*! If non-zero, the list of advertising reports will be */
     /*! generated and come with @ref GAP_EVT_SCAN_DISABLED.  */
     .maxNumReport   = APP_MAX_NUM_OF_ADV_REPORTS
    };
    
    void scanStart(char *arg)
    {
        bStatus_t status;
        status = BLEAppUtil_scanStart(&centralScanStartParams);
    }
    
    

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

    您好 Sandeep、

    感谢您提供此服务! 我会尽快提供我的结果!

    此致、

    Tarek D

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

    尊敬的 Terek:

    很抱歉耽误响应。 我上星期离开了。

    当您说它在您的最后工作时、您能否详细说明测试条件?

    我已按如下所述对其进行了测试:

    我已将扫描周期和扫描持续时间设置为“ 0 “。  

    我的扫描间隔为 400ms、扫描窗口为 220ms。

    最初在我周围的环境中、有 4 个 BLE 器件 、即 Dev-A、Dev-B、 Dev-C 和 Dev-D

    假设在第一个广播窗口中、我收到了“ BLEAPPUTIL_ADV_REPORT “事件。

    现在、我为新器件 Dev-E.供电 当我这样做时、我没有收到任何新的“ BLEAPPUTIL_ADV_REPORT “ 触发事件。

    请确认您是否进行了与此类似的测试? 此外、在我们的代码中、我们还在“ BLEAPPUTIL_ADV_REPORT “ 而不是 “BLEAPPUTIL_SCAN_DISABLED"</s>“ 事件

    谢谢、

    Sandeep  

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

    您好 Sandeep、

    我为这里的延误道歉! 您是否测试了我在上一个回复中附加的代码? 另外、必须指出的是、必须将广播报告的最大数量设置为 0。

    此致、

    Tarek D

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

    尊敬的 Terek:

    是的、我已经测试了您之前与我分享的代码、我发现行为是相同的。  

    在我第一次收到 7 个设备后、当我在新广告主上将新设备置于范围/功率时、不会生成新的广播报告。

    我在“"事件“事件中添加了一个计数器、用于跟踪收到的广告报告数量。  

    我通过将最大广告报告设置为“ 0 “。 尽管发生了这种变化、但行为上没有变化。

    我再次强烈建议您按照我所述尝试在您的最后重新创建问题。

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

    尊敬的 Terek:

    我已在您之前与我分享的代码中添加了一个额外的事件。

    我添加了“BLEAPPUTIL_SCAN_WND_END"事件“事件、以跟踪扫描序列已开始和结束的次数。

    scanWindow :用于跟踪开始和结束的扫描请求的变量。

    advRptCount :整个过程中生成的广告报告的数量。

    从上面的屏幕截图中、我们可以确认扫描序列已开始和结束 36 (scanWindow) 次、我们只收到了 9. (advRptCount) 唯一广告报告。

    在将新的外围设备置于有效范围内后、我等待了 2 分钟、但  advRptCount 没有改变。

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

    您好 Sandeep、

    感谢您的耐心! 我能够在我这边复制问题、我计划向我们的研发团队提交 TT 以解决问题。 在这种情况下、问题似乎在于持续扫描时重复筛选器功能的实现。 我建议您执行以下两项操作之一:

    1. 扫描持续时间不等于零、并且代码会在扫描完成后自动重新启动扫描
    2. 在软件中实现重复过滤器。 在这种情况下、您需要一个数据结构、该结构保存已扫描的所有地址的值、并在 BLEAPPUTIL_ADV_REPORT 内部进行检查、根据此数据结构检查已扫描设备的地址、以确保该设备没有被多次扫描。 您可能还需要使用一个计时器来清除数据结构、以确保不会发生溢出。

    很抱歉、复制问题花了这么长时间、我错过了您对重复筛选器所说的内容。  

    如果您在实施上述任一建议方面需要帮助、或者您有任何疑问、请告诉我!

    此致、

    Tarek D

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

    您好 Tarek、  

    同时、我们启用了重复的滤波器、但我们忽略了从同一 BD_ADDR 接收到的多个请求、但这不是一个长期解决方案。

    等待结束修复 将保持此票证打开、直到那时为止。

    谢谢、

    Sandeep

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

    您好 Sandeep、

    听起来像一个计划! 我会让您随时了解 TT 的状态。

    此致、

    Tarek D