ScanCodes an Tastatur
-
Hi,
ich schreibe gerade an einem kleinen Programm, das die Funktionstüchtigkeit der angeschlossenen Tastatur überprüfen soll. Die einzige Möglichkeit, die mir dazu eingefallen ist, einen Scancode an die Tastatur zu schicken, bei dem sie gezwungen ist, auch darauf zu antworten (wie z.B. "resend" oder "reset"). Allerdings gibt's dafür anscheinend keine passende C(++)-Funktion.
Deswegen habe ich versucht, das in Assembler umzusetzten. Dabei bin ich leider nicht allzu weit gekommen:void SendScanCode() { __asm{ mov al, EDh out 60h, al } }
Hier gibt er mir schon den Fehler, wegen unterschiedlicher Größe der Operanden.
Aber das war gar nicht unbeding das Problem.Ich frage mich, ob es denn grundsätzlich funktioniert? Und 60h ist doch die Adresse der PS2-Tastatur, also wird es bei er USB-Tastatur schon wieder nicht funktionieren?
Ich hoffen, man kann meine Frage verstehen
Gruß,
bumpl
-
bumpl schrieb:
ich schreibe gerade an einem kleinen Programm, das die Funktionstüchtigkeit der angeschlossenen Tastatur überprüfen soll. Die einzige Möglichkeit, die mir dazu eingefallen ist, einen Scancode an die Tastatur zu schicken, bei dem sie gezwungen ist, auch darauf zu antworten (wie z.B. "resend" oder "reset"). Allerdings gibt's dafür anscheinend keine passende C(++)-Funktion.
Jou, und da stellt sich dann auch erstmal die Frage, mit welchem Compiler und Assembler du fuer welches System programmierst. In Windows und Linux geht das so zB. sehr wahrscheinlich schon mal allein deshalb daneben, weil diese Systeme idR. keinen direkten Zugriff auf Hardware zulassen.
bumpl schrieb:
Hier gibt er mir schon den Fehler, wegen unterschiedlicher Größe der Operanden.
Aber das war gar nicht unbeding das Problem.Aha... Ok, falls dazu noch weitere Fragen auftauchen, siehe oben.
bumpl schrieb:
Ich frage mich, ob es denn grundsätzlich funktioniert? Und 60h ist doch die Adresse der PS2-Tastatur, also wird es bei er USB-Tastatur schon wieder nicht funktionieren?
Richtig. Einige Chipsets bieten zwar noch eine Art Hardware-Emulation fuer USB->PS/2 an, aber die muesste dann auch erstmal eingeschaltet sein.
Ansonsten funktionieren USB-Keyboards natuerlich anders.
Vom Prinzip her koennte das so funktionieren, wenn du einfach was an Port 60h schreibst. Um Fehler zu vermeiden muesstest du aber ueber Port 64h jeweils den Status des i/o-Puffers testen (siehe dazu auch den Thread zu Erhards OS).
-
Hi,
danke für die Antwort.
da stellt sich dann auch erstmal die Frage, mit welchem Compiler und Assembler du fuer welches System programmierst
So was dachte ich mir auch schon
Ich programmier derzeit noch mit Visual C++ Express, werde aber wohl demnächst das komplette MS Studio Professional. Leider muss ich hier für Windows programmieren.
Da wohl sonst keine Möglichkeit besteht, direkt auf Hardware zuzugreifen, werde ich dann an dem Code Snippet (siehe oben) arbeiten und versuchen, das irgendwie hinzukriegen.
Es geht hier tatsächlich NUR um PS/2, da USB Peripherie anders überprüft wird.Gruß,
bumpl
-
Hi,
also um die Hardware anzusprechen koennteste dir nen kleinen Treiber schreiben. Ist nicht so schwer. Einfach mal bei codeproject nach ein paar Projekten suchen die das Thema besprechen und dann mit der Function:
READ_PORT_UCHAR
auslesen bzw. mit:
WRITE_PORT_UCHAR
schreiben.Hab das au schon mal gemacht damit ich meine kleines LCD ansteuern konnte.
Blessed Love C0de4Fun
-
Hi,
das könnte das sein, was ich brauche
Nur laut MSDN:Headers: Declared in Wdm.h. Include Wdm.h, Ntddk.h, or Ntifs.h.
Keine der Dateien kann ich einbinden.
Und auch so weiß ich nicht, wie ich dieses Makro anwenden soll.Gruß,
bumpl
-
Heyho,
wie gesagt dazu musste einen Treiber schreiben und dafuer brauchts du entweder das aeltere Windows DDK oder das neue Windows Driver Kit (WDK). Einfach mal googln und dann wie gesagt schauste einfach mal bei codeproject nach, Da sollteste die Basics finden.
Blessed Love C0de4Fun