次の方法で共有


SerCxGetRingBufferUtilization 関数 (sercx.h)

SerCxGetRingBufferUtilization メソッドを使用すると、シリアル コントローラー ドライバーは、シリアル ポートから受信したデータによって現在入力されている先行型リング バッファーの量を確認できます。

構文

void SerCxGetRingBufferUtilization(
  [in]            WDFDEVICE Device,
  [out, optional] PULONG    BytesUsed,
  [out, optional] PULONG    BufferSize
);

パラメーター

[in] Device

シリアル コントローラーを表すフレームワーク デバイス オブジェクトへの WDFDEVICE ハンドル。

[out, optional] BytesUsed

受信したデータの格納に使用される先行入力リング バッファーに現在含まれている未読データのバイト数。

[out, optional] BufferSize

受信したデータの格納に使用される先行型リング バッファーのサイズ (バイト単位)。

戻り値

なし

解説

シリアル コントローラー ドライバーは、この関数を呼び出して、先行型リング バッファーで使用可能な記憶域領域の量を決定します。 シリアル コントローラー拡張機能 (SerCx) は、クライアントからの読み取り要求が現在処理されていないときにシリアル コントローラー ドライバーがシリアル ポートから受信するデータを格納するために、このバッファーを保持します。 この関数は、ドライバーがソフトウェア フロー制御 (XON/XOFF) を正確に実行するために必要な情報を提供します。

ソフトウェア フロー制御を実装するために、シリアル コントローラー ドライバーは、先行型リング バッファーで使用可能な領域の量を監視します。 使用可能な領域 (バイト単位) は、 BufferSize - BytesUsed と同じです。 使用可能な領域がクライアント指定のしきい値 XoffLimit を下回ると、シリアル コントローラー ドライバーは XOFF 文字を送信して、送信を一時停止するように送信ポートに指示します。 その後、使用可能な領域がクライアント指定のしきい値 XonLimit を超えると、ドライバーは XON 文字を送信して、送信を再開するように送信ポートに指示します。 通常、クライアントは、前の IOCTL_SERIAL_SET_HANDFLOW I/O 制御要求でこれら 2 つのしきい値を指定しました。

SerCx は、現在のフロー制御とハンドシェイク設定のコンテキストで、先行型リング バッファー内の使用可能な領域を評価します。 先行入力リング バッファーが完全に空になると、SerCx はドライバーの EvtSerCxReceive コールバック関数を呼び出して、ドライバーが XON を送信してデータの受信を再開できるようにします。 EvtSerCxReceive 関数は SerCxGetRingBufferUtilization を呼び出して、XON を送信するかどうかを判断できます。

要件

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

こちらもご覧ください

EvtSerCxReceive

IOCTL_SERIAL_SET_HANDFLOW