إدخال

رمز Android Input HAL

يتكون نظام إدخال Android الفرعي بشكل رمزي من مسار أحداث يمر عبر طبقات متعددة من النظام.

خط أنابيب الإدخال

في الطبقة الدنيا ، ينتج جهاز الإدخال المادي إشارات تصف تغيرات الحالة مثل الضغط على المفاتيح ونقاط الاتصال التي تعمل باللمس. يقوم البرنامج الثابت للجهاز بترميز ونقل هذه الإشارات بطريقة ما ، مثل إرسال تقارير USB HID إلى النظام أو عن طريق إنتاج المقاطعات على ناقل I2C.

يتم بعد ذلك فك تشفير الإشارات بواسطة برنامج تشغيل الجهاز في نواة Linux. يوفر Linux kernel برامج تشغيل للعديد من الأجهزة الطرفية القياسية ، خاصة تلك التي تلتزم ببروتوكول HID. ومع ذلك ، يجب أن توفر الشركة المصنّعة للمعدات الأصلية في كثير من الأحيان برامج تشغيل مخصصة للأجهزة المدمجة المدمجة بإحكام في النظام بمستوى منخفض ، مثل شاشات اللمس.

تعد برامج تشغيل أجهزة الإدخال مسؤولة عن ترجمة الإشارات الخاصة بالجهاز إلى تنسيق حدث إدخال قياسي ، عن طريق بروتوكول إدخال Linux. يعرّف بروتوكول إدخال Linux مجموعة قياسية من أنواع الأحداث والأكواد في ملف رأس kernel linux/input.h . بهذه الطريقة ، لا تحتاج المكونات خارج النواة إلى الاهتمام بالتفاصيل مثل رموز المسح المادي ، واستخدامات HID ، ورسائل I2C ، ودبابيس GPIO ، وما شابه ذلك.

بعد ذلك ، يقرأ مكون Android EventHub أحداث الإدخال من النواة عن طريق فتح برنامج تشغيل evdev المرتبط بكل جهاز إدخال. يقوم مكون Android InputReader بعد ذلك بفك تشفير أحداث الإدخال وفقًا لفئة الجهاز وينتج سلسلة من أحداث إدخال Android. كجزء من هذه العملية ، يتم ترجمة رموز أحداث بروتوكول إدخال Linux إلى أكواد أحداث Android وفقًا لتكوين جهاز الإدخال وملفات تخطيط لوحة المفاتيح وجداول الخرائط المختلفة.

أخيرًا ، يرسل InputReader أحداث الإدخال إلى InputDispatcher الذي يعيد توجيهها إلى النافذة المناسبة.

نقاط المراقبة

هناك عدة مراحل في خط أنابيب الإدخال والتي تؤثر على التحكم في سلوك جهاز الإدخال.

تكوين برنامج التشغيل والبرامج الثابتة

تقوم برامج تشغيل أجهزة الإدخال بشكل متكرر بتكوين سلوك جهاز الإدخال عن طريق تعيين المعلمات في السجلات أو حتى تحميل البرنامج الثابت نفسه. هذا هو الحال بشكل خاص بالنسبة للأجهزة المدمجة مثل الشاشات التي تعمل باللمس حيث يتضمن جزء كبير من عملية المعايرة ضبط هذه المعلمات أو إصلاح البرامج الثابتة لتوفير الدقة والاستجابة المرغوبة ولقمع الضوضاء.

غالبًا ما يتم تحديد خيارات تكوين برنامج التشغيل كمعلمات للوحدة النمطية في حزمة دعم لوحة kernel (BSP) بحيث يمكن لبرنامج التشغيل نفسه دعم العديد من تطبيقات الأجهزة المختلفة.

تحاول هذه الوثائق وصف تكوين برنامج التشغيل أو البرنامج الثابت ، ولكنها تقدم إرشادات بشأن معايرة الجهاز بشكل عام.

خصائص تكوين اللوحة

قد تقوم حزمة دعم لوحة kernel (BSP) بتصدير خصائص تكوين اللوحة عبر SysFS التي يستخدمها مكون Android InputReader ، مثل وضع المفاتيح الافتراضية على شاشة تعمل باللمس.

راجع أقسام فئة الجهاز للحصول على تفاصيل حول كيفية استخدام الأجهزة المختلفة لخصائص تكوين اللوحة.

تراكبات الموارد

يتم تكوين بعض سلوكيات الإدخال عن طريق تراكبات الموارد في config.xml مثل تشغيل مفتاح الغطاء.

