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
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 |