Skip to content

Commit e13dc5e

Browse files
committed
feat: map SDL scancodes rather than keycodes
This way, the user's keyboard layout doesn't affect how actual keys are mapped inside the emulator.
1 parent 36cd767 commit e13dc5e

File tree

1 file changed

+109
-108
lines changed

1 file changed

+109
-108
lines changed

src/keyboard.c

Lines changed: 109 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "video.h"
66

77
#include <SDL2/SDL.h>
8+
#include <SDL2/SDL_scancode.h>
89
#include <stdint.h>
910
#include <string.h>
1011

@@ -17,10 +18,10 @@ typedef enum ceda_associator_type_t {
1718
CEDA_ASSOCIATOR_FUNC,
1819
} ceda_associator_type_t;
1920

20-
typedef void (*ceda_associator_func_t)(SDL_Keycode);
21+
typedef void (*ceda_associator_func_t)(SDL_Scancode);
2122

2223
typedef struct ceda_associator_t {
23-
SDL_Keycode sdl;
24+
SDL_Scancode sdl;
2425
ceda_associator_type_t type;
2526
void *ptr;
2627
} ceda_associator_t;
@@ -43,19 +44,19 @@ static uint8_t modifiers = KEYBOARD_MODIFIERS_DEFAULT;
4344

4445
static void keyboard_toggle_modifier(SDL_Keycode code) {
4546
switch (code) {
46-
case SDLK_LSHIFT:
47-
case SDLK_RSHIFT:
47+
case SDL_SCANCODE_LSHIFT:
48+
case SDL_SCANCODE_RSHIFT:
4849
modifiers ^= KEYBOARD_MODIFIER_SHIFT;
4950
break;
50-
case SDLK_CAPSLOCK:
51+
case SDL_SCANCODE_CAPSLOCK:
5152
modifiers ^= KEYBOARD_MODIFIER_CAPS_LOCK;
5253
break;
53-
case SDLK_LALT:
54-
case SDLK_RALT:
54+
case SDL_SCANCODE_LALT:
55+
case SDL_SCANCODE_RALT:
5556
modifiers ^= KEYBOARD_MODIFIER_ALT;
5657
break;
57-
case SDLK_LCTRL:
58-
case SDLK_RCTRL:
58+
case SDL_SCANCODE_LCTRL:
59+
case SDL_SCANCODE_RCTRL:
5960
modifiers ^= KEYBOARD_MODIFIER_CTRL;
6061
break;
6162
default:
@@ -65,120 +66,120 @@ static void keyboard_toggle_modifier(SDL_Keycode code) {
6566

6667
static const ceda_associator_t associators[] = {
6768
// row 0
68-
{SDLK_INSERT, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x4D}},
69-
{SDLK_F1, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x4E}},
70-
{SDLK_F2, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x4F}},
71-
{SDLK_F3, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x50}},
72-
{SDLK_F4, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x51}},
73-
{SDLK_F5, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x52}},
74-
{SDLK_F6, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x53}},
75-
{SDLK_F7, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x54}},
76-
{SDLK_F8, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x55}},
77-
{SDLK_F9, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x56}},
78-
{SDLK_F10, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x57}},
79-
{SDLK_F11, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x58}},
80-
{SDLK_F12, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x59}},
81-
{SDLK_F13, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x5A}},
82-
{SDLK_F14, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x5B}},
83-
{SDLK_F15, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x5C}},
69+
{SDL_SCANCODE_INSERT, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x4D}},
70+
{SDL_SCANCODE_F1, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x4E}},
71+
{SDL_SCANCODE_F2, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x4F}},
72+
{SDL_SCANCODE_F3, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x50}},
73+
{SDL_SCANCODE_F4, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x51}},
74+
{SDL_SCANCODE_F5, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x52}},
75+
{SDL_SCANCODE_F6, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x53}},
76+
{SDL_SCANCODE_F7, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x54}},
77+
{SDL_SCANCODE_F8, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x55}},
78+
{SDL_SCANCODE_F9, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x56}},
79+
{SDL_SCANCODE_F10, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x57}},
80+
{SDL_SCANCODE_F11, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x58}},
81+
{SDL_SCANCODE_F12, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x59}},
82+
{SDL_SCANCODE_F13, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x5A}},
83+
{SDL_SCANCODE_F14, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x5B}},
84+
{SDL_SCANCODE_F15, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x5C}},
8485

