theme et factorisation

This commit is contained in:
marc 2025-04-09 13:02:43 +02:00
parent af72af7150
commit e8026b0f88
13 changed files with 1400 additions and 1225 deletions

14
.vscode/settings.json vendored
View File

@ -88,7 +88,19 @@
"typeinfo": "cpp", "typeinfo": "cpp",
"variant": "cpp", "variant": "cpp",
"esp_task_wdt.h": "c", "esp_task_wdt.h": "c",
"stdio.h": "c" "stdio.h": "c",
"lv_color.h": "c",
"lv_theme_simple.h": "c",
"esp_log.h": "c",
"lv_theme_domotic.h": "c",
"event_groups.h": "c",
"freertos.h": "c",
"ihm.h": "c",
"esp_check.h": "c",
"esp-bsp.h": "c",
"esp_littlefs.h": "c",
"esp_vfs_fat.h": "c",
"esp_http_client.h": "c"
}, },
"idf.pythonInstallPath": "/usr/local/bin/python" "idf.pythonInstallPath": "/usr/local/bin/python"
} }

View File

@ -1,7 +1,8 @@
#pragma once
#include "time.h" #include "time.h"
#include "stdbool.h"
struct node { /*struct node {
struct node *next; struct node *next;
int e; int e;
}; };
@ -10,6 +11,7 @@ struct Hashtable {
unsigned Tablesize; unsigned Tablesize;
struct node *Cells; struct node *Cells;
}; };
*/
struct dailyforecast_prev{ struct dailyforecast_prev{
float min; float min;
@ -24,17 +26,17 @@ struct forecast_prev{
char icon[9]; char icon[9];
}; };
struct meteodailyforecast_data{ typedef struct meteodailyforecast_data{
time_t datetime; time_t datetime;
bool isValid; bool isValid;
struct dailyforecast_prev previsions; struct dailyforecast_prev previsions;
}; } meteodailyforecast_data;
struct meteoforecast_data{ typedef struct meteoforecast_data{
time_t datetime; time_t datetime;
bool isValid; bool isValid;
struct forecast_prev previsions; struct forecast_prev previsions;
}; } meteoforecast_data;
typedef void (*weather_data_callback)(struct meteodailyforecast_data *datas, struct meteoforecast_data *datasf); typedef void (*weather_data_callback)(struct meteodailyforecast_data *datas, struct meteoforecast_data *datasf);
typedef void (*weather_data_start_callback)(); typedef void (*weather_data_start_callback)();

View File

@ -9,6 +9,8 @@
See the file LICENSE for details. See the file LICENSE for details.
*/ */
#include "meteofrance.h"
#include "freertos/FreeRTOS.h" #include "freertos/FreeRTOS.h"
#include "freertos/task.h" #include "freertos/task.h"
#include "esp_system.h" #include "esp_system.h"
@ -17,7 +19,6 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include "meteofrance.h"
#include "cJSON.h" #include "cJSON.h"
#include "esp_http_client.h" #include "esp_http_client.h"
#include "esp_tls.h" #include "esp_tls.h"
@ -389,7 +390,7 @@ void initialise_weather_data_retrieval(unsigned long retreival_period)
// http_client_on_process_chunk(&http_client, process_chunk); // http_client_on_process_chunk(&http_client, process_chunk);
// http_client_on_disconnected(&http_client, disconnected); // http_client_on_disconnected(&http_client, disconnected);
TaskHandle_t xHandle = NULL; TaskHandle_t xHandle = NULL;
BaseType_t ret1 = xTaskCreate(&http_request_task, "http_request_task", 5 * 1024, NULL, 5, &xHandle); BaseType_t ret1 = xTaskCreate(&http_request_task, "http_meteof", 5 * 1024, NULL, 5, &xHandle);
if(ret1!=pdPASS ){ if(ret1!=pdPASS ){
ESP_LOGE(TAG, "Impossible de creer la tache %i", ret1); ESP_LOGE(TAG, "Impossible de creer la tache %i", ret1);
} }

View File

@ -104,7 +104,7 @@ dependencies:
type: service type: service
version: 1.2.0 version: 1.2.0
espressif/esp_hosted: espressif/esp_hosted:
component_hash: ef6bc803451fab3c3f9a679bbc1c48fba0ceeeabc5af4178dd7d2300fafa423e component_hash: 9e7a202cc18c08fa9b67c0261f9733b33af9b3af73eafd4ef6704cdb37bde7c2
dependencies: dependencies:
- name: idf - name: idf
require: private require: private
@ -112,7 +112,7 @@ dependencies:
source: source:
registry_url: https://components.espressif.com registry_url: https://components.espressif.com
type: service type: service
version: 1.4.0 version: 1.4.1
espressif/esp_lcd_ek79007: espressif/esp_lcd_ek79007:
component_hash: 07c1afab7e9fd4dd2fd06ff9245e65327c5bbd5485efec199496e19a9304d47b component_hash: 07c1afab7e9fd4dd2fd06ff9245e65327c5bbd5485efec199496e19a9304d47b
dependencies: dependencies:
@ -262,6 +262,6 @@ direct_dependencies:
- joltwallet/littlefs - joltwallet/littlefs
- lvgl/lvgl - lvgl/lvgl
- suda-morris/am2302_rmt - suda-morris/am2302_rmt
manifest_hash: 63eaaa4e8d94182764c8e6d23da6beff61e56db0cec736ba19ba0f825469c47c manifest_hash: 15284e0a2c7903f038a0abcadaa03469042782b30abea68977d3e3e45b11bbaa
target: esp32p4 target: esp32p4
version: 2.0.0 version: 2.0.0

View File

@ -1,6 +1,6 @@
dependencies: dependencies:
espressif/esp_wifi_remote: "0.8.5" espressif/esp_wifi_remote: "0.8.5"
espressif/esp32_p4_function_ev_board: "^4.1.1" #espressif/esp32_p4_function_ev_board: "^4.1.1"
suda-morris/am2302_rmt: "^1.0.0" suda-morris/am2302_rmt: "^1.0.0"
espressif/esp_websocket_client: "^1.3.0" espressif/esp_websocket_client: "^1.3.0"
joltwallet/littlefs: ^1.14.8 joltwallet/littlefs: ^1.14.8
@ -12,8 +12,8 @@ dependencies:
version: '5.4.*' version: '5.4.*'
lvgl/lvgl: lvgl/lvgl:
version: 9.2.0 version: 9.2.0
espressif/esp32_p4_function_ev_board: #espressif/esp32_p4_function_ev_board:
version: "4.1.*" # version: "4.1.*"
chmorgan/esp-audio-player: chmorgan/esp-audio-player:
version: "1.0.*" version: "1.0.*"

1055
main/ihm.c Normal file

File diff suppressed because it is too large Load Diff

31
main/ihm.h Normal file
View File

@ -0,0 +1,31 @@
#pragma once
#include "meteofrance.h"
#include "esp_lvgl_port.h"
#include "bsp/esp-bsp.h"
void app_main_display(void);
bool display_lock(const char *TAG);
void display_unlock(const char *TAG);
void meteo_obs_cb(lv_observer_t *observer, lv_subject_t *subject);
void showMeteoIcon(const char *icon, lv_obj_t *desc_icon, int childNr);
void draw_tabVolets();
void draw_ihm();
void weather_data_retreived_start();
void weather_data_retreived(meteodailyforecast_data dailyDatas[3], meteoforecast_data datas[3]);
void draw_time(char * dateHeure);
void show_temp(char * tempHumid);
void draw_tabMeteo();
void tabChgEvt(lv_event_t *event);
void draw_tabCuve();
void draw_tabHome();
void draw_tabSettings();

View File

@ -1,83 +0,0 @@
static void weatherdata_obs_cb(lv_observer_t *observer, lv_subject_t *subject)
{
// Retrieve weatherdata
struct meteodailyforecast_data *data = subject->value.pointer;
//printffd(data);
char buff[40] = {};
// sprintf(buff,"%s %.1f %.1f", data->previsions.desc, data->previsions.min, data->previsions.max);
lv_obj_t *parent = (lv_obj_t *)(observer->target);
lv_obj_t *datefld = lv_obj_get_child(parent, 0);
lv_obj_t *desc_icon = lv_obj_get_child(parent, 1);
lv_obj_t *temps = lv_obj_get_child(parent, 2);
if (strcmp(data->previsions.icon, "p1j") == 0)
{
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p1j);
}else if (strcmp(data->previsions.icon, "p2j") == 0)
{
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p2j);
}else if (strcmp(data->previsions.icon, "p3j") == 0)
{
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p3j);
}else if (strcmp(data->previsions.icon, "p5bisj") == 0)
{
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p5bisj);
}else if (strcmp(data->previsions.icon, "p12j") == 0)
{
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p12j);
}else if (strcmp(data->previsions.icon, "p12bisj") == 0)
{
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p12bisj);
}else if (strcmp(data->previsions.icon, "p14j") == 0)
{
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p14j);
}else if (strcmp(data->previsions.icon, "p24j") == 0)
{
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p24j);
}else if (strcmp(data->previsions.icon, "p25j") == 0)
{
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p25j);
}else if (strcmp(data->previsions.icon, "p26j") == 0)
{
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p26j);
}else if (strcmp(data->previsions.icon, "p27j") == 0)
{
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p27j);
}else if (strcmp(data->previsions.icon, "p28j") == 0)
{
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p28j);
}else if (strcmp(data->previsions.icon, "p29j") == 0)
{
lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p29j);
}else{
ESP_LOGE(TAG, "Image %s non connue",data->previsions.icon);
}
char buffer[80];
dtToString(data->datetime,buffer);
lv_label_set_text(datefld, buffer);
lv_label_set_text(lv_obj_get_child(desc_icon, 1), data->previsions.desc);
lv_label_set_text_fmt(lv_obj_get_child(temps, 0), "%.1f°C", data->previsions.max);
lv_label_set_text_fmt(lv_obj_get_child(temps, 1), "%.1f°C", data->previsions.min);
}
struct weatherDay_fragment_t
{
/* IMPORTANT: don't miss this part */
lv_fragment_t base;
/* States, object references and data fields for this fragment */
int dayNr;
bool showTitle;
const char *title;
float minTemp;
float maxTemp;
};
static void weatherDay_fragment_ctor(lv_fragment_t *self, void * args)
{
int dayNo = ((int *)args)[0];
bool showDate = ((int*)args)[1];
((struct weatherDay_fragment_t *)self)->dayNr = dayNo;
((struct weatherDay_fragment_t *)self)->showTitle = showDate;
ESP_LOGI(TAG, "Fragment initialisé avec le jour n°%d - Afficher la date %d",dayNo, showDate);
}

