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


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

Функция обратного вызова событий EvtSerCx2PioReceiveEnableReadyNotification вызывается версией 2 расширения последовательной платформы (SerCx2), чтобы разрешить драйверу последовательного контроллера уведомлять SerCx2 о получении новых данных.

Синтаксис

EVT_SERCX2_PIO_RECEIVE_ENABLE_READY_NOTIFICATION EvtSercx2PioReceiveEnableReadyNotification;

void EvtSercx2PioReceiveEnableReadyNotification(
  [in] SERCX2PIORECEIVE PioReceive
)
{...}

Параметры

[in] PioReceive

Дескриптор SERCX2PIORECEIVE объекту piO-receive. Драйвер последовательного контроллера ранее вызывал метод SerCx2PioReceiveCreate для создания этого объекта.

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

Никакой

Замечания

Драйвер последовательного контроллера должен реализовать эту функцию. Драйвер регистрирует функцию в вызове SerCx2PioReceiveCreate, который создает объект piO-receive.

После вызова функции EvtSerCx2PioReceiveEnableReadyNotification, чтобы включить готовое уведомление для транзакции получения piO-receive, драйвер последовательного контроллера должен вызвать метод SerCx2PioReceiveReady, чтобы уведомить SerCx2, когда драйвер обнаруживает, что один или несколько байт данных доступны для чтения из получения FIFO в оборудовании последовательного контроллера. Если данные уже доступны в получении FIFO при включении готового уведомления, драйвер немедленно вызывает этот метод, чтобы уведомить SerCx2.

Готовое уведомление для транзакции piO-receive — это однократное уведомление. После отправки готового уведомления в SerCx2 драйвер последовательного контроллера не отправляет никаких дополнительных уведомлений, пока SerCx2 не вызывает функцию EvtSerCx2PioReceiveEnableReadyNotification, чтобы включить другое уведомление.

Вызов функции обратного вызова события EvtSerCx2PioReceiveReadBuffer вызов функции обратного вызова событий может частично завершить транзакцию получения PIO, так как больше данных не доступно для чтения из получения FIFO. В этом случае SerCx2 вызывает функцию EvtSerCx2PioReceiveEnableReadyNotification, чтобы включить готовое уведомление, в этом случае драйвер последовательного контроллера должен уведомить SerCx2, когда получение FIFO содержит дополнительные данные. В ответ на это уведомление SerCx2 возобновляет частично завершенную транзакцию получения, вызвав функцию EvtSerCx2PioReceiveReadBuffer.

Как правило, функция EvtSerCx2PioReceiveEnableReadyNot ification позволяет прерывать работу, которая возникает, когда последовательный контроллер имеет больше доступных данных для чтения. В ответ на это прерывание драйвер последовательного контроллера вызывает SerCx2PioReceiveReady.

За раз не более одного готового уведомления может находиться в ожидании. Когда SerCx2 вызывает функцию EvtSerCx2PioReceiveEnableReadyNotification, чтобы включить готовое уведомление, SerCx2 не вызывает эту функцию снова, пока драйвер контроллера не вызывает SerCx2PioReceiveReady.

SerCx2 никогда не вызывает функцию EvtSerCx2PioReceiveReadBuffer при включении готового уведомления.

Ожидающее уведомление о готовности может быть отменено, если связанный запрос на чтение истекает или отменяется. Чтобы отменить готовое уведомление для транзакции piO-receive, SerCx2 вызывает функцию обратного вызова события EvtSerCx2PioReceiveCanceiveCancelReadyNotification функцию обратного вызова событий.

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

Дополнительные сведения см. в разделе SerCx2 PIO-Receive Транзакций.

Примеры

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

Например, чтобы определить функцию обратного вызова EvtSerCx2PioReceiveEnableReadyNotification, которая называется MyPioReceiveEnableReadyNotification, используйте тип функции EVT_SERCX2_PIO_RECEIVE_ENABLE_READY_NOTIFICATION, как показано в этом примере кода:

EVT_SERCX2_PIO_RECEIVE_ENABLE_READY_NOTIFICATION  MyPioReceiveEnableReadyNotification;

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

_Use_decl_annotations_
VOID
  MyPioReceiveEnableReadyNotification(
    SERCX2PIORECEIVE  PioReceive
    )
  {...}

Тип функции EVT_SERCX2_PIO_RECEIVE_ENABLE_READY_NOTIFICATION определен в файле заголовка Sercx.h. Чтобы более точно определить ошибки при запуске средств анализа кода, обязательно добавьте в определение функции заметку Use_decl_annotations. Заметка Use_decl_annotations гарантирует, что используются заметки, применяемые к типу функции EVT_SERCX2_PIO_RECEIVE_ENABLE_READY_NOTIFICATION в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в объявлении функций с помощью типов ролей функций для драйверов KMDF. Дополнительные сведения о Use_decl_annotationsсм. в поведению функции.

Требования

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

См. также

EvtSerCx2PioReceiveCancelReadyNotification

EvtSerCx2PioReceiveCleanupTransaction

IRP_MJ_READ

SERCX2PIORECEIVE

SerCx2PioReceiveCreate

SerCx2PioReceiveReady