وفيما يلي بعض الأمثلة على ذلك:

  • config_lidKeyboardAccessibility : تحديد تأثير مفتاح الغطاء على ما إذا كانت لوحة مفاتيح الجهاز قابلة للوصول أو مخفية.

  • config_lidNavigationAccessibility : يحدد تأثير مفتاح الغطاء على ما إذا كانت لوحة التعقب يمكن الوصول إليها أم مخفية.

  • config_longPressOnPowerBehavior : يحدد ما يجب أن يحدث عندما يضغط المستخدم باستمرار على زر الطاقة.

  • config_lidOpenRotation : يحدد تأثير مفتاح الغطاء على اتجاه الشاشة.

راجع الوثائق الموجودة في frameworks/base/core/res/res/values/config.xml للحصول على تفاصيل حول كل خيار تكوين.

الخرائط الرئيسية

يتم استخدام الخرائط الرئيسية بواسطة مكونات Android EventHub و InputReader لتكوين التعيين من رموز أحداث Linux إلى رموز أحداث Android للمفاتيح وأزرار عصا التحكم ومحاور عصا التحكم. قد يعتمد التعيين على الجهاز أو اللغة.

راجع أقسام فئة الجهاز للحصول على تفاصيل حول كيفية استخدام الأجهزة المختلفة لخرائط المفاتيح.

ملفات تكوين جهاز الإدخال

يتم استخدام ملفات تكوين جهاز الإدخال بواسطة مكونات Android EventHub و InputReader لتكوين خصائص الجهاز الخاصة مثل كيفية الإبلاغ عن معلومات حجم اللمس.

راجع أقسام فئة الجهاز للحصول على تفاصيل حول كيفية استخدام الأجهزة المختلفة لخرائط تكوين جهاز الإدخال.

فهم استخدامات HID ورموز الأحداث

غالبًا ما يكون هناك العديد من المعرفات المختلفة المستخدمة للإشارة إلى أي مفتاح معين على لوحة المفاتيح أو الزر الموجود على وحدة التحكم في اللعبة أو محور عصا التحكم أو عنصر تحكم آخر. العلاقات بين هذه المعرفات ليست هي نفسها دائمًا: فهي تعتمد على مجموعة من جداول التعيين ، بعضها ثابت ، والبعض الآخر يختلف بناءً على خصائص الجهاز ، ومشغل الجهاز ، والإعدادات المحلية الحالية ، وتكوين النظام ، تفضيلات المستخدم وعوامل أخرى.

كود المسح المادي

رمز الفحص المادي هو معرف خاص بالجهاز يرتبط بكل مفتاح أو زر أو عنصر تحكم آخر. نظرًا لأن أكواد المسح الضوئي الفعلية غالبًا ما تختلف من جهاز إلى آخر ، فإن البرنامج الثابت أو برنامج تشغيل الجهاز مسؤول عن تعيينها لمعرفات قياسية مثل استخدامات HID أو رموز مفاتيح Linux.

رموز المسح مهمة بشكل أساسي للوحات المفاتيح. عادةً ما تتصل الأجهزة الأخرى بمستوى منخفض باستخدام دبابيس GPIO أو رسائل I2C أو وسائل أخرى. وبالتالي ، تعتمد الطبقات العليا من حزمة البرامج على برامج تشغيل الجهاز لفهم ما يجري.

استخدام HID

استخدام HID هو معرف قياسي يُستخدم للإبلاغ عن حالة عنصر تحكم مثل مفتاح لوحة المفاتيح أو محور عصا التحكم أو زر الماوس أو نقطة الاتصال باللمس. تتوافق معظم أجهزة إدخال USB و Bluetooth مع مواصفات HID ، والتي تمكن النظام من التفاعل معها بطريقة موحدة.

يعتمد Android Framework على برامج تشغيل Linux kernel HID لترجمة أكواد استخدام HID إلى رموز مفاتيح Linux ومعرفات أخرى. لذلك ، فإن استخدامات HID تهم بشكل أساسي الشركات المصنعة الطرفية.

كود مفتاح لينكس

رمز مفتاح Linux هو معرف قياسي لمفتاح أو زر. يتم تعريف رموز مفاتيح Linux في ملف رأس linux/input.h باستخدام ثوابت تبدأ بالبادئة KEY_ أو BTN_ . تعد برامج تشغيل إدخال Linux kernel مسؤولة عن ترجمة أكواد المسح الضوئي المادية واستخدامات HID والإشارات الأخرى الخاصة بالجهاز إلى رموز مفاتيح Linux وتقديم معلومات عنها كجزء من أحداث EV_KEY .

تشير واجهة برمجة تطبيقات Android أحيانًا إلى رمز مفتاح Linux المرتبط بمفتاح باسم "رمز المسح". هذا غير صحيح من الناحية الفنية ولكنه يساعد في التمييز بين رموز مفاتيح Linux وأكواد مفاتيح Android في واجهة برمجة التطبيقات.

Linux النسبي أو رمز المحور المطلق

