IOCTL_GPIO_WRITE_PINS IOCTL (gpio.h)

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

Основной код

IRP_MJ_DEVICE_CONTROL

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

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

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

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

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

Выходной буфер содержит те же данные, что и входной буфер (так как transferType для этого IOCTL METHOD_BUFFERED).

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

То же, что и входной буфер.

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

Если операция выполнена успешно, драйвер контроллера устанавливает для элемента 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, которые являются частью целевого подключения, в которое клиент отправляет запрос. Например, если соединение имеет три контакта, биты 0, 1 и 2 из входного буфера записываются в эти три контакта. Три контакта в этом примере подключения могут сопоставляться с контактами 7, 8 и 23 GPIO в оборудовании контроллера GPIO. Если это так, бит 0 (наименее значимый бит) в буфере записывается в контакт GPIO 7, бит 1 в буфере записывается в контакт GPIO 8, а бит 2 в буфере записывается в контакт GPIO 23.

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

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

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

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

Требования

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

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

FILE_OBJECT

IWDFRemoteTarget::OpenFileByName

WdfIoTargetCreate