Condividi tramite


IOCTL_GPIO_READ_PINS IOCTL (gpio.h)

Il codice di controllo I/O IOCTL_GPIO_READ_PINS consente a un client del controller di I/O per utilizzo generico (GPIO) di leggere da un set di pin GPIO configurati come input. In genere, i client di un controller GPIO sono driver per i dispositivi periferici che si connettono ai pin GPIO.

Codice principale

IRP_MJ_DEVICE_CONTROL

Buffer di input

Nessun buffer di input.

Lunghezza del buffer di input

Nessuno.

Buffer di output

Buffer di output.

Lunghezza del buffer di output

Il buffer di output deve essere sufficientemente grande da contenere letture da tutti i pin GPIO che fanno parte della connessione di destinazione a cui il client invia la richiesta. Ad esempio, se l'hardware del controller GPIO implementa 64 pin GPIO e il client apre una connessione a tre di questi pin GPIO, un buffer a un byte è sufficientemente grande per contenere i tre valori a 1 bit letti dai tre pin nella connessione.

Blocco dello stato

Se l'operazione ha esito positivo, il driver del controller GPIO imposta il membro Status su STATUS_SUCCESS e imposta il membro Information sul numero totale di byte trasferiti durante l'operazione richiesta. Se l'operazione trasferisce N bit, il numero di byte trasferiti è (N + 7) / 8. Ovvero, 7 viene aggiunto a N per arrotondare fino al limite di byte successivo prima della divisione integer di 8.)

Se questa richiesta non riesce, il membro Status viene impostato su un codice di errore e non vengono letti dati dai pin GPIO. L'operazione richiesta potrebbe non riuscire per diversi motivi, che può includere input client non valido, risorse basse e malfunzionamenti del dispositivo.

Se il buffer di output non è sufficientemente grande da contenere i dati letti da tutti i pin GPIO nella connessione di destinazione, il membro Status viene impostato su STATUS_BUFFER_TOO_SMALL. Se i pin GPIO nella connessione di destinazione sono configurati come output, il membro Status viene impostato su STATUS_GPIO_OPERATION_DENIED.

Commenti

Questa richiesta legge tutti i pin GPIO che fanno parte della connessione di destinazione a cui il client invia la richiesta. Ad esempio, se la connessione ha tre pin, i valori a 1 bit letti da questi pin vengono salvati in bit 0, 1 e 2 nel buffer di output. I tre pin in questa connessione di esempio potrebbero essere mappati ai pin GPIO 7, 8 e 23 nell'hardware del controller GPIO. In tal caso, il pin GPIO 7 viene salvato in bit 0 (bit meno significativo) del buffer, il pin GPIO 8 viene salvato in bit 1 del buffer e il pin GPIO 23 viene salvato in bit 2 del buffer.

Quando il client apre una connessione a un dispositivo GPIO di destinazione, tutti i pin GPIO in questa connessione vengono configurati come input o come output. Una richiesta di IOCTL_GPIO_READ_PINS può avere esito positivo solo se i pin di destinazione sono input.

Il client invia questa richiesta di controllo di I/O all'oggetto file per il dispositivo di destinazione. L'oggetto file è una struttura FILE_OBJECT che rappresenta una connessione logica alla destinazione. I driver del framework del driver in modalità kernel (KMDF) chiamano il metodo WdfIoTargetCreate per aprire questa connessione. I driver UMDF (User-Mode Driver Framework) chiamano il metodo IWDFRemoteTarget::OpenFileByName per aprire la connessione.

Per esempi di codice che illustrano come usare la richiesta di IOCTL_GPIO_READ_PINS per leggere un set di pin di I/O GPIO, vedere gli argomenti seguenti:

Connessione di un driver KMDF ai pin di I/O GPIO

Requisiti

Requisito Valore
Client minimo supportato Supportato a partire da Windows 8.
Intestazione gpio.h

Vedi anche

FILE_OBJECT

IWDFRemoteTarget::OpenFileByName

WdfIoTargetCreate