11.2. BLE stack¶
Stejně jako u síťování je Bluetooth Low Energy vystavěno jako zásobník (stack) vrstev, z nichž každá řeší jeden jediný problém a vrstvě nad sebou poskytuje čistou abstrakci. Názvy níže pocházejí přímo ze specifikace Bluetooth Core a objevují se v API aioble a bluetooth.
Zásobník Bluetooth Low Energy. Každá vrstva předává čistší abstrakci té další, stejný vzor, jaký používá síťový zásobník.¶
Fyzická vrstva (Physical layer). Přesouvá bity mezi dvěma zařízeními přes rádio 2,4 GHz. Výběr kanálu, modulace, vysílací výkon. Úkolem kamery je být zapnutá; zbytek obstará křemík.
Linková vrstva (Link layer). Přesouvá pakety mezi dvěma zařízeními, která se dohodnou na vzájemné komunikaci. Přidává adresy zařízení, aby každý paket mohl být zacílen na jednoho souseda, plánuje periodické rádiové události, které tvoří připojení, a obstarává opětovné odeslání jakéhokoli paketu, který příjemce nepotvrdil.
Generic Access Profile (GAP). Vrstva objevování a připojování. Definuje čtyři role – broadcaster, observer, peripheral, central – a protokol advertising / scanning, který vůbec umožňuje dvěma zařízením se navzájem najít, plus proceduru pro otevření a uzavření připojení mezi nimi. Zde se nacházejí adresy, užitečné zátěže oznamování, parametry připojení a párování.
Generic Attribute Profile (GATT). Datová vrstva. Sedí na otevřeném GAP připojení a vystavuje malou databázi typu klíč/hodnota: jedna strana hostuje strom pojmenovaných hodnot zvaných charakteristiky, druhá strana je čte, zapisuje nebo se k nim přihlašuje. Zde proudí skutečné aplikační bajty.
Aplikace (Application). Cokoli, na čem se kamera a protějšek dohodnou, že bajty znamenají. Bluetooth SIG publikuje standardní profily – srdeční tep, úroveň baterie, snímání prostředí – které definují běžně používané charakteristiky, takže nesouvisející zařízení mohou spolupracovat, ale jakákoli aplikace si může definovat svou vlastní.
11.2.1. Jak se vrstvy skládají za běhu¶
Vzor odpovídá síťovému zásobníku:
Bajty aplikace jdou do hodnoty charakteristiky.
GATT je obalí hlavičkou identifikující, ke které charakteristice bajty patří.
GAP udržuje otevřené připojení v chodu, aby měl GATT kam odesílat.
Linková vrstva celek obalí do paketu adresovaného na adresu zařízení protějšku a naplánuje rádiovou událost pro jeho odeslání.
Fyzická vrstva promění paket v krátkou dávku rádia 2,4 GHz.
Fyzická vrstva a linková vrstva jsou z Pythonu téměř neviditelné – obstarává je křemík a firmware rádia. Od GAP výše dostává kód kamery v Pythonu více slova.
11.2.2. Dvě vrstvy, které uživatelské API tiše přeskakuje¶
Specifikace Bluetooth pojmenovává ještě dvě vrstvy, které leží mezi linkovou vrstvou a GAP/GATT: Host Controller Interface (HCI) – protokol, který hostitelský CPU používá k řízení samostatného rádiového čipu – a L2CAP – multiplexer, který rozdělí jedno připojení linkové vrstvy na několik logických kanálů.
Ani jedna není v API aioble viditelná, ale ani jedna nemizí. HCI sedí uvnitř BLE portu a je neviditelné, pokud není ve hře vlastní sestavení MicroPythonu, a L2CAP je nosič, na kterém GATT běží. Aplikace, která chce syrové bajtové proudy, si může nárokovat svůj vlastní L2CAP kanál (Kanály L2CAP).