11.2. מחסנית ה-BLE¶
בדומה לרשתות תקשורת, Bluetooth Low Energy בנוי כמחסנית של שכבות, כשכל אחת פותרת בעיה יחידה וחושפת הפשטה נקייה לשכבה שמעליה. השמות שלהלן מגיעים ישירות ממפרט הליבה של Bluetooth ומופיעים בממשקי ה-API של aioble ו-bluetooth.
מחסנית Bluetooth Low Energy. כל שכבה מוסרת הפשטה נקייה יותר לשכבה הבאה, אותו דפוס שבו משתמשת מחסנית הרשת.¶
שכבה פיזית (Physical layer). מעבירה ביטים בין שני התקנים דרך רדיו 2.4 GHz. בחירת ערוץ, אפנון, הספק שידור. תפקיד המצלמה הוא להיות מופעלת; הסיליקון עושה את השאר.
שכבת קישור (Link layer). מעבירה מנות (packets) בין שני התקנים שהסכימו לדבר זה עם זה. מוסיפה כתובות התקן כך שכל מנה יכולה להיות מכוונת לשכן אחד, מתזמנת את אירועי הרדיו המחזוריים המרכיבים חיבור, ומטפלת בשידור חוזר של כל מנה שהמקלט לא אישר את קבלתה.
Generic Access Profile (GAP). שכבת הגילוי והחיבור. מגדירה ארבעה תפקידים – broadcaster, observer, peripheral, central – ואת פרוטוקול ה-advertising / scanning המאפשר לשני התקנים למצוא זה את זה מלכתחילה, בנוסף לנוהל פתיחה וסגירה של חיבור ביניהם. כאן שוכנים הכתובות, מטעני ההכרזה, פרמטרי החיבור וההתאמה (pairing).
Generic Attribute Profile (GATT). שכבת הנתונים. יושבת מעל חיבור GAP פתוח וחושפת בסיס נתונים קטן של מפתח/ערך: צד אחד מארח עץ של ערכים בעלי שם הנקראים מאפיינים (characteristics), הצד השני קורא, כותב או נרשם אליהם. כאן זורמים בתי היישום בפועל.
יישום (Application). מה שהמצלמה והעמית מסכימים שהבתים מייצגים. ה-Bluetooth SIG מפרסם פרופילים תקניים – קצב לב, רמת סוללה, חישת סביבה – המגדירים מאפיינים נפוצים כך שהתקנים בלתי קשורים יכולים לפעול יחד, אך כל יישום חופשי להגדיר את משלו.
11.2.1. כיצד השכבות נערמות בזמן ריצה¶
הדפוס תואם את מחסנית הרשת:
בתי היישום נכנסים ל-ערך מאפיין (characteristic value).
GATT עוטף אותו בכותרת המזהה לאיזה מאפיין שייכים הבתים.
GAP שומר על חיבור פתוח פעיל כך של-GATT יש לאן לשלוח.
שכבת הקישור עוטפת את הכול במנה, ממוענת לכתובת ההתקן של העמית, ומתזמנת אירוע רדיו לשידורה.
השכבה הפיזית הופכת את המנה להתפרצות קצרה של רדיו 2.4 GHz.
השכבה הפיזית ושכבת הקישור כמעט בלתי נראות מ-Python – הסיליקון וקושחת הרדיו מטפלים בהן. מ-GAP ומעלה, לקוד ה-Python של המצלמה יש יותר מה לומר.
11.2.2. שתי שכבות שה-API הפונה למשתמש מדלג עליהן בשקט¶
מפרט ה-Bluetooth מציין שתי שכבות נוספות היושבות בין שכבת הקישור לבין GAP/GATT: ה-Host Controller Interface (HCI) – הפרוטוקול שבו משתמש מעבד המארח כדי להניע שבב רדיו נפרד – וה-L2CAP – המרבב המפצל חיבור שכבת-קישור אחד למספר ערוצים לוגיים.
אף אחת מהן אינה נראית ב-API של aioble, אך אף אחת מהן לא נעלמת. HCI יושב בתוך פורט ה-BLE ובלתי נראה אלא אם בנייה מותאמת אישית של MicroPython נמצאת בשימוש, ו-L2CAP הוא הנשא ש-GATT רץ מעליו. יישום הרוצה זרמי בתים גולמיים יכול לתבוע ערוץ L2CAP משלו (ערוצי L2CAP).