/ 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
Programmering af printerport
Fra : Ukendt


Dato : 30-11-01 17:53

Hejsa!!!

Jeg prøver at skrive til printerporten, jeg har hidtidig brugt inport
og outport.

Nu bruger jeg Visual C++ hvor jeg programmere MFC programmer.
Printerporten skal opsættes til ECP mode og programmet skal kunne
bruges i win98, win2000, XP og lign.

Er der nogle gode råd???

Mvh,
EWJ

 
 
Thomas Lykkeberg (01-12-2001)
Kommentar
Fra : Thomas Lykkeberg


Dato : 01-12-01 11:08

On Fri, 30 Nov 2001 16:52:30 GMT, 1 wrote:

>Hejsa!!!
>
>Jeg prøver at skrive til printerporten, jeg har hidtidig brugt inport
>og outport.
>
>Nu bruger jeg Visual C++ hvor jeg programmere MFC programmer.
>Printerporten skal opsættes til ECP mode og programmet skal kunne
>bruges i win98, win2000, XP og lign.
>
>Er der nogle gode råd???
>
>Mvh,
>EWJ
Det bliver nemt nok med Win98, men mht. Win2K og XP, tjaaee, så er
sagen straks en anden. Her er LPT porten (adr: 0x278.., 0x378.. osv)
beskyttet af operativsystemet. Det kan ikke lade sig gøre at skrive
læse direkte vha. _inp() og _outp() kommandoerne, når assembler
instruktionen IN eller OUT bliver udført, vil processoren genererer en
exception (interrupt), hvor det bliver kontrolleret om der er
rettigheder til at tilgå netop den valgte resource. Hvis dette ikke er
tilfældet, vil en fatal exception blive generet, og så kan man jo
forstille sig resten. Der er dog et par muligheder.

1) Lave en stump Kernel Mode kode (brug DDK (Device Drivers Kit)), som
"åbner" for tilladelse til at skrive læse til/fra ovenstående porte.
Denne løsning er et RIGTIGT HACK og er ikke noget du skal basere noget
seriøst på. En sådan stump kode kan man med garanti finde ved en
søgning på nettet, eller ved at kigge i grupper som indeholder noget
ned nt, wdm eller kernel.

2) Købe en Kernel Mode driver som giver dig adgang til portene. Der
findes et hav af disse på nettet,start med
http://www.lvr.com/parport.htm, her er der en masse godt info. Ikke
alle drivere er lige godt lavet, nogle baserer sig bemlig direkte på
ovenstående hack.

3) Lave din egen Kernel Mode driver. Det er nu ikke så nemt hvis du
ikke har lavet Kernel Mode kode før, men køb en bog om emnet (WDM
Drivers el. lign.) og klø på. "Intet er umuligt for den der bærer
viljen i hjertet"

Jeg er selv i gang med et lille projekt på mit arbejde hvor jeg laver
en WDM driver, som tilbyder et direkte interface ned til printer
porten. Den nye driver struktur i Win2000 og XP tilbyder nemlig dette,
idet Microsoft har opdelt selve printer driveren i 3 dele. Den
nederste del styrer selve tilgangen til parallelport chip'en
(parallel.sys), samt distribuerer resourcerne til den driver som måtte
ligge oven på (parport.sys i normal printer sammenhænge). Helt øverst
ligger så selve printer driveren til den type printer som er
tilsluttet systemet. Det man så kan, er at bede parallel.sys driveren
om ene-ret til parallelport resourcerne (ikke noget problem hvis
printeren ikke bliver brugt), og dernæst "skyde" sin egen WDM driver
ind, og lave et IOCTL interface (Kernel Mode driver term) op til en
evt. User Mode applikation. Alt dette har ikke en pind med C at gøre,
men ofte programmerer man dog WDM drivere i ren C.

God fornøjelse...

Thomas

EWJ (01-12-2001)
Kommentar
Fra : EWJ


Dato : 01-12-01 17:32

Hej Thomas

