AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) LPT-Port ansteuern [NT!]. Infos und/oder Tester gesucht.
Thema durchsuchen
Ansicht
Themen-Optionen

LPT-Port ansteuern [NT!]. Infos und/oder Tester gesucht.

Ein Thema von Mephistopheles · begonnen am 29. Apr 2005 · letzter Beitrag vom 30. Apr 2005
Antwort Antwort
Seite 2 von 2     12   
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: LPT-Port ansteuern [NT!]. Infos und/oder Tester gesucht.

  Alt 30. Apr 2005, 19:48
Moin,

Zitat von omata:
Der Treiber kann natürlich nicht unter einem eingeschränkten Benutzer gestartet werden. Hier wäre es wohl sinnvoll einen Registryeintrag zurealisieren, damit dies beim Start von XP als Admin passiert. Alternative wäre ein Programm, das dies übernimmt (dieser Teil kann dann aus dem Beispiel entnommen werden) und dieses müsste dann beim Booten gestartet werden. Wenn der Treiber geladen ist, kann diesen auch ein eingeschrängter Benutzer benutzen.
Zitat von Mephistopheles:
Geht leider nicht, daher bleibt nur die Alternative.
Die Alternative enhält das Beispiel schon. Dort kann man den Treiber laden (mit Adminrechten).
Die eigene Anwendung kann den Treiber dann benutzen (keine Adminrechte mehr notwenig.
Dies kann man gut testen, indem man das Beispiel zweimal öffnet, einmal mit Adminrechten und einmal ohne.

Zitat von omata:
Mir persönlich reicht dieses Ansteuern des Parallelport nicht. Ich finde diese gute alte Schnittstelle vorallem deshalb so interresant, weil man über sie einen Interrupt im System auslösen kann.
Zitat von Mephistopheles:
Ich kenne das mit (Hardware)Interrupts exakt umgekehrt. Sie werden ausgelöst, nämlich durch Ereignisse an der Hardware. Klär mich mal auf. Worauf du hinauswillst.
ja, so wie du es verstanden hast, habe ich es auch gemeint.
System stand hier für Betriebssystem. Über den Parallelport kann von einer Hardware ausserhalb des Rechners ein Interrupt im Rechner ausgelöst werden. Das war genau, was ich gemeint habe.
Sorry, wenn ich mich nicht klar ausgedrückt habe.

Zitat von omata:
Dafür benötigt man aber einen anderen Treiber. Naja, wenn euch das Ansteuern der Pins reicht - hoffe mein Hinweis hilft euch weiter.
Zitat von Mephistopheles:
Es geht mir hier darum, diese unsäglichen generischen Porttreiber endlich vom Tisch zu bekommen. Ich selber brauche das aktuell garnicht und habe es bisher nicht gebraucht.
ja, ich finde dein Vorhaben sehr gut.
Ich habe diese LPT-Port-Ansteuerthemen immer mit viel Interesse verfolgt.
Leider kommt oft der Spruch: Das ist ja alles nicht ok u.s.v aber nie kommt mal ein konkreter Vorschlag, wie es sinnvoll geht.
Das du das hier jetzt mal ändern willst, finde ich super.
Ich denke aber schon, das das Beispiel was ich hier erwähnt habe ganz informativ ist.
Sicher dort sind auch diese Direktzugriffe drin (auch) aber dort wird auch endlich mal die winsvc benutzt und speziell CreateService.

Oder wie willst du diese Portzugriff konkret realisieren? Welche Delphibefehle benutzen?

ich habe das Beispiel mal überarbeitet (goto raus, compiliert jetzt auch unter Delphi7 ohne Fehler/Warnung)

MfG
Thorsten
Angehängte Dateien
Dateityp: rar porttest_141.rar (26,0 KB, 16x aufgerufen)
  Mit Zitat antworten Zitat
Mephistopheles
(Gast)

n/a Beiträge
 
#12

Re: LPT-Port ansteuern [NT!]. Infos und/oder Tester gesucht.

  Alt 30. Apr 2005, 20:08
@engine: Leider kann ich das nicht benutzen. Du hast damals offensichtlich schon die DOS-Funktionen benutzt (spezieller Int und vorher Register mit Funktionsindex und Parameter laden). Da du kein IN/OUT in deinem Beispiel nutzt, bringt es erstmal nix. Danke trotzdem für deine Mühe.

Zitat von omata:
Zitat von omata:
Mir persönlich reicht dieses Ansteuern des Parallelport nicht. Ich finde diese gute alte Schnittstelle vorallem deshalb so interresant, weil man über sie einen Interrupt im System auslösen kann.
Zitat von Mephistopheles:
Ich kenne das mit (Hardware)Interrupts exakt umgekehrt. Sie werden ausgelöst, nämlich durch Ereignisse an der Hardware. Klär mich mal auf. Worauf du hinauswillst.
ja, so wie du es verstanden hast, habe ich es auch gemeint.
System stand hier für Betriebssystem. Über den Parallelport kann von einer Hardware ausserhalb des Rechners ein Interrupt im Rechner ausgelöst werden. Das war genau, was ich gemeint habe.
Sorry, wenn ich mich nicht klar ausgedrückt habe.
Okay. Dann ist klar, daß es einen eigenen Treiber braucht (Dongles z.B.).

Zitat von omata:
Oder wie willst du diese Portzugriff konkret realisieren? Welche Delphibefehle benutzen?
API-Funktionen ... DeviceIoControl oder die entsprechenden Native APIs. Muß ich noch sehen, wie es besser und schneller geht.
Genaugenommen ist es kein direkter Portzugriff, sondern Benutzung der Möglichkeiten, die schon vom Standard-LPT-Treiber seit mind. NT 3.51 zur Verfügung gestellt werden. Im Grunde machen das die DLLs der generischen Porttreiber auch nicht anders, obwohl es da auch diejenigen Treiber gibt, die direkt den Opcode für IN/OUT verwenden (schlecht!), was tabu ist - und jene die READ_PORT_*() benutzen (gut!). Um von der DLL oder einem Programm "direkt" auf einen Treiber zuzugreifen, braucht man sowieso IOCTLs, also DeviceIoControl() - oder eben Ersatzfunktionen.

Danke erstmal. Ich schaue mir das an
  Mit Zitat antworten Zitat
engine

Registriert seit: 6. Mär 2005
73 Beiträge
 
#13

Re: LPT-Port ansteuern [NT!]. Infos und/oder Tester gesucht.

  Alt 30. Apr 2005, 22:41
Zitat von Mephistopheles:
@engine: Leider kann ich das nicht benutzen. Du hast damals offensichtlich schon die DOS-Funktionen benutzt (spezieller Int und vorher Register mit Funktionsindex und Parameter laden). Da du kein IN/OUT in deinem Beispiel nutzt, bringt es erstmal nix. Danke trotzdem für deine Mühe.
Jetzt bin ich aber neugierig geworden. Das Beispiel bezieht sich auf die Serielle Schnittstelle. Mit TP und DOS konnte ich immer "PortW()" benutzen um auf den COM-Port zuzugreife. Unter Delphi funktionierte das natürlich nicht, da gab es PortW() ja nicht mehr und Windows verweigert ohne Porttreiber eh den Zugriff.
Meintest Du mit IN/OUT so etwas?

Delphi-Quellcode:
function PortIn(Addr : Word): Byte; Assembler; StdCall;
asm
  mov dx, Addr { Adresse in DX schreiben }
  in al, dx { Port lesen. (AL entspricht Result) }
end;

procedure PortOut(Addr : Word; Data : Byte); Assembler; StdCAll;
asm
  mov dx, Addr { Adresse nach DX }
  mov al, Data { Datenbyte nach AL }
  out dx, al { Port schreiben }
end;

function ReadMesskarte2(Kanal : byte) : double; (* $2FC = COM2; $3FC = COM1 *)
type
  KAN = array[1..12] of byte;
const
   DIN : array[1..8] of KAN = ((1,1,1,1,0,1,1,1,0,0,0,1), { 1 }
                               (1,1,1,1,0,1,1,1,0,0,1,1), { 2 }
                               (1,1,1,1,0,1,1,1,1,0,0,1), { 3 }
                               (1,1,1,1,0,1,1,1,1,0,1,1), { 4 }
                               (1,1,1,1,0,1,1,1,1,0,1,0), { 5 }
                               (1,1,1,1,0,1,1,1,0,1,1,1), { 6 }
                               (1,1,1,1,0,1,1,1,1,1,0,1), { 7 }
                               (1,1,1,1,0,1,1,1,1,1,1,1) { 8 }
                               );
   B : integer = 2048;
   Ref : double = 5;
   Vout : double = 0;
var
  i : integer;
  d : byte;
begin
  Ref := 5;
  Vout := 0;
  B := 2048;
  D := 0;
  for i := 1 to 12 do
  begin
    PortOut($2FC ,($fe and PortIn($2FC)));
    if DIN[Kanal,13-i] = 0
    then PortOut($2FC ,($fd and PortIn($2FC)))
    else PortOut($2FC ,($2 or PortIn($2FC)));
    PortOut($2FC ,($1 or PortIn($2FC)));
    if (PortIn($2fe) and 16) = 16
    then D := 0
    else D := 1;
    Vout := Vout +(D*B);
    B := B div 2;
  end;
  ReadMesskarte2 := (Vout / 1023) *Ref /4;
  PortOut($2FC , ($fd and PortIn($2FC)));
  PortOut($2FC ,($2 or PortIn($2FC)));
end;
  Mit Zitat antworten Zitat
Mephistopheles
(Gast)

n/a Beiträge
 
#14

Re: LPT-Port ansteuern [NT!]. Infos und/oder Tester gesucht.

  Alt 30. Apr 2005, 23:10
Genau sowas meinte ich ... aber eben als Beispiel für LPT, nicht COM
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz