/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
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

> 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

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste