![رمز Android Input HAL](https://source.android.google.cn/static/docs/core/interaction/input/images/ape_fwk_hal_input.png?authuser=1&hl=ar)
يتألف النظام الفرعي لإدخال البيانات في Android بشكل أساسي من مسار أحداث يمر عبر طبقات متعددة من النظام.
مسار الإدخال
في أدنى طبقة، يُصدر جهاز الإدخال المادي إشارات تصِف تغييرات الحالة، مثل الضغط على المفاتيح ونقاط الاتصال باللمس. يُشفِّر برنامج الجهاز الثابت هذه الإشارات وينقلها بطريقة ما، مثل إرسال تقارير USB HID إلى النظام أو عن طريق توليد عمليات إيقاف مؤقت على ناقل I2C.
بعد ذلك، يتم فك ترميز الإشارات بواسطة برنامج تشغيل الجهاز في نواة Linux. يقدّم نواة Linux برامج تشغيل للعديد من الأجهزة الطرفية العادية، خاصة تلك التي تلتزم ببروتوكول HID. ومع ذلك، على المصنّع الأصلي للجهاز توفير برامج تشغيل مخصّصة للأجهزة المضمّنة التي يتم دمجها بشدّة في النظام على مستوى منخفض، مثل الشاشات التي تعمل باللمس.
تتحمّل برامج تشغيل أجهزة الإدخال مسؤولية ترجمة الإشارات الخاصة بالجهاز
إلى تنسيق حدث إدخال عادي، وذلك من خلال بروتوكول إدخال Linux. يحدّد بروتوكول إدخال Linux مجموعة قياسية من
أنواع الأحداث ورموزها في ملف linux/input.h
header kernel.
بهذه الطريقة، لا تحتاج المكوّنات خارج النواة إلى الاهتمام
بالتفاصيل، مثل رموز المسح الضوئي المادي واستخدامات HID ورسائل I2C ومقبسات GPIO وما إلى ذلك.
بعد ذلك، يقرأ مكوّن EventHub
في Android أحداث الإدخال من النواة
عن طريق فتح برنامج تشغيل evdev
المرتبط بكل جهاز إدخال.
بعد ذلك، يفكّك مكوّن Android InputReader ترميز أحداث الإدخال
وفقًا لفئة الجهاز وينشئ بثًا لأحداث إدخال Android. وكجزء من هذه العملية، تتم ترجمة رموز أحداث بروتوكول إدخال Linux
إلى رموز أحداث Android وفقًا لإعدادات
جهاز الإدخال وملفات تنسيق لوحة المفاتيح ومختلف جداول الربط.
أخيرًا، يُرسِل InputReader
أحداث الإدخال إلى InputDispatcher
الذي يعيد توجيهها إلى النافذة المناسبة.
نقاط التحكّم
هناك عدة مراحل في مسار الإدخال تؤثر في التحكّم في سلوك جهاز الإدخال.
ضبط برنامج التشغيل والبرامج الثابتة
غالبًا ما تضبط برامج تشغيل أجهزة الإدخال سلوك جهاز الإدخال من خلال ضبط المَعلمات في السجلات أو حتى تحميل البرامج الثابتة نفسها. وينطبق ذلك بشكل خاص على الأجهزة المضمّنة، مثل الشاشات التي تعمل باللمس، حيث يتضمن جزء كبير من عملية المعايرة تعديل هذه المَعلمات أو إصلاح البرامج الثابتة لتوفير الدقة والاستجابة المطلوبة والحد من الضوضاء.
غالبًا ما يتم تحديد خيارات ضبط برنامج التشغيل كمَعلمات للوحدة في حزمة دعم اللوحة الأساسية (BSP) لكي يتمكّن برنامج التشغيل نفسه من دعم عمليات تنفيذ متعددة للأجهزة المختلفة.
تحاول هذه المستندات وصف عملية ضبط برنامج التشغيل أو البرامج الثابتة، ولكنها تقدّم إرشادات حول معايرة الجهاز بشكل عام.
خصائص إعدادات اللوحة
قد تُصدِر حزمة دعم اللوحة الأساسية (BSP) خصائص إعدادات اللوحة من خلال SysFS التي يستخدمها مكوّن InputReader في Android، مثل موضع المفاتيح الافتراضية على شاشة تعمل باللمس.
راجِع أقسام فئة الأجهزة للحصول على تفاصيل عن كيفية استخدام مختلف الأجهزة لخصائص ضبط اللوحة.
تراكب الموارد
يتم ضبط بعض سلوكيات الإدخال من خلال تراكب الموارد
في config.xml
، مثل تشغيل مفتاح الغطاء.
وفي ما يلي بعض الأمثلة على ذلك:
-
config_lidKeyboardAccessibility
: لتحديد تأثير مفتاح التبديل في الغطاء على إمكانية الوصول إلى لوحة المفاتيح المدمجة أو إخفائها -
config_lidNavigationAccessibility
: لتحديد تأثير مفتاح التبديل في الغطاء على إمكانية الوصول إلى لوحة اللمس أو إخفائها. -
config_longPressOnPowerBehavior
: لتحديد ما يجب أن يحدث عندما يضغط المستخدم مع الاستمرار على زر التشغيل -
config_lidOpenRotation
: لتحديد تأثير مفتاح التبديل في الغطاء على اتجاه الشاشة
يمكنك الرجوع إلى المستندات ضمن frameworks/base/core/res/res/values/config.xml
للاطّلاع على تفاصيل حول كل خيار إعداد.
خرائط المفاتيح
تستخدِم مكوّنات EventHub
وInputReader
في Android خطط المفاتيح
لضبط التعيين من رموز أحداث Linux إلى رموز أحداث Android
للمفاتيح وأزرار ذراع التحكم ومحاور ذراع التحكم. قد يعتمد ربط المحتوى
على الجهاز أو اللغة.
راجِع أقسام فئات الأجهزة لمعرفة تفاصيل عن كيفية استخدام الأجهزة المختلفة لجداول المفاتيح.
ملفات إعدادات أجهزة الإدخال
تستخدم مكوّنات EventHub
و
InputReader
في Android ملفات ضبط أجهزة الإدخال لضبط خصائص خاصة للجهاز،
مثل كيفية تسجيل معلومات حجم اللمس.
راجِع أقسام فئات الأجهزة للحصول على تفاصيل عن كيفية استخدام الأجهزة المختلفة لجداول إعدادات أجهزة الإدخال.
التعرّف على استخدامات HID ورموز الأحداث
غالبًا ما يكون هناك عدة معرّفات مختلفة تُستخدَم للإشارة إلى أي مفتاح معيّن على لوحة مفاتيح أو زر على جهاز تحكّم في الألعاب أو محور عصا التحكم أو جهاز تحكّم آخر. لا تكون العلاقات بين هذه المعرّفات متماثلة دائمًا: فهي تعتمد على مجموعة من جداول الربط، والتي يكون بعضها ثابتًا وبعضها يختلف استنادًا إلى خصائص الجهاز وبرنامج تشغيله واللغة الحالية وإعدادات النظام وإعدادات المستخدم المفضّلة وعوامل أخرى.
- رمز الاستجابة السريعة على المنتج
-
رمز المسح الضوئي المادي هو معرّف خاص بالجهاز مرتبط بكل مفتاح أو زر أو عنصر تحكّم آخر. وبما أنّ رموز المسح الضوئي المادية تختلف غالبًا من جهاز إلى آخر، يكون برنامج التشغيل أو البرامج الثابتة للجهاز مسؤولاً عن ربطها بالمعرِّفات العادية، مثل استخدامات HID أو رموز مفاتيح Linux.
تُستخدم الرموز المخصّصة للمسح الضوئي بشكل أساسي في لوحات المفاتيح. تتواصل الأجهزة الأخرى عادةً على مستوى منخفض باستخدام أطراف GPIO أو رسائل I2C أو وسائل أخرى. ونتيجةً لذلك، تعتمد الطبقات العليا من بنية البرامج على برامج تشغيل الأجهزة لفهم ما يحدث.
- استخدام HID
-
استخدام HID هو معرّف عادي يُستخدَم للإبلاغ عن حالة عنصر تحكّم، مثل مفتاح لوحة مفاتيح أو محور ذراع تحكّم أو زر ماوس أو نقطة اتصال تعمل باللمس. تتوافق معظم أجهزة الإدخال USB وBluetooth مع مواصفات HID، ما يتيح للنظام التفاعل معها بطريقة موحّدة.
يعتمد إطار عمل Android على برامج تشغيل HID لنظام التشغيل Linux لتحويل رموز استخدام HID إلى رموز مفاتيح Linux ومعرّفات أخرى. لذلك، تهمّ استخدامات HID بشكل أساسي الشركات المصنّعة للأجهزة الطرفية.
- رمز مفتاح Linux
-
رمز مفتاح Linux هو معرّف عادي لمفتاح أو زر. يتم تحديد رموز مفاتيح Linux في ملف الرأس
linux/input.h
باستخدام ثوابت تبدأ بالبادئةKEY_
أوBTN_
. تتحمّل برامج تشغيل إدخال ملف تعريف النظام Linux مسؤولية ترجمة رموزها المخصّصة للفحص واستخدامات HID وغيرها من الإشارات الخاصة بالأجهزة إلى رموز مفاتيح Linux وتقديم معلومات عنها كجزء من أحداثEV_KEY
.تشير واجهة برمجة تطبيقات Android أحيانًا إلى رمز مفتاح Linux المرتبط بمفتاح باسم "رمز المسح الضوئي". هذا غير صحيح من الناحية الفنية، ولكنه يساعد في التمييز بين رموز مفاتيح Linux ورموز مفاتيح Android في واجهة برمجة التطبيقات.
- رمز محور Linux النسبي أو المطلق
-
رمز محور Linux النسبي أو المطلق هو معرّف عادي لتسجيل الحركات النسبية أو المواضع المطلقة على طول محور، مثل الحركات النسبية للفأرة على طول محور X أو الموضع المطلق لعصا التحكم على طول محور X. يتم تحديد رمز محور Linux في ملف الرأس
linux/input.h
باستخدام ثوابت تبدأ بالبادئةREL_
أوABS_
. تتحمّل برامج تشغيل إدخال ملف تعريف النظام Linux مسؤولية ترجمة استخدامات HID والإشارات الأخرى الخاصة بالأجهزة إلى رموز محاور Linux وتقديم معلومات عنها كجزء من حدثَيEV_REL
وEV_ABS
. - رمز تبديل Linux
-
رمز مفتاح التبديل في نظام التشغيل Linux هو معرّف عادي للإبلاغ عن حالة مفتاح التبديل على جهاز، مثل مفتاح التبديل الخاص بغطاء الجهاز. يتم تعريف رموز التبديل في Linux في ملف الرأس
linux/input.h
باستخدام الثوابت التي تبدأ بالبادئةSW_
. تُبلِغ برامج تشغيل إدخال ملف تعريف kernel في Linux عن تغييرات حالة التبديل على أنّها أحداثEV_SW
.لا تتلقّى تطبيقات Android بشكل عام أحداثًا من مفاتيح التبديل، ولكن قد يستخدمها النظام داخليًا للتحكّم في وظائف مختلفة متعلقة بالجهاز.
- رمز مفتاح Android
-
رمز مفتاح Android هو معرّف عادي محدّد في واجهة برمجة التطبيقات Android للإشارة إلى مفتاح معيّن، مثل "HOME". يتم تعريف رموز مفاتيح Android من خلال فئة
android.view.KeyEvent
على أنّها ثوابت تبدأ بالبادئةKEYCODE_
.يحدِّد تنسيق المفاتيح كيفية ربط رموز مفاتيح Linux برموز مفاتيح Android. قد يتم استخدام تنسيقات مختلفة للمفاتيح حسب لوحة المفاتيح أو طرازها أو لغتها أو بلدها أو تنسيقها أو وظائفها الخاصة.
يتم تحويل مجموعات رموز مفاتيح Android إلى رموز أحرف باستخدام خريطة أحرف مفاتيح خاصة بالجهاز واللغة. على سبيل المثال، عند الضغط على المفتاحَين
KEYCODE_SHIFT
وKEYCODE_A
معًا، يبحث النظام عن هذا التركيب في ملف تمييز الأحرف الخاص بالمفتاحَين ويجد الحرف الكبير "أ"، والذي يتم إدراجه بعد ذلك في التطبيق المصغّر للنص الذي يتم التركيز عليه حاليًا. - رمز محور Android
-
رمز محور Android هو معرّف عادي محدّد في واجهة برمجة التطبيقات Android للإشارة إلى محور جهاز معيّن. يتم تحديد رموز محاور Android من خلال فئة
android.view.MotionEvent
على أنّها ثوابت تبدأ بالبادئةAXIS_
.يحدِّد تنسيق المفتاح كيفية ربط رموز محاور Linux برموز محاور Android. قد يتم استخدام تنسيقات مختلفة للمفاتيح حسب طراز الجهاز أو لغته أو بلده أو تنسيقه أو وظائفه الخاصة.
- حالة Android الوصفية
-
حالة العنصر النائب في Android هي معرّف عادي محدّد في واجهة برمجة التطبيقات Android API للإشارة إلى مفاتيح التعديل التي تم الضغط عليها. يتم تعريف حالات العناصر الوصفية في Android بواسطة فئة
android.view.KeyEvent
على أنّها ثوابت تبدأ بالبادئةMETA_
.يتم تحديد الحالة الوصفية الحالية من خلال مكوّن InputReader في Android الذي يراقب الضغط على مفاتيح الترميز مثل
KEYCODE_SHIFT_LEFT
أو تحريرها ويضبط علامة الحالة الوصفية المناسبة أو يعيد ضبطها.تكون العلاقة بين مفاتيح التعديل والحالات الوصفية برمجية برمجيًا، ولكن يمكن أن يغيّر تنسيق المفاتيح كيفية تحديد مفاتيح التعديل نفسها، مما يؤثّر بدوره في الحالات الوصفية.
- حالة زر Android
-
حالة زر Android هي معرّف عادي محدّد في واجهة برمجة التطبيقات Android API للإشارة إلى الأزرار التي تم الضغط عليها (على الماوس أو قلم الشاشة). يتم تحديد حالات زر Android من خلال فئة
android.view.MotionEvent
كثوابت تبدأ بالبادئةBUTTON_
.يتم تحديد حالة الزر الحالية من خلال ملف Android InputReader الذي يراقب حالات الضغط على الأزرار (على الماوس أو قلم الشاشة) أو تحريرها ويضبط علامة حالة الزر المناسبة أو يعيد ضبطها.
تكون العلاقة بين الأزرار وحالاتها مضمّنة في الرمز البرمجي.
مراجع إضافية
- رموز أحداث الإدخال في Linux
- بروتوكول اللمس المتعدّد في Linux
- برامج تشغيل الإدخال في Linux
- التعليقات والآراء حول ميزة "Force Feedback" في نظام التشغيل Linux
- معلومات HID، بما في ذلك جداول استخدام HID