Bluetooth

Ícone Android Bluetooth HAL

O Android fornece uma pilha Bluetooth padrão que oferece suporte ao Bluetooth clássico e ao Bluetooth Low Energy. Usando o Bluetooth, os dispositivos Android podem criar redes de área pessoal para enviar e receber dados de dispositivos Bluetooth próximos.

No Android 4.3 e versões posteriores, a pilha Bluetooth do Android oferece a capacidade de implementar Bluetooth Low Energy (BLE). Para aproveitar totalmente as APIs BLE, siga os Requisitos de HCI do Android Bluetooth . Dispositivos Android com um chipset qualificado podem implementar Bluetooth clássico ou Bluetooth clássico e BLE. BLE não é compatível com versões anteriores de 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 Android

Um aplicativo Bluetooth se comunica com o processo Bluetooth por meio do 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 Android Bluetooth
Figura 1. Arquitetura Bluetooth do Android
Estrutura do aplicativo
No nível da estrutura do aplicativo está o código do aplicativo, que usa as APIs android.bluetooth para interagir com o hardware Bluetooth. Internamente, esse código chama o processo Bluetooth por meio do mecanismo Binder IPC.
Aplicativo Bluetooth
O aplicativo Bluetooth, localizado em packages/modules/Bluetooth/android/app , é empacotado como um aplicativo Android e implementa os perfis Bluetooth na camada da estrutura Android. Este aplicativo chama a pilha Bluetooth nativa via JNI.
JNI
O código JNI associado a android.bluetooth está localizado em packages/modules/Bluetooth/android/app/jni . O código JNI chama a pilha Bluetooth quando ocorrem determinadas operações Bluetooth, como quando 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 Bluetooth HAL genérico e o personaliza com extensões e alterações de configuração.
Implementação do fornecedor
Os dispositivos do fornecedor interagem com a pilha Bluetooth usando a linguagem de design de interface de hardware (HIDL).

HIDL

HIDL define a interface entre a pilha Bluetooth e a implementação do fornecedor. Para gerar os arquivos Bluetooth HIDL, passe os arquivos da interface Bluetooth para a ferramenta de geração 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 da Bluetooth SIG em QDID 169365 .

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

Arquitetura Android 7.xe anterior

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

Arquitetura Android Bluetooth
Figura 2. Android 7.x e arquitetura Bluetooth anterior
Estrutura do aplicativo
No nível da estrutura do aplicativo está o código do aplicativo, que utiliza as APIs android.bluetooth para interagir com o hardware Bluetooth. Internamente, esse código chama o processo Bluetooth por meio do mecanismo Binder IPC.
Serviço do sistema Bluetooth
O serviço do sistema Bluetooth, localizado em packages/apps/Bluetooth , é empacotado como um aplicativo Android e implementa o serviço e os perfis Bluetooth na camada da estrutura Android. Este aplicativo chama a camada HAL via JNI.
JNI
O código JNI associado a android.bluetooth está localizado em packages/apps/Bluetooth/jni . O código JNI faz chamadas para a camada HAL e recebe retornos de chamada do HAL quando ocorrem determinadas operações Bluetooth, como quando 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ê deve implementar para que seu hardware Bluetooth funcione corretamente. O arquivo de cabeçalho para o Bluetooth HAL é 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 Bluetooth HAL genérico e o personaliza com extensões e alterações de configuração.
Extensões de fornecedor
Para adicionar extensões customizadas e uma camada HCI para rastreamento, é possível criar um módulo libbt-vendor e especificar esses componentes.

Implementando o HAL

O Bluetooth HAL está localizado em /hardware/libhardware/include/hardware/bluetooth.h . O arquivo bluetooth.h contém a interface básica para a pilha Bluetooth e você deve implementar suas funções.

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