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_SUCCESS и задает элементу Information общее количество байтов, передаваемых во время запрошенной операции. Если операция передает N-биты, число передаваемых байтов равно (N + 7) / 8. (То есть 7 добавляется в N, чтобы округлить до следующей границы байтов до целочисленного деления на 8.)
Если этот запрос завершается ошибкой, элемент состояния установлен в код ошибки, и данные не считываются из пин-кодов GPIO. Запрошенная операция может завершиться ошибкой по различным причинам, что может включать недопустимые входные данные клиента, низкие ресурсы и неисправность устройства.
Если входной буфер недостаточно велик, чтобы содержать один бит данных для каждого пин-кода GPIO в целевом подключении, то для элемента status задано значение STATUS_BUFFER_TOO_SMALL. Если пин-коды GPIO в целевом подключении настроены в качестве входных данных, то для элемента состояния задано значение STATUS_GPIO_OPERATION_DENIED.
Замечания
Этот запрос записывает все пин-коды GPIO, которые являются частью целевого подключения, к которому клиент отправляет запрос. Например, если подключение имеет три пин-кода, биты 0, 1 и 2 из входного буфера записываются в эти три пин-кода. Три контакта в этом примере подключения могут сопоставляться с пин-кодами GPIO 7, 8 и 23 в оборудовании контроллера GPIO. В этом случае бит 0 (наименьший бит) в буфере записывается в пин-код GPIO 7, бит 1 в буфере записывается в GPIO pin 8, а бит 2 в буфере записывается в пин-код GPIO 23.
Когда клиент открывает подключение к целевому устройству GPIO, все пин-коды GPIO в этом соединении настраиваются как входные или выходные данные. Запрос IOCTL_GPIO_WRITE_PINS может завершиться успешно, только если целевые пин-коды являются выходными данными.
Клиент отправляет этот запрос элемента управления ввода-вывода в объект файла для целевого устройства. Объект файла — это FILE_OBJECT структура, представляющая логическое соединение с целевым объектом. драйвера в режиме ядра (KMDF) вызывают метод WdfIoTargetCreate, чтобы открыть это подключение. драйвера пользовательского режима (UMDF) вызывают метод IWDFRemoteTarget::OpenFileByName, чтобы открыть подключение.
Примеры кода, демонстрирующие использование запроса IOCTL_GPIO_WRITE_PINS для записи в набор закрепления ввода-вывода GPIO, см. в следующих разделах:
подключение драйвера KMDF к пин-адресам ввода-вывода GPIO
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Поддерживается начиная с Windows 8. |
заголовка | gpio.h |