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


функция обратного вызова 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 во время обратного вызова EvtDriverDeviceAd d.

Примеры

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

typedef NTSTATUS
  EVT_SERCX_RECEIVE(
    __in WDFDEVICE Device
    );

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

EVT_SERCX_RECEIVE MyEvtSerCxReceive;

Затем реализуйте функцию обратного вызова следующим образом.

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

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно начиная с Windows 8.
целевая платформа Настольный
заголовка sercx.h
IRQL Вызывается в IRQL <= DISPATCH_LEVEL

См. также

EvtDriverDeviceAdd

SerCxInitialize

WdfDpcEnqueue