Android-x86
Fork
Donation

  • R/O
  • HTTP
  • SSH
  • HTTPS

system-core: Commit

system/core


Commit MetaInfo

Revisión624de940c56ca114c34a91493cd122f243fc4c81 (tree)
Tiempo2011-02-14 17:42:34
AutorChih-Wei Huang <cwhuang@linu...>
CommiterChih-Wei Huang

Log Message

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

Cambiar Resumen

Diferencia incremental

--- a/init/builtins.c
+++ b/init/builtins.c
@@ -82,7 +82,7 @@ static int insmod(const char *filename, char *options)
8282 return ret;
8383 }
8484
85-static int setkey(struct kbentry *kbe)
85+static int kbioctl(int cmd, void *data)
8686 {
8787 int fd, ret;
8888
@@ -90,12 +90,22 @@ static int setkey(struct kbentry *kbe)
9090 if (fd < 0)
9191 return -1;
9292
93- ret = ioctl(fd, KDSKBENT, kbe);
93+ ret = ioctl(fd, cmd, data);
9494
9595 close(fd);
9696 return ret;
9797 }
9898
99+static int setkey(struct kbentry *kbe)
100+{
101+ return kbioctl(KDSKBENT, kbe);
102+}
103+
104+static int setkeycode(struct kbkeycode *kbk)
105+{
106+ return kbioctl(KDSETKEYCODE, kbk);
107+}
108+
99109 static int __ifupdown(const char *interface, int up)
100110 {
101111 struct ifreq ifr;
@@ -363,6 +373,25 @@ int do_setkey(int nargs, char **args)
363373 return setkey(&kbe);
364374 }
365375
376+int do_setkeycode(int nargs, char **args)
377+{
378+ struct kbkeycode kbk;
379+ unsigned int sc, kc;
380+ sc = strtoul(args[1], 0, 0);
381+ if (sc > 127) {
382+ sc -= 0xe000;
383+ sc += 128;
384+ }
385+ kc = strtoul(args[2], 0, 0);
386+ if (sc > 255 || kc > 127) {
387+ ERROR("SCANCODE or KEYCODE out of range");
388+ return -1;
389+ }
390+ kbk.scancode = sc;
391+ kbk.keycode = kc;
392+ return setkeycode(&kbk);
393+}
394+
366395 int do_setprop(int nargs, char **args)
367396 {
368397 property_set(args[1], args[2]);
--- a/init/keywords.h
+++ b/init/keywords.h
@@ -15,6 +15,7 @@ int do_mkdir(int nargs, char **args);
1515 int do_mount(int nargs, char **args);
1616 int do_restart(int nargs, char **args);
1717 int do_setkey(int nargs, char **args);
18+int do_setkeycode(int nargs, char **args);
1819 int do_setprop(int nargs, char **args);
1920 int do_setrlimit(int nargs, char **args);
2021 int do_start(int nargs, char **args);
@@ -60,6 +61,7 @@ enum {
6061 KEYWORD(service, SECTION, 0, 0)
6162 KEYWORD(setenv, OPTION, 2, 0)
6263 KEYWORD(setkey, COMMAND, 0, do_setkey)
64+ KEYWORD(setkeycode, COMMAND, 2, do_setkeycode)
6365 KEYWORD(setprop, COMMAND, 2, do_setprop)
6466 KEYWORD(setrlimit, COMMAND, 3, do_setrlimit)
6567 KEYWORD(socket, OPTION, 0, 0)
--- a/init/parser.c
+++ b/init/parser.c
@@ -184,6 +184,7 @@ int lookup_keyword(const char *s)
184184 if (!strcmp(s, "ervice")) return K_service;
185185 if (!strcmp(s, "etenv")) return K_setenv;
186186 if (!strcmp(s, "etkey")) return K_setkey;
187+ if (!strcmp(s, "etkeycode")) return K_setkeycode;
187188 if (!strcmp(s, "etprop")) return K_setprop;
188189 if (!strcmp(s, "etrlimit")) return K_setrlimit;
189190 if (!strcmp(s, "ocket")) return K_socket;
--- a/init/readme.txt
+++ b/init/readme.txt
@@ -185,6 +185,9 @@ mount <type> <device> <dir> [ <mountoption> ]*
185185 setkey
186186 TBD
187187
188+setkeycode <scancode> <keycode>
189+ Set an entry into the kernel's scancode-to-keycode map.
190+
188191 setprop <name> <value>
189192 Set system property <name> to <value>.
190193
Show on old repository browser