實作 Platform 抽象層 API

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

前往 GitHub 查看原始碼

OpenThread 是跨平台和平台通用的平台,具備狹窄的平台抽象層 (PAL)。此 PAL 定義:

攜碼架構
  • 提供免費鬧鐘的鬧鐘介面 (含鬧鐘)
  • 用於傳送 CLI 和 Spinel 訊息的匯流介面 (UART、SPI)
  • 用於 IEEE 802.15.4-2006 通信的數據接口
  • GCC 專用初始化處理常式
  • 用於產生真實隨機號碼的熵
  • 非易失性設定儲存空間的設定服務
  • 用於傳送 OpenThread 記錄訊息的記錄介面
  • 系統專用初始化處理常式

所有 API 均應根據基礎硬體抽象層 (HAL) 建構支援套件 (BSP) 進行實作。

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 為上層計時器實作提供基本的時間與鬧鐘服務。

鬧鐘服務類型有兩種,分別是毫秒微秒。新的硬體平台必須為毫秒。微秒為選擇性。

UART

API 宣告:

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

UART API 透過 UART 介面實作基本的序列埠通訊。

雖然 OpenThread CLINCP 外掛程式需要使用 UART 介面與主機端互動,但您可以選擇是否要使用 UART API。不過,即使您不打算在新的硬體平台範例中使用這些外掛程式,我們還是建議您加入以下支援:

  • CLI 很適合用來驗證通訊埠是否正常運作
  • Harness 自動化工具會使用 UART 介面來控制 OpenThread 以進行測試和認證

如果目標硬體平台支援 USB CDC 模組而非 UART,請確認:

  • 在主機端安裝正確的 USB CDC 驅動程式
  • 將 UART API 實作替換為 OpenThread 端的 USB CDC 驅動程式 (搭配 BSP),並使用相同的函式原型

電台

API 宣告:

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

Radio API 定義了上 IEEE 802.15.4 MAC 層呼叫的所有必要函式。無線電晶片必須完全符合 2.4GHz IEEE 802.15.4-2006 規格。

OpenThread 的強化低功率功能預設會要求所有平台實作實作中的待處理頁框 (間接傳輸),而來源位址對照表也應在 radio.h 來源檔案中實作。

不過,如果新的硬體平台範例有資源限制,請將來源位址表定義為零長度。詳情請參閱自動取景一文。

麥克風/重設

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 不可略過
  • 隨機延遲時基誤差
  • 裝置' 延伸地址
  • 工具提示計時器的初始隨機期間
  • CoAP 憑證/訊息 ID

請注意,許多平台已經整合了隨機數字產生器,並在其 BSP 套件中公開 API。如果目標硬體平台不支援 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 實作了 Flash 儲存驅動程式,而 Settings API 則能夠針對底層提供基本的 Flash 作業實作函式。

這些 API 可公開至上一層:

  • 用於儲存應用程式資料的可用非易用儲存空間大小 (例如使用中/待處理作業資料集、目前的網路參數和執行緒裝置) (重設後重新連結的憑證)
  • 讀取、寫入、清除及查詢 Flash 狀態作業

在您的平台範例檔案中,使用 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's 記錄和偵錯功能,並提供多層偵錯輸出。如果您不打算使用 OpenThread's 對新硬體平台範例進行記錄,則不一定要使用這個 API。

最高層級和最詳細層級為 OPENTHREAD_LOG_LEVEL_DEBG,透過序列埠或終端機列印所有原始封包資訊和記錄行。選擇最符合您需求的偵錯等級。

系統專屬

API 宣告:

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

系統專用的 API 主要提供所選硬體平台的初始化和初始化作業。OpenThread 程式庫本身不會呼叫此 API,但這對您的系統/RTOS 可能有所幫助。您也可以在這個來源檔案中實作其他模組的初始化作業 (例如 UART、Radio、Random、Misc/重設)。

此 API 的實作需視用途而定。如果您想針對範例平台使用產生的 CLI 和 NCP 應用程式,則必須實作這個 API。否則,任何 API 皆可實作,以將範例平台驅動程式整合至您的系統/RTOS。