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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1611220/cc2340r5-no-ble-scan-disable-event-callback

器件型号: CC2340R5

我们以 60s 的持续时间开始双路扫描、我们可以正常获得 BLEAPPUTIL_SCAN_ENABLED 和 BLEAPPUTIL_ADV_REPORT 事件。

在大多数情况下、我们可以获得 BLEAPPUTIL_SCAN_DISABLED 事件、但在进行应力测试时、有时、即使超时、我们也无法获得 BLEAPPUTIL_SCAN_DISABLED 事件。

image.png

在这之后,我们试图通过调用 BLEAppUtil_sanStop () 来停止它,它恢复了成功。 但当我们尝试再次启动 ble 时、它将失败并返回代码 0x11 (bleAlreadyInRequestedMode)。
image.png


更多信息:
1.无栈溢出
2.应用程序任务正常工作

我怀疑 BLE 栈中存在问题、但我不知道如何进行更多分析。 如果您能给我们提供任何分析建议、我们将不胜感激。 谢谢!

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

    您好:

    感谢您的联系。

    请考虑 BLEAppUtil_scanStop () 正在排队的函数,这意味着它可能不会立即执行。 成功返回表示已成功排队。 0x11 错误表示即使接受扫描停止、堆栈也未完全完成状态转换。 请尝试引入短延迟或等待扫描停止的回调事件、然后再次调用扫描开始函数。
    请告诉我该怎么做。
    此致、
    David
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、David:
    感谢您的答复。
    但是、如上图所示、我们从 15:01:49 开始双扫描、超时为 60 秒、这在 15:09:12 之前不会发生停止事件、时间至少为 8 分钟。

    BR、

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

    您好:

    您是否要指定所使用的 SDK 版本以及如何实现压力测试? 如果使用示例作为参考、其中是哪个示例以及您 BLEAppUtil_scanStart 使用哪些参数配置 API 调用。

    谢谢

    David。

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

    您好、David:

    我们使用 SDK  simplelink_lowpower_f3_SDK_8_40_02_01

    我们进行了如下压力测试:
     -通过调用启动双扫描  BLEAppUtil_scanStart 

     -在 BLEAPPUTIL_ADV_REPORT 事件中,我们将存储数组的扫描响应,一旦数组已满,将通知其他线程将数组存储到闪存中,在此期间,将忽略新的 扫描响应,直到存储到闪存完成。
     -在 BLEAPPUTIL_SCAN_DISABLED 事件中,我们将打印一些日志。

     -做一些睡眠 (10s) 然后重复上述步骤作为压力测试

     

    下面的参数用于 BLEAppUtil_scanStart  API 调用:

    const BLEApp Util_Scan Start_t observer_scan_start_params ={
      /*! 零、用于连续扫描*/
      .scanPeriod = 0、/* 1.28 秒的单位*/

      /*! 扫描持续时间应大于扫描间隔*/
      /*! 零连续扫描。 */
      .scanDuration = 6000、/*以 10ms 为单位*/

      /*! 如果不为零、则广告报告列表将为*/
      /*! 已生成并带有@Ω ref GAP_EVT_SCAN_DISABLED。 */
      .maxNumReport = 0
    };

    const BLEApp Util_Scan Init_t observer_scan_init_params ={
      /*! OPT SCAN_PRIM_PHY_1M | SCAN_PRIM_PHY_CODEED */
      .primPhy = SCAN_PRIM_PHY_1M、

      /*! opt scan_type_active | scan_type_passive */
      scanType = scan_type_passive、

      /*! 扫描间隔应大于或等于扫描窗口*/
      .ScanInterval = 800、/* 625 μ s 单位*/

      /*! 扫描窗口应小于或等于扫描间隔*/
      .scanWindow = 800、/*以 625us 为单位*/

      /*! 选择要存储广告报告的字段*/
      /*! 在 AdvRptList 中、对于 mor 字段、请参阅@ref Gap_scanner.h */
      .advReportFields = SCAN_ADVRPT_FLD_ADDRESS、
     
      /*! OPT SCAN_PRIM_PHY_1M | SCAN_PRIM_PHY_CODEED */
      .scanPhys = SCAN_PRIM_PHY_1M、

      /*! OPT SCAN_FLT_POLICY_ALL | SCAN_FLT_POLICY_WL | SCAN_FLT_POLICY_ALL_RPA
      *| SCAN_FLT_POLICY_WL_RPA */
      .fltPolicy = SCAN_FLT_POLICY_ALL、

      /*! 有关更多滤波器 PDU @ref Gap_scanner.h */
      .fltPDuType =(SCAN_FLT_PDU_NONCONNECTABLE_ONLY |\
                  SCAN_FLT_PDU_NONSCANNABLE_ONLY |\
                  SCAN_FLT_PDU_UNDIRECTED_ONLY |\
                  SCAN_FLT_PDU_ADV_ONLY |\
                  SCAN_FLT_PDU_ONLY)、

      /*! OPT SCAN_FLT_RSSI_ALL | SCAN_FLT_RSSI_NONE */
      .fltMinRssi = SCAN_FLT_RSSI_ALL、

      /*! OPT SCAN_FLT_DISC_NONE | SCAN_FLT_DISC_General | SCAN_FLT_DISC_LIMITED
      *| SCAN_FLT_DISC_ALL | SCAN_FLT_DISC_DISABLE */
      .fltDiscMode = SCAN_FLT_DISC_DISABLE、

      /*! OPT SCAN_FLT_DUP_ENABLE | SCAN_FLT_DUP_DISABLE | SCAN_FLT_DUP_RESET */
      .fltDup = scan_FLT_DUP_DISABLE
    }



    BR、

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

    您好:

    感谢您的分享。 我正在尝试重现您看到的内容、但我不断收到扫描禁用事件。 但是、我没有将 Adv 报告实施到闪存保存过程中。 您如何通知另一个任务(信标?) 您是否不想执行 2 个步骤来查看问题是否无法重现、并指出问题可能与将阵列保存到闪存中的任务有关? 我想从这里开始。

    谢谢。

    David。

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

    您好、David:

    感谢您的答复。
    是的、在大多数情况下、我们也 会正常得到扫描禁用事件。  
    当数组已满时,我们将设置一个标志并通过 FreeRTOS TaskNotify 函数 xTaskNotify () 通知其他任务,当 出现新的 BLE 扫描 BLEAPPUTIL_ADV_REPORT 事件时,它将被忽略,直到该标志被重置。
    我们将尝试按照您的建议测试排除步骤 2、但可能需要很长时间才能检查它是否会再次重现此问题。

    BR、

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

    您好:

    谢谢、了解这一点将非常有用。 我也会继续在没有它的情况下进行测试。

    BR、

    David。