mirror of https://github.com/arendst/Tasmota.git
LVGL add support for lv_anim
This commit is contained in:
parent
a927ddfd9f
commit
575beba882
|
@ -572,6 +572,7 @@ extern const bcstring be_const_str_lv_point_arr;
|
|||
extern const bcstring be_const_str_lv_signal_arcs;
|
||||
extern const bcstring be_const_str_lv_signal_bars;
|
||||
extern const bcstring be_const_str_lv_solidified;
|
||||
extern const bcstring be_const_str_lv_style_prop_arr;
|
||||
extern const bcstring be_const_str_lv_timer_cb;
|
||||
extern const bcstring be_const_str_lv_wifi_arcs;
|
||||
extern const bcstring be_const_str_lv_wifi_arcs_icon;
|
||||
|
@ -807,6 +808,7 @@ extern const bcstring be_const_str_strftime;
|
|||
extern const bcstring be_const_str_string;
|
||||
extern const bcstring be_const_str_strip;
|
||||
extern const bcstring be_const_str_strptime;
|
||||
extern const bcstring be_const_str_style_prop_arr;
|
||||
extern const bcstring be_const_str_subscribe;
|
||||
extern const bcstring be_const_str_success;
|
||||
extern const bcstring be_const_str_super;
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -34,6 +34,7 @@
|
|||
* - `COLOR_WHITE` int value
|
||||
* - `$SYMBOL_OK"` string pointer
|
||||
* - `&seg7_font` comptr
|
||||
* - `@func` Berry native function
|
||||
* - `*my_func` native function - the function is called and return value passed back.
|
||||
* This allows to create dynamic virtual members that are the result of a call.
|
||||
*
|
||||
|
@ -55,9 +56,12 @@ static bbool be_const_member_dual(bvm *vm, const be_const_member_t * definitions
|
|||
case '$': // string
|
||||
be_pushstring(vm, (const char*) definitions[idx].value);
|
||||
break;
|
||||
case '&': // native function
|
||||
case '@': // native function
|
||||
be_pushntvfunction(vm, (bntvfunc) definitions[idx].value);
|
||||
break;
|
||||
case '&': // pointer
|
||||
be_pushcomptr(vm, (void*) definitions[idx].value);
|
||||
break;
|
||||
case '*': // call to a native function
|
||||
{
|
||||
bntvfunc f = (bntvfunc) definitions[idx].value;
|
||||
|
|
|
@ -716,6 +716,33 @@ const be_ntv_func_def_t lv_spinner_func[] = {
|
|||
};
|
||||
#endif // BE_LV_WIDGET_SPINNER
|
||||
|
||||
/* `lv_anim` methods */
|
||||
const be_ntv_func_def_t lv_anim_func[] = {
|
||||
{ "custom_del", { (const void*) &lv_anim_custom_del, "b", "(lv.lv_anim)c" } },
|
||||
{ "custom_get", { (const void*) &lv_anim_custom_get, "lv.lv_anim", "(lv.lv_anim)c" } },
|
||||
{ "get_delay", { (const void*) &lv_anim_get_delay, "i", "(lv.lv_anim)" } },
|
||||
{ "get_playtime", { (const void*) &lv_anim_get_playtime, "i", "(lv.lv_anim)" } },
|
||||
{ "get_user_data", { (const void*) &lv_anim_get_user_data, ".", "(lv.lv_anim)" } },
|
||||
{ "init", { (const void*) &lv_anim_init, "", "(lv.lv_anim)" } },
|
||||
{ "set_custom_exec_cb", { (const void*) &lv_anim_set_custom_exec_cb, "", "(lv.lv_anim)c" } },
|
||||
{ "set_delay", { (const void*) &lv_anim_set_delay, "", "(lv.lv_anim)i" } },
|
||||
{ "set_early_apply", { (const void*) &lv_anim_set_early_apply, "", "(lv.lv_anim)b" } },
|
||||
{ "set_exec_cb", { (const void*) &lv_anim_set_exec_cb, "", "(lv.lv_anim)c" } },
|
||||
{ "set_get_value_cb", { (const void*) &lv_anim_set_get_value_cb, "", "(lv.lv_anim)c" } },
|
||||
{ "set_path_cb", { (const void*) &lv_anim_set_path_cb, "", "(lv.lv_anim)c" } },
|
||||
{ "set_playback_delay", { (const void*) &lv_anim_set_playback_delay, "", "(lv.lv_anim)i" } },
|
||||
{ "set_playback_time", { (const void*) &lv_anim_set_playback_time, "", "(lv.lv_anim)i" } },
|
||||
{ "set_ready_cb", { (const void*) &lv_anim_set_ready_cb, "", "(lv.lv_anim)c" } },
|
||||
{ "set_repeat_count", { (const void*) &lv_anim_set_repeat_count, "", "(lv.lv_anim)i" } },
|
||||
{ "set_repeat_delay", { (const void*) &lv_anim_set_repeat_delay, "", "(lv.lv_anim)i" } },
|
||||
{ "set_start_cb", { (const void*) &lv_anim_set_start_cb, "", "(lv.lv_anim)c" } },
|
||||
{ "set_time", { (const void*) &lv_anim_set_time, "", "(lv.lv_anim)i" } },
|
||||
{ "set_user_data", { (const void*) &lv_anim_set_user_data, "", "(lv.lv_anim)." } },
|
||||
{ "set_values", { (const void*) &lv_anim_set_values, "", "(lv.lv_anim)ii" } },
|
||||
{ "set_var", { (const void*) &lv_anim_set_var, "", "(lv.lv_anim)." } },
|
||||
{ "start", { (const void*) &lv_anim_start, "lv.lv_anim", "(lv.lv_anim)" } },
|
||||
};
|
||||
|
||||
/* `lv_timer` methods */
|
||||
const be_ntv_func_def_t lv_timer_func[] = {
|
||||
{ "del", { (const void*) &lv_timer_del, "", "(lv.lv_timer)" } },
|
||||
|
@ -980,6 +1007,7 @@ const be_ntv_func_def_t lv_textarea_func[] = {
|
|||
};
|
||||
#endif // BE_LV_WIDGET_TEXTAREA
|
||||
|
||||
extern const bclass be_class_lv_anim;
|
||||
extern const bclass be_class_lv_arc;
|
||||
extern const bclass be_class_lv_bar;
|
||||
extern const bclass be_class_lv_btn;
|
||||
|
@ -1016,6 +1044,7 @@ extern const bclass be_class_lv_timer;
|
|||
|
||||
// map of clases
|
||||
const be_ntv_class_def_t lv_classes[] = {
|
||||
{ "lv_anim", &be_class_lv_anim, lv_anim_func, sizeof(lv_anim_func) / sizeof(lv_anim_func[0]) },
|
||||
#ifdef BE_LV_WIDGET_ARC
|
||||
{ "lv_arc", &be_class_lv_arc, lv_arc_func, sizeof(lv_arc_func) / sizeof(lv_arc_func[0]) },
|
||||
#endif // BE_LV_WIDGET_ARC
|
||||
|
@ -1143,6 +1172,7 @@ const size_t lv_classes_size = sizeof(lv_classes) / sizeof(lv_classes[0]);
|
|||
#ifdef BE_LV_WIDGET_SPINNER
|
||||
int be_ntv_lv_spinner_init(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinner_create, "+_p", "(lv.lv_obj)ii"); }
|
||||
#endif // BE_LV_WIDGET_SPINNER
|
||||
/* `lv_anim` methods */
|
||||
/* `lv_timer` methods */
|
||||
/* `lv_arc` methods */
|
||||
#ifdef BE_LV_WIDGET_ARC
|
||||
|
|
|
@ -27,6 +27,12 @@ static int lv_get_ver_res(void) {
|
|||
/* `lv` methods */
|
||||
const be_ntv_func_def_t lv_func[] = {
|
||||
|
||||
{ "anim_count_running", { (const void*) &lv_anim_count_running, "i", "" } },
|
||||
{ "anim_del", { (const void*) &lv_anim_del, "b", ".c" } },
|
||||
{ "anim_del_all", { (const void*) &lv_anim_del_all, "", "" } },
|
||||
{ "anim_get", { (const void*) &lv_anim_get, "lv.lv_anim", ".c" } },
|
||||
{ "anim_refr_now", { (const void*) &lv_anim_refr_now, "", "" } },
|
||||
{ "anim_speed_to_time", { (const void*) &lv_anim_speed_to_time, "i", "iii" } },
|
||||
{ "area_align", { (const void*) &lv_area_align, "", "(lv.lv_area)(lv.lv_area)iii" } },
|
||||
{ "area_copy", { (const void*) &lv_area_copy, "", "(lv.lv_area)(lv.lv_area)" } },
|
||||
{ "area_get_height", { (const void*) &lv_area_get_height, "i", "(lv.lv_area)" } },
|
||||
|
@ -144,7 +150,7 @@ const be_ntv_func_def_t lv_func[] = {
|
|||
{ "sqrt", { (const void*) &lv_sqrt, "", "i(lv.lv_sqrt_res)i" } },
|
||||
{ "style_prop_get_default", { (const void*) &lv_style_prop_get_default, "i", "i" } },
|
||||
{ "style_register_prop", { (const void*) &lv_style_register_prop, "i", "" } },
|
||||
{ "style_transition_dsc_init", { (const void*) &lv_style_transition_dsc_init, "", "(lv.lv_style_transition_dsc)(lv.lv_style_prop)^lv_anim_path_cb^ii." } },
|
||||
{ "style_transition_dsc_init", { (const void*) &lv_style_transition_dsc_init, "", "(lv.lv_style_transition_dsc)(lv.lv_style_prop)cii." } },
|
||||
{ "task_handler", { (const void*) &lv_task_handler, "i", "" } },
|
||||
{ "theme_apply", { (const void*) &lv_theme_apply, "", "(lv.lv_obj)" } },
|
||||
{ "theme_default_get", { (const void*) &lv_theme_default_get, "lv.lv_theme", "" } },
|
||||
|
@ -799,7 +805,14 @@ const be_const_member_t lv0_constants[] = {
|
|||
{ "TEXT_FLAG_FIT", be_cconst_int(LV_TEXT_FLAG_FIT) },
|
||||
{ "TEXT_FLAG_NONE", be_cconst_int(LV_TEXT_FLAG_NONE) },
|
||||
{ "TEXT_FLAG_RECOLOR", be_cconst_int(LV_TEXT_FLAG_RECOLOR) },
|
||||
{ "&load_font", be_cconst_ptr(&lv0_load_font) },
|
||||
{ "&anim_path_bounce", be_cconst_ptr(&lv_anim_path_bounce) },
|
||||
{ "&anim_path_ease_in", be_cconst_ptr(&lv_anim_path_ease_in) },
|
||||
{ "&anim_path_ease_in_out", be_cconst_ptr(&lv_anim_path_ease_in_out) },
|
||||
{ "&anim_path_ease_out", be_cconst_ptr(&lv_anim_path_ease_out) },
|
||||
{ "&anim_path_linear", be_cconst_ptr(&lv_anim_path_linear) },
|
||||
{ "&anim_path_overshoot", be_cconst_ptr(&lv_anim_path_overshoot) },
|
||||
{ "&anim_path_step", be_cconst_ptr(&lv_anim_path_step) },
|
||||
{ "@load_font", be_cconst_ptr(&lv0_load_font) },
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ extern int lv_x_member(bvm *vm);
|
|||
extern int lv_x_tostring(bvm *vm); // generic function
|
||||
|
||||
extern int lv_be_style_init(bvm *vm);
|
||||
extern int lv_be_anim_init(bvm *vm);
|
||||
extern int lv_x_tostring(bvm *vm);
|
||||
|
||||
BE_EXPORT_VARIABLE extern const bclass be_class_lv_obj;
|
||||
|
@ -693,6 +694,31 @@ extern int lvbe_spinbox_decrement(bvm *vm);
|
|||
/* `lv_spinner` external functions definitions */
|
||||
extern int lvbe_spinner_create(bvm *vm);
|
||||
|
||||
/* `lv_anim` external functions definitions */
|
||||
extern int lvbe_anim_init(bvm *vm);
|
||||
extern int lvbe_anim_set_var(bvm *vm);
|
||||
extern int lvbe_anim_set_exec_cb(bvm *vm);
|
||||
extern int lvbe_anim_set_time(bvm *vm);
|
||||
extern int lvbe_anim_set_delay(bvm *vm);
|
||||
extern int lvbe_anim_set_values(bvm *vm);
|
||||
extern int lvbe_anim_set_custom_exec_cb(bvm *vm);
|
||||
extern int lvbe_anim_set_path_cb(bvm *vm);
|
||||
extern int lvbe_anim_set_start_cb(bvm *vm);
|
||||
extern int lvbe_anim_set_get_value_cb(bvm *vm);
|
||||
extern int lvbe_anim_set_ready_cb(bvm *vm);
|
||||
extern int lvbe_anim_set_playback_time(bvm *vm);
|
||||
extern int lvbe_anim_set_playback_delay(bvm *vm);
|
||||
extern int lvbe_anim_set_repeat_count(bvm *vm);
|
||||
extern int lvbe_anim_set_repeat_delay(bvm *vm);
|
||||
extern int lvbe_anim_set_early_apply(bvm *vm);
|
||||
extern int lvbe_anim_set_user_data(bvm *vm);
|
||||
extern int lvbe_anim_start(bvm *vm);
|
||||
extern int lvbe_anim_get_delay(bvm *vm);
|
||||
extern int lvbe_anim_get_playtime(bvm *vm);
|
||||
extern int lvbe_anim_get_user_data(bvm *vm);
|
||||
extern int lvbe_anim_custom_del(bvm *vm);
|
||||
extern int lvbe_anim_custom_get(bvm *vm);
|
||||
|
||||
/* `lv_timer` external functions definitions */
|
||||
extern int lvbe_timer_del(bvm *vm);
|
||||
extern int lvbe_timer_pause(bvm *vm);
|
||||
|
@ -930,6 +956,7 @@ extern int be_ntv_lv_meter_init(bvm *vm);
|
|||
extern int be_ntv_lv_msgbox_init(bvm *vm);
|
||||
extern int be_ntv_lv_spinbox_init(bvm *vm);
|
||||
extern int be_ntv_lv_spinner_init(bvm *vm);
|
||||
extern int be_ntv_lv_anim_init(bvm *vm);
|
||||
extern int be_ntv_lv_timer_init(bvm *vm);
|
||||
extern int be_ntv_lv_arc_init(bvm *vm);
|
||||
extern int be_ntv_lv_bar_init(bvm *vm);
|
||||
|
@ -946,6 +973,7 @@ extern int be_ntv_lv_switch_init(bvm *vm);
|
|||
extern int be_ntv_lv_table_init(bvm *vm);
|
||||
extern int be_ntv_lv_textarea_init(bvm *vm);
|
||||
|
||||
extern const bclass be_class_lv_anim;
|
||||
extern const bclass be_class_lv_arc;
|
||||
extern const bclass be_class_lv_bar;
|
||||
extern const bclass be_class_lv_btn;
|
||||
|
@ -1083,6 +1111,23 @@ be_local_class(lv_timer,
|
|||
);
|
||||
/*******************************************************************/
|
||||
|
||||
/********************************************************************
|
||||
** Solidified class: lv_anim
|
||||
********************************************************************/
|
||||
be_local_class(lv_anim,
|
||||
1,
|
||||
NULL,
|
||||
be_nested_map(4,
|
||||
( (struct bmapnode*) &(const bmapnode[]) {
|
||||
{ be_nested_key("init", 380752755, 4, -1), be_const_func(lv_be_anim_init) },
|
||||
{ be_nested_key("tostring", -1995258651, 8, -1), be_const_func(lv_x_tostring) },
|
||||
{ be_nested_key("_p", 1594591802, 2, -1), be_const_var(0) },
|
||||
{ be_nested_key("member", 719708611, 6, 0), be_const_func(lv_x_member) },
|
||||
})),
|
||||
be_str_literal("lv_anim")
|
||||
);
|
||||
/*******************************************************************/
|
||||
|
||||
/********************************************************************
|
||||
** Solidified class: lv_font
|
||||
********************************************************************/
|
||||
|
@ -1378,6 +1423,12 @@ void be_load_lv_spinner_class(bvm *vm) {
|
|||
be_pop(vm, 1);
|
||||
}
|
||||
|
||||
void be_load_lv_anim_class(bvm *vm) {
|
||||
be_pushntvclass(vm, &be_class_lv_anim);
|
||||
be_setglobal(vm, "lv_anim");
|
||||
be_pop(vm, 1);
|
||||
}
|
||||
|
||||
void be_load_lv_timer_class(bvm *vm) {
|
||||
be_pushntvclass(vm, &be_class_lv_timer);
|
||||
be_setglobal(vm, "lv_timer");
|
||||
|
|
|
@ -2,7 +2,16 @@
|
|||
// Functions
|
||||
// ======================================================================
|
||||
|
||||
load_font=&lv0_load_font
|
||||
load_font=@lv0_load_font
|
||||
|
||||
// lv_anim_path_functions
|
||||
anim_path_bounce=&lv_anim_path_bounce
|
||||
anim_path_ease_in=&lv_anim_path_ease_in
|
||||
anim_path_ease_in_out=&lv_anim_path_ease_in_out
|
||||
anim_path_ease_out=&lv_anim_path_ease_out
|
||||
anim_path_linear=&lv_anim_path_linear
|
||||
anim_path_overshoot=&lv_anim_path_overshoot
|
||||
anim_path_step=&lv_anim_path_step
|
||||
|
||||
// ======================================================================
|
||||
// Colors
|
||||
|
|
|
@ -708,6 +708,37 @@ static inline void lv_obj_move_foreground(lv_obj_t * obj)
|
|||
static inline void lv_obj_move_background(lv_obj_t * obj)
|
||||
static inline uint32_t lv_obj_get_child_id(const struct _lv_obj_t * obj)
|
||||
|
||||
// ../../lvgl/src/misc/lv_anim.h
|
||||
void lv_anim_init(lv_anim_t * a)
|
||||
static inline void lv_anim_set_var(lv_anim_t * a, void * var)
|
||||
static inline void lv_anim_set_exec_cb(lv_anim_t * a, lv_anim_exec_xcb_t exec_cb)
|
||||
static inline void lv_anim_set_time(lv_anim_t * a, uint32_t duration)
|
||||
static inline void lv_anim_set_delay(lv_anim_t * a, uint32_t delay)
|
||||
static inline void lv_anim_set_values(lv_anim_t * a, int32_t start, int32_t end)
|
||||
static inline void lv_anim_set_custom_exec_cb(lv_anim_t * a, lv_anim_custom_exec_cb_t exec_cb)
|
||||
static inline void lv_anim_set_path_cb(lv_anim_t * a, lv_anim_path_cb_t path_cb)
|
||||
static inline void lv_anim_set_start_cb(lv_anim_t * a, lv_anim_start_cb_t start_cb)
|
||||
static inline void lv_anim_set_get_value_cb(lv_anim_t * a, lv_anim_get_value_cb_t get_value_cb)
|
||||
static inline void lv_anim_set_ready_cb(lv_anim_t * a, lv_anim_ready_cb_t ready_cb)
|
||||
static inline void lv_anim_set_playback_time(lv_anim_t * a, uint32_t time)
|
||||
static inline void lv_anim_set_playback_delay(lv_anim_t * a, uint32_t delay)
|
||||
static inline void lv_anim_set_repeat_count(lv_anim_t * a, uint16_t cnt)
|
||||
static inline void lv_anim_set_repeat_delay(lv_anim_t * a, uint32_t delay)
|
||||
static inline void lv_anim_set_early_apply(lv_anim_t * a, bool en)
|
||||
static inline void lv_anim_set_user_data(lv_anim_t * a, void * user_data)
|
||||
lv_anim_t * lv_anim_start(const lv_anim_t * a)
|
||||
static inline uint32_t lv_anim_get_delay(lv_anim_t * a)
|
||||
uint32_t lv_anim_get_playtime(lv_anim_t * a)
|
||||
static inline void * lv_anim_get_user_data(lv_anim_t * a)
|
||||
bool lv_anim_del(void * var, lv_anim_exec_xcb_t exec_cb)
|
||||
void lv_anim_del_all(void)
|
||||
lv_anim_t * lv_anim_get(void * var, lv_anim_exec_xcb_t exec_cb)
|
||||
static inline bool lv_anim_custom_del(lv_anim_t * a, lv_anim_custom_exec_cb_t exec_cb)
|
||||
static inline lv_anim_t * lv_anim_custom_get(lv_anim_t * a, lv_anim_custom_exec_cb_t exec_cb)
|
||||
uint16_t lv_anim_count_running(void)
|
||||
uint32_t lv_anim_speed_to_time(uint32_t speed, int32_t start, int32_t end)
|
||||
void lv_anim_refr_now(void)
|
||||
|
||||
// ../../lvgl/src/misc/lv_area.h
|
||||
void lv_area_set(lv_area_t * area_p, lv_coord_t x1, lv_coord_t y1, lv_coord_t x2, lv_coord_t y2)
|
||||
inline static void lv_area_copy(lv_area_t * dest, const lv_area_t * src)
|
||||
|
|
|
@ -3,6 +3,51 @@
|
|||
*******************************************************************/
|
||||
#include "be_constobj.h"
|
||||
|
||||
/********************************************************************
|
||||
** Solidified function: _anonymous_
|
||||
********************************************************************/
|
||||
be_local_closure(lv_extra__anonymous_, /* name */
|
||||
be_nested_proto(
|
||||
4, /* nstack */
|
||||
1, /* argc */
|
||||
0, /* varg */
|
||||
0, /* has upvals */
|
||||
NULL, /* no upvals */
|
||||
0, /* has sup protos */
|
||||
NULL, /* no sub protos */
|
||||
1, /* has constants */
|
||||
( &(const bvalue[ 8]) { /* constants */
|
||||
/* K0 */ be_nested_str(global),
|
||||
/* K1 */ be_nested_str(lv),
|
||||
/* K2 */ be_nested_str(lv_coord_arr),
|
||||
/* K3 */ be_nested_str(lv_point_arr),
|
||||
/* K4 */ be_nested_str(coord_arr),
|
||||
/* K5 */ be_nested_str(point_arr),
|
||||
/* K6 */ be_nested_str(style_prop_arr),
|
||||
/* K7 */ be_nested_str(lv_style_prop_arr),
|
||||
}),
|
||||
&be_const_str__anonymous_,
|
||||
&be_const_str_solidified,
|
||||
( &(const binstruction[13]) { /* code */
|
||||
0xA4060000, // 0000 IMPORT R1 K0
|
||||
0x88080301, // 0001 GETMBR R2 R1 K1
|
||||
0x880C0102, // 0002 GETMBR R3 R0 K2
|
||||
0x900A0403, // 0003 SETMBR R2 K2 R3
|
||||
0x880C0103, // 0004 GETMBR R3 R0 K3
|
||||
0x900A0603, // 0005 SETMBR R2 K3 R3
|
||||
0x880C0102, // 0006 GETMBR R3 R0 K2
|
||||
0x900A0803, // 0007 SETMBR R2 K4 R3
|
||||
0x880C0103, // 0008 GETMBR R3 R0 K3
|
||||
0x900A0A03, // 0009 SETMBR R2 K5 R3
|
||||
0x880C0107, // 000A GETMBR R3 R0 K7
|
||||
0x900A0C03, // 000B SETMBR R2 K6 R3
|
||||
0x80040000, // 000C RET 1 R0
|
||||
})
|
||||
)
|
||||
);
|
||||
/*******************************************************************/
|
||||
|
||||
|
||||
/********************************************************************
|
||||
** Solidified function: init
|
||||
********************************************************************/
|
||||
|
@ -10,7 +55,7 @@ be_local_closure(lv_coord_arr_init, /* name */
|
|||
be_nested_proto(
|
||||
8, /* nstack */
|
||||
2, /* argc */
|
||||
0, /* varg */
|
||||
2, /* varg */
|
||||
0, /* has upvals */
|
||||
NULL, /* no upvals */
|
||||
0, /* has sup protos */
|
||||
|
@ -92,7 +137,7 @@ be_local_closure(lv_point_arr_init, /* name */
|
|||
be_nested_proto(
|
||||
8, /* nstack */
|
||||
2, /* argc */
|
||||
0, /* varg */
|
||||
2, /* varg */
|
||||
0, /* has upvals */
|
||||
NULL, /* no upvals */
|
||||
0, /* has sup protos */
|
||||
|
@ -188,56 +233,98 @@ be_local_class(lv_point_arr,
|
|||
);
|
||||
|
||||
/********************************************************************
|
||||
** Solidified function: _anonymous_
|
||||
** Solidified function: init
|
||||
********************************************************************/
|
||||
be_local_closure(lv_extra__anonymous_, /* name */
|
||||
be_local_closure(lv_style_prop_arr_init, /* name */
|
||||
be_nested_proto(
|
||||
4, /* nstack */
|
||||
1, /* argc */
|
||||
0, /* varg */
|
||||
8, /* nstack */
|
||||
2, /* argc */
|
||||
2, /* varg */
|
||||
0, /* has upvals */
|
||||
NULL, /* no upvals */
|
||||
0, /* has sup protos */
|
||||
NULL, /* no sub protos */
|
||||
1, /* has constants */
|
||||
( &(const bvalue[ 6]) { /* constants */
|
||||
/* K0 */ be_nested_str(global),
|
||||
/* K1 */ be_nested_str(lv),
|
||||
/* K2 */ be_nested_str(lv_coord_arr),
|
||||
/* K3 */ be_nested_str(lv_point_arr),
|
||||
/* K4 */ be_nested_str(coord_arr),
|
||||
/* K5 */ be_nested_str(point_arr),
|
||||
/* K0 */ be_nested_str(instance),
|
||||
/* K1 */ be_nested_str(value_error),
|
||||
/* K2 */ be_nested_str(argument_X20must_X20be_X20a_X20list),
|
||||
/* K3 */ be_nested_str(init),
|
||||
/* K4 */ be_nested_str(add),
|
||||
/* K5 */ be_nested_str(stop_iteration),
|
||||
}),
|
||||
&be_const_str__anonymous_,
|
||||
&be_const_str_init,
|
||||
&be_const_str_solidified,
|
||||
( &(const binstruction[11]) { /* code */
|
||||
0xA4060000, // 0000 IMPORT R1 K0
|
||||
0x88080301, // 0001 GETMBR R2 R1 K1
|
||||
0x880C0102, // 0002 GETMBR R3 R0 K2
|
||||
0x900A0403, // 0003 SETMBR R2 K2 R3
|
||||
0x880C0103, // 0004 GETMBR R3 R0 K3
|
||||
0x900A0603, // 0005 SETMBR R2 K3 R3
|
||||
0x880C0102, // 0006 GETMBR R3 R0 K2
|
||||
0x900A0803, // 0007 SETMBR R2 K4 R3
|
||||
0x880C0103, // 0008 GETMBR R3 R0 K3
|
||||
0x900A0A03, // 0009 SETMBR R2 K5 R3
|
||||
0x80040000, // 000A RET 1 R0
|
||||
( &(const binstruction[38]) { /* code */
|
||||
0x60080004, // 0000 GETGBL R2 G4
|
||||
0x5C0C0200, // 0001 MOVE R3 R1
|
||||
0x7C080200, // 0002 CALL R2 1
|
||||
0x20080500, // 0003 NE R2 R2 K0
|
||||
0x740A0004, // 0004 JMPT R2 #000A
|
||||
0x6008000F, // 0005 GETGBL R2 G15
|
||||
0x5C0C0200, // 0006 MOVE R3 R1
|
||||
0x60100012, // 0007 GETGBL R4 G18
|
||||
0x7C080400, // 0008 CALL R2 2
|
||||
0x740A0000, // 0009 JMPT R2 #000B
|
||||
0xB0060302, // 000A RAISE 1 K1 K2
|
||||
0x60080003, // 000B GETGBL R2 G3
|
||||
0x5C0C0000, // 000C MOVE R3 R0
|
||||
0x7C080200, // 000D CALL R2 1
|
||||
0x8C080503, // 000E GETMET R2 R2 K3
|
||||
0x6010000C, // 000F GETGBL R4 G12
|
||||
0x5C140200, // 0010 MOVE R5 R1
|
||||
0x7C100200, // 0011 CALL R4 1
|
||||
0x54160003, // 0012 LDINT R5 4
|
||||
0x08100805, // 0013 MUL R4 R4 R5
|
||||
0x7C080400, // 0014 CALL R2 2
|
||||
0x60080010, // 0015 GETGBL R2 G16
|
||||
0x5C0C0200, // 0016 MOVE R3 R1
|
||||
0x7C080200, // 0017 CALL R2 1
|
||||
0xA8020008, // 0018 EXBLK 0 #0022
|
||||
0x5C0C0400, // 0019 MOVE R3 R2
|
||||
0x7C0C0000, // 001A CALL R3 0
|
||||
0x8C100104, // 001B GETMET R4 R0 K4
|
||||
0x60180009, // 001C GETGBL R6 G9
|
||||
0x5C1C0600, // 001D MOVE R7 R3
|
||||
0x7C180200, // 001E CALL R6 1
|
||||
0x541E0003, // 001F LDINT R7 4
|
||||
0x7C100600, // 0020 CALL R4 3
|
||||
0x7001FFF6, // 0021 JMP #0019
|
||||
0x58080005, // 0022 LDCONST R2 K5
|
||||
0xAC080200, // 0023 CATCH R2 1 0
|
||||
0xB0080000, // 0024 RAISE 2 R0 R0
|
||||
0x80000000, // 0025 RET 0
|
||||
})
|
||||
)
|
||||
);
|
||||
/*******************************************************************/
|
||||
|
||||
|
||||
/********************************************************************
|
||||
** Solidified class: lv_style_prop_arr
|
||||
********************************************************************/
|
||||
extern const bclass be_class_bytes;
|
||||
be_local_class(lv_style_prop_arr,
|
||||
0,
|
||||
&be_class_bytes,
|
||||
be_nested_map(1,
|
||||
( (struct bmapnode*) &(const bmapnode[]) {
|
||||
{ be_const_key(init, -1), be_const_closure(lv_style_prop_arr_init_closure) },
|
||||
})),
|
||||
be_str_literal("lv_style_prop_arr")
|
||||
);
|
||||
|
||||
/********************************************************************
|
||||
** Solidified module: lv_extra
|
||||
********************************************************************/
|
||||
be_local_module(lv_extra,
|
||||
"lv_extra",
|
||||
be_nested_map(3,
|
||||
be_nested_map(4,
|
||||
( (struct bmapnode*) &(const bmapnode[]) {
|
||||
{ be_const_key(init, -1), be_const_closure(lv_extra__anonymous__closure) },
|
||||
{ be_const_key(lv_style_prop_arr, -1), be_const_class(be_class_lv_style_prop_arr) },
|
||||
{ be_const_key(lv_coord_arr, -1), be_const_class(be_class_lv_coord_arr) },
|
||||
{ be_const_key(lv_point_arr, -1), be_const_class(be_class_lv_point_arr) },
|
||||
{ be_const_key(lv_coord_arr, 1), be_const_class(be_class_lv_coord_arr) },
|
||||
{ be_const_key(init, 0), be_const_closure(lv_extra__anonymous__closure) },
|
||||
}))
|
||||
);
|
||||
BE_EXPORT_VARIABLE be_define_const_native_module(lv_extra);
|
||||
|
|
|
@ -517,6 +517,36 @@ lv_timer = [ # valid LVGL8.2
|
|||
]
|
||||
lv_timer = ctypes.structure(lv_timer, "lv_timer")
|
||||
|
||||
# #######################################################################
|
||||
# # lv_anim
|
||||
# lv_anim = [ # valid LVGL8.2
|
||||
# [ptr, "var"],
|
||||
# [ptr, "exec_cb"],
|
||||
# [ptr, "start_cb"],
|
||||
# [ptr, "ready_cb"],
|
||||
# [ptr, "get_value_cb"],
|
||||
|
||||
# [ptr, "user_data"],
|
||||
|
||||
# [ptr, "path_cb"],
|
||||
# [int32_t, "start_value"],
|
||||
# [int32_t, "current_value"],
|
||||
# [int32_t, "end_value"],
|
||||
# [int32_t, "time"],
|
||||
# [int32_t, "act_time"],
|
||||
# [uint32_t, "playback_delay"],
|
||||
# [uint32_t, "playback_time"],
|
||||
# [uint32_t, "repeat_delay"],
|
||||
# [uint32_t, "repeat_cnt"],
|
||||
|
||||
# [uint8_t_1, "early_apply"],
|
||||
# [uint8_t_1, "playback_now"],
|
||||
# [uint8_t_1, "run_round"],
|
||||
# [uint8_t_1, "start_cb_called"],
|
||||
|
||||
# ]
|
||||
# lv_anim = ctypes.structure(lv_anim, "lv_anim")
|
||||
|
||||
#######################################################################
|
||||
# lv_draw_ctc
|
||||
lv_draw_ctx = [ # valid LVGL8.2
|
||||
|
|
|
@ -28,8 +28,21 @@ class lv_point_arr : bytes
|
|||
end
|
||||
end
|
||||
|
||||
class lv_style_prop_arr : bytes
|
||||
def init(l)
|
||||
if type(l) != 'instance' || !isinstance(l, list) raise "value_error", "argument must be a list" end
|
||||
# size of the array is 2x number of elements
|
||||
super(self).init(size(l) * 4)
|
||||
|
||||
for e: l
|
||||
self.add(int(e), 4)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
lv_extra.lv_coord_arr = lv_coord_arr
|
||||
lv_extra.lv_point_arr = lv_point_arr
|
||||
lv_extra.lv_style_prop_arr = lv_style_prop_arr
|
||||
|
||||
lv_extra.init = def (m)
|
||||
import global
|
||||
|
@ -39,6 +52,7 @@ lv_extra.init = def (m)
|
|||
lv.lv_point_arr = m.lv_point_arr
|
||||
lv.coord_arr = m.lv_coord_arr
|
||||
lv.point_arr = m.lv_point_arr
|
||||
lv.style_prop_arr = m.lv_style_prop_arr
|
||||
|
||||
return m
|
||||
end
|
||||
|
|
|
@ -86,6 +86,34 @@ int lv_be_style_init(bvm *vm) {
|
|||
be_return_nil(vm);
|
||||
}
|
||||
|
||||
/*********************************************************************************************\
|
||||
* Support for lv_anim `init()`
|
||||
*
|
||||
* Either encapsulate the pointer passed as `comptr` as arg1
|
||||
* Or allocate a new empty style structure in memory. In this case, it is never freed.
|
||||
\*********************************************************************************************/
|
||||
int lv_be_anim_init(bvm *vm) {
|
||||
int argc = be_top(vm);
|
||||
lv_anim_t * anim = NULL;
|
||||
|
||||
if (argc > 1) {
|
||||
anim = (lv_anim_t*) be_convert_single_elt(vm, 2, NULL, NULL);
|
||||
}
|
||||
if (anim == NULL) {
|
||||
// if no valid pointer passed, allocate a new empty style
|
||||
anim = (lv_anim_t*) be_malloc(vm, sizeof(lv_anim_t));
|
||||
if (anim == NULL) {
|
||||
be_throw(vm, BE_MALLOC_FAIL);
|
||||
}
|
||||
if (anim != NULL) {
|
||||
lv_anim_init(anim);
|
||||
}
|
||||
}
|
||||
be_pushcomptr(vm, anim);
|
||||
be_setmember(vm, 1, "_p");
|
||||
be_return_nil(vm);
|
||||
}
|
||||
|
||||
// native closure to call `be_call_c_func`
|
||||
int lv_x_call_c(bvm *vm) {
|
||||
// berry_log_C("lv_x_call_c enter");
|
||||
|
|
|
@ -110,7 +110,15 @@ return_types = {
|
|||
"lv_grid_align_t": "i",
|
||||
|
||||
"_lv_event_dsc_t *": "i",
|
||||
# lv_anim
|
||||
"lv_anim_t *": "lv_anim",
|
||||
"lv_anim_enable_t": "i",
|
||||
"lv_anim_exec_xcb_t": "c",
|
||||
"lv_anim_custom_exec_cb_t": "c",
|
||||
"lv_anim_get_value_cb_t": "c",
|
||||
"lv_anim_path_cb_t": "c",
|
||||
"lv_anim_ready_cb_t": "c",
|
||||
"lv_anim_start_cb_t": "c",
|
||||
|
||||
# arrays
|
||||
"char * []": "str_arr",
|
||||
|
@ -181,7 +189,7 @@ lv_widgets = ['arc', 'bar', 'btn', 'btnmatrix', 'canvas', 'checkbox',
|
|||
# extra widgets
|
||||
|
||||
lv_widgets = lv_widgets + [ 'chart', 'colorwheel', 'imgbtn', 'led', 'meter', 'msgbox', 'spinbox', 'spinner' ]
|
||||
lv_prefix = ['obj', 'group', 'style', 'indev', 'disp', 'timer'] + lv_widgets
|
||||
lv_prefix = ['obj', 'group', 'style', 'indev', 'disp', 'timer', 'anim'] + lv_widgets
|
||||
|
||||
# define here widget inheritance because it's hard to deduce from source
|
||||
lv_widget_inheritance = {
|
||||
|
@ -234,7 +242,7 @@ with open(lv_widgets_file) as f:
|
|||
# convert return type
|
||||
c_ret = c_convert_ret_type(ret_type)
|
||||
elif ret_type_without_t in lv_cb_types:
|
||||
c_ret = "c" # general callback, if not already captured by explicit type
|
||||
c_ret = "C" # general callback, if not already captured by explicit type
|
||||
else:
|
||||
print(f" // Skipping unsupported return type: {ret_type}")
|
||||
continue
|
||||
|
@ -267,7 +275,7 @@ with open(lv_widgets_file) as f:
|
|||
ga_type = re.sub(r"_t$", "", ga_type)
|
||||
|
||||
# if the type is a single letter, we just add it
|
||||
if len(ga_type) == 1 and ga_type != 'c': # callbacks are different
|
||||
if len(ga_type) == 1 and ga_type != 'C': # callbacks are different
|
||||
c_args += ga_type
|
||||
else:
|
||||
if ga_type.endswith("_cb"):
|
||||
|
@ -477,6 +485,7 @@ extern int lv_x_member(bvm *vm);
|
|||
extern int lv_x_tostring(bvm *vm); // generic function
|
||||
|
||||
extern int lv_be_style_init(bvm *vm);
|
||||
extern int lv_be_anim_init(bvm *vm);
|
||||
extern int lv_x_tostring(bvm *vm);
|
||||
|
||||
BE_EXPORT_VARIABLE extern const bclass be_class_lv_obj;
|
||||
|
@ -618,6 +627,23 @@ be_local_class(lv_timer,
|
|||
);
|
||||
/*******************************************************************/
|
||||
|
||||
/********************************************************************
|
||||
** Solidified class: lv_anim
|
||||
********************************************************************/
|
||||
be_local_class(lv_anim,
|
||||
1,
|
||||
NULL,
|
||||
be_nested_map(4,
|
||||
( (struct bmapnode*) &(const bmapnode[]) {
|
||||
{ be_nested_key("init", 380752755, 4, -1), be_const_func(lv_be_anim_init) },
|
||||
{ be_nested_key("tostring", -1995258651, 8, -1), be_const_func(lv_x_tostring) },
|
||||
{ be_nested_key("_p", 1594591802, 2, -1), be_const_var(0) },
|
||||
{ be_nested_key("member", 719708611, 6, 0), be_const_func(lv_x_member) },
|
||||
})),
|
||||
be_str_literal("lv_anim")
|
||||
);
|
||||
/*******************************************************************/
|
||||
|
||||
/********************************************************************
|
||||
** Solidified class: lv_font
|
||||
********************************************************************/
|
||||
|
@ -803,6 +829,7 @@ for k in sorted(lv_module2):
|
|||
v_macro = "be_cconst_int"
|
||||
if v[0] == '"': v_prefix = "$"; v_macro = "be_cconst_string"
|
||||
if v[0] == '&': v_prefix = "&"; v_macro = "be_cconst_ptr"
|
||||
if v[0] == '@': v_prefix = "@"; v_macro = "be_cconst_ptr"; v = "&" + v[1:]
|
||||
print(f" {{ \"{v_prefix}{k}\", {v_macro}({v}) }},")
|
||||
else:
|
||||
print(f" {{ \"{k}\", be_cconst_int(LV_{k}) }},")
|
||||
|
|
|
@ -67,6 +67,7 @@ lv_fun_globs = [
|
|||
"extra/libs/qrcode/lv_qrcode.h",
|
||||
"core/*.h",
|
||||
"draw/*.h",
|
||||
"misc/lv_anim.h",
|
||||
"misc/lv_style_gen.h",
|
||||
"misc/lv_color.h",
|
||||
"misc/lv_style.h",
|
||||
|
@ -169,6 +170,7 @@ for header_name in headers_names:
|
|||
"^lv_event_get_", # event_getters not needed
|
||||
"^lv_refr_reset_fps_counter",
|
||||
"^lv_refr_get_fps_avg",
|
||||
"^lv_anim_path_", # callbacks for animation are moved to constants
|
||||
]:
|
||||
if re.search(exclude_pattern, fun_name): exclude = True
|
||||
if exclude: continue
|
||||
|
@ -200,7 +202,16 @@ print("""// ====================================================================
|
|||
// Functions
|
||||
// ======================================================================
|
||||
|
||||
load_font=&lv0_load_font
|
||||
load_font=@lv0_load_font
|
||||
|
||||
// lv_anim_path_functions
|
||||
anim_path_bounce=&lv_anim_path_bounce
|
||||
anim_path_ease_in=&lv_anim_path_ease_in
|
||||
anim_path_ease_in_out=&lv_anim_path_ease_in_out
|
||||
anim_path_ease_out=&lv_anim_path_ease_out
|
||||
anim_path_linear=&lv_anim_path_linear
|
||||
anim_path_overshoot=&lv_anim_path_overshoot
|
||||
anim_path_step=&lv_anim_path_step
|
||||
|
||||
// ======================================================================
|
||||
// Colors
|
||||
|
|
|
@ -30,6 +30,7 @@ const char berry_prog[] =
|
|||
#ifdef USE_BERRY_PYTHON_COMPAT
|
||||
// enable python syntax compatibility mode
|
||||
"import python_compat "
|
||||
"import cb "
|
||||
#endif
|
||||
|
||||
#ifdef USE_ENERGY_SENSOR
|
||||
|
|
Loading…
Reference in New Issue