Newsgroup: it.comp.lang.visual-basic
Titolo: inpout32.dll e controllo delle seriali

Ciao,
non so se questo sia il NG più adatto, ma ci provo. (Eventualmente
suggeritemi dove potrei postare il quesito).
Da un programma in VB6 ho bisogno di comandare il DTR e l'RTS di una porta
seriale già aperta e gestita tramite oggetto MsComm in un altro task da un
altro programma. (Ovviamente quest'ultimo non utilizza nè DTR nè RTS.)
La DLL inpout32.dll è creata appositamente per la gestione della porta
parallela (cosa che fa egregiamente), ma nessun cenno viene fatto per la
gestione della seriale. Mi sono detto: perchè non provarci ?
Leggendo un po' di documentazione sulle seriali, ho trovato che i bit per il
controllo del DTR e dell'RTS sono rispettivamente il primo ed il secondo del
byte "Modem Control Register" (indirizzo base+4).
Detto fatto, ho provato con istruzioni del tutto simili a quelle per la
parallela, passando ovviamente l'indirizzo della COM e... funziona!! o
almeno credevo :-( e qui viene il problema.
Il mio PC dispone solo di 1 porta com (COM1), all'indirizzo 3F8 IRQ 4, e su
questa nessun problema.
Necessitando di una seconda seriale, ho acquistato una scheda PCI con 2
seriali aggiuntive (viste da XP come COM2 e COM4).
Entrambe le seriali funzionano perfettamente con tutte le applicazioni, VB
incluso, ma solo se utilizzo l' oggetto MSCOMM.
Se invece uso inpout32 niente da fare.
Gli indirizzi assegnati dal driver per la COM2 e 4 aggiuntive non sono
quelli standard che mi aspettavo (2F8-2FF IRQ 3 per la Com2 e 2E8-2EF IRQ 3
per la Com4), ma sono 7000-7007 IRQ 20 e 7400-7407 IRQ20 rispettivamente.
Ovviamente ho provato a passare tali indirizzi nella chiamata alla dll ma
niente, non riesco a farla andare. Io penso che il motivo sia da ricercare
negli indirizzi "non standard", ma non ne capisco il motivo.
Qualcuno ha qualche idea in proposito ?
Ciao e grazie.


non necessariamente i set di registri delle seriali sono 'compatibili' 
con quelli dei chip originali ai queli stai facendo riferimento.
nel caso dovresti trovare che la tua scheda e' 'compatibile 16450 o 16550'
prova a capire se la seriale aggiuntiva usa il driver 'standard' delle 
seriali oppure no, nel secondo caso dovrebbe essere questo il problema
prova pure ad identificare il chip montato sulla scheda e vedere, sul 
sito del produttore, se si trova documentazione ( questa cosa e' 
veramenre difficile :-( )
per inciso con i convertitori USB-seriale questo problema e' accentuato
SE hai il controllo di tutti e due i programmi ( nel senso che ne hai i 
sorgenti e li puoi ricompilare ) la soluzione potrebbe essere passare 
attraverso un ActiveX che fa da wrapper verso la seriale ( unica )


 per inciso con i convertitori USB-seriale questo problema e' accentuato
Brutta notizia...

 soluzioni che smanacciano con l'hardware sono sempre a rischio.
Ok, ma con la seriale, utilizzando sempre la stessa dll, non ho mai avuto
problemi, considerato poi che gli interventi di cui ho bisogno sono minimi
(DTR on/off e RTS on/off).
Visto che ci siamo, sto cercando un sistema per "leggere" da programma
l'indirizzo delle porte seriali "non standard", come ad esempio quelle che
ho installate.
In pratica da programma vorrei vedere i valori degli indirizzi (non mi
servono gli IRQ) delle seriali e parallele che vengono mostrati andando sul
pannello di controllo --> Gestione Hardware --> Porte COM/LPT.
Qualche idea ?
Ciao e grazie!