הטמעה של ממשקי API להרצה של שכבות פלטפורמה

הצגת המקור ב-GitHub

OpenThread הוא פרוטוקול שאינו תלוי בפלטפורמה ובמערכת הפעלה, עם שכבת הפשטה צרה של פלטפורמה (PAL). ב-PAL הזה מוגדרים:

ארכיטקטורת ההעברה
  • ממשק התראה לטיימר שפועל ללא הגבלת זמן עם התראה
  • ממשקי באס (UART, ‏ SPI) לתקשורת של הודעות CLI ו-Spinel
  • ממשק רדיו לתקשורת IEEE 802.15.4-2006
  • תוכניות ברירת המחדל ל-GCC
  • אנטרופיה ליצירת מספרים אקראיים אמיתיים
  • שירות הגדרות לאחסון תצורה לא נדיף
  • ממשק ליומן לצורך שליחת הודעות ביומן של OpenThread
  • תוכניות אתחול ספציפיות למערכת

כל ממשקי ה-API צריכים להיות מוטמעים על סמך חבילת התמיכה (BSP) של שכבת ההפשטה של החומרה (HAL).

קובצי ה-API צריכים להיות ממוקמים בספריות הבאות:

סוג ספרייה
הטמעת PAL ספציפית לפלטפורמה /openthread/examples/platforms/platform-name
קובצי כותרת – API לאחסון לא נדיף /openthread/examples/platforms/utils
כל שאר קובצי הכותרות /openthread/include/openthread/platform
HAL BSP /openthread/third_party/platform-name

התראה

הצהרת API:

/openthread/include/openthread/platform/alarm-milli.h

Alarm API מספק שירותי תזמון והתראות בסיסיים להטמעת הטיימר בשכבה העליונה.

יש שני סוגים של שירותי התראות: מילישניות ומיקרו-שניות. Millisecond נדרש לפלטפורמת חומרה חדשה. הערך של מיקרו-שנייה הוא אופציונלי.

UART

הצהרת API:

/openthread/examples/platforms/utils/uart.h

ממשק ה-API של UART מטמיע תקשורת בסיסית של יציאה טורית דרך ממשק UART.

התוספים של OpenThread CLI ו-NCP תלויים בממשק UART כדי לבצע אינטראקציה עם צד המארח, אבל התמיכה ב-UART API היא אופציונלית. עם זאת, גם אם אתם לא מתכננים להשתמש בתוספים האלה בדוגמה של פלטפורמת החומרה החדשה, מומלץ מאוד להוסיף תמיכה בכמה סיבות:

  • אפשר להשתמש ב-CLI כדי לאמת שהיציאה פועלת כמו שצריך
  • כלי האוטומציה של Harness משתמש בממשק UART כדי לשלוט ב-OpenThread למטרות בדיקה ואימות

אם פלטפורמת החומרה של היעד תומכת במודול USB CDC במקום ב-UART, צריך לוודא את הדברים הבאים:

  • התקנה של מנהל ההתקן הנכון של USB CDC בצד המארח
  • מחליפים את הטמעת UART API במנהל ה-USB CDC (יחד עם ה-BSP) בצד OpenThread, באמצעות אותם טיוטות פונקציות

רדיו

הצהרת API:

/openthread/include/openthread/platform/radio.h

ב-Radio API מוגדרות כל הפונקציות הנדרשות שנקראות על ידי שכבת ה-MAC העליונה של IEEE 802.15.4. צ'יפ הרדיו חייב להיות תואם באופן מלא למפרט 2.4GHz IEEE 802.15.4-2006.

בגלל התכונה המשופרת של צריכת אנרגיה נמוכה, ב-OpenThread נדרש שכל הפלטפורמות יטמיעו מסגרת אוטומטית בהמתנה (העברה עקיפה) כברירת מחדל, וגם שטבלת ההתאמה של כתובת המקור תוטמע בקובץ המקור radio.h.

עם זאת, אם הדוגמה של פלטפורמת החומרה החדשה מוגבלת במשאבים, אפשר להגדיר את טבלת כתובות המקור באורך אפס. למידע נוסף, ראו Auto Frame Pending.

שונות/איפוס

הצהרת API:

/openthread/include/openthread/platform/misc.h

ה-Misc/Reset API מספק שיטה לאיפוס התוכנה בצ'יפ, ולשאילתה לגבי הסיבה לאיפוס האחרון.

אנטרופיה

הצהרת API:

/openthread/include/openthread/platform/entropy.h

