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.
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.
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 |
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 | - |
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...) |
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) |
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 |
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...) |
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 |
I circuiti supportati dal progetto VVIO sono:
La documentazione è disponibile alle seguenti pagine:
VVIO - Versione 0.2a - Agosto 2003
Copyright © 2003, Vincenzo Villa
La licenza d'uso da leggere ed accettare prima di utilizzare il prodotto
MS-DOS, Windows 95, 98, Me, NT, 2000, Xp, VisualBasic, VisualC
sono marchi registrati da Microsoft Corporation
Delphi e TurboC sono marchi registrati da Borland Software Corporation
LabWindows/CVI è marchio registrato da National Instruments Corporation
Linux è marchio registrato da Linus Torvald
gcc e GNU sono marchi registrati da Free Software Foundation, Inc
Questo documento è disponibile nella sua forma integrale sul sito https://www.vincenzov.net.