AndroidはAVRCPサービス(BlueZ-5.69)への接続を拒否します。

AndroidはAVRCPサービス(BlueZ-5.69)への接続を拒否します。

以前の車には基本的なBluetoothオーディオがなかったので、携帯電話で音楽を聴くためにBluetoothレシーバーを車の3.5mm補助ジャックに接続しました。問題は、運転中に携帯電話を操作せずに携帯電話の再生を制御することです(これは違法です>:)。

それで、面白い週末プロジェクトは、バナナパイを車のCANバスに接続し、ステアリングホイールのメディアボタン(auxで再生するときは使用されません)を聞き、バナナパイがA / Bとして機能するようにすることだと思いました。 V Bluetooth接続を介して携帯電話のメディアプレーヤーを制御する携帯電話のメディアコントローラ。

これらの最も簡単な部分は、CANバスを接続してスニッフィングすることです。 Bluetooth部分はそれほど多くありません。 (私がなぜ約20年間ブルートゥース製品に全く触れなかったのか覚えていますか?)

私はArch LinuxでBlueZ-5.69を使用しています。 AVRCP プロファイルを除くすべての項目を無効にしました。

[bluetooth]# show
Controller AA:AA:AA:AA:AA:AA (public)
  Name: "Car Controller"
  Alias: "Car Controller"
  Class: 0x0000050c (1292)
  Powered: yes
  PowerState: on
  Discoverable: no
  DiscoverableTimeout: 0x000000b4 (180)
  Pairable: yes
  UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
  UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
  UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
  Modalias: usb:v1D6Bp0246d0545
  Discovering: no
  Roles: central
  Roles: peripheral
  ExperimentalFeatures: BlueZ Experimental ISO... (6fbaf188-05e0-496a-9885-d6ddfdb4e03e)

私が理解したのは、これを行うと携帯電話が接続され、メディアプレーヤーコントロールが通過することですdbus。検索とペアリングは正常に機能しているようですが、ペアリングが完了すると電話が切断され、再接続が拒否されます(実際にNAPを設定しようとしました)。 bt-network設定ファイルを使用すると、電話機は実際に提供されたネットワークを使用して接続を維持します。

これは、観点から携帯電話がペアリングされたときに発生する現象ですbluetoothctl

[NEW] Device 3C:38:F4:93:55:61 Xperia 10 Ⅳ
Request confirmation
[agent] Confirm passkey 935792 (yes/no): yes
[CHG] Device 3C:38:F4:93:55:61 Bonded: yes
[CHG] Device 3C:38:F4:93:55:61 Modalias: usb:v0FCEp020Cd0010
[CHG] Device 3C:38:F4:93:55:61 UUIDs: 00001105-0000-1000-8000-00805f9b34fb
[CHG] Device 3C:38:F4:93:55:61 UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
[CHG] Device 3C:38:F4:93:55:61 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device 3C:38:F4:93:55:61 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Device 3C:38:F4:93:55:61 UUIDs: 00001112-0000-1000-8000-00805f9b34fb
[CHG] Device 3C:38:F4:93:55:61 UUIDs: 00001115-0000-1000-8000-00805f9b34fb
[CHG] Device 3C:38:F4:93:55:61 UUIDs: 00001116-0000-1000-8000-00805f9b34fb
[CHG] Device 3C:38:F4:93:55:61 UUIDs: 0000111f-0000-1000-8000-00805f9b34fb
[CHG] Device 3C:38:F4:93:55:61 UUIDs: 0000112f-0000-1000-8000-00805f9b34fb
[CHG] Device 3C:38:F4:93:55:61 UUIDs: 00001132-0000-1000-8000-00805f9b34fb
[CHG] Device 3C:38:F4:93:55:61 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device 3C:38:F4:93:55:61 UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Device 3C:38:F4:93:55:61 UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Device 3C:38:F4:93:55:61 UUIDs: a82efa21-ae5c-3dde-9bbc-f16da7b16c5a
[CHG] Device 3C:38:F4:93:55:61 ServicesResolved: yes
[CHG] Device 3C:38:F4:93:55:61 Paired: yes
[CHG] Device 3C:38:F4:93:55:61 ServicesResolved: no
[CHG] Device 3C:38:F4:93:55:61 Connected: no

bleutoothdログもあります。

