LVGL doesnt compile on the m4 on the giga r1

I've been making a UI on the Giga Display Shield that connects to wifi but when searching for wifi networks the UI freezes and doesn't respond. I've been trying to make it so that lv_task_handler(); is instead called on the M4, so it doesn't freeze when scanning for networks. This is my code

#include "Arduino_H7_Video.h"
#include "lvgl.h"
#include "Arduino_GigaDisplayTouch.h"
#include <WiFi.h>
#include "RPC.h"


Arduino_H7_Video Display(800, 480, GigaDisplayShield);
Arduino_GigaDisplayTouch TouchDetector;

bool ssid_selected = false;
bool keyboard_should_hide = true;
lv_obj_t * wifiList;
lv_obj_t * currentButton;
lv_obj_t * ssidLabel;
int status = WL_IDLE_STATUS;
lv_obj_t * ta_pass;
lv_obj_t * wifiGrid;
lv_obj_t* screen;
lv_obj_t* ssid_btn = NULL;

void ta_event_cb(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    lv_obj_t * ta = lv_event_get_target(e);
    lv_obj_t * kb = (lv_obj_t*) lv_event_get_user_data(e);
    if(code == LV_EVENT_FOCUSED) {
        lv_keyboard_set_textarea(kb, ta);
        if (keyboard_should_hide){
          lv_obj_clear_flag(kb, LV_OBJ_FLAG_HIDDEN);
        }
    }

    if(code == LV_EVENT_DEFOCUSED) {
        lv_keyboard_set_textarea(kb, NULL);
        if (keyboard_should_hide){
          lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN);
        }
    }
}

void wifiListEventHandler(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    lv_obj_t * obj = lv_event_get_target(e);
    if(code == LV_EVENT_CLICKED) {

        if(currentButton == obj) {
            currentButton = NULL;
        }
        else {
            currentButton = obj;
        }
        lv_obj_t * parent = lv_obj_get_parent(obj);
        uint32_t i;
        for(i = 0; i < lv_obj_get_child_cnt(parent); i++) {
            lv_obj_t * child = lv_obj_get_child(parent, i);
            if(child == currentButton) {
                lv_obj_add_state(child, LV_STATE_CHECKED);
                lv_label_set_text(ssidLabel, lv_list_get_btn_text(wifiList, obj));
                lv_obj_clear_flag(ssid_btn, LV_OBJ_FLAG_HIDDEN);
                ssid_selected = true;
            }
            else {
                lv_obj_clear_state(child, LV_STATE_CHECKED);
            }
        }
    }
}

void event_cb(lv_event_t * e)
{
    lv_obj_t * obj = lv_event_get_target(e);
    LV_UNUSED(obj);
    LV_LOG_USER("Button %s clicked", lv_msgbox_get_active_button_text(obj));
}

void next_btn_event(lv_event_t * e) {
  if (ssid_selected){
    Serial.println(lv_label_get_text(ssidLabel));
    if (WiFi.status() == WL_NO_MODULE) {
      Serial.println("Communication with WiFi module failed!");
    }


    // attempt to connect to WiFi network:
    while (status != WL_CONNECTED || status != 4) {
      // Connect to WPA/WPA2 network:
      status = WiFi.begin(lv_label_get_text(ssidLabel), lv_textarea_get_text(ta_pass));
      Serial.println(status);
      // wait 10 seconds for connection:
      int start = millis();
      while ((millis() - start) < 10000){
        lv_task_handler();
        lv_timer_handler();
      }
    }

    if (status == WL_CONNECTED){
      Serial.println("You're connected to the network");
    }
    else {
      Serial.println("Wrong Password");
    }
  }
}

void wifiScan(lv_event_t * e = NULL){
  lv_obj_t * btn;
  lv_obj_clean(wifiList);
  if (ssid_btn != NULL){
    lv_obj_add_flag(ssid_btn, LV_OBJ_FLAG_HIDDEN);
  }
  ssid_selected = false;
  int numSsid = WiFi.scanNetworks();

  if (numSsid != -1) {
    for (int thisNet = 0; thisNet < numSsid; thisNet++) {
      String ssid = WiFi.SSID(thisNet);
      if (!ssid.equals("")){
        btn = lv_list_add_btn(wifiList, LV_SYMBOL_WIFI, ssid.c_str());
        lv_obj_add_event_cb(btn, wifiListEventHandler, LV_EVENT_CLICKED, NULL);
      }
    }
  }
}

