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.

A vertical stack of five labelled boxes. From bottom to top: Physical (radio), Link Layer, GAP, GATT, Application. An arrow on the right points up the stack labelled "what we build". An arrow on the left points down the stack labelled "what is provided".

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