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


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_SUCCESS и задает элементу Information общее количество байтов, передаваемых во время запрошенной операции. Если операция передает N-биты, число передаваемых байтов равно (N + 7) / 8. (То есть 7 добавляется в N, чтобы округлить до следующей границы байтов до целочисленного деления на 8.)

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

Если выходной буфер недостаточно велик, чтобы содержать данные, считываемые из всех контактов GPIO в целевом соединении, то для элемента состояние задано значение STATUS_BUFFER_TOO_SMALL. Если пин-коды GPIO в целевом подключении настроены в качестве выходных данных, то для элемента состояния задано значение 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