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.

[参考译文] CC2564CSTBTBLESW:与 Android 手机的 AVRCP 音量同步

Guru**** 2874030 points

Other Parts Discussed in Thread: CC2564C, CC2564CSTBTBLESW

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/975067/cc2564cstbtblesw-avrcp-volume-synchronization-with-android-phones

器件型号:CC2564CSTBTBLESW
主题中讨论的其他器件:CC2564C

我们将 CC2564C 芯片与 CC2564CSTBTBLESW 4.2.1.0搭配用于 A2DP 音频信宿和音频源应用。 我通过以下方式实现了 AVRCP 卷同步:

  1. 接收器承担 AVRCP 目标角色通过 SDP_AVRCP_SUPPORed_features _target_category_1、AVRCP 版本设置为1.4 (它还需要控制器角色从源获取跟踪数据)
  2. 接收器通过 AVRCP_EVENT_VOLUME_CHANGETER 事件功能支持 amtGetCapabilities 命令进行响应
  3. 接收到 amtRegisterNotification AVRCP_EVENT_VOLUME_CHANGE_CHANGEed 命令时、接收器使用本地卷数据进行响应
  4. 灌电流在其扩展查询信息中具有0x110B、0x110E 和0x110C 服务 UUID (对于 AVRCP 控制器角色为0x110F)
  5. 灌电流具有0x240414器件类

