توجيه الإدخال

في الإصدار 9 من نظام Android والإصدارات الأقدم، لم تكن هناك طريقة للتفاعل مع شاشات العرض المتعددة. عن طريق اللمس، لعدم وجود آلية ربط بين الشاشات والإدخال الأجهزة. على سبيل المثال، يمكن أن توفّر شاشة العرض التي تعمل باللمس إخراج فيديو HDMI. (التي يمكن تسجيلها كشاشة على Android) وإخراج USB للشاشة التي تعمل باللمس (يتم تسجيله كجهاز إدخال). إذا كانت هناك أجهزة متعددة متصلة في بهذه الطريقة، لن يكون هناك طريقة لتحديد جهاز الإدخال الذي ينتمي إليه التي يتم عرضها. تنطبق المشكلة نفسها على الأجهزة القابلة للطي المزوّدة ما يعرضه.

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

على سبيل المثال، إذا كان جهاز 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.
  • إذا تم تحديد منفذ جهاز الإدخال في ملف التعيين، ليس حاليًا إطار عرض يحتوي على منفذ عرض مطابق، فإن الإدخال الجهاز على هذا المنفذ غير مفعّل.
  • إذا لم يتم تحديد منفذ لجهاز إدخال معيّن، سيتم تحديد إطار العرض. وفقًا للقواعد الحالية.
  • لا يلزم إجراء تغييرات على النواة في برامج تشغيل الإدخال.
  • يتم تحديد منافذ جهاز الإدخال باستخدام EVIOCGPHYS ioctl.