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

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

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

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

חשוב להטמיע את כל ממשקי ה-API על סמך שכבת התמיכה הבסיסית (BAL) של בניית חומרה (HAL).

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

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

השכמה

הצהרת API:

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

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

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

אוברט

הצהרת API:

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

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

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

  • ה-CLI עוזר לוודא שהיציאה פועלת כמו שצריך
  • Harm Automation Tool משתמש בממשק של UART כדי לשלוט ב-OpenThread למטרות בדיקה והסמכה.

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

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

רדיו

הצהרת API:

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

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

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

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

שונות/איפוס

הצהרת API:

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

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

אנטרופיה

הצהרת API:

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

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

  • צופן CCM AES
  • רעידות בעיכוב אקראי
  • הכתובת המורחבת של המכשירים
  • הזמן הראשוני האקראי בטיימר של הטריק
  • מזהים של הודעות/אסימונים של 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 שמפורטים למעלה. ממשק ה-API של Flash מיישם מנהל התקן של אחסון Flash, ואילו ממשק ה-API של ההגדרות מספק לשכבה העליונה פונקציות ביישום פעולת Flash.

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

  • הגודל הזמין של נפח אחסון שאינו משתנה
  • קריאה, כתיבה, מחיקה והרצת שאילתות לגבי סטטוסים של Flash

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

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

רישום ביומן

הצהרת API:

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

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

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

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

הצהרת API:

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

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

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