|
| Printerport i Windows. Fra : Henrik Lausen |
Dato : 05-11-01 08:16 |
|
Jeg vil bruge printerporten til styring af noget eksternt elektronik( I/O),
og vil samtidigt gerne kunne lave en grafiske brugerflade. Hvis jeg laver et
DOS program, (som kører under win98) så kører det, men hvis jeg prøver via
Win98 (C++ visual studio 6.0), så vil programmet ikke kompileres. Jeg har
prøvet inline assembler, og andre work arounds, men uden held. Hvordan for
jeg kontrol over en printerport i windows (og evt. NT/2000/XP) ?.
Jeg vil gerne ende ud med 2 funktioner, som kan kaldes fra mit win program:
unsigned char = readbyte(unsigned int Adr);
Void = writebyte(unsigned int Adr, unsigned char Value);
Adr er en I/O adresse variabel, som for printerport #1 er 0x378.
Tak,
Henrik.
| |
Mogens Hansen (05-11-2001)
| Kommentar Fra : Mogens Hansen |
Dato : 05-11-01 08:47 |
|
"Henrik Lausen" <hla@infocom-its.com> wrote in message
news:9s5e9s$9cl$1@news.cybercity.dk...
> Jeg vil bruge printerporten til styring af noget eksternt
lektronik( I/O),
> og vil samtidigt gerne kunne lave en grafiske brugerflade. Hvis jeg laver
et
> DOS program, (som kører under win98) så kører det, men hvis jeg prøver via
> Win98 (C++ visual studio 6.0), så vil programmet ikke kompileres. Jeg har
> prøvet inline assembler, og andre work arounds, men uden held. Hvordan for
> jeg kontrol over en printerport i windows (og evt. NT/2000/XP) ?.
>
> Jeg vil gerne ende ud med 2 funktioner, som kan kaldes fra mit win
program:
> unsigned char = readbyte(unsigned int Adr);
> Void = writebyte(unsigned int Adr, unsigned char Value);
> Adr er en I/O adresse variabel, som for printerport #1 er 0x378.
>
Generelt har man ikke direkte adgang til hardware i Win32. Man skal gå
gennem en driver.
Jeg ved ikke på stående fod hvilke muligheder man har for direkte at styre
printerporten.
At det er muligt fra et DOS program, skyldes et software lagt der fanget
tilgangen og sender det igennem driveren.
Venlig hilsen
Mogens Hansen
| |
Anders Borum (06-11-2001)
| Kommentar Fra : Anders Borum |
Dato : 06-11-01 13:18 |
|
"Mogens Hansen" <mogens_h@dk-online.dk> skrev i en meddelelse
news:3be643d7$1@lxcs1.manbw.dk...
>
[klip]
> Generelt har man ikke direkte adgang til hardware i Win32. Man skal gå
> gennem en driver.
> Jeg ved ikke på stående fod hvilke muligheder man har for direkte at styre
> printerporten.
Det er muligt at læse og skrive data ved at behandle porten som en fil med
et særligt filnavn, fx. LPT1. Læs evt. dokumentationen til CreateFile,
ReadFile & WriteFile i MS Platform SDK.
Ønsker man at ydermere at styre de enkelte ben på porten, skal man bruge
funktionen SetCommState.
> At det er muligt fra et DOS program, skyldes et software lagt der fanget
> tilgangen og sender det igennem driveren.
Det fungerer ifølge Henrik kun under de ikke-professionelle operativsystemer
med DOS-kerne som 95, 98 og ME. Sandsynligvis vil parallelportdriverne til
disse systemer lade tilgangen til portadresser som 0x378 foregå helt uberørt
(og stadig direkte), så længe andre programmer ikke bruger driveren aktivt.
Windows NT kernen er mere sikker og tillader ikke på samme måde direkte
programmering af hardware-porte. Man kunne dog ønske sig en slags
hardware-fortolker på driver-niveau som fanger hvad der skrives og læses på
io-portene og oversætter dette til lovlige operativsystem-kald.
Dette blev gjort med vga-driveren til windows 95 i gamle dage, og det bliver
måske stadig gjort den dag i dag. Men driverne til seriel- og
parallelportene er ikke helt så snedige.
Venlig hilsen Anders
>
> Venlig hilsen
>
> Mogens Hansen
>
>
| |
Henrik Lausen (06-11-2001)
| Kommentar Fra : Henrik Lausen |
Dato : 06-11-01 15:19 |
|
Tak for svarende. Men...
Jeg kan ikke se at jeg via SetCommState på en LPT port kan styre de enkelte
portpins. For en COM port, ja.
Jeg ønsker at manipulere med printerporten, styre både data og kontrol
signaler, og både ind og ud.
Så hvad gør jeg ?.
Henrik.
"Anders Borum" <aborum@hotmail.com> wrote in message
news:ByQF7.5511$RM3.529823@news000.worldonline.dk...
> "Mogens Hansen" <mogens_h@dk-online.dk> skrev i en meddelelse
> news:3be643d7$1@lxcs1.manbw.dk...
> >
> [klip]
> > Generelt har man ikke direkte adgang til hardware i Win32. Man skal gå
> > gennem en driver.
> > Jeg ved ikke på stående fod hvilke muligheder man har for direkte at
styre
> > printerporten.
>
> Det er muligt at læse og skrive data ved at behandle porten som en fil med
> et særligt filnavn, fx. LPT1. Læs evt. dokumentationen til CreateFile,
> ReadFile & WriteFile i MS Platform SDK.
>
> Ønsker man at ydermere at styre de enkelte ben på porten, skal man bruge
> funktionen SetCommState.
>
> > At det er muligt fra et DOS program, skyldes et software lagt der fanget
> > tilgangen og sender det igennem driveren.
>
> Det fungerer ifølge Henrik kun under de ikke-professionelle
operativsystemer
> med DOS-kerne som 95, 98 og ME. Sandsynligvis vil parallelportdriverne til
> disse systemer lade tilgangen til portadresser som 0x378 foregå helt
uberørt
> (og stadig direkte), så længe andre programmer ikke bruger driveren
aktivt.
>
> Windows NT kernen er mere sikker og tillader ikke på samme måde direkte
> programmering af hardware-porte. Man kunne dog ønske sig en slags
> hardware-fortolker på driver-niveau som fanger hvad der skrives og læses
på
> io-portene og oversætter dette til lovlige operativsystem-kald.
>
> Dette blev gjort med vga-driveren til windows 95 i gamle dage, og det
bliver
> måske stadig gjort den dag i dag. Men driverne til seriel- og
> parallelportene er ikke helt så snedige.
>
> Venlig hilsen Anders
>
> >
> > Venlig hilsen
> >
> > Mogens Hansen
> >
> >
>
>
| |
Niels Erik Danielsen (06-11-2001)
| Kommentar Fra : Niels Erik Danielsen |
Dato : 06-11-01 21:31 |
|
"Henrik Lausen" <hla@infocom-its.com> wrote in message
news:9s8rei$2fb7$1@news.cybercity.dk...
> Tak for svarende. Men...
>
> Jeg kan ikke se at jeg via SetCommState på en LPT port kan styre de
enkelte
> portpins. For en COM port, ja.
> Jeg ønsker at manipulere med printerporten, styre både data og kontrol
> signaler, og både ind og ud.
> Så hvad gør jeg ?.
Jeg mener at have set en Generic Driver til NT som kan bringes til at
kontrollere en hvilken som helst IO adresse der ikke er kontrolleret af en
device driver i forvejen, fra et Win32 program.
Dvs. man skal af installere driveren til printerporten for at kunne
installere driveren.
| |
Anders Brander (07-11-2001)
| Kommentar Fra : Anders Brander |
Dato : 07-11-01 08:46 |
|
On Tue, 06 Nov 2001 21:31:09 +0100, Niels Erik Danielsen wrote:
> Jeg mener at have set en Generic Driver til NT som kan bringes til at
> kontrollere en hvilken som helst IO adresse der ikke er kontrolleret af
> en device driver i forvejen, fra et Win32 program. Dvs. man skal af
> installere driveren til printerporten for at kunne installere driveren.
Du tænker formentligt på DviverX fra tetradyne?
http://www.tetradyne.com/driverx.htm
/Anders
| |
|
|