• R/O
  • HTTP
  • SSH
  • HTTPS

提交

标签
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

system/core


Commit MetaInfo

修订版168ebbdc9299848b21a5a9b1581b57c9260bae18 (tree)
时间2011-12-19 15:43:01
作者Chih-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

更改概述

差异

--- a/init/builtins.c
+++ b/init/builtins.c
@@ -87,7 +87,7 @@ static int insmod(const char *filename, char *options)
8787 return ret;
8888 }
8989
90-static int setkey(struct kbentry *kbe)
90+static int kbioctl(int cmd, void *data)
9191 {
9292 int fd, ret;
9393
@@ -95,7 +95,7 @@ static int setkey(struct kbentry *kbe)
9595 if (fd < 0)
9696 return -1;
9797
98- ret = ioctl(fd, KDSKBENT, kbe);
98+ ret = ioctl(fd, cmd, data);
9999
100100 close(fd);
101101 return ret;
@@ -473,7 +473,23 @@ int do_setkey(int nargs, char **args)
473473 kbe.kb_table = strtoul(args[1], 0, 0);
474474 kbe.kb_index = strtoul(args[2], 0, 0);
475475 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);
477493 }
478494
479495 int do_setprop(int nargs, char **args)
--- a/init/init_parser.c
+++ b/init/init_parser.c
@@ -133,6 +133,7 @@ int lookup_keyword(const char *s)
133133 if (!strcmp(s, "ervice")) return K_service;
134134 if (!strcmp(s, "etenv")) return K_setenv;
135135 if (!strcmp(s, "etkey")) return K_setkey;
136+ if (!strcmp(s, "etkeycode")) return K_setkeycode;
136137 if (!strcmp(s, "etprop")) return K_setprop;
137138 if (!strcmp(s, "etrlimit")) return K_setrlimit;
138139 if (!strcmp(s, "ocket")) return K_socket;
--- a/init/keywords.h
+++ b/init/keywords.h
@@ -17,6 +17,7 @@ int do_restart(int nargs, char **args);
1717 int do_rm(int nargs, char **args);
1818 int do_rmdir(int nargs, char **args);
1919 int do_setkey(int nargs, char **args);
20+int do_setkeycode(int nargs, char **args);
2021 int do_setprop(int nargs, char **args);
2122 int do_setrlimit(int nargs, char **args);
2223 int do_start(int nargs, char **args);
@@ -66,6 +67,7 @@ enum {
6667 KEYWORD(service, SECTION, 0, 0)
6768 KEYWORD(setenv, OPTION, 2, 0)
6869 KEYWORD(setkey, COMMAND, 0, do_setkey)
70+ KEYWORD(setkeycode, COMMAND, 2, do_setkeycode)
6971 KEYWORD(setprop, COMMAND, 2, do_setprop)
7072 KEYWORD(setrlimit, COMMAND, 3, do_setrlimit)
7173 KEYWORD(socket, OPTION, 0, 0)
--- 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