في الإصدار 9 من نظام التشغيل Android والإصدارات الأقدم، لم تكن هناك طريقة للتفاعل مع شاشات متعددة من خلال اللمس، لأنّه لم تكن هناك آلية ربط بين الشاشات وأجهزة input . على سبيل المثال، يمكن أن توفر شاشة العرض التي تعمل باللمس إخراج فيديو HDMI (يمكن تسجيله كشاشة عرض على Android) وإخراج USB للشاشة التي تعمل باللمس (يمكن تسجيله كجهاز إدخال). في حال ربط أجهزة متعددة بهذه الطريقة، لن يكون هناك طريقة لتحديد جهاز الإدخال الذي ينتمي إلى الشاشة. تنطبق المشكلة نفسها على الأجهزة القابلة للطي التي تحتوي على عدة شاشة مدمجة.
أضاف Android 10 آلية لتحديد أجهزة الإدخال التي تنتمي إلى الشاشات. يتم الربط حسب أرقام المنافذ حيث يشير المنفذ إلى المنفذ المادي الذي تم توصيل الشاشة به.
على سبيل المثال، إذا كان جهاز Android مزوّدًا بمنفذَي HDMI يحملان التصنيفَين hdmi1
وhdmi2
، يمكن أن تكون قيم منفذَي العرض 1
و
2
. تظل قيم المنفذ كما هي حتى في حال توصيل شاشة عرض مختلفة (مثل طراز عرض مختلف أو الشركة المصنّعة) بمنفذ HDMI الفعلي نفسه. يتيح ذلك للشركات المصنّعة للأجهزة تقديم تعليمات حول تجميع الشاشات وترقيتها.
تم ضبط عملية الربط في /vendor/etc/input-port-associations.xml
.
مثلاً:
<ports>
<port display="0" input="usb-xhci-hcd.0.auto-1.1/input0" />
<port display="1" input="usb-xhci-hcd.0.auto-1.2/input0" />
</ports>
في المثال أعلاه، يحدِّد display="0"
المنفذ الذي تم توصيل الشاشة به. input="usb-xhci-hcd.0.auto-1.1/input0"
يحدد المنفذ الذي تم توصيل جهاز الإدخال به. ولتحديد المنافذ المرتبطة بأجهزة معيّنة، استخدِم الأمر الطرفي التالي، ثم راجِع سمة location
لتلك الأجهزة في "حالة مركز الأحداث".
adb shell dumpsys input
إذا كان هناك العديد من الأجهزة متصلة، انقر على جهاز معيّن لفحص صفيف
RecentQueue
في حالة "موزّع الإدخال". ويمكنك بعد ذلك تحديد الأجهزة
التي أدّت إلى إنشاء أحدث حدث ويمكنك بعد ذلك العثور على الجهاز المقابل
في "حالة مركز الأحداث".
لتحديد منافذ العرض المخصّصة للشاشات المتصلة، استخدِم
adb shell dumpsys display
ثم ابحث عن السمة address
الخاصة بـ DisplayDeviceInfo
لكل شاشة ضمن "أجهزة العرض".
بدلاً من ذلك، يمكنك استخدام adb shell dumpsys SurfaceFlinger --display-id
لتفريغ
معلومات التعريف لجميع الشاشات المتصلة. يُرجى الاطّلاع أيضًا على
معرّفات الشاشة الثابتة.
إذا حدّدت عملية ربط لجهاز إدخال معيّن ولم تكن الشاشة المقابلة متوفّرة في النظام، يتم إيقاف جهاز الإدخال إلى أن تظهر الشاشة المعنيّة. يتم تنفيذ الإقران للأجهزة التي تعمل باللمس فقط.
توجيه الشاشات الديناميكية المتعددة
يتيح لك نظام التشغيل Android 10 إعداد أجهزة ثابتة ذات شاشات متعدّدة. لم يتم تفعيل الارتباطات الديناميكية بعد. ومع ذلك، يمكن معالجة بعض حالات الاستخدام من خلال توفير معلومات التوجيه للشاشات ولوحات الإدخال غير المتوفّرة دائمًا أو التي تستخدم أجهزة إدخال افتراضية، ثم تقديم معلومات توجيه إضافية لهذه الأجهزة الافتراضية. إذا كان تنفيذ الجهاز يتيح ما يلي:
- تجربة مشابهة لأجهزة الكمبيوتر المكتبي باستخدام محطة الإرساء، ويمكن بعد ذلك توفير إعدادات توجيه لاستهداف الإدخال من ملحق الإدخال المتصل بقاعدة الإرساء (يتم تحديده بشكل فريد حسب المنفذ) إلى الشاشة الخارجية (يتم تحديده حسب المنفذ).
- شاشة أساسية تعمل كمصدر إدخال (مثل لوحة اللمس) عند توصيلها بالشاشة الخارجية، يمكن عندئذ توفير تهيئة توجيه لتوجيه الإدخال من لوحة اللمس الافتراضية (التي يتم تحديدها بواسطة معرّف افتراضي فريد) إلى الشاشة الخارجية (التي يتم تحديدها من خلال المنفذ).
التنفيذ
- بالنسبة إلى الأجهزة المادية، يتم استخدام المنفذ الذي تم توصيل جهاز الإدخال به والمنفذ الذي تم توصيل الشاشة به لمطابقة الشاشات مع الشاشات التي تعمل باللمس.
- يتم تخزين عمليات الربط في
InputReaderConfiguration
. - تم ضبط
TouchInputMapper.mViewport
على إطار العرض الذي يتطابق مع المنفذ المحدّد لـInputDevice.location
. - إذا تم تحديد منفذ جهاز إدخال في ملف الربط، ولم يكن هناك حاليًا إطار عرض يتضمّن منفذ شاشة مطابقًا، يتم إيقاف جهاز الإدخال على هذا المنفذ.
- إذا لم يتم تحديد منفذ لجهاز إدخال معيّن، يتم ضبط إطار العرض وفقًا للقواعد الحالية.
- لا يلزم إجراء أي تغييرات على النواة في برامج تشغيل الإدخال.
- يتم تحديد منافذ جهاز الإدخال باستخدام ioctl EVIOCGPHYS.