8586
// row 1
86-
{SDLK_ESCAPE, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x01}},
87-
{SDLK_LESS, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x02}},
88-
{SDLK_1, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x03}},
89-
{SDLK_2, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x04}},
90-
{SDLK_3, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x05}},
91-
{SDLK_4, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x06}},
92-
{SDLK_5, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x07}},
93-
{SDLK_6, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x08}},
94-
{SDLK_7, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x09}},
95-
{SDLK_8, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x0a}},
96-
{SDLK_9, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x0b}},
97-
{SDLK_0, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x0C}},
98-
{SDLK_HASH, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x0D}},
99-
{SDLK_AT, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x0E}},
100-
{SDLK_DELETE, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x0F}},
101-
{SDLK_CARET, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x10}},
87+
{SDL_SCANCODE_ESCAPE, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x01}},
88+
{SDL_SCANCODE_GRAVE, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x02}},
89+
{SDL_SCANCODE_1, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x03}},
90+
{SDL_SCANCODE_2, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x04}},
91+
{SDL_SCANCODE_3, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x05}},
92+
{SDL_SCANCODE_4, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x06}},
93+
{SDL_SCANCODE_5, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x07}},
94+
{SDL_SCANCODE_6, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x08}},
95+
{SDL_SCANCODE_7, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x09}},
96+
{SDL_SCANCODE_8, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x0a}},
97+
{SDL_SCANCODE_9, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x0b}},
98+
{SDL_SCANCODE_0, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x0C}},
99+
{SDL_SCANCODE_MINUS, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x0D}},
100+
{SDL_SCANCODE_EQUALS, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x0E}},
101+
{SDL_SCANCODE_DELETE, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x0F}},
102+
// {} ex CARET (0x10)
102103

103104
// row 2
104105
// {} BREAK (0x11)
105-
{SDLK_TAB, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x12}},
106-
{SDLK_a, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x13}},
107-
{SDLK_z, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x14}},
108-
{SDLK_e, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x15}},
109-
{SDLK_r, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x16}},
110-
{SDLK_t, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x17}},
111-
{SDLK_y, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x18}},
112-
{SDLK_u, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x19}},
113-
{SDLK_i, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x1A}},
114-
{SDLK_o, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x1B}},
115-
{SDLK_p, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x1C}},
116-
{SDLK_GREATER, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x1D}},
117-
// {} umlaut / dieresis (0x1E)
118-
{SDLK_KP_RIGHTBRACE, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x1F}},
106+
{SDL_SCANCODE_TAB, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x12}},
107+
{SDL_SCANCODE_Q, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x13}},
108+
{SDL_SCANCODE_W, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x14}},
109+
{SDL_SCANCODE_E, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x15}},
110+
{SDL_SCANCODE_R, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x16}},
111+
{SDL_SCANCODE_T, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x17}},
112+
{SDL_SCANCODE_Y, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x18}},
113+
{SDL_SCANCODE_U, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x19}},
114+
{SDL_SCANCODE_I, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x1A}},
115+
{SDL_SCANCODE_O, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x1B}},
116+
{SDL_SCANCODE_P, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x1C}},
117+
{SDL_SCANCODE_LEFTBRACKET, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x1D}},
118+
{SDL_SCANCODE_RIGHTBRACKET, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x1E}},
119+
{SDL_SCANCODE_BACKSLASH, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x1F}},
119120