void startScreen(){
  static lv_coord_t col_dsc[] = { 320, 420, LV_GRID_TEMPLATE_LAST };
  static lv_coord_t row_dsc[] = { 440, LV_GRID_TEMPLATE_LAST };

  lv_obj_set_grid_dsc_array(wifiGrid, col_dsc, row_dsc);
  lv_obj_set_size(wifiGrid, Display.width(), Display.height());
  lv_obj_set_style_bg_color(wifiGrid, lv_color_hex(0x03989e), LV_PART_MAIN);

  //top left
  lv_obj_t* obj;
  lv_obj_t * label;
  lv_obj_t * btn;
  

  obj = lv_obj_create(wifiGrid);
  lv_obj_set_grid_cell(obj, LV_GRID_ALIGN_STRETCH, 0, 1,  //column
                       LV_GRID_ALIGN_STRETCH, 0, 1);      //row
  lv_obj_set_flex_flow(obj, LV_FLEX_FLOW_COLUMN);
  lv_obj_set_flex_align(obj, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);

  wifiList = lv_list_create(obj);
  lv_obj_set_style_pad_row(wifiList, 5, 0);
  lv_obj_set_flex_grow(wifiList, 4);
  wifiScan();
  
  btn = lv_btn_create(obj);
  lv_obj_set_size(btn, 100, 40);
  lv_obj_add_event_cb(btn, wifiScan, LV_EVENT_CLICKED, NULL);

  label = lv_label_create(btn);
  lv_label_set_text(label, "Reload"); 
  lv_obj_center(label);




  //bottom left
  obj = lv_obj_create(wifiGrid);
  lv_obj_set_grid_cell(obj, LV_GRID_ALIGN_STRETCH, 1, 1,  //column
                       LV_GRID_ALIGN_STRETCH, 0, 1);      //row
  lv_obj_set_flex_flow(obj, LV_FLEX_FLOW_COLUMN);
  lv_obj_set_flex_align(obj, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
  lv_obj_set_scrollbar_mode(obj, LV_SCROLLBAR_MODE_OFF);
  lv_obj_clear_flag(obj, LV_OBJ_FLAG_SCROLLABLE);

  ssidLabel = lv_label_create(obj);
  lv_label_set_text(ssidLabel, "No Wifi Network Selected");
  lv_obj_align(ssidLabel, LV_ALIGN_CENTER, 0, 0);

  ta_pass = lv_textarea_create(obj);
  lv_obj_t * kb = lv_keyboard_create(obj);  
  lv_obj_set_align(ta_pass, LV_ALIGN_CENTER);
  lv_textarea_set_password_mode(ta_pass, true);
  lv_obj_add_event_cb(ta_pass, ta_event_cb, LV_EVENT_ALL, kb);
  lv_textarea_set_placeholder_text(ta_pass, "Wifi Password");
  lv_obj_set_size(ta_pass, 380, 80);
  lv_textarea_set_one_line(ta_pass, true);
  keyboard_should_hide = false;

  lv_keyboard_set_textarea(kb, ta_pass);

  ssid_btn = lv_btn_create(obj);
  lv_obj_set_size(ssid_btn, 100, 40);
  lv_obj_add_event_cb(ssid_btn, next_btn_event, LV_EVENT_CLICKED, NULL);

  label = lv_label_create(ssid_btn);
  lv_label_set_text(label, "Connect");
  lv_obj_center(label);
  lv_obj_add_flag(ssid_btn, LV_OBJ_FLAG_HIDDEN);
}

void setup() {
  Serial.begin(9600);
  Serial.println("Start of setup");
  Display.begin();
  TouchDetector.begin();
  screen = lv_obj_create(lv_scr_act());
  wifiGrid = lv_obj_create(lv_scr_act());
  lv_obj_set_size(screen, Display.width(), Display.height());
  startScreen();
}

void loop() {
  lv_task_handler();
  lv_timer_handler();
}

It's a sluggish compile up until compiling the Touch library, and then picks up after Wire library. Hangs for a minute, but compile time was about 1-2 minutes. Was able to go refresh my coffee and still not finish the compile.

Nothing displays on mine.

Tried this on a Windows machine running 10/11, ide 2.x.

The problem that I am having is that on the M4 lvgl doesnt compile with this sketch.

#include <Arduino.h>
#include <RPC.h>
#include <lvgl.h>


void setup() {
  RPC.begin();
}


void loop() {
  lv_task_handler();
  lv_timer_handler();
}
``` The output that I get is 
FQBN: arduino:mbed_giga:giga:split=50_50,target_core=cm4
Using board 'giga' from platform in folder: C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10
Using core 'arduino' from platform in folder: C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10

Detecting libraries used...
C:\Users\David\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4/bin/arm-none-eabi-g++ -c -w -g3 -nostdlib @C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\variants\GENERIC_STM32H747_M4/defines.txt @C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\variants\GENERIC_STM32H747_M4/cxxflags.txt -DGIGA_PINS -mcpu=cortex-m4 -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -w -x c++ -E -CC -DARDUINO=10607 -DARDUINO_GIGA -DARDUINO_ARCH_MBED_GIGA -DARDUINO_ARCH_MBED -DARDUINO_LIBRARY_DISCOVERY_PHASE=1 -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\cores\arduino -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\variants\GENERIC_STM32H747_M4 -DCM4_BINARY_START=0x08100000 -DCM4_BINARY_END=0x08200000 -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\cores\arduino/api/deprecated -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\cores\arduino/api/deprecated-avr-comp -iprefixC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\cores\arduino @C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\variants\GENERIC_STM32H747_M4/../GIGA/includes.txt C:\Users\David\AppData\Local\Temp\arduino\sketches\FB72828A90D6494B389022392211923A\sketch\gigamainM4.ino.cpp -o nul
Alternatives for RPC.h: [RPC@1.0]
ResolveLibrary(RPC.h)
  -> candidates: [RPC@1.0]
C:\Users\David\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4/bin/arm-none-eabi-g++ -c -w -g3 -nostdlib @C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\variants\GENERIC_STM32H747_M4/defines.txt @C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\variants\GENERIC_STM32H747_M4/cxxflags.txt -DGIGA_PINS -mcpu=cortex-m4 -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -w -x c++ -E -CC -DARDUINO=10607 -DARDUINO_GIGA -DARDUINO_ARCH_MBED_GIGA -DARDUINO_ARCH_MBED -DARDUINO_LIBRARY_DISCOVERY_PHASE=1 -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\cores\arduino -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\variants\GENERIC_STM32H747_M4 -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\libraries\RPC\src -DCM4_BINARY_START=0x08100000 -DCM4_BINARY_END=0x08200000 -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\cores\arduino/api/deprecated -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\cores\arduino/api/deprecated-avr-comp -iprefixC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\cores\arduino @C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\variants\GENERIC_STM32H747_M4/../GIGA/includes.txt C:\Users\David\AppData\Local\Temp\arduino\sketches\FB72828A90D6494B389022392211923A\sketch\gigamainM4.ino.cpp -o nul
Alternatives for rpclib.h: [rpclib@1.0.0]
ResolveLibrary(rpclib.h)
  -> candidates: [rpclib@1.0.0]
C:\Users\David\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4/bin/arm-none-eabi-g++ -c -w -g3 -nostdlib @C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\variants\GENERIC_STM32H747_M4/defines.txt @C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\variants\GENERIC_STM32H747_M4/cxxflags.txt -DGIGA_PINS -mcpu=cortex-m4 -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -w -x c++ -E -CC -DARDUINO=10607 -DARDUINO_GIGA -DARDUINO_ARCH_MBED_GIGA -DARDUINO_ARCH_MBED -DARDUINO_LIBRARY_DISCOVERY_PHASE=1 -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\cores\arduino -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\variants\GENERIC_STM32H747_M4 -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\libraries\RPC\src -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\libraries\rpclib\src -DCM4_BINARY_START=0x08100000 -DCM4_BINARY_END=0x08200000 -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\cores\arduino/api/deprecated -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\cores\arduino/api/deprecated-avr-comp -iprefixC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\cores\arduino @C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\variants\GENERIC_STM32H747_M4/../GIGA/includes.txt C:\Users\David\AppData\Local\Temp\arduino\sketches\FB72828A90D6494B389022392211923A\sketch\gigamainM4.ino.cpp -o nul
Alternatives for openamp.h: [openamp@1.0]
ResolveLibrary(openamp.h)
  -> candidates: [openamp@1.0]
C:\Users\David\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4/bin/arm-none-eabi-g++ -c -w -g3 -nostdlib @C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\variants\GENERIC_STM32H747_M4/defines.txt @C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\variants\GENERIC_STM32H747_M4/cxxflags.txt -DGIGA_PINS -mcpu=cortex-m4 -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -w -x c++ -E -CC -DARDUINO=10607 -DARDUINO_GIGA -DARDUINO_ARCH_MBED_GIGA -DARDUINO_ARCH_MBED -DARDUINO_LIBRARY_DISCOVERY_PHASE=1 -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\cores\arduino -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\variants\GENERIC_STM32H747_M4 -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\libraries\RPC\src -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\libraries\rpclib\src -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\libraries\openamp_arduino\src -DCM4_BINARY_START=0x08100000 -DCM4_BINARY_END=0x08200000 -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\cores\arduino/api/deprecated -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\cores\arduino/api/deprecated-avr-comp -iprefixC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\cores\arduino @C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\variants\GENERIC_STM32H747_M4/../GIGA/includes.txt C:\Users\David\AppData\Local\Temp\arduino\sketches\FB72828A90D6494B389022392211923A\sketch\gigamainM4.ino.cpp -o nul
Alternatives for lvgl.h: [lvgl@8.3.11]
ResolveLibrary(lvgl.h)
  -> candidates: [lvgl@8.3.11]
C:\Users\David\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4/bin/arm-none-eabi-g++ -c -w -g3 -nostdlib @C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\variants\GENERIC_STM32H747_M4/defines.txt @C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\variants\GENERIC_STM32H747_M4/cxxflags.txt -DGIGA_PINS -mcpu=cortex-m4 -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -w -x c++ -E -CC -DARDUINO=10607 -DARDUINO_GIGA -DARDUINO_ARCH_MBED_GIGA -DARDUINO_ARCH_MBED -DARDUINO_LIBRARY_DISCOVERY_PHASE=1 -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\cores\arduino -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\variants\GENERIC_STM32H747_M4 -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\libraries\RPC\src -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\libraries\rpclib\src -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\libraries\openamp_arduino\src -Ic:\Users\David\Documents\Arduino\libraries\lvgl\src -DCM4_BINARY_START=0x08100000 -DCM4_BINARY_END=0x08200000 -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\cores\arduino/api/deprecated -IC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\cores\arduino/api/deprecated-avr-comp -iprefixC:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\cores\arduino @C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\variants\GENERIC_STM32H747_M4/../GIGA/includes.txt C:\Users\David\AppData\Local\Temp\arduino\sketches\FB72828A90D6494B389022392211923A\sketch\gigamainM4.ino.cpp -o nul
Alternatives for ../../lv_conf.h: []
In file included from c:\users\david\documents\arduino\libraries\lvgl\src/misc/lv_log.h:16:0,
                 from c:\users\david\documents\arduino\libraries\lvgl\lvgl.h:25,
                 from c:\Users\David\Documents\Arduino\libraries\lvgl\src/lvgl.h:17,
                 from C:\Users\David\Documents\Arduino\gigamainM4\gigamainM4.ino:3:
c:\users\david\documents\arduino\libraries\lvgl\src\lv_conf_internal.h:41:18: fatal error: ../../lv_conf.h: No such file or directory
         #include "../../lv_conf.h"                /*Else assume lv_conf.h is next to the lvgl folder*/
                  ^~~~~~~~~~~~~~~~~
compilation terminated.
ResolveLibrary(../../lv_conf.h)
  -> candidates: []

Using library RPC at version 1.0 in folder: C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\libraries\RPC 
Using library rpclib at version 1.0.0 in folder: C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\libraries\rpclib 
Using library openamp at version 1.0 in folder: C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\mbed_giga\4.0.10\libraries\openamp_arduino 
Using library lvgl at version 8.3.11 in folder: C:\Users\David\Documents\Arduino\libraries\lvgl 
exit status 1

Compilation error: exit status 1

Is lv_conf.h included in the export folder from LVGL?

The file is found nowhere on my pc.

Seems like this is where lv_conf.h originates...maybe?

https://docs.lvgl.io/latest/en/html/get-started/arduino.html#configure-lvgl

I do remember I added an lv_conf.h file I will, try removing it and see what happens

I read the file and there is a comment that quotes "Else assume lv_conf.h is next to the lvgl folder".

I moved the lv_conf.h folder and it fixed the issue

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.