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.

[参考译文] CC2564MODA:HSP 配置文件中的器件重启时自动重新连接

Guru**** 2589810 points
Other Parts Discussed in Thread: CC2564MODA

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/707539/cc2564moda-automatic-reconnect-on-device-restart-in-hsp-profile

器件型号:CC2564MODA

您好!

我将 CC2564MODA BT 模块与基于定制板的 STM32L496搭配使用。

我们的应用需要同时具有 BLE 和经典 BT。 因此、我在非辅助模式下使用 HSP 音频网关将音频播放到耳机。

我的器件是 BLE 从设备、同时是经典主设备。

我已经按照 HSPDemo 示例进行了操作、其中没有提到在主器件上电后自动重新连接经典 BT 的任何内容。  在身份验证过程中、创建的 LinkKey 存储在本地。 从一些较旧的帖子中、我了解到我应该将 LinkKey 保留在 NV 存储器中供以后使用。 BT 堆栈中是否有任何选项可将该值存储在 NVM 中、或者我们是否需要在应用中处理该值?

如果我存储了 LinkKey 并在设备通电时将其取回、如何进行正确的回调以将设备连接到之前配对的耳机? 我应该为此发出什么命令?

请澄清我的疑问。

谢谢、

Indu

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

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

    此实现方案的两个部分来自 BT 堆栈侧、用于将配对器件的链路密钥存储在 NVM 中。

    -当新设备配对时,将在 GAP_Event_Callback 中发生 atLinkKeyCreation 事件。 发生此事件时、您可以看到应用程序正在将链接密钥存储在以下结构中。

    静态 LinkKeyInfo_t LinkKeyInfo[MAX_SUPPORTED_LINK_KEYS];

    该结构存储在 RAM 中、因此在下电上电后不会保留。 此时、您可以在 MCU 的 NVM 中备份 LinkKeyInfo。

    -设备通电后,读取存储在 NVM 中的备份。 然后、在 OpenStack 调用成功后、您可以将此数据传递到 InitializeApplication()函数中的 LinkKeyInfo 结构。 这样、先前存储的 LinkKeyInfo 将在下电上电后恢复、当远程设备尝试重新连接时、应用程序将能够使用之前存储的链接密钥。 这在 GAP_Event_Callback 的 atLinkKeyRequest 事件中发生。

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

    您好 Hari、

    感谢您的详细描述。 我会尝试这个。

    我有另一个查询。  

    关于传统 BT 的调查问题。 我注意到、如果 禁用了 BLE 广播、"咨询"中列出了我的 BT 耳机、没有太多问题。 但是、如果连接了 BLE、则会在一段时间内成功进行一次 BT 查询。 这是正常行为吗?

    我必须首先启用 BLE 才能连接到 iPhone、从而获取耳机详细信息。 我尝试在经典查询开始之前禁用 BLE、并在查询过程完成后再次启用 BLE。 但失败了。

    是否有任何方法可在 BLE 处于连接状态时禁用它、并在需要时再次启用它?

    谢谢、

    Indu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    从 iphone 获取耳机详细信息后、您如何禁用 BLE? 我想、您已经断开了与 iphone 的 LE 连接、还有其他问题吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Hari、

    我使用 GAP_LE_Disconnect ()从设备(从设备)断开了 BLE 连接 、一旦我在经典查询中找到了耳机、 BLE 广播就会启用、我的设备将连接回 iPhone。  我想这种方法可以通过"经典查询"解决问题。  

    但出现的另一个问题是、当连接经典 BT 时、BLE 和 iPhone 连接的广播无法正常工作。  BT 堆栈的缺点是器件无法同时用作 BLE 从设备和经典 BT 主设备吗?

    谢谢、

    Indu

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

    您好 Hari、

    您提到了" -当设备通电时、请读取存储在 NVM 中的备份。 然后、在 OpenStack 调用成功后、您可以将此数据传递到 InitializeApplication()函数中的 LinkKeyInfo 结构。 这样、先前存储的 LinkKeyInfo 将在下电上电后恢复、当远程设备尝试重新连接时、应用程序将能够使用之前存储的链接密钥。 这发生在 GAP_Event_Callback 的 atLinkKeyRequest 事件中。"  

    这意味着只有当远程设备尝试重新连接时才可以进行自动连接? 但是、由于我的设备是 BT 主设备、它应该尝试连接到远程设备、对吧? BT 主设备如何知道与远程耳机的连接是否已关闭或是否超出范围? 它如何知道它是否返回到范围内? 是否有任何回调指示这些更改?

    谢谢、

    Indu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果有人对此有任何想法、请提供帮助。

    谢谢、
    Indu
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是通过定期的"调查"程序进行的。 它应类似于任何电话在该范围内检测头戴式耳机的方式。

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

    您是否意味着当主设备关闭时、从设备将处于广播/可发现模式、以便可以通过正常查询过程连接它?

    关于另一个问题、经典蓝牙和 BLE 同步:当连接经典蓝牙时、BLE 和 iPhone 连接的广播无法正常工作。  BT 堆栈的缺点是器件无法同时用作 BLE 从设备和经典 BT 主设备吗?  

    谢谢、

    Indu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的。。。 在双模模式下、由于对讲机在 BR/EDR 和 LE 之间共享、因此有时可能会很小。 您可以尝试更改"广告"
    和连接参数来检查 LE 连接的改进。

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

    感谢您的回答。

    我将更改广播/连接参数、看看它是否起作用。 您是否对要更改的任何特定参数有任何意见?

    谢谢、

    Indu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以检查以下 API 调用。 并检查“规格”中的相应值--

    例如-
    RET_val = HCI_Write_Page_Scan_Type (BluetoothStackID、0x01、StatusResult);

    RET_val = HCI_Write_Page_Scan_Activity (BluetoothStackID、0x0280、0x0012、StatusResult);
    RET_val = HCI_Write_Inquiry_Scan_Activity (BluetoothStackID、0x0500、0x0012、StatusResult);


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

    谢谢你,哈里。

    我将尝试使用这些 API。

    谢谢、

    Indu

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

    即使使用这些 API、当连接经典 BT 时、我也无法连接回 BLE。

    OT 在 etGATT_Connection_Device_Connection 中获取任何回调。

    谢谢、

    Indu

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

    您好 Hari、

    此问题尚未解决。

    请查看此处所附的记录器信息。

    附加了两个方案的记录器文件。

    1.   BLE_RECONNECT:WO_CBT - BLE 已连接。 未 连接经典 BT。 当 iPhone 超出范围并返回到范围时、BLE 外设能够连接回手机。

    BLE_ITH_CBT - BLE 已连接。  已连接经典 BT。 当 iPhone 超出范围并返回 到范围时、BLE 外设无法连接回 手机。

    谢谢、

    Indu

    e2e.ti.com/.../BT_5F00_Log.zip

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

    您好!

    来自 BT 模块的日志消息显示以下日志。

    情况1. 由于连接超时(超出范围)、经典 BT 已连接、BLE 已断开连接。  

    当器 件处于范围内时、它不会收到命令'HCI_LE_Write_Advertise_Enable'、即未收到 HCI_Command_Complete_LE_Write_Advertise_Enable_Event 的事件。

    附加的日志文件-  NotWorking_CBTnBLE.txt

    情况2. 由于连接超时(超出范围)、经典 BT 未连接、BLE 断开连接。  

    当器 件处于范围内时、它将获得命令'HCI_LE_Write_Advertise_Enable'和后续命令的事件。 BLE 可以毫无问题地连接回来。

    附加的日志文件-  Working_OnlyBLE.txt

    行为差异的原因可能是什么?  

    请帮助。

    e2e.ti.com/.../NotWorking_5F00_CBTnBLE.txt

    e2e.ti.com/.../Working_5F00_OnlyBLE.txt

    谢谢、  

    Indu