120121
// row 3
121-
{SDLK_CAPSLOCK, CEDA_ASSOCIATOR_FUNC, keyboard_toggle_modifier},
122-
// {} SHIFT LOCK
123-
{SDLK_q, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x20}},
124-
{SDLK_s, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x21}},
125-
{SDLK_d, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x22}},
126-
{SDLK_f, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x23}},
127-
{SDLK_g, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x24}},
128-
{SDLK_h, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x25}},
129-
{SDLK_j, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x26}},
130-
{SDLK_k, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x27}},
131-
{SDLK_l, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x28}},
132-
{SDLK_m, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x29}},
133-
{SDLK_PERCENT, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x2A}},
134-
{SDLK_RETURN, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x2B}},
135-
{SDLK_KP_LEFTBRACE, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x2C}},
122+
{SDL_SCANCODE_CAPSLOCK, CEDA_ASSOCIATOR_FUNC, keyboard_toggle_modifier},
123+
// {} SHIFT LOCK (0x65)
124+
{SDL_SCANCODE_A, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x20}},
125+
{SDL_SCANCODE_S, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x21}},
126+
{SDL_SCANCODE_D, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x22}},
127+
{SDL_SCANCODE_F, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x23}},
128+
{SDL_SCANCODE_G, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x24}},
129+
{SDL_SCANCODE_H, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x25}},
130+
{SDL_SCANCODE_J, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x26}},
131+
{SDL_SCANCODE_K, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x27}},
132+
{SDL_SCANCODE_L, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x28}},
133+
{SDL_SCANCODE_SEMICOLON, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x29}},
134+
{SDL_SCANCODE_APOSTROPHE, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x2A}},
135+
{SDL_SCANCODE_RETURN, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x2B}},
136+
// {} ex LEFT BRACKET (0x2C)
136137

137138
// row 4
138139
// {} CAN (0x2D)
139-
{SDLK_LSHIFT, CEDA_ASSOCIATOR_FUNC, keyboard_toggle_modifier},
140-
{SDLK_w, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x2E}},
141-
{SDLK_x, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x2F}},
142-
{SDLK_c, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x30}},
143-
{SDLK_v, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x31}},
144-
{SDLK_b, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x32}},
145-
{SDLK_n, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x33}},
146-
{SDLK_SLASH, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x34}},
147-
{SDLK_PERIOD, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x35}},
148-
{SDLK_MINUS, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x36}},
149-
{SDLK_PLUS, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x37}},
150-
{SDLK_RSHIFT, CEDA_ASSOCIATOR_FUNC, keyboard_toggle_modifier},
140+
{SDL_SCANCODE_LSHIFT, CEDA_ASSOCIATOR_FUNC, keyboard_toggle_modifier},
141+
{SDL_SCANCODE_Z, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x2E}},
142+
{SDL_SCANCODE_X, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x2F}},
143+
{SDL_SCANCODE_C, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x30}},
144+
{SDL_SCANCODE_V, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x31}},
145+
{SDL_SCANCODE_B, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x32}},
146+
{SDL_SCANCODE_N, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x33}},
147+
{SDL_SCANCODE_M, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x34}},
148+
{SDL_SCANCODE_COMMA, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x35}},
149+
{SDL_SCANCODE_PERIOD, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x36}},
150+
{SDL_SCANCODE_SLASH, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x37}},
151+
{SDL_SCANCODE_RSHIFT, CEDA_ASSOCIATOR_FUNC, keyboard_toggle_modifier},
151152
// {} LINE FEED (0x38)
152153

153154
// row 5
154-
{SDLK_LCTRL, CEDA_ASSOCIATOR_FUNC, keyboard_toggle_modifier},
155-
{SDLK_SPACE, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x39}},
156-
{SDLK_RALT, CEDA_ASSOCIATOR_FUNC, keyboard_toggle_modifier},
155+
{SDL_SCANCODE_LCTRL, CEDA_ASSOCIATOR_FUNC, keyboard_toggle_modifier},
156+
{SDL_SCANCODE_SPACE, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x39}},
157+
{SDL_SCANCODE_RALT, CEDA_ASSOCIATOR_FUNC, keyboard_toggle_modifier},
157158

