Autor Thema: Bekomme Tastenkombinationen (teilweise) nicht hin  (Gelesen 6028 mal)

ichmagbohnen

  • Beiträge: 7
    • Profil anzeigen
Gespeichert
« am: 02. July 2009, 21:05 »
Ich stehe gerade vor einem Problem, welches mich schon ein Weilchen beschäftigt.

Grosschreiben usw geht, aber keine Zeichen mit ALT/ALT GR, meine Tastaturtreiber sieht in etwa so aus:
#define STRG 0x1D // keycode
#define ALT 0x38 // keycode
#define LSHIFT 0x2A // keycode
#define RSHIFT 0x36 // keycode

struct key_combinations { // wird mit jedem aufruf des irq handlers
unsigned char lshift_pressed; // aktualisiert, 1 = gedrückt
unsigned char rshift_pressed;
unsigned char alt_pressed;
unsigned char strg_pressed;
unsigned char keyboard_reboot;
} kc;

void keyboard() {
unsigned char scancode = inb(0x60);

if(scancode & 0x80) { // taste wurde losgelassen
scancode -= 0x80; // released-bit wegmachen
switch(scancode) {
case STRG:
kc.strg_pressed = 0; // 0, taste also nicht gedrückt
break;
case ALT:
...
...
}
} else { // taste wurde gedrueckt
switch(scancode) {
case STRG:
kc.strg_pressed = 1; // 1, taste wurde gedrueckt
break;
case ALT:
...
...
}

if(kc.lshift_pressed || kc.rshift_pressed) {
scancode = scancode + 128;
}
if(kc.alt_pressed) {
scancode = scancode + 256;
}

printf("%c", keyboard_layout[scancode]);
}
Hier nur ein Ausschnitt. Das array keyboard_layout ist vom Typ unsigned char und enthält an der jeweiligen Stelle wie die Scancodes sind, das entsprechende Zeichen.
Klein und Gross geht, aber ALT nicht.
Eine Debug-Ausgabe in der ich mir die Variablen des Structs kc ansehe, zeigt immer die Richtigen Tasten an....
Das Array sieht so aus:
0   // kleinbuchstaben anfang
...
127   // ende
128  // grossbuchstaben, sonderzeichen, usw anfang
...
255   //ende
256   // inhalt fuer strg
...
383  // ende

Ein Tastatur-Reset mit Alt funktioniert z.B.....
if(kc.strg_pressed && kc.alt_pressed && kc.keyboard_reboot && (scancode == DELKEY)) {
reset();
}

Ich hoffe ihr könnt mir einen Tip geben wo es bei mir hängt und sollte ich was vergessen haben bitte melden :)
go on home british soldiers, go on home. have you got no fucking homes of your own?!
for eight hundred years, we fought you without fear, and we will fight you for eight hundred more!

DerHartmut

  • Beiträge: 236
    • Profil anzeigen
    • Mein Blog
Gespeichert
« Antwort #1 am: 03. July 2009, 03:36 »
Ich würde jetzt einfach mal behaupten, dass du in deiner Keymap nicht die entsprechenden Zeichen (@, €, µ etc.) eingetragen hast (und diese sich auf im Textmodus auch AFAIK nicht ausgeben lassen, Stichwort ASCII).
$_="krJhruaesrltre c a cnp,ohet";$_.=$1,print$2while s/(..)(.)//;
Nutze die Macht, nutze Perl ;-)

matheguru

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 03. July 2009, 07:47 »
Ja Hartmut, der gedanke ist mir auch schon gekommen! Ich dachte mir auch bereits, dass im ASCII zeichensatz diese sonderzeichen überhaupt nicht definiert sind, somit können sie natürlich auch nicht ausgegeben werden! Wenn man sich auch mal z.B. den font Arial anschaut sieht man auch das es deutlich mehr zeichen gibt, als in ASCII.
Hacker zu sein bedeutet mehr, als sich nur damit auseinander zu setzen, es ist eine Lebenseinstellung

FreakyPenguin

  • Administrator
  • Beiträge: 301
    • Profil anzeigen
    • toni.famkaufmann.info
Gespeichert
« Antwort #3 am: 03. July 2009, 08:26 »
Den Treiber habe ich mir noch nicht angesehen, aber folgendes der Vollständigkeit halber:
Ich würde jetzt einfach mal behaupten, dass du in deiner Keymap nicht die entsprechenden Zeichen (@, €, µ etc.) eingetragen hast (und diese sich auf im Textmodus auch AFAIK nicht ausgeben lassen, Stichwort ASCII).
Das passende Stichwort ist hier eigentlich nicht ascii, sondern Codepage 437, aber ASCII ist dort deckungsgleich drin, folglich müsste sich ein @ schon abbliden lassen.

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« Antwort #4 am: 03. July 2009, 12:31 »
Zu Hartmut und matheguru: Ein @ und ein µ kann man sehr wohl im Textmodus ausgeben. Ein @ ist im ASCII-Zeichensatz drin, ein µ im erweiterten (Codepage 437, siehe FreakyPenguin). Für das €-Zeichen benutze ich persönlich übrigens das Zeichen an der Stelle 0xEE.

ichmagbohnen

  • Beiträge: 7
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 05. July 2009, 11:17 »
Diese Zeichen hatte ich zuerst auch im Verdacht, Ärger zu machen, aber nachdem ich sie rausgenommen hab, war das immer noch so.
Ich habe da jetzt auch schon ein Weilchen rumbastelt, aber nichts tut wie es soll.
Ich glaube, ich schreibe den Treiber neu....
go on home british soldiers, go on home. have you got no fucking homes of your own?!
for eight hundred years, we fought you without fear, and we will fight you for eight hundred more!

 

Einloggen