Como determinar a versão do Bluetooth de qualquer carro, usando o Linux

O bluetooth está se tornando cada vez mais comum em equipamentos de som, tanto automotivos, quanto domésticos ou profissionais.
Equipamentos de som domésticos não são trocados com a mesma frequência dos smartphones. Tal como as TVs, é comum manter um bom aparelho de som por mais de 10 anos.
bluetooth mercedes-benz multimedia
O equipamento de som do carro, contudo, é um caso a parte.
Muitos carros atuais, já vem com o sistema de som completo, já instalado e perfeitamente ajustado ao design interior do veículo.
Neste caso, a substituição é mais difícil e pode ser mais cara — principalmente, se você decidir trocar o carro, em função de ter se decepcionado com o seu sistema de áudio.
O Bluetooth é uma tecnologia em desenvolvimento (desde o início da década de 90) e, provavelmente, deve estar atingindo o ápice da sua maturidade.
Se o equipamento de som tem este recurso, saber a versão embarcada do Bluetooth pode ajudar a entender o que realmente é possível fazer, dentro do automóvel, durante uma viagem, por exemplo.
Dentro de um carro, considero alguns itens importantes, neste tema:

  • que o sistema de som aceite a conexão com mais de um dispositivo simultaneamente — o que permite que vários ocupantes possam se revezar facilmente no seu uso.
  • que a conexão tenha largura de banda o suficiente para reproduzir áudio de altíssima qualidade.
  • que mantenha um fluxo estável da transmissão de áudio, sem engasgos, mesmo quando se sai do carro com o smartphone no bolso.
  • e que aceite ligações telefônicas.

O Bluetooth versão 2.1 já é capaz de satisfazer estas condições, embora tenha limitações quanto ao alcance — ou seja, se você for sair do carro, levando o smartphone conectado e no bolso, para ajeitar alguma coisa no porta-malas ou calibrar os pneus, o som irá engasgar.
reconhecer o meu dispositivo, se conectar e começar a tocar a minha playlist do ponto em que ela parou.

Quais as maiores diferenças entre as várias versões do Bluetooth?

Dentre os carros que testei, para escrever este artigo, o Ford Ka Sedan 2016 era o que tinha a versão mais antiga: Bluetooth 2.1.
Como já disse, esta versão é satisfatória mas… se você não quiser se incomodar com a interrupção da transmissão, vai ter que deixar o smartphone dentro carro.
Veja alguns dos recursos:

  • Bluetooth 2.1 — a partir desta versão, você já dispõe de A2DP, EDR, possível suporte a NFC e facilidade de pareamento — é tudo o que se precisa para usufruir dos maiores benefícios da tecnologia.
  • Bluetooth 3.0 — esta é a primeira versão de alta velocidade (20 Mbps) — aliado a um melhor alcance.
    É possível “enxergar” o carro na garagem do vizinho, se ele estiver usando esta versão.
    É encontrada em modelos como o Fiat Palio e Grand Siena Essence 2016, por exemplo.
    A partir desta versão, já é possível até transmitir áudio 5.1 surround sound.
  • Bluetooth 4.x e superior — nestas versões são introduzidos os protocolos de baixo consumo de energia e possibilidade de conexão de até 7 dispositivos simultâneos.

Quanto mais atual a versão do Bluetooth, maior o seu alcance, menor o consumo de energia e menor a interferência nas redes Wi-Fi e 4G.
bluetooth automobile information

Se o sistema de som do seu carro tiver suporte a versão 2.1, ele já terá, pelo menos, estes 3 recursos — A2DP (streaming em estéreo); AVRCP (seleção remota de trilhas de áudio) e EDR (taxa de transmissão mais alta).

Como detectar a versão do Bluetooth nos veículos ao meu redor

A maioria dos veículos precisa estar com o sistema de som ligado para obter uma conexão básica, que permita inquirir sobre o seu Bluetooth.
Eu não precisei parear o meu notebook (com Bluetooth 4.2) a nenhum veículo das redondezas para conseguir obter informações básicas. Só tive que esperar que o vizinho ligasse o carro e, consequentemente, o som.
Após ligar o Bluetooth no seu notebook, realize uma busca na rede, com o comando hcitool:

hcitool scan

Scanning ...
	00:54:AF:97:FC:F6	FIAT CONNECT

Agora use o endereço de hardware encontrado para obter mais informações:

sudo hcitool info 00:54:AF:97:FC:F6
[sudo] senha para justincase: 

Se você obtiver a mensagem “Operation not permitted“, execute o procedimento com privilégios administrativos (sudo, por exemplo).
Veja os resultados, que obtive após dar o comando acima:

