VSF Documented
vsf_input_keyboard.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __VSF_INPUT_KEYBOARD_H__
19#define __VSF_INPUT_KEYBOARD_H__
20
21/*============================ INCLUDES ======================================*/
22#include "../vsf_input_cfg.h"
23
24#include "../vsf_input_get_type.h"
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30/*============================ MACROS ========================================*/
31/*============================ MACROFIED FUNCTIONS ===========================*/
32
33#define vsf_input_keyboard_set(__event, __keycode, __is_down, __keymod) \
34 do { \
35 (__event)->id = (((__keycode) << 0) | ((__is_down) << 10) | ((__keymod) << 11));\
36 } while (0)
37
38#define vsf_input_keyboard_get_keymod(__event) \
39 ((uint16_t)(((__event)->id >> 11) & 0xFFF))
40#define vsf_input_keyboard_get_keycode(__event) \
41 ((uint16_t)(((__event)->id >> 0) & 0x3FF))
42#define vsf_input_keyboard_is_down(__event) \
43 (((__event)->id >> 10) & 0x01)
44
45// check if event is keypad/keyboard event
46#define vsf_input_keyboard_is_kpevt(__event) \
47 ( (vsf_input_keyboard_get_keycode(__event) >= VSF_KP_NUMLOCK) \
48 && (vsf_input_keyboard_get_keycode(__event) <= VSF_KP_EQUALS) \
49 && (vsf_input_keyboard_get_keycode(__event) != VSF_KB_APPLICATION) \
50 && (vsf_input_keyboard_get_keycode(__event) != VSF_KB_POWER))
51#define vsf_input_keyboard_is_kbevt(__event) \
52 (!vsf_input_keyboard_is_kpevt(__event))
53
54// refer scancodes to https://kbdlayout.info/kbdusx/scancodes
55// get scancode if pressed, returns length of scancode
56
57#define vsf_input_keyboard_get_scancode_from_keycode(__keycode, __scancode_ptr) \
58 __vsf_input_keyboard_get_scancode((__keycode) & 0xFF, (__scancode_ptr))
59#define vsf_input_keyboard_get_scancode(__event, __scancode_ptr) \
60 __vsf_input_keyboard_get_scancode( \
61 vsf_input_keyboard_get_keycode(__event) & 0xFF, (__scancode_ptr))
62
63/*============================ TYPES =========================================*/
64
65enum {
67};
68
69enum {
71
72 // keycodes from hut1.2 keyboard/keypad page
110 VSF_KB_RETURN = 40, // '\r'
122 VSF_KB_BACKSLASH = 49, // '\'
126 VSF_KB_GRAVE = 53, // '`'
130 VSF_KB_PERIOD = 55, // '.'
131 VSF_KB_SLASH = 56, // '/'
179 VSF_KP_PERIOD = 99, // '.'
211
226
229
231
232 VSF_KB_EXT = 0x0200,
233 // keycodes with SHIFT pressed
255
282};
283
284enum {
302
304 VSF_KM_NUM = 0x100,
306 VSF_KM_CAPS = 0x200,
309 VSF_KM_FN = 0x800,
310
315};
316
317typedef struct vk_keyboard_evt_t {
318 implement(vk_input_evt_t)
320
321/*============================ GLOBAL VARIABLES ==============================*/
322/*============================ LOCAL VARIABLES ===============================*/
323/*============================ PROTOTYPES ====================================*/
324
326
327#ifdef __cplusplus
328}
329#endif
330
331#endif
332/* EOF */
unsigned char uint_fast8_t
Definition stdint.h:23
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_input.h:94
Definition vsf_input_keyboard.h:317
#define VSF_INPUT_USER_TYPE
Definition vsf_input_get_type_1bit.h:103
uint_fast8_t __vsf_input_keyboard_get_scancode(uint8_t keycode, uint8_t scancode[6])
Definition vsf_input_keyboard.c:153
@ VSF_KB_F6
Definition vsf_input_keyboard.h:138
@ VSF_KB_CAPSLOCK
Definition vsf_input_keyboard.h:132
@ VSF_KB_d
Definition vsf_input_keyboard.h:76
@ VSF_KB_LESS
Definition vsf_input_keyboard.h:252
@ VSF_KB_PAGE_UP
Definition vsf_input_keyboard.h:151
@ VSF_KB_O
Definition vsf_input_keyboard.h:270
@ VSF_KB_UNKNOWN
Definition vsf_input_keyboard.h:70
@ VSF_KB_F1
Definition vsf_input_keyboard.h:133
@ VSF_KB_SCROLLLOCK
Definition vsf_input_keyboard.h:147
@ VSF_KP_6
Definition vsf_input_keyboard.h:173
@ VSF_KP_MULTIPLY
Definition vsf_input_keyboard.h:164
@ VSF_KP_PLUS
Definition vsf_input_keyboard.h:166
@ VSF_KP_PERIOD
Definition vsf_input_keyboard.h:179
@ VSF_KB_TAB
Definition vsf_input_keyboard.h:113
@ VSF_KB_SCROLL_LOCK
Definition vsf_input_keyboard.h:146
@ VSF_KB_p
Definition vsf_input_keyboard.h:88
@ VSF_KB_F11
Definition vsf_input_keyboard.h:143
@ VSF_KB_RIGHT_BRACE
Definition vsf_input_keyboard.h:247
@ VSF_KB_F13
Definition vsf_input_keyboard.h:184
@ VSF_KB_MODIFIER_END
Definition vsf_input_keyboard.h:223
@ VSF_KB_HELP
Definition vsf_input_keyboard.h:197
@ VSF_KB_S
Definition vsf_input_keyboard.h:274
@ VSF_KP_4
Definition vsf_input_keyboard.h:171
@ VSF_KB_h
Definition vsf_input_keyboard.h:80
@ VSF_KP_ENTER
Definition vsf_input_keyboard.h:167
@ VSF_KB_SEMICOLON
Definition vsf_input_keyboard.h:123
@ VSF_KB_E
Definition vsf_input_keyboard.h:260
@ VSF_KB_2
Definition vsf_input_keyboard.h:100
@ VSF_KB_y
Definition vsf_input_keyboard.h:97
@ VSF_KB_PERIOD
Definition vsf_input_keyboard.h:130
@ VSF_KB_e
Definition vsf_input_keyboard.h:77
@ VSF_KB_x
Definition vsf_input_keyboard.h:96
@ VSF_KB_MODIFIER_START
Definition vsf_input_keyboard.h:212
@ VSF_KB_COMMA
Definition vsf_input_keyboard.h:128
@ VSF_KB_Y
Definition vsf_input_keyboard.h:280
@ VSF_KB_9
Definition vsf_input_keyboard.h:107
@ VSF_KB_V
Definition vsf_input_keyboard.h:277
@ VSF_KB_CARET
Definition vsf_input_keyboard.h:239
@ VSF_KB_m
Definition vsf_input_keyboard.h:85
@ VSF_KB_l
Definition vsf_input_keyboard.h:84
@ VSF_KB_APPLICATION
Definition vsf_input_keyboard.h:180
@ VSF_KB_F19
Definition vsf_input_keyboard.h:190
@ VSF_KB_LGUI
Definition vsf_input_keyboard.h:216
@ VSF_KB_BACKSPACE
Definition vsf_input_keyboard.h:112
@ VSF_KB_c
Definition vsf_input_keyboard.h:75
@ VSF_KB_7
Definition vsf_input_keyboard.h:105
@ VSF_KB_POUND
Definition vsf_input_keyboard.h:236
@ VSF_KB_k
Definition vsf_input_keyboard.h:83
@ VSF_KB_G
Definition vsf_input_keyboard.h:262
@ VSF_KB_D
Definition vsf_input_keyboard.h:259
@ VSF_KB_F3
Definition vsf_input_keyboard.h:135
@ VSF_KB_F5
Definition vsf_input_keyboard.h:137
@ VSF_KB_b
Definition vsf_input_keyboard.h:74
@ VSF_KB_SPACE
Definition vsf_input_keyboard.h:114
@ VSF_KB_F7
Definition vsf_input_keyboard.h:139
@ VSF_KB_APOSTROPHE
Definition vsf_input_keyboard.h:124
@ VSF_KB_AMPERSAND
Definition vsf_input_keyboard.h:240
@ VSF_KB_r
Definition vsf_input_keyboard.h:90
@ VSF_KB_RIGHTBRACKET
Definition vsf_input_keyboard.h:121
@ VSF_KB_o
Definition vsf_input_keyboard.h:87
@ VSF_KB_u
Definition vsf_input_keyboard.h:93
@ VSF_KB_LSHIFT
Definition vsf_input_keyboard.h:214
@ VSF_KB_VOLUMEUP
Definition vsf_input_keyboard.h:208
@ VSF_KP_7
Definition vsf_input_keyboard.h:174
@ VSF_KB_f
Definition vsf_input_keyboard.h:78
@ VSF_KB_BAR
Definition vsf_input_keyboard.h:248
@ VSF_KB_MODIFIER_NUM
Definition vsf_input_keyboard.h:224
@ VSF_KB_EXT
Definition vsf_input_keyboard.h:232
@ VSF_KP_EQUAL
Definition vsf_input_keyboard.h:182
@ VSF_KB_U
Definition vsf_input_keyboard.h:276
@ VSF_KB_P
Definition vsf_input_keyboard.h:271
@ VSF_KB_PLUS
Definition vsf_input_keyboard.h:245
@ VSF_KB_PRINT_SCREEN
Definition vsf_input_keyboard.h:145
@ VSF_KB_BACKQUOTE
Definition vsf_input_keyboard.h:127
@ VSF_KB_w
Definition vsf_input_keyboard.h:95
@ VSF_KB_UNDERSCORE
Definition vsf_input_keyboard.h:244
@ VSF_KB_n
Definition vsf_input_keyboard.h:86
@ VSF_KB_F4
Definition vsf_input_keyboard.h:136
@ VSF_KB_INSERT
Definition vsf_input_keyboard.h:149
@ VSF_KB_ENTER
Definition vsf_input_keyboard.h:109
@ VSF_KB_a
Definition vsf_input_keyboard.h:73
@ VSF_KB_M
Definition vsf_input_keyboard.h:268
@ VSF_KB_DELETE
Definition vsf_input_keyboard.h:153
@ VSF_KB_v
Definition vsf_input_keyboard.h:94
@ VSF_KB_MENU
Definition vsf_input_keyboard.h:198
@ VSF_KB_W
Definition vsf_input_keyboard.h:278
@ VSF_KP_MINUS
Definition vsf_input_keyboard.h:165
@ VSF_KB_RMETA
Definition vsf_input_keyboard.h:222
@ VSF_KP_EQUALS
Definition vsf_input_keyboard.h:183
@ VSF_KB_RGUI
Definition vsf_input_keyboard.h:221
@ VSF_KB_QUESTION
Definition vsf_input_keyboard.h:254
@ VSF_KB_PASTE
Definition vsf_input_keyboard.h:205
@ VSF_KB_A
Definition vsf_input_keyboard.h:256
@ VSF_KB_Q
Definition vsf_input_keyboard.h:272
@ VSF_KB_RIGHT_PAREN
Definition vsf_input_keyboard.h:243
@ VSF_KB_DOUBLE_QUOTE
Definition vsf_input_keyboard.h:250
@ VSF_KB_UNDO
Definition vsf_input_keyboard.h:202
@ VSF_KB_i
Definition vsf_input_keyboard.h:81
@ VSF_KP_3
Definition vsf_input_keyboard.h:170
@ VSF_KB_DOT
Definition vsf_input_keyboard.h:129
@ VSF_KB_q
Definition vsf_input_keyboard.h:89
@ VSF_KP_DOT
Definition vsf_input_keyboard.h:178
@ VSF_KB_5
Definition vsf_input_keyboard.h:103
@ VSF_KB_F17
Definition vsf_input_keyboard.h:188
@ VSF_KB_COPY
Definition vsf_input_keyboard.h:204
@ VSF_KB_USER
Definition vsf_input_keyboard.h:230
@ VSF_KB_F22
Definition vsf_input_keyboard.h:193
@ VSF_KB_F23
Definition vsf_input_keyboard.h:194
@ VSF_KB_j
Definition vsf_input_keyboard.h:82
@ VSF_KB_TIDE
Definition vsf_input_keyboard.h:251
@ VSF_KB_EXECUTE
Definition vsf_input_keyboard.h:196
@ VSF_KP_ASTERISK
Definition vsf_input_keyboard.h:163
@ VSF_KB_LEFTBRACKET
Definition vsf_input_keyboard.h:119
@ VSF_KB_AT
Definition vsf_input_keyboard.h:235
@ VSF_KP_5
Definition vsf_input_keyboard.h:172
@ VSF_KB_EJECT
Definition vsf_input_keyboard.h:227
@ VSF_KB_F15
Definition vsf_input_keyboard.h:186
@ VSF_KB_POWER
Definition vsf_input_keyboard.h:181
@ VSF_KB_F9
Definition vsf_input_keyboard.h:141
@ VSF_KB_LALT
Definition vsf_input_keyboard.h:215
@ VSF_KB_PAGE_DOWN
Definition vsf_input_keyboard.h:155
@ VSF_KB_1
Definition vsf_input_keyboard.h:99
@ VSF_KB_F10
Definition vsf_input_keyboard.h:142
@ VSF_KB_LEFT
Definition vsf_input_keyboard.h:158
@ VSF_KB_g
Definition vsf_input_keyboard.h:79
@ VSF_KB_F18
Definition vsf_input_keyboard.h:189
@ VSF_KP_NUMLOCK
Definition vsf_input_keyboard.h:161
@ VSF_KB_t
Definition vsf_input_keyboard.h:92
@ VSF_KB_COLON
Definition vsf_input_keyboard.h:249
@ VSF_KB_F
Definition vsf_input_keyboard.h:261
@ VSF_KB_MINUS
Definition vsf_input_keyboard.h:115
@ VSF_KB_AGAIN
Definition vsf_input_keyboard.h:201
@ VSF_KB_4
Definition vsf_input_keyboard.h:102
@ VSF_KB_PAGEUP
Definition vsf_input_keyboard.h:152
@ VSF_KB_N
Definition vsf_input_keyboard.h:269
@ VSF_KP_DIVIDE
Definition vsf_input_keyboard.h:162
@ VSF_KB_s
Definition vsf_input_keyboard.h:91
@ VSF_KB_RSHIFT
Definition vsf_input_keyboard.h:219
@ VSF_KB_RIGHT_BRACKET
Definition vsf_input_keyboard.h:120
@ VSF_KB_GRAVE
Definition vsf_input_keyboard.h:126
@ VSF_KB_PAGEDOWN
Definition vsf_input_keyboard.h:156
@ VSF_KB_X
Definition vsf_input_keyboard.h:279
@ VSF_KB_6
Definition vsf_input_keyboard.h:104
@ VSF_KB_DOLLAR
Definition vsf_input_keyboard.h:237
@ VSF_KB_EQUAL
Definition vsf_input_keyboard.h:116
@ VSF_KP_COMMA
Definition vsf_input_keyboard.h:210
@ VSF_KP_2
Definition vsf_input_keyboard.h:169
@ VSF_KB_MUTE
Definition vsf_input_keyboard.h:207
@ VSF_KB_FIND
Definition vsf_input_keyboard.h:206
@ VSF_KB_RIGHT
Definition vsf_input_keyboard.h:157
@ VSF_KB_LMETA
Definition vsf_input_keyboard.h:217
@ VSF_KB_PERCENT
Definition vsf_input_keyboard.h:238
@ VSF_KB_LEFT_BRACE
Definition vsf_input_keyboard.h:246
@ VSF_KB_F16
Definition vsf_input_keyboard.h:187
@ VSF_KB_RALT
Definition vsf_input_keyboard.h:220
@ VSF_KB_MODE
Definition vsf_input_keyboard.h:225
@ VSF_KB_J
Definition vsf_input_keyboard.h:265
@ VSF_KB_L
Definition vsf_input_keyboard.h:267
@ VSF_KB_R
Definition vsf_input_keyboard.h:273
@ VSF_KB_K
Definition vsf_input_keyboard.h:266
@ VSF_KB_F12
Definition vsf_input_keyboard.h:144
@ VSF_KB_CUT
Definition vsf_input_keyboard.h:203
@ VSF_KB_EQUALS
Definition vsf_input_keyboard.h:117
@ VSF_KB_STOP
Definition vsf_input_keyboard.h:200
@ VSF_KP_8
Definition vsf_input_keyboard.h:175
@ VSF_KB_VOLUMEDOWN
Definition vsf_input_keyboard.h:209
@ VSF_KB_SLEEP
Definition vsf_input_keyboard.h:228
@ VSF_KP_9
Definition vsf_input_keyboard.h:176
@ VSF_KB_F14
Definition vsf_input_keyboard.h:185
@ VSF_KB_SELECT
Definition vsf_input_keyboard.h:199
@ VSF_KB_HOME
Definition vsf_input_keyboard.h:150
@ VSF_KB_LEFT_BRACKET
Definition vsf_input_keyboard.h:118
@ VSF_KB_ASTERISK
Definition vsf_input_keyboard.h:241
@ VSF_KB_3
Definition vsf_input_keyboard.h:101
@ VSF_KB_I
Definition vsf_input_keyboard.h:264
@ VSF_KB_EXCLAM
Definition vsf_input_keyboard.h:234
@ VSF_KB_BACKSLASH
Definition vsf_input_keyboard.h:122
@ VSF_KB_UP
Definition vsf_input_keyboard.h:160
@ VSF_KB_F2
Definition vsf_input_keyboard.h:134
@ VSF_KB_z
Definition vsf_input_keyboard.h:98
@ VSF_KB_ESCAPE
Definition vsf_input_keyboard.h:111
@ VSF_KP_0
Definition vsf_input_keyboard.h:177
@ VSF_KB_C
Definition vsf_input_keyboard.h:258
@ VSF_KP_1
Definition vsf_input_keyboard.h:168
@ VSF_KB_SINGLE_QUOTE
Definition vsf_input_keyboard.h:125
@ VSF_KB_F24
Definition vsf_input_keyboard.h:195
@ VSF_KB_F20
Definition vsf_input_keyboard.h:191
@ VSF_KB_GREATER
Definition vsf_input_keyboard.h:253
@ VSF_KB_SLASH
Definition vsf_input_keyboard.h:131
@ VSF_KB_T
Definition vsf_input_keyboard.h:275
@ VSF_KB_END
Definition vsf_input_keyboard.h:154
@ VSF_KB_PAUSE
Definition vsf_input_keyboard.h:148
@ VSF_KB_8
Definition vsf_input_keyboard.h:106
@ VSF_KB_F21
Definition vsf_input_keyboard.h:192
@ VSF_KB_H
Definition vsf_input_keyboard.h:263
@ VSF_KB_0
Definition vsf_input_keyboard.h:108
@ VSF_KB_LEFT_PAREN
Definition vsf_input_keyboard.h:242
@ VSF_KB_RETURN
Definition vsf_input_keyboard.h:110
@ VSF_KB_LCTRL
Definition vsf_input_keyboard.h:213
@ VSF_KB_B
Definition vsf_input_keyboard.h:257
@ VSF_KB_RCTRL
Definition vsf_input_keyboard.h:218
@ VSF_KB_DOWN
Definition vsf_input_keyboard.h:159
@ VSF_KB_F8
Definition vsf_input_keyboard.h:140
@ VSF_KB_Z
Definition vsf_input_keyboard.h:281
@ VSF_KM_NONE
Definition vsf_input_keyboard.h:285
@ VSF_KM_LEFT_CTRL
Definition vsf_input_keyboard.h:288
@ VSF_KM_NUMLOCK
Definition vsf_input_keyboard.h:303
@ VSF_KM_GUI
Definition vsf_input_keyboard.h:314
@ VSF_KM_RIGHT_ALT
Definition vsf_input_keyboard.h:298
@ VSF_KM_RSHIFT
Definition vsf_input_keyboard.h:295
@ VSF_KM_LEFT_GUI
Definition vsf_input_keyboard.h:292
@ VSF_KM_RGUI
Definition vsf_input_keyboard.h:301
@ VSF_KM_RIGHT_SHIFT
Definition vsf_input_keyboard.h:294
@ VSF_KM_CTRL
Definition vsf_input_keyboard.h:312
@ VSF_KM_LEFT_ALT
Definition vsf_input_keyboard.h:290
@ VSF_KM_SCROLL
Definition vsf_input_keyboard.h:308
@ VSF_KM_LEFT_SHIFT
Definition vsf_input_keyboard.h:286
@ VSF_KM_LGUI
Definition vsf_input_keyboard.h:293
@ VSF_KM_CAPSLOCK
Definition vsf_input_keyboard.h:305
@ VSF_KM_LSHIFT
Definition vsf_input_keyboard.h:287
@ VSF_KM_SCROLLLOCK
Definition vsf_input_keyboard.h:307
@ VSF_KM_CAPS
Definition vsf_input_keyboard.h:306
@ VSF_KM_LCTRL
Definition vsf_input_keyboard.h:289
@ VSF_KM_NUM
Definition vsf_input_keyboard.h:304
@ VSF_KM_RIGHT_CTRL
Definition vsf_input_keyboard.h:296
@ VSF_KM_SHIFT
Definition vsf_input_keyboard.h:311
@ VSF_KM_ALT
Definition vsf_input_keyboard.h:313
@ VSF_KM_FN
Definition vsf_input_keyboard.h:309
@ VSF_KM_LALT
Definition vsf_input_keyboard.h:291
@ VSF_KM_RCTRL
Definition vsf_input_keyboard.h:297
@ VSF_KM_RIGHT_GUI
Definition vsf_input_keyboard.h:300
@ VSF_KM_RALT
Definition vsf_input_keyboard.h:299
@ VSF_INPUT_TYPE_KEYBOARD
Definition vsf_input_keyboard.h:66