Graficzny interfejs użytkownika GUI: komponent Textbox (5)

W artykule przedstawiamy sposób realizacji w GUI komponentu typu Textbox współpracującego z komponentem Listbox (opisanym w poprzedniej części artykułu) przy dodawaniu nowych wpisów. Źródłem wyświetlanego tekstu jest interfejs USART6 mikrokontrolera wyprowadzony na złącze portu szeregowego typu COM zamontowanego w zestawie DevKit407. Użytkownik za pomocą dowolnego terminala może wprowadzić tekst z poziomu komputera i po wysłaniu go do podłączonego układu testowego powinien być on automatycznie wyświetlony w komponencie.

Fot. 1. Elementy składowe układu testowego

Fot. 1. Elementy składowe układu testowego

 

Fot. 2. Przykładowa aplikacja z komponentem typu Listbox i Textbox

Fot. 2. Przykładowa aplikacja z komponentem typu Listbox i Textbox

 

Schemat elektryczny

Schemat elektryczny układu testowego można znaleźć w pliku DevKit407_schematic.pdf (do pobrania poniżej), a jego fragment dotyczący portu szeregowego przedstawiono na rysunku 3. Linie UART6_TX i UART6_RX są podłączone odpowiednio do linii PC6 i PC7 mikrokontrolera.

Rys. 3. Schemat elektryczny podłączenia portu RS232 do mikrokontrolera STM32F4 w zestawie Dev407

Rys. 3. Schemat elektryczny podłączenia portu RS232 do mikrokontrolera STM32F4 w zestawie Dev407

 

Definicja komponentu

Definicja struktury opisującej komponent typu Textbox w pliku graphicObjectTypes.h:

Poszerzenie definicji typu wyliczeniowego GL_ObjType o linijkę GL_TEXTBOX:

Tworzenie i wyświetlanie komponentu

Komponent typu Textbox jest tworzony przez funkcję NewTextbox() (definicja w pliku graphicObject.c) przyjmującą jako argumenty: unikalny numer ID, szerokość boxu (w osi X, w pikselach) oraz wysokość boxu (w osi  Y, w wierszach). Działanie funkcji jest podobne jak przy tworzeniu komponentu typu Listbox:

Komponent jest wyprowadzany na ekran za pomocą funkcji SetTextboxVisible():

Ustawianie i pobieranie tekstu

Ponieważ komponent typu Textbox jest przeznaczony do pracy z tekstem to potrzebne będą dwie funkcje do ustawiania i pobierania tekstu. Pierwsza z nich zwalnia miejsce w pamięci RAM w którym znajduje się stary ciąg znaków, rezerwuje miejsce pod nowy ciąg i kopiuje do tego miejsca nowy ciąg znaków wskazywany przez wskaźnik jaki przekazuje się do funkcji jako argument, pamiętając, że ciąg znaków musi być zakończony znakiem NULL (kod 0x00):

Do pobierania wskaźnika na ciąg znaków wykorzystywany przez komponent służy funkcja GetTextboxText():

Integracja komponentu

Komponent typu Textbox posłuży wyłącznie do wyświetlania tekstu stąd też wystarczy tylko poszerzyć funkcję AddPageControlObj() o dodatkowy warunek:

Budowa interfejsu

Plik uiframework.c, opisany w trzeciej części artykułu, zostanie poszerzony o deklaracje nowego komponentu typu Textbox:

Definicja funkcji typu event-handler dla przycisku dodającego nowy wpis zostanie zmodyfikowana w ten sposób aby pobierała tekst wyświetlany w polu komponentu typu Textbox (plik uiappuser.c):

Konfiguracja modułu USART6

Na płytce zestawu znajduje się port RS232 podłączony do modułu USART6 mikrokontrolera i zostanie on wykorzystany do wprowadzania tekstu dla komponentu typu Textbox. Konfigurację modułu przedstawiono poniżej (plik main.c):

Kiedy bajt danych został odebrany przez moduł USART to wywoływana jest odpowiednia funkcja obsługi przerwania, zdefiniowana w pliku stm32f4xx_it.c:

W przypadku, gdy zostanie odebrany ciąg znaków zakończony symbolem CR to zmienna RxDataReady przyjmie wartość 1 (musi być zerowana w głównej pętli programu, w której dokonywany jest odczyt danych).

Główna pętla programu

Struktura funkcji main() pozostaje bez zmian w stosunku do opisanej w poprzedniej części artykułu i została w niej dodana jedynie obsługa przy odebraniu tekstu:

Komunikacja po RS232

Do komunikacji z układem testowym DevKit407 podłączonym do portu RS232 można wykorzystać aplikację „Terminal v.1.9b by Br@y++” (rysunek 4).

Rys. 4. Widok okna terminala wykorzystanego do komunikacji komputera z zestawem DevKit407

Rys. 4. Widok okna terminala wykorzystanego do komunikacji komputera z zestawem DevKit407

 

Parametry transmisji danych to:

  • prędkość 115200 bps,
  • 8 bitów danych,
  • 1 bit stop,
  • brak parzystości,
  • handshaking: none,
  • włączona opcja dodawania symbolu CR.

Jan Szemiet

Do pobrania

Autor: admin

Admin