Kierowanie danych wejściowych

W Androidzie 9 i starszych wersjach nie było możliwości interakcji z kilkoma wyświetlaczami dotykiem, ponieważ nie istniał mechanizm powiązania między wyświetlaczami a danymi wejściowymi urządzenia. Ekran dotykowy może np. mieć wyjście wideo HDMI. (które rejestrują się jako wyświetlacz w Androidzie) oraz wyjście USB dla ekranu dotykowego (które zostałyby zarejestrowane jako urządzenie wejściowe). Jeśli podłączonych jest kilka urządzeń w ten sposób nie byłoby możliwe ustalenie, do którego urządzenia wejściowego należy urządzenie wejściowe, który się wyświetla. Ten sam problem dotyczy urządzeń składanych z wbudowanymi i wyświetlacze.

W Androidzie 10 dodano mechanizm określający, które dane wejściowe do których wyświetlaczy należą urządzenia. Powiązanie jest wykonywane na podstawie numerów portów, gdzie port odnosi się do fizycznego portu, do którego jest podłączony wyświetlacz.

Jeśli na przykład urządzenie z Androidem ma 2 porty HDMI z etykietą hdmi1 i hdmi2, wyświetlane wartości portów mogłyby mieć wartość 1, 2 Wartości portów pozostają takie same, nawet jeśli inny wyświetlacz jest połączone (np. inny model wyświetlacza lub producenta) z tym samym Port HDMI. Dzięki temu producenci urządzeń mogą przekazywać instrukcje dotyczące montażu i uaktualnianie wyświetlaczy.

Powiązanie jest skonfigurowane w usłudze /vendor/etc/input-port-associations.xml. Na przykład:

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

W powyższym przykładzie display="0" określa port, do którego jest podłączony ekran. input="usb-xhci-hcd.0.auto-1.1/input0" określa port, do którego jest podłączone urządzenie wejściowe. Aby określić porty powiązanego z konkretnymi urządzeniami, użyj poniższego polecenia terminala, sprawdzić właściwość location tych urządzeń w stanie Centrum zdarzeń.

adb shell dumpsys input

Jeśli połączonych jest wiele urządzeń, kliknij konkretne, aby zobaczyć Tablica RecentQueue w stanie dyspozytora wejściowego. Dzięki temu możesz zidentyfikować te urządzenia, które wygenerowały ostatnie zdarzenie. Następnie możesz znaleźć odpowiednie urządzenie w stanie centrum zdarzeń.

Aby określić porty wyświetlacza przypisane do podłączonych wyświetlaczy, użyj adb shell dumpsys display, a potem wyszukaj address właściwość DisplayDeviceInfo dla każdego wyświetlacza w sekcji Urządzenia do wyświetlania. Do wykonania zrzutu możesz też użyć polecenia adb shell dumpsys SurfaceFlinger --display-id danych identyfikacyjnych wszystkich podłączonych wyświetlaczy. Zobacz też Statyczne identyfikatory displayowe.

Jeśli określisz powiązanie dla konkretnego urządzenia wejściowego i odpowiadającego mu nie ma w systemie ekranu, urządzenie wejściowe będzie wyłączone, dopóki odpowiednie wyświetlacz. Powiązanie jest wykonywane tylko w przypadku urządzeń dotykowych.

Routing na potrzeby dynamicznych reklam na wielu ekranach

Android 10 umożliwia skonfigurowanie statycznego wielu wyświetlaczy urządzenia. Powiązania dynamiczne nie są jeszcze włączone. Jednak w niektórych przypadkach przez udostępnianie informacji routingu przez wyświetlacze i panele wejściowe, które nie są zawsze wyświetlać lub używać wirtualnych urządzeń wejściowych, a następnie zapewnić dodatkowy routing; i wysyłanie informacji do tych urządzeń wirtualnych. Jeśli implementacja urządzenia obsługuje:

  • W przypadku stacji dokującej ze stacją dokującą, konfiguracja routingu przekazane do kierowania z akcesorium wejściowego podłączonego do stacji dokującej (zidentyfikowane wyłącznie przez port) do wyświetlacza zewnętrznego (identyfikowanego na podstawie portu).
  • Ekran główny działający jako źródło sygnału (np. touchpad) po podłączeniu do wyświetlacza zewnętrznego, można by skonfigurować routing dla docelowych danych wejściowych z wirtualnego panelu dotykowego (identyfikowanego na podstawie unikalnego identyfikatora wirtualnego) do wyświetlacza zewnętrznego. (identyfikowany na podstawie portu).

Implementacja

  • W przypadku urządzeń fizycznych port, do którego jest podłączone urządzenie wejściowe, i portu, do którego jest podłączony wyświetlacz, służą do dopasowywania wyświetlaczy do ekranów dotykowych.
  • Mapowania są przechowywane w regionie InputReaderConfiguration.
  • TouchInputMapper.mViewport jest ustawiony na widoczny obszar, który pasuje port określony dla: InputDevice.location.
  • Jeśli w pliku mapowania jest określony port urządzenia wejściowego i tam Obecnie nie jest to widoczny obszar z pasującym portem wyświetlacza, urządzenie z tym portem jest wyłączone.
  • Jeśli port nie został określony dla danego urządzenia wejściowego, widoczny obszar będzie ustaw zgodnie z obowiązującymi regułami.
  • Sterowniki wejściowe nie wymagają wprowadzania zmian w jądrze.
  • Porty urządzenia wejściowego są określane przy użyciu rejestratora EVIOCGPHYS.