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


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

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

Синтаксис

EVT_SERCX_TRANSMIT EvtSercxTransmit;

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

Параметры

[in] Device

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

[in] Length

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

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

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

Замечания

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

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

Если передача FIFO в последовательном контроллере полная или почти полная, но прерывание с низкой водой FIFO включено, функция EvtSerCxTransmit может просто вернуться. Позже ISR драйвера контроллера может запланировать выполнение функции DPC передачи и получения, и эта функция может передавать больше выходных данных в передаваемый FIFO.

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

Примеры

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

typedef NTSTATUS
  EVT_SERCX_TRANSMIT(
    __in WDFDEVICE Device
    );

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

EVT_SERCX_TRANSMIT MyEvtSerCxTransmit;

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

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

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

Требования

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

См. также

EvtDriverDeviceAdd

SerCxInitialize

WdfDpcEnqueue