輸入設備設定檔( .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) 或藍牙 (BUS_BLUETOOTH) 總線上的所有設備,預設值為
0
,否則為1
。
此屬性決定有關喚醒事件的預設策略決策。
內部輸入裝置通常不會將顯示器從睡眠狀態喚醒,除非在按鍵佈局檔案或硬編碼策略規則中明確配置為這樣做。這種區別可以防止按鍵和觸控誤喚醒放在口袋裡的手機。通常只定義了一小部分喚醒鍵。
相反,外部輸入設備通常會更積極地喚醒設備,因為它們在運輸過程中被假定為關閉或未插入。例如,按下外部鍵盤上的任意鍵就可以很好地表明使用者希望裝置喚醒並做出回應。
確保為所有內部輸入裝置正確設定device.internal
屬性的值非常重要。
驗證
確保使用驗證鍵盤映射工具驗證您的輸入裝置設定檔。
,輸入設備設定檔( .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) 或藍牙 (BUS_BLUETOOTH) 總線上的所有設備,預設值為
0
,否則為1
。
此屬性決定有關喚醒事件的預設策略決策。
內部輸入裝置通常不會將顯示器從睡眠狀態喚醒,除非在按鍵佈局檔案或硬編碼策略規則中明確配置為這樣做。這種區別可以防止按鍵和觸控誤喚醒放在口袋裡的手機。通常只定義了一小部分喚醒鍵。
相反,外部輸入設備通常會更積極地喚醒設備,因為它們在運輸過程中被假定為關閉或未插入。例如,按下外部鍵盤上的任意鍵就可以很好地表明使用者希望裝置喚醒並做出回應。
確保為所有內部輸入裝置正確設定device.internal
屬性的值非常重要。
驗證
確保使用驗證鍵盤映射工具驗證您的輸入裝置設定檔。