ניתוב קלט

באנדרואיד 9 ומטה, לא הייתה דרך ליצור אינטראקציה עם מספר צגים באמצעות מגע, מכיוון שלא היה מנגנון שיוך בין צגים והתקני קלט. לדוגמה, צג מסך מגע יכול לספק פלט וידאו HDMI (שיירשם כתצוגה באנדרואיד) ופלט USB עבור מסך מגע (שיירשם כהתקן קלט). אם מספר התקנים היו מחוברים בצורה זו, לא תהיה דרך לקבוע איזה התקן קלט שייך לאיזה תצוגה. אותה בעיה חלה על מכשירים מתקפלים עם מספר צגים מובנים.

אנדרואיד 10 הוסיף מנגנון כדי לציין אילו התקני קלט שייכים לאיזה צגים. השיוך נעשה על ידי מספרי יציאה כאשר יציאה מתייחסת ליציאה הפיזית אליה מחוברת תצוגה.

לדוגמה, אם למכשיר אנדרואיד יש שתי יציאות 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 ב-Input Dispatcher State. לאחר מכן תוכל לזהות את אותם מכשירים שיצרו את האירוע האחרון. לאחר מכן תוכל למצוא את המכשיר המתאים ב-Event Hub State.

כדי לקבוע את יציאות התצוגה שהוקצו לצגים המחוברים, השתמש ב- adb shell dumpsys display ולאחר מכן חפש את מאפיין address של DisplayDeviceInfo עבור כל תצוגה תחת Display Devices. לחלופין, השתמש adb shell dumpsys SurfaceFlinger --display-id כדי לשפוך מידע זיהוי עבור כל הצגים המחוברים. ראה גם מזהי תצוגה סטטיים .

אם אתה מציין שיוך עבור התקן קלט מסוים והתצוגה המתאימה אינה קיימת במערכת, התקן הקלט מושבת עד להופעת התצוגה המתאימה. השיוך מתבצע רק עבור מכשירי מגע.

ניתוב עבור ריבוי צגים דינמיים

אנדרואיד 10 מאפשר לך להגדיר התקני ריבוי תצוגה סטטיים. אסוציאציות דינמיות עדיין אינן מופעלות. עם זאת, ניתן לטפל במקרים מסוימים על ידי מתן מידע ניתוב עבור צגים ולוחות קלט שאינם תמיד קיימים או באמצעות התקני קלט וירטואליים ולאחר מכן מתן מידע ניתוב נוסף לאותם מכשירים וירטואליים. אם יישום מכשיר תומך ב:

  • חוויה כמו שולחן עבודה עם תחנת עגינה, אז ניתן יהיה לספק תצורת ניתוב למיקוד קלט מאביזר קלט המחובר לרציף (מזהה באופן ייחודי על ידי יציאה) לתצוגה החיצונית (מזוהה על ידי יציאה).
  • מסך ראשי שפועל כמקור קלט (כגון משטח מגע) כאשר הוא מחובר לתצוגה החיצונית, ואז ניתן לספק תצורת ניתוב למיקוד קלט מלוח מגע וירטואלי (מזהה על ידי מזהה וירטואלי ייחודי) לתצוגה החיצונית (מזוהה על ידי יציאה) .

יישום

  • עבור מכשירים פיזיים, היציאה אליה מחובר התקן הקלט והיציאה אליה מחוברת התצוגה, משמשות כדי להתאים את הצגים למסכי מגע.
  • המיפויים מאוחסנים ב- InputReaderConfiguration .
  • TouchInputMapper.mViewport מוגדר לנקודת התצוגה שתואמת ליציאה שצוינה עבור InputDevice.location .
  • אם יציאת התקן קלט צוינה בקובץ המיפוי, וכרגע אין יציאת תצוגה בעלת יציאת תצוגה תואמת, אז התקן הקלט ביציאה זו מושבת.
  • אם לא צוינה יציאה עבור התקן קלט מסוים, אזי התצוגה מוגדרת בהתאם לכללים הקיימים.
  • אין צורך בשינויי ליבה במנהלי ההתקן של הקלט.
  • יציאות התקן הקלט נקבעות באמצעות EVIOCGPHYS ioctl.