24#ifndef __DC_MAPLE_KEYBOARD_H
25#define __DC_MAPLE_KEYBOARD_H
75#define KBD_MOD_LCTRL BIT(0)
76#define KBD_MOD_LSHIFT BIT(1)
77#define KBD_MOD_LALT BIT(2)
78#define KBD_MOD_S1 BIT(3)
79#define KBD_MOD_RCTRL BIT(4)
80#define KBD_MOD_RSHIFT BIT(5)
81#define KBD_MOD_RALT BIT(6)
82#define KBD_MOD_S2 BIT(7)
86#define KBD_MOD_CTRL (KBD_MOD_LCTRL | KBD_MOD_RCTRL)
88#define KBD_MOD_SHIFT (KBD_MOD_LSHIFT | KBD_MOD_RSHIFT)
90#define KBD_MOD_ALT (KBD_MOD_LALT | KBD_MOD_RALT)
99typedef union kbd_mods {
139#define KBD_LED_NUMLOCK BIT(0)
140#define KBD_LED_CAPSLOCK BIT(1)
141#define KBD_LED_SCRLOCK BIT(2)
142#define KBD_LED_UNKNOWN1 BIT(3)
143#define KBD_LED_UNKNOWN2 BIT(4)
144#define KBD_LED_KANA BIT(5)
145#define KBD_LED_POWER BIT(6)
146#define KBD_LED_SHIFT BIT(7)
155typedef union kbd_leds {
176typedef enum kbd_region {
346#define KEY_STATE_IS_DOWN BIT(0)
347#define KEY_STATE_WAS_DOWN BIT(1)
349#define KEY_STATE_MASK (KEY_STATE_IS_DOWN | KEY_STATE_WAS_DOWN)
357#define KEY_STATE_PACK(is_down, was_down) \
358 (((!!(is_down))? KEY_STATE_IS_DOWN : 0) | \
359 ((!!(was_down))? KEY_STATE_WAS_DOWN : 0))
398typedef union key_state {
415#define KBD_MAX_PRESSED_KEYS 6
424#define KBD_MAX_KEYS 256
429typedef void kbd_keymap_t __depr(
"Please open an issue, there should be no reason for external code to have used this.");
450typedef struct kbd_state {
456 uint8_t matrix[
KBD_MAX_KEYS] __depr(
"Please see key_state_t and use key_states to access this.");
462 int shift_keys __depr(
"Please see kbd_mods_t and use last_modifiers.raw to access this.");
653#define KBD_QUEUE_SIZE 16
662#define KBD_QUEUE_END -1
763void kbd_shutdown(
void);
void kbd_get_event_handler(kbd_event_handler_t *callback, void **user_data)
Returns the Registered Event Handler.
void(* kbd_event_handler_t)(maple_device_t *dev, kbd_key_t key, key_state_t state, kbd_mods_t mods, kbd_leds_t leds, void *ud)
Keyboard Event Handler Callback.
Definition keyboard.h:578
void kbd_set_event_handler(kbd_event_handler_t callback, void *user_data)
Registers an Event Handler.
kbd_state_t * kbd_get_state(maple_device_t *device)
Retrieves the keyboard state from a maple device.
void kbd_set_repeat_timing(uint16_t start, uint16_t interval)
Configures held key auto-repeat intervals.
int kbd_queue_pop(maple_device_t *dev, bool xlat)
Pop a key off a specific keyboard's queue.
int kbd_get_key(void) __deprecated
Pop a key off the global keyboard queue.
void kbd_set_queue(int active) __deprecated
Activate or deactivate global key queueing.
kbd_region_t
Region Codes for the Dreamcast keyboard.
Definition keyboard.h:176
static const int MAX_KBD_KEYS("Please use KBD_MAX_KEYS.")
#define KBD_MAX_PRESSED_KEYS
Maximum number of keys the DC can read simultaneously.
Definition keyboard.h:415
char kbd_key_to_ascii(kbd_key_t key, kbd_region_t region, kbd_mods_t mods, kbd_leds_t leds)
Converts a kbd_key_t value into its corresponding ASCII value.
enum __packed kbd_key
Raw Keyboard Key Identifiers.
Definition keyboard.h:195
#define KBD_MAX_KEYS
Maximum number of keys a DC keyboard can have.
Definition keyboard.h:424
enum __packed kbd_key kbd_key_t
Raw Keyboard Key Identifiers.
static const int MAX_PRESSED_KEYS("Please use KBD_MAX_PRESSED_KEYS.")
void kbd_keymap_t("Please open an issue, there should be no reason for external code to have used this.")
Definition keyboard.h:429
@ KBD_REGION_FR
French keyboard.
Definition keyboard.h:181
@ KBD_REGION_US
US keyboard.
Definition keyboard.h:178
@ KBD_REGION_IT
Italian keyboard (not supported yet)
Definition keyboard.h:182
@ KBD_REGION_UK
UK keyboard.
Definition keyboard.h:179
@ KBD_REGION_ES
Spanish keyboard.
Definition keyboard.h:183
@ KBD_REGION_DE
German keyboard.
Definition keyboard.h:180
@ KBD_REGION_JP
Japanese keyboard.
Definition keyboard.h:177
static const uint8_t KEY_STATE_PRESSED("Please see key_state_value_t.")
enum __packed key_state_value key_state_value_t
Valid values for key_state_t::value.
static const uint8_t KEY_STATE_NONE("Please use KEY_STATE_HELD_UP.")
#define KEY_STATE_PACK(is_down, was_down)
Creates a packed key_state_t.
Definition keyboard.h:357
static const uint8_t KEY_STATE_WAS_PRESSED("Please use KEY_STATE_CHANGED_UP.")
enum __packed key_state_value
Valid values for key_state_t::value.
Definition keyboard.h:375
#define __packed
Force a structure, enum, or other type to be packed as small as possible.
Definition cdefs.h:73
#define __deprecated
Mark something as deprecated.
Definition cdefs.h:116
KBD_KEY_R
R key.
Definition keyboard.h:217
KBD_KEY_C
C key.
Definition keyboard.h:202
KBD_KEY_LEFT
Left Arrow key.
Definition keyboard.h:275
KBD_KEY_F9
F9 key.
Definition keyboard.h:261
KBD_KEY_PAD_6
Keypad 6 key.
Definition keyboard.h:289
KBD_KEY_PERIOD
.
Definition keyboard.h:250
KBD_KEY_PLUS
Plus key.
Definition keyboard.h:242
KBD_KEY_F4
F4 key.
Definition keyboard.h:256
KBD_KEY_ERR3
Unknown error.
Definition keyboard.h:199
KBD_KEY_G
G key.
Definition keyboard.h:206
KBD_KEY_2
2 key
Definition keyboard.h:227
KBD_KEY_O
O key.
Definition keyboard.h:214
KBD_KEY_N
N key.
Definition keyboard.h:213
KBD_KEY_QUOTE
" key
Definition keyboard.h:247
KBD_KEY_TAB
Tab key.
Definition keyboard.h:239
KBD_KEY_COMMA
, key
Definition keyboard.h:249
KBD_KEY_DEL
Delete key.
Definition keyboard.h:271
KBD_KEY_PAUSE
Pause key.
Definition keyboard.h:267
KBD_KEY_H
H key.
Definition keyboard.h:207
KEY_STATE_CHANGED_DOWN
Key transitioned from up to pressed this frame.
Definition keyboard.h:379
KBD_KEY_SEMICOLON
; key
Definition keyboard.h:246
KEY_STATE_HELD_DOWN
Key has been held down for at least the last two frames.
Definition keyboard.h:383
KBD_KEY_B
B key.
Definition keyboard.h:201
KEY_STATE_HELD_UP
Key has been in an up state for at least the last two frames.
Definition keyboard.h:377
KBD_KEY_PAD_DIVIDE
Keypad Divide key.
Definition keyboard.h:279
KBD_KEY_8
8 key
Definition keyboard.h:233
KBD_KEY_END
End key.
Definition keyboard.h:272
KBD_KEY_3
3 key
Definition keyboard.h:228
KBD_KEY_0
0 key
Definition keyboard.h:235
KBD_KEY_K
K key.
Definition keyboard.h:210
KBD_KEY_TILDE
~ key
Definition keyboard.h:248
KBD_KEY_F6
F6 key.
Definition keyboard.h:258
KBD_KEY_PAD_1
Keypad 1 key.
Definition keyboard.h:284
KBD_KEY_F10
F10 key.
Definition keyboard.h:262
KBD_KEY_L
L key.
Definition keyboard.h:211
KBD_KEY_ERROR
ERROR_ROLLOVER.
Definition keyboard.h:197
KBD_KEY_I
I key.
Definition keyboard.h:208
KBD_KEY_F12
F12 key.
Definition keyboard.h:264
KBD_KEY_Z
Z key.
Definition keyboard.h:225
KBD_KEY_PAD_9
Keypad 9 key.
Definition keyboard.h:292
KBD_KEY_T
T key.
Definition keyboard.h:219
KBD_KEY_D
D key.
Definition keyboard.h:203
KBD_KEY_PRINT
Print Screen key.
Definition keyboard.h:265
KBD_KEY_PAD_NUMLOCK
Keypad Numlock key.
Definition keyboard.h:278
KBD_KEY_F5
F5 key.
Definition keyboard.h:257
KBD_KEY_SCRLOCK
Scroll Lock key.
Definition keyboard.h:266
KBD_KEY_PAD_MINUS
Keypad Minus key.
Definition keyboard.h:281
KBD_KEY_MINUS
Minus key.
Definition keyboard.h:241
KBD_KEY_ESCAPE
Escape key.
Definition keyboard.h:237
KBD_KEY_PAD_3
Keypad 3 key.
Definition keyboard.h:286
KBD_KEY_BACKSLASH
\ key
Definition keyboard.h:245
KBD_KEY_PGUP
Page Up key.
Definition keyboard.h:270
KBD_KEY_SPACE
Space key.
Definition keyboard.h:240
KBD_KEY_PAD_0
Keypad 0 key.
Definition keyboard.h:293
KEY_STATE_CHANGED_UP
Key transitioned from down to released this frame.
Definition keyboard.h:381
KBD_KEY_F11
F11 key.
Definition keyboard.h:263
KBD_KEY_PAD_5
Keypad 5 key.
Definition keyboard.h:288
KBD_KEY_E
E key.
Definition keyboard.h:204
KBD_KEY_S
S key.
Definition keyboard.h:218
KBD_KEY_PAD_2
Keypad 2 key.
Definition keyboard.h:285
KBD_KEY_6
6 key
Definition keyboard.h:231
KBD_KEY_9
9 key
Definition keyboard.h:234
KBD_KEY_M
M key.
Definition keyboard.h:212
KBD_KEY_RIGHT
Right Arrow key.
Definition keyboard.h:274
KBD_KEY_J
J key.
Definition keyboard.h:209
KBD_KEY_W
W key.
Definition keyboard.h:222
KBD_KEY_PAD_PLUS
Keypad Plus key.
Definition keyboard.h:282
KBD_KEY_PGDOWN
Page Down key.
Definition keyboard.h:273
KBD_KEY_5
5 key
Definition keyboard.h:230
KBD_KEY_NONE
No key.
Definition keyboard.h:196
KBD_KEY_PAD_4
Keypad 4 key.
Definition keyboard.h:287
KBD_KEY_RBRACKET
] key
Definition keyboard.h:244
KBD_KEY_F3
F3 key.
Definition keyboard.h:255
KBD_KEY_F1
F1 key.
Definition keyboard.h:253
KBD_KEY_F
F key.
Definition keyboard.h:205
KBD_KEY_1
1 key
Definition keyboard.h:226
KBD_KEY_PAD_PERIOD
Keypad Period key.
Definition keyboard.h:294
KBD_KEY_A
A key.
Definition keyboard.h:200
KBD_KEY_UP
Up Arrow key.
Definition keyboard.h:277
KBD_KEY_U
U key.
Definition keyboard.h:220
KBD_KEY_PAD_8
Keypad 8 key.
Definition keyboard.h:291
KBD_KEY_4
4 key
Definition keyboard.h:229
KBD_KEY_F2
F2 key.
Definition keyboard.h:254
KBD_KEY_PAD_7
Keypad 7 key.
Definition keyboard.h:290
KBD_KEY_P
P key.
Definition keyboard.h:215
KBD_KEY_HOME
Home key.
Definition keyboard.h:269
KBD_KEY_BACKSPACE
Backspace key.
Definition keyboard.h:238
KBD_KEY_ENTER
Enter key.
Definition keyboard.h:236
KBD_KEY_ERR2
Unknown error.
Definition keyboard.h:198
KBD_KEY_Q
Q key.
Definition keyboard.h:216
KBD_KEY_LBRACKET
[ key
Definition keyboard.h:243
KBD_KEY_DOWN
Down Arrow key.
Definition keyboard.h:276
KBD_KEY_V
V key.
Definition keyboard.h:221
KBD_KEY_7
7 key
Definition keyboard.h:232
KBD_KEY_INSERT
Insert key.
Definition keyboard.h:268
KBD_KEY_PAD_MULTIPLY
Keypad Multiply key.
Definition keyboard.h:280
KBD_KEY_F8
F8 key.
Definition keyboard.h:260
KBD_KEY_Y
Y key.
Definition keyboard.h:224
KBD_KEY_F7
F7 key.
Definition keyboard.h:259
KBD_KEY_X
X key.
Definition keyboard.h:223
KBD_KEY_PAD_ENTER
Keypad Enter key.
Definition keyboard.h:283
KBD_KEY_CAPSLOCK
Caps Lock key.
Definition keyboard.h:252
KBD_KEY_SLASH
Slash key.
Definition keyboard.h:251
Maple Bus driver interface.
Macros to help dealing with register fields.
Keyboard raw condition structure.
Definition keyboard.h:437
kbd_mods_t modifiers
Bitmask of set modifiers.
Definition keyboard.h:438
kbd_leds_t leds
Bitmask of set LEDs.
Definition keyboard.h:439
Keyboard status structure.
Definition keyboard.h:450
kbd_mods_t last_modifiers
Definition keyboard.h:463
kbd_cond_t cond
The latest raw condition of the keyboard.
Definition keyboard.h:452
kbd_region_t region
Keyboard type/region.
Definition keyboard.h:467
One maple device.
Definition maple.h:271
Keyboard LEDs.
Definition keyboard.h:155
uint8_t raw
Packed 8-bit unsigned integer of bitflags.
Definition keyboard.h:167
uint8_t kana
Kana LED.
Definition keyboard.h:163
uint8_t caps_lock
Caps Lock LED.
Definition keyboard.h:159
uint8_t scroll_lock
Scroll Lock LED.
Definition keyboard.h:160
uint8_t power
Power LED.
Definition keyboard.h:164
uint8_t unknown2
Unknown LED 2.
Definition keyboard.h:162
uint8_t num_lock
Num Lock LED.
Definition keyboard.h:158
uint8_t unknown1
Unknown LED 1.
Definition keyboard.h:161
uint8_t shift
Shift LED.
Definition keyboard.h:165
Modifier Keys.
Definition keyboard.h:99
uint8_t rshift
Right Shift key.
Definition keyboard.h:107
uint8_t lctrl
Left Control key.
Definition keyboard.h:102
uint8_t lalt
Left Alternate key.
Definition keyboard.h:104
uint8_t lshift
Left Shift key.
Definition keyboard.h:103
uint8_t s2
S2 key.
Definition keyboard.h:109
uint8_t s1
S1 key.
Definition keyboard.h:105
uint8_t rctrl
Right Control key.
Definition keyboard.h:106
uint8_t ralt
Right Alternate key.
Definition keyboard.h:108
uint8_t raw
Packed 8-bit unsigned integer of bitflags.
Definition keyboard.h:111
Keyboard Key State.
Definition keyboard.h:398
uint8_t raw
Packed 8-bit unsigned integer of bitflags.
Definition keyboard.h:406
bool is_down
Whether down the current frame.
Definition keyboard.h:401
key_state_value_t value
Enum for specific state.
Definition keyboard.h:405
bool was_down
Whether down the previous frame.
Definition keyboard.h:402