11.2. Lo stack BLE#
Come il networking, il Bluetooth Low Energy e costruito come uno stack di livelli, ognuno dei quali risolve un singolo problema ed espone un’astrazione pulita al livello superiore. I nomi seguenti provengono direttamente dalla specifica Bluetooth Core e compaiono nelle API di aioble e bluetooth.
Lo stack del Bluetooth Low Energy. Ogni livello passa un’astrazione piu pulita al successivo, lo stesso pattern usato dallo stack di rete.#
Physical layer. Sposta bit tra due dispositivi sulla radio a 2,4 GHz. Selezione del canale, modulazione, potenza di trasmissione. Il compito della camera e essere alimentata; al resto pensa il silicio.
Link layer. Sposta pacchetti tra due dispositivi che acconsentono a parlarsi. Aggiunge gli indirizzi dei dispositivi cosi che ogni pacchetto possa essere indirizzato a un singolo vicino, pianifica gli eventi radio periodici che compongono una connessione e gestisce la ritrasmissione di qualsiasi pacchetto che il ricevitore non ha confermato.
Generic Access Profile (GAP). Il livello di scoperta e connessione. Definisce quattro ruoli – broadcaster, observer, peripheral, central – e il protocollo di advertising / scanning che permette a due dispositivi di trovarsi in primo luogo, piu la procedura per aprire e chiudere una connessione tra loro. E qui che vivono indirizzi, payload di advertising, parametri di connessione e pairing.
Generic Attribute Profile (GATT). Il livello dati. Si appoggia su una connessione GAP aperta ed espone un piccolo database chiave/valore: una parte ospita un albero di valori denominati chiamati caratteristiche, l’altra parte li legge, li scrive o vi si iscrive. E qui che scorrono i byte applicativi veri e propri.
Application. Qualunque significato la camera e il peer concordano di attribuire ai byte. Il Bluetooth SIG pubblica profili standard – frequenza cardiaca, livello batteria, environmental sensing – che definiscono caratteristiche di uso comune cosi che dispositivi non correlati possano interoperare, ma qualsiasi applicazione e libera di definire i propri.
11.2.1. Come i livelli si impilano in fase di esecuzione#
Il pattern corrisponde a quello dello stack di rete:
I byte dell’applicazione finiscono in un valore di caratteristica.
GATT li avvolge con un’intestazione che identifica a quale caratteristica appartengono i byte.
GAP mantiene attiva una connessione aperta cosi che GATT abbia un posto dove inviare.
Il link layer avvolge il tutto in un pacchetto, indirizzato all’indirizzo del dispositivo peer, e pianifica un evento radio per trasmetterlo.
Il physical layer trasforma il pacchetto in una breve raffica di radio a 2,4 GHz.
Il physical layer e il link layer sono quasi invisibili da Python – li gestiscono il silicio e il firmware della radio. Da GAP in su, il codice Python della camera ha piu voce in capitolo.
11.2.2. Due livelli che l’API rivolta all’utente salta silenziosamente#
La specifica Bluetooth nomina altri due livelli che si trovano tra il link layer e GAP/GATT: l”Host Controller Interface (HCI) – il protocollo che la CPU host usa per pilotare un chip radio separato – e L2CAP – il multiplexer che suddivide una connessione del link layer in diversi canali logici.
Nessuno dei due e visibile nell’API di aioble, ma nessuno dei due scompare. HCI risiede all’interno del port BLE ed e invisibile a meno che non sia in gioco una build personalizzata di MicroPython, e L2CAP e il vettore su cui gira GATT. Un’applicazione che desidera flussi di byte grezzi puo rivendicare il proprio canale L2CAP (Canali L2CAP).