Newsgroup: it.comp.programmare.win32
Titolo: [AIUTO] Porta parallela per controllo segnali

Ciao a tutto il ng,
dovrei sviluppare un programmino per controllare i segnali di un circuito
esterno, collegato agli 8 pin IN/OUT della LPT
pin2-->pin9
Ho già letto qualcosa su come gestire la porta e ho fatto alcune prove, ma
senza successo.
Chi sarebbe così gentile da farmi un esempio pratico per rilevare questi
benedetti segnali dagli 8 pin? Tra l'altro il circuito è passivo e deve
essere alimentato dal Pc!!!
Ringrazio.
Sam

Forse può esserti utile usare questa libreria:
http://www.driverlinx.com/ftp/unsupported/port95nt.exe
semplifica parecchio le cose.
--
Per rispondere cancellare
(To reply cut):
togliquesto & equestaltro

 senza successo.
Esiste un bit particolare del control register (BASE+2), il sesto, che
setta la direzione dei dati nel caso che tu disponga di una porta
bidirezionale (ossia abbia un PC fatto dopo il 1985 :-)). In pratica:
void SettaDir( BOOL bOutput)
{
    unsigned ch=inp( BASE+2)
    outp( BASE+2, bOutput ? ch & ~0x20 : ch | 0x20);
}
Devi avere i privilegi per scrivere nello spazio di I/O (e quindi sotto
a Windows NT, 2000 e XP devi fare alcuni sotterfugi). Ah, inoltre la
tecnica e` molto sporca, per cui io non ti ho detto niente. :)
--
Lorenzo

 tecnica e` molto sporca, per cui io non ti ho detto niente. :)
Grazie! Avevo sbagliato nell'impostazione del bit DIRECTION.
Ho visto che qualcuno mi ha postato il link per i driver sotto WinXP. Mi
sembra di capire però che non posso commercializzarli, a parte il fatto che
non funzionano... Se dovessi vendere il mio prodotto software, mi servirebbe
qualcosa di free, dei driver che mi concedano il privilegio sulle porte I/O.
Cosa mi consigliate?
Sam

 non funzionano...
[CUT]
Mi dispiace se a te non hanno funzionato,
comunque quei driver li ho testati e li uso sotto xp.
Non so se sono commercializzabili.
P.S.
IMHO sarebbe stato opportuno sostituire
quel "qualcuno" col suo nick


 quel "qualcuno" col suo nick
Non mi ricordavo il tuo nick. Non penserai mica che ti volevo fare un torto!
:)
Grazie!
Ciao
Sam

 Cosa mi consigliate?
Cerca GIVEIO.SYS, e` un piccolo driver che fa proprio questo ed e` free
(l'ha scritto un tizio per un articolo sul Dr.Dobb's Journal).
--
Lorenzo

 (l'ha scritto un tizio per un articolo sul Dr.Dobb's Journal).
Grazie.
Ecco, avevo visto questo driver anche in alcuni esempi. Perņ dovrei trovare
il modo di installarlo e caricarlo all'avvio del programma o del sistema
operativo. Ho un programma esterno che puņ gestire i drivers, ma vorrei
poter fare tutto dal mio programma, che č lo stesso che lo usa.
Sam

 operativo.
Ho un po' di codice che lo fa, sia MFC che API (l'ho usato in parecchi
programmi)... se vuoi te lo metto da qualche parte sulla mia homepage.
--
Lorenzo

"Lorenzo Lutti" <lorenz...@DOHtiscalinet.it> wrote in message
news:ges1a.98108$YG2.2...@twister1.libero.it...

Deduco che non č proprio immediato. Beh, se hai un attimo, il codice non mi
dispiacerebbe.
Grazie!
Sam

 Deduco che non è proprio immediato.