Requesting information ...
	BD Address:  00:54:AF:97:FC:F6
	OUI Company: Continental Automotive Systems Inc. (00-54-AF)
	Device Name: FIAT CONNECT
	LMP Version: 3.0 (0x5) LMP Subversion: 0x1982
	Manufacturer: Cambridge Silicon Radio (10)
	Features: 0xff 0xff 0x8f 0xfe 0x9b 0xff 0x51 0x87
		<3-slot packets> <5-slot packets> <encryption> <slot offset> 
		<timing accuracy> <role switch> <hold mode> <sniff mode> 
		<park state> <RSSI> <channel quality> <SCO link> <HV2 packets> 
		<HV3 packets> <u-law log> <A-law log> <CVSD> <paging scheme> 
		<power control> <transparent SCO> <broadcast encrypt> 
		<EDR ACL 2 Mbps> <EDR ACL 3 Mbps> <enhanced iscan> 
		<interlaced iscan> <interlaced pscan> <inquiry with RSSI> 
		<extended SCO> <EV4 packets> <EV5 packets> <AFH cap. slave> 
		<AFH class. slave> <3-slot EDR ACL> <5-slot EDR ACL> 
		<sniff subrating> <pause encryption> <AFH cap. master> 
		<AFH class. master> <EDR eSCO 2 Mbps> <EDR eSCO 3 Mbps> 
		<3-slot EDR eSCO> <extended inquiry> <encapsulated PDU> 
		<non-flush flag> <LSTO> <inquiry TX power> <EPC> 
		<extended features> 

Como você pode ver, a versão instalada é a 3.0.
Se preferir, use o comando grep para obter um resultado mais enxuto:

hcitool info 00:54:AF:97:FC:F6 | grep -i version
	LMP Version: 3.0 (0x5) LMP Subversion: 0x1982

Você pode usar o comando ‘hcitool con’, alternativamente, para encontrar dispositivos Bluetooth na sua vizinhança.
Se quiser obter mais informações sobre o seu dispositivo local, leia sobre o hciconfig.
Por fim, use área dos comentários para nos contar o que encontrou na sua vizinhança e quais os recursos que você considera mais importantes em dispositivos Bluetooth para automóveis.

Como monitorar sua conexão Bluetooth no Linux

Há várias formas de se monitorar uma conexão Bluetooth, no Linux.
Normalmente, você obtém todo o feedback gráfico necessário durante as transferências de conteúdo.
Mas… e quando a transferência é de áudio ou se trata de uma conexão de rede?
Como obter informações sobre o fluxo de dados nestes casos?
Já demonstramos o uso dos utilitários de linha de comando hciconfig e hciutils, no artigo sobre como determinar a versão do Bluetooth de seus dispositivos. Recomendo esta leitura, caso você queira saber mais sobre este assunto.

O padrão de comunicação de dados Bluetooth foi lançado pela empresa sueca Ericsson, em 1994. Mas já vinha sendo desenvolvido desde 1989.

bluetooth logo
O utilitário hciconfig pode ser usado para obter várias informações sobre o dispositivo interno do seu notebook.
Use a opção ‘-a’, para obter alguns dados preliminares sobre ele:

hciconfig -a

A informação que nos interessa, aqui, é que se encontra na 4a e 5a linhas — taxas de recepção e transmissão (RX/TX):

hci0:	Type: BR/EDR  Bus: USB
	BD Address: A4:02:B9:02:85:36  ACL MTU: 1021:5  SCO MTU: 96:6
	UP RUNNING PSCAN 
	RX bytes:12033039 acl:240 sco:223076 events:85742 errors:0
	TX bytes:83500510 acl:84655 sco:222759 commands:326 errors:0
	Features: 0xff 0xfe 0x0f 0xfe 0xdb 0xff 0x7b 0x87
	Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
	Link policy: RSWITCH HOLD SNIFF 
	Link mode: SLAVE ACCEPT 
	Name: 'inspiration'
	Class: 0x0c010c
	Service Classes: Rendering, Capturing
	Device Class: Computer, Laptop
	HCI Version: 4.2 (0x8)  Revision: 0x1000
	LMP Version: 4.2 (0x8)  Subversion: 0x1000
	Manufacturer: Intel Corp. (2)

O comando watch é muito usado para fazer monitoramento no Linux de arquivos ou de resultados de comandos.
No exemplo, abaixo, vamos monitorar a saída do hciconfig e exibir apenas as linhas que contenham dados que sofram alterações (a cada 2 segundos):

watch -n 2 -d hciconfig
Every 2,0s: hciconfig                      inspiration: Mon Sep 19 16:18:27 2016

hci0:   Type: BR/EDR  Bus: USB
        BD Address: A4:02:B9:02:85:36  ACL MTU: 1021:5  SCO MTU: 96:6
        UP RUNNING PSCAN
        RX bytes:15310713 acl:252 sco:287321 events:85858 errors:0
        TX bytes:86772182 acl:84667 sco:286900 commands:347 errors:0

bluetooth monitoring audio stream on Linux - Monitoramento do stream de audio bluetooth no Linux
Os exemplos, acima, mostram o monitoramento do fluxo de audio Bluetooth.
Você pode fazer a mesma coisa para monitorar uma conexão à Internet via Bluetooth, também.

