11.2. A BLE verem

A hálózatkezeléshez hasonlóan a Bluetooth Low Energy is rétegek vermeként épül fel, ahol mindegyik réteg egyetlen problémát old meg, és tiszta absztrakciót kínál a felette lévő rétegnek. Az alábbi nevek egyenesen a Bluetooth Core specifikációból származnak, és megjelennek az aioble és bluetooth API-kban.

Öt feliratozott doboz függőleges verme. Lentről felfelé: fizikai (rádió), kapcsolati réteg, GAP, GATT, alkalmazás. A jobb oldalon egy nyíl felfelé mutat a vermen, "amit építünk" felirattal. A bal oldalon egy nyíl lefelé mutat a vermen, "amit kapunk" felirattal.

A Bluetooth Low Energy verem. Minden réteg egy tisztább absztrakciót ad át a következőnek, ugyanazt a mintát követve, amelyet a hálózatkezelési verem használ.

Fizikai réteg. Bitek mozgatása két eszköz között a 2,4 GHz-es rádión keresztül. Csatornaválasztás, moduláció, adóteljesítmény. A kamera dolga annyi, hogy be legyen kapcsolva; a többit a szilícium intézi.

Kapcsolati réteg. Csomagok mozgatása két olyan eszköz között, amelyek megegyeznek abban, hogy egymással beszélnek. Eszközcímeket ad hozzá, hogy minden csomagot egy adott szomszédra lehessen irányítani, ütemezi a kapcsolatot alkotó periodikus rádióeseményeket, és kezeli minden olyan csomag újraküldését, amelyet a vevő nem nyugtázott.

Generic Access Profile (GAP). A felfedezési és kapcsolódási réteg. Négy szerepkört definiál – broadcaster, observer, peripheral, central –, valamint a hirdetési / szkennelési protokollt, amely lehetővé teszi, hogy két eszköz egyáltalán megtalálja egymást, továbbá a köztük lévő kapcsolat megnyitásának és lezárásának eljárását. Itt élnek a címek, a hirdetési hasznos terhek, a kapcsolati paraméterek és a párosítás.

Generic Attribute Profile (GATT). Az adatréteg. Egy nyitott GAP kapcsolat tetején ül, és egy kis kulcs/érték adatbázist tesz közzé: az egyik oldal egy karakterisztikáknak nevezett, elnevezett értékekből álló fát üzemeltet, a másik oldal pedig olvassa, írja vagy feliratkozik rájuk. Itt áramlanak a tényleges alkalmazásbájtok.

Alkalmazás. Bármi, amiben a kamera és a társeszköz megegyezik a bájtok jelentését illetően. A Bluetooth SIG szabványos profilokat tesz közzé – pulzusszám, akkumulátorszint, környezeti érzékelés –, amelyek meghatározzák a gyakran használt karakterisztikákat, hogy egymással nem összefüggő eszközök is együttműködhessenek, de bármely alkalmazás szabadon definiálhatja a sajátját.

11.2.1. Hogyan állnak össze a rétegek futási időben

A minta megegyezik a hálózatkezelési veremmel:

  • Az alkalmazás bájtjai egy karakterisztika-értékbe kerülnek.

  • A GATT ezt egy fejléccel csomagolja be, amely azonosítja, hogy a bájtok melyik karakterisztikához tartoznak.

  • A GAP fenntartja a futó nyitott kapcsolatot, hogy a GATT-nak legyen hová küldenie.

  • A kapcsolati réteg az egészet egy csomagba csomagolja, amelyet a társeszköz eszközcímére címez, és ütemez egy rádióeseményt az átvitelhez.

  • A fizikai réteg a csomagot egy rövid 2,4 GHz-es rádiólökéssé alakítja.

A fizikai réteg és a kapcsolati réteg Pythonból szinte láthatatlan – ezeket a szilícium és a rádió firmware kezeli. A GAP-tól felfelé a kamera Python kódjának egyre több beleszólása van.

11.2.2. Két réteg, amelyet a felhasználói API csendben átugrik

A Bluetooth specifikáció két további réteget nevez meg, amelyek a kapcsolati réteg és a GAP/GATT között helyezkednek el: a Host Controller Interface (HCI) – az a protokoll, amelyet a gazda CPU egy különálló rádiócsip vezérléséhez használ – és az L2CAP – a multiplexer, amely egyetlen kapcsolati rétegbeli kapcsolatot több logikai csatornára oszt.

Egyik sem látható az aioble API-ban, de egyik sem tűnik el. A HCI a BLE port belsejében ül, és láthatatlan, hacsak nem a MicroPython egy egyedi buildje van használatban, az L2CAP pedig az a hordozó, amelyen a GATT fut. Egy olyan alkalmazás, amely nyers bájtfolyamokat szeretne, igényelheti a saját L2CAP csatornáját (L2CAP-csatornák).