IOCTL_GPIO_READ_PINS IOCTL (gpio.h)

Код элемента управления IOCTL_GPIO_READ_PINS ввода-вывода позволяет клиенту контроллера ввода-вывода общего назначения (GPIO) считывать данные из набора контактов GPIO, настроенных в качестве входных данных. Как правило, клиенты контроллера GPIO являются драйверами для периферийных устройств, которые подключаются к контактам GPIO.

Основной код

IRP_MJ_DEVICE_CONTROL

Входной буфер

Входной буфер отсутствует.

Длина входного буфера

Нет.

Выходной буфер

Выходной буфер.

Длина выходного буфера

Выходной буфер должен быть достаточно большим, чтобы содержать данные из всех контактов GPIO, которые являются частью целевого подключения, в которое клиент отправляет запрос. Например, если оборудование контроллера GPIO реализует 64 контакта GPIO и клиент открывает подключение к трем из этих контактов GPIO, то однобайтовый буфер достаточно велик, чтобы содержать три 1-битовые значения, считываемые из трех контактов в соединении.

Блок состояния

Если операция выполнена успешно, драйвер контроллера GPIO устанавливает для элемента Status значение STATUS_SUCCESS, а для элемента Information — общее количество байтов, переданных во время запрошенной операции. Если операция передает N битов, число переданных байтов равно (N + 7) / 8. (То есть 7 добавляется к N для округления до следующей границы байтов до целочисленного деления на 8.)

Если этот запрос завершается сбоем, члену Status присваивается код ошибки и данные не считываются из контактов GPIO. Запрошенная операция может завершиться сбоем по различным причинам, которые могут включать недопустимые входные данные клиента, нехватку ресурсов и неисправность устройства.

Если выходной буфер недостаточно велик, чтобы содержать данные, считываемые из всех контактов GPIO в целевом соединении, для элемента Status устанавливается значение STATUS_BUFFER_TOO_SMALL. Если контакты GPIO в целевом подключении настроены в качестве выходных данных, для элемента Status устанавливается значение STATUS_GPIO_OPERATION_DENIED.

Комментарии

Этот запрос считывает все контакты GPIO, которые являются частью целевого подключения, в которое клиент отправляет запрос. Например, если соединение имеет три контакта, 1-разрядные значения, считываемые из этих контактов, сохраняются в битах 0, 1 и 2 в выходном буфере. Три контакта в этом примере подключения могут сопоставляться с контактами GPIO 7, 8 и 23 в оборудовании контроллера GPIO. В этом случае контакт GPIO 7 сохраняется в бите 0 (наименее значимом бите) буфера, контакт GPIO 8 — в бите 1 буфера, а контакт GPIO 23 — в бите 2 буфера.

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

Клиент отправляет этот запрос на управление вводом-выводом объекту файла для целевого устройства. Файловый объект представляет собой FILE_OBJECT структуру, представляющую логическое соединение с целевым объектом. Драйверы платформы драйверов в режиме ядра (KMDF) вызывают метод WdfIoTargetCreate , чтобы открыть это подключение. Драйверы платформы драйверов пользовательского режима (UMDF) вызывают метод IWDFRemoteTarget::OpenFileByName , чтобы открыть подключение.

Примеры кода, демонстрирующие использование запроса IOCTL_GPIO_READ_PINS для чтения набора контактов ввода-вывода GPIO, см. в следующих разделах:

Подключение драйвера KMDF к контактам ввода-вывода GPIO

Требования

Требование Значение
Минимальная версия клиента Поддерживается начиная с Windows 8.
Верхняя часть gpio.h

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

FILE_OBJECT

IWDFRemoteTarget::OpenFileByName

WdfIoTargetCreate