diff --git a/src/dev/nuttx/lv_nuttx_cache.c b/src/dev/nuttx/lv_nuttx_cache.c new file mode 100644 index 000000000..173ad5428 --- /dev/null +++ b/src/dev/nuttx/lv_nuttx_cache.c @@ -0,0 +1,77 @@ +/** + * @file lv_nuttx_cache.c + * + */ + +/********************* + * INCLUDES + *********************/ + +#include "lv_nuttx_cache.h" +#include "../../../lvgl.h" + +#if LV_USE_NUTTX + +#include + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * STATIC PROTOTYPES + **********************/ + +static void invalidate_cache(void * buf, uint32_t stride, lv_color_format_t color_format, const lv_area_t * area); + +/********************** + * STATIC VARIABLES + **********************/ + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +void lv_nuttx_cache_init(void) +{ + lv_draw_buf_handlers_t * handlers = lv_draw_buf_get_handlers(); + handlers->invalidate_cache_cb = invalidate_cache; +} + +/********************** + * STATIC FUNCTIONS + **********************/ + +static void invalidate_cache(void * buf, uint32_t stride, lv_color_format_t color_format, const lv_area_t * area) +{ + LV_UNUSED(color_format); + LV_ASSERT_NULL(buf); + + lv_uintptr_t start; + lv_uintptr_t end; + + if(area) { + int32_t h = lv_area_get_height(area); + start = (lv_uintptr_t)buf + area->y1 * stride; + end = start + h * stride; + } + else { + /* If area is empty, use stride as length */ + start = (lv_uintptr_t)buf; + end = start + stride; + } + + LV_UNUSED(start); + LV_UNUSED(end); + up_invalidate_dcache(start, end); +} + +#endif /* LV_USE_NUTTX */ diff --git a/src/dev/nuttx/lv_nuttx_cache.h b/src/dev/nuttx/lv_nuttx_cache.h new file mode 100644 index 000000000..693744ea4 --- /dev/null +++ b/src/dev/nuttx/lv_nuttx_cache.h @@ -0,0 +1,39 @@ +/** + * @file lv_nuttx_cache.h + * + */ + +#ifndef LV_NUTTX_CACHE_H +#define LV_NUTTX_CACHE_H + +#ifdef __cplusplus +extern "C" { +#endif + +/********************* + * INCLUDES + *********************/ + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * GLOBAL PROTOTYPES + **********************/ + +void lv_nuttx_cache_init(void); + +/********************** + * MACROS + **********************/ + +#ifdef __cplusplus +} /*extern "C"*/ +#endif + +#endif /*LV_NUTTX_CACHE_H*/ diff --git a/src/dev/nuttx/lv_nuttx_entry.c b/src/dev/nuttx/lv_nuttx_entry.c index 69f406072..54c45f55a 100644 --- a/src/dev/nuttx/lv_nuttx_entry.c +++ b/src/dev/nuttx/lv_nuttx_entry.c @@ -13,6 +13,7 @@ #include #include #include +#include "lv_nuttx_cache.h" #include "../../../lvgl.h" @@ -95,6 +96,8 @@ void lv_nuttx_init(const lv_nuttx_dsc_t * dsc, lv_nuttx_result_t * result) #endif lv_tick_set_cb(millis); + lv_nuttx_cache_init(); + if(result) { lv_memzero(result, sizeof(lv_nuttx_result_t)); }