EVT_SERCX2_PIO_RECEIVE_ENABLE_READY_NOTIFICATION コールバック関数 (sercx.h)

EvtSerCx2PioReceiveEnableReadyNotification イベント コールバック関数は、シリアル フレームワーク拡張機能 (SerCx2) のバージョン 2 によって呼び出され、シリアル コントローラー ドライバーが新しいデータを受信したときに SerCx2 に通知できるようにします。

構文

EVT_SERCX2_PIO_RECEIVE_ENABLE_READY_NOTIFICATION EvtSercx2PioReceiveEnableReadyNotification;

void EvtSercx2PioReceiveEnableReadyNotification(
  [in] SERCX2PIORECEIVE PioReceive
)
{...}

パラメーター

[in] PioReceive

PIO 受信オブジェクトへの SERCX2PIORECEIVE ハンドル。 シリアル コントローラー ドライバーは、このオブジェクトを作成するために SerCx2PioReceiveCreate メソッドを以前に呼び出しました。

戻り値

なし

解説

シリアル コントローラー ドライバーでは、この関数を実装する必要があります。 ドライバーは、PIO 受信オブジェクトを作成する SerCx2PioReceiveCreate 呼び出しに関数を登録します。

PIO 受信トランザクションの準備完了通知を有効にするために EvtSerCx2PioReceiveEnableReadyNotification 関数を呼び出した後、シリアル コントローラー ドライバーは SerCx2PioReceiveReady メソッドを呼び出して、ドライバーがシリアル コントローラー ハードウェアの受信 FIFO から 1 バイト以上のデータを読み取ることができることを検出したときに SerCx2 に通知する必要があります。 準備完了通知が有効になっているときに受信 FIFO でデータが既に使用可能な場合、ドライバーはすぐにこのメソッドを呼び出して SerCx2 に通知します。

PIO 受信トランザクションの準備完了通知は、ワンショット通知です。 SerCx2 に準備完了通知を送信した後、シリアル コントローラー ドライバーは、SerCx2 が EvtSerCx2PioReceiveEnableReadyNotification 関数を呼び出して別の通知を有効にするまで、それ以上の通知を送信しません。

EvtSerCx2PioReceiveReadBuffer イベント コールバック関数呼び出しは、受信 FIFO からすぐに読み取ることができるデータがないため、PIO 受信トランザクションを部分的にのみ完了できます。 この場合、SerCx2 は EvtSerCx2PioReceiveEnableReadyNotification 関数を呼び出して準備完了通知を有効にします。この場合、シリアル コントローラー ドライバーは、受信 FIFO にさらに多くのデータが含まれている場合に SerCx2 に通知する必要があります。 この通知に応答して、SerCx2 は EvtSerCx2PioReceiveReadBuffer 関数をもう一度呼び出すことによって、部分的に完了した受信トランザクションを再開します。

通常、 EvtSerCx2PioReceiveEnableReadyNotification 関数を使用すると、シリアル コントローラーで読み取り可能なデータが増えたときに発生する割り込みが可能になります。 この割り込みに応答して、シリアル コントローラー ドライバーは SerCx2PioReceiveReady を呼び出します。

一度に保留中の通知は 1 つ以上ありません。 SerCx2 が EvtSerCx2PioReceiveEnableReadyNotification 関数を呼び出して準備完了通知を有効にした後、コントローラー ドライバーが SerCx2PioReceiveReady を呼び出すまで、SerCx2 はこの関数を再度呼び出しません。

準備完了通知が有効になっている場合、 SerCx2 は EvtSerCx2PioReceiveReadBuffer 関数を呼び出しません。

関連付けられた読み取り要求がタイムアウトした場合、または取り消された場合は、保留中の準備完了通知を取り消すことができます。 PIO 受信トランザクションの準備完了通知を取り消すために、SerCx2 は EvtSerCx2PioReceiveCancelReadyNotification イベント コールバック関数を呼び出します。

SerCx2 では、準備完了通知を使用して、PIO 受信トランザクションとして処理される読み取り要求の処理中に発生する間隔タイムアウトを効率的に管理します。

詳細については、「 SerCx2 PIO-Receive トランザクション」を参照してください。

EvtSerCx2PioReceiveEnableReadyNotification コールバック関数を定義するには、まず、定義するコールバック関数の種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバーのコールバック関数の種類のセットが用意されています。 コールバック関数の種類を使用して関数を宣言すると、ドライバー、静的ドライバー検証ツール (SDV)、およびその他の検証ツールのコード分析でエラーが検出され、Windows オペレーティング システム用のドライバーを記述するための要件になります。

たとえば、 という名前MyPioReceiveEnableReadyNotificationEvtSerCx2PioReceiveEnableReadyNotification コールバック関数を定義するには、次のコード例に示すように、EVT_SERCX2_PIO_RECEIVE_ENABLE_READY_NOTIFICATION関数型を使用します。

EVT_SERCX2_PIO_RECEIVE_ENABLE_READY_NOTIFICATION  MyPioReceiveEnableReadyNotification;

次に、コールバック関数を次のように実装します。

_Use_decl_annotations_
VOID
  MyPioReceiveEnableReadyNotification(
    SERCX2PIORECEIVE  PioReceive
    )
  {...}

EVT_SERCX2_PIO_RECEIVE_ENABLE_READY_NOTIFICATION関数型は、Sercx.h ヘッダー ファイルで定義されています。 コード分析ツールを実行するときにエラーをより正確に識別するには、 Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations注釈を使用すると、ヘッダー ファイル内のEVT_SERCX2_PIO_RECEIVE_ENABLE_READY_NOTIFICATION関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「 KMDF ドライバーの関数ロール型を使用した関数の宣言」を参照してください。 Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 8.1以降で使用できます。
対象プラットフォーム デスクトップ
Header sercx.h
IRQL IRQL <= DISPATCH_LEVELで呼び出されます。

こちらもご覧ください

EvtSerCx2PioReceiveCancelReadyNotification

EvtSerCx2PioReceiveCleanupTransaction

IRP_MJ_READ

SERCX2PIORECEIVE

SerCx2PioReceiveCreate

SerCx2PioReceiveReady