Autor Thema: PS2-Keyboard identifizieren  (Gelesen 5099 mal)

Beatkiller

  • Beiträge: 17
    • Profil anzeigen
Gespeichert
« am: 26. August 2011, 19:41 »
Hallo,

ich habe mich schon durch diverse Dokumente gewälzt, aber meine Versuche gehen irgendwie immer schief. Ich suche eine Möglichkeit, zu identifizieren, was für ein Keyboard am PS2-Port angeschlossen ist. Eins vornweg: Ich brauche die Möglichkeit für Linux, ich greife auf /dev/port zu und gehe mit lseek() an 0x64 oder 0x60 um Kommandos/Daten zu senden/empfangen oder den Status auszulesen.

Ich habe auf der Seite

http://www.computer-engineering.org/ps2keyboard/

ein gutes Dokument gefunden, in dem beschrieben steht, das man die Keyboard ID mit Command-Set 0xf2 abrufen kann. Ich vermute jetzt stark, das ich das falsch mache, denn je nach dem, welches Keyboard ich anschließe (ich habe drei verschiedene, die unterschieden werden müssen), bekomme ich entweder 0xfa (ACK) + 0xab + 0x41 (bei zwei der drei Keyboards) oder ein 0xfe zurück. Ich schreibe das Commando in den Input-Buffer (0x60) und lese dann auch wieder 0x60 aus.

Ist das Vorgehen soweit richtig? Ich finde kein Beispiel dafür. Ich habe auch schon versucht, die Keyboard-Controller-Firmware-Version auszulesen, was mich für die Identifikation des Keyboards wahrscheinlich nicht weiter bringt - auch dieses funktioniert nicht.

Zum Hintergrund:

Es gibt, wie schon erwähnt, 3 Tastaturen von unterschiedlichen Herstellern. Diese Tastaturen müssen irgendwie erkannt werden, da die Keyboards unterschiedliche Scancodes für bestimmte Tasten zurück liefern. Dies wäre kein Problem, ich kann das mit setkeycodes beheben, aber dafür muss ich wissen, was für eine Tastatur denn nun am Port hängt.

Um das ganze auf die Spitze zu treiben, muss die Erkennung auch mit verschiedenen Rechnern funktionieren, die unterschiedliche BIOSe haben - das scheint ja auch eine wichtige Information zu sein, wenn ich das Dokument so betrachte.

Hat jemand eine Idee, wie das zu lösen wäre? Ich fummel damit schon eine Woche rum und finde einfach keine zufriedenstellende Lösung.

Danke für eure Tipps.

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 26. August 2011, 20:02 »
Da steht auch drin, dass nicht jeder Controller und nicht jede Tastatur entsprechend passend müssen.
Mich würde interessieren, um welche Scancodes es geht und ob du das nicht anderweitig fixen könntest. In den I/O-Ports rumzupfuschen, während der Linux-Treiber das gleiche tut, halte ich nicht für elegant. Versuche lieber, beim Linux-Treiber die gesuchten Eigenschaften zu erfragen oder, falls möglich, einfach alle drei Scancode-Sätze zu mappen.

Gruß,
Svenska

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 26. August 2011, 22:30 »
Und das liegt nicht daran, dass die Keyboards auf unterschiedliche Scan Code Sets eingestellt sind? Man kann das ja auslesen bzw. einstellen.
Dieser Text wird unter jedem Beitrag angezeigt.

gargyle

  • Beiträge: 3
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 27. August 2011, 11:08 »
Nach meinen Infos kann die Tastaturn auf ein F2 auf 3 Weisen reagieren:

-> gar nicht (Time Out) -> PC/XT Tastatur
-> ACK ? (wiedersprüchliche Infos)
-> ACK + ID ( 2 Bytes, 41ab ) ? MF 2

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 27. August 2011, 17:41 »
Eine XT-Tastatur wird an dem Anschluss nicht funktionieren. :-)
Jede heute übliche PS/2-Tastatur ist eine MF II-Tastatur. "Echte" AT-Teile sind inzwischen wirklich selten geworden. Um verschiedene Tastaturen zu unterscheiden, ist 0xF2 also keine sinnvolle Möglichkeit, da die Antwort ziemlich genau feststeht.

Die Keycodes für die Sondertasten sind normalerweise auch identisch oder zumindest nicht überlappend (d.h. was auf der einen Tastatur das Power Off ist, wird auf der anderen normalerweise nichts anderes sein).

Beatkiller

  • Beiträge: 17
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 29. August 2011, 12:34 »
Die Idee mit dem Mapping über setkeycodes in jedem Fall war super! Es gibt glücklicherweise keine Scancode-Überlappung.

Danke für die vielen Tipps.

Dennoch würde mich interessieren, ob das nicht doch irgendwie zu bewerkstelligen ist. Falls es jemand schafft, würde ich mich über die Lösung freuen. Ich bin jetzt erstmal happy mit dieser Lösung - bis irgendwann eine Tastatur kommt, bei der es eine Scancode-Überlappung gibt  :evil:

 

Einloggen