Dette problem er ligeledes i arbejde sammenhæng.
Jeg arbejder med DVB og har allerede programmeret interfacet til hardwaren.
Problemet er selfølgelig bare _outp og _inp kun virker i win98 o.lign. Jeg
havde håbet
at Windows MFC havde prefabrikerede classer hvormed man er istand til at
benytte porten
når den er ledig. Jeg kontakter en FPGA hvor jeg har programmeret en ECP
protokol.

Tak for den velbeskrevede hjælp.

Mvh, EWJ



"Thomas Lykkeberg" <thomasDOTlykkeberg@privatDOTdk> wrote in message
news:os9h0u0favqfv09e4slgvd34hishiagqhg@4ax.com...
> On Fri, 30 Nov 2001 16:52:30 GMT, 1 wrote:
>
> >Hejsa!!!
> >
> >Jeg prøver at skrive til printerporten, jeg har hidtidig brugt inport
> >og outport.
> >
> >Nu bruger jeg Visual C++ hvor jeg programmere MFC programmer.
> >Printerporten skal opsættes til ECP mode og programmet skal kunne
> >bruges i win98, win2000, XP og lign.
> >
> >Er der nogle gode råd???
> >
> >Mvh,
> >EWJ
> Det bliver nemt nok med Win98, men mht. Win2K og XP, tjaaee, så er
> sagen straks en anden. Her er LPT porten (adr: 0x278.., 0x378.. osv)
> beskyttet af operativsystemet. Det kan ikke lade sig gøre at skrive
> læse direkte vha. _inp() og _outp() kommandoerne, når assembler
> instruktionen IN eller OUT bliver udført, vil processoren genererer en
> exception (interrupt), hvor det bliver kontrolleret om der er
> rettigheder til at tilgå netop den valgte resource. Hvis dette ikke er
> tilfældet, vil en fatal exception blive generet, og så kan man jo
> forstille sig resten. Der er dog et par muligheder.
>
> 1) Lave en stump Kernel Mode kode (brug DDK (Device Drivers Kit)), som
> "åbner" for tilladelse til at skrive læse til/fra ovenstående porte.
> Denne løsning er et RIGTIGT HACK og er ikke noget du skal basere noget
> seriøst på. En sådan stump kode kan man med garanti finde ved en
> søgning på nettet, eller ved at kigge i grupper som indeholder noget
> ned nt, wdm eller kernel.
>
> 2) Købe en Kernel Mode driver som giver dig adgang til portene. Der
> findes et hav af disse på nettet,start med
> http://www.lvr.com/parport.htm, her er der en masse godt info. Ikke
> alle drivere er lige godt lavet, nogle baserer sig bemlig direkte på
> ovenstående hack.
>
> 3) Lave din egen Kernel Mode driver. Det er nu ikke så nemt hvis du
> ikke har lavet Kernel Mode kode før, men køb en bog om emnet (WDM
> Drivers el. lign.) og klø på. "Intet er umuligt for den der bærer
> viljen i hjertet"
>
> Jeg er selv i gang med et lille projekt på mit arbejde hvor jeg laver
> en WDM driver, som tilbyder et direkte interface ned til printer
> porten. Den nye driver struktur i Win2000 og XP tilbyder nemlig dette,
> idet Microsoft har opdelt selve printer driveren i 3 dele. Den
> nederste del styrer selve tilgangen til parallelport chip'en
> (parallel.sys), samt distribuerer resourcerne til den driver som måtte
> ligge oven på (parport.sys i normal printer sammenhænge). Helt øverst
> ligger så selve printer driveren til den type printer som er
> tilsluttet systemet. Det man så kan, er at bede parallel.sys driveren
> om ene-ret til parallelport resourcerne (ikke noget problem hvis
> printeren ikke bliver brugt), og dernæst "skyde" sin egen WDM driver
> ind, og lave et IOCTL interface (Kernel Mode driver term) op til en
> evt. User Mode applikation. Alt dette har ikke en pind med C at gøre,
> men ofte programmerer man dog WDM drivere i ren C.
>
> God fornøjelse...
>
> Thomas



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

Månedens bedste
Årets bedste
Sidste års bedste