通信モデル、同期、および中止
大まかに言うと、このドキュメントでは、次の 2 種類のオブジェクトを定義します。
- Wi-Fi デバイスを表すアダプター。
- アダプター内の個別の MAC エンティティと PHY エンティティを表すポート。
これらのオブジェクトの詳細については、「Wi-Fi デバイス モデルとオブジェクト」を参照してください。 許容される一連の操作であるコマンドが、これらの各オブジェクトについて定義されます。 コマンドはさらにプロパティとタスクに分類されます。
プロパティ コマンドは、単純なコマンド (信号強度の取得、現在の BSS リストの取得、パケット フィルターの設定など) です。 これらは短時間で完了し、実装が複雑ではありません。
タスク コマンドは複雑な操作であり、完了までに数秒かかる場合があります。 たとえば、Wi-Fi スキャン操作は、このモデルのタスクとして分類されます。
IHV コンポーネントに対して発行されるすべてのコマンドは、非同期的に完了できます。
メッセージのシーケンス
コマンドの種類ごとのメッセージ シーケンスを次の図に示します。
図 1 は、タスク コマンド シーケンスを示しています。
図 2 は、プロパティ コマンド フローを示しています。
図 3 は、表示のフローを示しています。
同期
IHV コンポーネントの実装を単純に保つために、モデルでは次の同期ルールを定義します。
- コマンドは、図 1 と図 2 のステップ 1~3 の間で常にシリアル化されます。 たとえば、ステップ 3 でアダプターから指示されるまで、新しいコマンドはアダプターに発行されません。 これは、すべてのプロパティが相互にシリアル化されることを意味します。
- すべてのタスク コマンドは、図 1 のステップ 1~4 の間でシリアル化されます。 たとえば、アダプターで一度に実行されるタスクは 1 つのみです。 ただし、タスクが開始されると (図 1 のステップ 3)、アダプターはプロパティ コマンド要求を取得できます。 次のタスク コマンドが送信される前に、ステップ 3 とステップ 4 の両方を完了する必要があります。
- プロパティ セット コマンドには、タスクの開始後に送信できるコマンドと、保留中のタスクでシリアル化する必要があるコマンドの 2 種類があります。
- 後述する特定の場合を除き、データ パスはコマンド パスでシリアル化されません。
- 同期スコープはアダプター レベルのスコープです。
- タスクのサブセットは、開始後に中止できます。 つまり、優先度の高いタスク (A) が到着し、優先度の低いタスク (B) が未処理の場合、B はホストによって中止される可能性があります。 優先度付けの決定の合理化は、本書の範囲外であり、ユーザー シナリオに依存します。
- タスク コマンドの場合、ステップ 4 はステップ 3 が完了する前に実行できます。 ただし、ステップ 4 が示されている場合、ステップ 3 は失敗できません。
中止
ほとんどのタスクは、開始後に中止できます。 中止の目的は、アダプターが完全な指示を送信してタスクをすばやく完了するようにトリガーすることです (図 1 のステップ 4)。 中止は、図 1 のステップ 3~4 の間の時間帯にのみ許可されます。 中止を受信すると、アダプターは 50 ミリ秒以内にタスクを完了する必要があります。 ほとんどのコマンドでは、中止を受信したときに、アダプターはコマンドが開始される前の状態にロールバックする必要はありません。 中止コマンドが発行されてからホスト コンポーネントに到着するまでの間に競合状態が存在します。 この場合、IHV コンポーネントが既に完了しているタスクの中止を受け取った場合、中止操作を処理するために IHV コンポーネントからそれ以上のアクションは必要ありません。 タスクの中止は、IHV コンポーネントができるだけ早くタスクをクリーンする必要があることを示す信号にすぎません。 中止が発行された場合、コマンド完了セマンティクスは変更されません。 中止プロパティ コマンドの完了とタスク完了の表示は、いずれの場合も適切に通知する必要があります。
プロパティは短時間で完了すると予想されるため、中止できません。
タスク コマンドには一意の識別子があり、ホストは特定のコマンドを中止の対象にできます。