A few of my projects

Some bespokely designed hardware, all using Silabs EFM32GG11 and SSD1963 display controllers.
These are currently being used in commercial industrial applications. Including instrumentation and process control production environments.

Typical LVGL CPU usage on my target systems is fairly low despite it doing a lot of hard work.

Timing Resolution = 25 us
Timing Maximum period days:hh:mm:ss =   1:05:49:34

_T# __Task-Name________  PC PB __State__ ___CPU-Time_used___ SCPU-% OCPU-% Stack_Base __SP_Now__ MinSb MinSw
  1 IDLE                  0  0 Ready       0:00:24:56.330025  96.20  96.18 0x2001e538 0x2001e8dc   828   207
  2 Tmr Svc               1  1 Blocked     0:00:00:00.423375   0.03   0.03 0x2001e938 0x2001ecac   808   202
  3 Supervisor            5  5 Blocked     0:00:00:10.852075   0.70   0.70 0x2001ed38 0x2001f03c   396    99
  4 CLKS_Calib            1  1 Blocked     0:00:00:00.037175   0.00   0.00 0x2001db38 0x2001df2c   996   249
  5 Command-Line          3  3 Running     0:00:00:00.098200   0.01   0.01 0x2001b738 0x2001c054  2148   537
  6 Sampler               7  7 Blocked     0:00:00:06.282500   0.40   0.40 0x2001e038 0x2001e424  1004   251
 10 LVGL                  2  2 Blocked     0:00:00:41.329075   2.66   2.66 0x2001c338 0x2001ce34  1504   376
 14 TskCbrMan             6  6 Blocked     0:00:00:00.048350   0.00   0.00 0x2001d538 0x2001da1c  1252   313
------------------------------------------------------------------------------------------------------------
Sum of task times                          0:00:25:55.400775 100.00                               8936  2234
OS Reported total time                     0:00:25:55.727850         99.98            
System Uptime                              0:00:25:55.727                             


5 Likes

Thank you for sharing @deonm!

It looks quite professional!

Could you add a few lines about it to the Reference?

very cool!!

Thank you, Will do

can you share me with some source code? i am a newbee try to learn lvgv with my efm32lg board, thanks a lot

This is impressive.

@deonm I’ve been struggling to implement the “status bar”(top bar) that you have in some of your projects. The one including the wifi, bluetooth, time, etc…

Would you share how to get it done?

Hi @JoeDims,
I will answer this in two ways,

  1. I felt a need to have a set of features available generally for all pages in an application without them being dependent on or influencing one another among them being, frugal memory management, common look and feel and implicit functionality regarding navigation etc without the need to deal with those matters on each page/screen I created. This is basically described here,
    Sandbox application framework.
    Although I continued development on the concept considerably, I have not been posting updates on the forum as I received very little feedback on the framework. I took this to mean there is probably no interest in it. If you are interested, I will make the latest version available to you.
  2. If you prefer, the picture and short code segment below shows the basic concept, you can adapt it as needed.
typedef struct {
	lv_obj_t * hdr;
	lv_obj_t * btn;
	lv_obj_t * lbl;
	char * buf;
	size_t buf_size;
} htd_t;

static void header_task(lv_task_t * tsk)
{
	htd_t * mem = tsk->user_data;
	if( !mem )
		return;
	time_t tme = time(NULL);
	time_t tme1 = tme;
	tme /= 60;
	unsigned mm = tme%60;
	unsigned hh = (tme%1440)/60;

	sprintf( mem->buf, tme1&1 ? "%4.1f%sC %s1 %s %.2u %.2u" : "%4.1f%sC %s1 %s %.2u:%.2u"
		, Sampler_BrdTempUiGet()
		, SYMBOL_EXT_DEGREE_SIGN
		, LV_SYMBOL_WIFI
		, LV_SYMBOL_BLUETOOTH
		, hh, mm
	);

	lv_label_set_text_static( mem->lbl, NULL );
}

static void init_status_area(void)
{
	lv_obj_t * header = sndbx_get_header();
	lv_obj_t * btn  = sndbx_get_settings_btn();

	htd_t *mem = lv_mem_alloc(sizeof(htd_t));

	mem->hdr = header;
	mem->btn = btn;
	mem->lbl = lv_label_create(header, NULL);
	mem->buf = lv_mem_alloc(128);
	mem->buf_size = 128;

	mem->buf[0] = '\0';
	lv_label_set_text_static( mem->lbl, mem->buf );
	lv_label_set_align( mem->lbl, LV_LABEL_ALIGN_RIGHT );
	lv_label_set_recolor( mem->lbl, true );

	lv_task_t * tsk = lv_task_create( header_task, 1000, LV_TASK_PRIO_LOW, mem );
	header_task(tsk);
	lv_obj_align( mem->lbl, mem->btn, LV_ALIGN_OUT_LEFT_MID, -LV_DPI*1/12, 0);
	lv_obj_set_auto_realign( mem->lbl, true );
}

sndbx_get_header() (return’s sandbox created object, sized and laid out as required for the header)
and
sndbx_get_settings_btn() (return’s sandbox created button, top right)

The page title is created and managed by the sandbox framework. As are the navigation buttons as described in the link. But that you could do without the framework if you like.

I hope this helps, let me know if I could be of further assistance.

Hi @deonm

  1. This is very resourceful. Thanks for sharing
    I would appreciate if you could share the latest version aswell

  2. This is definitely what I wanted to impliment.
    I’m busy building something similar, I will share mine once I have a working version then update it as i make improvement.

If there is any other platform where you are more active regarding lvgl like github or any other platform I wouldn’t mind checking there aswell.

And I will definitely reach out for further assistance.

It will probably require some tweaking to get it to compile on the most recent master branch. I last worked on it some months back and there may be changes in lvgl that would require changes to the sandbox framework. Give me a day or two and I will send you a visual studio project that should just work with the most recent v7xx lvgl. I am not going to do anything with v8xx lvgl until it it has been officially released and is the de facto master repo version.

Nope, not really. I will try to help here where I can.

1 Like

@JoeDims