Sep 22 14:52:32 alarm bluetoothd[628]: src/shared/mgmt.c:can_read_data() [0x0000] event 0x000b
Sep 22 14:52:32 alarm bluetoothd[628]: src/adapter.c:connected_callback() hci0 device 3C:38:F4:93:55:61 connected eir_len 20
Sep 22 14:52:32 alarm bluetoothd[628]: src/device.c:device_create() dst 3C:38:F4:93:55:61
Sep 22 14:52:32 alarm bluetoothd[628]: src/device.c:device_new() address 3C:38:F4:93:55:61
Sep 22 14:52:32 alarm bluetoothd[628]: src/device.c:device_new() Creating device /org/bluez/hci0/dev_3C_38_F4_93_55_61
Sep 22 14:52:32 alarm bluetoothd[628]: src/device.c:device_set_class() /org/bluez/hci0/dev_3C_38_F4_93_55_61 0x5A020C
Sep 22 14:52:32 alarm bluetoothd[628]: src/shared/mgmt.c:can_read_data() [0x0000] event 0x000f
Sep 22 14:52:32 alarm bluetoothd[628]: src/adapter.c:user_confirm_request_callback() hci0 3C:38:F4:93:55:61 confirm_hint 0
Sep 22 14:52:32 alarm bluetoothd[628]: src/device.c:new_auth() Requesting agent authentication for 3C:38:F4:93:55:61
Sep 22 14:52:32 alarm bluetoothd[628]: src/agent.c:agent_ref() 0x1752050: ref=2
Sep 22 14:52:32 alarm bluetoothd[628]: src/agent.c:agent_request_confirmation() Calling Agent.RequestConfirmation: name=:1.62, path=/org/bluez/agent, passkey=935792
Sep 22 14:52:37 alarm bluetoothd[628]: src/agent.c:agent_ref() 0x1752050: ref=3
Sep 22 14:52:37 alarm bluetoothd[628]: src/adapter.c:btd_adapter_confirm_reply() hci0 addr 3C:38:F4:93:55:61 success 1
Sep 22 14:52:37 alarm bluetoothd[628]: src/agent.c:agent_unref() 0x1752050: ref=2
Sep 22 14:52:37 alarm bluetoothd[628]: src/agent.c:agent_unref() 0x1752050: ref=1
Sep 22 14:52:37 alarm bluetoothd[628]: src/shared/mgmt.c:send_request() [0x0000] command 0x001c
Sep 22 14:52:37 alarm bluetoothd[628]: src/shared/mgmt.c:can_read_data() [0x0000] command 0x001c complete: 0x00
Sep 22 14:52:39 alarm bluetoothd[628]: src/shared/mgmt.c:can_read_data() [0x0000] event 0x0009
Sep 22 14:52:39 alarm bluetoothd[628]: src/adapter.c:new_link_key_callback() hci0 new key for 3C:38:F4:93:55:61 type 8 pin_len 0 store_hint 1
Sep 22 14:52:39 alarm bluetoothd[628]: src/device.c:device_set_bonded() setting bonded for device to true
Sep 22 14:52:39 alarm bluetoothd[628]: src/device.c:btd_device_set_temporary() temporary 0
Sep 22 14:52:39 alarm bluetoothd[628]: src/device.c:device_bonding_complete() bonding (nil) status 0x00
Sep 22 14:52:39 alarm bluetoothd[628]: src/device.c:device_bonding_complete() setting timer for reverse service discovery
Sep 22 14:52:39 alarm bluetoothd[628]: src/adapter.c:resume_discovery()
Sep 22 14:52:39 alarm bluetoothd[628]: src/shared/mgmt.c:send_request() [0x0000] command 0x0033
Sep 22 14:52:39 alarm bluetoothd[628]: src/shared/mgmt.c:can_read_data() [0x0000] event 0x002a
Sep 22 14:52:39 alarm bluetoothd[628]: src/shared/mgmt.c:can_read_data() [0x0000] command 0x0033 complete: 0x00
Sep 22 14:52:39 alarm bluetoothd[628]: src/adapter.c:add_accept_list_complete() 3C:38:F4:93:55:61 added to kernel accept list
Sep 22 14:52:41 alarm bluetoothd[628]: profiles/audio/avrcp.c:avrcp_controller_probe() path /org/bluez/hci0/dev_3C_38_F4_93_55_61
Sep 22 14:52:41 alarm bluetoothd[628]: profiles/audio/control.c:control_init() Registered interface org.bluez.MediaControl1 on path /org/bluez/hci0/dev_3C_38_F4_93_55_61
Sep 22 14:52:41 alarm bluetoothd[628]: src/service.c:btd_service_ref() 0x17458d0: ref=2
Sep 22 14:52:41 alarm bluetoothd[628]: src/service.c:change_state() 0x17458d0: device 3C:38:F4:93:55:61 profile avrcp-controller state changed: unavailable -> disconnected (0)
Sep 22 14:52:41 alarm bluetoothd[628]: profiles/audio/avrcp.c:avrcp_target_probe() path /org/bluez/hci0/dev_3C_38_F4_93_55_61
Sep 22 14:52:41 alarm bluetoothd[628]: src/service.c:btd_service_ref() 0x17524c0: ref=2
Sep 22 14:52:41 alarm bluetoothd[628]: src/service.c:change_state() 0x17524c0: device 3C:38:F4:93:55:61 profile audio-avrcp-target state changed: unavailable -> disconnected (0)
Sep 22 14:52:41 alarm bluetoothd[628]: src/device.c:device_svc_resolved() /org/bluez/hci0/dev_3C_38_F4_93_55_61 err 0
Sep 22 14:52:47 alarm bluetoothd[628]: src/shared/mgmt.c:can_read_data() [0x0000] event 0x000c
Sep 22 14:52:47 alarm bluetoothd[628]: src/adapter.c:dev_disconnected() Device 3C:38:F4:93:55:61 disconnected, reason 3
Sep 22 14:52:47 alarm bluetoothd[628]: src/adapter.c:adapter_remove_connection()
Sep 22 14:52:47 alarm bluetoothd[628]: src/adapter.c:bonding_attempt_complete() hci0 bdaddr 3C:38:F4:93:55:61 type 0 status 0xe
Sep 22 14:52:47 alarm bluetoothd[628]: src/device.c:device_bonding_complete() bonding (nil) status 0x0e
Sep 22 14:52:47 alarm bluetoothd[628]: src/device.c:device_bonding_failed() status 14

