LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

GUIX Studio: mikrokontrolery Renesas Synergy w aplikacjach graficznych [2]

Konfiguracja obiektu Prompt ekranu Window 1 została pokazana na rysunku 47 i 48. Obiekt instructions ma wykonywać akcję po przyciśnięciu i dlatego ma zaznaczona opcję Enable. Obiekt Window 1 text zmienia tylko napis przez siebie wyświetlany i nie ma zaznaczonej opcji Enable. Analogicznie wykonujemy konfigurację elementów Prompt umieszczonych w oknie window2rysunki 49 i 50.

Rys. 47. Konfiguracja Prompt Windowchanger – C

Rys. 47. Konfiguracja Prompt Windowchanger – C

Rys. 48. Konfiguracja Prompt window1_text – ekran window 1

Rys. 48. Konfiguracja Prompt window1_text – ekran window 1

Rys. 49. Konfiguracja Propmpt window2_text – ekran window 2

Rys. 49. Konfiguracja Propmpt window2_text – ekran window 2

Rys. 50. Konfiguracja Propmpt hellotext – ekran window 2

Rys. 50. Konfiguracja Propmpt hellotext – ekran window 2

Po umieszczeniu wszystkich elementów graficznych i ich skonfigurowaniu aplikacja GUIX Studio wygeneruje 4 pliki: guiapp_resources.c, guiapp_resources.h, guispp_specificiations.c i guispp_specificiations.h i umieści je w folderze gui. Żeby to się stało trzeba z menu Project uruchomić Generate All Output Filesrysunek 51.

Rys. 51. Generowanie plików wynikowych

Rys. 51. Generowanie plików wynikowych

W plikach wygenerowanych przez GUIX Studio są umieszczone definicje elementów graficznych oraz funkcje ich rysownia na ekranie.

Ostatni etap, to napisanie funkcji, która reaguje na zdarzenia pochodzące z obsługi interfejsu dotykowego. Każdy element graficzny może zgłaszać zdarzenie po przyciśnięciu obszaru ekranu, na którym ten element jest umieszczony. Taką funkcję można napisać samodzielnie, ale wymaga to sporej wiedzy i żmudnego wczytywania się w dokumentację użytych elementów biblioteki SSP. Dużo łatwiej jest posiłkować się gotowym rozwiązaniem, które potem będzie można adaptować do własnych celów. Firma Renesas umieściła w nocie aplikacyjnej R12AB0021EU0100 gotowy plik guiapp_event_handlers.c. Na listingach 2 i 3 pokazano procedury dla obsługi ekranów 1 i 2.

 

List. 2. Obsługa zdarzeń dla ekranu 1

 

UINT window1_handler(GX_WINDOW *widget, GX_EVENT *event_ptr)
{
  UINT result = gx_window_event_process(widget, event_ptr);

  switch (event_ptr->gx_event_type)
  {
  case GX_SIGNAL(ID_BUTTONENABLER, GX_EVENT_TOGGLE_ON):
    button_enabled = true;
    update_text_id(widget->gx_widget_parent, ID_WINDOWCHANGER, GX_STRING_ID_BUTTON_ENABLED);
    update_text_id(widget->gx_widget_parent, ID_INSTRUCTIONS, GX_STRING_ID_INSTRUCT_BUTTON);
    break;
  case GX_SIGNAL(ID_BUTTONENABLER, GX_EVENT_TOGGLE_OFF):
    button_enabled = false;
    update_text_id(widget->gx_widget_parent, ID_WINDOWCHANGER, GX_STRING_ID_BUTTON_DISABLED);
    update_text_id(widget->gx_widget_parent, ID_INSTRUCTIONS, GX_STRING_ID_INSTRUCT_CHECKBOX);
    break;
  case GX_SIGNAL(ID_WINDOWCHANGER, GX_EVENT_CLICKED):
    if(button_enabled){
      show_window((GX_WINDOW*)&window2, (GX_WIDGET*)widget, true);
    }
    break;
  default:
    gx_window_event_process(widget, event_ptr);
    break;
  }

  return result;
}

List. 3. Obsługa zdarzeń dla ekranu windows 2

 

UINT window2_handler(GX_WINDOW *widget, GX_EVENT *event_ptr)
{
  UINT result = gx_window_event_process(widget, event_ptr);

  switch (event_ptr->gx_event_type){
    case GX_EVENT_PEN_UP:
      show_window((GX_WINDOW*)&window1, (GX_WIDGET*)widget, true);
      break;
    default:
      result = gx_window_event_process(widget, event_ptr);
      break;
  }
  return result;
}

static UINT show_window(GX_WINDOW * p_new, GX_WIDGET * p_widget, bool detach_old)
{
  UINT err = GX_SUCCESS;

  if (!p_new->gx_widget_parent)
  {
    err = gx_widget_attach(p_window_root, p_new);
  }
  else
  {
    err = gx_widget_show(p_new);
  }

  gx_system_focus_claim(p_new);

  GX_WIDGET * p_old = p_widget;
  if (p_old && detach_old)
  {
    if (p_old != (GX_WIDGET*)p_new)
    {
      gx_widget_detach(p_old);
    }
  }

  return err;
}

Absolwent Wydziału Elektroniki Politechniki Wrocławskiej, współpracownik miesięcznika Elektronika Praktyczna, autor książek o mikrokontrolerach Microchip i wyświetlaczach graficznych, wydanych nakładem Wydawnictwa BTC. Zawodowo zajmuje się projektowaniem zaawansowanych systemów mikroprocesorowych.