Perfil Bluetooth bloqueado para A2DP (dissipador de áudio de alta qualidade), mas não pode mudar para HFP / HSP (fone de ouvido bidirecional de baixa qualidade)

3

Em um laptop Acer, eu nunca tive suporte para o adaptador Bluetooth - link - e finalmente jogou a toalha e comprou um dongle Bluetooth USB barato:

# lsusb -v -d 0a12:0001

Bus 002 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          224 Wireless
  bDeviceSubClass         1 Radio Frequency
  bDeviceProtocol         1 Bluetooth
  bMaxPacketSize0        64
  idVendor           0x0a12 Cambridge Silicon Radio, Ltd
  idProduct          0x0001 Bluetooth Dongle (HCI mode)
  bcdDevice           88.91
  iManufacturer           0 
  iProduct                2 CSR8510 A10
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength          177
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xe0
      Self Powered
      Remote Wakeup
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           3
      bInterfaceClass       224 Wireless
      bInterfaceSubClass      1 Radio Frequency
      bInterfaceProtocol      1 Bluetooth
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0010  1x 16 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       224 Wireless
      bInterfaceSubClass      1 Radio Frequency
      bInterfaceProtocol      1 Bluetooth
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            1
          Transfer Type            Isochronous
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0000  1x 0 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            1
          Transfer Type            Isochronous
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0000  1x 0 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       1
      bNumEndpoints           2
      bInterfaceClass       224 Wireless
      bInterfaceSubClass      1 Radio Frequency
      bInterfaceProtocol      1 Bluetooth
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            1
          Transfer Type            Isochronous
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0009  1x 9 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            1
          Transfer Type            Isochronous
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0009  1x 9 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       2
      bNumEndpoints           2
      bInterfaceClass       224 Wireless
      bInterfaceSubClass      1 Radio Frequency
      bInterfaceProtocol      1 Bluetooth
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            1
          Transfer Type            Isochronous
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0011  1x 17 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            1
          Transfer Type            Isochronous
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0011  1x 17 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       3
      bNumEndpoints           2
      bInterfaceClass       224 Wireless
      bInterfaceSubClass      1 Radio Frequency
      bInterfaceProtocol      1 Bluetooth
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            1
          Transfer Type            Isochronous
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0019  1x 25 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            1
          Transfer Type            Isochronous
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0019  1x 25 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       4
      bNumEndpoints           2
      bInterfaceClass       224 Wireless
      bInterfaceSubClass      1 Radio Frequency
      bInterfaceProtocol      1 Bluetooth
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            1
          Transfer Type            Isochronous
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0021  1x 33 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            1
          Transfer Type            Isochronous
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0021  1x 33 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       5
      bNumEndpoints           2
      bInterfaceClass       224 Wireless
      bInterfaceSubClass      1 Radio Frequency
      bInterfaceProtocol      1 Bluetooth
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            1
          Transfer Type            Isochronous
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0031  1x 49 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            1
          Transfer Type            Isochronous
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0031  1x 49 bytes
        bInterval               1
Device Status:     0x0001
  Self Powered

No Windows 10 (inicialização dupla) tudo funciona, incluindo o adaptador Bluetooth integrado e o adaptador USB dongle USB. Eu tenho um monte de fones de ouvido que suportam tanto A2DP (saída de áudio de alta qualidade apenas) e HFP / HSP (entrada e saída bidirecional de baixa qualidade). No Windows 10, o perfil correto do Bluetooth é escolhido automaticamente para ser consistente com o aplicativo.

Note que estou executando o Gnome 3, e não o Unity, atualmente na versão 3.26.2-0ubuntu0.1 (que é compatível com o Ubuntu 17.10).

No Ubuntu antes 17.04, eu poderia trocar manualmente um headset entre A2DP e HFP / HSP facilmente do gnome-control-center. Os fones de ouvido Bluetooth que foram emparelhados em versões anteriores do Ubuntu, como o 16.04, continuam a funcionar corretamente em versões posteriores à medida que o Ubuntu foi atualizado.

Eu tive algumas modificações em /etc/pulse/default.pa que permitiram que meu fone de ouvido principal se tornasse o dispositivo de áudio padrão (substituindo os alto-falantes e microfone embutidos no gabinete do laptop) quando ele estava conectado. Fiz isso removendo o comentário e, portanto, ativando o carregamento do módulo "module-switch-on-connect" e especificando manualmente o headset pelo identificador de dispositivo único como a fonte padrão e o coletor padrão:

set-default-sink bluez_sink.16_07_12_21_09_4B.headset_head_unit
set-default-source bluez_sink.16_07_12_21_09_4B.headset_head_unit

O que não funciona é que os fones de ouvido Bluetooth recém-emparelhados desde o lançamento de 17.04 estão bloqueados para o A2DP e não podem ser alternados. Ambos os perfis aparecem no menu suspenso apropriado no centro de controle do gnome, mas selecionar HFP / HSP não tem efeito e não é retido. Na verdade, selecionar HFP / HSP e usar "Testar alto-falantes" mostra um canal esquerdo e um direito, provando que o dispositivo ainda está no modo A2DP (que é estéreo) em vez do modo HFP / HSP (que é mono).

Aqui está um exemplo de saída de "cards de lista pactl" mostrando o fone de ouvido Bluetooth relevante:

Name: bluez_card.FB_60_AD_59_5B_9E
Driver: module-bluez5-device.c
Owner Module: 33
Properties:
    device.description = "Premium Earbuds"
    device.string = "FB:60:AD:59:5B:9E"
    device.api = "bluez"
    device.class = "sound"
    device.bus = "bluetooth"
    device.form_factor = "hands-free"
    bluez.path = "/org/bluez/hci0/dev_FB_60_AD_59_5B_9E"
    bluez.class = "0x240408"
    bluez.alias = "Premium Earbuds"
    device.icon_name = "audio-handsfree-bluetooth"
    device.intended_roles = "phone"
Profiles:
    a2dp_sink: High Fidelity Playback (A2DP Sink) (sinks: 1, sources: 0, priority: 10, available: yes)
    headset_head_unit: Headset Head Unit (HSP/HFP) (sinks: 1, sources: 1, priority: 20, available: no)
    off: Off (sinks: 0, sources: 0, priority: 0, available: yes)
Active Profile: a2dp_sink
Ports:
    handsfree-output: Handsfree (priority: 0, latency offset: 0 usec)
        Part of profile(s): a2dp_sink, headset_head_unit
    handsfree-input: Handsfree (priority: 0, latency offset: 0 usec, not available)
        Part of profile(s): headset_head_unit

Note especialmente que o bloco "Profiles" onde "a2dp_sink" está listado com "available: yes" e "headset_head_unit" está listado com "available: no". Lembre-se, isso não pode vir diretamente do dispositivo porque (1) esses fones de ouvido funcionam como esperado no Windows 10 e (2) o mesmo modelo funciona corretamente se e somente se foi emparelhado com uma versão mais antiga do Ubuntu. Identicamente, os resultados são experimentados com quatro ou cinco headsets diferentes, por isso estou confiante de que eles não são defeituosos.

Tentar definir o perfil manualmente é bem-sucedido para o A2DP, mas falha no HFP / HSP com um erro:

# pactl set-card-profile 8 a2dp_sink
# pactl set-card-profile 8 headset_head_unit
Failure: Input/Output error

Eu ficaria satisfeito em obter esses fones de ouvido permanentemente bloqueados para HFP / HSP e nunca usar A2DP, se necessário, mas não consigo descobrir nem como fazer isso.

    
por Mike 12.12.2017 / 16:33

0 respostas