HASPmota moved to a distinct library `lv_haspmota` (#20929)

This commit is contained in:
s-hadinger 2024-03-11 22:31:44 +01:00 committed by GitHub
parent 309ac81e22
commit 8b7cd2de44
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
19 changed files with 897 additions and 81 deletions

View File

@ -19,6 +19,7 @@ All notable changes to this project will be documented in this file.
### Changed ### Changed
- LVGL optimize fonts and add icons (#20880) - LVGL optimize fonts and add icons (#20880)
- LVGL improved readability of montserrat-10 (#20900) - LVGL improved readability of montserrat-10 (#20900)
- HASPmota moved to a distinct library `lv_haspmota`
### Fixed ### Fixed
- Berry bug when parsing ternary operator (#20839) - Berry bug when parsing ternary operator (#20839)

View File

@ -5,4 +5,4 @@
# Included in the Platformio build process with `pio-tools/gen-berry-structures.py # Included in the Platformio build process with `pio-tools/gen-berry-structures.py
# #
rm -Rf ./generate/be_*.h rm -Rf ./generate/be_*.h
python3 tools/coc/coc -o generate src default ../berry_tasmota/src ../berry_mapping/src ../berry_int64/src ../../libesp32_lvgl/lv_binding_berry/src ../berry_matter/src/solidify ../berry_matter/src ../berry_animate/src/solidify ../berry_animate/src ../../libesp32_lvgl/lv_binding_berry/src/solidify ../../libesp32_lvgl/lv_binding_berry/generate -c default/berry_conf.h python3 tools/coc/coc -o generate src default ../berry_tasmota/src ../berry_mapping/src ../berry_int64/src ../../libesp32_lvgl/lv_binding_berry/src ../../libesp32_lvgl/lv_haspmota/src/solidify ../berry_matter/src/solidify ../berry_matter/src ../berry_animate/src/solidify ../berry_animate/src ../../libesp32_lvgl/lv_binding_berry/src/solidify ../../libesp32_lvgl/lv_binding_berry/generate -c default/berry_conf.h

View File

@ -6,6 +6,7 @@
#ifdef USE_LVGL #ifdef USE_LVGL
extern int lv0_start(bvm *vm); extern int lv0_start(bvm *vm);
extern int lv0_constants_as_hash(bvm *vm); // dump all integer constants
extern int lv0_register_button_encoder(bvm *vm); // add buttons with encoder logic extern int lv0_register_button_encoder(bvm *vm); // add buttons with encoder logic
@ -22,6 +23,7 @@ extern int lv0_load_freetype_font(bvm *vm);
/* @const_object_info_begin /* @const_object_info_begin
module lv_tasmota (scope: global, strings: weak) { module lv_tasmota (scope: global, strings: weak) {
init, closure(lv_tasmota_init_closure) init, closure(lv_tasmota_init_closure)
_constants, func(lv0_constants_as_hash)
start, func(lv0_start) start, func(lv0_start)
splash, closure(lv_tasmota_splash_closure) splash, closure(lv_tasmota_splash_closure)

View File

@ -8,6 +8,7 @@ lv_tasmota = module("lv_tasmota")
def init(lv_tasmota) def init(lv_tasmota)
import lv import lv
lv.start = lv_tasmota.start lv.start = lv_tasmota.start
lv._constants = lv_tasmota._constants
lv.splash_init = lv_tasmota.splash_init lv.splash_init = lv_tasmota.splash_init
lv.splash_remove = lv_tasmota.splash_remove lv.splash_remove = lv_tasmota.splash_remove
lv.splash = lv_tasmota.splash lv.splash = lv_tasmota.splash

View File

@ -17,46 +17,47 @@ be_local_closure(lv_tasmota_init, /* name */
0, /* has sup protos */ 0, /* has sup protos */
NULL, /* no sub protos */ NULL, /* no sub protos */
1, /* has constants */ 1, /* has constants */
( &(const bvalue[35]) { /* constants */ ( &(const bvalue[36]) { /* constants */
/* K0 */ be_nested_str_weak(lv), /* K0 */ be_nested_str_weak(lv),
/* K1 */ be_nested_str_weak(start), /* K1 */ be_nested_str_weak(start),
/* K2 */ be_nested_str_weak(splash_init), /* K2 */ be_nested_str_weak(_constants),
/* K3 */ be_nested_str_weak(splash_remove), /* K3 */ be_nested_str_weak(splash_init),
/* K4 */ be_nested_str_weak(splash), /* K4 */ be_nested_str_weak(splash_remove),
/* K5 */ be_nested_str_weak(_splash), /* K5 */ be_nested_str_weak(splash),
/* K6 */ be_nested_str_weak(font_montserrat), /* K6 */ be_nested_str_weak(_splash),
/* K7 */ be_nested_str_weak(montserrat_font), /* K7 */ be_nested_str_weak(font_montserrat),
/* K8 */ be_nested_str_weak(font_seg7), /* K8 */ be_nested_str_weak(montserrat_font),
/* K9 */ be_nested_str_weak(seg7_font), /* K9 */ be_nested_str_weak(font_seg7),
/* K10 */ be_nested_str_weak(font_embedded), /* K10 */ be_nested_str_weak(seg7_font),
/* K11 */ be_nested_str_weak(load_freetype_font), /* K11 */ be_nested_str_weak(font_embedded),
/* K12 */ be_nested_str_weak(register_button_encoder), /* K12 */ be_nested_str_weak(load_freetype_font),
/* K13 */ be_nested_str_weak(screenshot), /* K13 */ be_nested_str_weak(register_button_encoder),
/* K14 */ be_nested_str_weak(version), /* K14 */ be_nested_str_weak(screenshot),
/* K15 */ be_nested_str_weak(version_major), /* K15 */ be_nested_str_weak(version),
/* K16 */ be_nested_str_weak(clock), /* K16 */ be_nested_str_weak(version_major),
/* K17 */ be_nested_str_weak(lv_clock), /* K17 */ be_nested_str_weak(clock),
/* K18 */ be_nested_str_weak(clock_icon), /* K18 */ be_nested_str_weak(lv_clock),
/* K19 */ be_nested_str_weak(lv_clock_icon), /* K19 */ be_nested_str_weak(clock_icon),
/* K20 */ be_nested_str_weak(signal_arcs), /* K20 */ be_nested_str_weak(lv_clock_icon),
/* K21 */ be_nested_str_weak(lv_signal_arcs), /* K21 */ be_nested_str_weak(signal_arcs),
/* K22 */ be_nested_str_weak(signal_bars), /* K22 */ be_nested_str_weak(lv_signal_arcs),
/* K23 */ be_nested_str_weak(lv_signal_bars), /* K23 */ be_nested_str_weak(signal_bars),
/* K24 */ be_nested_str_weak(wifi_arcs_icon), /* K24 */ be_nested_str_weak(lv_signal_bars),
/* K25 */ be_nested_str_weak(lv_wifi_arcs_icon), /* K25 */ be_nested_str_weak(wifi_arcs_icon),
/* K26 */ be_nested_str_weak(wifi_arcs), /* K26 */ be_nested_str_weak(lv_wifi_arcs_icon),
/* K27 */ be_nested_str_weak(lv_wifi_arcs), /* K27 */ be_nested_str_weak(wifi_arcs),
/* K28 */ be_nested_str_weak(wifi_bars_icon), /* K28 */ be_nested_str_weak(lv_wifi_arcs),
/* K29 */ be_nested_str_weak(lv_wifi_bars_icon), /* K29 */ be_nested_str_weak(wifi_bars_icon),
/* K30 */ be_nested_str_weak(wifi_bars), /* K30 */ be_nested_str_weak(lv_wifi_bars_icon),
/* K31 */ be_nested_str_weak(lv_wifi_bars), /* K31 */ be_nested_str_weak(wifi_bars),
/* K32 */ be_nested_str_weak(tasmota), /* K32 */ be_nested_str_weak(lv_wifi_bars),
/* K33 */ be_nested_str_weak(get_option), /* K33 */ be_nested_str_weak(tasmota),
/* K34 */ be_const_int(0), /* K34 */ be_nested_str_weak(get_option),
/* K35 */ be_const_int(0),
}), }),
be_str_weak(init), be_str_weak(init),
&be_const_str_solidified, &be_const_str_solidified,
( &(const binstruction[56]) { /* code */ ( &(const binstruction[58]) { /* code */
0xA4060000, // 0000 IMPORT R1 K0 0xA4060000, // 0000 IMPORT R1 K0
0x88080101, // 0001 GETMBR R2 R0 K1 0x88080101, // 0001 GETMBR R2 R0 K1
0x90060202, // 0002 SETMBR R1 K1 R2 0x90060202, // 0002 SETMBR R1 K1 R2
@ -66,17 +67,17 @@ be_local_closure(lv_tasmota_init, /* name */
0x90060602, // 0006 SETMBR R1 K3 R2 0x90060602, // 0006 SETMBR R1 K3 R2
0x88080104, // 0007 GETMBR R2 R0 K4 0x88080104, // 0007 GETMBR R2 R0 K4
0x90060802, // 0008 SETMBR R1 K4 R2 0x90060802, // 0008 SETMBR R1 K4 R2
0x4C080000, // 0009 LDNIL R2 0x88080105, // 0009 GETMBR R2 R0 K5
0x90060A02, // 000A SETMBR R1 K5 R2 0x90060A02, // 000A SETMBR R1 K5 R2
0x88080106, // 000B GETMBR R2 R0 K6 0x4C080000, // 000B LDNIL R2
0x90060C02, // 000C SETMBR R1 K6 R2 0x90060C02, // 000C SETMBR R1 K6 R2
0x88080106, // 000D GETMBR R2 R0 K6 0x88080107, // 000D GETMBR R2 R0 K7
0x90060E02, // 000E SETMBR R1 K7 R2 0x90060E02, // 000E SETMBR R1 K7 R2
0x88080108, // 000F GETMBR R2 R0 K8 0x88080107, // 000F GETMBR R2 R0 K7
0x90061002, // 0010 SETMBR R1 K8 R2 0x90061002, // 0010 SETMBR R1 K8 R2
0x88080108, // 0011 GETMBR R2 R0 K8 0x88080109, // 0011 GETMBR R2 R0 K9
0x90061202, // 0012 SETMBR R1 K9 R2 0x90061202, // 0012 SETMBR R1 K9 R2
0x8808010A, // 0013 GETMBR R2 R0 K10 0x88080109, // 0013 GETMBR R2 R0 K9
0x90061402, // 0014 SETMBR R1 K10 R2 0x90061402, // 0014 SETMBR R1 K10 R2
0x8808010B, // 0015 GETMBR R2 R0 K11 0x8808010B, // 0015 GETMBR R2 R0 K11
0x90061602, // 0016 SETMBR R1 K11 R2 0x90061602, // 0016 SETMBR R1 K11 R2
@ -84,35 +85,37 @@ be_local_closure(lv_tasmota_init, /* name */
0x90061802, // 0018 SETMBR R1 K12 R2 0x90061802, // 0018 SETMBR R1 K12 R2
0x8808010D, // 0019 GETMBR R2 R0 K13 0x8808010D, // 0019 GETMBR R2 R0 K13
0x90061A02, // 001A SETMBR R1 K13 R2 0x90061A02, // 001A SETMBR R1 K13 R2
0x8C08030F, // 001B GETMET R2 R1 K15 0x8808010E, // 001B GETMBR R2 R0 K14
0x7C080200, // 001C CALL R2 1 0x90061C02, // 001C SETMBR R1 K14 R2
0x90061C02, // 001D SETMBR R1 K14 R2 0x8C080310, // 001D GETMET R2 R1 K16
0xB80A2200, // 001E GETNGBL R2 K17 0x7C080200, // 001E CALL R2 1
0x90062002, // 001F SETMBR R1 K16 R2 0x90061E02, // 001F SETMBR R1 K15 R2
0xB80A2600, // 0020 GETNGBL R2 K19 0xB80A2400, // 0020 GETNGBL R2 K18
0x90062402, // 0021 SETMBR R1 K18 R2 0x90062202, // 0021 SETMBR R1 K17 R2
0xB80A2A00, // 0022 GETNGBL R2 K21 0xB80A2800, // 0022 GETNGBL R2 K20
0x90062802, // 0023 SETMBR R1 K20 R2 0x90062602, // 0023 SETMBR R1 K19 R2
0xB80A2E00, // 0024 GETNGBL R2 K23 0xB80A2C00, // 0024 GETNGBL R2 K22
0x90062C02, // 0025 SETMBR R1 K22 R2 0x90062A02, // 0025 SETMBR R1 K21 R2
0xB80A3200, // 0026 GETNGBL R2 K25 0xB80A3000, // 0026 GETNGBL R2 K24
0x90063002, // 0027 SETMBR R1 K24 R2 0x90062E02, // 0027 SETMBR R1 K23 R2
0xB80A3600, // 0028 GETNGBL R2 K27 0xB80A3400, // 0028 GETNGBL R2 K26
0x90063402, // 0029 SETMBR R1 K26 R2 0x90063202, // 0029 SETMBR R1 K25 R2
0xB80A3A00, // 002A GETNGBL R2 K29 0xB80A3800, // 002A GETNGBL R2 K28
0x90063802, // 002B SETMBR R1 K28 R2 0x90063602, // 002B SETMBR R1 K27 R2
0xB80A3E00, // 002C GETNGBL R2 K31 0xB80A3C00, // 002C GETNGBL R2 K30
0x90063C02, // 002D SETMBR R1 K30 R2 0x90063A02, // 002D SETMBR R1 K29 R2
0xB80A4000, // 002E GETNGBL R2 K32 0xB80A4000, // 002E GETNGBL R2 K32
0x8C080521, // 002F GETMET R2 R2 K33 0x90063E02, // 002F SETMBR R1 K31 R2
0x54120086, // 0030 LDINT R4 135 0xB80A4200, // 0030 GETNGBL R2 K33
0x7C080400, // 0031 CALL R2 2 0x8C080522, // 0031 GETMET R2 R2 K34
0x1C080522, // 0032 EQ R2 R2 K34 0x54120086, // 0032 LDINT R4 135
0x780A0001, // 0033 JMPF R2 #0036 0x7C080400, // 0033 CALL R2 2
0x8C080302, // 0034 GETMET R2 R1 K2 0x1C080523, // 0034 EQ R2 R2 K35
0x7C080200, // 0035 CALL R2 1 0x780A0001, // 0035 JMPF R2 #0038
0x4C080000, // 0036 LDNIL R2 0x8C080303, // 0036 GETMET R2 R1 K3
0x80040400, // 0037 RET 1 R2 0x7C080200, // 0037 CALL R2 1
0x4C080000, // 0038 LDNIL R2
0x80040400, // 0039 RET 1 R2
}) })
) )
); );

View File

@ -355,7 +355,29 @@ int lv0_member(bvm *vm) {
be_return(vm); be_return(vm);
} }
// temporarily fix lv_span_get_style() /*********************************************************************************************\
* Return a hash of all LV int constants
\*********************************************************************************************/
int lv0_constants_as_hash(bvm *vm) {
be_newobject(vm, "map");
for (int i = 0; i < lv0_constants_size; i++) {
char first_char = lv0_constants[i].name[0];
if ( !(first_char >= 'a' && first_char <='z') && !(first_char >= 'A' && first_char <='Z') ) {
continue;
}
be_pushstring(vm, lv0_constants[i].name);
be_pushint(vm, lv0_constants[i].value);
be_data_insert(vm, -3);
be_pop(vm, 2);
}
be_pop(vm, 1);
be_return(vm);
}
/*********************************************************************************************\
* temporarily fix lv_span_get_style()
\*********************************************************************************************/
lv_style_t * lv_span_get_style(lv_span_t * span) { lv_style_t * lv_span_get_style(lv_span_t * span) {
return &span->style; return &span->style;
} }

View File

@ -0,0 +1,696 @@
# LVGL integer constants
# LVGL version 9
lv.ALIGN_BOTTOM_LEFT = 4
lv.ALIGN_BOTTOM_MID = 5
lv.ALIGN_BOTTOM_RIGHT = 6
lv.ALIGN_CENTER = 9
lv.ALIGN_DEFAULT = 0
lv.ALIGN_LEFT_MID = 7
lv.ALIGN_OUT_BOTTOM_LEFT = 13
lv.ALIGN_OUT_BOTTOM_MID = 14
lv.ALIGN_OUT_BOTTOM_RIGHT = 15
lv.ALIGN_OUT_LEFT_BOTTOM = 18
lv.ALIGN_OUT_LEFT_MID = 17
lv.ALIGN_OUT_LEFT_TOP = 16
lv.ALIGN_OUT_RIGHT_BOTTOM = 21
lv.ALIGN_OUT_RIGHT_MID = 20
lv.ALIGN_OUT_RIGHT_TOP = 19
lv.ALIGN_OUT_TOP_LEFT = 10
lv.ALIGN_OUT_TOP_MID = 11
lv.ALIGN_OUT_TOP_RIGHT = 12
lv.ALIGN_RIGHT_MID = 8
lv.ALIGN_TOP_LEFT = 1
lv.ALIGN_TOP_MID = 2
lv.ALIGN_TOP_RIGHT = 3
lv.ANIM_IMAGE_PART_MAIN = 0
lv.ANIM_OFF = 0
lv.ANIM_ON = 1
lv.ANIM_PLAYTIME_INFINITE = -1
lv.ANIM_REPEAT_INFINITE = 65535
lv.ARC_MODE_NORMAL = 0
lv.ARC_MODE_REVERSE = 2
lv.ARC_MODE_SYMMETRICAL = 1
lv.BAR_MODE_NORMAL = 0
lv.BAR_MODE_RANGE = 2
lv.BAR_MODE_SYMMETRICAL = 1
lv.BASE_DIR_AUTO = 2
lv.BASE_DIR_LTR = 0
lv.BASE_DIR_NEUTRAL = 32
lv.BASE_DIR_RTL = 1
lv.BASE_DIR_WEAK = 33
lv.BLEND_MODE_ADDITIVE = 1
lv.BLEND_MODE_MULTIPLY = 3
lv.BLEND_MODE_NORMAL = 0
lv.BLEND_MODE_SUBTRACTIVE = 2
lv.BORDER_SIDE_BOTTOM = 1
lv.BORDER_SIDE_FULL = 15
lv.BORDER_SIDE_INTERNAL = 16
lv.BORDER_SIDE_LEFT = 4
lv.BORDER_SIDE_NONE = 0
lv.BORDER_SIDE_RIGHT = 8
lv.BORDER_SIDE_TOP = 2
lv.BTNMATRIX_BTN_NONE = 65535
lv.BTNMATRIX_CTRL_CHECKABLE = 128
lv.BTNMATRIX_CTRL_CHECKED = 256
lv.BTNMATRIX_CTRL_CLICK_TRIG = 512
lv.BTNMATRIX_CTRL_CUSTOM_1 = 16384
lv.BTNMATRIX_CTRL_CUSTOM_2 = 32768
lv.BTNMATRIX_CTRL_DISABLED = 64
lv.BTNMATRIX_CTRL_HIDDEN = 16
lv.BTNMATRIX_CTRL_NO_REPEAT = 32
lv.BTNMATRIX_CTRL_POPOVER = 1024
lv.BUTTONMATRIX_BUTTON_NONE = 65535
lv.BUTTONMATRIX_CTRL_CHECKABLE = 128
lv.BUTTONMATRIX_CTRL_CHECKED = 256
lv.BUTTONMATRIX_CTRL_CLICK_TRIG = 512
lv.BUTTONMATRIX_CTRL_CUSTOM_1 = 16384
lv.BUTTONMATRIX_CTRL_CUSTOM_2 = 32768
lv.BUTTONMATRIX_CTRL_DISABLED = 64
lv.BUTTONMATRIX_CTRL_HIDDEN = 16
lv.BUTTONMATRIX_CTRL_NO_REPEAT = 32
lv.BUTTONMATRIX_CTRL_POPOVER = 1024
lv.CHART_AXIS_PRIMARY_X = 2
lv.CHART_AXIS_PRIMARY_Y = 0
lv.CHART_AXIS_SECONDARY_X = 4
lv.CHART_AXIS_SECONDARY_Y = 1
lv.CHART_POINT_NONE = 2147483647
lv.CHART_TYPE_BAR = 2
lv.CHART_TYPE_LINE = 1
lv.CHART_TYPE_NONE = 0
lv.CHART_TYPE_SCATTER = 3
lv.CHART_UPDATE_MODE_CIRCULAR = 1
lv.CHART_UPDATE_MODE_SHIFT = 0
lv.COLOR_AQUA = 65535
lv.COLOR_BLACK = 0
lv.COLOR_BLUE = 255
lv.COLOR_CYAN = 65535
lv.COLOR_DEPTH = 16
lv.COLOR_FORMAT_A1 = 11
lv.COLOR_FORMAT_A2 = 12
lv.COLOR_FORMAT_A4 = 13
lv.COLOR_FORMAT_A8 = 14
lv.COLOR_FORMAT_ARGB8888 = 16
lv.COLOR_FORMAT_I1 = 7
lv.COLOR_FORMAT_I2 = 8
lv.COLOR_FORMAT_I4 = 9
lv.COLOR_FORMAT_I400 = 35
lv.COLOR_FORMAT_I420 = 32
lv.COLOR_FORMAT_I422 = 33
lv.COLOR_FORMAT_I444 = 34
lv.COLOR_FORMAT_I8 = 10
lv.COLOR_FORMAT_L8 = 6
lv.COLOR_FORMAT_NATIVE = 18
lv.COLOR_FORMAT_NATIVE_WITH_ALPHA = 20
lv.COLOR_FORMAT_NV12 = 37
lv.COLOR_FORMAT_NV21 = 36
lv.COLOR_FORMAT_RAW = 1
lv.COLOR_FORMAT_RAW_ALPHA = 2
lv.COLOR_FORMAT_RGB565 = 18
lv.COLOR_FORMAT_RGB565A8 = 20
lv.COLOR_FORMAT_RGB888 = 15
lv.COLOR_FORMAT_UNKNOWN = 0
lv.COLOR_FORMAT_UYVY = 39
lv.COLOR_FORMAT_XRGB8888 = 17
lv.COLOR_FORMAT_YUV_END = 39
lv.COLOR_FORMAT_YUV_START = 32
lv.COLOR_FORMAT_YUY2 = 38
lv.COLOR_GRAY = 8421504
lv.COLOR_GREEN = 32768
lv.COLOR_LIME = 65280
lv.COLOR_MAGENTA = 16711935
lv.COLOR_MAROON = 8388608
lv.COLOR_NAVY = 128
lv.COLOR_OLIVE = 8421376
lv.COLOR_ORANGE = 16744192
lv.COLOR_PURPLE = 8388736
lv.COLOR_RED = 16711680
lv.COLOR_SILVER = 12632256
lv.COLOR_TEAL = 32896
lv.COLOR_WHITE = 16777215
lv.COLOR_YELLOW = 16776960
lv.COORD_MAX = 536870911
lv.COORD_MIN = -536870911
lv.COVER_RES_COVER = 0
lv.COVER_RES_MASKED = 2
lv.COVER_RES_NOT_COVER = 1
lv.DIR_ALL = 15
lv.DIR_BOTTOM = 8
lv.DIR_HOR = 3
lv.DIR_LEFT = 1
lv.DIR_NONE = 0
lv.DIR_RIGHT = 2
lv.DIR_TOP = 4
lv.DIR_VER = 12
lv.DISPLAY_RENDER_MODE_DIRECT = 1
lv.DISPLAY_RENDER_MODE_FULL = 2
lv.DISPLAY_RENDER_MODE_PARTIAL = 0
lv.DISPLAY_ROTATION_0 = 0
lv.DISPLAY_ROTATION_180 = 2
lv.DISPLAY_ROTATION_270 = 3
lv.DISPLAY_ROTATION_90 = 1
lv.DISP_RENDER_MODE_DIRECT = 1
lv.DISP_RENDER_MODE_FULL = 2
lv.DISP_RENDER_MODE_PARTIAL = 0
lv.DISP_ROTATION_0 = 0
lv.DISP_ROTATION_180 = 2
lv.DISP_ROTATION_270 = 3
lv.DISP_ROTATION_90 = 1
lv.DRAW_LETTER_BITMAP_FORMAT_A8 = 1
lv.DRAW_LETTER_BITMAP_FORMAT_IMAGE = 2
lv.DRAW_LETTER_BITMAP_FORMAT_INVALID = 0
lv.DRAW_LETTER_VECTOR_FORMAT = 3
lv.DRAW_TASK_STATE_IN_PROGRESS = 2
lv.DRAW_TASK_STATE_QUEUED = 1
lv.DRAW_TASK_STATE_READY = 3
lv.DRAW_TASK_STATE_WAITING = 0
lv.DRAW_TASK_TYPE_ARC = 7
lv.DRAW_TASK_TYPE_BORDER = 1
lv.DRAW_TASK_TYPE_BOX_SHADOW = 2
lv.DRAW_TASK_TYPE_FILL = 0
lv.DRAW_TASK_TYPE_IMAGE = 4
lv.DRAW_TASK_TYPE_LABEL = 3
lv.DRAW_TASK_TYPE_LAYER = 5
lv.DRAW_TASK_TYPE_LINE = 6
lv.DRAW_TASK_TYPE_MASK_BITMAP = 10
lv.DRAW_TASK_TYPE_MASK_RECTANGLE = 9
lv.DRAW_TASK_TYPE_TRIANGLE = 8
lv.DRAW_TASK_TYPE_VECTOR = 11
lv.DROPDOWN_POS_LAST = 65535
lv.EVENT_ALL = 0
lv.EVENT_CANCEL = 33
lv.EVENT_CHILD_CHANGED = 36
lv.EVENT_CHILD_CREATED = 37
lv.EVENT_CHILD_DELETED = 38
lv.EVENT_CLICKED = 7
lv.EVENT_COLOR_FORMAT_CHANGED = 49
lv.EVENT_COVER_CHECK = 20
lv.EVENT_CREATE = 34
lv.EVENT_DEFOCUSED = 16
lv.EVENT_DELETE = 35
lv.EVENT_DRAW_MAIN = 23
lv.EVENT_DRAW_MAIN_BEGIN = 22
lv.EVENT_DRAW_MAIN_END = 24
lv.EVENT_DRAW_POST = 26
lv.EVENT_DRAW_POST_BEGIN = 25
lv.EVENT_DRAW_POST_END = 27
lv.EVENT_DRAW_TASK_ADDED = 28
lv.EVENT_FLUSH_FINISH = 56
lv.EVENT_FLUSH_START = 55
lv.EVENT_FOCUSED = 15
lv.EVENT_GESTURE = 13
lv.EVENT_GET_SELF_SIZE = 46
lv.EVENT_HIT_TEST = 18
lv.EVENT_INDEV_RESET = 19
lv.EVENT_INSERT = 30
lv.EVENT_INVALIDATE_AREA = 47
lv.EVENT_KEY = 14
lv.EVENT_LAYOUT_CHANGED = 45
lv.EVENT_LEAVE = 17
lv.EVENT_LONG_PRESSED = 5
lv.EVENT_LONG_PRESSED_REPEAT = 6
lv.EVENT_PREPROCESS = 32768
lv.EVENT_PRESSED = 1
lv.EVENT_PRESSING = 2
lv.EVENT_PRESS_LOST = 3
lv.EVENT_READY = 32
lv.EVENT_REFRESH = 31
lv.EVENT_REFR_EXT_DRAW_SIZE = 21
lv.EVENT_REFR_READY = 52
lv.EVENT_REFR_REQUEST = 50
lv.EVENT_REFR_START = 51
lv.EVENT_RELEASED = 8
lv.EVENT_RENDER_READY = 54
lv.EVENT_RENDER_START = 53
lv.EVENT_RESOLUTION_CHANGED = 48
lv.EVENT_SCREEN_LOADED = 41
lv.EVENT_SCREEN_LOAD_START = 40
lv.EVENT_SCREEN_UNLOADED = 42
lv.EVENT_SCREEN_UNLOAD_START = 39
lv.EVENT_SCROLL = 12
lv.EVENT_SCROLL_BEGIN = 9
lv.EVENT_SCROLL_END = 11
lv.EVENT_SCROLL_THROW_BEGIN = 10
lv.EVENT_SHORT_CLICKED = 4
lv.EVENT_SIZE_CHANGED = 43
lv.EVENT_STYLE_CHANGED = 44
lv.EVENT_VALUE_CHANGED = 29
lv.EVENT_VSYNC = 57
lv.FLEX_ALIGN_CENTER = 2
lv.FLEX_ALIGN_END = 1
lv.FLEX_ALIGN_SPACE_AROUND = 4
lv.FLEX_ALIGN_SPACE_BETWEEN = 5
lv.FLEX_ALIGN_SPACE_EVENLY = 3
lv.FLEX_ALIGN_START = 0
lv.FLEX_FLOW_COLUMN = 1
lv.FLEX_FLOW_COLUMN_REVERSE = 9
lv.FLEX_FLOW_COLUMN_WRAP = 5
lv.FLEX_FLOW_COLUMN_WRAP_REVERSE = 13
lv.FLEX_FLOW_ROW = 0
lv.FLEX_FLOW_ROW_REVERSE = 8
lv.FLEX_FLOW_ROW_WRAP = 4
lv.FLEX_FLOW_ROW_WRAP_REVERSE = 12
lv.FS_MODE_RD = 2
lv.FS_MODE_WR = 1
lv.FS_RES_BUSY = 7
lv.FS_RES_DENIED = 6
lv.FS_RES_FS_ERR = 2
lv.FS_RES_FULL = 4
lv.FS_RES_HW_ERR = 1
lv.FS_RES_INV_PARAM = 11
lv.FS_RES_LOCKED = 5
lv.FS_RES_NOT_EX = 3
lv.FS_RES_NOT_IMP = 9
lv.FS_RES_OK = 0
lv.FS_RES_OUT_OF_MEM = 10
lv.FS_RES_TOUT = 8
lv.FS_RES_UNKNOWN = 12
lv.FS_SEEK_CUR = 1
lv.FS_SEEK_END = 2
lv.FS_SEEK_SET = 0
lv.FT_FONT_STYLE_BOLD = 2
lv.FT_FONT_STYLE_ITALIC = 1
lv.FT_FONT_STYLE_NORMAL = 0
lv.GRAD_DIR_HOR = 2
lv.GRAD_DIR_NONE = 0
lv.GRAD_DIR_VER = 1
lv.GRID_ALIGN_CENTER = 1
lv.GRID_ALIGN_END = 2
lv.GRID_ALIGN_SPACE_AROUND = 5
lv.GRID_ALIGN_SPACE_BETWEEN = 6
lv.GRID_ALIGN_SPACE_EVENLY = 4
lv.GRID_ALIGN_START = 0
lv.GRID_ALIGN_STRETCH = 3
lv.GRID_CONTENT = 536870810
lv.GRID_FR = 536870811
lv.GRID_TEMPLATE_LAST = 536870911
lv.GROUP_REFOCUS_POLICY_NEXT = 0
lv.GROUP_REFOCUS_POLICY_PREV = 1
lv.IMAGEBUTTON_STATE_CHECKED_DISABLED = 5
lv.IMAGEBUTTON_STATE_CHECKED_PRESSED = 4
lv.IMAGEBUTTON_STATE_CHECKED_RELEASED = 3
lv.IMAGEBUTTON_STATE_DISABLED = 2
lv.IMAGEBUTTON_STATE_PRESSED = 1
lv.IMAGEBUTTON_STATE_RELEASED = 0
lv.IMAGE_ALIGN_BOTTOM_LEFT = 4
lv.IMAGE_ALIGN_BOTTOM_MID = 5
lv.IMAGE_ALIGN_BOTTOM_RIGHT = 6
lv.IMAGE_ALIGN_CENTER = 9
lv.IMAGE_ALIGN_DEFAULT = 0
lv.IMAGE_ALIGN_LEFT_MID = 7
lv.IMAGE_ALIGN_RIGHT_MID = 8
lv.IMAGE_ALIGN_STRETCH = 11
lv.IMAGE_ALIGN_TILE = 12
lv.IMAGE_ALIGN_TOP_LEFT = 1
lv.IMAGE_ALIGN_TOP_MID = 2
lv.IMAGE_ALIGN_TOP_RIGHT = 3
lv.IMAGE_COMPRESS_LZ4 = 2
lv.IMAGE_COMPRESS_NONE = 0
lv.IMAGE_COMPRESS_RLE = 1
lv.IMAGE_FLAGS_ALLOCATED = 16
lv.IMAGE_FLAGS_COMPRESSED = 8
lv.IMAGE_FLAGS_MODIFIABLE = 2
lv.IMAGE_FLAGS_PREMULTIPLIED = 1
lv.IMAGE_FLAGS_USER1 = 4096
lv.IMAGE_FLAGS_USER2 = 8192
lv.IMAGE_FLAGS_USER3 = 16384
lv.IMAGE_FLAGS_USER4 = 32768
lv.IMAGE_FLAGS_USER5 = 256
lv.IMAGE_FLAGS_USER6 = 512
lv.IMAGE_FLAGS_USER7 = 1024
lv.IMAGE_FLAGS_USER8 = 2048
lv.IMAGE_FLAGS_VECTORS = 4
lv.IMAGE_SRC_FILE = 1
lv.IMAGE_SRC_SYMBOL = 2
lv.IMAGE_SRC_UNKNOWN = 3
lv.IMAGE_SRC_VARIABLE = 0
lv.INDEV_STATE_PR = 1
lv.INDEV_STATE_REL = 0
lv.KEYBOARD_MODE_NUMBER = 3
lv.KEYBOARD_MODE_SPECIAL = 2
lv.KEYBOARD_MODE_TEXT_LOWER = 0
lv.KEYBOARD_MODE_TEXT_UPPER = 1
lv.KEYBOARD_MODE_USER_1 = 4
lv.KEYBOARD_MODE_USER_2 = 5
lv.KEYBOARD_MODE_USER_3 = 6
lv.KEYBOARD_MODE_USER_4 = 7
lv.KEY_BACKSPACE = 8
lv.KEY_DEL = 127
lv.KEY_DOWN = 18
lv.KEY_END = 3
lv.KEY_ENTER = 10
lv.KEY_ESC = 27
lv.KEY_HOME = 2
lv.KEY_LEFT = 20
lv.KEY_NEXT = 9
lv.KEY_PREV = 11
lv.KEY_RIGHT = 19
lv.KEY_UP = 17
lv.LABEL_DOT_NUM = 3
lv.LABEL_LONG_CLIP = 4
lv.LABEL_LONG_DOT = 1
lv.LABEL_LONG_SCROLL = 2
lv.LABEL_LONG_SCROLL_CIRCULAR = 3
lv.LABEL_LONG_WRAP = 0
lv.LABEL_POS_LAST = 65535
lv.LABEL_TEXT_SELECTION_OFF = 65535
lv.LAYER_TYPE_NONE = 0
lv.LAYER_TYPE_SIMPLE = 1
lv.LAYER_TYPE_TRANSFORM = 2
lv.LAYOUT_FLEX = 1
lv.LAYOUT_GRID = 2
lv.LAYOUT_NONE = 0
lv.LOG_LEVEL_ERROR = 3
lv.LOG_LEVEL_INFO = 1
lv.LOG_LEVEL_NONE = 5
lv.LOG_LEVEL_TRACE = 0
lv.LOG_LEVEL_USER = 4
lv.LOG_LEVEL_WARN = 2
lv.MENU_HEADER_BOTTOM_FIXED = 2
lv.MENU_HEADER_TOP_FIXED = 0
lv.MENU_HEADER_TOP_UNFIXED = 1
lv.MENU_ROOT_BACK_BUTTON_DISABLED = 0
lv.MENU_ROOT_BACK_BUTTON_ENABLED = 1
lv.OBJ_CLASS_EDITABLE_FALSE = 2
lv.OBJ_CLASS_EDITABLE_INHERIT = 0
lv.OBJ_CLASS_EDITABLE_TRUE = 1
lv.OBJ_CLASS_GROUP_DEF_FALSE = 2
lv.OBJ_CLASS_GROUP_DEF_INHERIT = 0
lv.OBJ_CLASS_GROUP_DEF_TRUE = 1
lv.OBJ_CLASS_THEME_INHERITABLE_FALSE = 0
lv.OBJ_CLASS_THEME_INHERITABLE_TRUE = 1
lv.OBJ_FLAG_ADV_HITTEST = 65536
lv.OBJ_FLAG_CHECKABLE = 8
lv.OBJ_FLAG_CLICKABLE = 2
lv.OBJ_FLAG_CLICK_FOCUSABLE = 4
lv.OBJ_FLAG_EVENT_BUBBLE = 16384
lv.OBJ_FLAG_FLEX_IN_NEW_TRACK = 2097152
lv.OBJ_FLAG_FLOATING = 262144
lv.OBJ_FLAG_GESTURE_BUBBLE = 32768
lv.OBJ_FLAG_HIDDEN = 1
lv.OBJ_FLAG_IGNORE_LAYOUT = 131072
lv.OBJ_FLAG_LAYOUT_1 = 8388608
lv.OBJ_FLAG_LAYOUT_2 = 16777216
lv.OBJ_FLAG_OVERFLOW_VISIBLE = 1048576
lv.OBJ_FLAG_PRESS_LOCK = 8192
lv.OBJ_FLAG_SCROLLABLE = 16
lv.OBJ_FLAG_SCROLL_CHAIN = 768
lv.OBJ_FLAG_SCROLL_CHAIN_HOR = 256
lv.OBJ_FLAG_SCROLL_CHAIN_VER = 512
lv.OBJ_FLAG_SCROLL_ELASTIC = 32
lv.OBJ_FLAG_SCROLL_MOMENTUM = 64
lv.OBJ_FLAG_SCROLL_ONE = 128
lv.OBJ_FLAG_SCROLL_ON_FOCUS = 1024
lv.OBJ_FLAG_SCROLL_WITH_ARROW = 2048
lv.OBJ_FLAG_SEND_DRAW_TASK_EVENTS = 524288
lv.OBJ_FLAG_SNAPPABLE = 4096
lv.OBJ_FLAG_USER_1 = 134217728
lv.OBJ_FLAG_USER_2 = 268435456
lv.OBJ_FLAG_USER_3 = 536870912
lv.OBJ_FLAG_USER_4 = 1073741824
lv.OBJ_FLAG_WIDGET_1 = 33554432
lv.OBJ_FLAG_WIDGET_2 = 67108864
lv.OBJ_TREE_WALK_END = 2
lv.OBJ_TREE_WALK_NEXT = 0
lv.OBJ_TREE_WALK_SKIP_CHILDREN = 1
lv.OPA_0 = 0
lv.OPA_10 = 25
lv.OPA_100 = 255
lv.OPA_20 = 51
lv.OPA_30 = 76
lv.OPA_40 = 102
lv.OPA_50 = 127
lv.OPA_60 = 153
lv.OPA_70 = 178
lv.OPA_80 = 204
lv.OPA_90 = 229
lv.OPA_COVER = 255
lv.OPA_TRANSP = 0
lv.PALETTE_AMBER = 13
lv.PALETTE_BLUE = 5
lv.PALETTE_BLUE_GREY = 17
lv.PALETTE_BROWN = 16
lv.PALETTE_CYAN = 7
lv.PALETTE_DEEP_ORANGE = 15
lv.PALETTE_DEEP_PURPLE = 3
lv.PALETTE_GREEN = 9
lv.PALETTE_GREY = 18
lv.PALETTE_INDIGO = 4
lv.PALETTE_LIGHT_BLUE = 6
lv.PALETTE_LIGHT_GREEN = 10
lv.PALETTE_LIME = 11
lv.PALETTE_NONE = 255
lv.PALETTE_ORANGE = 14
lv.PALETTE_PINK = 1
lv.PALETTE_PURPLE = 2
lv.PALETTE_RED = 0
lv.PALETTE_TEAL = 8
lv.PALETTE_YELLOW = 12
lv.PART_ANY = 983040
lv.PART_CURSOR = 393216
lv.PART_CUSTOM_FIRST = 524288
lv.PART_INDICATOR = 131072
lv.PART_ITEMS = 327680
lv.PART_KNOB = 196608
lv.PART_MAIN = 0
lv.PART_SCROLLBAR = 65536
lv.PART_SELECTED = 262144
lv.PART_TEXTAREA_PLACEHOLDER = 524288
lv.RADIUS_CIRCLE = 32767
lv.RB_COLOR_BLACK = 1
lv.RB_COLOR_RED = 0
lv.RESULT_INVALID = 0
lv.RESULT_OK = 1
lv.RES_INV = 0
lv.RES_OK = 1
lv.ROLLER_MODE_INFINITE = 1
lv.ROLLER_MODE_NORMAL = 0
lv.SCALE_LABEL_ENABLED_DEFAULT = 1
lv.SCALE_MAJOR_TICK_EVERY_DEFAULT = 5
lv.SCALE_MODE_HORIZONTAL_BOTTOM = 1
lv.SCALE_MODE_HORIZONTAL_TOP = 0
lv.SCALE_MODE_ROUND_INNER = 8
lv.SCALE_MODE_ROUND_OUTER = 16
lv.SCALE_MODE_VERTICAL_LEFT = 2
lv.SCALE_MODE_VERTICAL_RIGHT = 4
lv.SCALE_NONE = 256
lv.SCALE_TOTAL_TICK_COUNT_DEFAULT = 11
lv.SCROLLBAR_MODE_ACTIVE = 2
lv.SCROLLBAR_MODE_AUTO = 3
lv.SCROLLBAR_MODE_OFF = 0
lv.SCROLLBAR_MODE_ON = 1
lv.SCROLL_SNAP_CENTER = 3
lv.SCROLL_SNAP_END = 2
lv.SCROLL_SNAP_NONE = 0
lv.SCROLL_SNAP_START = 1
lv.SCR_LOAD_ANIM_FADE_IN = 9
lv.SCR_LOAD_ANIM_FADE_ON = 9
lv.SCR_LOAD_ANIM_FADE_OUT = 10
lv.SCR_LOAD_ANIM_MOVE_BOTTOM = 8
lv.SCR_LOAD_ANIM_MOVE_LEFT = 5
lv.SCR_LOAD_ANIM_MOVE_RIGHT = 6
lv.SCR_LOAD_ANIM_MOVE_TOP = 7
lv.SCR_LOAD_ANIM_NONE = 0
lv.SCR_LOAD_ANIM_OUT_BOTTOM = 14
lv.SCR_LOAD_ANIM_OUT_LEFT = 11
lv.SCR_LOAD_ANIM_OUT_RIGHT = 12
lv.SCR_LOAD_ANIM_OUT_TOP = 13
lv.SCR_LOAD_ANIM_OVER_BOTTOM = 4
lv.SCR_LOAD_ANIM_OVER_LEFT = 1
lv.SCR_LOAD_ANIM_OVER_RIGHT = 2
lv.SCR_LOAD_ANIM_OVER_TOP = 3
lv.SIZE_CONTENT = 536872913
lv.SLIDER_MODE_NORMAL = 0
lv.SLIDER_MODE_RANGE = 2
lv.SLIDER_MODE_SYMMETRICAL = 1
lv.SPAN_MODE_BREAK = 2
lv.SPAN_MODE_EXPAND = 1
lv.SPAN_MODE_FIXED = 0
lv.SPAN_OVERFLOW_CLIP = 0
lv.SPAN_OVERFLOW_ELLIPSIS = 1
lv.STATE_ANY = 65535
lv.STATE_CHECKED = 1
lv.STATE_DEFAULT = 0
lv.STATE_DISABLED = 128
lv.STATE_EDITED = 8
lv.STATE_FOCUSED = 2
lv.STATE_FOCUS_KEY = 4
lv.STATE_HOVERED = 16
lv.STATE_PRESSED = 32
lv.STATE_SCROLLED = 64
lv.STATE_USER_1 = 4096
lv.STATE_USER_2 = 8192
lv.STATE_USER_3 = 16384
lv.STATE_USER_4 = 32768
lv.STRIDE_AUTO = 0
lv.STYLE_ALIGN = 10
lv.STYLE_ANIM = 99
lv.STYLE_ANIM_DURATION = 100
lv.STYLE_ANIM_TIME = 100
lv.STYLE_ARC_COLOR = 82
lv.STYLE_ARC_IMAGE_SRC = 84
lv.STYLE_ARC_OPA = 83
lv.STYLE_ARC_ROUNDED = 81
lv.STYLE_ARC_WIDTH = 80
lv.STYLE_BASE_DIR = 39
lv.STYLE_BG_COLOR = 28
lv.STYLE_BG_GRAD = 38
lv.STYLE_BG_GRAD_COLOR = 35
lv.STYLE_BG_GRAD_DIR = 32
lv.STYLE_BG_GRAD_OPA = 37
lv.STYLE_BG_GRAD_STOP = 34
lv.STYLE_BG_IMAGE_OPA = 41
lv.STYLE_BG_IMAGE_RECOLOR = 42
lv.STYLE_BG_IMAGE_RECOLOR_OPA = 43
lv.STYLE_BG_IMAGE_SRC = 40
lv.STYLE_BG_IMAGE_TILED = 44
lv.STYLE_BG_MAIN_OPA = 36
lv.STYLE_BG_MAIN_STOP = 33
lv.STYLE_BG_OPA = 29
lv.STYLE_BLEND_MODE = 103
lv.STYLE_BORDER_COLOR = 49
lv.STYLE_BORDER_OPA = 50
lv.STYLE_BORDER_POST = 53
lv.STYLE_BORDER_SIDE = 52
lv.STYLE_BORDER_WIDTH = 48
lv.STYLE_CLIP_CORNER = 45
lv.STYLE_COLOR_FILTER_DSC = 97
lv.STYLE_COLOR_FILTER_OPA = 98
lv.STYLE_FLEX_CROSS_PLACE = 117
lv.STYLE_FLEX_FLOW = 115
lv.STYLE_FLEX_GROW = 119
lv.STYLE_FLEX_MAIN_PLACE = 116
lv.STYLE_FLEX_TRACK_PLACE = 118
lv.STYLE_GRID_CELL_COLUMN_POS = 124
lv.STYLE_GRID_CELL_COLUMN_SPAN = 125
lv.STYLE_GRID_CELL_ROW_POS = 127
lv.STYLE_GRID_CELL_ROW_SPAN = 128
lv.STYLE_GRID_CELL_X_ALIGN = 126
lv.STYLE_GRID_CELL_Y_ALIGN = 129
lv.STYLE_GRID_COLUMN_ALIGN = 120
lv.STYLE_GRID_COLUMN_DSC_ARRAY = 123
lv.STYLE_GRID_ROW_ALIGN = 121
lv.STYLE_GRID_ROW_DSC_ARRAY = 122
lv.STYLE_HEIGHT = 2
lv.STYLE_IMAGE_OPA = 68
lv.STYLE_IMAGE_RECOLOR = 69
lv.STYLE_IMAGE_RECOLOR_OPA = 70
lv.STYLE_IMG_OPA = 68
lv.STYLE_IMG_RECOLOR = 69
lv.STYLE_IMG_RECOLOR_OPA = 70
lv.STYLE_LAYOUT = 22
lv.STYLE_LENGTH = 3
lv.STYLE_LINE_COLOR = 76
lv.STYLE_LINE_DASH_GAP = 74
lv.STYLE_LINE_DASH_WIDTH = 73
lv.STYLE_LINE_OPA = 77
lv.STYLE_LINE_ROUNDED = 75
lv.STYLE_LINE_WIDTH = 72
lv.STYLE_MARGIN_BOTTOM = 25
lv.STYLE_MARGIN_LEFT = 26
lv.STYLE_MARGIN_RIGHT = 27
lv.STYLE_MARGIN_TOP = 24
lv.STYLE_MAX_HEIGHT = 7
lv.STYLE_MAX_WIDTH = 5
lv.STYLE_MIN_HEIGHT = 6
lv.STYLE_MIN_WIDTH = 4
lv.STYLE_OPA = 95
lv.STYLE_OPA_LAYERED = 96
lv.STYLE_OUTLINE_COLOR = 57
lv.STYLE_OUTLINE_OPA = 58
lv.STYLE_OUTLINE_PAD = 59
lv.STYLE_OUTLINE_WIDTH = 56
lv.STYLE_PAD_BOTTOM = 17
lv.STYLE_PAD_COLUMN = 21
lv.STYLE_PAD_LEFT = 18
lv.STYLE_PAD_RIGHT = 19
lv.STYLE_PAD_ROW = 20
lv.STYLE_PAD_TOP = 16
lv.STYLE_PROP_ANY = 255
lv.STYLE_PROP_INV = 0
lv.STYLE_RADIUS = 12
lv.STYLE_RES_FOUND = 1
lv.STYLE_RES_NOT_FOUND = 0
lv.STYLE_SHADOW_COLOR = 61
lv.STYLE_SHADOW_OFFSET_X = 64
lv.STYLE_SHADOW_OFFSET_Y = 65
lv.STYLE_SHADOW_OFS_X = 64
lv.STYLE_SHADOW_OFS_Y = 65
lv.STYLE_SHADOW_OPA = 62
lv.STYLE_SHADOW_SPREAD = 66
lv.STYLE_SHADOW_WIDTH = 60
lv.STYLE_TEXT_ALIGN = 94
lv.STYLE_TEXT_COLOR = 88
lv.STYLE_TEXT_DECOR = 93
lv.STYLE_TEXT_FONT = 90
lv.STYLE_TEXT_LETTER_SPACE = 91
lv.STYLE_TEXT_LINE_SPACE = 92
lv.STYLE_TEXT_OPA = 89
lv.STYLE_TRANSFORM_ANGLE = 110
lv.STYLE_TRANSFORM_HEIGHT = 105
lv.STYLE_TRANSFORM_PIVOT_X = 111
lv.STYLE_TRANSFORM_PIVOT_Y = 112
lv.STYLE_TRANSFORM_ROTATION = 110
lv.STYLE_TRANSFORM_SCALE_X = 108
lv.STYLE_TRANSFORM_SCALE_Y = 109
lv.STYLE_TRANSFORM_SKEW_X = 113
lv.STYLE_TRANSFORM_SKEW_Y = 114
lv.STYLE_TRANSFORM_WIDTH = 104
lv.STYLE_TRANSITION = 102
lv.STYLE_TRANSLATE_X = 106
lv.STYLE_TRANSLATE_Y = 107
lv.STYLE_WIDTH = 1
lv.STYLE_X = 8
lv.STYLE_Y = 9
lv.TABLE_CELL_CTRL_CUSTOM_1 = 16
lv.TABLE_CELL_CTRL_CUSTOM_2 = 32
lv.TABLE_CELL_CTRL_CUSTOM_3 = 64
lv.TABLE_CELL_CTRL_CUSTOM_4 = 128
lv.TABLE_CELL_CTRL_MERGE_RIGHT = 1
lv.TABLE_CELL_CTRL_TEXT_CROP = 2
lv.TABLE_CELL_NONE = 65535
lv.TEXTAREA_CURSOR_LAST = 32767
lv.TEXT_ALIGN_AUTO = 0
lv.TEXT_ALIGN_CENTER = 2
lv.TEXT_ALIGN_LEFT = 1
lv.TEXT_ALIGN_RIGHT = 3
lv.TEXT_DECOR_NONE = 0
lv.TEXT_DECOR_STRIKETHROUGH = 2
lv.TEXT_DECOR_UNDERLINE = 1
lv.TEXT_FLAG_EXPAND = 1
lv.TEXT_FLAG_FIT = 2
lv.TEXT_FLAG_NONE = 0
lv.VECTOR_BLEND_ADDITIVE = 7
lv.VECTOR_BLEND_DST_IN = 3
lv.VECTOR_BLEND_DST_OVER = 2
lv.VECTOR_BLEND_MULTIPLY = 5
lv.VECTOR_BLEND_NONE = 6
lv.VECTOR_BLEND_SCREEN = 4
lv.VECTOR_BLEND_SRC_IN = 1
lv.VECTOR_BLEND_SRC_OVER = 0
lv.VECTOR_BLEND_SUBTRACTIVE = 8
lv.VECTOR_DRAW_STYLE_GRADIENT = 2
lv.VECTOR_DRAW_STYLE_PATTERN = 1
lv.VECTOR_DRAW_STYLE_SOLID = 0
lv.VECTOR_FILL_EVENODD = 1
lv.VECTOR_FILL_NONZERO = 0
lv.VECTOR_GRADIENT_SPREAD_PAD = 0
lv.VECTOR_GRADIENT_SPREAD_REFLECT = 2
lv.VECTOR_GRADIENT_SPREAD_REPEAT = 1
lv.VECTOR_GRADIENT_STYLE_LINEAR = 0
lv.VECTOR_GRADIENT_STYLE_RADIAL = 1
lv.VECTOR_PATH_OP_CLOSE = 4
lv.VECTOR_PATH_OP_CUBIC_TO = 3
lv.VECTOR_PATH_OP_LINE_TO = 1
lv.VECTOR_PATH_OP_MOVE_TO = 0
lv.VECTOR_PATH_OP_QUAD_TO = 2
lv.VECTOR_PATH_QUALITY_HIGH = 1
lv.VECTOR_PATH_QUALITY_LOW = 2
lv.VECTOR_PATH_QUALITY_MEDIUM = 0
lv.VECTOR_STROKE_CAP_BUTT = 0
lv.VECTOR_STROKE_CAP_ROUND = 2
lv.VECTOR_STROKE_CAP_SQUARE = 1
lv.VECTOR_STROKE_JOIN_BEVEL = 1
lv.VECTOR_STROKE_JOIN_MITER = 0
lv.VECTOR_STROKE_JOIN_ROUND = 2
lv.ZOOM_NONE = 256

View File

@ -0,0 +1,54 @@
# use this simple script with every LVGL update
#
# generate `lv_constants.be` containing all lvgl integer constants
var f_out = open("lv_constants.be", "w")
f_out.write("# LVGL integer constants\n")
f_out.write(f"# LVGL version {lv.version}\n\n")
var cc = lv._constants()
# get keys of a map in sorted order
def k2l(m) var l=[] if m==nil return l end for k:m.keys() l.push(k) end return l end
def qsort(data)
# do once sort
def once(left, right)
var pivot = data[left] # use the 0th value as the pivot
while left < right # check if sort is complete
# put the value less than the pivot to the left
while left < right && data[right] >= pivot
right -= 1 # skip values greater than pivot
end
data[left] = data[right]
# put the value greater than the pivot on the right
while left < right && data[left] <= pivot
left += 1 # skip values less than pivot
end
data[right] = data[left]
end
# now we have the index of the pivot, store it
data[left] = pivot
return left # return the index of the pivot
end
# recursive quick sort algorithm
def _sort(left, right)
if left < right # executed when the array is not empty
var index = once(left, right) # get index of pivot for divide and conquer
_sort(left, index - 1) # sort the data on the left
_sort(index + 1, right) # sort the data on the right
end
end
# start quick sort
_sort(0, data.size() - 1)
return data
end
var keys = qsort(k2l(cc))
for k: keys
f_out.write(f"lv.{k} = {cc[k]}\n")
end
f_out.close()

View File

@ -0,0 +1,19 @@
Copyright (c) 2021 Stephan Hadinger, LVGL Kft
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,15 @@
{
"name": "HASPmota",
"version": "1.0",
"description": "HASPmota is a tool for easy display interfaces, inspired from OpenHASP",
"frameworks": "arduino",
"platforms": "espressif32",
"authors":
{
"name": "Stephan Hadinger",
"maintainer": true
},
"build": {
"flags": [ "-I$PROJECT_DIR/include", "-includetasmota_options.h" ]
}
}

View File

@ -0,0 +1,2 @@
#include "solidify/be_lv_haspmota_solidified.h"

View File

@ -0,0 +1 @@
/* empty include, used to make sure this package is compiled */

View File

@ -1238,6 +1238,10 @@ class lvh_qrcode : lvh_obj
static var _lv_class = lv.qrcode static var _lv_class = lv.qrcode
var qr_text # any change needs the text to be update again var qr_text # any change needs the text to be update again
def post_config()
super(self).post_config()
self._update()
end
def _update() def _update()
var t = self.qr_text var t = self.qr_text
if (t != nil) if (t != nil)
@ -2417,7 +2421,7 @@ def solidify_haspmota()
# new internal names # new internal names
"button", "image", "buttonmatrix", "button", "image", "buttonmatrix",
] ]
var f = open("be_lv_haspmota.c", "w") var f = open("be_lv_haspmota_solidified.h", "w")
f.write( f.write(
'/********************************************************************\n' '/********************************************************************\n'
' * Tasmota HASPmota solidified\n' ' * Tasmota HASPmota solidified\n'

View File

@ -16,6 +16,6 @@ for filePath in fileList:
# print("Deleting file : ", filePath) # print("Deleting file : ", filePath)
except: except:
print("Error while deleting file : ", filePath) print("Error while deleting file : ", filePath)
cmd = (env["PYTHONEXE"],join("tools","coc","coc"),"-o","generate","src","default",join("..","berry_tasmota","src"),join("..","berry_matter","src","solidify"),join("..","berry_matter","src"),join("..","berry_animate","src","solidify"),join("..","berry_animate","src"),join("..","berry_tasmota","src","solidify"),join("..","berry_mapping","src"),join("..","berry_int64","src"),join("..","..","libesp32_lvgl","lv_binding_berry","src"),join("..","..","libesp32_lvgl","lv_binding_berry","src","solidify"),join("..","..","libesp32_lvgl","lv_binding_berry","generate"),"-c",join("default","berry_conf.h")) cmd = (env["PYTHONEXE"],join("tools","coc","coc"),"-o","generate","src","default",join("..","berry_tasmota","src"),join("..","berry_matter","src","solidify"),join("..","berry_matter","src"),join("..","berry_animate","src","solidify"),join("..","berry_animate","src"),join("..","berry_tasmota","src","solidify"),join("..","berry_mapping","src"),join("..","berry_int64","src"),join("..","..","libesp32_lvgl","lv_binding_berry","src"),join("..","..","libesp32_lvgl","lv_binding_berry","src","solidify"),join("..","..","libesp32_lvgl","lv_binding_berry","generate"),join("..","..","libesp32_lvgl","lv_haspmota","src","solidify"),"-c",join("default","berry_conf.h"))
returncode = subprocess.call(cmd, shell=False) returncode = subprocess.call(cmd, shell=False)
os.chdir(CURRENT_DIR) os.chdir(CURRENT_DIR)

View File

@ -1,7 +0,0 @@
# start haspmota
# package with
# rm haspmota.tapp; zip -j -0 haspmota.tapp haspmota_core/*
import haspmota
# defer start to make sure all modules and tapp applications were loaded first
tasmota.set_timer(1000, /-> haspmota.start())

View File

@ -33,7 +33,7 @@
{"page":3,"comment":"---------- Page 3 - qrcode ----------"} {"page":3,"comment":"---------- Page 3 - qrcode ----------"}
{"id":0,"bg_color":"#0000A0","bg_grad_color":"#000000","bg_grad_dir":1,"text_color":"#FFFFFF"} {"id":0,"bg_color":"#0000A0","bg_grad_color":"#000000","bg_grad_dir":1,"text_color":"#FFFFFF"}
{"id":1,"obj":"qrcode","qr_text":"https://github.com/arendst/Tasmota","x":85,"y":40,"qr_size":150,"qr_light_color":"#FFFFFF","qr_dark_color":"#000000"} {"id":1,"obj":"qrcode","qr_text":"https://github.com/arendst/Tasmota","x":85,"y":40,"qr_size":150}
{"page":4,"comment":"---------- Page 4 - fan animation ----------"} {"page":4,"comment":"---------- Page 4 - fan animation ----------"}
{"id":0,"bg_color":"#0000A0","bg_grad_color":"#000000","bg_grad_dir":1,"text_color":"#FFFFFF"} {"id":0,"bg_color":"#0000A0","bg_grad_color":"#000000","bg_grad_dir":1,"text_color":"#FFFFFF"}

View File

@ -34,6 +34,9 @@
#include "be_mapping.h" #include "be_mapping.h"
#include "be_ctypes.h" #include "be_ctypes.h"
#include "lv_berry.h" #include "lv_berry.h"
#ifdef USE_LVGL_HASPMOTA
#include "be_lv_haspmota.h"
#endif // USE_LVGL_HASPMOTA
// Berry easy logging // Berry easy logging
extern "C" { extern "C" {