Como determinar a versão do seu dispositivo Bluetooth

Dispositivos Bluetooth são muito comuns em notebooks e são extremamente úteis para a comunicação de dados — troca de arquivos, conexão à Internet etc.
No entanto, a tecnologia tem tido várias versões, desde o início de seu desenvolvimento (no fim da década de 80).
bluetooth logo
Cada nova versão tem incorporado novos recursos — para transmissão/recepção de dados e correção de problemas.
Saber qual a versão do Bluetooth suportada pelo dispositivo instalado no seu notebook ou desktop PC é importante para saber exatamente quais as suas capacidades — ou seja, saber o que verdadeiramente pode ser feito com ele.

Use o hciconfig para obter informações sobre os dispositivos bluetooth presentes no seu sistema

O hciconfig é uma ferramenta de configuração de dispositivos Bluetooth.
Você pode usá-lo para se referir especificamente a um dispositivo, usando o termo ‘hciX’. Caso esta referência não seja suprida, o utilitário irá buscar e exibir informações sobre todos os dispositivos que forem encontrados.
Ao usar o hciconfig sem qualquer parâmetro ou opção, ele retornará informações básicas sobre os diapositivos locais.

O prefixo HCI são as iniciais para Host Controller Interface ou interface de controle do hospedeiro.
E LMP corresponde a Link Management Protocol ou protocolo de gestão de link — usado para controlar a conexão de rádio entre os dispositivos envolvidos.

Veja um exemplo, com o uso da opção ‘-a’:

hciconfig -a
hci0:	Type: BR/EDR  Bus: USB
	BD Address: A4:02:B9:02:85:36  ACL MTU: 1021:5  SCO MTU: 96:6
	UP RUNNING PSCAN ISCAN 
	RX bytes:2077 acl:0 sco:0 events:192 errors:0
	TX bytes:32521 acl:0 sco:0 commands:191 errors:0
	Features: 0xff 0xfe 0x0f 0xfe 0xdb 0xff 0x7b 0x87
	Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
	Link policy: RSWITCH HOLD SNIFF 
	Link mode: SLAVE ACCEPT 
	Name: 'inspiration'
	Class: 0x0c010c
	Service Classes: Rendering, Capturing
	Device Class: Computer, Laptop
	HCI Version: 4.2 (0x8)  Revision: 0x1000
	LMP Version: 4.2 (0x8)  Subversion: 0x1000
	Manufacturer: Intel Corp. (2)

Use o comando grep para obter apenas os resultados mais relevantes:

hciconfig -a | grep -i hci 

hci0:	Type: BR/EDR  Bus: USB
	HCI Version: 4.2 (0x8)  Revision: 0x1000

Use o comando ‘version’ para obter esta informação do dispositivo:

hciconfig hci0 version

hci0:	Type: BR/EDR  Bus: USB
	BD Address: A4:02:B9:02:85:36  ACL MTU: 1021:5  SCO MTU: 96:6
	HCI Version: 4.2 (0x8)  Revision: 0x1000
	LMP Version: 4.2 (0x8)  Subversion: 0x1000
	Manufacturer: Intel Corp. (2)

Como obter informações sobre dispositivos Bluetooth conectados

Se você tem dispositivos conectados de versões diferentes, os recursos disponíveis serão reduzidos aos da versão mais antiga.
Por este motivo, pode ser mais interessante saber qual é a versão do dispositivo ao qual o meu notebook está conectado.
Use o utilitário hcitool, para obter informações sobre os aparelhos conectados via Bluetooth ao seu notebook:

hcitool con

O comando acima vai mostrar informações, tais como o endereço MAC do dispositivo Bluetooth pareado ao notebook. Veja:

Connections:
	< ACL 5C:51:88:EB:9F:B1 handle 512 state 1 lm MASTER AUTH ENCRYPT 

De posse do endereço de hardware, acima, já posso inquirir o dispositivo diretamente. Veja como:

hcitool info 5C:51:88:EB:9F:B1

Requesting information ...
	BD Address:  5C:51:88:EB:9F:B1
	OUI Company: Motorola Mobility LLC, a Lenovo Company (5C-51-88)
	Device Name: Wintermute
	LMP Version: 4.1 (0x7) LMP Subversion: 0x7d3
	Manufacturer: Qualcomm (29)

...

Por exemplo, se o notebook usa um dispositivo Bluetooth 4.2 e se conecta ao smartphone com a versão 4.1, é seguro contar apenas com os recursos disponíveis na versão deste último.
Há vários outros comandos no Linux, que podem ajudar a obter informações importantes sobre o seu sistema. Para saber mais, leia Como obter informações sobre o seu sistema.

Referências

https://web.archive.org/web/20071222231740/http://www.information-age.com/article/2001/may/the_bluetooth_blues.
https://en.wikipedia.org/wiki/Bluetooth