ה-Entropy API מספק גנרטור מספרים אקראיים אמיתי (TRNG) לשכבה העליונה, שמשמשים לשמירה על נכסי האבטחה של כל רשת OpenThread. ה-API צריך להבטיח שייווצר מספר אקראי חדש לכל קריאה לפונקציה. נכסי האבטחה שמושפעים מ-TRNG כוללים:

  • AES CCM nonce
  • רעידות אקראיות עם עיכוב
  • הכתובת המורחבת של המכשירים
  • התקופה האקראית הראשונית בטיימרים של הזרמה הדרגתית
  • מזהים של אסימונים/הודעות CoAP

לתשומת ליבכם: בפלטפורמות רבות כבר יש שילוב של גנרטור מספרים אקראיים, שמציג את ה-API בחבילת ה-BSP שלו. אם פלטפורמת החומרה של היעד לא תומכת ב-TRNG, כדאי להשתמש במדגם של מודול ADC כדי ליצור מספר אקראי באורך קבוע. אם צריך, אפשר לדגום כמה חזרות כדי לעמוד בדרישות של TRNG‏ (uint32_t).

כשהמאקרו MBEDTLS_ENTROPY_HARDWARE_ALT מוגדר ל-1, ממשק ה-API הזה צריך לספק גם שיטה ליצירת האנטרופיה של החומרה שמשמשת בספריית mbedTLS.

אחסון לא נדיף

הצהרות API:

/openthread/include/openthread/platform/flash.h

או

/openthread/include/openthread/platform/settings.h

כדי לעמוד בדרישות לגבי אחסון לא נדיף, אפשר ליישם אחד משני ממשקי ה-API שמפורטים למעלה. Flash API מטמיע מנהל אחסון של זיכרון פלאש, ואילו ‏Settings API מספק פונקציות להטמעת פעולות פלאש בסיסיות בשכבה העליונה.

ממשקי ה-API האלה חושפים לשכבה העליונה:

  • נפח האחסון הלא נדיף שזמין לאחסון נתוני האפליקציה (לדוגמה, מערך נתונים פעיל/בהמתנה, פרמטרים נוכחיים של הרשת ופרטי הכניסה של מכשירי השרשור לצורך חיבור מחדש אחרי איפוס)
  • פעולות קריאה, כתיבה, מחיקה ושאילתות לגבי סטטוס פלאש

משתמשים ב-OPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE בקובץ התצורה של הליבה של דוגמת הפלטפורמה כדי לציין באיזה API הפלטפורמה צריכה להשתמש. אם ההגדרה היא 1, צריך להטמיע את Flash API. אחרת, צריך להטמיע את Settings API.

צריך להגדיר את הדגל הזה בקובץ /openthread/examples/platforms/platform-name/openthread-core-platform-name-config.h.

רישום ביומן

הצהרת API:

/openthread/include/openthread/platform/logging.h

Logging API מיישם את הפונקציונליות של OpenThread לתיעוד ביומן ולניפוי באגים, עם כמה רמות של פלט לניפוי באגים. ה-API הזה הוא אופציונלי אם אתם לא מתכננים להשתמש ברישום ביומן של OpenThread בדוגמה החדשה של פלטפורמת החומרה.

הרמה הגבוהה והמפורטת ביותר היא OPENTHREAD_LOG_LEVEL_DEBG, שבה מודפסים כל פרטי החבילות הגולמיות ומתבצע רישום ביומן של שורות דרך היציאה הטורי או בטרמינל. בוחרים את רמת ניפוי הבאגים שהכי מתאימה לצרכים שלכם.

ספציפיים למערכת

הצהרת API:

/openthread/examples/platforms/openthread-system.h

ממשק ה-API הספציפי למערכת מספק בעיקר פעולות של הפעלה והשבתה של פלטפורמת החומרה שנבחרה. ספריית OpenThread עצמה לא קוראת ל-API הזה, אבל הוא עשוי להיות שימושי למערכת או ל-RTOS שלכם. אפשר גם להטמיע את האיניציאליזציה של מודולים אחרים (למשל, UART, ‏ Radio, ‏ Random,‏ Misc/Reset) בקובץ המקור הזה.

ההטמעה של ה-API הזה תלויה בתרחיש לדוגמה. אם אתם רוצים להשתמש באפליקציות ה-CLI וה-NCP שנוצרו בפלטפורמה לדוגמה, עליכם להטמיע את ממשק ה-API הזה. לחלופין, אפשר להטמיע כל ממשק API כדי לשלב את מנהלי הפלטפורמה לדוגמה במערכת או ב-RTOS.