функция обратного вызова GPIO_CLIENT_ENABLE_INTERRUPT (gpioclx.h)
Функция обратного вызова события CLIENT_EnableInterrupt включает прерывания в контакте ввода-вывода общего назначения (GPIO), настроенном в качестве входных данных прерывания.
Синтаксис
GPIO_CLIENT_ENABLE_INTERRUPT GpioClientEnableInterrupt;
NTSTATUS GpioClientEnableInterrupt(
[in] PVOID Context,
[in] PGPIO_ENABLE_INTERRUPT_PARAMETERS EnableParameters
)
{...}
Параметры
[in] Context
Указатель на контекст устройства драйвера контроллера GPIO.
[in] EnableParameters
Указатель на структуру GPIO_ENABLE_INTERRUPT_PARAMETERS , которая указывает контакт GPIO и описывает атрибуты прерывания этого контакта.
Возвращаемое значение
Функция CLIENT_EnableInterrupt возвращает STATUS_SUCCESS, если вызов выполнен успешно. В противном случае возвращается соответствующий код ошибки.
Комментарии
Эта функция обратного вызова реализуется драйвером контроллера GPIO. Расширение платформы GPIO (GpioClx) вызывает эту функцию для включения прерываний в контакте GPIO, настроенном в качестве входных данных запроса прерывания.
Чтобы зарегистрировать функцию обратного вызова CLIENT_EnableInterrupt драйвера, вызовите метод GPIO_CLX_RegisterClient . Этот метод принимает в качестве входного параметра указатель на структуру GPIO_CLIENT_REGISTRATION_PACKET , содержащую указатель CLIENT_EnableInterrupt функции.
GpioClx всегда вызывает функции обратного вызова CLIENT_EnableInterrupt и CLIENT_DisableInterrupt в IRQL = PASSIVE_LEVEL. Однако если регистры GPIO сопоставлены с памятью, GpioClx вызывает другие функции обратного вызова, связанные с прерыванием, из isR в DIRQL. В этом случае функции CLIENT_EnableInterrupt и CLIENT_DisableInterrupt должны использовать блокировку прерываний GPIO для синхронизации операций, связанных с прерыванием, с ISR. Дополнительные сведения см. в разделе Синхронизация прерываний для драйверов контроллера GPIO.
Примеры
Чтобы определить функцию обратного вызова CLIENT_EnableInterrupt , необходимо сначала предоставить объявление функции, определяющее тип определяемой функции обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.
Например, чтобы определить функцию обратного вызова CLIENT_EnableInterrupt с именем MyEvtGpioEnableInterrupt
, используйте тип функции GPIO_CLIENT_ENABLE_INTERRUPT, как показано в следующем примере кода:
GPIO_CLIENT_ENABLE_INTERRUPT MyEvtGpioEnableInterrupt;
Затем реализуйте функцию обратного вызова следующим образом:
_Use_decl_annotations_
NTSTATUS
MyEvtGpioEnableInterrupt(
PVOID Context,
PGPIO_ENABLE_INTERRUPT_PARAMETERS InterruptParameters
)
{ ... }
Тип функции GPIO_CLIENT_ENABLE_INTERRUPT определен в файле заголовка Gpioclx.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку Use_decl_annotations в определение функции. Заметка Use_decl_annotations гарантирует использование заметок, которые применяются к типу функции GPIO_CLIENT_ENABLE_INTERRUPT в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов KMDF. Дополнительные сведения о Use_decl_annotations см. в статье О поведении функции.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Поддерживается начиная с Windows 8. |
Целевая платформа | Персональный компьютер |
Верхняя часть | gpioclx.h |
IRQL | Вызывается на PASSIVE_LEVEL. |