1 static void _ecore_fb_event_free_key_down(void *data, void *ev);
2 static void _ecore_fb_event_free_key_up(void *data, void *ev);
4 static const char *_ecore_fb_kbd_syms[128 * 6] =
6 #include "ecore_fb_keytable.h"
9 static const char *_ecore_fb_btn_syms[128] =
124 static int _ecore_fb_kbd_fd = 0;
125 static int _ecore_fb_ctrl = 0;
126 static int _ecore_fb_alt = 0;
127 static int _ecore_fb_shift = 0;
128 static int _ecore_fb_lock = 0;
130 static Ecore_Fd_Handler *_ecore_fb_kbd_fd_handler_handle = NULL;
131 static Eina_Bool _ecore_fb_kbd_fd_handler(void *data, Ecore_Fd_Handler *fd_handler);
134 _ecore_fb_event_free_key_down(void *data __UNUSED__, void *ev)
136 Ecore_Fb_Event_Key_Up *e;
139 if (e->keysymbol) free(e->keysymbol);
140 if (e->key_compose) free(e->key_compose);
145 _ecore_fb_event_free_key_up(void *data __UNUSED__, void *ev)
147 Ecore_Fb_Event_Key_Up *e;
151 if (e->keysymbol) free(e->keysymbol);
152 if (e->key_compose) free(e->key_compose);
157 _ecore_fb_kbd_fd_handler(void *data __UNUSED__, Ecore_Fd_Handler *fd_handler __UNUSED__)
165 v = read(_ecore_fb_kbd_fd, &buf, 1);
166 if (v < 0) return EINA_TRUE;
167 if (v < 1) return EINA_TRUE;
172 Ecore_Fb_Event_Key_Down *e;
174 e = calloc(1, sizeof(Ecore_Fb_Event_Key_Down));
176 if (_ecore_fb_kbd_fd == _ecore_fb_tty_fd)
180 if (_ecore_fb_shift) add = 1;
181 else if (_ecore_fb_lock) add = 2;
182 e->keyname = strdup(_ecore_fb_kbd_syms[(buf & 0x7f) * 6]);
183 e->keysymbol = strdup(_ecore_fb_kbd_syms[((buf & 0x7f) * 6) + add]);
184 e->key_compose = strdup(_ecore_fb_kbd_syms[((buf & 0x7f) * 6) + 3 + add]);
187 e->keyname = strdup(_ecore_fb_btn_syms[buf & 0x7f]);
193 ecore_event_add(ECORE_FB_EVENT_KEY_DOWN, e, _ecore_fb_event_free_key_down, NULL);
194 if (!strcmp(e->keyname, "Control_L"))
196 else if (!strcmp(e->keyname, "Control_R"))
198 else if (!strcmp(e->keyname, "Alt_L"))
200 else if (!strcmp(e->keyname, "Alt_R"))
202 else if (!strcmp(e->keyname, "Shift_L"))
204 else if (!strcmp(e->keyname, "Shift_R"))
206 else if (!strcmp(e->keyname, "Caps_Lock"))
208 else if (!strcmp(e->keyname, "F1")) vt_switch = 0;
209 else if (!strcmp(e->keyname, "F2")) vt_switch = 1;
210 else if (!strcmp(e->keyname, "F3")) vt_switch = 2;
211 else if (!strcmp(e->keyname, "F4")) vt_switch = 3;
212 else if (!strcmp(e->keyname, "F5")) vt_switch = 4;
213 else if (!strcmp(e->keyname, "F6")) vt_switch = 5;
214 else if (!strcmp(e->keyname, "F7")) vt_switch = 6;
215 else if (!strcmp(e->keyname, "F8")) vt_switch = 7;
216 else if (!strcmp(e->keyname, "F9")) vt_switch = 8;
217 else if (!strcmp(e->keyname, "F10")) vt_switch = 9;
218 else if (!strcmp(e->keyname, "F11")) vt_switch = 10;
219 else if (!strcmp(e->keyname, "F12")) vt_switch = 11;
220 if (_ecore_fb_ctrl > 2) _ecore_fb_ctrl = 2;
221 if (_ecore_fb_alt > 2) _ecore_fb_alt = 2;
222 if ((vt_switch >= 0) &&
225 _ecore_fb_vt_switch(vt_switch);
230 Ecore_Fb_Event_Key_Up *e;
232 e = calloc(1, sizeof(Ecore_Fb_Event_Key_Up));
234 if (_ecore_fb_kbd_fd == _ecore_fb_tty_fd)
238 if (_ecore_fb_shift) add = 1;
239 else if (_ecore_fb_lock) add = 2;
240 e->keyname = strdup(_ecore_fb_kbd_syms[(buf & 0x7f) * 6]);
241 e->keysymbol = strdup(_ecore_fb_kbd_syms[((buf & 0x7f) * 6) + add]);
242 e->key_compose = strdup(_ecore_fb_kbd_syms[((buf & 0x7f) * 6) + 3 + add]);
245 e->keyname = strdup(_ecore_fb_btn_syms[buf & 0x7f]);
251 ecore_event_add(ECORE_FB_EVENT_KEY_UP, e, _ecore_fb_event_free_key_up, NULL);
252 if (!strcmp(e->keyname, "Control_L"))
254 else if (!strcmp(e->keyname, "Control_R"))
256 else if (!strcmp(e->keyname, "Alt_L"))
258 else if (!strcmp(e->keyname, "Alt_R"))
260 else if (!strcmp(e->keyname, "Shift_L"))
262 else if (!strcmp(e->keyname, "Shift_R"))
264 else if (!strcmp(e->keyname, "Caps_Lock"))
266 if (_ecore_fb_ctrl < 0) _ecore_fb_ctrl = 0;
267 if (_ecore_fb_alt < 0) _ecore_fb_alt = 0;
268 if (_ecore_fb_shift < 0) _ecore_fb_shift = 0;
269 if (_ecore_fb_lock < 0) _ecore_fb_lock = 0;
279 ecore_fb_kbd_init(void)
283 prev_flags = fcntl(_ecore_fb_kbd_fd, F_GETFL);
284 fcntl(_ecore_fb_kbd_fd, F_SETFL, prev_flags | O_NONBLOCK);
285 _ecore_fb_kbd_fd_handler_handle = ecore_main_fd_handler_add(_ecore_fb_kbd_fd,
287 _ecore_fb_kbd_fd_handler, NULL,
289 if(!_ecore_fb_kbd_fd_handler_handle) return 0;
294 ecore_fb_kbd_shutdown(void)
296 if (_ecore_fb_kbd_fd_handler_handle)
297 ecore_main_fd_handler_del(_ecore_fb_kbd_fd_handler_handle);
298 if (_ecore_fb_kbd_fd >= 0) close(_ecore_fb_kbd_fd);
299 _ecore_fb_kbd_fd = 0;
300 _ecore_fb_kbd_fd_handler_handle = NULL;