177
main/lv_theme_domotic.c Normal file
View File

@ -0,0 +1,177 @@
/**
* @file lv_theme_simple.c
*
*/
#define LV_USE_THEME_SIMPLE_DOMOTIC 1
/*********************
* INCLUDES
*********************/
#if LV_USE_THEME_SIMPLE_DOMOTIC
#include "lv_theme_domotic.h"
#include "esp_lvgl_port.h"
/*********************
* DEFINES
*********************/
LV_FONT_DECLARE(montserrat_medium_12)
LV_FONT_DECLARE(montserrat_medium_18)
LV_FONT_DECLARE(montserrat_medium_24)
struct _my_theme_t;
typedef struct _my_theme_t my_theme_t;
#define theme_def (*(my_theme_t **)(&LV_GLOBAL_DEFAULT()->theme_simple))
#define COLOR_SCR lv_palette_lighten(LV_PALETTE_GREY, 4)
#define COLOR_WHITE lv_color_white()
#define COLOR_LIGHT lv_palette_lighten(LV_PALETTE_GREY, 2)
#define COLOR_DARK lv_palette_main(LV_PALETTE_GREY)
#define COLOR_DIM lv_palette_darken(LV_PALETTE_GREY, 2)
#define SCROLLBAR_WIDTH 2
/**********************
* TYPEDEFS
**********************/
typedef struct {
lv_style_t scr;
lv_style_t transp;
lv_style_t white;
lv_style_t light;
lv_style_t dark;
lv_style_t dim;
lv_style_t scrollbar;
#if LV_USE_ARC
lv_style_t arc_line;
lv_style_t arc_knob;
#endif
#if LV_USE_TEXTAREA
lv_style_t ta_cursor;
#endif
} my_theme_styles_t;
struct _my_theme_t {
lv_theme_t base;
my_theme_styles_t styles;
bool inited;
};
/**********************
* STATIC PROTOTYPES
**********************/
static void style_init_reset(lv_style_t * style);
static void theme_apply(lv_theme_t * th, lv_obj_t * obj);
/**********************
* STATIC VARIABLES
**********************/
/**********************
* MACROS
**********************/
/**********************
* STATIC FUNCTIONS
**********************/
static void style_init(my_theme_t * theme)
{
}
/**********************
* GLOBAL FUNCTIONS
**********************/
bool lv_theme_domotic_is_inited(void)
{
my_theme_t * theme = theme_def;
if(theme == NULL) return false;
return theme->inited;
}
lv_theme_t * lv_theme_domotic_get(void)
{
if(!lv_theme_domotic_is_inited()) {
return NULL;
}
return (lv_theme_t *)theme_def;
}
void lv_theme_domotic_deinit(void)
{
my_theme_t * theme = theme_def;
if(theme) {
if(theme->inited) {
lv_style_t * theme_styles = (lv_style_t *)(&(theme->styles));
uint32_t i;
for(i = 0; i < sizeof(my_theme_styles_t) / sizeof(lv_style_t); i++) {
lv_style_reset(theme_styles + i);
}
}
lv_free(theme_def);
theme_def = NULL;
}
}
lv_theme_t * lv_theme_domotic_init(lv_display_t * disp)
{
/*This trick is required only to avoid the garbage collection of
*styles' data if LVGL is used in a binding (e.g. MicroPython)
*In a general case styles could be in simple `static lv_style_t my_style...` variables*/
if(!lv_theme_domotic_is_inited()) {
theme_def = lv_malloc_zeroed(sizeof(my_theme_t));
}
my_theme_t * theme = theme_def;
theme->base.disp = disp;
theme->base.font_small = &montserrat_medium_12;
theme->base.font_normal = &montserrat_medium_18;
theme->base.font_large = &montserrat_medium_24;
theme->base.apply_cb = theme_apply;
lv_theme_t * th_act = lv_display_get_theme(NULL);
lv_theme_set_parent((lv_theme_t *)theme, th_act);
style_init(theme);
if(disp == NULL || lv_display_get_theme(disp) == (lv_theme_t *)theme) {
lv_obj_report_style_change(NULL);
}
theme->inited = true;
return (lv_theme_t *)theme_def;
}
static void theme_apply(lv_theme_t * th, lv_obj_t * obj)
{
LV_UNUSED(th);
my_theme_t * theme = theme_def;
lv_obj_t * parent = lv_obj_get_parent(obj);
if(parent == NULL) {
lv_obj_add_style(obj, &theme->styles.scr, 0);
lv_obj_add_style(obj, &theme->styles.scrollbar, LV_PART_SCROLLBAR);
return;
}
}
/**********************
* STATIC FUNCTIONS
**********************/
static void style_init_reset(lv_style_t * style)
{
if(lv_theme_simple_is_inited()) {
lv_style_reset(style);
}
else {
lv_style_init(style);
}
}
#endif

