Файлы конфигурации устройств ввода (файлы .idc) содержат свойства конфигурации, относящиеся к определенному устройству и влияющие на его работу.
Файлы конфигурации устройств ввода обычно не нужны для стандартных периферийных устройств, таких как HID-клавиатуры и мыши, поскольку поведение системы по умолчанию обычно обеспечивает их работу без дополнительной настройки. С другой стороны, встроенные устройства, особенно сенсорные экраны, почти всегда требуют файлов конфигурации устройств ввода для определения их поведения.
Обоснование
Android автоматически определяет и настраивает большинство возможностей устройств ввода на основе типов событий и свойств, которые передаются связанным драйвером устройства ввода ядра Linux.
Например, если устройство ввода поддерживает тип события EV_REL и коды REL_X и REL_Y, а также тип события EV_KEY и код BTN_MOUSE, то Android классифицирует устройство ввода как мышь. Режим работы по умолчанию для мыши — это отображение экранного курсора, который отслеживает движения мыши и имитирует касания при нажатии. Хотя мышь можно настроить по-разному, для стандартных периферийных устройств обычно достаточно режима работы по умолчанию.
Некоторые классы устройств ввода более неоднозначны. Например, сенсорные экраны и панели с поддержкой нескольких касаний поддерживают тип события EV_ABS и коды ABS_MT_POSITION_X и ABS_MT_POSITION_Y. Однако эти устройства предназначены для разных целей, и их назначение не всегда можно определить автоматически. Кроме того, для понимания информации о давлении и размере, сообщаемой сенсорными устройствами, требуется дополнительная информация. Поэтому для сенсорных устройств, особенно встроенных сенсорных экранов, обычно требуются файлы IDC.
Местоположение
Файлы конфигурации устройств ввода находятся по идентификатору продавца, продукта (и, при необходимости, версии) USB или по названию устройства ввода.
Поиск выполняется в следующем порядке:
/product/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc/system_ext/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc/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/product/usr/idc/Vendor_XXXX_Product_XXXX.idc/system_ext/usr/idc/Vendor_XXXX_Product_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/product/usr/idc/device-name.idc/system_ext/usr/idc/device-name.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
При создании пути к файлу, содержащему название устройства, все символы в названии устройства, кроме цифр от 0 до 9, букв латинского алфавита и дефиса, заменяются на символ подчеркивания.
Синтаксис
Файл конфигурации устройства ввода – это обычный текстовый файл, состоящий из назначений свойств и комментариев.
Свойства
Каждое назначение свойства состоит из названия свойства, символа =, значения свойства и новой строки. Пример:
property = value
Названия свойств – это непустые текстовые идентификаторы. Они не должны содержать пробелы. Каждый компонент системы ввода определяет набор свойств, которые используются для настройки его функции.
Значения свойств – это непустые строковые литералы, целые числа или числа с плавающей запятой.
В них не должно быть пробелов и зарезервированных символов \ и ".
В названиях и значениях свойств учитывается регистр.
Комментарии
Строки комментариев начинаются с символа # и продолжаются до конца строки. Пример:
# A comment!
Пустые строки игнорируются.
Пример
# 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...
Общие свойства
Следующее свойство является общим для всех классов устройств ввода.
Информацию о специальных свойствах, используемых каждым классом, можно найти в документации по каждому классу устройств ввода.
device.internal
Определение: device.internal = 0 | 1
Указывает, является ли устройство ввода внутренним встроенным компонентом, а не внешним подключенным (скорее всего, съемным) периферийным устройством.
-
Если указано значение
0, устройство является внешним. -
Если значение равно
1, устройство является внутренним. -
Если значение не указано, по умолчанию используется
0для всех устройств на шине USB (BUS_USB) или Bluetooth (BUS_BLUETOOTH) и1для остальных устройств.
Это свойство определяет решения по умолчанию в отношении событий пробуждения.
Внутренние устройства ввода обычно не выводят дисплей из спящего режима, если это явно не настроено в файле раскладки клавиатуры или в правиле политики, заданном в коде. Это позволяет избежать случайной разблокировки телефона, когда он находится в кармане. Обычно определяется лишь небольшое количество клавиш пробуждения.
Внешние устройства ввода, как правило, выводят устройство из спящего режима более агрессивно, поскольку предполагается, что во время транспортировки они отключены. Например, нажатие любой клавиши на внешней клавиатуре – хороший показатель того, что пользователь хочет, чтобы устройство вышло из спящего режима и отреагировало.
Важно, чтобы значение свойства device.internal было правильно задано для всех внутренних устройств ввода.
Проверка
Проверьте файлы конфигурации устройств ввода с помощью инструмента Validate Keymaps.