1 #include "portability.h"
8 #include <drv/input/keyboard.h>
9 #include <drv/input/mouse.h>
11 #include "../elk_config.h"
14 int jse_event_kbd_i = -1;
15 int jse_event_mouse_i = -1;
18 uint32_t jse_event_kbd_combo = 0;
19 uint32_t jse_event_kbd_lastCode = 0;
20 uint32_t jse_event_kbd_lastTime = 0;
23 uint32_t jse_event_mouse_lastTime = 0;
24 uint32_t jse_event_mouse_x = 0;
25 uint32_t jse_event_mouse_y = 0;
26 uint32_t jse_event_mouse_combo = 0;
29 void jse_event_mouse(
void* data1,
void* data2,
void* data3,
void* data4,
void* data5){
30 jse_event_mouse_x = (int) data4;
31 jse_event_mouse_y = (int) data5;
32 jse_event_mouse_combo = ((int) data1 << 2) | ((int) data2 << 1) | (int) data3;
35 void jse_event_kbd(
void* data1,
void* data2,
void* data3,
void* data4,
void* data5){
36 int keyCode = (int)data1;
37 int keyPress = (int)data2;
39 jse_event_kbd_lastCode = (keyPress?keyCode:0);
40 uint32_t jse_event_kbd_lastTime = 0;
44 if (jse_event_kbd_state[keyCode].Status == 0) {
46 jse_event_kbd_state[keyCode].
End = 0;
47 jse_event_kbd_state[keyCode].
Status = 1;
48 jse_event_kbd_combo |= (1 << keyCode);
53 if (jse_event_kbd_state[keyCode].Status == 1) {
55 jse_event_kbd_state[keyCode].
Status = 0;
57 jse_event_kbd_combo &= ~(1 << keyCode);
64 jsval_t jse_ext_event_test1(
struct js *
js, jsval_t *args,
int nargs) {
66 char* test =
"Test elly net!";
67 qemu_log(
" [JSE] [EXT] [Event] [test1] x:%x", test);
68 return js_mkstr(
js, test,
strlen(test));
71 jsval_t jse_ext_event_kbd_waitForAnyKey(
struct js *
js, jsval_t *args,
int nargs) {
72 if (nargs == 0)
return js_mknum(0);
74 for (
int i = 0; i < nargs; i++){
75 int c = jse_getInt(
js,args[i]);
76 if (jse_event_kbd_lastCode == c){
84 jsval_t jse_ext_event_kbd_waitForAnyKeyOnce(
struct js *
js, jsval_t *args,
int nargs) {
85 if (nargs == 0)
return js_mknum(0);
87 for (
int i = 0; i < nargs; i++){
88 int c = jse_getInt(
js,args[i]);
89 if (jse_event_kbd_lastCode == c){
90 jse_event_kbd_lastCode = 0;
98 jsval_t jse_ext_event_kbd(
struct js *
js, jsval_t *args,
int nargs) {
99 if (nargs != 1)
return js_mknum(jse_event_kbd_lastCode);
100 int c = jse_getInt(
js,args[0]);
101 if (c == 0)
return js_mknum(jse_event_kbd_lastCode);
102 if (c == 1)
return js_mknum(jse_event_kbd_lastTime);
103 if (c == 2)
return js_mknum(jse_event_kbd_combo);
108 jsval_t jse_ext_event_mouse(
struct js *
js, jsval_t *args,
int nargs) {
109 if (nargs != 1)
return js_mknum(jse_event_mouse_combo);
110 int c = jse_getInt(
js,args[0]);
111 if (c == 0)
return js_mknum(jse_event_mouse_combo);
112 if (c == 1)
return js_mknum(jse_event_mouse_x);
113 if (c == 2)
return js_mknum(jse_event_mouse_y);
114 if (c == 3)
return js_mknum(jse_event_mouse_lastTime);
118 jsval_t jse_ext_event_debug(
struct js *
js, jsval_t *args,
int nargs) {
119 if (nargs != 1)
return js_mkundef();
120 int t = js_type(args[0]);
121 int x = jse_getInt(
js,args[0]);
123 const char* str = js_str(
js,args[0]);
124 qemu_log(
" [JSE] [EXT] [Event] [Debug] T:%d | X:%x | (%d) %s", t, x,
strlen(str), str);
130 jse_array_link_dump(arr, 0);
131 jse_array_destroZ(arr,0);
138 void jse_event_config(
struct js*
js){
139 qemu_note(
"[JSE] [EXT] [Event] Registration of functions");
140 js_set(
js, js_glob(
js),
"event_debug", js_mkfun(jse_ext_event_debug));
141 js_set(
js, js_glob(
js),
"event_test1", js_mkfun(jse_ext_event_test1));
142 js_set(
js, js_glob(
js),
"kbd", js_mkfun(jse_ext_event_kbd));
143 js_set(
js, js_glob(
js),
"kbd_waitForAnyKey", js_mkfun(jse_ext_event_kbd_waitForAnyKey));
144 js_set(
js, js_glob(
js),
"kbd_waitForAnyKeyOnce", js_mkfun(jse_ext_event_kbd_waitForAnyKeyOnce));
145 js_set(
js, js_glob(
js),
"mouse", js_mkfun(jse_ext_event_mouse));
147 if (jse_event_kbd_i == -1){
148 jse_event_kbd_i =
RegTrigger(0x0001, &jse_event_kbd);
153 if (jse_event_mouse_i == -1){
154 jse_event_mouse_i =
RegTrigger(0x0003, &jse_event_mouse);
160 keyboardctl(KEYBOARD_ECHO,
false);
161 set_cursor_enabled(
false);
164 void jse_event_destroy(
struct js*
js){
165 qemu_note(
"[JSE] [EXT] [Event] Destroy");
166 if (jse_event_kbd_i != -1){
170 if (jse_event_mouse_i != -1){
175 keyboardctl(KEYBOARD_ECHO,
true);
176 set_cursor_enabled(
true);
size_t strlen(const char *str)
Возращает длину строки
uint32_t End
Когда отпущенно
uint32_t Start
Когда нажато
uint32_t Last
Последний вызов
size_t getTicks()
Получить количество тиков
void OffTrigger(int index)
Выключить триггер
void OnTrigger(int index)
Включить триггер
int RegTrigger(int type, trigger_cmd_t handler)
Регистрация триггера