Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

Platform Abstraction Layer API を実装する

GitHub でソースを見る

OpenThread は、OS やプラットフォームに依存せず、狭いプラットフォーム抽象化レイヤ(PAL)を備えています。この PAL では、以下を定義します。

移植アーキテクチャ
  • アラーム付き無料ランニング タイマーのアラーム インターフェース
  • CLI および Spinel メッセージを通信するためのバス インターフェース(UART、SPI)
  • IEEE 802.15.4-2006 通信用の無線インターフェース
  • GCC 固有の初期化ルーチン
  • 真の乱数生成のためのエントロピー
  • 不揮発性構成ストレージの設定サービス
  • OpenThread ログメッセージを配信するためのロギング インターフェース
  • システム固有の初期化ルーチン

すべての API は、基盤となる Hardware Abstraction Layer(HAL)Build Support Package(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 は、上位レイヤのタイマー実装に基本的なタイミングとアラームのサービスを提供します。

アラームには、ミリ秒マイクロ秒の 2 つのタイプがあります。新しいハードウェア プラットフォームにはミリ秒が必要です。マイクロ秒は省略可能です。

UART

API の宣言:

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

UART API は、UART インターフェースを介して基本的なシリアルポート通信を実装します。

OpenThread の CLI アドオンと NCP アドオンは、ホスト側と通信する UART インターフェースに依存しますが、UART API サポートはは省略可能です。ただし、新しいハードウェア プラットフォームのサンプルでこれらのアドオンを使用する予定がない場合は、いくつかの理由により、サポートを追加することを強くおすすめします。

  • CLI は、ポートが正しく機能していることを検証するうえで有用です。
  • ハーネス自動化ツールは UART インターフェースを使用してテストと認定のために OpenThread を制御する

ターゲット ハードウェア プラットフォームが UART ではなく USB CDC モジュールをサポートしている場合は、次のことを確認してください。

  • ホスト側に正しい USB CDC ドライバをインストールする
  • OpenThread 側の UART API 実装を、同じ関数プロトタイプを使用して 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

多くのプラットフォームでは乱数ジェネレータをすでに統合しており、API が BSP パッケージで公開されています。ターゲット ハードウェア プラットフォームが TRNG をサポートしていない場合は、ADC モジュールのサンプリングを利用して固定長の乱数を生成することを検討してください。TRNG 要件(uint32_t)を満たす必要がある場合は、複数回のイテレーションをサンプリングします。

マクロ MBEDTLS_ENTROPY_HARDWARE_ALT1 に設定されている場合、この API は、mbedTLS ライブラリで使用されるハードウェア エントロピーを生成するメソッドも提供しています。

不揮発性ストレージ

API の宣言:

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

または

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

不揮発性ストレージの要件は、上記の 2 つの API のいずれかを実装することで満たすことができます。Flash API はフラッシュ ストレージ ドライバを実装し、Settings API は基となるフラッシュ オペレーションを実装するための機能を上位レイヤに提供します。

これらの 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

システム固有の API は、主に選択したハードウェア プラットフォームの初期化および初期化解除オペレーションを提供します。この API は OpenThread ライブラリ自体からは呼び出されませんが、システム/RTOS に有用な場合があります。このソースファイルで、他のモジュール(UART、無線、ランダム、その他/リセットなど)の初期化を実装することもできます。

この API の実装は、ユースケースによって異なります。生成された CLI アプリケーションと NCP アプリケーションサンプル プラットフォームで使用する場合は、この API を実装する必要があります。それ以外の場合は、任意の API を実装して、サンプル プラットフォーム ドライバをシステム/RTOS に統合できます。