62
main/lv_theme_domotic.h Normal file
View File

@ -0,0 +1,62 @@
/**
* @file lv_theme_domotic.h
*
*/
#ifndef LV_THEME_domotic_DOMOTIC_H
#define LV_THEME_domotic_DOMOTIC_H
#ifdef __cplusplus
extern "C" {
#endif
/*********************
* INCLUDES
*********************/
#include "esp_lvgl_port.h"
/*********************
* DEFINES
*********************/
/**********************
* TYPEDEFS
**********************/
/**********************
* GLOBAL PROTOTYPES
**********************/
/**
* Initialize the theme
* @param disp pointer to display to attach the theme
* @return a pointer to reference this theme later
*/
lv_theme_t * lv_theme_domotic_init(lv_display_t * disp);
/**
* Check if the theme is initialized
* @return true if default theme is initialized, false otherwise
*/
bool lv_theme_domotic_is_inited(void);
/**
* Get domotic theme
* @return a pointer to domotic theme, or NULL if this is not initialized
*/
lv_theme_t * lv_theme_domotic_get(void);
/**
* Deinitialize the domotic theme
*/
void lv_theme_domotic_deinit(void);
/**********************
* MACROS
**********************/
#endif
#ifdef __cplusplus
} /*extern "C"*/
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +1,2 @@
#pragma once #pragma once
#include "mqtt_client.h" #include "mqtt_client.h"
static void showMeteoIcon(const char *icon, lv_obj_t *desc_icon, int childNr);
static void draw_tabVolets();
static void draw_tabMeteo();
static void tabChgEvt(lv_event_t *event);
static void draw_tabCuve();
static void draw_tabHome();
static void draw_tabSettings();

