輸入設備配置文件

輸入設備配置文件( .idc文件)包含影響輸入設備行為的設備特定配置屬性。

標準外圍設備(例如 HID 鍵盤和鼠標)通常不需要輸入設備配置文件,因為默認系統行為通常可以確保它們開箱即用。另一方面,內置嵌入式設備,尤其是觸摸屏,幾乎總是需要輸入設備配置文件來指定它們的行為。

基本原理

Android 根據相關 Linux 內核輸入設備驅動程序報告的事件類型和屬性自動檢測和配置大多數輸入設備功能。

例如,如果輸入設備支持EV_REL事件類型和代碼REL_XREL_Y以及EV_KEY事件類型和BTN_MOUSE ,那麼 Android 會將輸入設備歸類為鼠標。鼠標的默認行為是顯示一個屏幕光標,該光標跟踪鼠標的移動並在單擊鼠標時模擬觸摸。儘管可以對鼠標進行不同的配置,但默認行為通常足以滿足標準鼠標外圍設備的需求。

某些類型的輸入設備更加模糊。例如,多點觸控觸摸屏和触摸板都支持EV_ABS事件類型,並且代碼至少為ABS_MT_POSITION_XABS_MT_POSITION_Y 。然而,這些設備的預期用途是完全不同的,並且不能總是自動確定。此外,還需要額外的信息來理解觸摸設備報告的壓力和大小信息。因此觸摸設備,尤其是內置觸摸屏,通常需要 IDC 文件。

地點

輸入設備配置文件按 USB 供應商、產品(和可選版本)ID 或輸入設備名稱定位。

以下路徑依次查閱。

  • /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

構造包含設備名稱的文件路徑時,設備名稱中除 '0'-'9'、'a'-'z'、'A'-'Z'、'-' 或 '_' 之外的所有字符替換為“_”。

句法

輸入設備配置文件是由屬性分配和註釋組成的純文本文件。

特性

每個屬性分配都包含一個屬性名稱、一個= 、一個屬性值和一個新行。像這樣:

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 ,則設備為內部設備。

  • 如果未指定該值,則 USB (BUS_USB) 或藍牙 (BUS_BLUETOOTH) 總線上的所有設備的默認值為0 ,否則為1

此屬性確定有關喚醒事件的默認策略決策。

除非在按鍵佈局文件或硬編碼策略規則中明確配置為這樣做,否則內部輸入設備通常不會將顯示器從睡眠中喚醒。這種區別可以防止按鍵和触摸在手機放在口袋中時虛假地喚醒您的手機。通常只定義了一小部分喚醒鍵。

相反,外部輸入設備通常更積極地喚醒設備,因為它們被假定在傳輸過程中被關閉或未插入。例如,按下外部鍵盤上的任意鍵是用戶希望設備喚醒和響應的良好指示。

確保為所有內部輸入設備正確設置device.internal屬性的值非常重要。

驗證

確保使用驗證鍵盤映射工具驗證您的輸入設備配置文件。