mirror of
https://github.com/lvgl/lvgl.git
synced 2025-01-28 07:03:00 +08:00
lv_app: create string deleted minor updates
This commit is contained in:
parent
b73efc27df
commit
d3f468b0d2
@ -18,6 +18,7 @@
|
||||
#include "../lv_appx/lv_app_example.h"
|
||||
#include "../lv_appx/lv_app_sysmon.h"
|
||||
#include "../lv_appx/lv_app_terminal.h"
|
||||
#include "../lv_appx/lv_app_files.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
@ -140,16 +141,20 @@ void lv_app_init(void)
|
||||
dsc = ll_ins_head(&app_dsc_ll);
|
||||
*dsc = lv_app_terminal_init();
|
||||
#endif
|
||||
|
||||
#if USE_LV_APP_FILES != 0
|
||||
dsc = ll_ins_head(&app_dsc_ll);
|
||||
*dsc = lv_app_files_init();
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Run an application according to 'app_dsc'
|
||||
* @param app_dsc pointer to an application descriptor
|
||||
* @param cstr a Create STRing which can give initial parameters to the application (NULL or "" if unused)
|
||||
* @param conf pointer to an application specific configuration structure or NULL if unused
|
||||
* @return pointer to the opened application or NULL if any error occurred
|
||||
*/
|
||||
lv_app_inst_t * lv_app_run(const lv_app_dsc_t * app_dsc, const char * cstr, void * conf)
|
||||
lv_app_inst_t * lv_app_run(const lv_app_dsc_t * app_dsc, void * conf)
|
||||
{
|
||||
/*Add a new application and initialize it*/
|
||||
lv_app_inst_t * app;
|
||||
@ -165,7 +170,7 @@ lv_app_inst_t * lv_app_run(const lv_app_dsc_t * app_dsc, const char * cstr, void
|
||||
lv_app_rename(app, app_dsc->name); /*Set a default name*/
|
||||
|
||||
/*Call the application specific run function*/
|
||||
app_dsc->app_run(app, cstr, conf);
|
||||
app_dsc->app_run(app, conf);
|
||||
|
||||
return app;
|
||||
}
|
||||
@ -185,6 +190,7 @@ void lv_app_close(lv_app_inst_t * app)
|
||||
|
||||
app->dsc->app_close(app);
|
||||
|
||||
memset(app->app_data, 0, app->dsc->app_data_size);
|
||||
dm_free(app->app_data);
|
||||
dm_free(app->name);
|
||||
|
||||
@ -253,6 +259,7 @@ void lv_app_sc_close(lv_app_inst_t * app)
|
||||
lv_obj_del(app->sc);
|
||||
app->sc = NULL;
|
||||
app->sc_title = NULL;
|
||||
memset(app->sc_data, 0, app->dsc->sc_data_size);
|
||||
dm_free(app->sc_data);
|
||||
app->sc_data = NULL;
|
||||
}
|
||||
@ -299,6 +306,8 @@ void lv_app_win_close(lv_app_inst_t * app)
|
||||
|
||||
lv_obj_del(app->win);
|
||||
app->win = NULL;
|
||||
|
||||
memset(app->win_data, 0, app->dsc->win_data_size);
|
||||
dm_free(app->win_data);
|
||||
app->win_data = NULL;
|
||||
}
|
||||
@ -455,6 +464,22 @@ lv_app_inst_t * lv_app_get_next(lv_app_inst_t * prev, lv_app_dsc_t * dsc)
|
||||
|
||||
return NULL;
|
||||
}
|
||||
/**
|
||||
* Read the list of applications descriptors. (Get he next element)
|
||||
* @param prev the previous application descriptors(at the first call give NULL to get the first)
|
||||
* @return pointer to the next application descriptors or NULL if no more
|
||||
*/
|
||||
lv_app_dsc_t ** lv_app_dsc_get_next(lv_app_dsc_t ** prev)
|
||||
{
|
||||
lv_app_dsc_t ** next;
|
||||
|
||||
if(prev == NULL) next = ll_get_head(&app_dsc_ll);
|
||||
else next = ll_get_next(&app_dsc_ll, prev);
|
||||
|
||||
if(next == NULL) return NULL;
|
||||
|
||||
return next;
|
||||
}
|
||||
|
||||
/**
|
||||
* Refresh the style of the applications
|
||||
@ -468,6 +493,12 @@ void lv_app_style_refr(void)
|
||||
|
||||
lv_obj_set_width(lv_page_get_scrl(sc_page),
|
||||
LV_HOR_RES - 2 * (app_style.sc_page_style.bg_rects.hpad));
|
||||
|
||||
app_style.win_useful_w = LV_HOR_RES - 2 * (app_style.win_style.pages.bg_rects.hpad +
|
||||
app_style.win_style.pages.scrl_rects.hpad);
|
||||
|
||||
app_style.win_useful_h = LV_VER_RES - 2 * (app_style.win_style.pages.bg_rects.vpad +
|
||||
app_style.win_style.pages.scrl_rects.vpad);
|
||||
}
|
||||
|
||||
|
||||
@ -580,7 +611,7 @@ static lv_action_res_t lv_app_menu_elem_rel_action(lv_obj_t * app_elem_btn, lv_d
|
||||
lv_obj_del(app_list);
|
||||
app_list = NULL;
|
||||
|
||||
lv_app_inst_t * app = lv_app_run(dsc, "", NULL);
|
||||
lv_app_inst_t * app = lv_app_run(dsc, NULL);
|
||||
lv_app_sc_open(app);
|
||||
|
||||
#if LV_APP_EFFECT_ANIM != 0 && LV_APP_EFFECT_OPA_ANIM != 0 && LV_APP_ANIM_SC != 0
|
||||
@ -1016,13 +1047,13 @@ static void lv_app_init_style(void)
|
||||
|
||||
lv_labels_get(LV_LABELS_DEF,&app_style.sc_title_style);
|
||||
app_style.sc_title_style.font = LV_APP_FONT_SMALL;
|
||||
app_style.sc_title_style.objs.color = COLOR_MAKE(0x10, 0x20, 0x30);
|
||||
app_style.sc_title_style.objs.color = COLOR_MAKE(0x10, 0x18, 0x20);
|
||||
app_style.sc_title_style.mid = 1;
|
||||
|
||||
lv_labels_get(LV_LABELS_DEF,&app_style.sc_txt_style);
|
||||
app_style.sc_txt_style.font = LV_APP_FONT_MEDIUM;
|
||||
app_style.sc_txt_style.objs.color = COLOR_MAKE(0x20, 0x30, 0x40);
|
||||
app_style.sc_txt_style.mid = 0;
|
||||
app_style.sc_txt_style.objs.color = COLOR_MAKE(0x10, 0x18, 0x20);
|
||||
app_style.sc_txt_style.mid = 1;
|
||||
|
||||
/*Window styles*/
|
||||
lv_wins_get(LV_WINS_DEF,&app_style.win_style);
|
||||
@ -1039,6 +1070,7 @@ static void lv_app_init_style(void)
|
||||
2 * app_style.win_style.header.vpad;
|
||||
app_style.win_style.pages.bg_rects.hpad = 5 * LV_DOWNSCALE;
|
||||
app_style.win_style.pages.scrl_rects.objs.transp = 1;
|
||||
app_style.win_style.pages.sb_mode = LV_PAGE_SB_MODE_AUTO;
|
||||
|
||||
lv_labels_get(LV_LABELS_DEF,&app_style.win_txt_style);
|
||||
app_style.win_txt_style.font = LV_APP_FONT_MEDIUM;
|
||||
|
@ -55,7 +55,7 @@ typedef struct __LV_APP_DSC_T
|
||||
{
|
||||
const char * name;
|
||||
lv_app_mode_t mode;
|
||||
void (*app_run)(lv_app_inst_t *, const char *, void *);
|
||||
void (*app_run)(lv_app_inst_t *, void *);
|
||||
void (*app_close) (lv_app_inst_t *);
|
||||
void (*com_rec) (lv_app_inst_t *, lv_app_inst_t *, lv_app_com_type_t, const void *, uint32_t);
|
||||
void (*sc_open) (lv_app_inst_t *, lv_obj_t *);
|
||||
@ -91,6 +91,10 @@ typedef struct {
|
||||
cord_t app_list_w;
|
||||
cord_t app_list_h;
|
||||
cord_t sc_title_margin;
|
||||
|
||||
/*Calculated values, do not set them!*/
|
||||
cord_t win_useful_w;
|
||||
cord_t win_useful_h;
|
||||
}lv_app_style_t;
|
||||
|
||||
|
||||
@ -98,7 +102,7 @@ typedef struct {
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
void lv_app_init(void);
|
||||
lv_app_inst_t * lv_app_run(const lv_app_dsc_t * app_dsc, const char * cstr, void * conf);
|
||||
lv_app_inst_t * lv_app_run(const lv_app_dsc_t * app_dsc, void * conf);
|
||||
void lv_app_close(lv_app_inst_t * app);
|
||||
uint16_t lv_app_com_send(lv_app_inst_t * app_send, lv_app_com_type_t type , const void * data, uint32_t size);
|
||||
lv_obj_t * lv_app_sc_open(lv_app_inst_t * app);
|
||||
@ -116,6 +120,7 @@ void lv_app_rename(lv_app_inst_t * app, const char * name);
|
||||
void lv_app_style_refr(void);
|
||||
|
||||
lv_app_inst_t * lv_app_get_next(lv_app_inst_t * prev, lv_app_dsc_t * dsc);
|
||||
lv_app_dsc_t ** lv_app_dsc_get_next(lv_app_dsc_t ** prev);
|
||||
|
||||
const lv_app_dsc_t * lv_app_example_init(void);
|
||||
|
||||
|
@ -17,7 +17,7 @@
|
||||
*********************/
|
||||
#define LV_APP_FSEL_FN_MAX_LEN 128
|
||||
#define LV_APP_FSEL_PATH_MAX_LEN 256
|
||||
#define LV_APP_FSEL_MAX_FILE 8
|
||||
#define LV_APP_FSEL_PAGE_SIZE 8
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
@ -62,12 +62,7 @@ static void (*fsel_ok_action)(void *, const char *);
|
||||
*/
|
||||
void lv_app_fsel_init(void)
|
||||
{
|
||||
lv_app_style_t * app_style = lv_app_style_get();
|
||||
|
||||
lv_lists_get(LV_LISTS_TRANSP, &fsel_lists);
|
||||
|
||||
memcpy(&fsel_lists.liste_labels, &app_style->menu_btn_label_style, sizeof(lv_labels_t));
|
||||
memcpy(&fsel_lists.liste_imgs, &app_style->menu_btn_img_style, sizeof(lv_imgs_t));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -144,13 +139,14 @@ static void fsel_refr(void)
|
||||
lv_win_set_title(fsel_win, fsel_path);
|
||||
|
||||
/*Create a new list*/
|
||||
lv_wins_t * wins = lv_obj_get_style(fsel_win);
|
||||
lv_app_style_t * app_style = lv_app_style_get();
|
||||
fsel_list = lv_list_create(fsel_win, NULL);
|
||||
lv_obj_set_size(fsel_list, LV_HOR_RES - 2 * (wins->pages.bg_rects.hpad + wins->pages.scrl_rects.hpad), LV_VER_RES -
|
||||
wins->pages.bg_rects.vpad - 2 * wins->pages.scrl_rects.vpad);
|
||||
lv_obj_align(fsel_list, NULL, LV_ALIGN_CENTER, 0, 0);
|
||||
lv_obj_set_style(fsel_list, &fsel_lists);
|
||||
lv_obj_set_width(fsel_list, app_style->win_useful_w);
|
||||
lv_obj_set_style(fsel_list, lv_lists_get(LV_LISTS_TRANSP, NULL));
|
||||
lv_list_set_fit(fsel_list, LV_LIST_FIT_WIDTH_SB);
|
||||
lv_obj_set_drag_parent(fsel_list, true);
|
||||
lv_obj_set_drag_parent(lv_page_get_scrl(fsel_list), true);
|
||||
lv_rect_set_fit(fsel_list, false, true);
|
||||
|
||||
fs_res_t res = FS_RES_OK;
|
||||
|
||||
@ -222,7 +218,7 @@ static void fsel_refr(void)
|
||||
res = fs_readdir(&rd, fn);
|
||||
|
||||
/*Show only LV_APP_FSEL_MAX_FILE elements and add a Next page button*/
|
||||
if(fsel_file_cnt != 0 && fsel_file_cnt % LV_APP_FSEL_MAX_FILE == 0) {
|
||||
if(fsel_file_cnt != 0 && fsel_file_cnt % LV_APP_FSEL_PAGE_SIZE == 0) {
|
||||
lv_list_add(fsel_list, "U:/icon_right", "Next page", fsel_next_action);
|
||||
break;
|
||||
}
|
||||
@ -238,7 +234,6 @@ static void fsel_refr(void)
|
||||
|
||||
/*Focus to the top of the list*/
|
||||
lv_obj_set_y(lv_page_get_scrl(fsel_list), 0);
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -287,11 +282,11 @@ static lv_action_res_t fsel_next_action(lv_obj_t * next, lv_dispi_t * dispi)
|
||||
*/
|
||||
static lv_action_res_t fsel_prev_action(lv_obj_t * prev, lv_dispi_t * dispi)
|
||||
{
|
||||
if(fsel_file_cnt <= 2 * LV_APP_FSEL_MAX_FILE) fsel_file_cnt = 0;
|
||||
else if(fsel_file_cnt % LV_APP_FSEL_MAX_FILE == 0) {
|
||||
fsel_file_cnt -= 2 * LV_APP_FSEL_MAX_FILE;
|
||||
if(fsel_file_cnt <= 2 * LV_APP_FSEL_PAGE_SIZE) fsel_file_cnt = 0;
|
||||
else if(fsel_file_cnt % LV_APP_FSEL_PAGE_SIZE == 0) {
|
||||
fsel_file_cnt -= 2 * LV_APP_FSEL_PAGE_SIZE;
|
||||
} else {
|
||||
fsel_file_cnt = ((fsel_file_cnt / LV_APP_FSEL_MAX_FILE) - 1) * LV_APP_FSEL_MAX_FILE;
|
||||
fsel_file_cnt = ((fsel_file_cnt / LV_APP_FSEL_PAGE_SIZE) - 1) * LV_APP_FSEL_PAGE_SIZE;
|
||||
}
|
||||
|
||||
fsel_refr();
|
||||
@ -366,7 +361,7 @@ static lv_action_res_t fsel_folder_lpr_action(lv_obj_t * folder, lv_dispi_t * di
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when a file list element is long pressed to choose it
|
||||
* Called when a file list element is released to choose it
|
||||
* @param file pointer to a file button
|
||||
* @param dispi pointer to the caller display input
|
||||
* @return LV_ACTION_RES_INV because the list is deleted in the function
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "lvgl/lv_objx/lv_label.h"
|
||||
|
||||
#include "lvgl/lv_misc/anim.h"
|
||||
#include <stdio.h>
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
@ -75,10 +76,17 @@ void lv_app_notice_init(void)
|
||||
|
||||
/**
|
||||
* Add a notification with a given text
|
||||
* @param txt the text of the notification
|
||||
* @param format pritntf-like format string
|
||||
*/
|
||||
void lv_app_notice_add(const char * txt)
|
||||
void lv_app_notice_add(const char * format, ...)
|
||||
{
|
||||
char txt[LV_APP_NOTICE_MAX_LEN];
|
||||
|
||||
va_list va;
|
||||
va_start(va, format);
|
||||
vsprintf(txt,format, va);
|
||||
va_end(va);
|
||||
|
||||
lv_app_style_t * app_style = lv_app_style_get();
|
||||
|
||||
lv_obj_t * n;
|
||||
|
@ -10,6 +10,7 @@
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include "../lv_app.h"
|
||||
#include <stdarg.h>
|
||||
#if LV_APP_ENABLE != 0
|
||||
|
||||
/*********************
|
||||
@ -24,7 +25,7 @@
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
void lv_app_notice_init(void);
|
||||
void lv_app_notice_add(const char * txt);
|
||||
void lv_app_notice_add(const char * format, ...);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
|
@ -41,7 +41,7 @@ typedef struct
|
||||
/**********************
|
||||
* STATIC PROTOTYPES
|
||||
**********************/
|
||||
static void my_app_run(lv_app_inst_t * app, const char * cstr, void * conf);
|
||||
static void my_app_run(lv_app_inst_t * app, void * conf);
|
||||
static void my_app_close(lv_app_inst_t * app);
|
||||
static void my_com_rec(lv_app_inst_t * app_send, lv_app_inst_t * app_rec, lv_app_com_type_t type , const void * data, uint32_t size);
|
||||
static void my_sc_open(lv_app_inst_t * app, lv_obj_t * sc);
|
||||
@ -95,18 +95,12 @@ const lv_app_dsc_t * lv_app_example_init(void)
|
||||
/**
|
||||
* Run an application according to 'app_dsc'
|
||||
* @param app_dsc pointer to an application descriptor
|
||||
* @param cstr a Create STRing which can give initial parameters to the application (NULL or "" if unused)
|
||||
* @param conf pointer to a lv_app_example_conf_t structure with configuration data or NULL if unused
|
||||
* @return pointer to the opened application or NULL if any error occurred
|
||||
*/
|
||||
static void my_app_run(lv_app_inst_t * app, const char * cstr, void * conf)
|
||||
static void my_app_run(lv_app_inst_t * app, void * conf)
|
||||
{
|
||||
/*Initialize the application*/
|
||||
if(cstr != NULL && cstr[0] != '\0') {
|
||||
char buf[256];
|
||||
sprintf(buf,"%s - %s", my_app_dsc.name, cstr);
|
||||
lv_app_rename(app, buf);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -49,7 +49,7 @@ typedef struct
|
||||
/**********************
|
||||
* STATIC PROTOTYPES
|
||||
**********************/
|
||||
static void my_app_run(lv_app_inst_t * app, const char * cstr, void * conf);
|
||||
static void my_app_run(lv_app_inst_t * app, void * conf);
|
||||
static void my_app_close(lv_app_inst_t * app);
|
||||
static void my_com_rec(lv_app_inst_t * app_send, lv_app_inst_t * app_rec, lv_app_com_type_t type , const void * data, uint32_t size);
|
||||
static void my_sc_open(lv_app_inst_t * app, lv_obj_t * sc);
|
||||
@ -57,7 +57,7 @@ static void my_sc_close(lv_app_inst_t * app);
|
||||
static void my_win_open(lv_app_inst_t * app, lv_obj_t * win);
|
||||
static void my_win_close(lv_app_inst_t * app);
|
||||
|
||||
static void sysmon_task(void);
|
||||
static void sysmon_task(void * param);
|
||||
static void lv_app_sysmon_refr(void);
|
||||
|
||||
/**********************
|
||||
@ -101,7 +101,7 @@ static dm_mon_t mem_mon;
|
||||
*/
|
||||
const lv_app_dsc_t * lv_app_sysmon_init(void)
|
||||
{
|
||||
ptask_create(sysmon_task, LV_APP_SYSMON_REFR_TIME, PTASK_PRIO_LOW);
|
||||
ptask_create(sysmon_task, LV_APP_SYSMON_REFR_TIME, PTASK_PRIO_LOW, NULL);
|
||||
|
||||
memset(mem_pct, 0, sizeof(mem_pct));
|
||||
memset(cpu_pct, 0, sizeof(cpu_pct));
|
||||
@ -142,11 +142,10 @@ const lv_app_dsc_t * lv_app_sysmon_init(void)
|
||||
/**
|
||||
* Run an application according to 'app_dsc'
|
||||
* @param app_dsc pointer to an application descriptor
|
||||
* @param cstr a Create STRing which can give initial parameters to the application (NULL or "" if unused)
|
||||
* @param conf pointer to a lv_app_sysmon_conf_t structure with configuration data or NULL if unused
|
||||
* @return pointer to the opened application or NULL if any error occurred
|
||||
*/
|
||||
static void my_app_run(lv_app_inst_t * app, const char * cstr, void * conf)
|
||||
static void my_app_run(lv_app_inst_t * app, void * conf)
|
||||
{
|
||||
|
||||
}
|
||||
@ -267,8 +266,9 @@ static void my_win_close(lv_app_inst_t * app)
|
||||
/**
|
||||
* Called periodically to monitor the CPU and memory usage.
|
||||
* It refreshes the shortcuts and windows and also add notifications if there is any problem.
|
||||
* @param param unused
|
||||
*/
|
||||
static void sysmon_task(void)
|
||||
static void sysmon_task(void * param)
|
||||
{
|
||||
/*Shift out the oldest data*/
|
||||
uint16_t i;
|
||||
@ -353,7 +353,7 @@ static void lv_app_sysmon_refr(void)
|
||||
DM_MEM_SIZE,
|
||||
DM_MEM_SIZE - mem_mon.size_free, mem_mon.size_free, mem_mon.pct_frag);
|
||||
|
||||
sprintf(buf_short, "%sMem: %d %%\nFrag: %d %%",
|
||||
sprintf(buf_short, "%sMem: %d %%\nFrag: %d %%\n",
|
||||
buf_short, mem_pct[LV_APP_SYSMON_PNUM - 1], mem_mon.pct_frag);
|
||||
#else
|
||||
sprintf(buf_long, "%sMEMORY: N/A", buf_long);
|
||||
|
@ -25,6 +25,7 @@ typedef struct
|
||||
{
|
||||
char txt[LV_APP_TERMINAL_LENGTH + 1];
|
||||
lv_app_com_type_t com_type;
|
||||
lv_app_inst_t * last_sender;
|
||||
}my_app_data_t;
|
||||
|
||||
/*Application specific data a window of this application*/
|
||||
@ -33,6 +34,7 @@ typedef struct
|
||||
lv_obj_t * label;
|
||||
lv_obj_t * ta;
|
||||
lv_obj_t * com_type_btn;
|
||||
lv_obj_t * clear_btn;
|
||||
}my_win_data_t;
|
||||
|
||||
/*Application specific data for a shortcut of this application*/
|
||||
@ -44,7 +46,7 @@ typedef struct
|
||||
/**********************
|
||||
* STATIC PROTOTYPES
|
||||
**********************/
|
||||
static void my_app_run(lv_app_inst_t * app, const char * cstr, void * conf);
|
||||
static void my_app_run(lv_app_inst_t * app, void * conf);
|
||||
static void my_app_close(lv_app_inst_t * app);
|
||||
static void my_com_rec(lv_app_inst_t * app_send, lv_app_inst_t * app_rec, lv_app_com_type_t type , const void * data, uint32_t size);
|
||||
static void my_sc_open(lv_app_inst_t * app, lv_obj_t * sc);
|
||||
@ -55,6 +57,7 @@ static void my_win_close(lv_app_inst_t * app);
|
||||
static void add_data(lv_app_inst_t * app, const void * data, uint16_t data_len);
|
||||
static lv_action_res_t win_ta_rel_action(lv_obj_t * ta, lv_dispi_t * dispi);
|
||||
static lv_action_res_t win_comch_rel_action(lv_obj_t * btn, lv_dispi_t * dispi);
|
||||
static lv_action_res_t win_clear_rel_action(lv_obj_t * btn, lv_dispi_t * dispi);
|
||||
static void win_ta_kb_ok_action(lv_obj_t * ta);
|
||||
|
||||
/**********************
|
||||
@ -94,16 +97,17 @@ lv_labels_t sc_txts;
|
||||
*/
|
||||
const lv_app_dsc_t * lv_app_terminal_init(void)
|
||||
{
|
||||
com_type_txt[LV_APP_COM_TYPE_INT] = "Comm. ch.\nnumbers";
|
||||
com_type_txt[LV_APP_COM_TYPE_CHAR] = "Comm. ch.\nchars";
|
||||
com_type_txt[LV_APP_COM_TYPE_LOG] = "Comm. ch.\nlog";
|
||||
com_type_txt[LV_APP_COM_TYPE_INV] = "Comm. ch.\nnone";
|
||||
com_type_txt[LV_APP_COM_TYPE_INT] = "Ch: Num";
|
||||
com_type_txt[LV_APP_COM_TYPE_CHAR] = "Ch: Chars";
|
||||
com_type_txt[LV_APP_COM_TYPE_LOG] = "Ch: Log";
|
||||
com_type_txt[LV_APP_COM_TYPE_INV] = "Ch: None";
|
||||
|
||||
lv_app_style_t * app_style = lv_app_style_get();
|
||||
|
||||
memcpy(&sc_txts, &app_style->sc_txt_style, sizeof(lv_labels_t));
|
||||
sc_txts.line_space = 0;
|
||||
sc_txts.letter_space = 0;
|
||||
sc_txts.mid = 0;
|
||||
sc_txts.objs.color = COLOR_WHITE;
|
||||
|
||||
lv_objs_get(LV_OBJS_DEF, &sc_txt_bgs);
|
||||
@ -120,16 +124,16 @@ const lv_app_dsc_t * lv_app_terminal_init(void)
|
||||
/**
|
||||
* Run an application according to 'app_dsc'
|
||||
* @param app_dsc pointer to an application descriptor
|
||||
* @param cstr a Create STRing which can give initial parameters to the application (NULL or "" if unused)
|
||||
* @param conf pointer to a lv_app_example_conf_t structure with configuration data or NULL if unused
|
||||
* @return pointer to the opened application or NULL if any error occurred
|
||||
*/
|
||||
static void my_app_run(lv_app_inst_t * app, const char * cstr, void * conf)
|
||||
static void my_app_run(lv_app_inst_t * app, void * conf)
|
||||
{
|
||||
/*Initialize the application*/
|
||||
my_app_data_t * app_data = app->app_data;
|
||||
app_data->com_type = LV_APP_COM_TYPE_CHAR;
|
||||
memset(app_data->txt, 0, sizeof(app_data->txt));;
|
||||
app_data->last_sender = NULL;
|
||||
memset(app_data->txt, 0, sizeof(app_data->txt));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -158,12 +162,18 @@ static void my_com_rec(lv_app_inst_t * app_send, lv_app_inst_t * app_rec,
|
||||
|
||||
/*Add the recevied data if the type is matches*/
|
||||
if(type == app_data->com_type) {
|
||||
if(app_data->txt[0] != '\0') add_data(app_rec, "\n", 1);
|
||||
add_data(app_rec, "@", 1);
|
||||
add_data(app_rec, app_send->name, strlen(app_send->name));
|
||||
add_data(app_rec, "\n", 1);
|
||||
add_data(app_rec, data, size);
|
||||
|
||||
/*Insert the name of the sender application if it is not the last*/
|
||||
if(app_data->last_sender != app_send) {
|
||||
if(app_data->txt[0] != '\0') add_data(app_rec, "\n", 1);
|
||||
add_data(app_rec, "@", 1);
|
||||
add_data(app_rec, app_send->name, strlen(app_send->name));
|
||||
add_data(app_rec, "\n", 1);
|
||||
}
|
||||
add_data(app_rec, data, size);
|
||||
}
|
||||
|
||||
app_data->last_sender = app_send;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -236,7 +246,7 @@ static void my_win_open(lv_app_inst_t * app, lv_obj_t * win)
|
||||
lv_obj_align(win_data->ta, win_data->label, LV_ALIGN_OUT_BOTTOM_LEFT, 0, opad);
|
||||
|
||||
|
||||
/*Creat a button to set the communication type (char, integer etc.)*/
|
||||
/*Create a button to set the communication type (char, integer etc.)*/
|
||||
win_data->com_type_btn = lv_btn_create(win, NULL);
|
||||
lv_rect_set_fit(win_data->com_type_btn, true, true);
|
||||
lv_obj_set_free_p(win_data->com_type_btn, app);
|
||||
@ -246,6 +256,15 @@ static void my_win_open(lv_app_inst_t * app, lv_obj_t * win)
|
||||
lv_label_set_text(btn_label, com_type_txt[app_data->com_type]);
|
||||
lv_obj_align(win_data->com_type_btn, win_data->ta, LV_ALIGN_OUT_RIGHT_TOP, opad, 0);
|
||||
|
||||
|
||||
/*Create a clear button*/
|
||||
win_data->clear_btn = lv_btn_create(win, win_data->com_type_btn);
|
||||
lv_btn_set_rel_action(win_data->clear_btn, win_clear_rel_action);
|
||||
btn_label = lv_label_create(win_data->clear_btn, NULL);
|
||||
lv_obj_set_style(btn_label, lv_labels_get(LV_LABELS_BTN, NULL));
|
||||
lv_label_set_text(btn_label, "Clear");
|
||||
lv_obj_align(win_data->clear_btn, win_data->com_type_btn, LV_ALIGN_OUT_RIGHT_TOP, opad, 0);
|
||||
|
||||
/*Align the window to see the text area on the bottom*/
|
||||
lv_obj_align(lv_page_get_scrl(app->win), NULL, LV_ALIGN_IN_BOTTOM_LEFT, 0,
|
||||
- app_style->win_style.pages.scrl_rects.vpad);
|
||||
@ -299,6 +318,40 @@ static lv_action_res_t win_comch_rel_action(lv_obj_t * btn, lv_dispi_t * dispi)
|
||||
return LV_ACTION_RES_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the Clear button is released to clear the ex od the terminal
|
||||
* @param btn pointer to the clear button
|
||||
* @param dispi pointer to the caller display input
|
||||
* @return LV_ACTION_RES_OK because the button is not deleted
|
||||
*/
|
||||
static lv_action_res_t win_clear_rel_action(lv_obj_t * btn, lv_dispi_t * dispi)
|
||||
{
|
||||
lv_app_inst_t * app = lv_obj_get_free_p(btn);
|
||||
my_app_data_t * app_data = app->app_data;
|
||||
my_win_data_t * win_data = app->win_data;
|
||||
my_sc_data_t * sc_data = app->sc_data;
|
||||
|
||||
app_data->txt[0] = '\0';
|
||||
|
||||
if(sc_data != NULL) {
|
||||
lv_label_set_text_static(sc_data->label, app_data->txt);
|
||||
lv_obj_align(sc_data->label, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
|
||||
}
|
||||
|
||||
if(win_data != NULL) {
|
||||
lv_app_style_t * app_style =lv_app_style_get();
|
||||
cord_t opad = app_style->win_style.pages.scrl_rects.opad;
|
||||
lv_label_set_text_static(win_data->label, app_data->txt);
|
||||
lv_obj_align(win_data->ta, win_data->label, LV_ALIGN_OUT_BOTTOM_LEFT, 0, opad);
|
||||
lv_obj_align(win_data->com_type_btn, win_data->ta, LV_ALIGN_OUT_RIGHT_TOP, opad, 0);
|
||||
lv_obj_align(win_data->clear_btn, win_data->com_type_btn, LV_ALIGN_OUT_RIGHT_TOP, opad, 0);
|
||||
lv_obj_align(lv_page_get_scrl(app->win), NULL, LV_ALIGN_IN_BOTTOM_LEFT, 0,
|
||||
- app_style->win_style.pages.scrl_rects.vpad);
|
||||
}
|
||||
|
||||
return LV_ACTION_RES_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the 'Ok' button of the keyboard in the window
|
||||
* is pressed to write to the Terminal
|
||||
@ -331,25 +384,39 @@ static void add_data(lv_app_inst_t * app, const void * data, uint16_t data_len)
|
||||
uint16_t old_len = strlen(app_data->txt);
|
||||
const char * txt = data;
|
||||
|
||||
/*IF the data is longer then the terminal ax size show the last part of data*/
|
||||
if(data_len > LV_APP_TERMINAL_LENGTH) {
|
||||
txt += (data_len - LV_APP_TERMINAL_LENGTH);
|
||||
data_len = LV_APP_TERMINAL_LENGTH;
|
||||
old_len = 0;
|
||||
}
|
||||
/*If the text become too long 'forget' the oldest lines*/
|
||||
if(old_len + data_len > LV_APP_TERMINAL_LENGTH) {
|
||||
uint16_t i;
|
||||
for(i = 0; i < old_len; i++) {
|
||||
if(app_data->txt[i] == '\n') {
|
||||
else if(old_len + data_len > LV_APP_TERMINAL_LENGTH) {
|
||||
uint16_t new_start;
|
||||
for(new_start = 0; new_start < old_len; new_start++) {
|
||||
if(app_data->txt[new_start] == '\n') {
|
||||
/*If there is enough space break*/
|
||||
if(i >= data_len) {
|
||||
/*Ignore line braks*/
|
||||
while(app_data->txt[i] == '\n' || app_data->txt[i] == '\r') i++;
|
||||
if(new_start >= data_len) {
|
||||
/*Ignore line breaks*/
|
||||
while(app_data->txt[new_start] == '\n' || app_data->txt[new_start] == '\r') new_start++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
uint16_t j;
|
||||
for(j = i; j < old_len; j++) {
|
||||
app_data->txt[j - i] = app_data->txt[j];
|
||||
|
||||
/* If it wasn't able to make enough space on line breaks
|
||||
* simply forget the oldest characters*/
|
||||
if(new_start == old_len) {
|
||||
new_start = old_len - (LV_APP_TERMINAL_LENGTH - data_len);
|
||||
}
|
||||
old_len = old_len - i;
|
||||
/*Move the remaining text to the beginning*/
|
||||
uint16_t j;
|
||||
for(j = new_start; j < old_len; j++) {
|
||||
app_data->txt[j - new_start] = app_data->txt[j];
|
||||
}
|
||||
old_len = old_len - new_start;
|
||||
app_data->txt[old_len] = '\0';
|
||||
|
||||
}
|
||||
|
||||
memcpy(&app_data->txt[old_len], txt, data_len);
|
||||
@ -364,6 +431,7 @@ static void add_data(lv_app_inst_t * app, const void * data, uint16_t data_len)
|
||||
lv_label_set_text_static(win_data->label, app_data->txt);
|
||||
lv_obj_align(win_data->ta, win_data->label, LV_ALIGN_OUT_BOTTOM_LEFT, 0, opad);
|
||||
lv_obj_align(win_data->com_type_btn, win_data->ta, LV_ALIGN_OUT_RIGHT_TOP, opad, 0);
|
||||
lv_obj_align(win_data->clear_btn, win_data->com_type_btn, LV_ALIGN_OUT_RIGHT_TOP, opad, 0);
|
||||
lv_obj_align(lv_page_get_scrl(app->win), NULL, LV_ALIGN_IN_BOTTOM_LEFT, 0,
|
||||
- app_style->win_style.pages.scrl_rects.vpad);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user