diff --git a/Source/HBIOS/ch376-native/keyboard/class_hid_keyboard.c.s b/Source/HBIOS/ch376-native/keyboard/class_hid_keyboard.c.s index d997d258..185b058b 100644 --- a/Source/HBIOS/ch376-native/keyboard/class_hid_keyboard.c.s +++ b/Source/HBIOS/ch376-native/keyboard/class_hid_keyboard.c.s @@ -30,6 +30,8 @@ ; .area _INITIALIZED removed by z88dk +_caps_lock_engaged: + DEFS 1 _scancodes_shift_table: DEFS 128 _scancodes_table: @@ -49,40 +51,88 @@ _scancodes_table: ;-------------------------------------------------------- ; code ;-------------------------------------------------------- -;source-doc/keyboard/class_hid_keyboard.c:333: }; +;source-doc/keyboard/class_hid_keyboard.c:337: }; +; --------------------------------- +; Function char_with_caps_lock +; --------------------------------- +_char_with_caps_lock: + ld c, a +;source-doc/keyboard/class_hid_keyboard.c:338: + ld hl,_caps_lock_engaged + bit 0, (hl) + jr NZ,l_char_with_caps_lock_00102 +;source-doc/keyboard/class_hid_keyboard.c:339: char char_with_caps_lock(const char c) __sdcccall(1) { + ld a, c + jr l_char_with_caps_lock_00109 +l_char_with_caps_lock_00102: +;source-doc/keyboard/class_hid_keyboard.c:341: return c; + ld a, c + sub 0x41 + jr C,l_char_with_caps_lock_00104 + ld a,0x5a + sub c + jr C,l_char_with_caps_lock_00104 +;source-doc/keyboard/class_hid_keyboard.c:342: + ld a, c + add a,0x20 + jr l_char_with_caps_lock_00109 +l_char_with_caps_lock_00104: +;source-doc/keyboard/class_hid_keyboard.c:344: return c - 'A' + 'a'; + ld a, c + sub 0x61 + jr C,l_char_with_caps_lock_00107 + ld a,0x7a + sub c + jr C,l_char_with_caps_lock_00107 +;source-doc/keyboard/class_hid_keyboard.c:345: + ld a, c + add a,0xe0 + jr l_char_with_caps_lock_00109 +l_char_with_caps_lock_00107: +;source-doc/keyboard/class_hid_keyboard.c:347: return c - 'a' + 'A'; + ld a, c +l_char_with_caps_lock_00109: +;source-doc/keyboard/class_hid_keyboard.c:348: + ret +;source-doc/keyboard/class_hid_keyboard.c:350: } ; --------------------------------- ; Function scancode_to_char ; --------------------------------- _scancode_to_char: ld c, a -;source-doc/keyboard/class_hid_keyboard.c:334: +;source-doc/keyboard/class_hid_keyboard.c:351: ld a,l ld e,l sub 0x80 jr C,l_scancode_to_char_00102 -;source-doc/keyboard/class_hid_keyboard.c:335: char scancode_to_char(const uint8_t modifier_keys, const uint8_t code) __sdcccall(1) { +;source-doc/keyboard/class_hid_keyboard.c:352: char scancode_to_char(const uint8_t modifier_keys, const uint8_t code) __sdcccall(1) { xor a jr l_scancode_to_char_00105 l_scancode_to_char_00102: -;source-doc/keyboard/class_hid_keyboard.c:337: return 0; +;source-doc/keyboard/class_hid_keyboard.c:354: return 0; ld a, c and 0x22 jr Z,l_scancode_to_char_00104 -;source-doc/keyboard/class_hid_keyboard.c:338: +;source-doc/keyboard/class_hid_keyboard.c:355: ld d,0x00 ld hl,_scancodes_shift_table add hl, de - ld a, (hl) - jr l_scancode_to_char_00105 + ld a,(hl) + ld c,a + jp _char_with_caps_lock l_scancode_to_char_00104: -;source-doc/keyboard/class_hid_keyboard.c:340: return scancodes_shift_table[code]; +;source-doc/keyboard/class_hid_keyboard.c:357: return char_with_caps_lock(scancodes_shift_table[code]); ld d,0x00 ld hl,_scancodes_table add hl, de - ld a, (hl) + ld a,(hl) + ld c,a + jp _char_with_caps_lock l_scancode_to_char_00105: -;source-doc/keyboard/class_hid_keyboard.c:341: +;source-doc/keyboard/class_hid_keyboard.c:358: ret +_caps_lock_engaged: + DEFB +0x01 _scancodes_shift_table: DEFB +0x00 DEFB +0x00 diff --git a/Source/HBIOS/ch376-native/keyboard/kyb-init.c.s b/Source/HBIOS/ch376-native/keyboard/kyb-init.c.s index 93a3a03b..9a558c3b 100644 --- a/Source/HBIOS/ch376-native/keyboard/kyb-init.c.s +++ b/Source/HBIOS/ch376-native/keyboard/kyb-init.c.s @@ -62,77 +62,77 @@ _report: ;-------------------------------------------------------- ; code ;-------------------------------------------------------- -;source-doc/keyboard/kyb-init.c:11: void keyboard_init(void) { +;source-doc/keyboard/kyb-init.c:12: void keyboard_init(void) { ; --------------------------------- ; Function keyboard_init ; --------------------------------- _keyboard_init: -;source-doc/keyboard/kyb-init.c:13: uint8_t index = 1; +;source-doc/keyboard/kyb-init.c:14: uint8_t index = 1; ld c,0x01 -;source-doc/keyboard/kyb-init.c:14: keyboard_config = NULL; +;source-doc/keyboard/kyb-init.c:15: keyboard_config = NULL; ld hl,0x0000 ld (_keyboard_config),hl -;source-doc/keyboard/kyb-init.c:16: do { +;source-doc/keyboard/kyb-init.c:17: do { ld b,0x01 l_keyboard_init_00105: -;source-doc/keyboard/kyb-init.c:17: keyboard_config = (device_config_keyboard *)get_usb_device_config(index); +;source-doc/keyboard/kyb-init.c:18: keyboard_config = (device_config_keyboard *)get_usb_device_config(index); push bc ld a, b call _get_usb_device_config ex de, hl pop bc ld (_keyboard_config), hl -;source-doc/keyboard/kyb-init.c:19: if (keyboard_config == NULL) +;source-doc/keyboard/kyb-init.c:20: if (keyboard_config == NULL) ld hl,(_keyboard_config) ld a,h or l jr Z,l_keyboard_init_00107 -;source-doc/keyboard/kyb-init.c:22: const usb_device_type t = keyboard_config->type; +;source-doc/keyboard/kyb-init.c:23: const usb_device_type t = keyboard_config->type; ld hl, (_keyboard_config) ld a, (hl) and 0x0f -;source-doc/keyboard/kyb-init.c:24: if (t == USB_IS_KEYBOARD) { +;source-doc/keyboard/kyb-init.c:25: if (t == USB_IS_KEYBOARD) { sub 0x04 jr NZ,l_keyboard_init_00106 -;source-doc/keyboard/kyb-init.c:25: print_string("\r\nUSB: KEYBOARD @ $"); +;source-doc/keyboard/kyb-init.c:26: print_string("\r\nUSB: KEYBOARD @ $"); push bc ld hl,kyb_init_str_0 call _print_string pop bc -;source-doc/keyboard/kyb-init.c:26: print_uint16(index); +;source-doc/keyboard/kyb-init.c:27: print_uint16(index); ld h,0x00 ld l, c call _print_uint16 -;source-doc/keyboard/kyb-init.c:27: print_string(" $"); +;source-doc/keyboard/kyb-init.c:28: print_string(" $"); ld hl,kyb_init_str_1 call _print_string -;source-doc/keyboard/kyb-init.c:29: hid_set_protocol(keyboard_config, 1); +;source-doc/keyboard/kyb-init.c:30: hid_set_protocol(keyboard_config, 1); ld a,0x01 push af inc sp ld hl, (_keyboard_config) call _hid_set_protocol -;source-doc/keyboard/kyb-init.c:30: hid_set_idle(keyboard_config, 0x80); +;source-doc/keyboard/kyb-init.c:31: hid_set_idle(keyboard_config, 0x80); ld a,0x80 push af inc sp ld hl, (_keyboard_config) call _hid_set_idle -;source-doc/keyboard/kyb-init.c:31: return; +;source-doc/keyboard/kyb-init.c:32: return; jr l_keyboard_init_00108 l_keyboard_init_00106: -;source-doc/keyboard/kyb-init.c:33: } while (++index != MAX_NUMBER_OF_DEVICES + 1); +;source-doc/keyboard/kyb-init.c:34: } while (++index != MAX_NUMBER_OF_DEVICES + 1); inc b ld a,b ld c,b sub 0x07 jr NZ,l_keyboard_init_00105 l_keyboard_init_00107: -;source-doc/keyboard/kyb-init.c:35: print_string("\r\nUSB: KEYBOARD: NOT FOUND$"); +;source-doc/keyboard/kyb-init.c:36: print_string("\r\nUSB: KEYBOARD: NOT FOUND$"); ld hl,kyb_init_str_2 jp _print_string l_keyboard_init_00108: -;source-doc/keyboard/kyb-init.c:36: } +;source-doc/keyboard/kyb-init.c:37: } ret kyb_init_str_0: DEFB 0x0d @@ -147,7 +147,7 @@ kyb_init_str_2: DEFB 0x0a DEFM "USB: KEYBOARD: NOT FOUND$" DEFB 0x00 -;source-doc/keyboard/kyb-init.c:49: +;source-doc/keyboard/kyb-init.c:50: ; --------------------------------- ; Function keyboard_buf_put ; --------------------------------- @@ -155,42 +155,42 @@ _keyboard_buf_put: push ix ld ix,0 add ix,sp -;source-doc/keyboard/kyb-init.c:50: void keyboard_buf_put(const uint8_t modifier_keys, const uint8_t key_code) { +;source-doc/keyboard/kyb-init.c:51: void keyboard_buf_put(const uint8_t modifier_keys, const uint8_t key_code) { ld a,(ix+5) sub 0x80 jr NC,l_keyboard_buf_put_00112 ld a,(ix+5) or a -;source-doc/keyboard/kyb-init.c:51: if (key_code >= 0x80 || key_code == 0) -;source-doc/keyboard/kyb-init.c:54: // if already reported, just skip it +;source-doc/keyboard/kyb-init.c:52: if (key_code >= 0x80 || key_code == 0) +;source-doc/keyboard/kyb-init.c:55: // if already reported, just skip it jr Z,l_keyboard_buf_put_00112 ld c,0x00 l_keyboard_buf_put_00110: ld a, c sub 0x06 jr NC,l_keyboard_buf_put_00106 -;source-doc/keyboard/kyb-init.c:55: for (uint8_t i = 0; i < 6; i++) +;source-doc/keyboard/kyb-init.c:56: for (uint8_t i = 0; i < 6; i++) ld b,0x00 ld hl,_previous_keyCodes add hl, bc ld a,(ix+5) sub (hl) -;source-doc/keyboard/kyb-init.c:56: if (previous_keyCodes[i] == key_code) +;source-doc/keyboard/kyb-init.c:57: if (previous_keyCodes[i] == key_code) jr Z,l_keyboard_buf_put_00112 -;source-doc/keyboard/kyb-init.c:54: // if already reported, just skip it +;source-doc/keyboard/kyb-init.c:55: // if already reported, just skip it inc c jr l_keyboard_buf_put_00110 l_keyboard_buf_put_00106: -;source-doc/keyboard/kyb-init.c:58: +;source-doc/keyboard/kyb-init.c:59: ld a,(_write_index) inc a and 0x07 ld c, a -;source-doc/keyboard/kyb-init.c:59: uint8_t next_write_index = (write_index + 1) & KEYBOARD_BUFFER_SIZE_MASK; +;source-doc/keyboard/kyb-init.c:60: uint8_t next_write_index = (write_index + 1) & KEYBOARD_BUFFER_SIZE_MASK; ld a,(_read_index) sub c jr Z,l_keyboard_buf_put_00112 -;source-doc/keyboard/kyb-init.c:60: if (next_write_index != read_index) { // Check if buffer is not full +;source-doc/keyboard/kyb-init.c:61: if (next_write_index != read_index) { // Check if buffer is not full ld de,_buffer+0 ld hl,(_write_index) ld h,0x00 @@ -198,7 +198,7 @@ l_keyboard_buf_put_00106: add hl, de ld a,(ix+4) ld (hl), a -;source-doc/keyboard/kyb-init.c:61: buffer[write_index].modifier_keys = modifier_keys; +;source-doc/keyboard/kyb-init.c:62: buffer[write_index].modifier_keys = modifier_keys; ld hl,(_write_index) ld h,0x00 add hl, hl @@ -207,30 +207,30 @@ l_keyboard_buf_put_00106: inc de ld a,(ix+5) ld (de), a -;source-doc/keyboard/kyb-init.c:62: buffer[write_index].key_code = key_code; +;source-doc/keyboard/kyb-init.c:63: buffer[write_index].key_code = key_code; ld hl,_write_index ld (hl), c l_keyboard_buf_put_00112: -;source-doc/keyboard/kyb-init.c:64: } +;source-doc/keyboard/kyb-init.c:65: } pop ix ret -;source-doc/keyboard/kyb-init.c:66: +;source-doc/keyboard/kyb-init.c:67: ; --------------------------------- ; Function keyboard_buf_size ; --------------------------------- _keyboard_buf_size: -;source-doc/keyboard/kyb-init.c:67: uint8_t keyboard_buf_size() __sdcccall(1) { +;source-doc/keyboard/kyb-init.c:68: uint8_t keyboard_buf_size() __sdcccall(1) { ld a,(_write_index) ld hl,_read_index sub (hl) jr C,l_keyboard_buf_size_00102 -;source-doc/keyboard/kyb-init.c:68: if (write_index >= read_index) +;source-doc/keyboard/kyb-init.c:69: if (write_index >= read_index) ld a,(_write_index) ld hl,_read_index sub (hl) jr l_keyboard_buf_size_00103 l_keyboard_buf_size_00102: -;source-doc/keyboard/kyb-init.c:70: +;source-doc/keyboard/kyb-init.c:71: ld hl,_read_index ld c, (hl) ld a,0x08 @@ -239,9 +239,9 @@ l_keyboard_buf_size_00102: ld c, (hl) add a, c l_keyboard_buf_size_00103: -;source-doc/keyboard/kyb-init.c:71: return KEYBOARD_BUFFER_SIZE - read_index + write_index; +;source-doc/keyboard/kyb-init.c:72: return KEYBOARD_BUFFER_SIZE - read_index + write_index; ret -;source-doc/keyboard/kyb-init.c:73: +;source-doc/keyboard/kyb-init.c:74: ; --------------------------------- ; Function keyboard_buf_get_next ; --------------------------------- @@ -251,41 +251,54 @@ _keyboard_buf_get_next: add ix,sp push af push af -;source-doc/keyboard/kyb-init.c:74: uint32_t keyboard_buf_get_next() { +;source-doc/keyboard/kyb-init.c:75: uint32_t keyboard_buf_get_next() { ld a,(_write_index) ld hl,_read_index sub (hl) jr NZ,l_keyboard_buf_get_next_00102 -;source-doc/keyboard/kyb-init.c:75: if (write_index == read_index) // Check if buffer is empty +;source-doc/keyboard/kyb-init.c:76: if (write_index == read_index) // Check if buffer is empty ld hl,0xff00 ld e, h ld d, h - jr l_keyboard_buf_get_next_00103 + jr l_keyboard_buf_get_next_00105 l_keyboard_buf_get_next_00102: -;source-doc/keyboard/kyb-init.c:77: +;source-doc/keyboard/kyb-init.c:78: ld bc,_buffer+0 ld hl,(_read_index) ld h,0x00 add hl, hl add hl, bc ld b, (hl) -;source-doc/keyboard/kyb-init.c:78: const uint8_t modifier_key = buffer[read_index].modifier_keys; +;source-doc/keyboard/kyb-init.c:79: const uint8_t modifier_key = buffer[read_index].modifier_keys; inc hl ld c, (hl) -;source-doc/keyboard/kyb-init.c:79: const uint8_t key_code = buffer[read_index].key_code; +;source-doc/keyboard/kyb-init.c:80: const uint8_t key_code = buffer[read_index].key_code; ld hl,_read_index ld a, (hl) inc a and 0x07 ld (hl), a -;source-doc/keyboard/kyb-init.c:80: read_index = (read_index + 1) & KEYBOARD_BUFFER_SIZE_MASK; +;source-doc/keyboard/kyb-init.c:82: + ld a, c + sub 0x39 + jr NZ,l_keyboard_buf_get_next_00104 +;source-doc/keyboard/kyb-init.c:83: if (key_code == KEY_CODE_CAPS_LOCK) { + ld hl,_caps_lock_engaged + ld a, (hl) + xor 0x01 + ld (hl), a +;source-doc/keyboard/kyb-init.c:84: caps_lock_engaged = !caps_lock_engaged; + call _keyboard_buf_get_next + jr l_keyboard_buf_get_next_00105 +l_keyboard_buf_get_next_00104: +;source-doc/keyboard/kyb-init.c:87: push bc ld l, c ld a, b call _scancode_to_char ld e, a pop bc -;source-doc/keyboard/kyb-init.c:82: /* D = modifier, e-> char, H = 0, L=>code */ +;source-doc/keyboard/kyb-init.c:89: /* D = modifier, e-> char, H = 0, L=>code */ xor a ld (ix-1),b xor a @@ -301,34 +314,34 @@ l_keyboard_buf_get_next_00102: ld (ix-1),a pop hl push hl -l_keyboard_buf_get_next_00103: -;source-doc/keyboard/kyb-init.c:83: return (uint32_t)modifier_key << 24 | (uint32_t)c << 16 | key_code; +l_keyboard_buf_get_next_00105: +;source-doc/keyboard/kyb-init.c:90: return (uint32_t)modifier_key << 24 | (uint32_t)c << 16 | key_code; ld sp, ix pop ix ret -;source-doc/keyboard/kyb-init.c:85: +;source-doc/keyboard/kyb-init.c:92: ; --------------------------------- ; Function keyboard_buf_flush ; --------------------------------- _keyboard_buf_flush: -;source-doc/keyboard/kyb-init.c:86: void keyboard_buf_flush() { +;source-doc/keyboard/kyb-init.c:93: void keyboard_buf_flush() { ld hl,_write_index ld (hl),0x00 -;source-doc/keyboard/kyb-init.c:87: write_index = 0; +;source-doc/keyboard/kyb-init.c:94: write_index = 0; ld hl,_read_index ld (hl),0x00 -;source-doc/keyboard/kyb-init.c:88: read_index = 0; +;source-doc/keyboard/kyb-init.c:95: read_index = 0; ret -;source-doc/keyboard/kyb-init.c:94: +;source-doc/keyboard/kyb-init.c:101: ; --------------------------------- ; Function keyboard_tick ; --------------------------------- _keyboard_tick: -;source-doc/keyboard/kyb-init.c:95: void keyboard_tick(void) { +;source-doc/keyboard/kyb-init.c:102: void keyboard_tick(void) { ld hl,_in_critical_usb_section ld a, (hl) or a -;source-doc/keyboard/kyb-init.c:96: if (is_in_critical_section()) +;source-doc/keyboard/kyb-init.c:103: if (is_in_critical_section()) jr NZ,l_keyboard_tick_00111 ;././source-doc/base-drv//ch376.h:110: #endif ld l,0x0b @@ -341,7 +354,7 @@ _keyboard_tick: ld a,0x1f ld bc,_CH376_DATA_PORT out (c),a -;source-doc/keyboard/kyb-init.c:99: ch_configure_nak_retry_disable(); +;source-doc/keyboard/kyb-init.c:106: ch_configure_nak_retry_disable(); ld bc,_report+0 ld hl, (_keyboard_config) ld a,0x08 @@ -366,10 +379,10 @@ _keyboard_tick: ld a,0xdf ld bc,_CH376_DATA_PORT out (c),a -;source-doc/keyboard/kyb-init.c:101: ch_configure_nak_retry_3s(); +;source-doc/keyboard/kyb-init.c:108: ch_configure_nak_retry_3s(); ld hl,_result ld a, (hl) -;source-doc/keyboard/kyb-init.c:102: if (result == 0) +;source-doc/keyboard/kyb-init.c:109: if (result == 0) or a jr NZ,l_keyboard_tick_00111 ld c,a @@ -377,7 +390,7 @@ l_keyboard_tick_00109: ld a, c sub 0x06 ret NC -;source-doc/keyboard/kyb-init.c:103: for (uint8_t i = 0; i < 6; i++) { +;source-doc/keyboard/kyb-init.c:110: for (uint8_t i = 0; i < 6; i++) { ld a,+((_report+2) & 0xFF) add a, c ld e, a @@ -396,17 +409,17 @@ l_keyboard_tick_00109: pop af pop de pop bc -;source-doc/keyboard/kyb-init.c:104: keyboard_buf_put(report.bModifierKeys, report.keyCode[i]); +;source-doc/keyboard/kyb-init.c:111: keyboard_buf_put(report.bModifierKeys, report.keyCode[i]); ld b,0x00 ld hl,_previous_keyCodes add hl, bc ld a, (de) ld (hl), a -;source-doc/keyboard/kyb-init.c:102: if (result == 0) +;source-doc/keyboard/kyb-init.c:109: if (result == 0) inc c jr l_keyboard_tick_00109 l_keyboard_tick_00111: -;source-doc/keyboard/kyb-init.c:106: } +;source-doc/keyboard/kyb-init.c:113: } ret _keyboard_config: DEFW +0x0000 diff --git a/Source/HBIOS/ch376-native/source-doc/keyboard/class_hid_keyboard.c b/Source/HBIOS/ch376-native/source-doc/keyboard/class_hid_keyboard.c index 6db81605..7522a3c1 100644 --- a/Source/HBIOS/ch376-native/source-doc/keyboard/class_hid_keyboard.c +++ b/Source/HBIOS/ch376-native/source-doc/keyboard/class_hid_keyboard.c @@ -2,6 +2,8 @@ #define ESC 0x1B +bool caps_lock_engaged = true; + /** * scan codes sourced from https://deskthority.net/wiki/Scancode * @@ -241,6 +243,8 @@ char scancodes_table[128] = { ',', '.', '/', + + /* 0x39 */ 0x00 /*CAPSLOCK*/, 0x00 /* F1 */, 0x00 /* F2 */, @@ -332,12 +336,25 @@ char scancodes_table[128] = { 0x00 /* MUTE */, }; +char char_with_caps_lock(const char c) __sdcccall(1) { + if (!caps_lock_engaged) + return c; + + if (c >= 'A' && c <= 'Z') + return c - 'A' + 'a'; + + if (c >= 'a' && c <= 'z') + return c - 'a' + 'A'; + + return c; +} + char scancode_to_char(const uint8_t modifier_keys, const uint8_t code) __sdcccall(1) { if (code >= 0x80) return 0; if (modifier_keys & (KEY_MOD_LSHIFT | KEY_MOD_RSHIFT)) - return scancodes_shift_table[code]; + return char_with_caps_lock(scancodes_shift_table[code]); - return scancodes_table[code]; + return char_with_caps_lock(scancodes_table[code]); } diff --git a/Source/HBIOS/ch376-native/source-doc/keyboard/class_hid_keyboard.h b/Source/HBIOS/ch376-native/source-doc/keyboard/class_hid_keyboard.h index 50efed90..8d179f4f 100644 --- a/Source/HBIOS/ch376-native/source-doc/keyboard/class_hid_keyboard.h +++ b/Source/HBIOS/ch376-native/source-doc/keyboard/class_hid_keyboard.h @@ -18,6 +18,8 @@ typedef struct { #define KEY_MOD_RALT 0x40 #define KEY_MOD_RMETA 0x80 +#define KEY_CODE_CAPS_LOCK 0x39 + extern char scancodes_table[128]; extern char scancode_to_char(const uint8_t modifier_keys, const uint8_t code) __sdcccall(1); diff --git a/Source/HBIOS/ch376-native/source-doc/keyboard/kyb-init.c b/Source/HBIOS/ch376-native/source-doc/keyboard/kyb-init.c index 0b599779..e0b1e59a 100644 --- a/Source/HBIOS/ch376-native/source-doc/keyboard/kyb-init.c +++ b/Source/HBIOS/ch376-native/source-doc/keyboard/kyb-init.c @@ -7,6 +7,7 @@ #include static device_config_keyboard *keyboard_config = 0; +extern bool caps_lock_engaged; void keyboard_init(void) { @@ -78,7 +79,13 @@ uint32_t keyboard_buf_get_next() { const uint8_t modifier_key = buffer[read_index].modifier_keys; const uint8_t key_code = buffer[read_index].key_code; read_index = (read_index + 1) & KEYBOARD_BUFFER_SIZE_MASK; - const unsigned char c = scancode_to_char(modifier_key, key_code); + + if (key_code == KEY_CODE_CAPS_LOCK) { + caps_lock_engaged = !caps_lock_engaged; + return keyboard_buf_get_next(); + } + + const unsigned char c = scancode_to_char(modifier_key, key_code); /* D = modifier, e-> char, H = 0, L=>code */ return (uint32_t)modifier_key << 24 | (uint32_t)c << 16 | key_code; }