فایلهای پیکربندی دستگاه ورودی (فایلهای .idc
) حاوی ویژگیهای پیکربندی خاص دستگاه هستند که بر رفتار دستگاههای ورودی تأثیر میگذارند.
فایلهای پیکربندی دستگاه ورودی معمولاً برای تجهیزات جانبی استاندارد مانند صفحهکلیدهای HID و ماوسها ضروری نیستند، زیرا رفتار پیشفرض سیستم معمولاً تضمین میکند که آنها خارج از جعبه کار خواهند کرد. از سوی دیگر، دستگاههای تعبیهشده داخلی، بهویژه صفحههای لمسی، تقریباً همیشه به فایلهای پیکربندی دستگاه ورودی برای مشخص کردن رفتارشان نیاز دارند.
منطق
Android به طور خودکار اکثر قابلیتهای دستگاه ورودی را بر اساس انواع رویداد و ویژگیهایی که توسط درایور دستگاه ورودی هسته لینوکس مرتبط گزارش میشود، شناسایی و پیکربندی میکند.
برای مثال، اگر یک دستگاه ورودی از نوع رویداد 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'، '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
به درستی برای همه دستگاه های ورودی داخلی تنظیم شده است.
اعتبار سنجی
مطمئن شوید که فایل های پیکربندی دستگاه ورودی خود را با استفاده از ابزار Validate Keymaps تأیید کنید.