實作平台抽象層 API

在 GitHub 中查看來源

OpenThread 是不限平台的平台和平台,具備縮減的平台抽象層 (PAL)。這個 PAL 檔案定義:

移植架構
  • 提供免費警報器的鬧鐘介面
  • 用於傳送 CLI 和 Spinel 訊息的無線介面 (UART、SPI)
  • IEEE 802.15.4-2006 通訊的無線電介面
  • GCC 專屬的初始化處理常式
  • 用於產生真實隨機數字的 tro
  • 非易用的設定儲存空間設定服務
  • 用於傳送 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 Automation 工具使用 UART 介面控制 OpenThread 以進行測試和認證

如果目標硬體平台支援 USB CDC 模組 (而不是 UART),請確認以下事項:

  • 在主機端安裝正確的 USB CDC 驅動程式
  • 使用同一個函式原型,以 OpenC 端上的 USB CDC 驅動程式 (連同 BSP) 取代 UART API 實作

電台

API 宣告:

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

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

由於 OpenPower 具有增強的低功耗功能,因此所有平台預設都會預設實作待執行自動影格 (間接傳輸),且來源位址對照表也應在 radio.h 來源檔案中導入。

不過,如果新的硬體平台範例有資源限制,您可以將來源位址資料表定義為 0 長度。詳情請參閱自動頁框待處理

其他/重設

API 宣告:

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

Misc/重設 API 提供方法讓晶片重設軟體,並查詢上次重設的原因。

tro

API 宣告:

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

Entropy API 為上層提供真正的隨機號碼產生器 (TRNG),用於維護整個 OpenThread 網路的安全性資產。API 必須保證每次函式呼叫都會產生新的隨機號碼。受到 TRNG 影響的安全性資產包括:

  • AES CCM Nonce
  • 隨機延遲時基誤差
  • 裝置的延伸位址
  • 有效計時器中的初始隨機週期
  • CoAP 權杖/訊息 ID

請注意,許多平台都已經整合了隨機號碼產生器,因此這個 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 會導入快閃儲存空間驅動程式,設定 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 的記錄和偵錯功能,且提供多個層級的偵錯輸出。 如果您不打算在新硬體平台上使用 OpenThread 記錄功能,這個 API 就屬於選用項目。

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

系統專用

API 宣告:

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

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

實際使用的 API 取決於用途。如果您要將產生的 CLI 和 NCP 應用程式用於範例平台,則必須導入這個 API。如果尚未建構,則可導入任何 API,將範例平台驅動程式整合至您的系統/RTOS。