다음을 통해 공유


SerCxGetRingBufferUtilization 함수(sercx.h)

SerCxGetRingBufferUtilization 메서드를 사용하면 직렬 컨트롤러 드라이버가 현재 직렬 포트에서 받은 데이터로 채워지는 미리 입력 링 버퍼의 양을 확인할 수 있습니다.

구문

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

매개 변수

[in] Device

직렬 컨트롤러를 나타내는 프레임워크 디바이스 개체에 대한 WDFDEVICE 핸들입니다.

[out, optional] BytesUsed

수신된 데이터를 저장하는 데 사용되는 type-ahead 링 버퍼에 현재 포함된 읽지 않은 데이터의 바이트 수입니다.

[out, optional] BufferSize

수신된 데이터를 저장하는 데 사용되는 미리 입력 링 버퍼의 크기(바이트)입니다.

반환 값

없음

설명

직렬 컨트롤러 드라이버는 이 함수를 호출하여 미리 입력 링 버퍼에서 사용할 수 있는 스토리지 공간을 결정합니다. SerCx(직렬 컨트롤러 확장)는 현재 처리 중인 클라이언트의 읽기 요청이 없을 때 직렬 컨트롤러 드라이버가 직렬 포트에서 수신하는 데이터를 포함하도록 이 버퍼를 유지 관리합니다. 이 함수는 드라이버가 XON/XOFF(소프트웨어 흐름 제어)를 정확하게 수행하는 데 필요한 정보를 제공합니다.

소프트웨어 흐름 제어를 구현하기 위해 직렬 컨트롤러 드라이버는 미리 입력 링 버퍼에서 사용할 수 있는 공간의 양을 모니터링합니다. 사용 가능한 공간(바이트)은 BufferSize - BytesUsed와 같습니다. 사용 가능한 공간이 클라이언트 지정 임계값인 XoffLimit보다 낮으면 직렬 컨트롤러 드라이버는 XOFF 문자를 전송하여 전송 포트에 전송을 일시 중지하도록 지시합니다. 나중에 사용 가능한 공간이 클라이언트 지정 임계값인 XonLimit를 초과하면 드라이버는 XON 문자를 전송하여 전송 포트에 전송을 다시 시작하도록 지시합니다. 일반적으로 클라이언트는 이전 IOCTL_SERIAL_SET_HANDFLOW I/O 제어 요청에서 이러한 두 임계값을 지정했습니다.

SerCx는 현재 흐름 제어 및 핸드셰이크 설정의 컨텍스트에서 미리 입력 링 버퍼에서 사용 가능한 공간을 평가합니다. 미리 입력 링 버퍼가 완전히 비워지면 SerCx는 드라이버가 XON을 보내고 데이터 수신을 다시 시작할 수 있도록 드라이버의 EvtSerCxReceive 콜백 함수를 호출합니다. EvtSerCxReceive 함수는 SerCxGetRingBufferUtilization을 호출하여 XON을 보낼지 여부를 결정할 수 있습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8 시작해서 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 sercx.h
IRQL <= DISPATCH_LEVEL

추가 정보

EvtSerCxReceive

IOCTL_SERIAL_SET_HANDFLOW