Bluetooth

Ícone do HAL do Bluetooth do Android

O Android oferece uma pilha Bluetooth padrão que oferece suporte ao Bluetooth clássico e ao Bluetooth de baixa energia. Usando o Bluetooth, os dispositivos Android podem criar redes de área pessoal para enviar e receber dados com dispositivos Bluetooth por perto.

No Android 4.3 e versões mais recentes, a pilha Bluetooth do Android oferece a capacidade de implementar o Bluetooth de baixa energia (BLE). Para aproveitar ao máximo as APIs BLE, siga os requisitos de HCI do Bluetooth do Android. Dispositivos Android com um chipset qualificado podem implementar o Bluetooth Classic ou o Bluetooth Classic e o BLE. O BLE não é compatível com chipsets Bluetooth mais antigos.

No Android 8.0, a pilha Bluetooth nativa é totalmente qualificada para Bluetooth 5. Para usar os recursos disponíveis do Bluetooth 5, o dispositivo precisa ter um chipset qualificado para Bluetooth 5.

Arquitetura do Android

Um app Bluetooth se comunica com o processo Bluetooth pelo Binder. O processo Bluetooth usa JNI para se comunicar com a pilha Bluetooth e fornece aos desenvolvedores acesso a vários perfis Bluetooth. Este diagrama mostra a estrutura geral da pilha Bluetooth:

Arquitetura do Bluetooth do Android
Figura 1. Arquitetura do Bluetooth do Android
Framework do app
No nível do framework do app, está o código do app, que usa as APIs android.bluetooth para interagir com o hardware Bluetooth. Internamente, esse código chama o processo Bluetooth pelo mecanismo de IPC do Binder.
App Bluetooth
O app Bluetooth, localizado em packages/modules/Bluetooth/android/app, é empacotado como um app Android e implementa os perfis Bluetooth na camada do framework Android. Esse app chama a pilha Bluetooth nativa usando a JNI.
JNI
O código JNI associado ao android.bluetooth está localizado em packages/modules/Bluetooth/android/app/jni. O código JNI chama a pilha Bluetooth quando determinadas operações do Bluetooth ocorrem, como quando os dispositivos são descobertos.
Pilha Bluetooth
A pilha Bluetooth padrão é fornecida no AOSP e está localizada em packages/modules/Bluetooth/system. A pilha implementa o HAL genérico do Bluetooth e o personaliza com extensões e mudanças de configuração.
Implementação do fornecedor
Os dispositivos do fornecedor interagem com a pilha Bluetooth usando o Language de design de interface de hardware (HIDL, na sigla em inglês).

HIDL

O HIDL define a interface entre a pilha de Bluetooth e a implementação do fornecedor. Para gerar os arquivos HIDL do Bluetooth, transmita os arquivos de interface do Bluetooth para a ferramenta de geração de HIDL. Os arquivos de interface estão localizados em hardware/interfaces/bluetooth.

Desenvolvimento de pilha Bluetooth

A pilha Bluetooth do Android é uma pilha Bluetooth totalmente qualificada. A lista de qualificação está no site do Bluetooth SIG em QDID 169365.

A pilha principal do Bluetooth está em packages/modules/Bluetooth. O desenvolvimento acontece no AOSP, e as contribuições são bem-vindas.

Arquitetura do Android 7.x e versões anteriores

Um serviço do sistema Bluetooth se comunica com a pilha Bluetooth pelo JNI e com apps pelo IPC do Binder. O serviço do sistema oferece aos desenvolvedores acesso a vários perfis de Bluetooth. Este diagrama mostra a estrutura geral da pilha Bluetooth:

Arquitetura do Bluetooth do Android
Figura 2. Android 7.x e versões anteriores da arquitetura Bluetooth
Framework do app
No nível do framework do app, está o código do app, que usa as APIs android.bluetooth para interagir com o hardware Bluetooth. Internamente, esse código chama o processo Bluetooth pelo mecanismo de IPC do Binder.
Serviço do sistema Bluetooth
O serviço do sistema Bluetooth, localizado em packages/apps/Bluetooth, é empacotado como um app Android e implementa o serviço e os perfis do Bluetooth na camada do framework Android. Esse app chama a camada HAL pela JNI.
JNI
O código JNI associado a android.bluetooth está localizado em packages/apps/Bluetooth/jni. O código JNI chama a camada HAL e recebe callbacks dela quando determinadas operações do Bluetooth ocorrem, como quando os dispositivos são descobertos.
HAL
A camada de abstração de hardware define a interface padrão que as APIs android.bluetooth e o processo Bluetooth chamam e que você precisa implementar para que o hardware Bluetooth funcione corretamente. O arquivo de cabeçalho da HAL do Bluetooth é hardware/libhardware/include/hardware/bluetooth.h. Além disso, revise todos os arquivos hardware/libhardware/include/hardware/bt_*.h.
Pilha Bluetooth
A pilha Bluetooth padrão é fornecida para você e está localizada em system/bt. A pilha implementa o HAL genérico do Bluetooth e o personaliza com extensões e mudanças de configuração.
Extensões do fornecedor
Para adicionar extensões personalizadas e uma camada HCI para rastreamento, crie um módulo libbt-vendor e especifique esses componentes.

Implementar a HAL

O HAL do Bluetooth está localizado em /hardware/libhardware/include/hardware/bluetooth.h. O arquivo bluetooth.h contém a interface básica da pilha Bluetooth, e você precisa implementar as funções dela.

Os arquivos específicos do perfil estão localizados no mesmo diretório. Para saber mais, consulte a Referência do arquivo HAL.