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).