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