輸入設備配置文件( .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供應商,產品(和可選的版本)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)或Bluetooth(BUS_BLUETOOTH)總線上的所有設備的默認值為
0
,否則為1
。
此屬性確定有關喚醒事件的默認策略決策。
內部輸入設備通常不會將顯示器從睡眠中喚醒,除非在鍵佈局文件或硬編碼策略規則中進行了顯式配置。這種區別可以防止按鍵和触摸在手機放在口袋中時誤喚醒手機。通常,只定義了少數幾個喚醒鍵。
相反,外部輸入設備通常會更激進地喚醒設備,因為它們在運輸過程中被認為已關閉或未插入。例如,按下外部鍵盤上的任何鍵都可以很好地表明用戶希望設備喚醒並做出響應。
確保為所有內部輸入設備正確設置device.internal
屬性的值很重要。
驗證
確保使用“驗證鍵映射”工具驗證輸入設備的配置文件。