IOCTL_GPIO_WRITE_PINS IOCTL (gpio.h)
Код элемента управления IOCTL_GPIO_WRITE_PINS ввода-вывода позволяет клиенту контроллера ввода-вывода общего назначения (GPIO) выполнять запись в набор контактов GPIO, настроенных в качестве выходных данных. Как правило, клиенты контроллера GPIO являются драйверами для периферийных устройств, которые подключаются к контактам GPIO.
Основной код
Входной буфер
Входной буфер.
Длина входного буфера
Входной буфер должен быть достаточно большим, чтобы содержать данные для всех контактов 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 |