EVT_SERCX2_PIO_TRANSMIT_WRITE_BUFFER コールバック関数 (sercx.h)
EvtSerCx2PioTransmitWriteBuffer イベント コールバック関数は、シリアル フレームワーク拡張機能 (SerCx2) のバージョン 2 によって呼び出され、プログラムされた I/O (PIO) を使用して、書き込みバッファーの内容をシリアル コントローラーの送信 FIFO に転送します。
構文
EVT_SERCX2_PIO_TRANSMIT_WRITE_BUFFER EvtSercx2PioTransmitWriteBuffer;
ULONG EvtSercx2PioTransmitWriteBuffer(
[in] SERCX2PIOTRANSMIT PioTransmit,
[in] PUCHAR Buffer,
[in] ULONG Length
)
{...}
パラメーター
[in] PioTransmit
PIO 送信オブジェクトへの SERCX2PIOTRANSMIT ハンドル。 シリアル コントローラー ドライバーは、以前にこのオブジェクトを作成するために、SerCx2PioTransmitCreate メソッドを呼び出しました。
[in] Buffer
書き込みバッファーへのポインター。 このパラメーターは、システム メモリ内のロックダウン バッファーの仮想アドレスです。
[in] Length
送信可能な書き込みバッファー内のバイト数。
戻り値
EvtSerCx2PioTransmitWriteBuffer 関数は、書き込みバッファーからシリアル コントローラー ハードウェアの送信 FIFO に正常に転送されたデータのバイト数を返します。
備考
シリアル コントローラー ドライバーでは、この関数を実装する必要があります。 ドライバーは、PIO 送信オブジェクトを作成する SerCx2PioTransmitCreate 呼び出しで関数を登録します。
SerCx2 は、PIO 送信トランザクション中に EvtSerCx2PioTransmitWriteBuffer 関数を複数回呼び出す場合があります。 この呼び出しで書き込みバッファーの完全な内容を送信 FIFO に転送できる場合は、EvtSerCx2PioTransmitWriteBuffer 呼び出しを 1 つの
書き込みバッファーの最初のバイトから始めて、EvtSerCx2PioTransmitWriteBuffer 関数は PIO を使用して、バッファーから送信 FIFO にできるだけ多くのバイトを転送します。 この関数は、バッファーが空でない限り、バッファーからデータを転送し続け、行ステータス レジスタ (LSR) は FIFO がより多くのデータを受け入れることを示します。 LSR が FIFO がこれ以上データを受け入れないことを示している場合、関数はバッファーを空にせずに戻ります。 それ以外の場合、関数はバッファー内のすべてのバイトを転送して返します。 どちらの場合も、この関数によって返される値は、書き込みバッファーから送信 FIFO に正常に転送されたデータのバイト数です。
通常、EvtSerCx2PioTransmitWriteBuffer 関数は割り込みを有効にしません。 代わりに、関数が書き込みバッファーの内容全体を送信 FIFO に転送できない場合、SerCx2 はイベント コールバック関数 EvtSerCx2PioTransmitEnableReadyNotification
EvtSerCx2PioTransmitWriteBuffer 関数を連続して呼び出すたびに、SerCx2 はバッファー内の残りのデータを指すように Buffer を調整し、Length をバッファーに残っているデータ バイト数に設定します。
SerCx2 が EvtSerCx2PioTransmitEnableReadyNotification 関数を呼び出すとき、準備完了通知は有効にされません。 ただし、SerCx2 は、SerCx2PioTransmitReady メソッドを呼び出したドライバーと同じスレッドからこの関数を呼び出す可能性があります。
ドライバーが evtSerCx2PioTransmitInitializeTransaction 関数
PIO 送信トランザクションの詳細については、「SerCx2 PIO-Transmit Transactions」を参照してください。
例
EvtSerCx2PioTransmitWriteBuffer コールバック関数
たとえば、MyPioTransmitWriteBuffer
という名前の EvtSerCx2PioTransmitWriteBuffer コールバック関数を定義するには、次のコード例に示すように、EVT_SERCX2_PIO_TRANSMIT_WRITE_BUFFER 関数型を使用します。
EVT_SERCX2_PIO_TRANSMIT_WRITE_BUFFER MyPioTransmitWriteBuffer;
次に、次のようにコールバック関数を実装します。
_Use_decl_annotations_
ULONG
MyPioTransmitWriteBuffer(
SERCX2PIOTRANSMIT PioTransmit,
PUCHAR Buffer,
ULONG Length
)
{...}
EVT_SERCX2_PIO_TRANSMIT_WRITE_BUFFER 関数の型は、Sercx.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations 注釈により、ヘッダー ファイル内の EVT_SERCX2_PIO_TRANSMIT_WRITE_BUFFER 関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「KMDF ドライバーの関数ロール型を使用して関数を宣言する」を参照してください。 Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 8.1以降で使用できます。 |
ターゲット プラットフォーム の |
デスクトップ |
ヘッダー | sercx.h |
IRQL | IRQL <= DISPATCH_LEVEL で呼び出されます。 |
関連項目
EvtSerCx2PioTransmitCancelDrainFifo を
EvtSerCx2PioTransmitDrainFifo の
EvtSerCx2PioTransmitEnableReadyNotification の
EvtSerCx2PioTransmitInitializeTransaction の
EvtSerCx2PioTransmitPurgeFifo の
SerCx2PioTransmitCreate を