إدخال

رمز HAL لإدخال Android

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

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

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

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

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

بعد ذلك، يقرأ مكون Android EventHub أحداث الإدخال من kernel عن طريق فتح برنامج تشغيل 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 معرفًا قياسيًا يتم استخدامه للإبلاغ عن حالة عنصر التحكم مثل مفتاح لوحة المفاتيح أو محور عصا التحكم أو زر الماوس أو نقطة الاتصال التي تعمل باللمس. تتوافق معظم أجهزة إدخال 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 هي معرف قياسي محدد في Android API للإشارة إلى مفاتيح التعديل التي تم الضغط عليها. يتم تعريف حالات Android التعريفية بواسطة فئة android.view.KeyEvent كثوابت تبدأ بالبادئة META_ .

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

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

حالة زر أندرويد

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

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

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

قراءة متعمقة

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