11.2. Stiva BLE

La fel ca în rețelistică, Bluetooth Low Energy este construit ca o stivă de straturi, fiecare rezolvând o singură problemă și expunând o abstractizare curată stratului de deasupra. Denumirile de mai jos provin direct din specificația Bluetooth Core și apar în API-urile aioble și bluetooth.

O stivă verticală de cinci casete etichetate. De jos în sus: Physical (radio), Link Layer, GAP, GATT, Application. O săgeată în dreapta indică în sus pe stivă, etichetată "ce construim". O săgeată în stânga indică în jos pe stivă, etichetată "ce este furnizat".

Stiva Bluetooth Low Energy. Fiecare strat transmite o abstractizare mai curată către cel următor, același tipar pe care îl folosește stiva de rețea.

Stratul fizic (Physical layer). Mută biți între două dispozitive prin radioul de 2,4 GHz. Selecția canalului, modulația, puterea de transmisie. Sarcina camerei este să fie alimentată; siliconul face restul.

Stratul de legătură (Link layer). Mută pachete între două dispozitive care sunt de acord să comunice între ele. Adaugă adrese de dispozitiv astfel încât fiecare pachet să poată fi direcționat către un singur vecin, programează evenimentele radio periodice care alcătuiesc o conexiune și gestionează retransmiterea oricărui pachet pe care receptorul nu l-a confirmat.

Generic Access Profile (GAP). Stratul de descoperire și conectare. Definește patru roluri – broadcaster, observer, peripheral, central – și protocolul de anunțare / scanare care permite, în primul rând, ca două dispozitive să se găsească reciproc, plus procedura de deschidere și închidere a unei conexiuni între ele. Aici se află adresele, încărcăturile utile de anunțare, parametrii de conexiune și împerecherea.

Generic Attribute Profile (GATT). Stratul de date. Stă deasupra unei conexiuni GAP deschise și expune o mică bază de date cheie/valoare: o parte găzduiește un arbore de valori denumite numite caracteristici, iar cealaltă parte le citește, scrie sau se abonează la ele. Aici circulă octeții efectivi ai aplicației.

Stratul de aplicație (Application). Orice convin camera și omologul că înseamnă octeții. Bluetooth SIG publică profiluri standard – ritm cardiac, nivel al bateriei, măsurare a mediului – care definesc caracteristici utilizate frecvent, astfel încât dispozitive fără legătură între ele să poată interopera, însă orice aplicație este liberă să își definească propriile profiluri.

11.2.1. Cum se stivuiesc straturile în timpul execuției

Tiparul corespunde stivei de rețea:

  • Octeții aplicației ajung într-o valoare a caracteristicii.

  • GATT îi învelește cu un antet care identifică cărei caracteristici aparțin octeții.

  • GAP menține o conexiune deschisă în funcțiune, astfel încât GATT să aibă unde trimite.

  • Stratul de legătură învelește totul într-un pachet, adresat adresei de dispozitiv a omologului, și programează un eveniment radio pentru a-l transmite.

  • Stratul fizic transformă pachetul într-o scurtă rafală de radio de 2,4 GHz.

Stratul fizic și stratul de legătură sunt aproape invizibile din Python – siliconul și firmware-ul radio se ocupă de ele. Începând de la GAP în sus, codul Python al camerei are tot mai mult de spus.

11.2.2. Două straturi pe care API-ul orientat spre utilizator le omite discret

Specificația Bluetooth denumește încă două straturi care se află între stratul de legătură și GAP/GATT: Host Controller Interface (HCI) – protocolul pe care CPU-ul gazdă îl folosește pentru a comanda un cip radio separat – și L2CAP – multiplexorul care împarte o conexiune de strat de legătură în mai multe canale logice.

Niciunul nu este vizibil în API-ul aioble, dar niciunul nu dispare. HCI se află în interiorul portării BLE și este invizibil dacă nu este implicată o versiune personalizată de MicroPython, iar L2CAP este purtătorul pe care rulează GATT. O aplicație care dorește fluxuri de octeți brute își poate revendica propriul canal L2CAP (Canale L2CAP).