رمز المحور النسبي أو المطلق لـ Linux هو معرف قياسي للإبلاغ عن الحركات النسبية أو المواضع المطلقة على طول المحور ، مثل الحركات النسبية للماوس على طول المحور X أو الموضع المطلق لعصا التحكم على طول المحور X الخاص به. يتم تعريف كود محور Linux في ملف رأس linux/input.h باستخدام ثوابت تبدأ بالبادئة REL_ أو ABS_ . تعد برامج تشغيل إدخال Linux kernel مسؤولة عن ترجمة استخدامات HID والإشارات الأخرى الخاصة بالجهاز إلى رموز محور Linux وتقديم معلومات عنها كجزء من أحداث EV_REL و EV_ABS .

كود تبديل لينكس

رمز تبديل Linux هو معرّف قياسي للإبلاغ عن حالة المفتاح على الجهاز ، مثل مفتاح الغطاء. يتم تعريف رموز تبديل Linux في ملف رأس linux/input.h باستخدام ثوابت تبدأ بالبادئة SW_ . تقرير محركات إدخال Linux kernel يتغير حالة التبديل EV_SW .

لا تتلقى تطبيقات Android بشكل عام أحداثًا من المحولات ، ولكن قد يستخدمها النظام داخليًا للتحكم في الوظائف المختلفة الخاصة بالجهاز.

كود مفتاح أندرويد

رمز مفتاح Android هو معرف قياسي محدد في Android API للإشارة إلى مفتاح معين مثل "HOME". يتم تعريف رموز مفاتيح Android بواسطة فئة android.view.KeyEvent كثوابت تبدأ بالبادئة KEYCODE_ .

يحدد تخطيط المفاتيح كيفية تعيين رموز مفاتيح Linux إلى رموز مفاتيح Android. يمكن استخدام تخطيطات مفاتيح مختلفة وفقًا لطراز لوحة المفاتيح أو اللغة أو الدولة أو التخطيط أو الوظائف الخاصة.

يتم تحويل مجموعات رموز مفاتيح Android إلى رموز أحرف باستخدام خريطة شخصية رئيسية للجهاز والمكان. على سبيل المثال ، عندما يتم الضغط على المفاتيح التي تم تحديدها على أنها KEYCODE_SHIFT و KEYCODE_A معًا ، يبحث النظام عن المجموعة في خريطة الأحرف الرئيسية ويجد الحرف الكبير "A" ، والذي يتم إدراجه بعد ذلك في عنصر واجهة استخدام النص المركّز حاليًا.

كود محور أندرويد

رمز محور Android هو معرف قياسي محدد في Android API للإشارة إلى محور جهاز معين. يتم تعريف رموز محور Android بواسطة فئة android.view.MotionEvent كثوابت تبدأ بالبادئة AXIS_ .

يحدد تخطيط المفتاح كيفية تعيين رموز محور Linux لرموز محور Android. يمكن استخدام تخطيطات مفاتيح مختلفة وفقًا لطراز الجهاز أو اللغة أو البلد أو التخطيط أو الوظائف الخاصة.

حالة Android Meta

حالة تعريف Android هي معرف قياسي محدد في واجهة برمجة تطبيقات Android للإشارة إلى مفاتيح التعديل التي يتم الضغط عليها. يتم تعريف حالات Android الوصفية بواسطة فئة android.view.KeyEvent على أنها ثوابت تبدأ بالبادئة META_ .

يتم تحديد الحالة الوصفية الحالية بواسطة مكون Android InputReader الذي يراقب متى يتم الضغط / تحرير مفاتيح التعديل مثل KEYCODE_SHIFT_LEFT وتعيين / إعادة تعيين علامة الحالة الوصفية المناسبة.

العلاقة بين مفاتيح التعديل وحالات التعريف مشفرة بشكل ثابت ولكن تخطيط المفاتيح يمكن أن يغير كيفية تعيين مفاتيح التعديل نفسها والتي بدورها تؤثر على حالات التعريف.

حالة زر Android

حالة زر Android هي معرف قياسي محدد في Android API للإشارة إلى الأزرار (الموجودة على الماوس أو القلم) التي يتم الضغط عليها. يتم تحديد حالات زر Android بواسطة فئة android.view.MotionEvent كثوابت تبدأ بالبادئة BUTTON_ .

يتم تحديد حالة الزر الحالية بواسطة مكون Android InputReader الذي يراقب متى يتم الضغط / تحرير الأزرار (الموجودة على الماوس أو القلم) وتعيين / إعادة تعيين علامة حالة الزر المناسبة.

العلاقة بين الأزرار وحالات الأزرار مضمنة.

قراءة متعمقة

  1. رموز حدث الإدخال Linux
  2. بروتوكول Linux متعدد اللمس
  3. برامج تشغيل إدخال Linux
  4. يفرض Linux التعليقات
  5. معلومات HID ، بما في ذلك جداول استخدام HID