Beh, si deve installare un driver al volo (usando le funzioni del
service manager) e avviarlo. Non e` difficile ma nemmeno immediato.
Prova a guardare se questo fa al caso tuo:
www.enetsystems.com/~lorenzo/temp/loaddrv_nomfc.zip
E` una classe (non MFC) che avvolge tutto.
--
Lorenzo

 E` una classe (non MFC) che avvolge tutto.
Mah, a vista mi sembra perfetto, solo che mi dą molti errori a compile-time.
L'ho provato in Visual C++ 6. Tu l'hai testato su un'applicazione Win32 o in
quale altro modo?
Sam

 quale altro modo?
Direi sia su una Win32 GUI che su una Win32 console.
--
Lorenzo

 Tipo?
Dopo aver creato una app Win Console, inserisco i file .h e .cpp, includo la
libreria "loaddrv.h" nel file "stdafx.h", compilo e...
loaddrv.h(6) : error C2146: syntax error : missing ';' before identifier
'GiveIO'
loaddrv.h(6) : error C2501: 'BOOL' : missing storage-class or type
specifiers
loaddrv.h(6) : error C2061: syntax error : identifier 'BOOL'
loaddrv.h(7) : error C2146: syntax error : missing ';' before identifier
'CanIO'
loaddrv.h(7) : error C2501: 'BOOL' : missing storage-class or type
specifiers
loaddrv.h(10) : error C2146: syntax error : missing ';' before identifier
'DriverInstall'
loaddrv.h(10) : error C2501: 'DWORD' : missing storage-class or type
specifiers
loaddrv.h(10) : error C2061: syntax error : identifier 'LPSTR'
loaddrv.h(11) : error C2146: syntax error : missing ';' before identifier
'DriverStart'
loaddrv.h(11) : error C2501: 'DWORD' : missing storage-class or type
specifiers
ecc, ecc. (32 errori)
Evidentemente c'č un problema, ma mi sembra di aver incluso tutte le
librerie!
--
Sam

 libreria "loaddrv.h" nel file "stdafx.h", compilo e...
No, toglilo, ci pensa gia` loaddrv.cpp a includere stdafx.h. Piuttosto
assicurati che dentro a stdafx.h sia incluso windows.h.
Dopodiche` in cima al tuo modulo principale ci sara` qualcosa tipo (in
quest'ordine):
#include "stdafx.h"
#include "loaddrv.h"
--
Lorenzo

"Lorenzo Lutti" <lorenz...@DOHtiscalinet.it> wrote in message
news:H9r3a.120515$ZE.33...@twister2.libero.it...

Guarda, ho provato a creare un workspace vuoto e fila tutto alla perfezione,
includendo windows.h nel file principale con solo la funzione main.
Se faccio le stesse operazioni su un altro progetto, con un po' più di
headers, seppur corretto, ottengo 8 errori, tra cui 4 nell'header
"LOADDRV.H" che ho incluso dopo windows.h.
In entrambi i casi ho preferito non includere stdafx.h da nessuna parte,
poiché è un progetto vuoto.
I 4 errori sono:
loaddrv.h(3) : error C2061: syntax error : identifier 'GiveIOWrapper'
loaddrv.h(3) : error C2059: syntax error : ';'
loaddrv.h(4) : error C2449: found '{' at file scope (missing function
header?)
loaddrv.h(20) : error C2059: syntax error : '}'
Mah, non so perché si comporta così, ho pensato a tutto, anche che non
andasse bene il nome della classe o il nome in maiuscolo dell'header.
Confermo però che sul progetto vuoto la funzione GiveIO ritorna TRUE.
Che Odissea!
Sam

 loaddrv.h(20) : error C2059: syntax error : '}'
Evidentemente continuano ad esserci degli errori nel modo in cui hai
inserito gli #include. Ricapitolando:
-Devi includere *sempre* stdafx.h come primo header;
-Non ti serve modificare stdafx.h;
-Nei file in cui ti serve la mia classe, devi includere loaddrv.h *dopo*
l'include di stdafx.h.
Se vuoi prova a spedirmi il progetto che gli do un'occhiata... per ora
non mi vengono altre idee.
--
Lorenzo

 inserito gli #include.
Ci sono riuscito! Nel .cpp del GiveIo è sufficiente windows.h, nel mio .cpp
ci vuole StdAfx.h.
Tra l'altro, inizialmente era un .c il mio sorgente. Ti ringrazio ancora e
mi spiace per i problemi di utilizzo, ma quando si tratta di C... :-)
A presto!
Sam