158159
// useful keys on modern IBM keyboards
159-
{SDLK_RCTRL, CEDA_ASSOCIATOR_FUNC, keyboard_toggle_modifier},
160-
{SDLK_LALT, CEDA_ASSOCIATOR_FUNC, keyboard_toggle_modifier},
160+
{SDL_SCANCODE_RCTRL, CEDA_ASSOCIATOR_FUNC, keyboard_toggle_modifier},
161+
{SDL_SCANCODE_LALT, CEDA_ASSOCIATOR_FUNC, keyboard_toggle_modifier},
161162

162163
// number pad
163-
{SDLK_UP, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x3A}},
164-
{SDLK_DOWN, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x3B}},
165-
{SDLK_LEFT, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x3C}},
166-
{SDLK_RIGHT, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x3D}},
167-
{SDLK_KP_7, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x3E}},
168-
{SDLK_KP_8, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x3F}},
169-
{SDLK_KP_9, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x40}},
170-
{SDLK_KP_CLEAR, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x41}},
171-
{SDLK_KP_4, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x42}},
172-
{SDLK_KP_5, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x43}},
173-
{SDLK_KP_6, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x44}},
174-
{SDLK_KP_MINUS, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x45}},
175-
{SDLK_KP_1, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x46}},
176-
{SDLK_KP_2, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x47}},
177-
{SDLK_KP_3, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x48}},
178-
{SDLK_KP_ENTER, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x4C}},
179-
{SDLK_KP_PERIOD, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x49}},
180-
{SDLK_KP_0, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x4A}},
181-
{SDLK_KP_00, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x4B}},
164+
{SDL_SCANCODE_UP, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x3A}},
165+
{SDL_SCANCODE_DOWN, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x3B}},
166+
{SDL_SCANCODE_LEFT, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x3C}},
167+
{SDL_SCANCODE_RIGHT, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x3D}},
168+
{SDL_SCANCODE_KP_7, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x3E}},
169+
{SDL_SCANCODE_KP_8, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x3F}},
170+
{SDL_SCANCODE_KP_9, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x40}},
171+
{SDL_SCANCODE_KP_CLEAR, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x41}},
172+
{SDL_SCANCODE_KP_4, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x42}},
173+
{SDL_SCANCODE_KP_5, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x43}},
174+
{SDL_SCANCODE_KP_6, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x44}},
175+
{SDL_SCANCODE_KP_MINUS, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x45}},
176+
{SDL_SCANCODE_KP_1, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x46}},
177+
{SDL_SCANCODE_KP_2, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x47}},
178+
{SDL_SCANCODE_KP_3, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x48}},
179+
{SDL_SCANCODE_KP_ENTER, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x4C}},
180+
{SDL_SCANCODE_KP_PERIOD, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x49}},
181+
{SDL_SCANCODE_KP_0, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x4A}},
182+
{SDL_SCANCODE_KP_00, CEDA_ASSOCIATOR_KEY, &(uint8_t){0x4B}},
182183
};
183184

184185
void keyboard_init(void) {
@@ -192,12 +193,12 @@ void keyboard_init(void) {
192193
}
193194

194195
void keyboard_handleEvent(const SDL_KeyboardEvent *event) {
195-
LOG_DEBUG("keycode = %" PRId32 ", repeat = %d\n", event->keysym.sym,
196+
LOG_DEBUG("keycode = %" PRId32 ", repeat = %d\n", event->keysym.scancode,
196197
(int)event->repeat);
197198

198199
for (size_t i = 0; i < ARRAY_SIZE(associators); ++i) {
199200
const ceda_associator_t *const associator = &associators[i];
200-
if (associator->sdl != event->keysym.sym)
201+
if (associator->sdl != event->keysym.scancode)
201202
continue;
202203

203204
switch (associator->type) {

0 commit comments

Comments
 (0)