结果是 iOS 电话注册到卷事件通知、并按预期发送 setAbsoluteVolume 命令。 对于 Android 手机、不能说同样的、他们甚至不会发送 GetCapabilities 命令来查找 AVRCP 事件支持。 相同的 Android 手机可以将音量与其他蓝牙扬声器同步、因此手机端不会缺少支持。 有什么关于遗漏的想法吗?

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

    与其他蓝牙扬声器相比、您是否可以在连接到设备时在 Android 手机上获取 BT 监测日志进行比较?

    谢谢

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

    我们为您提供了 Google Pixel 2 XL (Android 11)的 btsnoop 结果。 这个来自我们的 CC2564C 器件:

    e2e.ti.com/.../btsnoop_5F00_hci_2D00_PROJECT_2D00_volume_2D00_sync_2D00_fail.log

    这是具有工作音量同步功能的参考音频信宿:

    e2e.ti.com/.../btsnoop_5F00_hci_2D00_REFERENCE_2D00_volume_2D00_OK.log

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

    正如您所注意到的、像素2似乎没有从对等器件请求 AVRCP 功能。 另一方面、您的洗涤槽设备似乎要求具备电话的能力。 您是否尝试不向接收器请求功能? 它可能会触发电话询问它吗?

    谢谢

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

    我在没有请求功能的情况下进行了测试、但这并不会产生影响。

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

    它是特定于 Pixel2还是也与其他 Android 手机一起使用? 我将检查我们是否可以在这里重现它。

    谢谢

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

    这是我们目前为止尝试过的 Android 手机的常见问题。

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

    我明白了。 让我尝试重现我们的设置。

    谢谢

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

    对此进行了任何更新? 这应易于重现。

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

    您是否更改了 BluetopiaSDK 中的演示示示示示示例代码? 如果是、您能否将所做的代码更改发送到与您共享的 Box 文件夹。

    谢谢

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

    我已将我们的源实施置于箱文件夹中。 相关部件位于 AudioRole 和 AudioSink 文件中。

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

    Git。 谢谢

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

    明白了。 谢谢

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

    查看 HCI/AVRCP 跟踪日志、灌电流单元(TG)似乎未发送'EVENT_VOLUE_CHANGE'事件 ID 以响应'AVRCP_GetCapabilties '。

    以下内容适用于:REFERECNE-Volume-Ok.log

    但是、无论如何、iPhone 似乎都会为"音量"发送更改后的通知命令。

    此外、查看 SDP 描述符后、我想知道您是否需要将 ServiceClass ID 更改为"A/V 远程控制目标"。 我想、Android 设备可能不会发布 GetCapabilties、因为它会将对等设备视为控制器?

    谢谢

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

    到目前为止、我们还没有使用 SDP API、 CC2564CSTBTBLESW 中也没有示例。 我们确实设置了我提到的扩展查询信息、以指示控制器和目标角色(用于获取跟踪数据和卷同步)。 您能否为我提供有关如何修改 SDP 描述符的示例代码? 我假设 AUD_Initialize()调用自行设置一些 SDP 记录,因此我们需要在之后调用它,对吧?

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

    是的,正确的 AUD_Initialize()配置 SDP 描述符。 我想、您还使用 SDP API 手动设置它们(如 BluetopiaCoreAPI.pdf 中所述)。 奇怪的是、只有在 Android 手机上、服务描述符才不显示"A/V 远程控制目标"。 我想知道、扩展查询信息是否会影响 SDP 描述符。 让我检查一下...

    谢谢

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

    我已经将 AUD_Initialize()调用生成的 SDP 描述符与另一个 A2DP 接收器进行了比较,该接收器与 Android 进行有效的卷同步,但对我来说,它没有显示我们的设置中明显缺少的任何内容。 作为参考、这是我们的实现方案的 SDP 描述符:

    SDP_Service_Search_Attribute_Request (高级音频)成功。
    接收到 SDP 服务搜索属性响应(大小= 0x0010)
    服务记录:1:
       属性 ID 0x0000
          类型:无符号整型= 0x00010000
       属性 ID 0x0001
          类型:数据元素序列
             类型:UUUUID_16 = 0x110B
       属性 ID 0x0004
          类型:数据元素序列
             类型:数据元素序列
                键入:UUUID_16 = 0x0100
                类型:无符号整型= 0x0019
             类型:数据元素序列
                键入:UUUID_16 = 0x0019
                类型:无符号整型= 0x0102
       属性 ID 0x0009
          类型:数据元素序列
             类型:数据元素序列
                键入:UUUUID_16 = 0x110D
                类型:无符号整型= 0x0102
       属性 ID 0x0100
          类型:文本字符串= A2DP 灌电流

    SDP_Service_Search_Attribute_Request (A/V 远程控制)成功。
    接收到 SDP 服务搜索属性响应(大小= 0x0010)
    服务记录:1:
       属性 ID 0x0000
          类型:无符号整型= 0x00010001
       属性 ID 0x0001
          类型:数据元素序列
             键入:UUUUID_16 = 0x110E
             键入:UUUID_16 = 0x110F
       属性 ID 0x0004
          类型:数据元素序列
             类型:数据元素序列
                键入:UUUID_16 = 0x0100
                类型:unsigned Int = 0x0017
             类型:数据元素序列
                键入:UUUID_16 = 0x0017
                类型:无符号整型= 0x0103
       属性 ID 0x0006
          类型:数据元素序列
             类型:无符号整型= 0x656E
             类型:无符号整型= 0x006A
             类型:unsigned Int = 0x0100
       属性 ID 0x0009
          类型:数据元素序列
             类型:数据元素序列
                键入:UUUUID_16 = 0x110E
                类型:无符号整型= 0x0104
       属性 ID 0x0100
          类型:文本字符串= A2DP 灌电流
       属性 ID 0x0102
          键入:Text String = Stonestreet One
       属性 ID 0x0311
          类型:无符号整型= 0x0001
    服务记录:2:
       属性 ID 0x0000
          类型:无符号整型= 0x00010002
       属性 ID 0x0001
          类型:数据元素序列
             键入:UUUUID_16 = 0x110C
       属性 ID 0x0004
          类型:数据元素序列
             类型:数据元素序列
                键入:UUUID_16 = 0x0100
                类型:unsigned Int = 0x0017
             类型:数据元素序列
                键入:UUUID_16 = 0x0017
                类型:无符号整型= 0x0103
       属性 ID 0x0006
          类型:数据元素序列
             类型:无符号整型= 0x656E
             类型:无符号整型= 0x006A
             类型:unsigned Int = 0x0100
       属性 ID 0x0009
          类型:数据元素序列
             类型:数据元素序列
                键入:UUUUID_16 = 0x110E
                类型:无符号整型= 0x0104
       属性 ID 0x0100
          类型:文本字符串= A2DP 灌电流
       属性 ID 0x0102
          键入:Text String = Stonestreet One
       属性 ID 0x0311
          类型:无符号整型= 0x0001


    这是从并发器件读取的数据:

    SDP_Service_Search_Attribute_Request (高级音频)成功。
    接收到 SDP 服务搜索属性响应(大小= 0x0010)
    服务记录:1:
       属性 ID 0x0000
          类型:无符号整型= 0x00010005
       属性 ID 0x0001
          类型:数据元素序列
             类型:UUUUID_16 = 0x110B
       属性 ID 0x0004
          类型:数据元素序列
             类型:数据元素序列
                键入:UUUID_16 = 0x0100
                类型:无符号整型= 0x0019
             类型:数据元素序列
                键入:UUUID_16 = 0x0019
                类型:无符号整型= 0x0103
       属性 ID 0x0005
          类型:数据元素序列
             键入:UUUUID_16 = 0x1002
       属性 ID 0x0009
          类型:数据元素序列
             类型:数据元素序列
                键入:UUUUID_16 = 0x110D
                类型:无符号整型= 0x0103
       属性 ID 0x0100
          类型:文本字符串=音频信宿
       属性 ID 0x0311
          类型:无符号整型= 0x000F

    SDP_Service_Search_Attribute_Request (A/V 远程控制)成功。
    接收到 SDP 服务搜索属性响应(大小= 0x0010)
    服务记录:1:
       属性 ID 0x0000
          类型:无符号整型= 0x00010003
       属性 ID 0x0001
          类型:数据元素序列
             键入:UUUUID_16 = 0x110E
             键入:UUUID_16 = 0x110F
       属性 ID 0x0004
          类型:数据元素序列
             类型:数据元素序列
                键入:UUUID_16 = 0x0100
                类型:unsigned Int = 0x0017
             类型:数据元素序列
                键入:UUUID_16 = 0x0017
                类型:无符号整型= 0x0103
       属性 ID 0x0005
          类型:数据元素序列
             键入:UUUUID_16 = 0x1002
       属性 ID 0x0009
          类型:数据元素序列
             类型:数据元素序列
                键入:UUUUID_16 = 0x110E
                类型:无符号整型= 0x0106
       属性 ID 0x000D
          类型:数据元素序列
             类型:数据元素序列
                类型:数据元素序列
                   键入:UUUID_16 = 0x0100
                   类型:无符号整型= 0x001B
                类型:数据元素序列
                   键入:UUUID_16 = 0x0017
                   类型:无符号整型= 0x0103
       属性 ID 0x0100
          类型:文本字符串= AVRCP CT
       属性 ID 0x0311
          类型:无符号整型= 0x000F
    服务记录:2:
       属性 ID 0x0000
          类型:无符号整型= 0x00010004
       属性 ID 0x0001
          类型:数据元素序列
             键入:UUUUID_16 = 0x110C
       属性 ID 0x0004
          类型:数据元素序列
             类型:数据元素序列
                键入:UUUID_16 = 0x0100
                类型:unsigned Int = 0x0017
             类型:数据元素序列
                键入:UUUID_16 = 0x0017
                类型:无符号整型= 0x0103
       属性 ID 0x0005
          类型:数据元素序列
             键入:UUUUID_16 = 0x1002
       属性 ID 0x0009
          类型:数据元素序列
             类型:数据元素序列
                键入:UUUUID_16 = 0x110E
                类型:无符号整型= 0x0105
       属性 ID 0x000D
          类型:数据元素序列
             类型:数据元素序列
                类型:数据元素序列
                   键入:UUUID_16 = 0x0100
                   类型:无符号整型= 0x001B
                类型:数据元素序列
                   键入:UUUID_16 = 0x0017
                   类型:无符号整型= 0x0103
       属性 ID 0x0100
          类型:文本字符串= AVRCP TG
       属性 ID 0x0311
          类型:无符号整型= 0x005F


    为了记录在案、我尝试使用与此其他器件相同的支持功能标志、但没有任何改进。

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

    让我回顾一下 SDP 描述符并返回。

    谢谢

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

    你好!

    我在这个主题上有好消息! 我已重新检查 AVRCP 规范、发现 AbsoluteVolume 指定为类别2的必需项、因此我将配置修改为 TargetRoleInfo.SupportedFeaturesFlags = ControllerRoleInfo.SupportedFeaturesFlags = 0x002 | 0x001;(转换为 Cat1 + Cat2)。 这导致 Android 手机最终注册了音量通知、并发送了 SetAbsoluteVolume 命令。