AI 144166: am: CL 144164 Adding droiddocs/javadocs usage to Pdk-docs to get correct style.
Original author: mritter Merged from: //branches/cupcake/... Automated import of CL 144166
This commit is contained in:
committed by
The Android Open Source Project
parent
9ae6340786
commit
c073ab2871
509
pdk/docs/keymaps_keyboard_input.jd
Executable file
509
pdk/docs/keymaps_keyboard_input.jd
Executable file
@@ -0,0 +1,509 @@
|
||||
page.title=Keymaps and Keyboard Input
|
||||
@jd:body
|
||||
|
||||
<a name="toc"/>
|
||||
<div style="padding:10px">
|
||||
<a href="#androidKeymapIntro">Introduction</a><br/>
|
||||
<a href="#androidKeymapFunctionality">Functionality</a><br/>
|
||||
<a href="#androidKeymapKeyLayoutMapTitle">Key Layout Map</a><br/><div style="padding-left:40px">
|
||||
|
||||
<a href="#androidKeymapKeyLayoutMapSelection">Selection of a Key Layout Map</a><br/>
|
||||
<a href="#androidKeymapKeyLayoutMapFileFormat">File Format</a><br/>
|
||||
<a href="#androidKeymapKeyLayoutMapExample">Example of a Key Layout Map File</a><br/></div>
|
||||
<a href="#androidKeymapKeyCharMap">Key Character Map</a><br/><div style="padding-left:40px">
|
||||
|
||||
<a href="#androidKeymapKeyCharMapSelection">Selection of a Key Character Map</a><br/>
|
||||
<a href="#androidKeymapKeyCharMapFileFormat">File Format</a><br/>
|
||||
<a href="#androidKeymapKeyCharMapExample">Example of a Key Character Map File</a><br/>
|
||||
<a href="#androidKeymapKeyCharMapResourceBinaryFileFormat">Resource Binary File Format</a><br/></div>
|
||||
<a href="#androidKeymapDriverTemplate">Implementing Your Own Driver (Driver Template)</a><br/>
|
||||
<a href="#androidKeymapKeyCharMapSampleImplementation">Sample Implementation</a><br/></div>
|
||||
|
||||
<a name="androidKeymapIntro"></a><h2>Introduction</h2>
|
||||
|
||||
<p>This document describes how keyboard input gets translated into Android actions and how you can customize key layout and key character maps to match the needs of your own device. </p>
|
||||
<p>Android uses the standard Linux input event device (<code>/dev/event0</code>) and driver as described in the <code>linux/input.h</code> kernel header file. For more information regarding standard Linux input drivers, please see <a href="http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.24.y.git;a=blob;f=Documentation/input/input.txt">Linux Input drivers</a> at <a href="http://kernel.org">http://kernel.org</a>.</p>
|
||||
|
||||
|
||||
|
||||
|
||||
<a name="androidKeymapFunctionality"></a><h2>Functionality</h2>
|
||||
|
||||
<p>Android's input event device is structured around an interrupt or polling routine that captures the device-specific scancode and converts it to a standard form acceptable to Linux (as defined in <code>input.h</code>) before passing it to the kernel with <code>input_event()</code>.</p>
|
||||
<p>The keymap driver's other primary function is to establish a probe function that sets up the interrupt or polling function, handles hardware initialization, and attaches the driver to the input subsystem with <code>input_register_device()</code>.</p>
|
||||
<p>The table below describes the steps required to translate from keyboard input to application action: </p>
|
||||
<table border=1>
|
||||
<tbody><tr>
|
||||
<th scope="col">Step</th>
|
||||
<th scope="col">Action</th>
|
||||
<th scope="col">Explanation</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>1.</td>
|
||||
<td>Window manager reads key event from Linux keyboard driver. </td>
|
||||
<td>Events are typically positional. For example, the top-left position on a keypad returns 16 regardless of whether that key is printed with a Q (as on a QWERTY keypad) or an A (as on an AZERTY keypads). This first conversion by the Linux Keyboard Driver yields a scancode (for example, 16).</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2. </td>
|
||||
<td>Window manager maps scancode to keycode.</td>
|
||||
<td>When the window manager reads a key event out of the driver, it maps the scancode to a keycode using a key layout map file. Typically, the keycode is the primary symbol screen-printed on a key. For example, <code>KEYCODE_DPAD_CENTER</code> is the center button on the five-way navigation control. Even though ALT + G generates a "?" character, <code>KEYCODE_G</code> is the keycode.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>3. </td>
|
||||
<td>Window manager sends both the scancode and the keycode to the application.</td>
|
||||
<td>Both the scancode and keycode are handled by the view with focus.
|
||||
How the application interprets both depend on the application.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<a name="androidKeymapKeyLayoutMapTitle"></a><h2>Key Layout Map</h2>
|
||||
|
||||
|
||||
|
||||
<a name="androidKeymapKeyLayoutMapSelection"></a><h3>Selection of a Key Layout Map</h3>
|
||||
|
||||
<p>Key layout maps are installed in <code>/system/usr/keylayout</code> and <code>/data/usr/keylayout</code>.</p>
|
||||
<p>For each keyboard device xxx, set the <code>android.keylayout.xxx</code> system property (see <a href="build_new_device.html">Building New Device</a> for help setting system properties). If you don't specify a keylayout file, Android will default to <code>/system/usr/keylayout/qwerty.kl</code>.</p>
|
||||
|
||||
|
||||
<a name="androidKeymapKeyLayoutMapFileFormat"></a><h3>File Format</h3>
|
||||
|
||||
<p>Key layout maps are stored on the device as UTF-8 text files and have the following characteristics:</p>
|
||||
<p><ul>
|
||||
<li>Comments: The pound symbol (#) denotes a comment and everything after the pound symbol on a line is ignored.</li>
|
||||
<li>Whitespace: All empty lines are ignored.</li>
|
||||
<li>Key definitions: Key definitions follow the syntax <code>key SCANCODE KEYCODE [FLAGS...]</code>, where <code>SCANCODE</code> is a number, <code>KEYCODE</code> is defined in your specific keylayout file (<code>android.keylayout.xxx</code>), and potential <code>FLAGS</code> are defined as follows:
|
||||
<ul><li>SHIFT: While pressed, the shift key modifier is set</li>
|
||||
<li>ALT: While pressed, the alt key modifier is set</li>
|
||||
<li>CAPS: While pressed, the caps lock key modifier is set</li>
|
||||
<li>WAKE: When this key is pressed while the device is asleep, the device will wake up and the key event gets sent to the app.</li>
|
||||
<li>WAKE_DROPPED: When this key is pressed while the device is asleep, the device will wake up and the key event does not get sent to the app.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
|
||||
<a name="androidKeymapKeyLayoutMapExample"></a><h3>Example of a Key Layout Map File</h3>
|
||||
|
||||
<p>The following code comes from <code>android/src/device/product/generic/tuttle2.kl</code> and is an example of a complete key layout file:</p>
|
||||
<pre class="prettify">
|
||||
# Copyright 2007 Google Inc.
|
||||
|
||||
key 2 1
|
||||
key 3 2
|
||||
key 4 3
|
||||
key 5 4
|
||||
key 6 5
|
||||
key 7 6
|
||||
key 8 7
|
||||
key 9 8
|
||||
key 10 9
|
||||
key 11 0
|
||||
key 158 BACK WAKE_DROPPED
|
||||
key 230 SOFT_RIGHT WAKE
|
||||
key 60 SOFT_RIGHT WAKE
|
||||
key 107 ENDCALL WAKE_DROPPED
|
||||
key 62 ENDCALL WAKE_DROPPED
|
||||
key 229 MENU WAKE_DROPPED
|
||||
key 59 MENU WAKE_DROPPED
|
||||
key 228 POUND
|
||||
key 227 STAR
|
||||
key 231 CALL WAKE_DROPPED
|
||||
key 61 CALL WAKE_DROPPED
|
||||
key 232 DPAD_CENTER WAKE_DROPPED
|
||||
key 108 DPAD_DOWN WAKE_DROPPED
|
||||
key 103 DPAD_UP WAKE_DROPPED
|
||||
key 102 HOME WAKE
|
||||
key 105 DPAD_LEFT WAKE_DROPPED
|
||||
key 106 DPAD_RIGHT WAKE_DROPPED
|
||||
key 115 VOLUME_UP
|
||||
key 114 VOLUME_DOWN
|
||||
key 116 POWER WAKE
|
||||
key 212 SLASH
|
||||
|
||||
key 16 Q
|
||||
key 17 W
|
||||
key 18 E
|
||||
key 19 R
|
||||
key 20 T
|
||||
key 21 Y
|
||||
key 22 U
|
||||
key 23 I
|
||||
key 24 O
|
||||
key 25 P
|
||||
|
||||
key 30 A
|
||||
key 31 S
|
||||
key 32 D
|
||||
key 33 F
|
||||
key 34 G
|
||||
key 35 H
|
||||
key 36 J
|
||||
key 37 K
|
||||
key 38 L
|
||||
key 14 DEL
|
||||
|
||||
key 44 Z
|
||||
key 45 X
|
||||
key 46 C
|
||||
key 47 V
|
||||
key 48 B
|
||||
key 49 N
|
||||
key 50 M
|
||||
key 51 COMMA
|
||||
key 52 PERIOD
|
||||
key 28 NEWLINE
|
||||
|
||||
key 56 ALT_LEFT
|
||||
key 42 SHIFT_LEFT
|
||||
key 215 AT
|
||||
key 57 SPACE
|
||||
key 53 SLASH
|
||||
key 127 SYM
|
||||
key 100 ALT_LEFT
|
||||
|
||||
key 399 GRAVE
|
||||
</pre>
|
||||
|
||||
|
||||
<a name="androidKeymapKeyCharMap"></a><h2>Key Character Map</h2>
|
||||
|
||||
|
||||
|
||||
<a name="androidKeymapKeyCharMapSelection"></a><h3>Selection of a Key Character Map</h3>
|
||||
|
||||
<p>Key character maps are installed in <code>/system/usr/keychars</code> and <code>/data/usr/keychars</code>.</p>
|
||||
<p>For each keyboard device xxx, set the <code>android.keychar.xxx</code> system property to the full path of the desired keychar file. If you don't specify a keychar file, Android will default to <code>/system/usr/keychar/qwerty.kl</code>.
|
||||
|
||||
|
||||
<a name="androidKeymapKeyCharMapFileFormat"></a><h3>File Format</h3>
|
||||
|
||||
<p>Key character maps are stored on the device as binary resources in order to reduce loading time. Key character maps have the following characteristics:</p>
|
||||
<p><ul>
|
||||
|
||||
<li>Comments: The pound symbol (#) denotes a comment and everything after the pound symbol on a line is ignored.</li>
|
||||
<li>Whitespace: All empty lines are ignored.</li>
|
||||
<li>Column definitions: Column definitions follow the syntax <code>columns MODIFIERS [...]</code>, where <code>MODIFIERS</code> are defined as follows:
|
||||
<table border=1 cellpadding=2 cellspacing=0>
|
||||
<tbody><tr>
|
||||
<th scope="col">Character in MODIFIERS</th>
|
||||
<th scope="col">Corresponding bit in the modifiers</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>O</td>
|
||||
<td>no modifiers</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>S</td>
|
||||
<td>MODIFIER_SHIFT</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>C</td>
|
||||
<td>MODIFIER_CONTROL</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>L</td>
|
||||
<td>MODIFIER_CAPS_LOCK</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>A</td>
|
||||
<td>MODIFIER_ALT</td>
|
||||
</tr>
|
||||
</table>
|
||||
</li>
|
||||
<li>Key definitions: Key definitions have the syntax <code>key SCANCODE CHARACTER [...]</code> where <code>SCANCODE</code> is a number and <code>CHARACTER</code> values are either UTF-8 characters in quotation marks (for example, "a") or a numeric value that <code>strtol</code> can parse.</li>
|
||||
</ul></p>
|
||||
|
||||
|
||||
<a name="androidKeymapKeyCharMapExample"></a><h3>Example of a Key Character Map File</h3>
|
||||
|
||||
<p>The following code comes from <code>android/src/device/product/generic/tuttle2.kcm</code> and represents a complete key character file:</p>
|
||||
<p>The type line indicates what kind of keyboard your device implements. Possible types include:</p>
|
||||
<p><ul>
|
||||
<li><b>NUMERIC</b>: A numeric (12-key) keyboard.</li>
|
||||
<li><b>Q14</b>: A keyboard that includes all letters but multiple letters per key.</li>
|
||||
<li><b>QWERTY</b>: A keyboard with all letters and possibly numbers. This option applies to all full keyboard configurations, such as AZERTY.</li>
|
||||
</ul>
|
||||
</p>
|
||||
<pre class="prettify">
|
||||
# Copyright 2007 Google Inc.
|
||||
|
||||
[type=QWERTY]
|
||||
|
||||
# keycode base caps fn caps_fn number display_label
|
||||
|
||||
A 'a' 'A' '%' 0x00 '%' 'A'
|
||||
B 'b' 'B' '=' 0x00 '=' 'B'
|
||||
C 'c' 'C' '8' 0x00E7 '8' 'C'
|
||||
D 'd' 'D' '5' 0x00 '5' 'D'
|
||||
E 'e' 'E' '2' 0x0301 '2' 'E'
|
||||
F 'f' 'F' '6' 0x00A5 '6' 'F'
|
||||
G 'g' 'G' '-' '_' '-' 'G'
|
||||
H 'h' 'H' '[' '{' '[' 'H'
|
||||
I 'i' 'I' '$' 0x0302 '$' 'I'
|
||||
J 'j' 'J' ']' '}' ']' 'J'
|
||||
K 'k' 'K' '"' '~' '"' 'K'
|
||||
L 'l' 'L' ''' '`' ''' 'L'
|
||||
M 'm' 'M' '>' 0x00 '>' 'M'
|
||||
N 'n' 'N' '<' 0x0303 '<' 'N'
|
||||
O 'o' 'O' '(' 0x00 '(' 'O'
|
||||
P 'p' 'P' ')' 0x00 ')' 'P'
|
||||
Q 'q' 'Q' '*' 0x0300 '*' 'Q'
|
||||
R 'r' 'R' '3' 0x20AC '3' 'R'
|
||||
S 's' 'S' '4' 0x00DF '4' 'S'
|
||||
T 't' 'T' '+' 0x00A3 '+' 'T'
|
||||
U 'u' 'U' '&' 0x0308 '&' 'U'
|
||||
V 'v' 'V' '9' '^' '9' 'V'
|
||||
W 'w' 'W' '1' 0x00 '1' 'W'
|
||||
X 'x' 'X' '7' 0xEF00 '7' 'X'
|
||||
Y 'y' 'Y' '!' 0x00A1 '!' 'Y'
|
||||
Z 'z' 'Z' '#' 0x00 '#' 'Z'
|
||||
|
||||
COMMA ',' ';' ';' '|' ',' ','
|
||||
PERIOD '.' ':' ':' 0x2026 '.' '.'
|
||||
AT '@' '0' '0' 0x2022 '0' '@'
|
||||
SLASH '/' '?' '?' '\' '/' '/'
|
||||
|
||||
SPACE 0x20 0x20 0x9 0x9 0x20 0x20
|
||||
NEWLINE 0xa 0xa 0xa 0xa 0xa 0xa
|
||||
|
||||
# on pc keyboards
|
||||
TAB 0x9 0x9 0x9 0x9 0x9 0x9
|
||||
0 '0' ')' ')' ')' '0' '0'
|
||||
1 '1' '!' '!' '!' '1' '1'
|
||||
2 '2' '@' '@' '@' '2' '2'
|
||||
3 '3' '#' '#' '#' '3' '3'
|
||||
4 '4' '$' '$' '$' '4' '4'
|
||||
5 '5' '%' '%' '%' '5' '5'
|
||||
6 '6' '^' '^' '^' '6' '6'
|
||||
7 '7' '&' '&' '&' '7' '7'
|
||||
8 '8' '*' '*' '*' '8' '8'
|
||||
9 '9' '(' '(' '(' '9' '9'
|
||||
|
||||
GRAVE '`' '~' '`' '~' '`' '`'
|
||||
MINUS '-' '_' '-' '_' '-' '-'
|
||||
EQUALS '=' '+' '=' '+' '=' '='
|
||||
LEFT_BRACKET '[' '{' '[' '{' '[' '['
|
||||
RIGHT_BRACKET ']' '}' ']' '}' ']' ']'
|
||||
BACKSLASH '\' '|' '\' '|' '\' '\'
|
||||
SEMICOLON ';' ':' ';' ':' ';' ';'
|
||||
APOSTROPHE ''' '"' ''' '"' ''' '''
|
||||
STAR '*' '*' '*' '*' '*' '*'
|
||||
POUND '#' '#' '#' '#' '#' '#'
|
||||
PLUS '+' '+' '+' '+' '+' '+'
|
||||
</pre>
|
||||
|
||||
|
||||
<a name="androidKeymapKeyCharMapResourceBinaryFileFormat"></a><h3>Resource Binary File Format</h3>
|
||||
|
||||
<p>The file snippet above gets converted to the following by the <code>makekcharmap</code> tool as part of the build process. You can <code>mmap</code> this file in and share the approximately 4k of memory that it uses between processes to minimize load time.</p>
|
||||
<table>
|
||||
<tbody><tr>
|
||||
<th scope="col">Offset</th>
|
||||
|
||||
<th scope="col">Size (bytes)</th>
|
||||
<th scope="col">Description</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x00-0x0b</td>
|
||||
<td></td>
|
||||
<td>The ascii value "keycharmap1" including the null character</td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x0c-0x0f</td>
|
||||
<td></td>
|
||||
<td>padding</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x10-0x13</td>
|
||||
|
||||
<td></td>
|
||||
<td>The number of entries in the modifiers table (COLS)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x14-0x17</td>
|
||||
<td></td>
|
||||
<td>The number of entries in the characters table (ROWS)</td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x18-0x1f</td>
|
||||
<td></td>
|
||||
<td>padding</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
|
||||
<td>4*COLS</td>
|
||||
<td>Modifiers table. The modifier mask values that each of the
|
||||
columns in the characters table correspond to.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td>padding to the next 16 byte boundary</td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>4*COLS*ROWS</td>
|
||||
<td>Characters table. The modifier mask values that each of the
|
||||
columns correspond to.</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
|
||||
<a name="androidKeymapDriverTemplate"></a><h2>Implementing Your Own Driver (Driver Template)</h2>
|
||||
|
||||
<p>The following file, <code>pguide_events.c</code>, illustrates how to implement an Android keymap driver.</p>
|
||||
<pre class="prettyprint">
|
||||
/*
|
||||
* pguide_events.c
|
||||
*
|
||||
* ANDROID PORTING GUIDE: INPUT EVENTS DRIVER TEMPLATE
|
||||
*
|
||||
* This template is designed to an example of the functionality
|
||||
* necessary for Android to recieve input events. The PGUIDE_EVENT
|
||||
* macros are meant as pointers indicating where to implement the
|
||||
* hardware specific code necessary for the new device. The existence
|
||||
* of the macros is not meant to trivialize the work required, just as
|
||||
* an indication of where the work needs to be done.
|
||||
*
|
||||
* Copyright 2007, Google Inc.
|
||||
* Based on goldfish-events.c
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
|
||||
|
||||
#define PGUIDE_EVENTS_INTERRUPT do{} while(0)
|
||||
#define PGUIDE_EVENTS_PROBE do{} while(0)
|
||||
|
||||
struct event_dev {
|
||||
struct input_dev *input;
|
||||
int irq;
|
||||
};
|
||||
|
||||
static irqreturn_t pguide_events_interrupt(int irq, void *dev_id)
|
||||
{
|
||||
struct event_dev *edev = dev_id;
|
||||
unsigned type=0, code=0, value=0;
|
||||
|
||||
/* Set up type, code, and value per input.h
|
||||
*/
|
||||
PGUIDE_EVENTS_INTERRUPT;
|
||||
|
||||
input_event(edev->input, type, code, value);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static int pguide_events_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct input_dev *input_dev;
|
||||
struct event_dev *edev;
|
||||
|
||||
printk("*** pguide events probe ***\n");
|
||||
|
||||
edev = kzalloc(sizeof(struct event_dev), GFP_KERNEL);
|
||||
input_dev = input_allocate_device();
|
||||
|
||||
/* Setup edev->irq and do any hardware init */
|
||||
PGUIDE_EVENTS_PROBE;
|
||||
|
||||
if(request_irq(edev->irq, pguide_events_interrupt, 0,
|
||||
"pguide_events", edev) < 0) {
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/* indicate that we generate key events */
|
||||
set_bit(EV_KEY, input_dev->evbit);
|
||||
set_bit(EV_REL, input_dev->evbit);
|
||||
set_bit(EV_ABS, input_dev->evbit);
|
||||
|
||||
/* indicate that we generate *any* key event */
|
||||
|
||||
bitmap_fill(input_dev->keybit, KEY_MAX);
|
||||
bitmap_fill(input_dev->relbit, REL_MAX);
|
||||
bitmap_fill(input_dev->absbit, ABS_MAX);
|
||||
|
||||
platform_set_drvdata(pdev, edev);
|
||||
|
||||
input_dev->name = "pguide_events";
|
||||
input_dev->private = edev;
|
||||
input_dev->cdev.dev = &pdev->dev;
|
||||
|
||||
input_register_device(input_dev);
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
kfree(edev);
|
||||
input_free_device(input_dev);
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static struct platform_driver pguide_events_driver = {
|
||||
.probe = pguide_events_probe,
|
||||
.driver = {
|
||||
.name = "pguide_events",
|
||||
},
|
||||
};
|
||||
|
||||
static int __devinit pguide_events_init(void)
|
||||
{
|
||||
return platform_driver_register(&pguide_events_driver);
|
||||
}
|
||||
|
||||
|
||||
static void __exit pguide_events_exit(void)
|
||||
{
|
||||
}
|
||||
|
||||
module_init(pguide_events_init);
|
||||
module_exit(pguide_events_exit);
|
||||
|
||||
MODULE_DESCRIPTION("Pguide Event Device");
|
||||
MODULE_LICENSE("GPL");
|
||||
</pre>
|
||||
|
||||
|
||||
<a name="androidKeymapKeyCharMapSampleImplementation"></a><h2>Sample Implementation</h2>
|
||||
|
||||
<p>Assume the following for the setup of a new keypad device:</p>
|
||||
<pre class="prettify">
|
||||
android.keylayout.partnerxx_keypad = /system/usr/keylayout/partnerxx_keypad.kl
|
||||
android.keychar.partnerxx_keypad = /system/usr/keychars/partnerxx.kcm
|
||||
</pre>
|
||||
<p>The following example log file indicates that you have correctly registered the new keypad:</p>
|
||||
<pre class="prettify">
|
||||
I/EventHub( 1548): New device: path=/dev/input/event0 name=partnerxx_keypad id=0x10000 (of 0x1) index=1 fd=30
|
||||
I/EventHub( 1548): new keyboard input device added, name = partnerxx_keypad
|
||||
D/WindowManager( 1548): Starting input thread.
|
||||
D/WindowManager( 1548): Startup complete!
|
||||
I/EventHub( 1548): New keyboard: name=partnerxx_keypad
|
||||
keymap=partnerxx_keypad.kl
|
||||
keymapPath=/system/usr/keychars/partnerxx_keypad.kcm.bin
|
||||
I/ServiceManager( 1535): ServiceManager: addService(window, 0x13610)
|
||||
I/EventHub( 1548): Reporting device opened: id=0x10000, name=/dev/input/event0
|
||||
I/KeyInputQueue( 1548): Device added: id=0x10000, name=partnerxx_keypad, classes=1
|
||||
I/KeyInputQueue( 1548): Keymap: partnerxx_keypad.kl
|
||||
</pre>
|
||||
<p>The snippet above contains artificial line breaks to maintain a print-friendly document.</p>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user