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


функция обратного вызова EVT_SERCX_RECEIVE (sercx.h)

Функция обратного вызова события EvtSerCxReceive подготавливает устройство последовательного контроллера (UART) к выполнению операции чтения (получения).

Синтаксис

EVT_SERCX_RECEIVE EvtSercxReceive;

NTSTATUS EvtSercxReceive(
  [in] WDFDEVICE Device,
  [in] size_t Length
)
{...}

Параметры

[in] Device

Дескриптор WDFDEVICE для объекта устройства платформы, представляющего последовательный контроллер.

[in] Length

Количество получаемых байтов. Драйвер контроллера может использовать это значение в качестве подсказки, чтобы решить, следует ли использовать PIO или DMA для передачи данных.

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

Функция EvtSerCxReceive возвращает STATUS_SUCCESS, если вызов выполнен успешно. В противном случае возвращается соответствующий код состояния ошибки.

Комментарии

Расширение последовательной платформы (SerCx) вызывает эту функцию для настройки оборудования контроллера для получения данных. При необходимости функция EvtSerCxReceive может включить прерывания.

Функция EvtSerCxReceive не обязательно считывает входные данные из буфера FIFO приема. В зависимости от оборудования последовательного контроллера или типа передачи эта функция может настроить операцию DMA для чтения данных или запланировать функцию передачи и получения DPC для чтения данных. Драйвер последовательного контроллера реализует эту функцию DPC для получения данных от контроллера и передачи данных в последовательный контроллер. Во время DPC функция DPC определяет, доступны ли данные для получения, и, если да, использует PIO для считывания данных из получая FIFO в последовательном контроллере.

Если прием FIFO в последовательном контроллере пуст или почти пуст, но прерывание FIFO с высоким уровнем воды включено, подпрограмма DPC может просто вернуться. Позже ISR драйвера контроллера сможет запланировать выполнение подпрограммы DPC, и эта подпрограмма сможет считывать дополнительные данные из получающего FIFO.

Чтобы зарегистрировать функцию обратного вызова EvtSerCxReceive , драйвер контроллера вызывает метод SerCxInitialize во время обратного вызова EvtDriverDeviceAdd .

Примеры

Тип функции для этого обратного вызова объявлен в Sercx.h, как показано ниже.

typedef NTSTATUS
  EVT_SERCX_RECEIVE(
    __in WDFDEVICE Device
    );

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

EVT_SERCX_RECEIVE MyEvtSerCxReceive;

Затем реализуйте функцию обратного вызова, как показано ниже.

NTSTATUS
  MyEvtSerCxReceive(
    __in WDFDEVICE Device
    )
{ ... }

Дополнительные сведения о требованиях SDV для объявлений функций см. в статье Объявление функций с помощью типов ролей функций для драйверов KMDF.

Требования

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

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

EvtDriverDeviceAdd

SerCxInitialize

WdfDpcEnqueue