Giriş Yönlendirme

Android 9 ve önceki sürümlerde, ekranlar ve giriş cihazları arasında bir ilişkilendirme mekanizması olmadığı için birden fazla ekranla dokunarak etkileşim kurmanın bir yolu yoktu. Örneğin, bir dokunmatik ekran, bir HDMI video çıkışı (Android'de bir ekran olarak kaydedilir) ve dokunmatik ekran için bir USB çıkışı (bir giriş aygıtı olarak kaydedilir) sağlayabilir. Bu şekilde birden fazla cihaz bağlansaydı, hangi giriş cihazının hangi ekrana ait olduğunu belirlemenin bir yolu olmazdı. Aynı sorun, birden çok yerleşik ekrana sahip katlanabilir cihazlar için de geçerlidir.

Android 10, hangi giriş cihazlarının hangi ekranlara ait olduğunu belirtmek için bir mekanizma ekledi. Portu Bir görüntü bağlı olduğu bir fiziksel bağlantı noktasına işaret eder burada ilişkilendirme noktası numaraları ile yapılır.

Bir robot cihaz etiketli iki HDMI portu vardır, örneğin, hdmi1 ve hdmi2 , daha sonra ekran noktası değerleri olabilir 1 ve 2 . Aynı fiziksel HDMI bağlantı noktasına farklı bir ekran (farklı bir ekran modeli veya üretici gibi) bağlandığında bile bağlantı noktası değerleri aynı kalır. Bu, cihaz üreticilerinin ekranları monte etmek ve yükseltmek için talimatlar vermesini sağlar.

İlişki yapılandırılmış /vendor/etc/input-port-associations.xml . Örneğin:

<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>

Yukarıda örnekte display="0" ekran bağlı olduğu belirtir noktası. input="usb-xhci-hcd.0.auto-1.1/input0" belirtir giriş cihazı bağlı olduğu bağlantı noktası. , Belirli cihazlar ile ilişkili bağlantı noktalarını belirlemek aşağıdaki terminali komutunu kullanın ve sonra gözden geçirmek için location Olay Hub Devlette bu cihazların özelliği.

adb shell dumpsys input

Birçok aygıtı bağlıysa, incelemek için belirli bir cihaza dokunun RecentQueue Giriş Dispatcher Devlet içinde diziyi. Ardından, en son olayı oluşturan cihazları tanımlayabilirsiniz. Ardından ilgili cihazı Event Hub State'de bulabilirsiniz.

Bağlı ekranlara atanan ekran portları belirlemek için, kullanım adb shell dumpsys display ve daha sonra aramaya address özelliğine DisplayDeviceInfo Görüntü Cihazlar altındaki her display. Alternatif olarak, kullanmak adb shell dumpsys SurfaceFlinger --display-id bağlı tüm ekranlar için dökümü kimlik bilgilerine. Ayrıca bkz Statik ekran tanımlayıcıları .

Belirli bir giriş cihazı için bir ilişki belirtirseniz ve ilgili ekran sistemde mevcut değilse, ilgili ekran görünene kadar giriş cihazı devre dışı bırakılır. İlişkilendirme yalnızca dokunmatik cihazlar için gerçekleştirilir.

Dinamik çoklu ekranlar için yönlendirme

Android 10, statik çoklu ekran cihazları kurmanıza olanak tanır. Dinamik ilişkilendirmeler henüz etkinleştirilmemiştir. Ancak, her zaman mevcut olmayan ekranlar ve giriş panelleri için yönlendirme bilgileri sağlanarak veya sanal giriş aygıtları kullanılarak ve ardından bu sanal aygıtlara ek yönlendirme bilgileri sağlanarak bazı kullanım durumları ele alınabilir. Bir cihaz uygulaması şunları destekliyorsa:

  • Bir yerleştirme istasyonuyla masaüstü benzeri bir deneyim, ardından dock'a bağlı giriş aksesuarından (bağlantı noktası tarafından benzersiz olarak tanımlanır) harici ekrana (bağlantı noktası tarafından tanımlanır) girişi hedeflemek için bir yönlendirme yapılandırması sağlanabilir.
  • Harici ekrana bağlandığında bir giriş kaynağı (dokunmatik yüzey gibi) olarak işlev gören birincil ekran, ardından sanal dokunmatik panelden (benzersiz sanal kimlik ile tanımlanır) harici ekrana (port tarafından tanımlanır) girişi hedeflemek için bir yönlendirme yapılandırması sağlanabilir. .

uygulama

  • Fiziksel cihazlar için, giriş cihazının bağlı olduğu port ve ekranın bağlı olduğu port, ekranları dokunmatik ekranlarla eşleştirmek için kullanılır.
  • Eşleştirmeleri saklanır InputReaderConfiguration .
  • TouchInputMapper.mViewport için belirtilen bağlantı noktasını maçları görüntü alanına ayarlanır InputDevice.location .
  • Eşleme dosyasında bir giriş aygıtı bağlantı noktası belirtilmişse ve şu anda eşleşen bir görüntüleme bağlantı noktasına sahip bir görünüm alanı yoksa, o bağlantı noktasındaki giriş aygıtı devre dışı bırakılır.
  • Belirli bir giriş aygıtı için bir bağlantı noktası belirtilmemişse, görünüm alanı mevcut kurallara göre ayarlanır.
  • Giriş sürücülerinde çekirdek değişikliği gerekmez.
  • Giriş cihazı portları, EVIOCGPHYS ioctl kullanılarak belirlenir.