hereistay
22-11-2009, 22:53
Ciao raga!
Allora, dovrei utilizzare un dispositivo esterno che ho costruito, ma funziona solo tramite lpt e con indirizzo h378.
Ora, io ho un portatile e mi sta risultando veramnete ostico riuscire a trovre un qualsiasi adattatore che mi crei una lpt1 reale e che riesca a lavorare con programmi in vb.
Per cui vi chiedo se qualcuno abbastanza esperto sia in grado di modificare il mio programma di gestione lpt affinchè funzioni con il mio adattatore usb/lpt che in realtà una lpt non la crea affatto, ma crea un "supporto stampa usb"!!!
Vi riporto il programma in visual basic per la gestione della lpt e tutti i dati del mio adattatore usb/lpt, se c'è qualche buon'anima che è in grado di modificare il programma affichè funzioni con il mio adattatore mi faccia sapere!!
Se proprio non c'è sapreste dirmi almeno se è possibile modificare il programma?
1-Programma gestione lpt:
'----------------------------RICHIAMO ALLA LIBRERIA PER LA GESTIONE DELLA PORTA LPT----------------------------
Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
'--------------------------COSTANTI PER GLI INDIRIZZI DELLA PORTA LPT1--------------------------------
Public Const IndirizzoData As String = "&H378" 'REGISTRO DATA: sola scrittura (8 bit)
'Public Const IndirizzoStatus As String = "&H379" 'REGISTRO STATUS: sola lettura (ultimi 5 bit)
'Public Const IndirizzoControl As String = "&H37a" 'REGISTRO CONTROL: lettura + scrittura (primi 4 bit)
Public StatoCubo(1 To 8, 1 To 64) As Integer 'variabile che contiene lo stato attuale di TUTTO il cubo
Public Function ScriviCubo(NumeroCicli As Integer) 'scrive sul cubo lo stato memorizzato nella matrice StatoCubo
Dim ByteLpt As Byte
Dim ContaLivelli As Integer
Dim ContaLed As Integer
Dim ContaCicli As Integer
For ContaCicli = 1 To NumeroCicli
For ContaLivelli = 1 To 8
'imposto tutti i bit dello shift register senza clokkare sullo shift reg. dei livelli e disattivando SEMPRE il clear dello shift register (valore=2) (xx 01x _1_)
For ContaLed = 64 To 1 Step -1 'For ContaLed = 1 To 64
'SHIFT REG. LIVELLI:
'MSB = 0 --> clock disattivato
'CENTRALE = 1 (valore=16)--> clear disattivato
'LSB = indifferente
'SHIFT REG. LED:
'MSB = 0 --> clock disattivato
'CENTRALE = 1 (valore=2)--> clear disattivato
'LSB = StatoCubo(ContaLivelli, ContaLed)
ByteLpt = (0 + 16 + 0) + (0 + 2 + StatoCubo(ContaLivelli, ContaLed))
Call ClokkaLed(ByteLpt) 'passo il valore alla funzione che dà un colpo di clock allo shift dei led
Next ContaLed
'SHIFT REG. LIVELLI:
'MSB = 0 --> clock disattivato
'CENTRALE = 1 (valore=16)--> clear disattivato
'LSB = (se livello = 1--> 1(valore=8); se livello <> 1--> 0) --> metto 1 solo la prima volta
'SHIFT REG. LED:
'MSB = 0 --> clock disattivato
'CENTRALE = 1 (valore=2)--> clear disattivato
'LSB = indifferente
If ContaLivelli = 1 Then
ByteLpt = (0 + 16 + 8) + (0 + 2 + 0)
Else
ByteLpt = (0 + 16 + 0) + (0 + 2 + 0)
End If
Call ClokkaLivello(ByteLpt) 'passo il valore alla funzione che dà un colpo di clock allo shift dei livelli
Call Aspetta(60000) 'smette di lampeggiare dai 60000 ai 70000
Next ContaLivelli
Call ClearAll 'richiamo la funzione per attivare il clear su entrambi gli shift register
Next ContaCicli
End Function
Public Function ClokkaLed(Valore As Byte) 'dà un colpo di clock modificando SOLAMENTE il bit del clock
Out Val(IndirizzoData), Val(Valore) 'clock DISATTIVATO
'aggiungo 4 perchè devo mettere ad 1 il bit del clock dello shift led x dare il colpo di clock
Out Val(IndirizzoData), Val(Valore + 4) 'clock ATTIVATO
End Function
Public Function ClokkaLivello(Valore As Byte) 'dà un colpo di clock modificando SOLAMENTE il bit del clock
Out Val(IndirizzoData), Val(Valore) 'clock DISATTIVATO
'aggiungo 32 perchè devo mettere ad 1 il bit del clock dello shift livello x dare il colpo di clock
Out Val(IndirizzoData), Val(Valore + 32) 'clock ATTIVATO
End Function
Public Function ClearAll() 'svuoto tutti gli shift register
Dim ByteLpt As Byte
'attivo il clear su entrambi gli shift register (valore=0) così li azzero (xx x0x x0x)
ByteLpt = 0 '00 000 000
Out Val(IndirizzoData), Val(ByteLpt)
End Function
Public Function Aspetta(Ncicli As Long) 'funzione per ritardare il ciclo di refresh del cubo
Dim Contatore As Long
Dim Contato As Long
For Contatore = 0 To Ncicli
Contato = Contatore
Next Contatore
End Function
2-Dati riguardanti il mio adattatore:
Dettagli driver:
File driver:
C:\Windows\system32\DRIVER\usbprint.sys
Versione File:
6.0.6000.16386 (vista_rtm.061101-2205)
-DESCRIZIONE DEL DISPOSITIVO:
VALORE:
Supporto stampa USB.
-ID HARDWARE:
VALORE:
USB\VID_067B&PID_2305&REV_0202
USB\VID_067B&PID_2305
-ID COMPATIBILI:
VALORE:
USB\Class_07&SubClass_01&Prot_01
USB\Class_07&SubClass_01
USB\Class_07
-SERVIZIO:
VALORE:
usbprint
-CLASSE DISPOSITIVO:
VALORE:
usb
-GUID CLASSE DISPOSITIVO:
VALORE:
{36fc9e60-c465-11cf-8056-444553540000}
-CHIAVE DRIVER:
VALORE:
{36fc9e60-c465-11cf-8056-444553540000}\0058
-CONFIFLAG:
VALORE:
00000000
-PRODUTTORE:
VALORE:
Microsoft
-INFORMAZIONI SULLA POSIZIONE:
VALORE:
Port_#0002.Hub_#0002
-NOME OGGETTO DISPOSITIVO FISICO:
VALORE:
\Device\USBPDO-7
-CAPACITA':
VALORE:
00000084
CM_DEVCAP_REMOVABLE
CM_DEVCAP_SURPRISEREMOVALOK
-GUID TIPO BUS:
VALORE:
{9d7debbc-c85d-11d1-9eb4-006008c3a19a}
-TIPO BUS LEGACY:
VALORE:
0000000F
-NUMERO BUS:
VALORE:
00000000
ENUMERATORE:
VALORE:
USB
-INDIRIZZO:
VALORE:
00000002
-DATI RISPARMIO ENERGIA:
VALORE:
Stato alimentazione corrente:
D0
Funzionalità alimentazione:
0000007F
PDCAP_D0_SUPPORTED
PDCAP_D1_SUPPORTED
PDCAP_D2_SUPPORTED
PDCAP_D3_SUPPORTED
PDCAP_WAKE_FROM_D0_SUPPORTED
PDCAP_WAKE_FROM_D1_SUPPORTED
PDCAP_WAKE_FROM_D2_SUPPORTED
Mapping stato alimentazione:
S0 -> D0
S1 -> D3
S2 -> D3
S3 -> D3
S4 -> D3
S5 -> D3
-CRITERI DI RIMOZIONE:
VALORE:
00000003
-IMPOSTAZIONE PREDEFINITA CRITERI DI RIMOZIONE
VALORE:
00000003
-STATO INSTALLAZIONE:
VALORE:
00000000
-NOME VISUALIZZATO:
VALORE:
Supporto stampa USB
-PERCORSO ISTANZA DISPOSITIVO:
VALORE:
USB\VID_067B&PID_2305\5&184E262F&0&2
-STATO DEVNODE:
VALORE:
0180600A
DN_DRIVER_LOADED
DN_STARTED
DN_DISABLEABLE
DN_REMOVABLE
DN_NT_ENUMERATOR
DN_NT_DRIVER
-CODICE PROBLEMA:
VALORE:
00000000
-RELAZIONI BUS:
VALORE:
USBPRINT\UnknownPrinter\6&12d04432&0&USB002
-PADRE:
VALORE:
USB\ROOT_HUB\4&1e9b6039&0
-FIGLI:
VALORE:
USBPRINT\UnknownPrinter\6&12d04432&0&USB002
-NOME SICURO NODO DRIVER:
VALORE:
usbprint.inf:Microsoft.NTx86:USBPRINT_Inst:6.0.6000.16386:usb\class_07:generic_usb_printer
-DATA ASSEMBLY DRIVER:
VALORE:
21/06/2006
-VERSIONE ASSEMBLY DRIVER:
VALORE:
6.0.6000.16386
-DESCRIZIONE ASSEMBLY DRIVER:
VALORE:
Supporto stampa USB
-NOME INF:
VALORE:
usbprint.inf
-SEZIONE INF:
VALORE:
USBPRINT_Inst
-ESTENSIONE SEZIONE INF:
VALORE:
.NT
-ID DISPOSITIVO CORRISPONDENTE:
VALORE:
usb\class_07
-FORNITORE:
VALORE:
Microsoft
-PRIORITA' DEL DRIVER INSTALLATO:
VALORE:
0DFF2002
-NOME LUNGO CLASSE:
VALORE:
Controller USB (Universal Serial Bus)
-NOME BREVE CLASSE:
VALORE:
USB
-NESSUNA CLASSE DI INSTALLAZIONE:
VALORE:
<vero>
-PERCORSO ICONA CLASSE:
VALORE:
%systemroot%\system32\setupapi.dll,-20
-VERSIONE PRECEDENTE LOGO:
VALORE:
5.2
-NOME VISUALIZZATO:
VALORE:
Controller USB (Universal Serial Bus)
:help:
Allora, dovrei utilizzare un dispositivo esterno che ho costruito, ma funziona solo tramite lpt e con indirizzo h378.
Ora, io ho un portatile e mi sta risultando veramnete ostico riuscire a trovre un qualsiasi adattatore che mi crei una lpt1 reale e che riesca a lavorare con programmi in vb.
Per cui vi chiedo se qualcuno abbastanza esperto sia in grado di modificare il mio programma di gestione lpt affinchè funzioni con il mio adattatore usb/lpt che in realtà una lpt non la crea affatto, ma crea un "supporto stampa usb"!!!
Vi riporto il programma in visual basic per la gestione della lpt e tutti i dati del mio adattatore usb/lpt, se c'è qualche buon'anima che è in grado di modificare il programma affichè funzioni con il mio adattatore mi faccia sapere!!
Se proprio non c'è sapreste dirmi almeno se è possibile modificare il programma?
1-Programma gestione lpt:
'----------------------------RICHIAMO ALLA LIBRERIA PER LA GESTIONE DELLA PORTA LPT----------------------------
Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
'--------------------------COSTANTI PER GLI INDIRIZZI DELLA PORTA LPT1--------------------------------
Public Const IndirizzoData As String = "&H378" 'REGISTRO DATA: sola scrittura (8 bit)
'Public Const IndirizzoStatus As String = "&H379" 'REGISTRO STATUS: sola lettura (ultimi 5 bit)
'Public Const IndirizzoControl As String = "&H37a" 'REGISTRO CONTROL: lettura + scrittura (primi 4 bit)
Public StatoCubo(1 To 8, 1 To 64) As Integer 'variabile che contiene lo stato attuale di TUTTO il cubo
Public Function ScriviCubo(NumeroCicli As Integer) 'scrive sul cubo lo stato memorizzato nella matrice StatoCubo
Dim ByteLpt As Byte
Dim ContaLivelli As Integer
Dim ContaLed As Integer
Dim ContaCicli As Integer
For ContaCicli = 1 To NumeroCicli
For ContaLivelli = 1 To 8
'imposto tutti i bit dello shift register senza clokkare sullo shift reg. dei livelli e disattivando SEMPRE il clear dello shift register (valore=2) (xx 01x _1_)
For ContaLed = 64 To 1 Step -1 'For ContaLed = 1 To 64
'SHIFT REG. LIVELLI:
'MSB = 0 --> clock disattivato
'CENTRALE = 1 (valore=16)--> clear disattivato
'LSB = indifferente
'SHIFT REG. LED:
'MSB = 0 --> clock disattivato
'CENTRALE = 1 (valore=2)--> clear disattivato
'LSB = StatoCubo(ContaLivelli, ContaLed)
ByteLpt = (0 + 16 + 0) + (0 + 2 + StatoCubo(ContaLivelli, ContaLed))
Call ClokkaLed(ByteLpt) 'passo il valore alla funzione che dà un colpo di clock allo shift dei led
Next ContaLed
'SHIFT REG. LIVELLI:
'MSB = 0 --> clock disattivato
'CENTRALE = 1 (valore=16)--> clear disattivato
'LSB = (se livello = 1--> 1(valore=8); se livello <> 1--> 0) --> metto 1 solo la prima volta
'SHIFT REG. LED:
'MSB = 0 --> clock disattivato
'CENTRALE = 1 (valore=2)--> clear disattivato
'LSB = indifferente
If ContaLivelli = 1 Then
ByteLpt = (0 + 16 + 8) + (0 + 2 + 0)
Else
ByteLpt = (0 + 16 + 0) + (0 + 2 + 0)
End If
Call ClokkaLivello(ByteLpt) 'passo il valore alla funzione che dà un colpo di clock allo shift dei livelli
Call Aspetta(60000) 'smette di lampeggiare dai 60000 ai 70000
Next ContaLivelli
Call ClearAll 'richiamo la funzione per attivare il clear su entrambi gli shift register
Next ContaCicli
End Function
Public Function ClokkaLed(Valore As Byte) 'dà un colpo di clock modificando SOLAMENTE il bit del clock
Out Val(IndirizzoData), Val(Valore) 'clock DISATTIVATO
'aggiungo 4 perchè devo mettere ad 1 il bit del clock dello shift led x dare il colpo di clock
Out Val(IndirizzoData), Val(Valore + 4) 'clock ATTIVATO
End Function
Public Function ClokkaLivello(Valore As Byte) 'dà un colpo di clock modificando SOLAMENTE il bit del clock
Out Val(IndirizzoData), Val(Valore) 'clock DISATTIVATO
'aggiungo 32 perchè devo mettere ad 1 il bit del clock dello shift livello x dare il colpo di clock
Out Val(IndirizzoData), Val(Valore + 32) 'clock ATTIVATO
End Function
Public Function ClearAll() 'svuoto tutti gli shift register
Dim ByteLpt As Byte
'attivo il clear su entrambi gli shift register (valore=0) così li azzero (xx x0x x0x)
ByteLpt = 0 '00 000 000
Out Val(IndirizzoData), Val(ByteLpt)
End Function
Public Function Aspetta(Ncicli As Long) 'funzione per ritardare il ciclo di refresh del cubo
Dim Contatore As Long
Dim Contato As Long
For Contatore = 0 To Ncicli
Contato = Contatore
Next Contatore
End Function
2-Dati riguardanti il mio adattatore:
Dettagli driver:
File driver:
C:\Windows\system32\DRIVER\usbprint.sys
Versione File:
6.0.6000.16386 (vista_rtm.061101-2205)
-DESCRIZIONE DEL DISPOSITIVO:
VALORE:
Supporto stampa USB.
-ID HARDWARE:
VALORE:
USB\VID_067B&PID_2305&REV_0202
USB\VID_067B&PID_2305
-ID COMPATIBILI:
VALORE:
USB\Class_07&SubClass_01&Prot_01
USB\Class_07&SubClass_01
USB\Class_07
-SERVIZIO:
VALORE:
usbprint
-CLASSE DISPOSITIVO:
VALORE:
usb
-GUID CLASSE DISPOSITIVO:
VALORE:
{36fc9e60-c465-11cf-8056-444553540000}
-CHIAVE DRIVER:
VALORE:
{36fc9e60-c465-11cf-8056-444553540000}\0058
-CONFIFLAG:
VALORE:
00000000
-PRODUTTORE:
VALORE:
Microsoft
-INFORMAZIONI SULLA POSIZIONE:
VALORE:
Port_#0002.Hub_#0002
-NOME OGGETTO DISPOSITIVO FISICO:
VALORE:
\Device\USBPDO-7
-CAPACITA':
VALORE:
00000084
CM_DEVCAP_REMOVABLE
CM_DEVCAP_SURPRISEREMOVALOK
-GUID TIPO BUS:
VALORE:
{9d7debbc-c85d-11d1-9eb4-006008c3a19a}
-TIPO BUS LEGACY:
VALORE:
0000000F
-NUMERO BUS:
VALORE:
00000000
ENUMERATORE:
VALORE:
USB
-INDIRIZZO:
VALORE:
00000002
-DATI RISPARMIO ENERGIA:
VALORE:
Stato alimentazione corrente:
D0
Funzionalità alimentazione:
0000007F
PDCAP_D0_SUPPORTED
PDCAP_D1_SUPPORTED
PDCAP_D2_SUPPORTED
PDCAP_D3_SUPPORTED
PDCAP_WAKE_FROM_D0_SUPPORTED
PDCAP_WAKE_FROM_D1_SUPPORTED
PDCAP_WAKE_FROM_D2_SUPPORTED
Mapping stato alimentazione:
S0 -> D0
S1 -> D3
S2 -> D3
S3 -> D3
S4 -> D3
S5 -> D3
-CRITERI DI RIMOZIONE:
VALORE:
00000003
-IMPOSTAZIONE PREDEFINITA CRITERI DI RIMOZIONE
VALORE:
00000003
-STATO INSTALLAZIONE:
VALORE:
00000000
-NOME VISUALIZZATO:
VALORE:
Supporto stampa USB
-PERCORSO ISTANZA DISPOSITIVO:
VALORE:
USB\VID_067B&PID_2305\5&184E262F&0&2
-STATO DEVNODE:
VALORE:
0180600A
DN_DRIVER_LOADED
DN_STARTED
DN_DISABLEABLE
DN_REMOVABLE
DN_NT_ENUMERATOR
DN_NT_DRIVER
-CODICE PROBLEMA:
VALORE:
00000000
-RELAZIONI BUS:
VALORE:
USBPRINT\UnknownPrinter\6&12d04432&0&USB002
-PADRE:
VALORE:
USB\ROOT_HUB\4&1e9b6039&0
-FIGLI:
VALORE:
USBPRINT\UnknownPrinter\6&12d04432&0&USB002
-NOME SICURO NODO DRIVER:
VALORE:
usbprint.inf:Microsoft.NTx86:USBPRINT_Inst:6.0.6000.16386:usb\class_07:generic_usb_printer
-DATA ASSEMBLY DRIVER:
VALORE:
21/06/2006
-VERSIONE ASSEMBLY DRIVER:
VALORE:
6.0.6000.16386
-DESCRIZIONE ASSEMBLY DRIVER:
VALORE:
Supporto stampa USB
-NOME INF:
VALORE:
usbprint.inf
-SEZIONE INF:
VALORE:
USBPRINT_Inst
-ESTENSIONE SEZIONE INF:
VALORE:
.NT
-ID DISPOSITIVO CORRISPONDENTE:
VALORE:
usb\class_07
-FORNITORE:
VALORE:
Microsoft
-PRIORITA' DEL DRIVER INSTALLATO:
VALORE:
0DFF2002
-NOME LUNGO CLASSE:
VALORE:
Controller USB (Universal Serial Bus)
-NOME BREVE CLASSE:
VALORE:
USB
-NESSUNA CLASSE DI INSTALLAZIONE:
VALORE:
<vero>
-PERCORSO ICONA CLASSE:
VALORE:
%systemroot%\system32\setupapi.dll,-20
-VERSIONE PRECEDENTE LOGO:
VALORE:
5.2
-NOME VISUALIZZATO:
VALORE:
Controller USB (Universal Serial Bus)
:help: