Mobileaction Input Devices Driver

Google is committed to advancing racial equity for Black communities. See how.

Sep 10, 2016 The package provides the installation files for Microsoft USB Input Device Driver version 10.0.4. If the driver is already installed on your system, updating (overwrite-installing) may fix various issues, add new functions, or just upgrade to the available version. The package provides the installation files for Microsoft USB Input Device Driver version 10.0.4. If the driver is already installed on your system, updating (overwrite-installing) may fix various issues, add new functions, or just upgrade to the available version. Go to Device Manager (right click on My Computer, choose Manage and then find Device Manager in the left panel), or right click on Start Menu for Windows 10 and select Device Manager 3.

Input device configuration files (.idc files) contain device-specificconfiguration properties that affect the behavior of input devices.

Input device configuration files are typically not necessary for standardperipherals such as HID keyboards and mice since the default system behaviorusually ensures that they will work out of the box. On the other hand,built-in embedded devices, particularly touch screens, almost alwaysrequire input device configuration files to specify their behavior.

Mobileaction Input Devices Driver

Rationale

Android automatically detects and configures most input device capabilitiesbased on the event types and properties that are reported by the associatedLinux kernel input device driver.

For example, if an input device supports the EV_REL event type and codesREL_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 behaviorfor a mouse is to present an on-screen cursor which tracks the mouse's movementsand simulates touches when the mouse is clicked. Although the mouse canbe configured differently, the default behavior is usually sufficient forstandard mouse peripherals.

Certain classes of input devices are more ambiguous. For example, multi-touchtouch screens and touch pads both support the EV_ABS event type and codesABS_MT_POSITION_X and ABS_MT_POSITION_Y at a minimum. However, the intendeduses of these devices are quite different and cannot always be determinedautomatically. Also, additional information is required to make sense of thepressure 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.

  • /odm/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
  • /vendor/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
  • /system/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
  • /data/system/devices/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
  • /odm/usr/idc/Vendor_XXXX_Product_XXXX.idc
  • /vendor/usr/idc/Vendor_XXXX_Product_XXXX.idc
  • /system/usr/idc/Vendor_XXXX_Product_XXXX.idc
  • /data/system/devices/idc/Vendor_XXXX_Product_XXXX.idc
  • /odm/usr/idc/device-name.idc
  • /vendor/usr/idc/device-name.idc
  • /system/usr/idc/device-name.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 propertyassignments and comments.

Properties

Mapper

Property assignments each consist of a property name, an =, a property value,and a new line. Like this:

Property names are non-empty literal text identifiers. They must not containwhitespace. Each components of the input system defines a set of propertiesthat 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.

Comment lines begin with '#' and continue to the end of the line. Like this:

Blank lines are ignored.

Example

Common properties

The following property is common to all input device classes.

Refer to the documentation of each input device class for information about thespecial properties used by each class.

device.internal

Definition:device.internal = 01

Specifies whether the input device is an internal built-in component as opposed to anexternally 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.

Output

This property determines default policy decisions regarding wake events.

Internal input devices generally do not wake the display from sleep unless explicitlyconfigured to do so in the key layout file or in a hardcoded policy rule. Thisdistinction prevents key presses and touches from spuriously waking up your phonewhen 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 becausethey 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 thedevice to wake up and respond.

It is important to ensure that the value of the device.internal property is setcorrectly for all internal input devices.

Validation

Make sure to validate your input device configuration files using theValidate Keymaps tool.

Google is committed to advancing racial equity for Black communities. See how.

The Android input subsystem nominally consists of an event pipelinethat traverses multiple layers of the system.

Input Pipeline

At the lowest layer, the physical input device produces signals thatdescribe state changes such as key presses and touch contact points.The device firmware encodes and transmits these signals in some waysuch as by sending USB HID reports to the system or by producinginterrupts on an I2C bus.

The signals are then decoded by a device driver in the Linux kernel.The Linux kernel provides drivers for many standard peripherals,particularly those that adhere to the HID protocol. However, an OEMmust often provide custom drivers for embedded devices that aretightly integrated into the system at a low-level, such as touch screens.

The input device drivers are responsible for translating device-specificsignals into a standard input event format, by way of the Linuxinput protocol. The Linux input protocol defines a standard set ofevent types and codes in the linux/input.h kernel header file.In this way, components outside the kernel do not need to care aboutthe details such as physical scan codes, HID usages, I2C messages,GPIO pins, and the like.

Next, the Android EventHub component reads input events from the kernelby opening the evdev driver associated with each input device.The Android InputReader component then decodes the input eventsaccording to the device class and produces a stream of Android inputevents. As part of this process, the Linux input protocol event codesare translated into Android event codes according to theinput device configuration, keyboard layout files, and variousmapping tables.

Finally, the InputReader sends input events to the InputDispatcherwhich forwards them to the appropriate window.

Control Points

There are several stages in the input pipeline which effect controlover the behavior of the input device.

Driver and Firmware Configuration

Input device drivers frequently configure the behavior of the inputdevice by setting parameters in registers or even uploading thefirmware itself. This is particularly the case for embeddeddevices such as touch screens where a large part of the calibrationprocess involves tuning these parameters or fixing the firmwareto provide the desired accuracy and responsiveness and to suppressnoise.

Driver configuration options are often specified as module parametersin the kernel board support package (BSP) so that the same drivercan support multiple different hardware implementations.

This documentation does attempt to describe driver or firmwareconfiguration, but it does offer guidance as to device calibrationin general.

Board Configuration Properties

The kernel board support package (BSP) may export board configurationproperties via SysFS that are used by the Android InputReader component,such as the placement of virtual keys on a touch screen.

Refer to the device class sections for details about how differentdevices use board configuration properties.

Resource Overlays

A few input behaviors are configured by way of resource overlaysin config.xml such as the operation of lid switch.

Here are a few examples:

  • config_lidKeyboardAccessibility: Specifies the effect of the lid switch on whether the hardware keyboard is accessible or hidden.

  • config_lidNavigationAccessibility: Specifies the effect of the lid switch on whether the trackpad is accessible or hidden.

  • config_longPressOnPowerBehavior: Specifies what should happen when the user holds down the power button.

  • config_lidOpenRotation: Specifies the effect of the lid switch on screen orientation.

Refer to the documentation within frameworks/base/core/res/res/values/config.xmlfor details about each configuration option.

Key Maps

Key maps are used by the Android EventHub and InputReader componentsto configure the mapping from Linux event codes to Android event codesfor keys, joystick buttons and joystick axes. The mapping maybe device or language dependent.

Refer to the device class sections for details about how differentdevices use key maps.

Input Device Configuration Files

Input device configuration files are used by the Android EventHub andInputReader components to configure special device characteristicssuch as how touch size information is reported.

Refer to the device class sections for details about how differentdevices use input device configuration maps.

Understanding HID Usages and Event Codes

Mobileaction

There are often several different identifiers used to refer to anygiven key on a keyboard, button on a game controller, joystick axisor other control. The relationships between these identifiersare not always the same: they are dependent on a set of mapping tables,some of which are fixed, and some which vary based on characteristicsof the device, the device driver, the current locale, the systemconfiguration, user preferences and other factors.

Physical Scan Code

A physical scan code is a device-specific identifier that is associatedwith each key, button or other control. Because physical scan codesoften vary from one device to another, the firmware or device driveris responsible for mapping them to standard identifiers such asHID Usages or Linux key codes.

Mobile Action Input Devices Driver Windows 10

Scan codes are mainly of interest for keyboards. Other devicestypically communicate at a low-level using GPIO pins, I2C messagesor other means. Consequently, the upper layers of the softwarestack rely on the device drivers to make sense of what is going on.

HID Usage

