Criei um pequeno PoC no rp-pico usando o btstack, basicamente uma reformulação do serviço BLE simples e autônomo .
Como no exemplo, o BLE usa dados de anúncios e, no exemplo, há alguns valores constantes sem explicação, assim como a documentação não é muito clara sobre os dados
Dados de anúncios em server_common.c :
#define APP_AD_FLAGS 0x06
static uint8_t adv_data[] = {
// Flags general discoverable
0x02, BLUETOOTH_DATA_TYPE_FLAGS, APP_AD_FLAGS,
// Name
0x17, BLUETOOTH_DATA_TYPE_COMPLETE_LOCAL_NAME, 'P', 'i', 'c', 'o', ' ', '0', '0', ':', '0', '0', ':', '0', '0', ':', '0', '0', ':', '0', '0', ':', '0', '0',
0x03, BLUETOOTH_DATA_TYPE_COMPLETE_LIST_OF_16_BIT_SERVICE_CLASS_UUIDS, 0x1a, 0x18,
};
Gostaria de saber: qual é o significado dos valores?
- APP_AD_FLAGS 0x06
- UUIDS_DE_CLASSE_DE_SERVIÇO, 0x1a, 0x18
Como o Bluetooth é um padrão independente do fabricante, a especificação pode ser encontrada nas páginas do Bluetooth SIG .
A PDU de publicidade Bluetooth real em seu exemplo consiste em 3 elementos: Esses elementos sempre têm a mesma estrutura e consistem em um byte para a especificação de comprimento, um byte para a especificação de tipo e o restante como carga útil.
No seu caso, o primeiro elemento deve ser interpretado desta forma:
e o resto do seu PDU será decodificado da mesma maneira: