libx52 0.3.3
Saitek X52/X52Pro drivers for Linux/Unix
Loading...
Searching...
No Matches
vkm.h
Go to the documentation of this file.
1/*
2 * Virtual keyboard/mouse interface
3 *
4 * Copyright (C) 2026 Nirenjan Krishnan (nirenjan@nirenjan.org)
5 *
6 * SPDX-License-Identifier: GPL-2.0-only WITH Classpath-exception-2.0
7 */
8
20#ifndef VKM_H
21#define VKM_H
22
23#include <stdint.h>
24#include <stdbool.h>
25
26#ifndef VKM_API
27# if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303
28# define VKM_API __attribute__((visibility("default")))
29# elif defined(_WIN32)
30# define VKM_API __declspec(dllexport)
31# else
32# define VKM_API
33# endif
34#endif
35
36#ifdef __cplusplus
37extern "C" {
38#endif
39
43struct vkm_context;
44
52typedef struct vkm_context vkm_context;
53
57typedef int32_t vkm_result;
58
65typedef enum {
66 VKM_FEAT_MOUSE = (1 << 0),
70
73
74 /* Additional flags may be added in the future */
76
80typedef enum {
83
86
89
92
95
98
101
104
107
108 /* Maximum error states, do not use in external code*/
109 VKM_ERROR_MAX,
111
126VKM_API const char *vkm_strerror(vkm_result code);
127
131typedef enum {
143
156
167
168 /* Max number of options, do not use in external code */
169 VKM_OPT_MAX
170} vkm_option;
171
175typedef enum {
178
181
182 /* Max number of button states, do not use in external code */
183 VKM_BUTTON_STATE_MAX
185
189typedef enum {
192
195
198
199 /* Max number of mouse buttons, do not use in external code */
200 VKM_MOUSE_BTN_MAX
202
206typedef enum {
209
212
215
218
219 /* Maximum number of scroll states, do not use in external code */
220 VKM_MOUSE_SCROLL_MAX
222
232typedef enum {
235 VKM_KEY_A = 0x04,
262 VKM_KEY_1 = 0x1E,
293 VKM_KEY_F1 = 0x3A,
355
379
381#define VKM_KEY_MOD_CTRL VKM_KEY_MOD_LCTRL
383#define VKM_KEY_MOD_SHIFT VKM_KEY_MOD_LSHIFT
385#define VKM_KEY_MOD_ALT VKM_KEY_MOD_LALT
387#define VKM_KEY_MOD_GUI VKM_KEY_MOD_LGUI
388
400
426
436VKM_API void vkm_exit(vkm_context *ctx);
437
456
471
479VKM_API bool vkm_is_ready(vkm_context *ctx);
480
489VKM_API bool vkm_platform_supported(void);
490
501
518
535VKM_API vkm_result vkm_mouse_move(vkm_context *ctx, int dx, int dy);
536
553
575
596
613
614#ifdef __cplusplus
615}
616#endif
617
618#endif // !defined VKM_H
struct vkm_context vkm_context
Virtual device context structure used by the VKM framework.
Definition vkm.h:52
vkm_error_code
Error code list.
Definition vkm.h:80
@ VKM_ERROR_NO_CHANGE
Definition vkm.h:106
@ VKM_ERROR_OUT_OF_MEMORY
Definition vkm.h:91
@ VKM_ERROR_UNKNOWN
Definition vkm.h:85
@ VKM_ERROR_EVENT
Definition vkm.h:103
@ VKM_ERROR_NOT_READY
Definition vkm.h:88
@ VKM_ERROR_NOT_SUPPORTED
Definition vkm.h:97
@ VKM_ERROR_DEV_FAILURE
Definition vkm.h:100
@ VKM_SUCCESS
Definition vkm.h:82
@ VKM_ERROR_INVALID_PARAM
Definition vkm.h:94
VKM_API bool vkm_is_ready(vkm_context *ctx)
check if VKM is started and ready
VKM_API vkm_result vkm_keyboard_send(vkm_context *ctx, vkm_key key, vkm_key_modifiers modifiers, vkm_key_state state)
Send a single keyboard event.
int32_t vkm_result
Return type used by VKM API functions.
Definition vkm.h:57
VKM_API vkm_result vkm_mouse_move(vkm_context *ctx, int dx, int dy)
Move the mouse by the specified amount.
VKM_API vkm_result vkm_start(vkm_context *ctx)
Start any virtual keyboard/mouse devices on the platform.
VKM_API vkm_result vkm_mouse_scroll(vkm_context *ctx, vkm_mouse_scroll_direction dir)
Scroll the mouse wheel.
VKM_API vkm_result vkm_init(vkm_context **ctx)
Initialize the VKM library.
vkm_feature
Feature identifiers for vkm_feature_supported.
Definition vkm.h:65
@ VKM_FEAT_MOUSE
Definition vkm.h:66
@ VKM_FEAT_KEYBOARD
Definition vkm.h:69
@ VKM_FEAT_KEYBOARD_MODIFIERS
Definition vkm.h:72
vkm_button_state
Button state.
Definition vkm.h:175
@ VKM_BUTTON_RELEASED
Definition vkm.h:177
@ VKM_BUTTON_PRESSED
Definition vkm.h:180
VKM_API bool vkm_feature_supported(vkm_feature feat)
Check if a particular feature is enabled on this platform.
vkm_key_state
Physical key action (press or release) for vkm_keyboard_send.
Definition vkm.h:395
@ VKM_KEY_STATE_PRESSED
Definition vkm.h:397
@ VKM_KEY_STATE_RELEASED
Definition vkm.h:396
@ VKM_KEY_STATE_MAX
Definition vkm.h:398
vkm_option
Option list.
Definition vkm.h:131
@ VKM_OPT_DEVICE_NAME
Set the virtual device name in the system.
Definition vkm.h:166
@ VKM_OPT_HI_RES_SCROLL
Set the high resolution scrolling behavior of the mouse.
Definition vkm.h:142
@ VKM_OPT_HORIZONTAL_SCROLL
Enable or disable horizontal scrolling of the mouse.
Definition vkm.h:155
VKM_API const char * vkm_strerror(vkm_result code)
Return a short description for a vkm_result / vkm_error_code value.
VKM_API vkm_result vkm_set_option(vkm_context *ctx, vkm_option option,...)
Set an option flag for VKM.
vkm_key
Physical key identifiers (USB HID keyboard/keypad page, usage page 0x07)
Definition vkm.h:232
@ VKM_KEY_A
Definition vkm.h:235
@ VKM_KEY_CAPS_LOCK
Definition vkm.h:291
@ VKM_KEY_HOME
Definition vkm.h:311
@ VKM_KEY_KEYPAD_5
Definition vkm.h:332
@ VKM_KEY_F1
Definition vkm.h:293
@ VKM_KEY_LEFT_GUI
Definition vkm.h:347
@ VKM_KEY_RIGHT_SHIFT
Definition vkm.h:349
@ VKM_KEY_PAUSE
Definition vkm.h:308
@ VKM_KEY_M
Definition vkm.h:247
@ VKM_KEY_KEYPAD_MULTIPLY
Definition vkm.h:324
@ VKM_KEY_TAB
Definition vkm.h:276
@ VKM_KEY_KEYPAD_3
Definition vkm.h:330
@ VKM_KEY_KEYPAD_ENTER
Definition vkm.h:327
@ VKM_KEY_PAGE_UP
Definition vkm.h:312
@ VKM_KEY_X
Definition vkm.h:258
@ VKM_KEY_KEYPAD_NUM_LOCK
Definition vkm.h:322
@ VKM_KEY_F5
Definition vkm.h:297
@ VKM_KEY_PRINT_SCREEN
Definition vkm.h:306
@ VKM_KEY_0
Definition vkm.h:271
@ VKM_KEY_F4
Definition vkm.h:296
@ VKM_KEY_RIGHT_BRACKET
Definition vkm.h:281
@ VKM_KEY_V
Definition vkm.h:256
@ VKM_KEY_NONUS_HASH
Definition vkm.h:283
@ VKM_KEY_SLASH
Definition vkm.h:289
@ VKM_KEY_C
Definition vkm.h:237
@ VKM_KEY_4
Definition vkm.h:265
@ VKM_KEY_O
Definition vkm.h:249
@ VKM_KEY_SCROLL_LOCK
Definition vkm.h:307
@ VKM_KEY_D
Definition vkm.h:238
@ VKM_KEY_END
Definition vkm.h:314
@ VKM_KEY_R
Definition vkm.h:252
@ VKM_KEY_8
Definition vkm.h:269
@ VKM_KEY_H
Definition vkm.h:242
@ VKM_KEY_F7
Definition vkm.h:299
@ VKM_KEY_PAGE_DOWN
Definition vkm.h:315
@ VKM_KEY_7
Definition vkm.h:268
@ VKM_KEY_INSERT
Definition vkm.h:310
@ VKM_KEY_N
Definition vkm.h:248
@ VKM_KEY_3
Definition vkm.h:264
@ VKM_KEY_APOSTROPHE
Definition vkm.h:285
@ VKM_KEY_F2
Definition vkm.h:294
@ VKM_KEY_MINUS
Definition vkm.h:278
@ VKM_KEY_KEYPAD_DIVIDE
Definition vkm.h:323
@ VKM_KEY_F10
Definition vkm.h:302
@ VKM_KEY_MAX
Definition vkm.h:353
@ VKM_KEY_KEYPAD_9
Definition vkm.h:336
@ VKM_KEY_KEYPAD_COMMA
Definition vkm.h:342
@ VKM_KEY_S
Definition vkm.h:253
@ VKM_KEY_KEYPAD_2
Definition vkm.h:329
@ VKM_KEY_LEFT_CTRL
Definition vkm.h:344
@ VKM_KEY_INTL_BACKSLASH
Definition vkm.h:339
@ VKM_KEY_APPLICATION
Definition vkm.h:340
@ VKM_KEY_UP_ARROW
Definition vkm.h:320
@ VKM_KEY_5
Definition vkm.h:266
@ VKM_KEY_F3
Definition vkm.h:295
@ VKM_KEY_KEYPAD_PLUS
Definition vkm.h:326
@ VKM_KEY_B
Definition vkm.h:236
@ VKM_KEY_I
Definition vkm.h:243
@ VKM_KEY_E
Definition vkm.h:239
@ VKM_KEY_F11
Definition vkm.h:303
@ VKM_KEY_KEYPAD_6
Definition vkm.h:333
@ VKM_KEY_RIGHT_ALT
Definition vkm.h:350
@ VKM_KEY_RIGHT_GUI
Definition vkm.h:351
@ VKM_KEY_T
Definition vkm.h:254
@ VKM_KEY_EQUAL
Definition vkm.h:279
@ VKM_KEY_Y
Definition vkm.h:259
@ VKM_KEY_9
Definition vkm.h:270
@ VKM_KEY_U
Definition vkm.h:255
@ VKM_KEY_F12
Definition vkm.h:304
@ VKM_KEY_LEFT_SHIFT
Definition vkm.h:345
@ VKM_KEY_L
Definition vkm.h:246
@ VKM_KEY_KEYPAD_DECIMAL
Definition vkm.h:338
@ VKM_KEY_6
Definition vkm.h:267
@ VKM_KEY_KEYPAD_7
Definition vkm.h:334
@ VKM_KEY_2
Definition vkm.h:263
@ VKM_KEY_J
Definition vkm.h:244
@ VKM_KEY_ENTER
Definition vkm.h:273
@ VKM_KEY_W
Definition vkm.h:257
@ VKM_KEY_F9
Definition vkm.h:301
@ VKM_KEY_SPACE
Definition vkm.h:277
@ VKM_KEY_DOWN_ARROW
Definition vkm.h:319
@ VKM_KEY_RIGHT_CTRL
Definition vkm.h:348
@ VKM_KEY_KEYPAD_MINUS
Definition vkm.h:325
@ VKM_KEY_Q
Definition vkm.h:251
@ VKM_KEY_ESCAPE
Definition vkm.h:274
@ VKM_KEY_KEYPAD_1
Definition vkm.h:328
@ VKM_KEY_COMMA
Definition vkm.h:287
@ VKM_KEY_NONE
Definition vkm.h:233
@ VKM_KEY_DELETE_FORWARD
Definition vkm.h:313
@ VKM_KEY_G
Definition vkm.h:241
@ VKM_KEY_F8
Definition vkm.h:300
@ VKM_KEY_LEFT_BRACKET
Definition vkm.h:280
@ VKM_KEY_F
Definition vkm.h:240
@ VKM_KEY_RIGHT_ARROW
Definition vkm.h:317
@ VKM_KEY_BACKSPACE
Definition vkm.h:275
@ VKM_KEY_GRAVE_ACCENT
Definition vkm.h:286
@ VKM_KEY_KEYPAD_4
Definition vkm.h:331
@ VKM_KEY_F6
Definition vkm.h:298
@ VKM_KEY_KEYPAD_0
Definition vkm.h:337
@ VKM_KEY_PERIOD
Definition vkm.h:288
@ VKM_KEY_K
Definition vkm.h:245
@ VKM_KEY_P
Definition vkm.h:250
@ VKM_KEY_BACKSLASH
Definition vkm.h:282
@ VKM_KEY_SEMICOLON
Definition vkm.h:284
@ VKM_KEY_LEFT_ALT
Definition vkm.h:346
@ VKM_KEY_Z
Definition vkm.h:260
@ VKM_KEY_LEFT_ARROW
Definition vkm.h:318
@ VKM_KEY_KEYPAD_8
Definition vkm.h:335
@ VKM_KEY_1
Definition vkm.h:262
VKM_API void vkm_exit(vkm_context *ctx)
Exit the VKM library and free up any resources used.
vkm_mouse_button
Mouse button identifiers.
Definition vkm.h:189
@ VKM_MOUSE_BTN_RIGHT
Definition vkm.h:194
@ VKM_MOUSE_BTN_LEFT
Definition vkm.h:191
@ VKM_MOUSE_BTN_MIDDLE
Definition vkm.h:197
VKM_API vkm_result vkm_reset(vkm_context *ctx)
Release all virtual keys and mouse buttons that are still down.
vkm_mouse_scroll_direction
Scroll directions.
Definition vkm.h:206
@ VKM_MOUSE_SCROLL_RIGHT
Definition vkm.h:217
@ VKM_MOUSE_SCROLL_DOWN
Definition vkm.h:211
@ VKM_MOUSE_SCROLL_LEFT
Definition vkm.h:214
@ VKM_MOUSE_SCROLL_UP
Definition vkm.h:208
VKM_API bool vkm_platform_supported(void)
Check if VKM is supported on this platform.
VKM_API vkm_result vkm_mouse_click(vkm_context *ctx, vkm_mouse_button button, vkm_button_state state)
Click the mouse button.
VKM_API vkm_result vkm_sync(vkm_context *ctx)
Send a sync packet to the OS.
vkm_key_modifiers
Modifier bitmask for vkm_keyboard_send.
Definition vkm.h:367
@ VKM_KEY_MOD_RSHIFT
Definition vkm.h:375
@ VKM_KEY_MOD_LALT
Definition vkm.h:372
@ VKM_KEY_MOD_LCTRL
Definition vkm.h:370
@ VKM_KEY_MOD_LSHIFT
Definition vkm.h:371
@ VKM_KEY_MOD_RGUI
Definition vkm.h:377
@ VKM_KEY_MOD_NONE
Definition vkm.h:368
@ VKM_KEY_MOD_RCTRL
Definition vkm.h:374
@ VKM_KEY_MOD_RALT
Definition vkm.h:376
@ VKM_KEY_MOD_LGUI
Definition vkm.h:373