Jakiego podsystemu / interfejsu API systemu Linux używa się w przypadku prostego urządzenia z ekranem / monitorem?

9

Rozwijam system osadzony z ekranem dotykowym. Ekran dotykowy działa zarówno jako wejście, jak i wyjście, a „wirtualna” klawiatura nakłada wyjście graficzne.

Mam działający sterownik urządzenia, który odczytuje dane z czujnika dotykowego i tłumaczy je poprawnie na naciśnięcia klawiszy, utworzone przy pomocy tego przewodnika na stronie kernel.org . Chcę rozszerzyć ten sterownik, aby obsługiwał także wyświetlanie obrazu na ekranie.

Chcę wspierać zarówno getty, jak i X, przy jak najmniejszym duplikowaniu. Korzystam z minimalnego wariantu Debiana z pakietami wybranymi przez Cherry, na przykład minimalnego X. Zauważ, że nie zamierzam próbować dostać tego sterownika do potoku repozytorium, chociaż mogę go zrzucić w publicznym repozytorium GitHub.

Przesyłanie obrazów ekranowych odbywa się obecnie za pomocą żałosnego obejścia: opcja rozruchu, aby wymusić renderowanie na osadzonym sprzęcie graficznym procesora, mimo że nie jest on podłączony do wyświetlacza, oraz demon, który nieustannie przegląda bufor, modyfikuje garść wstępnych zdefiniowane piksele, aby utworzyć klawiaturę i wypychają ją na prawdziwy ekran.

Działa to jako dowód koncepcji, dowodząc, że poprawnie rozumiem język, którego oczekuje urządzenie ekranowe, ale oczywiście nie jest optymalny.

kernel.org zawiera także przewodnik po sterownikach urządzeń „DRM”, ale wydaje się, że to poważna przesada w stosunku do możliwości mojego sprzętu:

Warstwa DRM systemu Linux zawiera kod przeznaczony do obsługi złożonych urządzeń graficznych, zwykle zawierających programowalne potoki dobrze dostosowane do akceleracji grafiki 3D.

Żaden mój sprzęt nie ma nic przypominającego przyspieszenie 3D, więc dochodzę do wniosku, że prawdopodobnie nie tego chcę.

Z jakiego podsystemu / interfejsu API powinienem korzystać? Wydaje mi się, że jedną z brakujących terminologii jest to, co powstrzymuje moje poszukiwania, ale wszelkie dodatkowe informacje na temat tego, jak to osiągnąć, byłyby mile widziane.

Szczegóły sprzętowe (prawdopodobnie nieistotne): CPU i ekran komunikują się za pomocą protokołu równoległego 8080, którego procesor nie obsługuje natywnie, więc emuluję go GPIO (manipulując rejestrami za pomocą mmapa).

Wysłanie pełnego obrazu ekranu zajmuje około 20 ms, ale uzyskanie pełnej kopii z wbudowanego bufora graficznego zajmuje około 180 ms, więc pominięcie tego kroku jest najważniejszym celem. Sprzęt ekranu zawiera wystarczającą ilość pamięci SGRAM, aby utrzymać dane o wartości całej klatki, i obsługuje zapis prostokątnego podregionu, więc pożądany byłby hak do aktualizacji tylko części ekranu, który się zmienił.

Na ekranie nie chodzi szczególnie o czas przychodzących danych. Wejście czujnika dotykowego jest obsługiwane przez specjalnie zbudowany układ scalony, który komunikuje się z procesorem poprzez I²C , który procesor obsługuje. Obecny sterownik używa linux/input-polldev.hinterfejsu. Procesor to Broadcom BCM2835 , ekran to TFT z wbudowanym kontrolerem Himax HX8357 , dekoder czujnika ekranu dotykowego to ST STMPE610 , a między HX8357 a BCM2835 znajduje się przełącznik poziomu napięcia (Nexperia 74LVCH245A ). Więcej informacji dostępnych jest na życzenie.

memtha
źródło
Jestem prawie pewien, że masz zespół NIH i po prostu odkryłeś na nowo koło - zwykle ekran dotykowy używa protokołu HID, który jest raczej niż obsługiwany. Uwaga: ekran dotykowy jest tylko urządzeniem wejściowym.
0andriy
@ 0andriy Reinventing the wheel to trochę moja sprawa, ale nie było (prawdziwych) sterowników dla tego konkretnego urządzenia, kiedy zaczynałem. Nie znam żadnego znormalizowanego protokołu dla urządzeń interfejsu człowieka, ale jeśli taki istnieje, jestem pewien, że nakładka dotykowa, której tu używam, go nie używa. Nie zgadzam się z tym, że „ekran dotykowy jest tylko urządzeniem wejściowym”, ponieważ moje zdecydowanie generuje obrazy.
memtha
Po prostu nie rozpoznałeś dwóch bloków sprzętowych w jednym pakiecie. Ekran dotykowy, bez względu na jego nazwę, jest tylko urządzeniem wejściowym. Wyjściowy nazywany jest na przykład panelem lub wyświetlaczem TFT.
0andriy
merriam-webster.com/dictionary/touchscreen Tak, istnieją dwa różne elementy sprzętowe: nakładka wrażliwa na dotyk i ekran TFT. Te dwa elementy tworzą ekran dotykowy. Nie możesz mi powiedzieć, że źle definiuję ekran dotykowy, mówiąc mi „zignoruj ​​nazwę”.
memtha

Odpowiedzi: