Differenze tra le versioni di "Uso delle Porte Parallele"

Da Gambas-it.org - Wikipedia.
Riga 10: Riga 10:
 
   Dim iNUmeroPorta As Integer
 
   Dim iNUmeroPorta As Integer
 
   Dim iValore As Byte
 
   Dim iValore As Byte
 
+
 
  <FONT color=#006400>' ''Invia il valore 42 alla porta 1:''</font>
 
  <FONT color=#006400>' ''Invia il valore 42 alla porta 1:''</font>
 
   iNumeroPorta = 1
 
   iNumeroPorta = 1

Versione delle 18:08, 8 set 2012

È possibile accedere a porta parallela utilizzando i file device come /dev/lp0.../dev/lpN. Se, però, si ha bisogno di più controlli, ad esempio, e se si vuole essere in grado di scrivere porte input/output x86, si utilizza il file device: /dev/port.


Uso del file device: /dev/port

Un altro modo per accedere alle porte di I/O è quello di aprire con Open il file device /dev/port (un dispositivo a caratteri, il numero primario 1, secondario 4) in lettura e/o scrittura. Poi l'uso di Seek sul byte appropriato nel file (posizione file 0 = porta 0x00, posizione file 1 = porta 0x01 e così via), e quindi Read o Write per scrivere un byte o una parola da o verso quel file device. Naturalmente, per far funzionare il programma si ha bisogno di poter accedere in lettura ed in scrittura al file device /dev/port. Questo metodo è probabilmente più lento del metodo normale precedentemente descritto, ma non ha bisogno di ottimizzazioni in compilazione. Non ha, inoltre, bisogno di accesso da root, se si vuole accedere al file device /dev/port come un utente non-root o di gruppo; ma questa è una cosa poco opportuna da fare in termini di sicurezza del sistema, in quanto è possibile danneggiarlo, forse anche ottenere l'accesso come root, usando /dev/port per accedere ai dischi fissi, schede di rete, ecc direttamente.
Quindi, come root, si può fare ciò che è spiegato sopra: apertura del file device /dev/port con Open in lettura/scrittura in una posizione specifica:

Public Sub Button1_Click()

 Dim hPorta As File
 Dim iNUmeroPorta As Integer
 Dim iValore As Byte

' Invia il valore 42 alla porta 1:
  iNumeroPorta = 1
  iValore = 42

  hPorta = Open "/dev/port" For Read Write
  Seek #hPorta, iNumeroPorta
  Write #hPorta, iValore

End