1 /* libfsml - a media library for video and input
2 * Copyright (C) 2011 Frode Solheim <frode-code@fengestad.no>
3 *
4 * This library is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU Lesser General Public License as published by
6 * the Free Software Foundation; either version 2.1 of the License, or (at
7 * your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
11 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
12 * License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public License
15 * along with this library; if not, write to the Free Software Foundation,
16 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19 #ifndef LIBFSML_ML_H_
20 #define LIBFSML_ML_H_
21
22 #include <fs/malloc.h>
23 #include <fs/base.h>
24 #include <stdint.h>
25 #include <stdbool.h>
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30
31 void fs_ml_quit();
32 void fs_ml_maybe_quit();
33 int fs_ml_is_quitting();
34
35 extern int g_fs_ml_opengl_context_stamp;
36
37 bool fs_ml_fullscreen(void);
38 void fs_ml_set_fullscreen(bool fullscreen);
39 void fs_ml_toggle_fullscreen(void);
40
41 typedef void (*fs_ml_void_function)();
42 typedef int (*fs_ml_int_function)();
43
44 typedef struct fs_ml_video_mode {
45 int width;
46 int height;
47 int fps;
48 int bpp;
49 int flags;
50 } fs_ml_video_mode;
51
52 void fs_ml_show_cursor(int show, int immediate);
53 bool fs_ml_mouse_integration(void);
54 bool fs_ml_cursor_allowed(void);
55 int fs_ml_first_mouse_index(void);
56
57 bool fs_ml_input_grab(void);
58 void fs_ml_set_input_grab(bool grab);
59
60 bool fs_ml_automatic_input_grab(void);
61 void fs_ml_set_input_grab_on_activate(bool grab);
62
63 GList *fs_ml_input_list_custom_keyboards(void);
64
65 void fs_ml_activate_window_switcher(void);
66
fs_ml_monotonic_time()67 static inline int64_t fs_ml_monotonic_time() {
68 return fs_get_monotonic_time();
69 }
70
71 void fs_ml_usleep(int usec);
72
73 #define FS_ML_VIDEO_EVENT_GRAB_INPUT 1
74 #define FS_ML_VIDEO_EVENT_UNGRAB_INPUT 2
75 #define FS_ML_VIDEO_EVENT_SHOW_CURSOR 3
76 #define FS_ML_VIDEO_EVENT_HIDE_CURSOR 4
77
78 void fs_ml_init(void);
79 void fs_ml_init_2(void);
80
81 void fs_ml_stop();
82
83 int fs_ml_main_loop(void);
84
85 int fs_ml_get_video_sync();
86 double fs_ml_get_refresh_rate(void);
87 int fs_ml_get_vblank_sync();
88
89 int fs_ml_get_vblank_count(void);
90 int64_t fs_ml_get_vblank_time(void);
91
92 int fs_ml_video_mode_get_current(fs_ml_video_mode *mode);
93 int fs_ml_video_create_window(const char *title);
94
95 void fs_ml_set_quit_function(fs_ml_void_function function);
96
97 void fs_ml_video_set_update_function(fs_ml_int_function function);
98 void fs_ml_video_set_render_function(fs_ml_void_function function);
99 void fs_ml_video_set_post_render_function(fs_ml_void_function function);
100
101 //void fs_ml_signal_buffer_swap();
102 //void fs_ml_lock_buffer_swap();
103 //void fs_ml_unlock_buffer_swap();
104
105 void fs_ml_frame_update_begin(int frame);
106 void fs_ml_frame_update_end(int frame);
107
108 void fs_ml_video_screenshot(const char *path);
109 int fs_ml_video_width();
110 int fs_ml_video_height();
111 void fs_ml_video_sync_enable(int enable);
112 void fs_ml_vblank_sync_enable();
113 void fs_ml_set_video_fsaa(int fsaa);
114
115 int fs_ml_get_fullscreen_width();
116 int fs_ml_get_fullscreen_height();
117 int fs_ml_get_windowed_width();
118 int fs_ml_get_windowed_height();
119
120 char *fs_ml_input_unique_device_name(char *name);
121 char *fs_ml_input_fix_joystick_name(const char *name, int upper);
122
123 //int fs_ml_main_iteration();
124 // FIXME: REMOVE?
125 //void fs_ml_swap_buffers();
126 //void fs_ml_wait_vblank();
127 void fs_ml_video_swap_buffers();
128
129 int fs_ml_get_max_texture_size();
130
131 typedef enum {
132 FS_ML_NOEVENT = 0,
133 FS_ML_ACTIVEEVENT,
134 FS_ML_KEYDOWN,
135 FS_ML_KEYUP,
136 FS_ML_MOUSEMOTION,
137 FS_ML_MOUSEBUTTONDOWN,
138 FS_ML_MOUSEBUTTONUP,
139 FS_ML_JOYAXISMOTION,
140 FS_ML_JOYBALLMOTION,
141 FS_ML_JOYHATMOTION,
142 FS_ML_JOYBUTTONDOWN,
143 FS_ML_JOYBUTTONUP,
144 FS_ML_QUIT,
145 FS_ML_SYSWMEVENT,
146 FS_ML_EVENT_RESERVEDA,
147 FS_ML_EVENT_RESERVEDB,
148 FS_ML_VIDEORESIZE,
149 FS_ML_VIDEOEXPOSE,
150 FS_ML_TEXTINPUT,
151 FS_ML_EVENT_RESERVED3,
152 FS_ML_EVENT_RESERVED4,
153 FS_ML_EVENT_RESERVED5,
154 FS_ML_EVENT_RESERVED6,
155 FS_ML_EVENT_RESERVED7,
156 FS_ML_USEREVENT = 24,
157 FS_ML_NUMEVENTS = 32
158 } FS_ML_EventType;
159
160 typedef struct fs_ml_keysym {
161 uint16_t scancode;
162 uint16_t sym;
163 // uint16_t unicode;
164 uint16_t mod;
165 } fs_ml_keysym;
166
167 typedef struct fs_ml_ActiveEvent {
168 uint8_t type;
169 uint8_t gain;
170 uint8_t state;
171 } fs_ml_ActiveEvent;
172
173 typedef struct fs_ml_KeyboardEvent {
174 uint8_t type;
175 uint8_t which;
176 uint8_t state;
177 fs_ml_keysym keysym;
178 } fs_ml_KeyboardEvent;
179
180 typedef struct fs_ml_MouseMotionEvent {
181 uint8_t type;
182 uint8_t device;
183 uint8_t state;
184 uint16_t x, y;
185 int16_t xrel;
186 int16_t yrel;
187 } fs_ml_MouseMotionEvent;
188
189 typedef struct fs_ml_MouseButtonEvent {
190 uint8_t type;
191 uint8_t device;
192 uint8_t button;
193 uint8_t state;
194 uint16_t x, y;
195 } fs_ml_MouseButtonEvent;
196
197 typedef struct fs_ml_JoyAxisEvent {
198 uint8_t type;
199 uint8_t which;
200 uint8_t axis;
201 int16_t value;
202 } fs_ml_JoyAxisEvent;
203
204 typedef struct fs_ml_JoyBallEvent {
205 uint8_t type;
206 uint8_t which;
207 uint8_t ball;
208 int16_t xrel;
209 int16_t yrel;
210 } fs_ml_JoyBallEvent;
211
212 typedef struct fs_ml_JoyHatEvent {
213 uint8_t type;
214 uint8_t which;
215 uint8_t hat;
216 uint8_t value;
217 } fs_ml_JoyHatEvent;
218
219 typedef struct fs_ml_JoyButtonEvent {
220 uint8_t type;
221 uint8_t which;
222 uint8_t button;
223 uint8_t state;
224 } fs_ml_JoyButtonEvent;
225
226 typedef struct fs_ml_ResizeEvent {
227 uint8_t type;
228 int w;
229 int h;
230 } fs_ml_ResizeEvent;
231
232 typedef struct fs_ml_ExposeEvent {
233 uint8_t type;
234 } fs_ml_ExposeEvent;
235
236 typedef struct fs_ml_QuitEvent {
237 uint8_t type;
238 } fs_ml_QuitEvent;
239
240 typedef struct fs_ml_UserEvent {
241 uint8_t type;
242 int code;
243 void *data1;
244 void *data2;
245 } fs_ml_UserEvent;
246
247 struct fs_ml_SysWMmsg;
248 typedef struct fs_ml_SysWMmsg fs_ml_SysWMmsg;
249 typedef struct fs_ml_SysWMEvent {
250 uint8_t type;
251 fs_ml_SysWMmsg *msg;
252 } fs_ml_SysWMEvent;
253
254
255 #define TEXTINPUTEVENT_TEXT_SIZE (32)
256
257 typedef struct fs_ml_TextInputEvent {
258 uint8_t type;
259 char text[TEXTINPUTEVENT_TEXT_SIZE];
260 } fs_ml_TextInputEvent;
261
262 typedef union fs_ml_event {
263 uint8_t type;
264 fs_ml_ActiveEvent active;
265 fs_ml_KeyboardEvent key;
266 fs_ml_MouseMotionEvent motion;
267 fs_ml_MouseButtonEvent button;
268 fs_ml_JoyAxisEvent jaxis;
269 fs_ml_JoyBallEvent jball;
270 fs_ml_JoyHatEvent jhat;
271 fs_ml_JoyButtonEvent jbutton;
272 fs_ml_ResizeEvent resize;
273 fs_ml_ExposeEvent expose;
274 fs_ml_QuitEvent quit;
275 fs_ml_UserEvent user;
276 fs_ml_SysWMEvent syswm;
277 fs_ml_TextInputEvent text;
278 } fs_ml_event;
279
280 fs_ml_event* fs_ml_alloc_event();
281 void fs_ml_free_event(fs_ml_event* event);
282 int fs_ml_post_event(fs_ml_event* event);
283
284 typedef int (*fs_ml_input_function)(fs_ml_event* event);
285 void fs_ml_set_input_function(fs_ml_input_function function);
286
287 #define FS_ML_INPUT_DEVICES_MAX 64
288
289 #define FS_ML_KEYBOARD 0
290 #define FS_ML_MOUSE 1
291 #define FS_ML_JOYSTICK 2
292
293 typedef struct fs_ml_input_device {
294 int index;
295 int type;
296 char *name;
297 char *alias;
298 int buttons;
299 int axes;
300 int hats;
301 int usage;
302 int balls;
303 } fs_ml_input_device;
304
305 int fs_ml_input_device_count();
306 int fs_ml_input_device_get(int index, fs_ml_input_device *device);
307 fs_ml_input_device *fs_ml_get_input_devices(int* count);
308
309 #define FS_ML_HAT_CENTERED 0x00
310 #define FS_ML_HAT_UP 0x01
311 #define FS_ML_HAT_RIGHT 0x02
312 #define FS_ML_HAT_DOWN 0x04
313 #define FS_ML_HAT_LEFT 0x08
314 #define FS_ML_HAT_RIGHTUP (FS_ML_HAT_RIGHT | FS_ML_HAT_UP)
315 #define FS_ML_HAT_RIGHTDOWN (FS_ML_HAT_RIGHT | FS_ML_HAT_DOWN)
316 #define FS_ML_HAT_LEFTUP (FS_ML_HAT_LEFT | FS_ML_HAT_UP)
317 #define FS_ML_HAT_LEFTDOWN (FS_ML_HAT_LEFT | FS_ML_HAT_DOWN)
318
319 #define FS_ML_BUTTON_LEFT 1
320 #define FS_ML_BUTTON_MIDDLE 2
321 #define FS_ML_BUTTON_RIGHT 3
322 #define FS_ML_BUTTON_WHEELUP 4
323 #define FS_ML_BUTTON_WHEELDOWN 5
324
325 #define FS_ML_NO_ABSOLUTE_MOUSE_POS 0xffff
326
327 typedef enum {
328 FS_ML_KEY_UNKNOWN = 0,
329 FS_ML_KEY_FIRST = 0,
330 FS_ML_KEY_BACKSPACE = 8,
331 FS_ML_KEY_TAB = 9,
332 FS_ML_KEY_CLEAR = 12,
333 FS_ML_KEY_RETURN = 13,
334 FS_ML_KEY_PAUSE = 19,
335 FS_ML_KEY_ESCAPE = 27,
336 FS_ML_KEY_SPACE = 32,
337 FS_ML_KEY_EXCLAIM = 33,
338 FS_ML_KEY_QUOTEDBL = 34,
339 FS_ML_KEY_HASH = 35,
340 FS_ML_KEY_DOLLAR = 36,
341 FS_ML_KEY_AMPERSAND = 38,
342 FS_ML_KEY_QUOTE = 39,
343 FS_ML_KEY_LEFTPAREN = 40,
344 FS_ML_KEY_RIGHTPAREN = 41,
345 FS_ML_KEY_ASTERISK = 42,
346 FS_ML_KEY_PLUS = 43,
347 FS_ML_KEY_COMMA = 44,
348 FS_ML_KEY_MINUS = 45,
349 FS_ML_KEY_PERIOD = 46,
350 FS_ML_KEY_SLASH = 47,
351 FS_ML_KEY_0 = 48,
352 FS_ML_KEY_1 = 49,
353 FS_ML_KEY_2 = 50,
354 FS_ML_KEY_3 = 51,
355 FS_ML_KEY_4 = 52,
356 FS_ML_KEY_5 = 53,
357 FS_ML_KEY_6 = 54,
358 FS_ML_KEY_7 = 55,
359 FS_ML_KEY_8 = 56,
360 FS_ML_KEY_9 = 57,
361 FS_ML_KEY_COLON = 58,
362 FS_ML_KEY_SEMICOLON = 59,
363 FS_ML_KEY_LESS = 60,
364 FS_ML_KEY_EQUALS = 61,
365 FS_ML_KEY_GREATER = 62,
366 FS_ML_KEY_QUESTION = 63,
367 FS_ML_KEY_AT = 64,
368
369 FS_ML_KEY_LEFTBRACKET = 91,
370 FS_ML_KEY_BACKSLASH = 92,
371 FS_ML_KEY_RIGHTBRACKET = 93,
372 FS_ML_KEY_CARET = 94,
373 FS_ML_KEY_UNDERSCORE = 95,
374 FS_ML_KEY_BACKQUOTE = 96,
375 FS_ML_KEY_A = 97,
376 FS_ML_KEY_B = 98,
377 FS_ML_KEY_C = 99,
378 FS_ML_KEY_D = 100,
379 FS_ML_KEY_E = 101,
380 FS_ML_KEY_F = 102,
381 FS_ML_KEY_G = 103,
382 FS_ML_KEY_H = 104,
383 FS_ML_KEY_I = 105,
384 FS_ML_KEY_J = 106,
385 FS_ML_KEY_K = 107,
386 FS_ML_KEY_L = 108,
387 FS_ML_KEY_M = 109,
388 FS_ML_KEY_N = 110,
389 FS_ML_KEY_O = 111,
390 FS_ML_KEY_P = 112,
391 FS_ML_KEY_Q = 113,
392 FS_ML_KEY_R = 114,
393 FS_ML_KEY_S = 115,
394 FS_ML_KEY_T = 116,
395 FS_ML_KEY_U = 117,
396 FS_ML_KEY_V = 118,
397 FS_ML_KEY_W = 119,
398 FS_ML_KEY_X = 120,
399 FS_ML_KEY_Y = 121,
400 FS_ML_KEY_Z = 122,
401 FS_ML_KEY_DELETE = 127,
402
403 FS_ML_KEY_WORLD_0 = 160,
404 FS_ML_KEY_WORLD_1 = 161,
405 FS_ML_KEY_WORLD_2 = 162,
406 FS_ML_KEY_WORLD_3 = 163,
407 FS_ML_KEY_WORLD_4 = 164,
408 FS_ML_KEY_WORLD_5 = 165,
409 FS_ML_KEY_WORLD_6 = 166,
410 FS_ML_KEY_WORLD_7 = 167,
411 FS_ML_KEY_WORLD_8 = 168,
412 FS_ML_KEY_WORLD_9 = 169,
413 FS_ML_KEY_WORLD_10 = 170,
414 FS_ML_KEY_WORLD_11 = 171,
415 FS_ML_KEY_WORLD_12 = 172,
416 FS_ML_KEY_WORLD_13 = 173,
417 FS_ML_KEY_WORLD_14 = 174,
418 FS_ML_KEY_WORLD_15 = 175,
419 FS_ML_KEY_WORLD_16 = 176,
420 FS_ML_KEY_WORLD_17 = 177,
421 FS_ML_KEY_WORLD_18 = 178,
422 FS_ML_KEY_WORLD_19 = 179,
423 FS_ML_KEY_WORLD_20 = 180,
424 FS_ML_KEY_WORLD_21 = 181,
425 FS_ML_KEY_WORLD_22 = 182,
426 FS_ML_KEY_WORLD_23 = 183,
427 FS_ML_KEY_WORLD_24 = 184,
428 FS_ML_KEY_WORLD_25 = 185,
429 FS_ML_KEY_WORLD_26 = 186,
430 FS_ML_KEY_WORLD_27 = 187,
431 FS_ML_KEY_WORLD_28 = 188,
432 FS_ML_KEY_WORLD_29 = 189,
433 FS_ML_KEY_WORLD_30 = 190,
434 FS_ML_KEY_WORLD_31 = 191,
435 FS_ML_KEY_WORLD_32 = 192,
436 FS_ML_KEY_WORLD_33 = 193,
437 FS_ML_KEY_WORLD_34 = 194,
438 FS_ML_KEY_WORLD_35 = 195,
439 FS_ML_KEY_WORLD_36 = 196,
440 FS_ML_KEY_WORLD_37 = 197,
441 FS_ML_KEY_WORLD_38 = 198,
442 FS_ML_KEY_WORLD_39 = 199,
443 FS_ML_KEY_WORLD_40 = 200,
444 FS_ML_KEY_WORLD_41 = 201,
445 FS_ML_KEY_WORLD_42 = 202,
446 FS_ML_KEY_WORLD_43 = 203,
447 FS_ML_KEY_WORLD_44 = 204,
448 FS_ML_KEY_WORLD_45 = 205,
449 FS_ML_KEY_WORLD_46 = 206,
450 FS_ML_KEY_WORLD_47 = 207,
451 FS_ML_KEY_WORLD_48 = 208,
452 FS_ML_KEY_WORLD_49 = 209,
453 FS_ML_KEY_WORLD_50 = 210,
454 FS_ML_KEY_WORLD_51 = 211,
455 FS_ML_KEY_WORLD_52 = 212,
456 FS_ML_KEY_WORLD_53 = 213,
457 FS_ML_KEY_WORLD_54 = 214,
458 FS_ML_KEY_WORLD_55 = 215,
459 FS_ML_KEY_WORLD_56 = 216,
460 FS_ML_KEY_WORLD_57 = 217,
461 FS_ML_KEY_WORLD_58 = 218,
462 FS_ML_KEY_WORLD_59 = 219,
463 FS_ML_KEY_WORLD_60 = 220,
464 FS_ML_KEY_WORLD_61 = 221,
465 FS_ML_KEY_WORLD_62 = 222,
466 FS_ML_KEY_WORLD_63 = 223,
467 FS_ML_KEY_WORLD_64 = 224,
468 FS_ML_KEY_WORLD_65 = 225,
469 FS_ML_KEY_WORLD_66 = 226,
470 FS_ML_KEY_WORLD_67 = 227,
471 FS_ML_KEY_WORLD_68 = 228,
472 FS_ML_KEY_WORLD_69 = 229,
473 FS_ML_KEY_WORLD_70 = 230,
474 FS_ML_KEY_WORLD_71 = 231,
475 FS_ML_KEY_WORLD_72 = 232,
476 FS_ML_KEY_WORLD_73 = 233,
477 FS_ML_KEY_WORLD_74 = 234,
478 FS_ML_KEY_WORLD_75 = 235,
479 FS_ML_KEY_WORLD_76 = 236,
480 FS_ML_KEY_WORLD_77 = 237,
481 FS_ML_KEY_WORLD_78 = 238,
482 FS_ML_KEY_WORLD_79 = 239,
483 FS_ML_KEY_WORLD_80 = 240,
484 FS_ML_KEY_WORLD_81 = 241,
485 FS_ML_KEY_WORLD_82 = 242,
486 FS_ML_KEY_WORLD_83 = 243,
487 FS_ML_KEY_WORLD_84 = 244,
488 FS_ML_KEY_WORLD_85 = 245,
489 FS_ML_KEY_WORLD_86 = 246,
490 FS_ML_KEY_WORLD_87 = 247,
491 FS_ML_KEY_WORLD_88 = 248,
492 FS_ML_KEY_WORLD_89 = 249,
493 FS_ML_KEY_WORLD_90 = 250,
494 FS_ML_KEY_WORLD_91 = 251,
495 FS_ML_KEY_WORLD_92 = 252,
496 FS_ML_KEY_WORLD_93 = 253,
497 FS_ML_KEY_WORLD_94 = 254,
498 FS_ML_KEY_WORLD_95 = 255,
499
500 FS_ML_KEY_KP0 = 256,
501 FS_ML_KEY_KP1 = 257,
502 FS_ML_KEY_KP2 = 258,
503 FS_ML_KEY_KP3 = 259,
504 FS_ML_KEY_KP4 = 260,
505 FS_ML_KEY_KP5 = 261,
506 FS_ML_KEY_KP6 = 262,
507 FS_ML_KEY_KP7 = 263,
508 FS_ML_KEY_KP8 = 264,
509 FS_ML_KEY_KP9 = 265,
510 FS_ML_KEY_KP_PERIOD = 266,
511 FS_ML_KEY_KP_DIVIDE = 267,
512 FS_ML_KEY_KP_MULTIPLY = 268,
513 FS_ML_KEY_KP_MINUS = 269,
514 FS_ML_KEY_KP_PLUS = 270,
515 FS_ML_KEY_KP_ENTER = 271,
516 FS_ML_KEY_KP_EQUALS = 272,
517
518 FS_ML_KEY_UP = 273,
519 FS_ML_KEY_DOWN = 274,
520 FS_ML_KEY_RIGHT = 275,
521 FS_ML_KEY_LEFT = 276,
522 FS_ML_KEY_INSERT = 277,
523 FS_ML_KEY_HOME = 278,
524 FS_ML_KEY_END = 279,
525 FS_ML_KEY_PAGEUP = 280,
526 FS_ML_KEY_PAGEDOWN = 281,
527
528 FS_ML_KEY_F1 = 282,
529 FS_ML_KEY_F2 = 283,
530 FS_ML_KEY_F3 = 284,
531 FS_ML_KEY_F4 = 285,
532 FS_ML_KEY_F5 = 286,
533 FS_ML_KEY_F6 = 287,
534 FS_ML_KEY_F7 = 288,
535 FS_ML_KEY_F8 = 289,
536 FS_ML_KEY_F9 = 290,
537 FS_ML_KEY_F10 = 291,
538 FS_ML_KEY_F11 = 292,
539 FS_ML_KEY_F12 = 293,
540 FS_ML_KEY_F13 = 294,
541 FS_ML_KEY_F14 = 295,
542 FS_ML_KEY_F15 = 296,
543
544 FS_ML_KEY_NUMLOCK = 300,
545 FS_ML_KEY_CAPSLOCK = 301,
546 FS_ML_KEY_SCROLLOCK = 302,
547 FS_ML_KEY_RSHIFT = 303,
548 FS_ML_KEY_LSHIFT = 304,
549 FS_ML_KEY_RCTRL = 305,
550 FS_ML_KEY_LCTRL = 306,
551 FS_ML_KEY_RALT = 307,
552 FS_ML_KEY_LALT = 308,
553 #if 0
554 FS_ML_KEY_RMETA = 309,
555 FS_ML_KEY_LMETA = 310,
556 #endif
557 FS_ML_KEY_LSUPER = 311,
558 FS_ML_KEY_RSUPER = 312,
559 FS_ML_KEY_MODE = 313,
560 FS_ML_KEY_COMPOSE = 314,
561 FS_ML_KEY_HELP = 315,
562 FS_ML_KEY_PRINT = 316,
563 FS_ML_KEY_SYSREQ = 317,
564 FS_ML_KEY_BREAK = 318,
565 FS_ML_KEY_MENU = 319,
566 FS_ML_KEY_POWER = 320,
567 FS_ML_KEY_EURO = 321,
568 FS_ML_KEY_UNDO = 322,
569
570 FS_ML_KEY_NEW_SECTION,
571 FS_ML_KEY_VOLUMEUP,
572 FS_ML_KEY_VOLUMEDOWN,
573 FS_ML_KEY_MUTE,
574 FS_ML_KEY_AUDIONEXT,
575 FS_ML_KEY_AUDIOPREV,
576 FS_ML_KEY_AUDIOSTOP,
577 FS_ML_KEY_AUDIOPLAY,
578
579 FS_ML_KEY_APP1,
580 FS_ML_KEY_APP2,
581
582 FS_ML_KEY_ACHOME,
583 FS_ML_KEY_MAIL,
584 FS_ML_KEY_ACSEARCH,
585 FS_ML_KEY_MEDIASELECT,
586
587 FS_ML_KEY_LAST
588 } fs_ml_key;
589
590 typedef enum {
591 FS_ML_KEY_MOD_NONE = 0x0000,
592 FS_ML_KEY_MOD_LSHIFT = 0x0001,
593 FS_ML_KEY_MOD_RSHIFT = 0x0002,
594
595 FS_ML_KEY_MOD_F11 = 0x0004,
596 FS_ML_KEY_MOD_F12 = 0x0010,
597 FS_ML_KEY_MOD_SPECIAL = 0x0020,
598
599 FS_ML_KEY_MOD_LCTRL = 0x0040,
600 FS_ML_KEY_MOD_RCTRL = 0x0080,
601 FS_ML_KEY_MOD_LALT = 0x0100,
602 FS_ML_KEY_MOD_RALT = 0x0200,
603 FS_ML_KEY_MOD_LMETA = 0x0400,
604 FS_ML_KEY_MOD_RMETA = 0x0800,
605 FS_ML_KEY_MOD_NUM = 0x1000,
606 FS_ML_KEY_MOD_CAPS = 0x2000,
607 FS_ML_KEY_MOD_MODE = 0x4000,
608 FS_ML_KEY_MOD_RESERVED = 0x8000
609 } fs_ml_key_mod;
610
611 #define FS_ML_KEY_MOD_CTRL (FS_ML_KEY_MOD_LCTRL | FS_ML_KEY_MOD_RCTRL)
612 #define FS_ML_KEY_MOD_SHIFT (FS_ML_KEY_MOD_LSHIFT | FS_ML_KEY_MOD_RSHIFT)
613 #define FS_ML_KEY_MOD_ALT (FS_ML_KEY_MOD_LALT | FS_ML_KEY_MOD_RALT)
614 #define FS_ML_KEY_MOD_META (FS_ML_KEY_MOD_LMETA | FS_ML_KEY_MOD_RMETA)
615
616 #ifdef __cplusplus
617 }
618 #endif
619
620 #endif // LIBFSML_ML_H_
621