Gli IOCTL di VVIO.sys

Attenzione

Questa pagina l'ho scritta molto tempo fa e contiene materiale obsoleto

L'uso è sconsigliato e non posso più fornire alcun supporto

VVIO.sys è un device driver specifico per windows NT, 2000 e Xp per la gestione dell'hardware che ho progettato. VVIO.sys è incompatibile con Windows 95, 98 e Me anche se analoghe funzioni sono disponibili usando VVIO.dll.

Questa pagina è parte del progetto VVIO: una libreria per l'I/O

Si tratta del primo device driver che ho scritto usando le librerie DDK ed è parte del progetto VVIO

E' disponibile anche il codice sorgente, utilizzabile come esempio per scrivere proprio software. Per fare ciò è necessario disporre di un adatto compilatore C (penso che l'unico sia MicroSoft VisualC), delle DDK di windows (da scaricare gratuitamente dal sito MicroSoft) e giusto un poco di pazienza per leggersi la documentazione e risolvere qualche problemino.

Gli IOCTL di VVIO.SYS

Di seguito elenco degli IOCTL di VVIO.SYS. Prima di proseguire, segnalo che, per la comprensione, serve conoscere alemno a grandi linee il concetto di ring0.

Per gli esempi d'uso potete far riferimento al codice e alla descrizione delle funzioni contenute in VVIO.dll che in effetti non è altro che "normale" codice a livello utente che si interfaccia al device driver. Questa DLL non è richiesta per l'uso del driver anche se, probabilmente, vi potrà semplificare la vita.

VVIO_IOCTL_SLOWDOWN

Rallenta il funzionamento delle operazioni di I/O aggiungendo cicli di scrittura "inutili". Questo IOCL deve essere utilizzato per collegare hardware piuttosto lento (per esempio optoisolatori) con parallele veloci (per esempio alcune schede PCI)

Output Buffer -
Input Buffer word16 0 (predefinito): nessun rallentamento
1: doppia scrittura (tempo di esecuzione doppio)
2: tripla scrittura
> 2: valori validi ma sconsigliabili a causa dell'eccessivo rallentamento

VVIO_IOCTL_VERSION

Ritorna la versione del device driver

Output Buffer word16 Versione: otto bit più significativi (OutBuffer >> 8)
Revisione: otto bit meno significativi (OutBuffer & 0x00FF)
Input Buffer -

VVIO_IOCTL_MAX147_INIZIALIZABUS

Inizializza l'hardware ed il software per l'uso del mini-datalogger

Output Buffer int16 Se minore di 0, indica un codice di errore (vedi VVIOerror.h)
Input Buffer word16[0] un numero compreso tra 0 e la costante MAX_LPT inclusa (valore predefinito: 5). Identifica in modo univoco una parallela e, pur essendo possibile usare un valore qualunque, è consigliabile indicare il numero che nello specifico sistema operativo in uso identifica la porta stessa.
word16[1] l'indirizzo fisico del primo registro della porta parallela (0... 65535, valori tipici 0x278, 0x373, 0x3BC...)

VVIO_IOCTL_MAX147_GETDATA

Legge una tensione dal mini-datalogger

Output Buffer word16 Se compreso tra 0 e 4095, il valore ritornato dal convertitore.
Se minore di 0, indica un codice di errore (vedi VVIOerror.h)
Input Buffer word16[0] l'identificativo della porta parallelo, scelto con  VVIO_IOCTL_MAX147_INIZIALIZABUS
word16[1] il canale da cui leggere (1... 7)

VVIO_IOCTL_MAX147_GETSAMPLES

Legge le tensioni all'ingresso degli otto canali del mini-datalogger. Il tempo di esecuzione è nettamente inferiore a quello ottenuto usando VVIO_IOCTL_MAX147_GETDATA in quanto è richiesto un solo passaggio da ring0 a livello utente.

Output Buffer int16[0]...
int16[7]
Se compresi tra 0 e 4095, i valori ritornati dal convertitore.
Se minore di 0, indica un codice di errore (vedi VVIOerror.h)
Input Buffer word16 l'identificativo della porta parallelo, scelto con  VVIO_IOCTL_MAX147_INIZIALIZABUS

VVIO_IOCTL_4094_INIZIALIZE

Inizializza l'hardware ed il software per l'uso di circuiti basati su iso-buffer.

Output Buffer int16 Se minore di 0, indica un codice di errore (vedi VVIOerror.h)
Input Buffer word16[0] un numero compreso tra 0 e la costante MAX_LPT inclusa (valore predefinito: 5). Identifica in modo univoco una parallela e, pur essendo possibile usare un valore qualunque, è consigliabile indicare il numero che nello specifico sistema operativo in uso identifica la porta stessa.
word16[1] l'indirizzo fisico del primo registro della porta parallela (0... 65535, valori tipici 0x278, 0x373, 0x3BC...)

VVIO_IOCTL_4094_WRITE

Scrive una parola di 16 bit su hardware basato su iso-buffer

Output Buffer int16 Se minore di 0, indica un codice di errore (vedi VVIOerror.h)
Input Buffer word16[0] l'identificativo della porta parallelo, scelto con  VVIO_IOCTL_4094_INIZIALIZE
word16[1] il canale su cui scrivere, valore compreso tra 1 e 6 inclusi
word16[2] il valore da scrivere, compreso tra 0 e 65535. Il significato di questa parola dipende dall'hardware specifico collegato ai registri SIPO
word16[3] Se questo parametro vale 0, nessuna scrittura è effettuata sul dispositivo fisico ma vengono solo aggiornate le variabili interne. Questo permette un tempo di esecuzione molto basso (frazioni di microsecondo, in funzione del processore usato). Se vale 1 sono scritti tutti i canali contemporaneamente, in base al contenuto delle variabili interne precedentemente impostate.

Il driver, prima dell'uso deve essere installato:

Tutti i file appartenenti al progetto VVIO sono contenuti nel file compresso VVIO.tgz

licenza La licenza d'uso che ho utilizzato
basicVVxx.x Il codice sorgente delle librerie
DLL\ La DLL per l'ambiente Windows
SYS\ Il device driver per WindowsNT/2000/Xp e relativi file di supporto

Scarica il file VVIO.tgz

I circuiti supportati dal progetto VVIO sono:

La documentazione è disponibile alle seguenti pagine:


Pagina principaleAccessibilitàNote legaliPosta elettronicaXHTML 1.0 StrictCSS 3

Vai in cima