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