次の方法で共有


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

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

構文

EVT_SERCX2_PIO_TRANSMIT_ENABLE_READY_NOTIFICATION EvtSercx2PioTransmitEnableReadyNotification;

void EvtSercx2PioTransmitEnableReadyNotification(
  [in] SERCX2PIOTRANSMIT PioTransmit
)
{...}

パラメーター

[in] PioTransmit

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

戻り値

何一つ

備考

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

PIO 送信トランザクションの準備完了通知が有効になっている場合、シリアル コントローラー ドライバーは、SerCx2PioTransmitReady メソッドを呼び出して、シリアル コントローラー ハードウェアの送信 FIFO が追加のデータを受け入れる準備ができていることをドライバーが検出したときに SerCx2 に通知する必要があります。 準備完了通知が有効になっているときに送信 FIFO がデータを受け入れる準備ができた場合、ドライバーはすぐにこのメソッドを呼び出して SerCx2 に通知します。

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

EvtSerCx2PioTransmitWriteBuffer 関数呼び出し 、PIO 送信トランザクションの一部しか完了しない可能性があります。これは、送信 FIFO でデータを書き込むためのスペースがすぐにないためです。 この場合、SerCx2 は、準備完了通知を有効にするために EvtSerCx2PioTransmitEnableReadyNotification 関数を呼び出します。この場合、シリアル コントローラー ドライバーは、送信 FIFO にさらにデータの余裕があるときに SerCx2 に通知する必要があります。 この通知に応答して、SerCx2 は、EvtSerCx2PioTransmitWriteBuffer 関数をもう一度呼び出すことによって、部分的に完了した送信トランザクションを再開します。

通常、EvtSerCx2PioTransmitEnableReadyNotification 関数を使用すると、シリアル コントローラーの送信 FIFO でさらに多くのデータを受け入れる準備ができたときに発生する割り込みが可能になります。 この割り込みに応答して、シリアル コントローラー ドライバーは SerCx2PioTransmitReadyを呼び出します。

一度に保留中の通知は複数ありません。 準備完了通知が既に有効になっている場合、SerCx2 は EvtSerCx2PioTransmitEnableReadyNotification 関数を呼び出しません。

SerCx2 は、準備完了通知が有効になっているときに、EvtSerCx2PioTransmitWriteBuffer 関数を呼び出すことはありません。

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

詳細については、「SerCx2 PIO-Transmit Transactions」を参照してください。

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

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

EVT_SERCX2_PIO_TRANSMIT_ENABLE_READY_NOTIFICATION  MyPioTransmitEnableReadyNotification;

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

_Use_decl_annotations_
VOID
  MyPioTransmitEnableReadyNotification(
    SERCX2PIOTRANSMIT  PioTransmit
    )
  {...}

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

必要条件

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

関連項目

EvtSerCx2PioTransmitWriteBuffer の

IRP_MJ_WRITE

SERCX2PIOTRANSMIT

SerCx2PioTransmitCreate を する

SerCx2PioTransmitReady