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.

[参考译文] CC2745R10-Q1:CC2745R10-Q1:GapAdv_loadByHandle 是否能确保在广播期间提供一致的扫描响应数据?

Guru**** 2767155 points

Other Parts Discussed in Thread: CC2745R10-Q1, SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1600040/cc2745r10-q1-cc2745r10-q1-does-gapadv_loadbyhandle-guarantee-consistent-scan-response-data-during-advertising

器件型号: CC2745R10-Q1
主题: SysConfig 中讨论的其他器件

TI、您好

我想确认 BLE 栈中广播 API 的预期行为。
我的当前流程为:

1.调用 GapAdv_create() 以创建广播集并获取句柄。
2.使用 GapAdv_setParam () 来配置广播间隔。
3.使用 GapAdv_setEventMask() 启用所需的事件。
4.使用 GapAdv_loadByHandle () 加载广播和扫描响应数据。
5.使用 GapAdv_enable() 和 GapAdv_disable() 开始和停止广播。

在这个过程中,我可以假设发送扫描响应时总是会返回带 GapAdv_loadByHandle () 的扫描响应数据集吗?
是否需要进行额外的 API 调用?

此致、

Sho

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    作为额外参考、请参阅此处的相关讨论:
    CC2745R10-Q1:排除 CC2745 上缺失扫描响应的故障
    该主题密切相关、因为它解决了扫描响应数据可能未按预期显示的情况、这与我关于GapAdv_loadByHandle()在广播期间是否保证扫描响应数据一致的问题有关。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Sho、  

    您是否尝试过在的 SysConfig 中设置扫描响应数据  BLE ->广播设备配置->广播设备 1 ->扫描响应数据 1 ?  

    basic_ble 项目使用 GapAdv_loadByHandle () 来加载通过 sysconfig 配置的扫描响应数据。 要回答您的问题、yes GapAdv_loadByHandle 将允许您配置扫描响应数据。 对扫描请求的响应略有不同。 默认情况下、扫描响应数据在 basic_ble 工程中的扫描请求之后发送。 要在项目内对扫描请求实现额外的处理、您需要为扫描请求 (BLEAPPUTIL_SCAN_REQUERED) 启用事件、并在该事件内实现您的处理。  

    使用 GapAdv_loadByHandle 函数加载扫描请求数据将配置要发送以响应扫描请求的数据。

    谢谢、
    Isaac

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

    您好、Isaac、  

    > 您是否已尝试在 SysConfig 中设置扫描响应数据  BLE ->广播设备配置->广播设备 1 ->扫描响应数据 1 ?   

    目前、我有 未在 SysConfig 中配置扫描响应数据 BLE→Broadcaster Configuration→Advertisement Set 1→Scan Response Data 1 下
    而是设置扫描响应数据 来处理我的应用程序代码 不使用GapAdv_loadByHandle() API。

    ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----

    我目前正在处理以下主题中描述的问题:
    CC2745R10-Q1:排除 CC2745 上缺失扫描响应的故障。

     CC2745R10-Q1:排除 CC2745 上缺失扫描响应的故障 

    -----  -----  -----  -----  -----  -----  -----  -----  -----  -----  -----  -----  ----- ​

    我正在通过 CC2745 使用 BLE5-Stack (SDK 9.10)、因此对GapAdv_loadByHandle() API 的行为有疑问。

    拨打电话时 GapAdv_loadByHandle()广播数据 扫描响应数据 、我们将数据长度和一个指向数据缓冲区的指针传递。
    我的问题是:

    • 执行堆栈 将数据复制到其内部存储器中
    • 可以 保留指针并直接使用原始缓冲区

    这对于内存管理很重要、因为如果栈仅保留指针、应用程序必须确保缓冲区在广播期间保持有效。

    您能否说明具体的行为?
    此外、如果针对缓冲器寿命或安全更新程序有官方建议、请分享。

    谢谢!

    Sho

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

    您好、

    API GapAdv_loadByHandle() 不会将缓冲区的内容复制到内部内存中。 该 API() 验证与广播集相关的参数、并设置指针。 应用的预期是、缓冲区在广播启用的整个期间可用。 释放缓冲区可能会导致扫描响应/广播数据损坏。

    关于您最初担心缺少扫描响应的问题、您能否分享您的筛选器设置? 您是否已将设备配置为使用接受列表/白名单? 扫描报告在什么情况下丢失? 这是仅在使用 iOS 设备进行测试时发生的、还是在使用 Android 设备时发生的? 两个电话操作系统都有使用特定地址类型的自己设置。 很可能其中一个配置不匹配、从而导致缺少扫描报告。

    期待您对此做出回应。 谢谢、最棒的是、
    Achyut Ray

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

    您好 Achyut:  

    滤波器设置如上所示。

    设备运行的是 iOS。

    不使用 AcceptList/白名单。

    --------------------------------------------------------

    我还使用 API GapAdv_loadByHandle () 来设置扫描响应和广播数据。
    如果 CC2745 从未进入待机模式、则正常传输数据。
    但是、如果 CC2745 进入待机模式、即使只有一次、也会传输正常数据。 但是、有时某些数据会损坏。
    我还确认在这些情况下不会覆盖缓冲区内容。
    即使缓冲区内容未被覆盖、某些数据仍被损坏的原因可能是什么?

    谢谢!

    Sho

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

    您好 Achyut:


    我将在上述员额中增补补充资料。
    使用 CC2745 进行广播时、某些扫描数据可能会损坏。
    (示例)
    本地名称:

    我想知道一些事情来帮助您确定原因。

    【前提条件】
    广播和扫描信息设置使用以下 API 执行。
    ・GapAdv_create
    ・GapAdv_loadByHandle(句柄 ID、数据类型 (=GAP_ADV_DATA_TYPE_ADV)、Len (=0)、pBuf (=&Adv Data))
    ・GapAdv_loadByHandle(句柄 ID、数据类型 (=GAP_ADV_DATA_TYPE_SCAN_RSP)、Len (=10)、pBuf (=&Scan Data))
    ・GapAdv_setEventMask

    扫描数据存储在应用代码的 RAM 中,并通过使用 GapAdv_loadByHandle () 传递相应地址输入到 SDK 中。
    我已经确认扫描数据的现实情况没有改变在以下时间点 A~C

    (时间点 A)运行 GapAdv_loadByHandle() 之前
    (时间点 B)运行 GapAdv_setEventMask() 后
    (时间点 C)

    【问题】
    1.时间点是否适合确认扫描数据的实际情况?
    2.如果没有,请告诉我您需要在什么时候确保扫描数据实体没有改变。
    3.如果设置方法和时间点正确,我认为 SDK 内部发生了损坏。
      是否可以对此进行调查?

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

    Greetigns Itsuki,

    您的过滤器设置看起来正常。 您发送的图像还确认扫描响应应该多次正确发送。 您能否在出现问题时检查扫描响应数据指针是否指向包含有效数据的缓冲区? 在我看来,不知何故缓冲区在发送大约 10 个扫描响应后被损坏。  

    我使用 iPhone 和最新的 SDK 并行测试了相同的内容、我可以报告我没有看到相同的问题。 您是否有机会使用最新的 SDK 进行测试?

    此致、
    Achyut Ray

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

    您好 Achyut:

    感谢您检查滤波器设置并使用最新的 SDK 进行验证。

    >当出现问题时、您能否检查扫描响应数据指针是否指向包含有效数据的缓冲区?
    我想进一步了解上述情况。
    将其解释为以下确认是否正确?
    运行 GapAdv_loadByHandle () 时验证有效数据是否存储在传递给 SDK 的扫描数据的地址中

    谢谢!
    Itsuki

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

    您好 Achyut:

    感谢您检查滤波器设置并使用最新的 SDK 进行验证。

    >当出现问题时、您能否检查扫描响应数据指针是否指向包含有效数据的缓冲区?
    我想进一步了解上述情况。
    将其解释为以下确认是否正确?
    运行 GapAdv_loadByHandle () 时验证有效数据是否存储在传递给 SDK 的扫描数据的地址中

    ■Postscript
    我确认所附图的红色框部分中的地址内容不变。
    因为很难与嗅探器同步,我已经通过以下方法确认了它。

    【方法】
    步骤
    1.使用监听器记录通信数据。
    2.设置在写入指定地址时激活的断点。
    (使用调试器函数)
    3.监视它不会在步骤 2 中设置的断点处停止。
    4.约 30 秒后,检查使用监听器获得的通信数据。

    【结果】
    ・不要在步骤 2 中设置的断点处停止。
    ・监听器获取的通信数据的某些扫描响应已损坏。
    根据上述结果、我认为指针指向的地址的内容没有改变。

    *如果有一个更好的方法,如果你能告诉我,我会很感激。


    此外、从待机状态返回时、不会使用以下 API 设置各种参数。
    ・GapAdv_create
    ・GapAdv_loadByHandle
    ・GapAdv_setEventMask
    从待机模式切换到运行模式时、是否需要再次运行上述 API?

    谢谢!
    Itsuki