A HID usage is a standard identifier that is used to report thestate of a control such as a keyboard key, joystick axis,mouse button, or touch contact point. Most USB and Bluetoothinput devices conform to the HID specification, which enablesthe system to interface with them in a uniform manner.

The Android Framework relies on the Linux kernel HID drivers totranslate HID usage codes into Linux key codes and other identifiers.Therefore HID usages are mainly of interest to peripheral manufacturers.

Linux Key Code

A Linux key code is a standard identifier for a key or button.Linux key codes are defined in the linux/input.h header file usingconstants that begin with the prefix KEY_ or BTN_. The Linuxkernel input drivers are responsible for translating physicalscan codes, HID usages and other device-specific signals into Linuxkey codes and delivering information about them as part ofEV_KEY events.

The Android API sometimes refers to the Linux key code associatedwith a key as its 'scan code'. This is technically incorrect inbut it helps to distinguish Linux key codes from Android key codesin the API.

Linux Relative or Absolute Axis Code

A Linux relative or absolute axis code is a standard identifierfor reporting relative movements or absolute positions along anaxis, such as the relative movements of a mouse along its X axisor the absolute position of a joystick along its X axis.Linux axis code are defined in the linux/input.h header file usingconstants that begin with the prefix REL_ or ABS_. The Linuxkernel input drivers are responsible for translating HID usagesand other device-specific signals into Linux axis codes anddelivering information about them as part of EV_REL andEV_ABS events.

Linux Switch Code

A Linux switch code is a standard identifier for reporting thestate of a switch on a device, such as a lid switch. Linuxswitch codes are defined in the linux/input.h header fileusing constants that begin with the prefix SW_. The Linuxkernel input drivers report switch state changes as EV_SW events.

Android applications generally do not receive events from switches,but the system may use them internally to control variousdevice-specific functions.

Android Key Code

An Android key code is a standard identifier defined in the AndroidAPI for indicating a particular key such as 'HOME'. Android key codesare defined by the android.view.KeyEvent class as constants thatbegin with the prefix KEYCODE_.

The key layout specifies how Linux key codes are mapped to Androidkey codes. Different key layouts may be used depending on the keyboardmodel, language, country, layout, or special functions.

Combinations of Android key codes are transformed into character codesusing a device and locale specific key character map. For example,when the keys identified as KEYCODE_SHIFT and KEYCODE_A are bothpressed together, the system looks up the combination in the keycharacter map and finds the capital letter 'A', which is then insertedinto the currently focused text widget.

Android Axis Code

An Android axis code is a standard identifier defined in the AndroidAPI for indicating a particular device axis. Android axis codes aredefined by the android.view.MotionEvent class as constants thatbegin with the prefix AXIS_.

The key layout specifies how Linux Axis Codes are mapped to Androidaxis codes. Different key layouts may be used depending on the devicemodel, language, country, layout, or special functions.

Android Meta State

An Android meta state is a standard identifier defined in the AndroidAPI for indicating which modifier keys are pressed. Android meta statesare defined by the android.view.KeyEvent class as constants thatbegin with the prefix META_.

The current meta state is determined by the Android InputReadercomponent which monitors when modifier keys such as KEYCODE_SHIFT_LEFTare pressed / released and sets / resets the appropriate meta state flag.

Mobile Action Input Devices Drivers

The relationship between modifier keys and meta states is hardcodedbut the key layout can alter how the modifier keys themselves aremapped which in turns affects the meta states.

Android Button State

An Android button state is a standard identifier defined in the AndroidAPI for indicating which buttons (on a mouse or stylus) are pressed.Android button states are defined by the android.view.MotionEventclass as constants that begin with the prefix BUTTON_.

Mobile Action Input Devices Driver Updater

The current button state is determined by the Android InputReadercomponent which monitors when buttons (on a mouse or stylus) arepressed / released and sets / resets appropriate button state flag.

Mobileaction Input Devices Driver

The relationship between buttons and button states is hardcoded.

Mobile Action Input Devices Driver Windows 7

Further Reading