| Zeile 327: | Zeile 327: | ||
uint8_t scancode; | uint8_t scancode; | ||
uint8_t keycode = 0; | uint8_t keycode = 0; | ||
| − | + | int break_code = 1; | |
| − | + | ||
// Status-Variablen fuer das Behandeln von e0- und e1-Scancodes | // Status-Variablen fuer das Behandeln von e0- und e1-Scancodes | ||
| − | static | + | static int e0_code = 1; |
// Wird auf 1 gesetzt, sobald e1 gelesen wurde, und auf 2, sobald das erste | // Wird auf 1 gesetzt, sobald e1 gelesen wurde, und auf 2, sobald das erste | ||
// Datenbyte gelesen wurde | // Datenbyte gelesen wurde | ||
static int e1_code = 0; | static int e1_code = 0; | ||
static uint16_t e1_prev = 0; | static uint16_t e1_prev = 0; | ||
| − | + | ||
scancode = inb(0x60); | scancode = inb(0x60); | ||
| − | + | ||
// Um einen Breakcode handelt es sich, wenn das oberste Bit gesetzt ist und | // Um einen Breakcode handelt es sich, wenn das oberste Bit gesetzt ist und | ||
// es kein e0 oder e1 fuer einen Extended-scancode ist | // es kein e0 oder e1 fuer einen Extended-scancode ist | ||
| Zeile 344: | Zeile 344: | ||
(e0_code || (scancode != 0xE0))) | (e0_code || (scancode != 0xE0))) | ||
{ | { | ||
| − | break_code = | + | break_code = 0; |
scancode &= ~0x80; | scancode &= ~0x80; | ||
| + | return; | ||
} | } | ||
| − | + | ||
if (e0_code) { | if (e0_code) { | ||
// Fake shift abfangen und ignorieren | // Fake shift abfangen und ignorieren | ||
if ((scancode == 0x2A) || (scancode == 0x36)) { | if ((scancode == 0x2A) || (scancode == 0x36)) { | ||
| − | e0_code = | + | e0_code = 1; |
return; | return; | ||
} | } | ||
| − | + | ||
keycode = translate_scancode(1, scancode); | keycode = translate_scancode(1, scancode); | ||
| − | e0_code = | + | e0_code = 1; |
} else if (e1_code == 2) { | } else if (e1_code == 2) { | ||
// Fertiger e1-Scancode | // Fertiger e1-Scancode | ||
| Zeile 369: | Zeile 370: | ||
} else if (scancode == 0xE0) { | } else if (scancode == 0xE0) { | ||
// Anfang eines e0-Codes | // Anfang eines e0-Codes | ||
| − | e0_code = | + | e0_code = 0; |
} else if (scancode == 0xE1) { | } else if (scancode == 0xE1) { | ||
// Anfang eines e1-Codes | // Anfang eines e1-Codes | ||
| Zeile 376: | Zeile 377: | ||
// Normaler Scancode | // Normaler Scancode | ||
keycode = translate_scancode(0, scancode); | keycode = translate_scancode(0, scancode); | ||
| + | keyboard_char = keycode; | ||
} | } | ||
| − | + | // Zum Testen sollte folgendes verwendet werden: | |
| − | + | kprintf("%c", keycode); | |
| − | + | //Nach erfolgreichen Tests, könnte eine send_key_event Funtkion wie bei Týndur verwendet werden | |
| − | |||
| − | |||
} | } | ||
</c> | </c> | ||