system/core
Revisão | 168ebbdc9299848b21a5a9b1581b57c9260bae18 (tree) |
---|---|
Hora | 2011-12-19 15:43:01 |
Autor | Chih-Wei Huang <cwhuang@linu...> |
Commiter | Chih-Wei Huang |
init: builtins: Add 'setkeycode' command to init.rc parser
The command is used to set an entry into the kernel's scancode-to-keycode map.
Change-Id: If772b3590c08d3696ff9d015f1faf0e75405e262
@@ -87,7 +87,7 @@ static int insmod(const char *filename, char *options) | ||
87 | 87 | return ret; |
88 | 88 | } |
89 | 89 | |
90 | -static int setkey(struct kbentry *kbe) | |
90 | +static int kbioctl(int cmd, void *data) | |
91 | 91 | { |
92 | 92 | int fd, ret; |
93 | 93 |
@@ -95,7 +95,7 @@ static int setkey(struct kbentry *kbe) | ||
95 | 95 | if (fd < 0) |
96 | 96 | return -1; |
97 | 97 | |
98 | - ret = ioctl(fd, KDSKBENT, kbe); | |
98 | + ret = ioctl(fd, cmd, data); | |
99 | 99 | |
100 | 100 | close(fd); |
101 | 101 | return ret; |
@@ -473,7 +473,23 @@ int do_setkey(int nargs, char **args) | ||
473 | 473 | kbe.kb_table = strtoul(args[1], 0, 0); |
474 | 474 | kbe.kb_index = strtoul(args[2], 0, 0); |
475 | 475 | kbe.kb_value = strtoul(args[3], 0, 0); |
476 | - return setkey(&kbe); | |
476 | + return kbioctl(KDSKBENT, &kbe); | |
477 | +} | |
478 | + | |
479 | +int do_setkeycode(int nargs, char **args) | |
480 | +{ | |
481 | + struct kbkeycode kbk; | |
482 | + unsigned int sc, kc; | |
483 | + sc = strtoul(args[1], 0, 0); | |
484 | + if (sc >= 0xe000) { | |
485 | + sc -= 0xe000; | |
486 | + sc += 128; | |
487 | + } | |
488 | + kc = strtoul(args[2], 0, 0); | |
489 | + kbk.scancode = sc; | |
490 | + kbk.keycode = kc; | |
491 | + /* sc, kc may be out of range, but we leave the testing to the kernel */ | |
492 | + return kbioctl(KDSETKEYCODE, &kbk); | |
477 | 493 | } |
478 | 494 | |
479 | 495 | int do_setprop(int nargs, char **args) |
@@ -133,6 +133,7 @@ int lookup_keyword(const char *s) | ||
133 | 133 | if (!strcmp(s, "ervice")) return K_service; |
134 | 134 | if (!strcmp(s, "etenv")) return K_setenv; |
135 | 135 | if (!strcmp(s, "etkey")) return K_setkey; |
136 | + if (!strcmp(s, "etkeycode")) return K_setkeycode; | |
136 | 137 | if (!strcmp(s, "etprop")) return K_setprop; |
137 | 138 | if (!strcmp(s, "etrlimit")) return K_setrlimit; |
138 | 139 | if (!strcmp(s, "ocket")) return K_socket; |
@@ -17,6 +17,7 @@ int do_restart(int nargs, char **args); | ||
17 | 17 | int do_rm(int nargs, char **args); |
18 | 18 | int do_rmdir(int nargs, char **args); |
19 | 19 | int do_setkey(int nargs, char **args); |
20 | +int do_setkeycode(int nargs, char **args); | |
20 | 21 | int do_setprop(int nargs, char **args); |
21 | 22 | int do_setrlimit(int nargs, char **args); |
22 | 23 | int do_start(int nargs, char **args); |
@@ -66,6 +67,7 @@ enum { | ||
66 | 67 | KEYWORD(service, SECTION, 0, 0) |
67 | 68 | KEYWORD(setenv, OPTION, 2, 0) |
68 | 69 | KEYWORD(setkey, COMMAND, 0, do_setkey) |
70 | + KEYWORD(setkeycode, COMMAND, 2, do_setkeycode) | |
69 | 71 | KEYWORD(setprop, COMMAND, 2, do_setprop) |
70 | 72 | KEYWORD(setrlimit, COMMAND, 3, do_setrlimit) |
71 | 73 | KEYWORD(socket, OPTION, 0, 0) |
@@ -185,6 +185,9 @@ mount <type> <device> <dir> [ <mountoption> ]* | ||
185 | 185 | setkey |
186 | 186 | TBD |
187 | 187 | |
188 | +setkeycode <scancode> <keycode> | |
189 | + Set an entry into the kernel's scancode-to-keycode map. | |
190 | + | |
188 | 191 | setprop <name> <value> |
189 | 192 | Set system property <name> to <value>. |
190 | 193 |