| <!-- |
| Copyright 2011 The Android Open Source Project |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| # Input Device Configuration Files # |
| |
| Input device configuration files (`.idc` files) contain device-specific |
| configuration properties that affect the behavior of input devices. |
| |
| Input device configuration files are typically not necessary for standard |
| peripherals such as HID keyboards and mice since the default system behavior |
| usually ensures that they will work out of the box. On the other hand, |
| built-in embedded devices, particularly touch screens, almost always |
| require input device configuration files to specify their behavior. |
| |
| ## Rationale ## |
| |
| Android automatically detects and configures most input device capabilities |
| based on the event types and properties that are reported by the associated |
| Linux kernel input device driver. |
| |
| For example, if an input device supports the `EV_REL` event type and codes |
| `REL_X` and `REL_Y` as well as the `EV_KEY` event type and `BTN_MOUSE`, |
| then Android will classify the input device as a mouse. The default behavior |
| for a mouse is to present an on-screen cursor which tracks the mouse's movements |
| and simulates touches when the mouse is clicked. Although the mouse can |
| be configured differently, the default behavior is usually sufficient for |
| standard mouse peripherals. |
| |
| Certain classes of input devices are more ambiguous. For example, multi-touch |
| touch screens and touch pads both support the `EV_ABS` event type and codes |
| `ABS_MT_POSITION_X` and `ABS_MT_POSITION_Y` at a minimum. However, the intended |
| uses of these devices are quite different and cannot always be determined |
| automatically. Also, additional information is required to make sense of the |
| pressure and size information reported by touch devices. Hence touch devices, |
| especially built-in touch screens, usually need IDC files. |
| |
| ## Location ## |
| |
| Input device configuration files are located by USB vendor, product (and |
| optionally version) id or by input device name. |
| |
| The following paths are consulted in order. |
| |
| * `/system/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc` |
| * `/system/usr/idc/Vendor_XXXX_Product_XXXX.idc` |
| * `/system/usr/idc/DEVICE_NAME.idc` |
| * `/data/system/devices/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc` |
| * `/data/system/devices/idc/Vendor_XXXX_Product_XXXX.idc` |
| * `/data/system/devices/idc/DEVICE_NAME.idc` |
| |
| When constructing a file path that contains the device name, all characters |
| in the device name other than '0'-'9', 'a'-'z', 'A'-'Z', '-' or '_' are replaced by '_'. |
| |
| ## Syntax ## |
| |
| An input device configuration file is a plain text file consisting of property |
| assignments and comments. |
| |
| ### Properties ### |
| |
| Property assignments each consist of a property name, an `=`, a property value, |
| and a new line. Like this: |
| |
| property = value |
| |
| Property names are non-empty literal text identifiers. They must not contain |
| whitespace. Each components of the input system defines a set of properties |
| that are used to configure its function. |
| |
| Property values are non-empty string literals, integers or floating point numbers. |
| They must not contain whitespace or the reserved characters `\` or `"`. |
| |
| Property names and values are case-sensitive. |
| |
| ### Comments ### |
| |
| Comment lines begin with '#' and continue to the end of the line. Like this: |
| |
| # A comment! |
| |
| Blank lines are ignored. |
| |
| ### Example ### |
| |
| # This is an example of an input device configuration file. |
| # It might be used to describe the characteristics of a built-in touch screen. |
| |
| # This is an internal device, not an external peripheral attached to the USB |
| # or Bluetooth bus. |
| device.internal = 1 |
| |
| # The device should behave as a touch screen, which uses the same orientation |
| # as the built-in display. |
| touch.deviceType = touchScreen |
| touch.orientationAware = 1 |
| |
| # Additional calibration properties... |
| # etc... |
| |
| ## Common Properties ## |
| |
| The following properties are common to all input device classes. |
| |
| Refer to the documentation of each input device class for information about the |
| special properties used by each class. |
| |
| #### `device.internal` #### |
| |
| *Definition:* `device.internal` = `0` | `1` |
| |
| Specifies whether the input device is an internal built-in component as opposed to an |
| externally attached (most likely removable) peripheral. |
| |
| * If the value is `0`, the device is external. |
| |
| * If the value is `1`, the device is internal. |
| |
| * If the value is not specified, the default value is `0` for all devices on the |
| USB (BUS_USB) or Bluetooth (BUS_BLUETOOTH) bus, `1` otherwise. |
| |
| This property determines default policy decisions regarding wake events. |
| |
| Internal input devices generally do not wake the display from sleep unless explicitly |
| configured to do so in the key layout file or in a hardcoded policy rule. This |
| distinction prevents key presses and touches from spuriously waking up your phone |
| when it is in your pocket. Usually there are only a small handful of wake keys defined. |
| |
| Conversely, external input devices usually wake the device more aggressively because |
| they are assumed to be turned off or not plugged in during transport. For example, |
| pressing any key on an external keyboard is a good indicator that the user wants the |
| device to wake up and respond. |
| |
| It is important to ensure that the value of the `device.internal` property is set |
| correctly for all internal input devices. |
| |
| ## Validation ## |
| |
| Make sure to validate your input device configuration files using the |
| [Validate Keymaps](/tech/input/validate-keymaps.html) tool. |