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.h
interfejsu. 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.