AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte LptAccess-Treiber/API - Betatester gesucht.
Thema durchsuchen
Ansicht
Themen-Optionen

LptAccess-Treiber/API - Betatester gesucht.

Ein Thema von Olli · begonnen am 11. Jun 2006 · letzter Beitrag vom 11. Jan 2007
Antwort Antwort
Seite 1 von 3  1 23      
Olli
Beta-Test

So. Ich brauche jetzt mal ein paar Mutige, die mindestens Windows 2000 installiert haben (NT4 könnte funktionieren, ich kann und will es aber nicht garantieren, da die entsprechende Software bei meinem MSDN-Abo nicht mehr enthalten ist! Der Treiber selbst ist soweit fertig und wird von mir jetzt noch einigen kleinen Tests unterworfen. Danach kann die Betaphase starten.

Also, wer hat Windows 2000 aufwärts, ein wenig Mut zum Risiko (der Rechner kann mit einem BlueScreen abstürzen) und mindestens einen LPT-Port?!

Den Treiber habe ich dann natürlich schon kurz getestet, aber erstens habe ich keine Geräte die am LPT hängen und direkt angesprochen werden wollen (kann also nur Laden/Entladen und die "nicht-spezifischen" IOCTLs testen) und zweitens brauche ich eine breitere Testplattform. Den mutigen Testern winkt eine Erwähnung in der Dokumentation.

Was brauche ich von den Testern:
  • Version von Windows mit Angabe des SP-Levels
  • Anzahl der LPTs am Gerät (auch virtuelle, also durch Bustreiber vorgegaukelte!)
  • Welches Gerät ihr wie angesprochen habt (kann auch per PM erfolgen, wenn es vertraulich sein soll)
  • Angabe von Auffälligkeiten und Bugs (auch im Usermode-Code)


Sollte jemand das Bedürfnis verspüren schon während der Betaphase den Code für den Treiber haben zu wollen, so kann ich diesen über PM gern zuschicken (diejenigen sollten dann aber auch Kenntnisse in der Treiberprogrammierung vorweisen können, weil mir in der Betaphase niemand damit hilft Fragen zu stellen!).

Lizenzen

Die Lizenz des Treibers wird die GPL sein (erst nach der Beta!!!). Ja, richtig gehört. Das hat damit zu tun, daß Verbesserungen am Code auch zurückfließen sollen. Allerdings wird eine Binärdatei, welche den Treiber als Daten oder in einer Ressource einbindet, nicht automatisch von der GPL erfaßt werden (dies gilt nur für die Orginal-Distro!).
Den unmodifizierten Quellcode kann man ja dann jederzeit von der Orginalseite runterladen, weshalb ihr ihn nicht extra bereitstellen müßt. Nach Beendigung einer Betaphase biete ich freiwilligen Support insofern es mir meine Zeit erlaubt - wer mehr will oder braucht kann mit mir einen Wartungsvertrag abschließen. Der Support wird sich allerdings nur auf "autorisierte Distributionen" erstrecken. Das ist nur der Code der Orginal-Distro in einer bekannten Form (der problematische Treiber muß mir mitgeliefert werden und ich vergleiche die MD5 erstmal mit meinen veröffentlichten Versionen).
Die APIs zum Ansprechen werden als C und Delphi-Modul mitgeliefert. Dieser Usermode-Teil steht dann unter der ZLIB-Lizenz.

Während der allerersten Betaphase dürfen weder der Treiber noch die Usermode-Module weiterverbreitet werden! Die obigen Lizenzbedingungen treten erst in Kraft sobald die erste Stable veröffentlicht wurde.

Gruß,
Angehängte Dateien
Dateityp: rar lptaccss_143.rar (147,1 KB, 91x aufgerufen)
 
Benutzerbild von MagicAndre1981
MagicAndre1981

 
Delphi 7 Enterprise
 
#2
  Alt 11. Jun 2006, 16:26
Hmm, ja ich melde mich mal freiwillig. Ich hab noch einen Drucker und Scanner für den LPT1. Mal sehen, ob ich zeit habe dann bastel ich mir mal was zumannen und spiele mit dem Treiber rum.

System: WindowsXP Prof. SP2
In einer VM kann ich auch auch auf den LPT kommen, da könnte ich dann mehrere Systeme probieren (Win2k + beliebiges SP auch NT4 - Das DDK könnte ich noch haben).
André
  Mit Zitat antworten Zitat
omata

 
Delphi 7 Enterprise
 
#3
  Alt 11. Jun 2006, 17:13
Hallo Olli,

wird dein Treiber auch Pin 10 auswerten? Also mit eigener Interrupt-Handlerroutine?

Wenn ja, würde mich das auch interessieren.

MfG
Thorsten
  Mit Zitat antworten Zitat
Olli
 
#4
  Alt 11. Jun 2006, 17:53
Zitat von omata:
Hallo Olli,

wird dein Treiber auch Pin 10 auswerten? Also mit eigener Interrupt-Handlerroutine?

Wenn ja, würde mich das auch interessieren.
Hallo, schick mir doch mal eine PM mit mehr Informationen. Ich schreibe den Treiber eigentlich nur, damit dieser unselige generische Portzugriff mal aufhört. Also eine eigene ISR habe ich aktuell nicht drin und wüßte auch nicht wozu, da ich ja nicht den eigentlichen Port filtere sondern die Requests nur an ihn weitergebe (internal I/O).
  Mit Zitat antworten Zitat
Daniel G
 
#5
  Alt 11. Jun 2006, 18:14
Hmm.... ich hab' ihr 'n LC - Display am parallelen Port hängen. Kann ich ja mal im Laufe der nächsten Woche testen. Dann gibt's auch die Systeminfos dazu.
  Mit Zitat antworten Zitat
Olli
 
#6
  Alt 11. Jun 2006, 20:52
Für alle die sich's selber machen wollen hängt oben jetzt ein Archiv dran. Ich hatte noch eine letzte ungetestete Änderung gemacht, also nur die Supermutigen ran da
Die IOCTLs sind in der Textdatei dokumentiert. Für das Setzen des Timeouts wird ein ULONG in Millisekunden gefordert ...

Der Rest warte bitte noch ein wenig bis ich den Usermode-Teil auch fertsch habe ...
  Mit Zitat antworten Zitat
Olli
 
#7
  Alt 12. Jun 2006, 00:35
So, oben ist jetzt das Archiv aktualisiert worden.

Ich habe noch so einige kleinere und größere (auch potentielle) Fehler ausgeräumt. Die Portdaten werden jetzt im PagedPool abgelegt, was die Wahrscheinlichkeit von Allokationsproblemen herabsetzen soll. Dadurch wurde die Device Extension auch drastisch verkleinert, weil sie jetzt nur noch einen Pointer zu den Portdaten enthält. Vermutlich werde ich noch während der Beta einen IOCTL hinzufügen der es erlaubt dynamisch die Portdaten zu aktualisieren (theoretisch kann ja ein LPT von einem Bustreiber jederzeit hinzugefügt werden - ob nun simuliert oder in Hardware soll mal egal sein.

MD5 der LptAccss.sys ist c9192d47a88099101841d67df8221d64.
Die Dateiversion bei den Dateieigenschaften sollte mit 1.0.0.120 angezeigt werden.

Was mich noch interessieren würde ist, ob es Sinn machen würde, daß man einen Puffer mit mehreren Bytes über einen Registerbereich des jeweiligen Ports ausgibt? Wenn ja, kann ich diese Funktionalität noch hinzufügen. Durch diese Verzögerung, kann es noch eine Weile dauern bis ich den Usermode-Teil nun fertig habe ...
Da ich selber keine LPT-Geräte zum ansteuern habe, brauche ich da etwas "Nachhilfe"

Hinweis:
Wer die Strukturen aus IOCTL.txt schon konvertiert hatte, sollte jetzt nicht die Änderung übersehen. Ich habe noch ein Member zu LPT_INFORMATION hinzugefügt: NumParallelPorts!
Code:
// Buffer for IOCTL_LPTACCSS_QUERY_INFORMATION
typedef struct _LPT_INFORMATION
{
   ULONG         cbLength; // Versioning for this structure
   ULONG         NumParallelPorts;
   LARGE_INTEGER   OriginalController;
   PUCHAR         Controller;
   ULONG         SpanOfController;
   INTERFACE_TYPE   InterfaceType;
   ULONG         BusNumber;
   ULONG         InterruptLevel;
   ULONG         InterruptVector;
   KAFFINITY      InterruptAffinity;
   KINTERRUPT_MODE   InterruptMode;
} LPT_INFORMATION, *PLPT_INFORMATION;
Die Anzahl der unterstützen Ports ist auf 100 beschränkt, was sich aber jederzeit bei Bedarf unproblematisch erhöhen ließe (ist nur 2-stellig wegen eines Puffers, der nur 2 Stellen halten kann). Diese Ports sind die FDOs \Device\Parallel0 .. \Device\Parallel99, insofern vorhanden.

Starten/Stoppen:
Man sollte den Treiber einfach mit W2K_LOAD, einem Tool von Sven B. Schreiber, laden unt entladen können. Wenn es währenddessen zu Problemen kommt, bitte direkt per Email melden: Assarbad att gmx dott info

Syntax:
w2k_load LptAccss.sys
w2k_load LptAccss.sys /unload
  Mit Zitat antworten Zitat
omata

 
Delphi 7 Enterprise
 
#8
  Alt 12. Jun 2006, 19:41
Hallo Olli,

ich habe da noch was gefunden...
PDF-Link,
Link

Vielleicht hilft es dir weiter... (obwohl du ja schon super dabei bist)

Wie gesagt, mich würde da die Interruptmöglichkeit sehr interessieren.
Wird es eigentlich eine Komponente für Delphi geben, die den Zugriff kapselt?

Gruss
Thorsten
  Mit Zitat antworten Zitat
Olli
 
#9
  Alt 12. Jun 2006, 20:19
Zitat von omata:
Vielleicht hilft es dir weiter... (obwohl du ja schon super dabei bist)
Ich weiß schon was ISRs, DPCs usw. sind (dank zweier OSR-Seminare), aber das hilft nix, wenn man nicht die Spezifikation hat, wie die Hardware arbeitet. Und vermutlich müßte ich mir dann auch irgendwie mal ein Stück Hardware besorgen, die ich an den LPT bei mir ranstöpsele um es mal mit echter Hardware zu testen. Der Treiber den ich jetzt geschrieben habe, ist technisch vergleichsweise einfach (im Ggs. zu einem ParClass-Treiber).
Wie gesagt, ich bin gern bereit da weiterzuhelfen. Vielleicht kannst du mir mal eine PM schicken, wo du mal auf Details eingehst, was du dir von dem Interrupt-Handling erwartest (ich vermute irgendeine Art von Benachrichtigung über Ereignisse bei der Hardware?!?).

Zitat von omata:
Wie gesagt, mich würde da die Interruptmöglichkeit sehr interessieren.
Vermutlich muß ich dazu einen kompletten ParClass-Treiber schreiben, aber ich werde es mir mal anschauen.

Zitat von omata:
Wird es eigentlich eine Komponente für Delphi geben, die den Zugriff kapselt?
Nicht von mir. Ich kann anbieten es in Funktionen zu kapseln. Wenn jemand eine Komponente daraus machen will - es ist OpenSource
  Mit Zitat antworten Zitat
Olli
 
#10
  Alt 14. Jun 2006, 22:41
So, die Delphi-Unit ist jetzt fertig.

Delphi-Quellcode:
function LptOpen(LptNumber: DWORD): DWORD; stdcall;
function LptClose(Handle: DWORD): Boolean; stdcall;
function LptRead(Handle: DWORD; Register: DWORD; var Value: Byte): Boolean; stdcall;
function LptWrite(Handle: DWORD; Register: DWORD; Value: Byte): Boolean; stdcall;
function LptGetInfo(Handle: DWORD; var Info: LPT_INFORMATION): Boolean; stdcall;
function LptGetLastError(): DWORD; stdcall;
procedure LptSetOpenTimeout(Timeout: DWORD); stdcall;
Ich gehe noch daran sie zu testen, falls sich allerdings schon jemand in einer VM dran wagen will, immer los. Ich gebe dann demnächst den Startschuß zum Betatest.

omata's Idee wird auch noch implementiert werden, so daß wir am Ende einen Treiber haben, der auch über Interruptsignale informiert und somit dem Programm ermöglicht auf diese zu reagieren.

Als "LptNumber" bei den obigen Funktionen gibt man 0 für LPT1 an, 2 für LPT3 usw.

Die Typen werden eventuell nochmal angepaßt. Anstatt die DLL einzubinden, kann man logischerweise auch direkt die Unit benutzen. Der Treiber muß vorher "manuell" gestartet werden (w2k_load, siehe oben).

Gruß,
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 11:22 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