輸入裝置設定檔

輸入裝置設定檔 (.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 或輸入裝置名稱來定位。

系統會依序查詢下列路徑。

  • /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'、'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) 或 Bluetooth (BUS_BLUETOOTH) 匯流排上的所有裝置的預設值為 0,否則為 1

這個屬性會決定喚醒事件的預設政策決定。

除非在按鍵版面配置檔案或硬式編碼政策規則中明確設定,否則內部輸入裝置通常不會喚醒螢幕。這項區別可避免按鍵按壓和觸控動作在手機放在口袋時誤觸喚醒手機。通常只會定義少數幾個喚醒鍵。

相反地,外部輸入裝置通常會更積極地喚醒裝置,因為系統會假設這些裝置在運送期間已關閉或未插入。舉例來說,按下外接鍵盤上的任何按鍵,就是使用者希望喚醒裝置並回應的最佳指標。

請務必確認所有內部輸入裝置的 device.internal 屬性值皆正確設定。

驗證

請務必使用驗證鍵盤配置工具驗證輸入裝置設定檔。