Поделиться через


Функция 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

Размер (в байтах) кольцевого буфера упреждающего типа, используемого для хранения полученных данных.

Возвращаемое значение

None

Remarks

Драйвер последовательного контроллера вызывает эту функцию, чтобы определить, сколько дискового пространства доступно в кольцевом буфере упреждающего типа. Расширение последовательного контроллера (SerCx) поддерживает этот буфер для хранения данных, которые драйвер последовательного контроллера получает из последовательного порта, когда запрос на чтение от клиента в настоящее время не обрабатывается. Эта функция предоставляет сведения, необходимые драйверу для точного управления потоком программного обеспечения (XON/XOFF).

Чтобы реализовать управление потоком программного обеспечения, драйвер последовательного контроллера отслеживает объем свободного места в кольцевом буфере упреждающего типа. Доступное пространство в байтах равно BufferSize - BytesUsed. Когда доступное пространство падает ниже заданного клиентом порогового значения XoffLimit, драйвер последовательного контроллера передает символ XOFF, чтобы сообщить передающему порту о приостановке передачи. Позже, когда доступное пространство превышает заданное клиентом пороговое значение XonLimit, драйвер передает символ XON, чтобы сообщить передающему порту о возобновлении передачи. Как правило, клиент указал эти два пороговых значения в предыдущем запросе IOCTL_SERIAL_SET_HANDFLOW управления вводом-выводом.

SerCx оценивает доступное пространство в кольцевом буфере упреждающего типа в контексте текущего управления потоком и параметров подтверждения. После полного очистки кольцевого буфера упреждающего типа SerCx вызывает функцию обратного вызова EvtSerCxReceive драйвера, чтобы драйвер смог отправить XON и возобновить получение данных. Функция EvtSerCxReceive может вызывать SerCxGetRingBufferUtilization , чтобы определить, следует ли отправлять XON.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 8.
Целевая платформа Универсальное
Верхняя часть sercx.h
IRQL <= DISPATCH_LEVEL

См. также раздел

EvtSerCxReceive

IOCTL_SERIAL_SET_HANDFLOW