This is an automated email from the ASF dual-hosted git repository.
btashton pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx-apps.git
The following commit(s) were added to refs/heads/master by this push:
new 5bcaeff lvgl: use malloc/free for memory handling and "tickless" tick
interface
5bcaeff is described below
commit 5bcaeff541ec19c01e9c4590e71d4157464e13d2
Author: Matias N <[email protected]>
AuthorDate: Thu Oct 29 19:46:52 2020 -0300
lvgl: use malloc/free for memory handling and "tickless" tick interface
This makes LVGL use malloc/free to handle its memory (instead of
their own memory handling) and supports a tick interface by which
LVGL can ask NuttX the elapsed time, instead of having to periodically
"tick" LVGL internal time in a thread.
---
examples/lvgldemo/lvgldemo.c | 53 ----------------------------
graphics/lvgl/Makefile | 2 ++
graphics/lvgl/lv_conf.h | 8 ++---
graphics/lvgl/lv_tick_interface.c | 73 +++++++++++++++++++++++++++++++++++++++
graphics/lvgl/lv_tick_interface.h | 62 +++++++++++++++++++++++++++++++++
5 files changed, 141 insertions(+), 57 deletions(-)
diff --git a/examples/lvgldemo/lvgldemo.c b/examples/lvgldemo/lvgldemo.c
index e6f9a79..eeb8bce 100644
--- a/examples/lvgldemo/lvgldemo.c
+++ b/examples/lvgldemo/lvgldemo.c
@@ -90,54 +90,6 @@ void lv_demo_widgets(void);
****************************************************************************/
/****************************************************************************
- * Name: tick_func
- *
- * Description:
- * Calls lv_tick_inc(...) every 5ms.
- *
- * Input Parameters:
- * data
- *
- * Returned Value:
- * NULL
- *
- ****************************************************************************/
-
-static FAR void *tick_func(void *data)
-{
- static long last_ms;
- long ms;
- struct timespec spec;
-
- while (1)
- {
- long diff;
-
- /* Calculate how much time elapsed */
-
- clock_gettime(CLOCK_REALTIME, &spec);
- ms = (long)spec.tv_nsec / 1000000;
- diff = ms - last_ms;
-
- /* Handle overflow */
-
- if (diff < 0)
- {
- diff = 1000 + diff;
- }
-
- lv_tick_inc(diff);
- usleep(5000);
-
- last_ms = ms;
- }
-
- /* Never will reach here */
-
- return NULL;
-}
-
-/****************************************************************************
* Public Functions
****************************************************************************/
@@ -157,7 +109,6 @@ static FAR void *tick_func(void *data)
int main(int argc, FAR char *argv[])
{
lv_disp_drv_t disp_drv;
- pthread_t tick_thread;
lv_disp_buf_t disp_buf;
static lv_color_t buf[DISPLAY_BUFFER_SIZE];
@@ -214,10 +165,6 @@ int main(int argc, FAR char *argv[])
disp_drv.buffer = &disp_buf;
lv_disp_drv_register(&disp_drv);
- /* Tick interface initialization */
-
- pthread_create(&tick_thread, NULL, tick_func, NULL);
-
/* Touchpad Initialization */
tp_init();
diff --git a/graphics/lvgl/Makefile b/graphics/lvgl/Makefile
index adf0c3a..fd386d1 100644
--- a/graphics/lvgl/Makefile
+++ b/graphics/lvgl/Makefile
@@ -51,6 +51,8 @@ LVGL_DIR_NAME = lvgl
-include ./lvgl/src/lv_draw/lv_draw.mk
-include ./lvgl/src/lv_gpu/lv_gpu.mk
+CSRCS += lv_tick_interface.c
+
# Set up build configuration and environment
WD := ${shell echo $(CURDIR) | sed -e 's/ /\\ /g'}
diff --git a/graphics/lvgl/lv_conf.h b/graphics/lvgl/lv_conf.h
index 3156a70..16ad750 100644
--- a/graphics/lvgl/lv_conf.h
+++ b/graphics/lvgl/lv_conf.h
@@ -149,7 +149,7 @@ typedef int16_t lv_coord_t;
* `lv_mem_alloc` and `lv_mem_free`
*/
-#define LV_MEM_CUSTOM 0
+#define LV_MEM_CUSTOM 1
#if LV_MEM_CUSTOM == 0
/* Size of the memory used by `lv_mem_alloc` in bytes (>= 2kB) */
@@ -423,10 +423,10 @@ typedef void * lv_img_decoder_user_data_t;
* It removes the need to manually update the tick with `lv_tick_inc`)
*/
-#define LV_TICK_CUSTOM 0
+#define LV_TICK_CUSTOM 1
#if LV_TICK_CUSTOM == 1
-#define LV_TICK_CUSTOM_INCLUDE "something.h" /* Header for the sys time
function */
-#define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis()) /* Expression evaluating
to current systime in ms */
+#define LV_TICK_CUSTOM_INCLUDE "lv_tick_interface.h" /* Header for the
sys time function */
+#define LV_TICK_CUSTOM_SYS_TIME_EXPR (lv_tick_interface()) /* Expression
evaluating to current systime in ms */
#endif /* LV_TICK_CUSTOM */
typedef void * lv_disp_drv_user_data_t; /* Type of user data in
the display driver */
diff --git a/graphics/lvgl/lv_tick_interface.c
b/graphics/lvgl/lv_tick_interface.c
new file mode 100644
index 0000000..c307642
--- /dev/null
+++ b/graphics/lvgl/lv_tick_interface.c
@@ -0,0 +1,73 @@
+/****************************************************************************
+ * graphics/lvgl/lv_tick_interface.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+#include <stdio.h>
+#include "lv_tick_interface.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Type Declarations
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+uint32_t lv_tick_interface(void)
+{
+ static bool first_time = true;
+ static struct timeval t0;
+
+ if (first_time)
+ {
+ gettimeofday(&t0, NULL);
+ first_time = false;
+ return 0;
+ }
+ else
+ {
+ struct timeval t;
+ struct timeval delta;
+
+ gettimeofday(&t, NULL);
+ timersub(&t, &t0, &delta);
+ return delta.tv_sec * 1000 + delta.tv_usec / 1000;
+ }
+}
diff --git a/graphics/lvgl/lv_tick_interface.h
b/graphics/lvgl/lv_tick_interface.h
new file mode 100644
index 0000000..8669498
--- /dev/null
+++ b/graphics/lvgl/lv_tick_interface.h
@@ -0,0 +1,62 @@
+/****************************************************************************
+ * graphics/lvgl/lv_tick_interface.h
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+#ifndef __LV_TICK_INTERFACE_H__
+#define __LV_TICK_INTERFACE_H__
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+#include <sys/time.h>
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Type Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#ifdef __cplusplus
+#define EXTERN extern "C"
+extern "C"
+{
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+uint32_t lv_tick_interface(void);
+
+#undef EXTERN
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __LV_TICK_INTERFACE_H__