View File

@ -2562,7 +2562,7 @@ CONFIG_LV_DRAW_SW_DRAW_UNIT_CNT=1
# CONFIG_LV_USE_DRAW_ARM2D_SYNC is not set # CONFIG_LV_USE_DRAW_ARM2D_SYNC is not set
# CONFIG_LV_USE_NATIVE_HELIUM_ASM is not set # CONFIG_LV_USE_NATIVE_HELIUM_ASM is not set
CONFIG_LV_DRAW_SW_COMPLEX=y CONFIG_LV_DRAW_SW_COMPLEX=y
# CONFIG_LV_USE_DRAW_SW_COMPLEX_GRADIENTS is not set CONFIG_LV_USE_DRAW_SW_COMPLEX_GRADIENTS=y
CONFIG_LV_DRAW_SW_SHADOW_CACHE_SIZE=0 CONFIG_LV_DRAW_SW_SHADOW_CACHE_SIZE=0
CONFIG_LV_DRAW_SW_CIRCLE_CACHE_SIZE=4 CONFIG_LV_DRAW_SW_CIRCLE_CACHE_SIZE=4
CONFIG_LV_DRAW_SW_ASM_NONE=y CONFIG_LV_DRAW_SW_ASM_NONE=y
@ -2632,7 +2632,7 @@ CONFIG_LV_ASSERT_HANDLER_INCLUDE="assert.h"
# CONFIG_LV_ENABLE_GLOBAL_CUSTOM is not set # CONFIG_LV_ENABLE_GLOBAL_CUSTOM is not set
CONFIG_LV_CACHE_DEF_SIZE=0 CONFIG_LV_CACHE_DEF_SIZE=0
CONFIG_LV_IMAGE_HEADER_CACHE_DEF_CNT=0 CONFIG_LV_IMAGE_HEADER_CACHE_DEF_CNT=0
CONFIG_LV_GRADIENT_MAX_STOPS=2 CONFIG_LV_GRADIENT_MAX_STOPS=50
CONFIG_LV_COLOR_MIX_ROUND_OFS=128 CONFIG_LV_COLOR_MIX_ROUND_OFS=128
# CONFIG_LV_OBJ_STYLE_CACHE is not set # CONFIG_LV_OBJ_STYLE_CACHE is not set
# CONFIG_LV_USE_OBJ_ID is not set # CONFIG_LV_USE_OBJ_ID is not set
@ -2648,7 +2648,7 @@ CONFIG_LV_ATTRIBUTE_MEM_ALIGN_SIZE=1
CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM=y CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM=y
# CONFIG_LV_USE_FLOAT is not set # CONFIG_LV_USE_FLOAT is not set
# CONFIG_LV_USE_MATRIX is not set # CONFIG_LV_USE_MATRIX is not set
# CONFIG_LV_USE_PRIVATE_API is not set CONFIG_LV_USE_PRIVATE_API=y
# end of Compiler Settings # end of Compiler Settings
# #
@ -2658,27 +2658,27 @@ CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM=y
# #
# Enable built-in fonts # Enable built-in fonts
# #
CONFIG_LV_FONT_MONTSERRAT_8=y # CONFIG_LV_FONT_MONTSERRAT_8 is not set
CONFIG_LV_FONT_MONTSERRAT_10=y # CONFIG_LV_FONT_MONTSERRAT_10 is not set
CONFIG_LV_FONT_MONTSERRAT_12=y CONFIG_LV_FONT_MONTSERRAT_12=y
CONFIG_LV_FONT_MONTSERRAT_14=y CONFIG_LV_FONT_MONTSERRAT_14=y
CONFIG_LV_FONT_MONTSERRAT_16=y CONFIG_LV_FONT_MONTSERRAT_16=y
CONFIG_LV_FONT_MONTSERRAT_18=y CONFIG_LV_FONT_MONTSERRAT_18=y
CONFIG_LV_FONT_MONTSERRAT_20=y CONFIG_LV_FONT_MONTSERRAT_20=y
CONFIG_LV_FONT_MONTSERRAT_22=y CONFIG_LV_FONT_MONTSERRAT_22=y
CONFIG_LV_FONT_MONTSERRAT_24=y # CONFIG_LV_FONT_MONTSERRAT_24 is not set
CONFIG_LV_FONT_MONTSERRAT_26=y # CONFIG_LV_FONT_MONTSERRAT_26 is not set
CONFIG_LV_FONT_MONTSERRAT_28=y # CONFIG_LV_FONT_MONTSERRAT_28 is not set
CONFIG_LV_FONT_MONTSERRAT_30=y # CONFIG_LV_FONT_MONTSERRAT_30 is not set
CONFIG_LV_FONT_MONTSERRAT_32=y # CONFIG_LV_FONT_MONTSERRAT_32 is not set
CONFIG_LV_FONT_MONTSERRAT_34=y # CONFIG_LV_FONT_MONTSERRAT_34 is not set
CONFIG_LV_FONT_MONTSERRAT_36=y # CONFIG_LV_FONT_MONTSERRAT_36 is not set
CONFIG_LV_FONT_MONTSERRAT_38=y # CONFIG_LV_FONT_MONTSERRAT_38 is not set
CONFIG_LV_FONT_MONTSERRAT_40=y CONFIG_LV_FONT_MONTSERRAT_40=y
CONFIG_LV_FONT_MONTSERRAT_42=y # CONFIG_LV_FONT_MONTSERRAT_42 is not set
CONFIG_LV_FONT_MONTSERRAT_44=y # CONFIG_LV_FONT_MONTSERRAT_44 is not set
CONFIG_LV_FONT_MONTSERRAT_46=y # CONFIG_LV_FONT_MONTSERRAT_46 is not set
CONFIG_LV_FONT_MONTSERRAT_48=y # CONFIG_LV_FONT_MONTSERRAT_48 is not set
# CONFIG_LV_FONT_MONTSERRAT_28_COMPRESSED is not set # CONFIG_LV_FONT_MONTSERRAT_28_COMPRESSED is not set
# CONFIG_LV_FONT_DEJAVU_16_PERSIAN_HEBREW is not set # CONFIG_LV_FONT_DEJAVU_16_PERSIAN_HEBREW is not set
# CONFIG_LV_FONT_SIMSUN_14_CJK is not set # CONFIG_LV_FONT_SIMSUN_14_CJK is not set
@ -2734,46 +2734,41 @@ CONFIG_LV_TXT_LINE_BREAK_LONG_LEN=0
# Widget Usage # Widget Usage
# #
CONFIG_LV_WIDGETS_HAS_DEFAULT_VALUE=y CONFIG_LV_WIDGETS_HAS_DEFAULT_VALUE=y
CONFIG_LV_USE_ANIMIMG=y # CONFIG_LV_USE_ANIMIMG is not set
CONFIG_LV_USE_ARC=y # CONFIG_LV_USE_ARC is not set
CONFIG_LV_USE_BAR=y CONFIG_LV_USE_BAR=y
CONFIG_LV_USE_BUTTON=y CONFIG_LV_USE_BUTTON=y
CONFIG_LV_USE_BUTTONMATRIX=y CONFIG_LV_USE_BUTTONMATRIX=y
CONFIG_LV_USE_CALENDAR=y # CONFIG_LV_USE_CALENDAR is not set
# CONFIG_LV_CALENDAR_WEEK_STARTS_MONDAY is not set
CONFIG_LV_USE_CALENDAR_HEADER_ARROW=y
CONFIG_LV_USE_CALENDAR_HEADER_DROPDOWN=y
# CONFIG_LV_USE_CALENDAR_CHINESE is not set
CONFIG_LV_USE_CANVAS=y CONFIG_LV_USE_CANVAS=y
CONFIG_LV_USE_CHART=y CONFIG_LV_USE_CHART=y
CONFIG_LV_USE_CHECKBOX=y CONFIG_LV_USE_CHECKBOX=y
CONFIG_LV_USE_DROPDOWN=y # CONFIG_LV_USE_DROPDOWN is not set
CONFIG_LV_USE_IMAGE=y CONFIG_LV_USE_IMAGE=y
CONFIG_LV_USE_IMAGEBUTTON=y CONFIG_LV_USE_IMAGEBUTTON=y
CONFIG_LV_USE_KEYBOARD=y # CONFIG_LV_USE_KEYBOARD is not set
CONFIG_LV_USE_LABEL=y CONFIG_LV_USE_LABEL=y
CONFIG_LV_LABEL_TEXT_SELECTION=y CONFIG_LV_LABEL_TEXT_SELECTION=y
CONFIG_LV_LABEL_LONG_TXT_HINT=y CONFIG_LV_LABEL_LONG_TXT_HINT=y
CONFIG_LV_LABEL_WAIT_CHAR_COUNT=3 CONFIG_LV_LABEL_WAIT_CHAR_COUNT=3
CONFIG_LV_USE_LED=y # CONFIG_LV_USE_LED is not set
CONFIG_LV_USE_LINE=y # CONFIG_LV_USE_LINE is not set
CONFIG_LV_USE_LIST=y # CONFIG_LV_USE_LIST is not set
CONFIG_LV_USE_MENU=y # CONFIG_LV_USE_MENU is not set
CONFIG_LV_USE_MSGBOX=y # CONFIG_LV_USE_MSGBOX is not set
CONFIG_LV_USE_ROLLER=y CONFIG_LV_USE_ROLLER=y
CONFIG_LV_USE_SCALE=y # CONFIG_LV_USE_SCALE is not set
CONFIG_LV_USE_SLIDER=y CONFIG_LV_USE_SLIDER=y
CONFIG_LV_USE_SPAN=y # CONFIG_LV_USE_SPAN is not set
CONFIG_LV_SPAN_SNIPPET_STACK_SIZE=64 # CONFIG_LV_USE_SPINBOX is not set
CONFIG_LV_USE_SPINBOX=y # CONFIG_LV_USE_SPINNER is not set
CONFIG_LV_USE_SPINNER=y
CONFIG_LV_USE_SWITCH=y CONFIG_LV_USE_SWITCH=y
CONFIG_LV_USE_TEXTAREA=y CONFIG_LV_USE_TEXTAREA=y
CONFIG_LV_TEXTAREA_DEF_PWD_SHOW_TIME=1500 CONFIG_LV_TEXTAREA_DEF_PWD_SHOW_TIME=1500
CONFIG_LV_USE_TABLE=y # CONFIG_LV_USE_TABLE is not set
CONFIG_LV_USE_TABVIEW=y CONFIG_LV_USE_TABVIEW=y
CONFIG_LV_USE_TILEVIEW=y # CONFIG_LV_USE_TILEVIEW is not set
CONFIG_LV_USE_WIN=y # CONFIG_LV_USE_WIN is not set
# end of Widget Usage # end of Widget Usage
# #
@ -2867,7 +2862,7 @@ CONFIG_LV_USE_OBSERVER=y
# #
# Examples # Examples
# #
CONFIG_LV_BUILD_EXAMPLES=y # CONFIG_LV_BUILD_EXAMPLES is not set
# end of Examples # end of Examples
# #