この行を読むとSep 22 14:52:41 alarm bluetoothd[628]: profiles/audio/control.c:control_init() Registered interface org.bluez.MediaControl1 on path /org/bluez/hci0/dev_3C_38_F4_93_55_61有望に見えますが、1秒以内に接続が切断されます。

それで、このポイントに到達してから放棄するまで、独自のAVRCPプロファイルとサービスを実装しながら、約1週間の間にBluetooth標準ウサギの洞窟をたどりました。その後、古いiPhoneを取り出してバナナパイとペアリングして携帯電話の接続ボタンを押したところ、このような内容が出ました。

[agent] Authorize service 0000110e-0000-1000-8000-00805f9b34fb (yes/no): yes
[NEW] Player /org/bluez/hci0/dev_58_E2_8F_62_31_7C/player0 [default]
[CHG] Player /org/bluez/hci0/dev_58_E2_8F_62_31_7C/player0 Repeat: off
[CHG] Player /org/bluez/hci0/dev_58_E2_8F_62_31_7C/player0 Shuffle: off
[CHG] Player /org/bluez/hci0/dev_58_E2_8F_62_31_7C/player0 Status: stopped
[CHG] Player /org/bluez/hci0/dev_58_E2_8F_62_31_7C/player0 Track Key: Title
[CHG] Player /org/bluez/hci0/dev_58_E2_8F_62_31_7C/player0 Track Value:
[CHG] Player /org/bluez/hci0/dev_58_E2_8F_62_31_7C/player0 Track Key: TrackNumber
[CHG] Player /org/bluez/hci0/dev_58_E2_8F_62_31_7C/player0 Track Value: 0x00000000 (0)
[CHG] Player /org/bluez/hci0/dev_58_E2_8F_62_31_7C/player0 Track Key: NumberOfTracks
[CHG] Player /org/bluez/hci0/dev_58_E2_8F_62_31_7C/player0 Track Value: 0x00000000 (0)
[CHG] Player /org/bluez/hci0/dev_58_E2_8F_62_31_7C/player0 Track Key: Duration
[CHG] Player /org/bluez/hci0/dev_58_E2_8F_62_31_7C/player0 Track Value: 0x00000000 (0)
[CHG] Player /org/bluez/hci0/dev_58_E2_8F_62_31_7C/player0 Track Key: Album
[CHG] Player /org/bluez/hci0/dev_58_E2_8F_62_31_7C/player0 Track Value:
[CHG] Player /org/bluez/hci0/dev_58_E2_8F_62_31_7C/player0 Track Key: Artist
[CHG] Player /org/bluez/hci0/dev_58_E2_8F_62_31_7C/player0 Track Value:
[CHG] Player /org/bluez/hci0/dev_58_E2_8F_62_31_7C/player0 Track Key: Genre
[CHG] Player /org/bluez/hci0/dev_58_E2_8F_62_31_7C/player0 Track Value:
[CHG] Player /org/bluez/hci0/dev_58_E2_8F_62_31_7C/player0 Position: 0x00000000 (0)
[CHG] Player /org/bluez/hci0/dev_58_E2_8F_62_31_7C/player0 Position: 0x00000000 (0)

効果がある!

今私の質問は、iPhoneはメディアコントローラサービスに接続するのに問題がないのですが、Android携帯電話(そのうち3つがあります)はペアリング後に接続しようとすることができない理由です。私はここで本当に迷っているので、どんな洞察力でも大いに感謝します。

関連情報