Pozostałe możliwości
Oprócz powyższych możliwości biblioteka pozwala także na wyświetlanie duszków – obrazki statyczne, bądź zmieniające się cyklicznie (rysunek 8, tabela 4) oraz kursorów (jeśli wykorzystujemy np. joystick lub myszkę). Te elementy graficzne są o tyle ciekawe, gdyż mogą być umieszczone w dowolnym miejscu i o dowolnym kształcie bez utraty tego co znajduje się „za” nimi – przy wyświetlaniu duszka/kursora tło przez niego zakrywane zapisywane jest w pamięci układu, a przy przemieszczaniu lub ukrywaniu dane w postaci wartości pikseli są odczytywane i ponownie przerysowywane.
Dostępna funkcja wielowarstwowości pozwala nie tylko organizować obiekty w grupy, ale także umożliwia realizację przenikania warstw (rysunek 10, 11). Przykładową syntezę dwóch warstw przedstawia rysunek 12, a za pomocą odpowiednich funkcji do ustawiania wartości kanału alpha można uzyskiwać łagodne przejścia między zawartością poszczególnych warstw.
Ciekawą jeszcze funkcjonalnością jaką udostępnia biblioteka jest możliwość zdalnego podglądu zawartości wyświetlacza orazsterowania pracą urządzenia na którym jest włączony serwer VNC. Przykładowo, jeżeli urządzenie z włączoną funkcją serwera VNC jest podłączone do typowej sieci komputerowej z obsługą protokołu TCP/IP (bezpośrednie podłączenie do komputera lub do routera) to na dowolnym komputerze w tej sieci po uruchomieniu klienta VNC i połączeniu się z urządzeniem docelowym można zdalnie pracować z jego interfejsem graficznym tak jakby to wyglądało fizycznie z wykorzystaniem ekranu i urządzeń wejścia.
Rys. 9. Przykład z dwoma duszkami
Tab. 4. Wybrane procedury biblioteki STemWin powiązane z duszkami (ang. sprites)
Procedura | Opis |
GUI_SPRITE_CreateEx() | Procedura tworzy duszka, który jest opisany bitmapą do której przekazuje się wskaźnik jako argument. Duszek zostanie umieszczony w zadanej pozycji (x,y) w wybranej warstwie. |
GUI_SPRITE_CreateExAnim() | Procedura tworzy animowanego duszka na podstawie serii obrazków statycznych, przy czym czasy ich przełączania mogą być takie same (przekazanie wartości czasu w argumencie funkcji) lub różne (przekazanie wskaźnika do tablicy wartości czasów). |
GUI_SPRITE_Hide() | Ukrywa duszka. |
GUI_SPRITE_SetLoop() | Włącza lub wyłącza nieskończoną animację duszka. |
GUI_SPRITE_Show() | Pokazuje duszka. |
GUI_SPRITE_StartAnim() | Kontynuuje animowanie duszka. |
GUI_SPRITE_StopAnim() | Zatrzymuje animowanie duszka. |
Rys. 10. Funkcja wielowarstwowości umożliwiająca realizację przezroczystości części obszaru
Rys. 11. Hierarchia okien w poszczególnych warstwach
Rys. 12. Przykład syntezy dwóch różnych warstw z wykorzystaniem przezroczystości
Warstwa sprzętowa
Biblioteka STemWin obsługuje większość popularnych wyświetlaczy graficznych wyposażonych w różne kontrolery i wynika to nie tylko z dostępności sterowników konkretnych urządzeń, ale także z pewnej uniwersalności istniejących interfejsów komunikacyjnych za pomocą których można uzyskać bezpośredni lub pośredni dostęp do pamięci graficznej urządzenia. W przypadku, gdy występuje bezpośredni dostęp do pamięci graficznej komunikacja między mikrokontrolerem, a kontrolerem wyświetlacza odbywa się poprzez szynę adresową, szynę danych i linie sterujące (rysunek 13). Warto tutaj wspomnieć, że bardziej rozbudowane mikrokontrolery z serii STM32 posiadają moduł FSMC (FlexibleStatic Memory Controller) lub jego rozszerzonyodpowiednikFMC (Flexible Memory Controller) dedykowany do komunikacji z zewnętrzną pamięcią, a szczególnie z pamięcią graficzną wyświetlaczy.
Rys. 13. Typowy interfejs przy bezpośrednim dostępie do pamięci graficznej wyświetlacza
Natomiast w sytuacji, gdy dostęp do pamięci graficznej odbywa się pośrednio to komunikacja może się odbywać z wykorzystaniem jednego z poniższych interfejsów:
- interfejs równoległy (typu 6800 lub 8080),
- 4-liniowy interfejs SPI,
- 3-liniowy interfejs SPI,
- interfejs magistrali I2C.
Przykłady sterowników tego typu połączeń komunikacyjnychmożna znaleźć w katalogu Samples/LCD_Xpakietu emWin: LCD_X_6800.c, LCD_X_8080.c, LCD_X_SERIAL.c, LCD_X_Serial_3Pin.c, LCD_X_Serial_3Wire.c oraz LCD_X_I2CBUS.c, a w tabeli 5 zestawiono listę kontrolerów obsługiwanych przez pakiet STemWin. W plikach sterowników można znaleźć różne opcje konfiguracyjne, m.in. do ustawiania wymiarów w dwóch osiach obszaru roboczego wyświetlacza oraz do zmiany orientacji wyświetlanej zawartości.
Tab. 5. Lista obsługiwanych przez bibliotekę kontrolerów wyświetlaczy graficznych [1]
Epson S1D19122 FocalTech FT1509 Himax HX8301, HX8340, HX8347, HX8352, HX8353, HX8325A Hitachi HD66772 Ilitek ILI9220, ILI9221, ILI9320, ILI9325, ILI9328, ILI9335, ILI9338, ILI9340, ILI9341, ILI9342, ILI9481 LG Electronics LGDP4531, LGDP4551 Novatek NT39122 OriseTech SPFD5408, SPFD54124C, SPFD5414D Renesas R61505, R61516, R61526, R61580 Samsung S6D0117, S6E63D6 Sitronix ST7628, ST7637, ST7687, ST7712, ST7735 Solomon SSD1355, SSD1961, SSD1963, SSD2119 Syncoam SEPS525 Pozostałe kontrolery z liniową adresacją pamięci graficznej i bezpośrednim dostępem |
Dodatkowo biblioteka zawiera sterowniki urządzeń wskazujących (Pointer Input Devices) do których należą: panel dotykowy, myszka i joystick, a także sterowniki klawiatury. Domyślnie pakiet STemWin obsługuje panele dotykowe zarówno w trybie analogowym jak i cyfrowym, przy czym oprogramowanie jest zdolne do rozpoznawania tylko pojedynczych dotknięć – oprogramowanie z opcją MultiTouch (dotyczy paneli typu pojemnościowego) jest dostępne jako oddzielny pakiet dopełniający.
Wymagania sprzętowe
System wbudowany, w jakim ma zostać zaimplementowana bibliotekaSTemWin, powinien spełniać podstawowe wymagania [2]:
- posiadać 8/16/32/64-bitową jednostkę przetwarzającą (wszystkie mikrokontrolery producenta ST z rdzeniem Cortex M0, M3 oraz M4 posiadają 32-bitową jednostkę CPU),
- udostępniać niezbędne minimum ilość pamięci do wykorzystania przez bibliotekę (tabelka 6) z możliwością pracy w trybie 8-, 16- i 32-bitowym; zapotrzebowanie pamięci ROM wzrasta wraz z implementacją czcionek oraz plików graficznych,
- zawierać wyświetlacz graficzny dowolnego typu (monochromatyczny, kolorowy) i rozdzielczości – ważne jest aby był dostępny odpowiedni sterownik.
Określenie dokładnej wartości ilości pamięci wymaganej przez bibliotekę nie jest możliwe w prosty sposób. Należy tutaj uwzględnić także fakt, że zależy ona również od tego jakie elementy biblioteki będą wykorzystywane oraz od stopnia optymalizacji kodu przez kompilator. W systemach z niewielką ilością pamięci RAM można zaimplementować bibliotekę bez włączonego menedżera okien, przy czym wtedy nie będzie możliwym uzyskanie pełnowartościowego interfejsu graficznego m.in. z funkcją automatycznego przerysowywania modyfikowanych okienek, czy zarządzania ich ułożeniem w hierarchii oraz wysyłania sygnałów od zdarzeń i wywoływania funkcji zwrotnych.
Tab. 6. Przybliżone wymagania pamięciowe biblioteki STemWin w zależności od wykorzystanych opcji [2]
Zasoby | Systemy z ograniczoną ilością zasobów (brak menedżera okien) |
Systemy z dużą ilością zasobów (z menedżerem okien i widżetami) |
Pamięć RAM | 100 B | 2 – 6 kB |
Pamięć ROM | 10 – 25 kB | 30 – 60 kB |
Stos | 600 B | 1200 – 1800 B |
Dodatkowo, wymagania pamięciowe wzrastają w przypadku implementacji systemu operacyjnego czasu rzeczywistego – warto o tym wspomnieć, gdyż interfejs graficzny zaprojektowany z wykorzystaniem bibliotekiSTemWin może działać jako jedno z zadań w systemie, przy czym taka struktura oprogramowania znacząco upraszcza implementację obsługi innych procesów (np. odczyt wartości z czujników). Aby biblioteka graficzna mogła współpracować wraz z systemem czasu rzeczywistego należy zmodyfikować wartość makrodefinicji GUI_OS poprzez ustawienie jej na 1
(można również ustawić maksymalną liczbę zadań do wykorzystania przez bibliotekę – do tego celu służy makrodefinicja GUI_MAXTASK). W przypadku, gdy włączona jest funkcja serwera VNC zużycie pamięci ROM wzrasta od 3,5 kB do 5 kB. Dodatkowe informacjedotyczące wymaganej pamięci można znaleźć w dokumencie [1].
Jan Szemiet
Literatura
[1] AN4323: Gettingstarted with STemWin Library [2] UM03001: emWin, Graphic Library with Graphical User Interface, User & Reference Guide [3] http://www.segger.com/emwin.html – oficjalna strona biblioteki emWin [4] http://www.st.com/web/en/catalog/tools/PF259225 – oficjalna strona biblioteki STemWin