Condividi tramite


IOCTL_GPIO_WRITE_PINS IOCTL (gpio.h)

Il codice di controllo I/O IOCTL_GPIO_WRITE_PINS consente a un client del controller di I/O (GPIO) di utilizzo generico di scrivere in un set di pin GPIO configurati come output. 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

Buffer di input.

Lunghezza del buffer di input

Il buffer di input deve essere abbastanza grande per contenere dati per 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 da scrivere nei tre pin nella connessione.

Buffer di output

Il buffer di output contiene gli stessi dati del buffer di input, perché TransferType per questo IOCTL è METHOD_BUFFERED.

Lunghezza del buffer di output

Uguale al buffer di input.

Blocco dello stato

Se l'operazione ha esito positivo, il driver controller imposta il membro Stato su STATUS_SUCCESS e imposta il membro Informazioni 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 ha esito negativo, il membro Stato è impostato su un codice di errore e non vengono letti dati dai pin GPIO. L'operazione richiesta potrebbe non riuscire per vari motivi, che possono includere input client non validi, risorse basse e malfunzionamento del dispositivo.

Se il buffer di input non è abbastanza grande per contenere un bit di dati per ogni pin GPIO nella connessione di destinazione, il membro Stato è impostato su STATUS_BUFFER_TOO_SMALL. Se i pin GPIO nella connessione di destinazione sono configurati come input, il membro Stato è impostato su STATUS_GPIO_OPERATION_DENIED.

Commenti

Questa richiesta scrive in 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, bit 0, 1 e 2 dal buffer di input vengono scritti in questi tre pin. I tre pin in questa connessione di esempio potrebbero eseguire il mapping ai pin GPIO 7, 8 e 23 nell'hardware del controller GPIO. In tal caso, bit 0 (bit meno significativo) nel buffer viene scritto nel pin GPIO 7, bit 1 nel buffer viene scritto nel pin GPIO 8 e bit 2 nel buffer viene scritto nel pin GPIO 23.

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_WRITE_PINS può avere esito positivo solo se i pin di destinazione sono output.

Il client invia questa richiesta di controllo 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 driver in modalità kernel (KMDF) chiamano il metodo WdfIoTargetCreate per aprire questa connessione. I driver del framework driver in modalità utente (UMDF) chiamano il metodo IWDFRemoteTarget::OpenFileByName per aprire la connessione.

Per esempi di codice che illustrano come usare la richiesta di IOCTL_GPIO_WRITE_PINS per scrivere in un set di pin 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