From ba518e1b0ca1608cabb63f05b0ae8f0d1c976504 Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Wed, 19 May 2021 09:53:20 +0200 Subject: [PATCH 01/11] LVGL use Berrry virtual methods and save 74KB --- .../Berry/default/be_lv_lvgl_module.c | 1330 ++----- .../Berry/default/be_lvgl_widgets_lib.c | 2051 +--------- lib/libesp32/Berry/generate/be_const_strtab.h | 2270 +++-------- .../Berry/generate/be_const_strtab_def.h | 3360 ++++------------- .../Berry/generate/be_fixed_be_class_lv_arc.h | 30 +- .../Berry/generate/be_fixed_be_class_lv_bar.h | 19 +- .../Berry/generate/be_fixed_be_class_lv_btn.h | 24 +- .../generate/be_fixed_be_class_lv_btnmatrix.h | 27 +- .../generate/be_fixed_be_class_lv_calendar.h | 13 +- .../generate/be_fixed_be_class_lv_canvas.h | 21 +- .../generate/be_fixed_be_class_lv_chart.h | 41 +- .../generate/be_fixed_be_class_lv_checkbox.h | 17 +- .../generate/be_fixed_be_class_lv_cont.h | 17 +- .../generate/be_fixed_be_class_lv_cpicker.h | 21 +- .../generate/be_fixed_be_class_lv_dropdown.h | 29 +- .../generate/be_fixed_be_class_lv_gauge.h | 28 +- .../generate/be_fixed_be_class_lv_group.h | 26 +- .../Berry/generate/be_fixed_be_class_lv_img.h | 24 +- .../generate/be_fixed_be_class_lv_imgbtn.h | 14 +- .../generate/be_fixed_be_class_lv_indev.h | 12 +- .../generate/be_fixed_be_class_lv_keyboard.h | 17 +- .../generate/be_fixed_be_class_lv_label.h | 30 +- .../Berry/generate/be_fixed_be_class_lv_led.h | 13 +- .../generate/be_fixed_be_class_lv_line.h | 13 +- .../generate/be_fixed_be_class_lv_linemeter.h | 23 +- .../generate/be_fixed_be_class_lv_list.h | 31 +- .../generate/be_fixed_be_class_lv_msgbox.h | 23 +- .../Berry/generate/be_fixed_be_class_lv_obj.h | 307 +- .../generate/be_fixed_be_class_lv_objmask.h | 10 +- .../generate/be_fixed_be_class_lv_page.h | 40 +- .../generate/be_fixed_be_class_lv_roller.h | 19 +- .../generate/be_fixed_be_class_lv_slider.h | 20 +- .../generate/be_fixed_be_class_lv_spinbox.h | 21 +- .../generate/be_fixed_be_class_lv_spinner.h | 19 +- .../generate/be_fixed_be_class_lv_style.h | 105 +- .../generate/be_fixed_be_class_lv_switch.h | 16 +- .../generate/be_fixed_be_class_lv_table.h | 24 +- .../generate/be_fixed_be_class_lv_tabview.h | 19 +- .../generate/be_fixed_be_class_lv_textarea.h | 51 +- .../generate/be_fixed_be_class_lv_tileview.h | 16 +- .../Berry/generate/be_fixed_be_class_lv_win.h | 35 +- lib/libesp32/Berry/generate/be_fixed_lvgl.h | 533 +-- lib/libesp32/Berry/src/be_vm.c | 48 +- lib/libesp32/Berry/tests/virtual_methods.be | 66 + tasmota/lvgl_berry/be_lv_c_mapping.h | 2170 ++++++----- tasmota/xdrv_10_scripter.ino | 5 - tasmota/xdrv_52_3_berry_lvgl.ino | 277 +- tools/lv_berry/convert.py | 156 +- 48 files changed, 3738 insertions(+), 9743 deletions(-) create mode 100644 lib/libesp32/Berry/tests/virtual_methods.be diff --git a/lib/libesp32/Berry/default/be_lv_lvgl_module.c b/lib/libesp32/Berry/default/be_lv_lvgl_module.c index ecaf15b8e..c166c095c 100644 --- a/lib/libesp32/Berry/default/be_lv_lvgl_module.c +++ b/lib/libesp32/Berry/default/be_lv_lvgl_module.c @@ -10,6 +10,8 @@ #include "lvgl.h" +extern int lv0_member(bvm *vm); // resolve virtual members + extern int lv0_start(bvm *vm); extern int lv0_register_button_encoder(bvm *vm); // add buttons with encoder logic @@ -27,6 +29,407 @@ extern int lv0_get_ver_res(bvm *vm); extern int lv0_screenshot(bvm *vm); + +typedef struct lvbe_constant_t { + const char * name; + int32_t value; +} lvbe_constant_t; + +const lvbe_constant_t lv0_constants[] = { + + { "ALIGN_CENTER", 0 }, + { "ALIGN_IN_BOTTOM_LEFT", 4 }, + { "ALIGN_IN_BOTTOM_MID", 5 }, + { "ALIGN_IN_BOTTOM_RIGHT", 6 }, + { "ALIGN_IN_LEFT_MID", 7 }, + { "ALIGN_IN_RIGHT_MID", 8 }, + { "ALIGN_IN_TOP_LEFT", 1 }, + { "ALIGN_IN_TOP_MID", 2 }, + { "ALIGN_IN_TOP_RIGHT", 3 }, + { "ALIGN_OUT_BOTTOM_LEFT", 12 }, + { "ALIGN_OUT_BOTTOM_MID", 13 }, + { "ALIGN_OUT_BOTTOM_RIGHT", 14 }, + { "ALIGN_OUT_LEFT_BOTTOM", 17 }, + { "ALIGN_OUT_LEFT_MID", 16 }, + { "ALIGN_OUT_LEFT_TOP", 15 }, + { "ALIGN_OUT_RIGHT_BOTTOM", 20 }, + { "ALIGN_OUT_RIGHT_MID", 19 }, + { "ALIGN_OUT_RIGHT_TOP", 18 }, + { "ALIGN_OUT_TOP_LEFT", 9 }, + { "ALIGN_OUT_TOP_MID", 10 }, + { "ALIGN_OUT_TOP_RIGHT", 11 }, + { "ANIM_OFF", 0 }, + { "ANIM_ON", 1 }, + { "AQUA", 65535 }, + { "ARC_PART_BG", 0 }, + { "ARC_PART_INDIC", 1 }, + { "ARC_PART_KNOB", 2 }, + { "ARC_TYPE_NORMAL", 0 }, + { "ARC_TYPE_REVERSE", 2 }, + { "ARC_TYPE_SYMMETRIC", 1 }, + { "BAR_TYPE_CUSTOM", 2 }, + { "BAR_TYPE_NORMAL", 0 }, + { "BAR_TYPE_SYMMETRICAL", 1 }, + { "BLACK", 0 }, + { "BLEND_MODE_ADDITIVE", 1 }, + { "BLEND_MODE_NORMAL", 0 }, + { "BLEND_MODE_SUBTRACTIVE", 2 }, + { "BLUE", 255 }, + { "BORDER_SIDE_BOTTOM", 1 }, + { "BORDER_SIDE_FULL", 15 }, + { "BORDER_SIDE_INTERNAL", 16 }, + { "BORDER_SIDE_LEFT", 4 }, + { "BORDER_SIDE_NONE", 0 }, + { "BORDER_SIDE_RIGHT", 8 }, + { "BORDER_SIDE_TOP", 2 }, + { "BTNMATRIX_CTRL_CHECKABLE", 64 }, + { "BTNMATRIX_CTRL_CHECK_STATE", 128 }, + { "BTNMATRIX_CTRL_CLICK_TRIG", 256 }, + { "BTNMATRIX_CTRL_DISABLED", 32 }, + { "BTNMATRIX_CTRL_HIDDEN", 8 }, + { "BTNMATRIX_CTRL_NO_REPEAT", 16 }, + { "BTN_STATE_CHECKED_DISABLED", 5 }, + { "BTN_STATE_CHECKED_PRESSED", 4 }, + { "BTN_STATE_CHECKED_RELEASED", 3 }, + { "BTN_STATE_DISABLED", 2 }, + { "BTN_STATE_PRESSED", 1 }, + { "BTN_STATE_RELEASED", 0 }, + { "CALENDAR_PART_BG", 0 }, + { "CALENDAR_PART_DATE", 3 }, + { "CALENDAR_PART_DAY_NAMES", 2 }, + { "CALENDAR_PART_HEADER", 1 }, + { "CHART_AXIS_DRAW_LAST_TICK", 1 }, + { "CHART_AXIS_INVERSE_LABELS_ORDER", 2 }, + { "CHART_AXIS_PRIMARY_Y", 0 }, + { "CHART_AXIS_SECONDARY_Y", 1 }, + { "CHART_AXIS_SKIP_LAST_TICK", 0 }, + { "CHART_CURSOR_DOWN", 8 }, + { "CHART_CURSOR_LEFT", 4 }, + { "CHART_CURSOR_NONE", 0 }, + { "CHART_CURSOR_RIGHT", 1 }, + { "CHART_CURSOR_UP", 2 }, + { "CHART_PART_BG", 0 }, + { "CHART_PART_CURSOR", 3 }, + { "CHART_PART_SERIES", 2 }, + { "CHART_PART_SERIES_BG", 1 }, + { "CHART_TYPE_COLUMN", 2 }, + { "CHART_TYPE_LINE", 1 }, + { "CHART_TYPE_NONE", 0 }, + { "CHART_UPDATE_MODE_CIRCULAR", 1 }, + { "CHART_UPDATE_MODE_SHIFT", 0 }, + { "CHECKBOX_PART_BG", 0 }, + { "CHECKBOX_PART_BULLET", 64 }, + { "CPICKER_COLOR_MODE_HUE", 0 }, + { "CPICKER_COLOR_MODE_SATURATION", 1 }, + { "CPICKER_COLOR_MODE_VALUE", 2 }, + { "CPICKER_PART_KNOB", 1 }, + { "CPICKER_PART_MAIN", 0 }, + { "CPICKER_TYPE_DISC", 1 }, + { "CPICKER_TYPE_RECT", 0 }, + { "CYAN", 65535 }, + { "DISP_ROT_180", 2 }, + { "DISP_ROT_270", 3 }, + { "DISP_ROT_90", 1 }, + { "DISP_ROT_NONE", 0 }, + { "DISP_SIZE_EXTRA_LARGE", 3 }, + { "DISP_SIZE_LARGE", 2 }, + { "DISP_SIZE_MEDIUM", 1 }, + { "DISP_SIZE_SMALL", 0 }, + { "DRAG_DIR_BOTH", 3 }, + { "DRAG_DIR_HOR", 1 }, + { "DRAG_DIR_ONE", 4 }, + { "DRAG_DIR_VER", 2 }, + { "DROPDOWN_DIR_DOWN", 0 }, + { "DROPDOWN_DIR_LEFT", 2 }, + { "DROPDOWN_DIR_RIGHT", 3 }, + { "DROPDOWN_DIR_UP", 1 }, + { "DROPDOWN_PART_LIST", 64 }, + { "DROPDOWN_PART_MAIN", 0 }, + { "DROPDOWN_PART_SCROLLBAR", 65 }, + { "DROPDOWN_PART_SELECTED", 66 }, + { "EVENT_APPLY", 19 }, + { "EVENT_CANCEL", 20 }, + { "EVENT_CLICKED", 6 }, + { "EVENT_DEFOCUSED", 14 }, + { "EVENT_DELETE", 21 }, + { "EVENT_DRAG_BEGIN", 8 }, + { "EVENT_DRAG_END", 9 }, + { "EVENT_DRAG_THROW_BEGIN", 10 }, + { "EVENT_FOCUSED", 13 }, + { "EVENT_GESTURE", 11 }, + { "EVENT_INSERT", 17 }, + { "EVENT_KEY", 12 }, + { "EVENT_LEAVE", 15 }, + { "EVENT_LONG_PRESSED", 4 }, + { "EVENT_LONG_PRESSED_REPEAT", 5 }, + { "EVENT_PRESSED", 0 }, + { "EVENT_PRESSING", 1 }, + { "EVENT_PRESS_LOST", 2 }, + { "EVENT_REFRESH", 18 }, + { "EVENT_RELEASED", 7 }, + { "EVENT_SHORT_CLICKED", 3 }, + { "EVENT_VALUE_CHANGED", 16 }, + { "FIT_MAX", 3 }, + { "FIT_NONE", 0 }, + { "FIT_PARENT", 2 }, + { "FIT_TIGHT", 1 }, + { "FS_MODE_RD", 2 }, + { "FS_MODE_WR", 1 }, + { "FS_RES_BUSY", 7 }, + { "FS_RES_DENIED", 6 }, + { "FS_RES_FS_ERR", 2 }, + { "FS_RES_FULL", 4 }, + { "FS_RES_HW_ERR", 1 }, + { "FS_RES_INV_PARAM", 11 }, + { "FS_RES_LOCKED", 5 }, + { "FS_RES_NOT_EX", 3 }, + { "FS_RES_NOT_IMP", 9 }, + { "FS_RES_OK", 0 }, + { "FS_RES_OUT_OF_MEM", 10 }, + { "FS_RES_TOUT", 8 }, + { "FS_RES_UNKNOWN", 12 }, + { "GAUGE_PART_MAIN", 0 }, + { "GAUGE_PART_MAJOR", 1 }, + { "GAUGE_PART_NEEDLE", 2 }, + { "GESTURE_DIR_BOTTOM", 1 }, + { "GESTURE_DIR_LEFT", 2 }, + { "GESTURE_DIR_RIGHT", 3 }, + { "GESTURE_DIR_TOP", 0 }, + { "GRAD_DIR_HOR", 2 }, + { "GRAD_DIR_NONE", 0 }, + { "GRAD_DIR_VER", 1 }, + { "GRAY", 8421504 }, + { "GREEN", 32768 }, + { "INDEV_STATE_PR", 1 }, + { "INDEV_STATE_REL", 0 }, + { "KEYBOARD_MODE_NUM", 3 }, + { "KEYBOARD_MODE_SPECIAL", 2 }, + { "KEYBOARD_MODE_TEXT_LOWER", 0 }, + { "KEYBOARD_MODE_TEXT_UPPER", 1 }, + { "KEYBOARD_PART_BG", 0 }, + { "KEYBOARD_PART_BTN", 1 }, + { "KEY_BACKSPACE", 8 }, + { "KEY_DEL", 127 }, + { "KEY_DOWN", 18 }, + { "KEY_END", 3 }, + { "KEY_ENTER", 10 }, + { "KEY_ESC", 27 }, + { "KEY_HOME", 2 }, + { "KEY_LEFT", 20 }, + { "KEY_NEXT", 9 }, + { "KEY_PREV", 11 }, + { "KEY_RIGHT", 19 }, + { "KEY_UP", 17 }, + { "LABEL_ALIGN_AUTO", 3 }, + { "LABEL_ALIGN_CENTER", 1 }, + { "LABEL_ALIGN_LEFT", 0 }, + { "LABEL_ALIGN_RIGHT", 2 }, + { "LABEL_LONG_BREAK", 1 }, + { "LABEL_LONG_CROP", 5 }, + { "LABEL_LONG_DOT", 2 }, + { "LABEL_LONG_EXPAND", 0 }, + { "LABEL_LONG_SROLL", 3 }, + { "LABEL_LONG_SROLL_CIRC", 4 }, + { "LAYOUT_CENTER", 1 }, + { "LAYOUT_COLUMN_LEFT", 2 }, + { "LAYOUT_COLUMN_MID", 3 }, + { "LAYOUT_COLUMN_RIGHT", 4 }, + { "LAYOUT_GRID", 11 }, + { "LAYOUT_OFF", 0 }, + { "LAYOUT_PRETTY_BOTTOM", 10 }, + { "LAYOUT_PRETTY_MID", 9 }, + { "LAYOUT_PRETTY_TOP", 8 }, + { "LAYOUT_ROW_BOTTOM", 7 }, + { "LAYOUT_ROW_MID", 6 }, + { "LAYOUT_ROW_TOP", 5 }, + { "LED_PART_MAIN", 0 }, + { "LIME", 65280 }, + { "LINEMETER_PART_MAIN", 0 }, + { "LIST_PART_BG", 0 }, + { "LIST_PART_EDGE_FLASH", 2 }, + { "LIST_PART_SCROLLBAR", 1 }, + { "MAGENTA", 16711935 }, + { "MAROON", 8388608 }, + { "NAVY", 128 }, + { "OBJMASK_PART_MAIN", 0 }, + { "OBJ_PART_ALL", 255 }, + { "OBJ_PART_MAIN", 0 }, + { "OBJ_PART_REAL_FIRST", 64 }, + { "OBJ_PART_VIRTUAL_FIRST", 1 }, + { "OLIVE", 8421376 }, + { "OPA_0", 0 }, + { "OPA_10", 25 }, + { "OPA_100", 255 }, + { "OPA_20", 51 }, + { "OPA_30", 76 }, + { "OPA_40", 102 }, + { "OPA_50", 127 }, + { "OPA_60", 153 }, + { "OPA_70", 178 }, + { "OPA_80", 204 }, + { "OPA_90", 229 }, + { "OPA_COVER", 255 }, + { "OPA_TRANSP", 0 }, + { "PAGE_EDGE_BOTTOM", 8 }, + { "PAGE_EDGE_LEFT", 1 }, + { "PAGE_EDGE_RIGHT", 4 }, + { "PAGE_EDGE_TOP", 2 }, + { "PROTECT_CHILD_CHG", 1 }, + { "PROTECT_CLICK_FOCUS", 32 }, + { "PROTECT_EVENT_TO_DISABLED", 64 }, + { "PROTECT_FOLLOW", 8 }, + { "PROTECT_NONE", 0 }, + { "PROTECT_PARENT", 2 }, + { "PROTECT_POS", 4 }, + { "PROTECT_PRESS_LOST", 16 }, + { "PURPLE", 8388736 }, + { "RED", 16711680 }, + { "ROLLER_MODE_INFINITE", 1 }, + { "ROLLER_MODE_NORMAL", 0 }, + { "SCROLLBAR_MODE_AUTO", 3 }, + { "SCROLLBAR_MODE_DRAG", 2 }, + { "SCROLLBAR_MODE_HIDE", 4 }, + { "SCROLLBAR_MODE_OFF", 0 }, + { "SCROLLBAR_MODE_ON", 1 }, + { "SCROLLBAR_MODE_UNHIDE", 8 }, + { "SILVER", 12632256 }, + { "SLIDER_TYPE_NORMAL", 0 }, + { "SLIDER_TYPE_RANGE", 2 }, + { "SLIDER_TYPE_SYMMETRICAL", 1 }, + { "SPINNER_DIR_BACKWARD", 1 }, + { "SPINNER_DIR_FORWARD", 0 }, + { "SPINNER_TYPE_CONSTANT_ARC", 2 }, + { "SPINNER_TYPE_FILLSPIN_ARC", 1 }, + { "SPINNER_TYPE_SPINNING_ARC", 0 }, + { "STATE_CHECKED", 1 }, + { "STATE_DEFAULT", 0 }, + { "STATE_DISABLED", 32 }, + { "STATE_EDITED", 4 }, + { "STATE_FOCUSED", 2 }, + { "STATE_HOVERED", 8 }, + { "STATE_PRESSED", 16 }, + { "STYLE_BG_BLEND_MODE", 32 }, + { "STYLE_BG_COLOR", 41 }, + { "STYLE_BG_GRAD_COLOR", 42 }, + { "STYLE_BG_GRAD_DIR", 35 }, + { "STYLE_BG_GRAD_STOP", 34 }, + { "STYLE_BG_MAIN_STOP", 33 }, + { "STYLE_BG_OPA", 44 }, + { "STYLE_BORDER_BLEND_MODE", 50 }, + { "STYLE_BORDER_COLOR", 57 }, + { "STYLE_BORDER_OPA", 60 }, + { "STYLE_BORDER_POST", 51 }, + { "STYLE_BORDER_SIDE", 49 }, + { "STYLE_BORDER_WIDTH", 48 }, + { "STYLE_CLIP_CORNER", 2 }, + { "STYLE_IMAGE_BLEND_MODE", 32928 }, + { "STYLE_IMAGE_OPA", 32940 }, + { "STYLE_IMAGE_RECOLOR", 32937 }, + { "STYLE_IMAGE_RECOLOR_OPA", 32941 }, + { "STYLE_LINE_BLEND_MODE", 145 }, + { "STYLE_LINE_COLOR", 153 }, + { "STYLE_LINE_DASH_GAP", 147 }, + { "STYLE_LINE_DASH_WIDTH", 146 }, + { "STYLE_LINE_OPA", 156 }, + { "STYLE_LINE_ROUNDED", 148 }, + { "STYLE_LINE_WIDTH", 144 }, + { "STYLE_MARGIN_BOTTOM", 22 }, + { "STYLE_MARGIN_LEFT", 23 }, + { "STYLE_MARGIN_RIGHT", 24 }, + { "STYLE_MARGIN_TOP", 21 }, + { "STYLE_OPA_SCALE", 32780 }, + { "STYLE_OUTLINE_BLEND_MODE", 66 }, + { "STYLE_OUTLINE_COLOR", 73 }, + { "STYLE_OUTLINE_OPA", 76 }, + { "STYLE_OUTLINE_PAD", 65 }, + { "STYLE_OUTLINE_WIDTH", 64 }, + { "STYLE_PAD_BOTTOM", 17 }, + { "STYLE_PAD_INNER", 20 }, + { "STYLE_PAD_LEFT", 18 }, + { "STYLE_PAD_RIGHT", 19 }, + { "STYLE_PAD_TOP", 16 }, + { "STYLE_PATTERN_BLEND_MODE", 96 }, + { "STYLE_PATTERN_IMAGE", 110 }, + { "STYLE_PATTERN_OPA", 108 }, + { "STYLE_PATTERN_RECOLOR", 105 }, + { "STYLE_PATTERN_RECOLOR_OPA", 109 }, + { "STYLE_PATTERN_REPEAT", 97 }, + { "STYLE_RADIUS", 1 }, + { "STYLE_SCALE_BORDER_WIDTH", 193 }, + { "STYLE_SCALE_END_BORDER_WIDTH", 194 }, + { "STYLE_SCALE_END_COLOR", 202 }, + { "STYLE_SCALE_END_LINE_WIDTH", 195 }, + { "STYLE_SCALE_GRAD_COLOR", 201 }, + { "STYLE_SCALE_WIDTH", 192 }, + { "STYLE_SHADOW_BLEND_MODE", 84 }, + { "STYLE_SHADOW_COLOR", 89 }, + { "STYLE_SHADOW_OFS_X", 81 }, + { "STYLE_SHADOW_OFS_Y", 82 }, + { "STYLE_SHADOW_OPA", 92 }, + { "STYLE_SHADOW_SPREAD", 83 }, + { "STYLE_SHADOW_WIDTH", 80 }, + { "STYLE_SIZE", 3 }, + { "STYLE_TEXT_BLEND_MODE", 32899 }, + { "STYLE_TEXT_COLOR", 32905 }, + { "STYLE_TEXT_DECOR", 32898 }, + { "STYLE_TEXT_FONT", 32910 }, + { "STYLE_TEXT_LETTER_SPACE", 32896 }, + { "STYLE_TEXT_LINE_SPACE", 32897 }, + { "STYLE_TEXT_OPA", 32908 }, + { "STYLE_TEXT_SEL_BG_COLOR", 32907 }, + { "STYLE_TEXT_SEL_COLOR", 32906 }, + { "STYLE_TRANSFORM_ANGLE", 6 }, + { "STYLE_TRANSFORM_HEIGHT", 5 }, + { "STYLE_TRANSFORM_WIDTH", 4 }, + { "STYLE_TRANSFORM_ZOOM", 7 }, + { "STYLE_TRANSITION_DELAY", 177 }, + { "STYLE_TRANSITION_PATH", 190 }, + { "STYLE_TRANSITION_PROP_1", 178 }, + { "STYLE_TRANSITION_PROP_2", 179 }, + { "STYLE_TRANSITION_PROP_3", 180 }, + { "STYLE_TRANSITION_PROP_4", 181 }, + { "STYLE_TRANSITION_PROP_5", 182 }, + { "STYLE_TRANSITION_PROP_6", 183 }, + { "STYLE_TRANSITION_TIME", 176 }, + { "STYLE_VALUE_ALIGN", 117 }, + { "STYLE_VALUE_BLEND_MODE", 114 }, + { "STYLE_VALUE_COLOR", 121 }, + { "STYLE_VALUE_FONT", 126 }, + { "STYLE_VALUE_LETTER_SPACE", 112 }, + { "STYLE_VALUE_LINE_SPACE", 113 }, + { "STYLE_VALUE_OFS_X", 115 }, + { "STYLE_VALUE_OFS_Y", 116 }, + { "STYLE_VALUE_OPA", 124 }, + { "STYLE_VALUE_STR", 127 }, + { "TABVIEW_TAB_POS_BOTTOM", 2 }, + { "TABVIEW_TAB_POS_LEFT", 3 }, + { "TABVIEW_TAB_POS_NONE", 0 }, + { "TABVIEW_TAB_POS_RIGHT", 4 }, + { "TABVIEW_TAB_POS_TOP", 1 }, + { "TEAL", 32896 }, + { "TEMPL_STYLE_X", 0 }, + { "TEMPL_STYLE_Y", 1 }, + { "TEXTAREA_CURSOR_LAST", 32767 }, + { "TEXT_DECOR_NONE", 0 }, + { "TEXT_DECOR_STRIKETHROUGH", 2 }, + { "TEXT_DECOR_UNDERLINE", 1 }, + { "TXT_CMD_STATE_IN", 2 }, + { "TXT_CMD_STATE_PAR", 1 }, + { "TXT_CMD_STATE_WAIT", 0 }, + { "TXT_FLAG_CENTER", 4 }, + { "TXT_FLAG_EXPAND", 2 }, + { "TXT_FLAG_FIT", 16 }, + { "TXT_FLAG_NONE", 0 }, + { "TXT_FLAG_RECOLOR", 1 }, + { "TXT_FLAG_RIGHT", 8 }, + { "WHITE", 16777215 }, + { "YELLOW", 16776960 }, + +}; + +const size_t lv0_constants_size = sizeof(lv0_constants)/sizeof(lv0_constants[0]); + + #if !BE_USE_PRECOMPILED_OBJECT //#if 1 // TODO we will do pre-compiled later @@ -95,535 +498,12 @@ be_native_module_attr_table(lvgl) { be_native_module_str("SYMBOL_BULLET", "\xE2\x80\xA2"), - // connection type - be_native_module_int("SPI", 0), - be_native_module_int("I2C", 1), - // connection sub_type - be_native_module_int("HSPI", 0), - be_native_module_int("VSPI", 1), - be_native_module_int("SSPI", 2), /* `lvgl` module functions */ - be_native_module_int("ALIGN_CENTER", 0), - be_native_module_int("ALIGN_IN_TOP_LEFT", 1), - be_native_module_int("ALIGN_IN_TOP_MID", 2), - be_native_module_int("ALIGN_IN_TOP_RIGHT", 3), - be_native_module_int("ALIGN_IN_BOTTOM_LEFT", 4), - be_native_module_int("ALIGN_IN_BOTTOM_MID", 5), - be_native_module_int("ALIGN_IN_BOTTOM_RIGHT", 6), - be_native_module_int("ALIGN_IN_LEFT_MID", 7), - be_native_module_int("ALIGN_IN_RIGHT_MID", 8), - be_native_module_int("ALIGN_OUT_TOP_LEFT", 9), - be_native_module_int("ALIGN_OUT_TOP_MID", 10), - be_native_module_int("ALIGN_OUT_TOP_RIGHT", 11), - be_native_module_int("ALIGN_OUT_BOTTOM_LEFT", 12), - be_native_module_int("ALIGN_OUT_BOTTOM_MID", 13), - be_native_module_int("ALIGN_OUT_BOTTOM_RIGHT", 14), - be_native_module_int("ALIGN_OUT_LEFT_TOP", 15), - be_native_module_int("ALIGN_OUT_LEFT_MID", 16), - be_native_module_int("ALIGN_OUT_LEFT_BOTTOM", 17), - be_native_module_int("ALIGN_OUT_RIGHT_TOP", 18), - be_native_module_int("ALIGN_OUT_RIGHT_MID", 19), - be_native_module_int("ALIGN_OUT_RIGHT_BOTTOM", 20), - be_native_module_int("INDEV_STATE_REL", 0), - be_native_module_int("INDEV_STATE_PR", 1), - be_native_module_int("DRAG_DIR_HOR", 1), - be_native_module_int("DRAG_DIR_VER", 2), - be_native_module_int("DRAG_DIR_BOTH", 3), - be_native_module_int("DRAG_DIR_ONE", 4), - be_native_module_int("GESTURE_DIR_TOP", 5), - be_native_module_int("GESTURE_DIR_BOTTOM", 6), - be_native_module_int("GESTURE_DIR_LEFT", 7), - be_native_module_int("GESTURE_DIR_RIGHT", 8), - be_native_module_int("DISP_ROT_NONE", 0), - be_native_module_int("DISP_ROT_90", 1), - be_native_module_int("DISP_ROT_180", 2), - be_native_module_int("DISP_ROT_270", 3), - be_native_module_int("DISP_SIZE_SMALL", 0), - be_native_module_int("DISP_SIZE_MEDIUM", 1), - be_native_module_int("DISP_SIZE_LARGE", 2), - be_native_module_int("DISP_SIZE_EXTRA_LARGE", 3), - be_native_module_int("DRAG_DIR_HOR", 1), - be_native_module_int("DRAG_DIR_VER", 2), - be_native_module_int("DRAG_DIR_BOTH", 3), - be_native_module_int("DRAG_DIR_ONE", 4), - be_native_module_int("GESTURE_DIR_TOP", 0), - be_native_module_int("GESTURE_DIR_BOTTOM", 1), - be_native_module_int("GESTURE_DIR_LEFT", 2), - be_native_module_int("GESTURE_DIR_RIGHT", 3), - be_native_module_int("ANIM_OFF", 0), - be_native_module_int("ANIM_ON", 1), - be_native_module_int("BLEND_MODE_NORMAL", 0), - be_native_module_int("BLEND_MODE_ADDITIVE", 1), - be_native_module_int("BLEND_MODE_SUBTRACTIVE", 2), -// Obj parts - be_native_module_int("OBJ_PART_MAIN", 0), - be_native_module_int("OBJ_PART_VIRTUAL_FIRST", 1), - be_native_module_int("OBJ_PART_REAL_FIRST", 64), - be_native_module_int("OBJ_PART_ALL", 255), -// LV State - be_native_module_int("STATE_DEFAULT", 0), - be_native_module_int("STATE_CHECKED", 1), - be_native_module_int("STATE_FOCUSED", 2), - be_native_module_int("STATE_EDITED", 4), - be_native_module_int("STATE_HOVERED", 8), - be_native_module_int("STATE_PRESSED", 16), - be_native_module_int("STATE_DISABLED", 32), -// OPA opacity - be_native_module_int("OPA_TRANSP", 0), - be_native_module_int("OPA_0", 0), - be_native_module_int("OPA_10", 25), - be_native_module_int("OPA_20", 51), - be_native_module_int("OPA_30", 76), - be_native_module_int("OPA_40", 102), - be_native_module_int("OPA_50", 127), - be_native_module_int("OPA_60", 153), - be_native_module_int("OPA_70", 178), - be_native_module_int("OPA_80", 204), - be_native_module_int("OPA_90", 229), - be_native_module_int("OPA_100", 255), - be_native_module_int("OPA_COVER", 255), -// LV Colors - we store in 24 bits format and will convert at runtime - be_native_module_int("WHITE", 16777215), - be_native_module_int("SILVER", 12632256), - be_native_module_int("GRAY", 8421504), - be_native_module_int("BLACK", 0), - be_native_module_int("RED", 16711680), - be_native_module_int("MAROON", 8388608), - be_native_module_int("YELLOW", 16776960), - be_native_module_int("OLIVE", 8421376), - be_native_module_int("LIME", 65280), - be_native_module_int("GREEN", 32768), - be_native_module_int("CYAN", 65535), - be_native_module_int("AQUA", 65535), - be_native_module_int("TEAL", 32896), - be_native_module_int("BLUE", 255), - be_native_module_int("NAVY", 128), - be_native_module_int("MAGENTA", 16711935), - be_native_module_int("PURPLE", 8388736), -// LV Groups - be_native_module_int("KEY_UP", 17), - be_native_module_int("KEY_DOWN", 18), - be_native_module_int("KEY_RIGHT", 19), - be_native_module_int("KEY_LEFT", 20), - be_native_module_int("KEY_ESC", 27), - be_native_module_int("KEY_DEL", 127), - be_native_module_int("KEY_BACKSPACE", 8), - be_native_module_int("KEY_ENTER", 10), - be_native_module_int("KEY_NEXT", 9), - be_native_module_int("KEY_PREV", 11), - be_native_module_int("KEY_HOME", 2), - be_native_module_int("KEY_END", 3), -// LV Style - be_native_module_int("BORDER_SIDE_NONE", 0), - be_native_module_int("BORDER_SIDE_BOTTOM", 1), - be_native_module_int("BORDER_SIDE_TOP", 2), - be_native_module_int("BORDER_SIDE_LEFT", 4), - be_native_module_int("BORDER_SIDE_RIGHT", 8), - be_native_module_int("BORDER_SIDE_FULL", 15), - be_native_module_int("BORDER_SIDE_INTERNAL", 16), - be_native_module_int("GRAD_DIR_NONE", 0), - be_native_module_int("GRAD_DIR_VER", 1), - be_native_module_int("GRAD_DIR_HOR", 2), - be_native_module_int("TEXT_DECOR_NONE", 0), - be_native_module_int("TEXT_DECOR_UNDERLINE", 1), - be_native_module_int("TEXT_DECOR_STRIKETHROUGH", 2), -// LV Styles parts - be_native_module_int("STYLE_RADIUS", 1), - be_native_module_int("STYLE_CLIP_CORNER", 2), - be_native_module_int("STYLE_SIZE", 3), - be_native_module_int("STYLE_TRANSFORM_WIDTH", 4), - be_native_module_int("STYLE_TRANSFORM_HEIGHT", 5), - be_native_module_int("STYLE_TRANSFORM_ANGLE", 6), - be_native_module_int("STYLE_TRANSFORM_ZOOM", 7), - be_native_module_int("STYLE_OPA_SCALE", 32780), - be_native_module_int("STYLE_PAD_TOP", 16), - be_native_module_int("STYLE_PAD_BOTTOM", 17), - be_native_module_int("STYLE_PAD_LEFT", 18), - be_native_module_int("STYLE_PAD_RIGHT", 19), - be_native_module_int("STYLE_PAD_INNER", 20), - be_native_module_int("STYLE_MARGIN_TOP", 21), - be_native_module_int("STYLE_MARGIN_BOTTOM", 22), - be_native_module_int("STYLE_MARGIN_LEFT", 23), - be_native_module_int("STYLE_MARGIN_RIGHT", 24), - be_native_module_int("STYLE_BG_BLEND_MODE", 32), - be_native_module_int("STYLE_BG_MAIN_STOP", 33), - be_native_module_int("STYLE_BG_GRAD_STOP", 34), - be_native_module_int("STYLE_BG_GRAD_DIR", 35), - be_native_module_int("STYLE_BG_COLOR", 41), - be_native_module_int("STYLE_BG_GRAD_COLOR", 42), - be_native_module_int("STYLE_BG_OPA", 44), - be_native_module_int("STYLE_BORDER_WIDTH", 48), - be_native_module_int("STYLE_BORDER_SIDE", 49), - be_native_module_int("STYLE_BORDER_BLEND_MODE", 50), - be_native_module_int("STYLE_BORDER_POST", 51), - be_native_module_int("STYLE_BORDER_COLOR", 57), - be_native_module_int("STYLE_BORDER_OPA", 60), - be_native_module_int("STYLE_OUTLINE_WIDTH", 64), - be_native_module_int("STYLE_OUTLINE_PAD", 65), - be_native_module_int("STYLE_OUTLINE_BLEND_MODE", 66), - be_native_module_int("STYLE_OUTLINE_COLOR", 73), - be_native_module_int("STYLE_OUTLINE_OPA", 76), - be_native_module_int("STYLE_SHADOW_WIDTH", 80), - be_native_module_int("STYLE_SHADOW_OFS_X", 81), - be_native_module_int("STYLE_SHADOW_OFS_Y", 82), - be_native_module_int("STYLE_SHADOW_SPREAD", 83), - be_native_module_int("STYLE_SHADOW_BLEND_MODE", 84), - be_native_module_int("STYLE_SHADOW_COLOR", 89), - be_native_module_int("STYLE_SHADOW_OPA", 92), - be_native_module_int("STYLE_PATTERN_BLEND_MODE", 96), - be_native_module_int("STYLE_PATTERN_REPEAT", 97), - be_native_module_int("STYLE_PATTERN_RECOLOR", 105), - be_native_module_int("STYLE_PATTERN_OPA", 108), - be_native_module_int("STYLE_PATTERN_RECOLOR_OPA", 109), - be_native_module_int("STYLE_PATTERN_IMAGE", 110), - be_native_module_int("STYLE_VALUE_LETTER_SPACE", 112), - be_native_module_int("STYLE_VALUE_LINE_SPACE", 113), - be_native_module_int("STYLE_VALUE_BLEND_MODE", 114), - be_native_module_int("STYLE_VALUE_OFS_X", 115), - be_native_module_int("STYLE_VALUE_OFS_Y", 116), - be_native_module_int("STYLE_VALUE_ALIGN", 117), - be_native_module_int("STYLE_VALUE_COLOR", 121), - be_native_module_int("STYLE_VALUE_OPA", 124), - be_native_module_int("STYLE_VALUE_FONT", 126), - be_native_module_int("STYLE_VALUE_STR", 127), - be_native_module_int("STYLE_TEXT_LETTER_SPACE", 32896), - be_native_module_int("STYLE_TEXT_LINE_SPACE", 32897), - be_native_module_int("STYLE_TEXT_DECOR", 32898), - be_native_module_int("STYLE_TEXT_BLEND_MODE", 32899), - be_native_module_int("STYLE_TEXT_COLOR", 32905), - be_native_module_int("STYLE_TEXT_SEL_COLOR", 32906), - be_native_module_int("STYLE_TEXT_SEL_BG_COLOR", 32907), - be_native_module_int("STYLE_TEXT_OPA", 32908), - be_native_module_int("STYLE_TEXT_FONT", 32910), - be_native_module_int("STYLE_LINE_WIDTH", 144), - be_native_module_int("STYLE_LINE_BLEND_MODE", 145), - be_native_module_int("STYLE_LINE_DASH_WIDTH", 146), - be_native_module_int("STYLE_LINE_DASH_GAP", 147), - be_native_module_int("STYLE_LINE_ROUNDED", 148), - be_native_module_int("STYLE_LINE_COLOR", 153), - be_native_module_int("STYLE_LINE_OPA", 156), - be_native_module_int("STYLE_IMAGE_BLEND_MODE", 32928), - be_native_module_int("STYLE_IMAGE_RECOLOR", 32937), - be_native_module_int("STYLE_IMAGE_OPA", 32940), - be_native_module_int("STYLE_IMAGE_RECOLOR_OPA", 32941), - be_native_module_int("STYLE_TRANSITION_TIME", 176), - be_native_module_int("STYLE_TRANSITION_DELAY", 177), - be_native_module_int("STYLE_TRANSITION_PROP_1", 178), - be_native_module_int("STYLE_TRANSITION_PROP_2", 179), - be_native_module_int("STYLE_TRANSITION_PROP_3", 180), - be_native_module_int("STYLE_TRANSITION_PROP_4", 181), - be_native_module_int("STYLE_TRANSITION_PROP_5", 182), - be_native_module_int("STYLE_TRANSITION_PROP_6", 183), - be_native_module_int("STYLE_TRANSITION_PATH", 190), - be_native_module_int("STYLE_SCALE_WIDTH", 192), - be_native_module_int("STYLE_SCALE_BORDER_WIDTH", 193), - be_native_module_int("STYLE_SCALE_END_BORDER_WIDTH", 194), - be_native_module_int("STYLE_SCALE_END_LINE_WIDTH", 195), - be_native_module_int("STYLE_SCALE_GRAD_COLOR", 201), - be_native_module_int("STYLE_SCALE_END_COLOR", 202), - be_native_module_int("TXT_FLAG_NONE", 0), - be_native_module_int("TXT_FLAG_RECOLOR", 1), - be_native_module_int("TXT_FLAG_EXPAND", 2), - be_native_module_int("TXT_FLAG_CENTER", 4), - be_native_module_int("TXT_FLAG_RIGHT", 8), - be_native_module_int("TXT_FLAG_FIT", 16), - be_native_module_int("TXT_CMD_STATE_WAIT", 0), - be_native_module_int("TXT_CMD_STATE_PAR", 1), - be_native_module_int("TXT_CMD_STATE_IN", 2), - be_native_module_int("FS_RES_OK", 0), - be_native_module_int("FS_RES_HW_ERR", 1), - be_native_module_int("FS_RES_FS_ERR", 2), - be_native_module_int("FS_RES_NOT_EX", 3), - be_native_module_int("FS_RES_FULL", 4), - be_native_module_int("FS_RES_LOCKED", 5), - be_native_module_int("FS_RES_DENIED", 6), - be_native_module_int("FS_RES_BUSY", 7), - be_native_module_int("FS_RES_TOUT", 8), - be_native_module_int("FS_RES_NOT_IMP", 9), - be_native_module_int("FS_RES_OUT_OF_MEM", 10), - be_native_module_int("FS_RES_INV_PARAM", 11), - be_native_module_int("FS_RES_UNKNOWN", 12), - be_native_module_int("FS_MODE_WR", 1), - be_native_module_int("FS_MODE_RD", 2), - be_native_module_int("EVENT_PRESSED", 0), - be_native_module_int("EVENT_PRESSING", 1), - be_native_module_int("EVENT_PRESS_LOST", 2), - be_native_module_int("EVENT_SHORT_CLICKED", 3), - be_native_module_int("EVENT_LONG_PRESSED", 4), - be_native_module_int("EVENT_LONG_PRESSED_REPEAT", 5), - be_native_module_int("EVENT_CLICKED", 6), - be_native_module_int("EVENT_RELEASED", 7), - be_native_module_int("EVENT_DRAG_BEGIN", 8), - be_native_module_int("EVENT_DRAG_END", 9), - be_native_module_int("EVENT_DRAG_THROW_BEGIN", 10), - be_native_module_int("EVENT_GESTURE", 11), - be_native_module_int("EVENT_KEY", 12), - be_native_module_int("EVENT_FOCUSED", 13), - be_native_module_int("EVENT_DEFOCUSED", 14), - be_native_module_int("EVENT_LEAVE", 15), - be_native_module_int("EVENT_VALUE_CHANGED", 16), - be_native_module_int("EVENT_INSERT", 17), - be_native_module_int("EVENT_REFRESH", 18), - be_native_module_int("EVENT_APPLY", 19), - be_native_module_int("EVENT_CANCEL", 20), - be_native_module_int("EVENT_DELETE", 21), - be_native_module_int("PROTECT_NONE", 0), - be_native_module_int("PROTECT_CHILD_CHG", 1), - be_native_module_int("PROTECT_PARENT", 2), - be_native_module_int("PROTECT_POS", 4), - be_native_module_int("PROTECT_FOLLOW", 8), - be_native_module_int("PROTECT_PRESS_LOST", 16), - be_native_module_int("PROTECT_CLICK_FOCUS", 32), - be_native_module_int("PROTECT_EVENT_TO_DISABLED", 64), -// LV Widgets -// LV Arc - be_native_module_int("ARC_TYPE_NORMAL", 0), - be_native_module_int("ARC_TYPE_SYMMETRIC", 1), - be_native_module_int("ARC_TYPE_REVERSE", 2), - be_native_module_int("ARC_PART_BG", 0), - be_native_module_int("ARC_PART_INDIC", 1), - be_native_module_int("ARC_PART_KNOB", 2), -// LV Bar - be_native_module_int("BAR_TYPE_NORMAL", 0), - be_native_module_int("BAR_TYPE_SYMMETRICAL", 1), - be_native_module_int("BAR_TYPE_CUSTOM", 2), -// Lv Btn - be_native_module_int("BTN_STATE_RELEASED", 0), - be_native_module_int("BTN_STATE_PRESSED", 1), - be_native_module_int("BTN_STATE_DISABLED", 2), - be_native_module_int("BTN_STATE_CHECKED_RELEASED", 3), - be_native_module_int("BTN_STATE_CHECKED_PRESSED", 4), - be_native_module_int("BTN_STATE_CHECKED_DISABLED", 5), -// Lv BtnMatrix - be_native_module_int("BTNMATRIX_CTRL_HIDDEN", 8), - be_native_module_int("BTNMATRIX_CTRL_NO_REPEAT", 16), - be_native_module_int("BTNMATRIX_CTRL_DISABLED", 32), - be_native_module_int("BTNMATRIX_CTRL_CHECKABLE", 64), - be_native_module_int("BTNMATRIX_CTRL_CHECK_STATE", 128), - be_native_module_int("BTNMATRIX_CTRL_CLICK_TRIG", 256), -// LV Calendar - be_native_module_int("CALENDAR_PART_BG", 0), - be_native_module_int("CALENDAR_PART_HEADER", 1), - be_native_module_int("CALENDAR_PART_DAY_NAMES", 2), - be_native_module_int("CALENDAR_PART_DATE", 3), -// LV Chart - be_native_module_int("CHART_TYPE_NONE", 0), - be_native_module_int("CHART_TYPE_LINE", 1), - be_native_module_int("CHART_TYPE_COLUMN", 2), - be_native_module_int("CHART_UPDATE_MODE_SHIFT", 0), - be_native_module_int("CHART_UPDATE_MODE_CIRCULAR", 1), - be_native_module_int("CHART_AXIS_PRIMARY_Y", 0), - be_native_module_int("CHART_AXIS_SECONDARY_Y", 1), - be_native_module_int("CHART_CURSOR_NONE", 0), - be_native_module_int("CHART_CURSOR_RIGHT", 1), - be_native_module_int("CHART_CURSOR_UP", 2), - be_native_module_int("CHART_CURSOR_LEFT", 4), - be_native_module_int("CHART_CURSOR_DOWN", 8), - be_native_module_int("CHART_AXIS_SKIP_LAST_TICK", 0), - be_native_module_int("CHART_AXIS_DRAW_LAST_TICK", 1), - be_native_module_int("CHART_AXIS_INVERSE_LABELS_ORDER", 2), - be_native_module_int("CHART_PART_BG", 0), - be_native_module_int("CHART_PART_SERIES_BG", 1), - be_native_module_int("CHART_PART_SERIES", 2), - be_native_module_int("CHART_PART_CURSOR", 3), -// LV Checkbox - be_native_module_int("CHECKBOX_PART_BG", 0), - be_native_module_int("CHECKBOX_PART_BULLET", 64), -// LV Cont - be_native_module_int("LAYOUT_OFF", 0), - be_native_module_int("LAYOUT_CENTER", 1), - be_native_module_int("LAYOUT_COLUMN_LEFT", 2), - be_native_module_int("LAYOUT_COLUMN_MID", 3), - be_native_module_int("LAYOUT_COLUMN_RIGHT", 4), - be_native_module_int("LAYOUT_ROW_TOP", 5), - be_native_module_int("LAYOUT_ROW_MID", 6), - be_native_module_int("LAYOUT_ROW_BOTTOM", 7), - be_native_module_int("LAYOUT_PRETTY_TOP", 8), - be_native_module_int("LAYOUT_PRETTY_MID", 9), - be_native_module_int("LAYOUT_PRETTY_BOTTOM", 10), - be_native_module_int("LAYOUT_GRID", 11), - be_native_module_int("FIT_NONE", 0), - be_native_module_int("FIT_TIGHT", 1), - be_native_module_int("FIT_PARENT", 2), - be_native_module_int("FIT_MAX", 3), -// LV Cpicker - be_native_module_int("CPICKER_TYPE_RECT", 0), - be_native_module_int("CPICKER_TYPE_DISC", 1), - be_native_module_int("CPICKER_COLOR_MODE_HUE", 0), - be_native_module_int("CPICKER_COLOR_MODE_SATURATION", 1), - be_native_module_int("CPICKER_COLOR_MODE_VALUE", 2), - be_native_module_int("CPICKER_PART_MAIN", 0), - be_native_module_int("CPICKER_PART_KNOB", 1), -// LV Dropdown - be_native_module_int("DROPDOWN_DIR_DOWN", 0), - be_native_module_int("DROPDOWN_DIR_UP", 1), - be_native_module_int("DROPDOWN_DIR_LEFT", 2), - be_native_module_int("DROPDOWN_DIR_RIGHT", 3), - be_native_module_int("DROPDOWN_PART_MAIN", 0), - be_native_module_int("DROPDOWN_PART_LIST", 64), - be_native_module_int("DROPDOWN_PART_SCROLLBAR", 65), - be_native_module_int("DROPDOWN_PART_SELECTED", 66), -// LV Gauge - be_native_module_int("GAUGE_PART_MAIN", 0), - be_native_module_int("GAUGE_PART_MAJOR", 1), - be_native_module_int("GAUGE_PART_NEEDLE", 2), -// LV Img -// LV Imgbtn -// LV Keyboard - be_native_module_int("KEYBOARD_MODE_TEXT_LOWER", 0), - be_native_module_int("KEYBOARD_MODE_TEXT_UPPER", 1), - be_native_module_int("KEYBOARD_MODE_SPECIAL", 2), - be_native_module_int("KEYBOARD_MODE_NUM", 3), - be_native_module_int("KEYBOARD_PART_BG", 0), - be_native_module_int("KEYBOARD_PART_BTN", 1), -// LV Label - be_native_module_int("LABEL_LONG_EXPAND", 0), - be_native_module_int("LABEL_LONG_BREAK", 1), - be_native_module_int("LABEL_LONG_DOT", 2), - be_native_module_int("LABEL_LONG_SROLL", 3), - be_native_module_int("LABEL_LONG_SROLL_CIRC", 4), - be_native_module_int("LABEL_LONG_CROP", 5), - be_native_module_int("LABEL_ALIGN_LEFT", 0), - be_native_module_int("LABEL_ALIGN_CENTER", 1), - be_native_module_int("LABEL_ALIGN_RIGHT", 2), - be_native_module_int("LABEL_ALIGN_AUTO", 3), -// LV Led - be_native_module_int("LED_PART_MAIN", 0), -// LV Line - be_native_module_int("LINEMETER_PART_MAIN", 0), -// LV List - be_native_module_int("LIST_PART_BG", 0), - be_native_module_int("LIST_PART_SCROLLBAR", 1), - be_native_module_int("LIST_PART_EDGE_FLASH", 2), -// LV Msgbox -// enum { -// LV_MSGBOX_PART_BG = LV_CONT_PART_MAIN, -// LV_MSGBOX_PART_BTN_BG = _LV_CONT_PART_REAL_LAST, -// LV_MSGBOX_PART_BTN, -// }; -// LV Objmask - be_native_module_int("OBJMASK_PART_MAIN", 0), -// LV Templ - be_native_module_int("TEMPL_STYLE_X", 0), - be_native_module_int("TEMPL_STYLE_Y", 1), -// LV Page - be_native_module_int("SCROLLBAR_MODE_OFF", 0), - be_native_module_int("SCROLLBAR_MODE_ON", 1), - be_native_module_int("SCROLLBAR_MODE_DRAG", 2), - be_native_module_int("SCROLLBAR_MODE_AUTO", 3), - be_native_module_int("SCROLLBAR_MODE_HIDE", 4), - be_native_module_int("SCROLLBAR_MODE_UNHIDE", 8), - be_native_module_int("PAGE_EDGE_LEFT", 1), - be_native_module_int("PAGE_EDGE_TOP", 2), - be_native_module_int("PAGE_EDGE_RIGHT", 4), - be_native_module_int("PAGE_EDGE_BOTTOM", 8), -// enum { -// LV_PAGE_PART_BG = LV_CONT_PART_MAIN, -// LV_PAGE_PART_SCROLLBAR = _LV_OBJ_PART_VIRTUAL_LAST, -// LV_PAGE_PART_EDGE_FLASH, -// _LV_PAGE_PART_VIRTUAL_LAST, -// LV_PAGE_PART_SCROLLABLE = _LV_OBJ_PART_REAL_LAST, -// _LV_PAGE_PART_REAL_LAST, -// }; -// LV Roller - be_native_module_int("ROLLER_MODE_NORMAL", 0), - be_native_module_int("ROLLER_MODE_INFINITE", 1), -// enum { -// LV_ROLLER_PART_BG = LV_PAGE_PART_BG, -// LV_ROLLER_PART_SELECTED = _LV_PAGE_PART_VIRTUAL_LAST, -// _LV_ROLLER_PART_VIRTUAL_LAST, -// }; -// LV Slider - be_native_module_int("SLIDER_TYPE_NORMAL", 0), - be_native_module_int("SLIDER_TYPE_SYMMETRICAL", 1), - be_native_module_int("SLIDER_TYPE_RANGE", 2), -// enum { -// LV_SLIDER_PART_BG, /** Slider background style. */ -// LV_SLIDER_PART_INDIC, /** Slider indicator (filled area) style. */ -// LV_SLIDER_PART_KNOB, /** Slider knob style. */ -// }; -// LV Spinbox -// enum { -// LV_SPINBOX_PART_BG = LV_TEXTAREA_PART_BG, -// LV_SPINBOX_PART_CURSOR = LV_TEXTAREA_PART_CURSOR, -// _LV_SPINBOX_PART_VIRTUAL_LAST = _LV_TEXTAREA_PART_VIRTUAL_LAST, -// _LV_SPINBOX_PART_REAL_LAST = _LV_TEXTAREA_PART_REAL_LAST, -// }; -// LV Spinner - be_native_module_int("SPINNER_TYPE_SPINNING_ARC", 0), - be_native_module_int("SPINNER_TYPE_FILLSPIN_ARC", 1), - be_native_module_int("SPINNER_TYPE_CONSTANT_ARC", 2), - be_native_module_int("SPINNER_DIR_FORWARD", 0), - be_native_module_int("SPINNER_DIR_BACKWARD", 1), -// enum { -// LV_SPINNER_PART_BG = LV_ARC_PART_BG, -// LV_SPINNER_PART_INDIC = LV_ARC_PART_INDIC, -// _LV_SPINNER_PART_VIRTUAL_LAST, -// _LV_SPINNER_PART_REAL_LAST = _LV_ARC_PART_REAL_LAST, -// }; -// LV Switch -// enum { -// LV_SWITCH_PART_BG = LV_BAR_PART_BG, /**< Switch background. */ -// LV_SWITCH_PART_INDIC = LV_BAR_PART_INDIC, /**< Switch fill area. */ -// LV_SWITCH_PART_KNOB = _LV_BAR_PART_VIRTUAL_LAST, /**< Switch knob. */ -// _LV_SWITCH_PART_VIRTUAL_LAST -// }; -// LV Table -// enum { -// LV_TABLE_PART_BG, /* Because of this member, LV_PART.*CELL1 has enum value of 1, */ -// LV_TABLE_PART_CELL1, /* LV_PART.*CELL2 has an enum value of 2 and so on up to the maximum */ -// LV_TABLE_PART_CELL2, /* number of styles specified by LV_TABLE_CELL_STYLE_CNT */ -// LV_TABLE_PART_CELL3, -// LV_TABLE_PART_CELL4, /* CELL 5-16 are not needed to be defined, the values in this enum -// are there for backward compatibility */ -// }; -// LV Tabview - be_native_module_int("TABVIEW_TAB_POS_NONE", 0), - be_native_module_int("TABVIEW_TAB_POS_TOP", 1), - be_native_module_int("TABVIEW_TAB_POS_BOTTOM", 2), - be_native_module_int("TABVIEW_TAB_POS_LEFT", 3), - be_native_module_int("TABVIEW_TAB_POS_RIGHT", 4), -// enum { -// LV_TABVIEW_PART_BG = LV_OBJ_PART_MAIN, -// _LV_TABVIEW_PART_VIRTUAL_LAST = _LV_OBJ_PART_VIRTUAL_LAST, -// LV_TABVIEW_PART_BG_SCROLLABLE = _LV_OBJ_PART_REAL_LAST, -// LV_TABVIEW_PART_TAB_BG, -// LV_TABVIEW_PART_TAB_BTN, -// LV_TABVIEW_PART_INDIC, -// _LV_TABVIEW_PART_REAL_LAST, -// }; -// LV Textarea - be_native_module_int("TEXTAREA_CURSOR_LAST", 32767), -// enum { -// LV_TEXTAREA_PART_BG = LV_PAGE_PART_BG, /**< Text area background style */ -// LV_TEXTAREA_PART_SCROLLBAR = LV_PAGE_PART_SCROLLBAR, /**< Scrollbar style */ -// LV_TEXTAREA_PART_EDGE_FLASH = LV_PAGE_PART_EDGE_FLASH, /**< Edge flash style */ -// LV_TEXTAREA_PART_CURSOR = _LV_PAGE_PART_VIRTUAL_LAST, /**< Cursor style */ -// LV_TEXTAREA_PART_PLACEHOLDER, /**< Placeholder style */ -// _LV_TEXTAREA_PART_VIRTUAL_LAST, -// _LV_TEXTAREA_PART_REAL_LAST = _LV_PAGE_PART_REAL_LAST, -// }; -// LV Tileview -// enum { -// LV_TILEVIEW_PART_BG = LV_PAGE_PART_BG, -// LV_TILEVIEW_PART_SCROLLBAR = LV_PAGE_PART_SCROLLBAR, -// LV_TILEVIEW_PART_EDGE_FLASH = LV_PAGE_PART_EDGE_FLASH, -// _LV_TILEVIEW_PART_VIRTUAL_LAST = _LV_PAGE_PART_VIRTUAL_LAST, -// _LV_TILEVIEW_PART_REAL_LAST = _LV_PAGE_PART_REAL_LAST -// }; -// LV Win -// enum { -// LV_WIN_PART_BG = LV_OBJ_PART_MAIN, /**< Window object background style. */ -// _LV_WIN_PART_VIRTUAL_LAST, -// LV_WIN_PART_HEADER = _LV_OBJ_PART_REAL_LAST, /**< Window titlebar background style. */ -// LV_WIN_PART_CONTENT_SCROLLABLE, /**< Window content style. */ -// LV_WIN_PART_SCROLLBAR, /**< Window scrollbar style. */ -// _LV_WIN_PART_REAL_LAST -// }; + be_native_module_function("member", lv0_member), be_native_module_function("start", lv0_start), be_native_module_function("register_button_encoder", lv0_register_button_encoder), @@ -776,408 +656,8 @@ module lvgl (scope: global) { SYMBOL_BULLET, str(&be_local_const_str_SYMBOL_BULLET) - SPI, int(0) - I2C, int(1) - HSPI, int(0) - VSPI, int(1) - SSPI, int(2) - - ALIGN_CENTER, int(0) - ALIGN_IN_TOP_LEFT, int(1) - ALIGN_IN_TOP_MID, int(2) - ALIGN_IN_TOP_RIGHT, int(3) - ALIGN_IN_BOTTOM_LEFT, int(4) - ALIGN_IN_BOTTOM_MID, int(5) - ALIGN_IN_BOTTOM_RIGHT, int(6) - ALIGN_IN_LEFT_MID, int(7) - ALIGN_IN_RIGHT_MID, int(8) - ALIGN_OUT_TOP_LEFT, int(9) - ALIGN_OUT_TOP_MID, int(10) - ALIGN_OUT_TOP_RIGHT, int(11) - ALIGN_OUT_BOTTOM_LEFT, int(12) - ALIGN_OUT_BOTTOM_MID, int(13) - ALIGN_OUT_BOTTOM_RIGHT, int(14) - ALIGN_OUT_LEFT_TOP, int(15) - ALIGN_OUT_LEFT_MID, int(16) - ALIGN_OUT_LEFT_BOTTOM, int(17) - ALIGN_OUT_RIGHT_TOP, int(18) - ALIGN_OUT_RIGHT_MID, int(19) - ALIGN_OUT_RIGHT_BOTTOM, int(20) - INDEV_STATE_REL, int(0) - INDEV_STATE_PR, int(1) - DRAG_DIR_HOR, int(1) - DRAG_DIR_VER, int(2) - DRAG_DIR_BOTH, int(3) - DRAG_DIR_ONE, int(4) - GESTURE_DIR_TOP, int(5) - GESTURE_DIR_BOTTOM, int(6) - GESTURE_DIR_LEFT, int(7) - GESTURE_DIR_RIGHT, int(8) - DISP_ROT_NONE, int(0) - DISP_ROT_90, int(1) - DISP_ROT_180, int(2) - DISP_ROT_270, int(3) - DISP_SIZE_SMALL, int(0) - DISP_SIZE_MEDIUM, int(1) - DISP_SIZE_LARGE, int(2) - DISP_SIZE_EXTRA_LARGE, int(3) - DRAG_DIR_HOR, int(1) - DRAG_DIR_VER, int(2) - DRAG_DIR_BOTH, int(3) - DRAG_DIR_ONE, int(4) - GESTURE_DIR_TOP, int(0) - GESTURE_DIR_BOTTOM, int(1) - GESTURE_DIR_LEFT, int(2) - GESTURE_DIR_RIGHT, int(3) - ANIM_OFF, int(0) - ANIM_ON, int(1) - BLEND_MODE_NORMAL, int(0) - BLEND_MODE_ADDITIVE, int(1) - BLEND_MODE_SUBTRACTIVE, int(2) - OBJ_PART_MAIN, int(0) - OBJ_PART_VIRTUAL_FIRST, int(1) - OBJ_PART_REAL_FIRST, int(64) - OBJ_PART_ALL, int(255) - STATE_DEFAULT, int(0) - STATE_CHECKED, int(1) - STATE_FOCUSED, int(2) - STATE_EDITED, int(4) - STATE_HOVERED, int(8) - STATE_PRESSED, int(16) - STATE_DISABLED, int(32) - OPA_TRANSP, int(0) - OPA_0, int(0) - OPA_10, int(25) - OPA_20, int(51) - OPA_30, int(76) - OPA_40, int(102) - OPA_50, int(127) - OPA_60, int(153) - OPA_70, int(178) - OPA_80, int(204) - OPA_90, int(229) - OPA_100, int(255) - OPA_COVER, int(255) - WHITE, int(16777215) - SILVER, int(12632256) - GRAY, int(8421504) - BLACK, int(0) - RED, int(16711680) - MAROON, int(8388608) - YELLOW, int(16776960) - OLIVE, int(8421376) - LIME, int(65280) - GREEN, int(32768) - CYAN, int(65535) - AQUA, int(65535) - TEAL, int(32896) - BLUE, int(255) - NAVY, int(128) - MAGENTA, int(16711935) - PURPLE, int(8388736) - KEY_UP, int(17) - KEY_DOWN, int(18) - KEY_RIGHT, int(19) - KEY_LEFT, int(20) - KEY_ESC, int(27) - KEY_DEL, int(127) - KEY_BACKSPACE, int(8) - KEY_ENTER, int(10) - KEY_NEXT, int(9) - KEY_PREV, int(11) - KEY_HOME, int(2) - KEY_END, int(3) - BORDER_SIDE_NONE, int(0) - BORDER_SIDE_BOTTOM, int(1) - BORDER_SIDE_TOP, int(2) - BORDER_SIDE_LEFT, int(4) - BORDER_SIDE_RIGHT, int(8) - BORDER_SIDE_FULL, int(15) - BORDER_SIDE_INTERNAL, int(16) - GRAD_DIR_NONE, int(0) - GRAD_DIR_VER, int(1) - GRAD_DIR_HOR, int(2) - TEXT_DECOR_NONE, int(0) - TEXT_DECOR_UNDERLINE, int(1) - TEXT_DECOR_STRIKETHROUGH, int(2) - STYLE_RADIUS, int(1) - STYLE_CLIP_CORNER, int(2) - STYLE_SIZE, int(3) - STYLE_TRANSFORM_WIDTH, int(4) - STYLE_TRANSFORM_HEIGHT, int(5) - STYLE_TRANSFORM_ANGLE, int(6) - STYLE_TRANSFORM_ZOOM, int(7) - STYLE_OPA_SCALE, int(32780) - STYLE_PAD_TOP, int(16) - STYLE_PAD_BOTTOM, int(17) - STYLE_PAD_LEFT, int(18) - STYLE_PAD_RIGHT, int(19) - STYLE_PAD_INNER, int(20) - STYLE_MARGIN_TOP, int(21) - STYLE_MARGIN_BOTTOM, int(22) - STYLE_MARGIN_LEFT, int(23) - STYLE_MARGIN_RIGHT, int(24) - STYLE_BG_BLEND_MODE, int(32) - STYLE_BG_MAIN_STOP, int(33) - STYLE_BG_GRAD_STOP, int(34) - STYLE_BG_GRAD_DIR, int(35) - STYLE_BG_COLOR, int(41) - STYLE_BG_GRAD_COLOR, int(42) - STYLE_BG_OPA, int(44) - STYLE_BORDER_WIDTH, int(48) - STYLE_BORDER_SIDE, int(49) - STYLE_BORDER_BLEND_MODE, int(50) - STYLE_BORDER_POST, int(51) - STYLE_BORDER_COLOR, int(57) - STYLE_BORDER_OPA, int(60) - STYLE_OUTLINE_WIDTH, int(64) - STYLE_OUTLINE_PAD, int(65) - STYLE_OUTLINE_BLEND_MODE, int(66) - STYLE_OUTLINE_COLOR, int(73) - STYLE_OUTLINE_OPA, int(76) - STYLE_SHADOW_WIDTH, int(80) - STYLE_SHADOW_OFS_X, int(81) - STYLE_SHADOW_OFS_Y, int(82) - STYLE_SHADOW_SPREAD, int(83) - STYLE_SHADOW_BLEND_MODE, int(84) - STYLE_SHADOW_COLOR, int(89) - STYLE_SHADOW_OPA, int(92) - STYLE_PATTERN_BLEND_MODE, int(96) - STYLE_PATTERN_REPEAT, int(97) - STYLE_PATTERN_RECOLOR, int(105) - STYLE_PATTERN_OPA, int(108) - STYLE_PATTERN_RECOLOR_OPA, int(109) - STYLE_PATTERN_IMAGE, int(110) - STYLE_VALUE_LETTER_SPACE, int(112) - STYLE_VALUE_LINE_SPACE, int(113) - STYLE_VALUE_BLEND_MODE, int(114) - STYLE_VALUE_OFS_X, int(115) - STYLE_VALUE_OFS_Y, int(116) - STYLE_VALUE_ALIGN, int(117) - STYLE_VALUE_COLOR, int(121) - STYLE_VALUE_OPA, int(124) - STYLE_VALUE_FONT, int(126) - STYLE_VALUE_STR, int(127) - STYLE_TEXT_LETTER_SPACE, int(32896) - STYLE_TEXT_LINE_SPACE, int(32897) - STYLE_TEXT_DECOR, int(32898) - STYLE_TEXT_BLEND_MODE, int(32899) - STYLE_TEXT_COLOR, int(32905) - STYLE_TEXT_SEL_COLOR, int(32906) - STYLE_TEXT_SEL_BG_COLOR, int(32907) - STYLE_TEXT_OPA, int(32908) - STYLE_TEXT_FONT, int(32910) - STYLE_LINE_WIDTH, int(144) - STYLE_LINE_BLEND_MODE, int(145) - STYLE_LINE_DASH_WIDTH, int(146) - STYLE_LINE_DASH_GAP, int(147) - STYLE_LINE_ROUNDED, int(148) - STYLE_LINE_COLOR, int(153) - STYLE_LINE_OPA, int(156) - STYLE_IMAGE_BLEND_MODE, int(32928) - STYLE_IMAGE_RECOLOR, int(32937) - STYLE_IMAGE_OPA, int(32940) - STYLE_IMAGE_RECOLOR_OPA, int(32941) - STYLE_TRANSITION_TIME, int(176) - STYLE_TRANSITION_DELAY, int(177) - STYLE_TRANSITION_PROP_1, int(178) - STYLE_TRANSITION_PROP_2, int(179) - STYLE_TRANSITION_PROP_3, int(180) - STYLE_TRANSITION_PROP_4, int(181) - STYLE_TRANSITION_PROP_5, int(182) - STYLE_TRANSITION_PROP_6, int(183) - STYLE_TRANSITION_PATH, int(190) - STYLE_SCALE_WIDTH, int(192) - STYLE_SCALE_BORDER_WIDTH, int(193) - STYLE_SCALE_END_BORDER_WIDTH, int(194) - STYLE_SCALE_END_LINE_WIDTH, int(195) - STYLE_SCALE_GRAD_COLOR, int(201) - STYLE_SCALE_END_COLOR, int(202) - TXT_FLAG_NONE, int(0) - TXT_FLAG_RECOLOR, int(1) - TXT_FLAG_EXPAND, int(2) - TXT_FLAG_CENTER, int(4) - TXT_FLAG_RIGHT, int(8) - TXT_FLAG_FIT, int(16) - TXT_CMD_STATE_WAIT, int(0) - TXT_CMD_STATE_PAR, int(1) - TXT_CMD_STATE_IN, int(2) - FS_RES_OK, int(0) - FS_RES_HW_ERR, int(1) - FS_RES_FS_ERR, int(2) - FS_RES_NOT_EX, int(3) - FS_RES_FULL, int(4) - FS_RES_LOCKED, int(5) - FS_RES_DENIED, int(6) - FS_RES_BUSY, int(7) - FS_RES_TOUT, int(8) - FS_RES_NOT_IMP, int(9) - FS_RES_OUT_OF_MEM, int(10) - FS_RES_INV_PARAM, int(11) - FS_RES_UNKNOWN, int(12) - FS_MODE_WR, int(1) - FS_MODE_RD, int(2) - EVENT_PRESSED, int(0) - EVENT_PRESSING, int(1) - EVENT_PRESS_LOST, int(2) - EVENT_SHORT_CLICKED, int(3) - EVENT_LONG_PRESSED, int(4) - EVENT_LONG_PRESSED_REPEAT, int(5) - EVENT_CLICKED, int(6) - EVENT_RELEASED, int(7) - EVENT_DRAG_BEGIN, int(8) - EVENT_DRAG_END, int(9) - EVENT_DRAG_THROW_BEGIN, int(10) - EVENT_GESTURE, int(11) - EVENT_KEY, int(12) - EVENT_FOCUSED, int(13) - EVENT_DEFOCUSED, int(14) - EVENT_LEAVE, int(15) - EVENT_VALUE_CHANGED, int(16) - EVENT_INSERT, int(17) - EVENT_REFRESH, int(18) - EVENT_APPLY, int(19) - EVENT_CANCEL, int(20) - EVENT_DELETE, int(21) - PROTECT_NONE, int(0) - PROTECT_CHILD_CHG, int(1) - PROTECT_PARENT, int(2) - PROTECT_POS, int(4) - PROTECT_FOLLOW, int(8) - PROTECT_PRESS_LOST, int(16) - PROTECT_CLICK_FOCUS, int(32) - PROTECT_EVENT_TO_DISABLED, int(64) - ARC_TYPE_NORMAL, int(0) - ARC_TYPE_SYMMETRIC, int(1) - ARC_TYPE_REVERSE, int(2) - ARC_PART_BG, int(0) - ARC_PART_INDIC, int(1) - ARC_PART_KNOB, int(2) - BAR_TYPE_NORMAL, int(0) - BAR_TYPE_SYMMETRICAL, int(1) - BAR_TYPE_CUSTOM, int(2) - BTN_STATE_RELEASED, int(0) - BTN_STATE_PRESSED, int(1) - BTN_STATE_DISABLED, int(2) - BTN_STATE_CHECKED_RELEASED, int(3) - BTN_STATE_CHECKED_PRESSED, int(4) - BTN_STATE_CHECKED_DISABLED, int(5) - BTNMATRIX_CTRL_HIDDEN, int(8) - BTNMATRIX_CTRL_NO_REPEAT, int(16) - BTNMATRIX_CTRL_DISABLED, int(32) - BTNMATRIX_CTRL_CHECKABLE, int(64) - BTNMATRIX_CTRL_CHECK_STATE, int(128) - BTNMATRIX_CTRL_CLICK_TRIG, int(256) - CALENDAR_PART_BG, int(0) - CALENDAR_PART_HEADER, int(1) - CALENDAR_PART_DAY_NAMES, int(2) - CALENDAR_PART_DATE, int(3) - CHART_TYPE_NONE, int(0) - CHART_TYPE_LINE, int(1) - CHART_TYPE_COLUMN, int(2) - CHART_UPDATE_MODE_SHIFT, int(0) - CHART_UPDATE_MODE_CIRCULAR, int(1) - CHART_AXIS_PRIMARY_Y, int(0) - CHART_AXIS_SECONDARY_Y, int(1) - CHART_CURSOR_NONE, int(0) - CHART_CURSOR_RIGHT, int(1) - CHART_CURSOR_UP, int(2) - CHART_CURSOR_LEFT, int(4) - CHART_CURSOR_DOWN, int(8) - CHART_AXIS_SKIP_LAST_TICK, int(0) - CHART_AXIS_DRAW_LAST_TICK, int(1) - CHART_AXIS_INVERSE_LABELS_ORDER, int(2) - CHART_PART_BG, int(0) - CHART_PART_SERIES_BG, int(1) - CHART_PART_SERIES, int(2) - CHART_PART_CURSOR, int(3) - CHECKBOX_PART_BG, int(0) - CHECKBOX_PART_BULLET, int(64) - LAYOUT_OFF, int(0) - LAYOUT_CENTER, int(1) - LAYOUT_COLUMN_LEFT, int(2) - LAYOUT_COLUMN_MID, int(3) - LAYOUT_COLUMN_RIGHT, int(4) - LAYOUT_ROW_TOP, int(5) - LAYOUT_ROW_MID, int(6) - LAYOUT_ROW_BOTTOM, int(7) - LAYOUT_PRETTY_TOP, int(8) - LAYOUT_PRETTY_MID, int(9) - LAYOUT_PRETTY_BOTTOM, int(10) - LAYOUT_GRID, int(11) - FIT_NONE, int(0) - FIT_TIGHT, int(1) - FIT_PARENT, int(2) - FIT_MAX, int(3) - CPICKER_TYPE_RECT, int(0) - CPICKER_TYPE_DISC, int(1) - CPICKER_COLOR_MODE_HUE, int(0) - CPICKER_COLOR_MODE_SATURATION, int(1) - CPICKER_COLOR_MODE_VALUE, int(2) - CPICKER_PART_MAIN, int(0) - CPICKER_PART_KNOB, int(1) - DROPDOWN_DIR_DOWN, int(0) - DROPDOWN_DIR_UP, int(1) - DROPDOWN_DIR_LEFT, int(2) - DROPDOWN_DIR_RIGHT, int(3) - DROPDOWN_PART_MAIN, int(0) - DROPDOWN_PART_LIST, int(64) - DROPDOWN_PART_SCROLLBAR, int(65) - DROPDOWN_PART_SELECTED, int(66) - GAUGE_PART_MAIN, int(0) - GAUGE_PART_MAJOR, int(1) - GAUGE_PART_NEEDLE, int(2) - KEYBOARD_MODE_TEXT_LOWER, int(0) - KEYBOARD_MODE_TEXT_UPPER, int(1) - KEYBOARD_MODE_SPECIAL, int(2) - KEYBOARD_MODE_NUM, int(3) - KEYBOARD_PART_BG, int(0) - KEYBOARD_PART_BTN, int(1) - LABEL_LONG_EXPAND, int(0) - LABEL_LONG_BREAK, int(1) - LABEL_LONG_DOT, int(2) - LABEL_LONG_SROLL, int(3) - LABEL_LONG_SROLL_CIRC, int(4) - LABEL_LONG_CROP, int(5) - LABEL_ALIGN_LEFT, int(0) - LABEL_ALIGN_CENTER, int(1) - LABEL_ALIGN_RIGHT, int(2) - LABEL_ALIGN_AUTO, int(3) - LED_PART_MAIN, int(0) - LINEMETER_PART_MAIN, int(0) - LIST_PART_BG, int(0) - LIST_PART_SCROLLBAR, int(1) - LIST_PART_EDGE_FLASH, int(2) - OBJMASK_PART_MAIN, int(0) - TEMPL_STYLE_X, int(0) - TEMPL_STYLE_Y, int(1) - SCROLLBAR_MODE_OFF, int(0) - SCROLLBAR_MODE_ON, int(1) - SCROLLBAR_MODE_DRAG, int(2) - SCROLLBAR_MODE_AUTO, int(3) - SCROLLBAR_MODE_HIDE, int(4) - SCROLLBAR_MODE_UNHIDE, int(8) - PAGE_EDGE_LEFT, int(1) - PAGE_EDGE_TOP, int(2) - PAGE_EDGE_RIGHT, int(4) - PAGE_EDGE_BOTTOM, int(8) - ROLLER_MODE_NORMAL, int(0) - ROLLER_MODE_INFINITE, int(1) - SLIDER_TYPE_NORMAL, int(0) - SLIDER_TYPE_SYMMETRICAL, int(1) - SLIDER_TYPE_RANGE, int(2) - SPINNER_TYPE_SPINNING_ARC, int(0) - SPINNER_TYPE_FILLSPIN_ARC, int(1) - SPINNER_TYPE_CONSTANT_ARC, int(2) - SPINNER_DIR_FORWARD, int(0) - SPINNER_DIR_BACKWARD, int(1) - TABVIEW_TAB_POS_NONE, int(0) - TABVIEW_TAB_POS_TOP, int(1) - TABVIEW_TAB_POS_BOTTOM, int(2) - TABVIEW_TAB_POS_LEFT, int(3) - TABVIEW_TAB_POS_RIGHT, int(4) - TEXTAREA_CURSOR_LAST, int(32767) + member, func(lv0_member) start, func(lv0_start) register_button_encoder, func(lv0_register_button_encoder) diff --git a/lib/libesp32/Berry/default/be_lvgl_widgets_lib.c b/lib/libesp32/Berry/default/be_lvgl_widgets_lib.c index d5467e6e4..715d3f4ab 100644 --- a/lib/libesp32/Berry/default/be_lvgl_widgets_lib.c +++ b/lib/libesp32/Berry/default/be_lvgl_widgets_lib.c @@ -12,23 +12,13 @@ #include "lvgl.h" -extern int lv0_start(bvm *vm); - extern int lv0_init(bvm *vm); -extern int lv0_register_button_encoder(bvm *vm); // add buttons with encoder logic - -extern int lv0_scr_act(bvm *vm); -extern int lv0_layer_top(bvm *vm); -extern int lv0_layer_sys(bvm *vm); -extern int lv0_get_hor_res(bvm *vm); -extern int lv0_get_ver_res(bvm *vm); -extern int lv0_screenshot(bvm *vm); - extern int lco_init(bvm *vm); extern int lco_tostring(bvm *vm); extern int lvx_init_2(bvm *vm); // generic function +extern int lvx_member(bvm *vm); extern int lvx_tostring(bvm *vm); // generic function extern int lvs_init(bvm *vm); @@ -1124,26 +1114,8 @@ void be_load_lv_img_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_img_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "set_tasmota_logo", lvbe_img_set_tasmota_logo }, - { "create", lvbe_img_create }, - { "set_src", lvbe_img_set_src }, - { "set_auto_size", lvbe_img_set_auto_size }, - { "set_offset_x", lvbe_img_set_offset_x }, - { "set_offset_y", lvbe_img_set_offset_y }, - { "set_pivot", lvbe_img_set_pivot }, - { "set_angle", lvbe_img_set_angle }, - { "set_zoom", lvbe_img_set_zoom }, - { "set_antialias", lvbe_img_set_antialias }, - { "get_src", lvbe_img_get_src }, - { "get_file_name", lvbe_img_get_file_name }, - { "get_auto_size", lvbe_img_get_auto_size }, - { "get_offset_x", lvbe_img_get_offset_x }, - { "get_offset_y", lvbe_img_get_offset_y }, - { "get_angle", lvbe_img_get_angle }, - { "get_pivot", lvbe_img_get_pivot }, - { "get_zoom", lvbe_img_get_zoom }, - { "get_antialias", lvbe_img_get_antialias }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -1167,25 +1139,8 @@ class be_class_lv_img (scope: global, name: lv_img, super: be_class_lv_obj) { .p, var init, func(lvbe_img_create) tostring, func(lvx_tostring) - set_tasmota_logo, func(lvbe_img_set_tasmota_logo) - create, func(lvbe_img_create) - set_src, func(lvbe_img_set_src) - set_auto_size, func(lvbe_img_set_auto_size) - set_offset_x, func(lvbe_img_set_offset_x) - set_offset_y, func(lvbe_img_set_offset_y) - set_pivot, func(lvbe_img_set_pivot) - set_angle, func(lvbe_img_set_angle) - set_zoom, func(lvbe_img_set_zoom) - set_antialias, func(lvbe_img_set_antialias) - get_src, func(lvbe_img_get_src) - get_file_name, func(lvbe_img_get_file_name) - get_auto_size, func(lvbe_img_get_auto_size) - get_offset_x, func(lvbe_img_get_offset_x) - get_offset_y, func(lvbe_img_get_offset_y) - get_angle, func(lvbe_img_get_angle) - get_pivot, func(lvbe_img_get_pivot) - get_zoom, func(lvbe_img_get_zoom) - get_antialias, func(lvbe_img_get_antialias) + member, func(lvx_member) + } @const_object_info_end */ @@ -1195,107 +1150,8 @@ void be_load_lv_style_lib(bvm *vm) { { ".p", NULL }, { "init", lvs_init }, { "tostring", lvs_tostring }, + { "member", lvx_member }, - { "copy", lvbe_style_copy }, - { "list_init", lvbe_style_list_init }, - { "list_copy", lvbe_style_list_copy }, - { "list_get_style", lvbe_style_list_get_style }, - { "reset", lvbe_style_reset }, - { "remove_prop", lvbe_style_remove_prop }, - { "list_get_local_style", lvbe_style_list_get_local_style }, - { "set_radius", lvbe_style_set_radius }, - { "set_clip_corner", lvbe_style_set_clip_corner }, - { "set_size", lvbe_style_set_size }, - { "set_transform_width", lvbe_style_set_transform_width }, - { "set_transform_height", lvbe_style_set_transform_height }, - { "set_transform_angle", lvbe_style_set_transform_angle }, - { "set_transform_zoom", lvbe_style_set_transform_zoom }, - { "set_opa_scale", lvbe_style_set_opa_scale }, - { "set_pad_top", lvbe_style_set_pad_top }, - { "set_pad_bottom", lvbe_style_set_pad_bottom }, - { "set_pad_left", lvbe_style_set_pad_left }, - { "set_pad_right", lvbe_style_set_pad_right }, - { "set_pad_inner", lvbe_style_set_pad_inner }, - { "set_margin_top", lvbe_style_set_margin_top }, - { "set_margin_bottom", lvbe_style_set_margin_bottom }, - { "set_margin_left", lvbe_style_set_margin_left }, - { "set_margin_right", lvbe_style_set_margin_right }, - { "set_bg_blend_mode", lvbe_style_set_bg_blend_mode }, - { "set_bg_main_stop", lvbe_style_set_bg_main_stop }, - { "set_bg_grad_stop", lvbe_style_set_bg_grad_stop }, - { "set_bg_grad_dir", lvbe_style_set_bg_grad_dir }, - { "set_bg_color", lvbe_style_set_bg_color }, - { "set_bg_grad_color", lvbe_style_set_bg_grad_color }, - { "set_bg_opa", lvbe_style_set_bg_opa }, - { "set_border_width", lvbe_style_set_border_width }, - { "set_border_side", lvbe_style_set_border_side }, - { "set_border_blend_mode", lvbe_style_set_border_blend_mode }, - { "set_border_post", lvbe_style_set_border_post }, - { "set_border_color", lvbe_style_set_border_color }, - { "set_border_opa", lvbe_style_set_border_opa }, - { "set_outline_width", lvbe_style_set_outline_width }, - { "set_outline_pad", lvbe_style_set_outline_pad }, - { "set_outline_blend_mode", lvbe_style_set_outline_blend_mode }, - { "set_outline_color", lvbe_style_set_outline_color }, - { "set_outline_opa", lvbe_style_set_outline_opa }, - { "set_shadow_width", lvbe_style_set_shadow_width }, - { "set_shadow_ofs_x", lvbe_style_set_shadow_ofs_x }, - { "set_shadow_ofs_y", lvbe_style_set_shadow_ofs_y }, - { "set_shadow_spread", lvbe_style_set_shadow_spread }, - { "set_shadow_blend_mode", lvbe_style_set_shadow_blend_mode }, - { "set_shadow_color", lvbe_style_set_shadow_color }, - { "set_shadow_opa", lvbe_style_set_shadow_opa }, - { "set_pattern_repeat", lvbe_style_set_pattern_repeat }, - { "set_pattern_blend_mode", lvbe_style_set_pattern_blend_mode }, - { "set_pattern_recolor", lvbe_style_set_pattern_recolor }, - { "set_pattern_opa", lvbe_style_set_pattern_opa }, - { "set_pattern_recolor_opa", lvbe_style_set_pattern_recolor_opa }, - { "set_pattern_image", lvbe_style_set_pattern_image }, - { "set_value_letter_space", lvbe_style_set_value_letter_space }, - { "set_value_line_space", lvbe_style_set_value_line_space }, - { "set_value_blend_mode", lvbe_style_set_value_blend_mode }, - { "set_value_ofs_x", lvbe_style_set_value_ofs_x }, - { "set_value_ofs_y", lvbe_style_set_value_ofs_y }, - { "set_value_align", lvbe_style_set_value_align }, - { "set_value_color", lvbe_style_set_value_color }, - { "set_value_opa", lvbe_style_set_value_opa }, - { "set_value_font", lvbe_style_set_value_font }, - { "set_value_str", lvbe_style_set_value_str }, - { "set_text_letter_space", lvbe_style_set_text_letter_space }, - { "set_text_line_space", lvbe_style_set_text_line_space }, - { "set_text_decor", lvbe_style_set_text_decor }, - { "set_text_blend_mode", lvbe_style_set_text_blend_mode }, - { "set_text_color", lvbe_style_set_text_color }, - { "set_text_sel_color", lvbe_style_set_text_sel_color }, - { "set_text_sel_bg_color", lvbe_style_set_text_sel_bg_color }, - { "set_text_opa", lvbe_style_set_text_opa }, - { "set_text_font", lvbe_style_set_text_font }, - { "set_line_width", lvbe_style_set_line_width }, - { "set_line_blend_mode", lvbe_style_set_line_blend_mode }, - { "set_line_dash_width", lvbe_style_set_line_dash_width }, - { "set_line_dash_gap", lvbe_style_set_line_dash_gap }, - { "set_line_rounded", lvbe_style_set_line_rounded }, - { "set_line_color", lvbe_style_set_line_color }, - { "set_line_opa", lvbe_style_set_line_opa }, - { "set_image_blend_mode", lvbe_style_set_image_blend_mode }, - { "set_image_recolor", lvbe_style_set_image_recolor }, - { "set_image_opa", lvbe_style_set_image_opa }, - { "set_image_recolor_opa", lvbe_style_set_image_recolor_opa }, - { "set_transition_time", lvbe_style_set_transition_time }, - { "set_transition_delay", lvbe_style_set_transition_delay }, - { "set_transition_prop_1", lvbe_style_set_transition_prop_1 }, - { "set_transition_prop_2", lvbe_style_set_transition_prop_2 }, - { "set_transition_prop_3", lvbe_style_set_transition_prop_3 }, - { "set_transition_prop_4", lvbe_style_set_transition_prop_4 }, - { "set_transition_prop_5", lvbe_style_set_transition_prop_5 }, - { "set_transition_prop_6", lvbe_style_set_transition_prop_6 }, - { "set_transition_path", lvbe_style_set_transition_path }, - { "set_scale_width", lvbe_style_set_scale_width }, - { "set_scale_border_width", lvbe_style_set_scale_border_width }, - { "set_scale_end_border_width", lvbe_style_set_scale_end_border_width }, - { "set_scale_end_line_width", lvbe_style_set_scale_end_line_width }, - { "set_scale_grad_color", lvbe_style_set_scale_grad_color }, - { "set_scale_end_color", lvbe_style_set_scale_end_color }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -1319,106 +1175,8 @@ class be_class_lv_style (scope: global, name: lv_style, super: be_class_lv_obj) .p, var init, func(lvs_init) tostring, func(lvs_tostring) - copy, func(lvbe_style_copy) - list_init, func(lvbe_style_list_init) - list_copy, func(lvbe_style_list_copy) - list_get_style, func(lvbe_style_list_get_style) - reset, func(lvbe_style_reset) - remove_prop, func(lvbe_style_remove_prop) - list_get_local_style, func(lvbe_style_list_get_local_style) - set_radius, func(lvbe_style_set_radius) - set_clip_corner, func(lvbe_style_set_clip_corner) - set_size, func(lvbe_style_set_size) - set_transform_width, func(lvbe_style_set_transform_width) - set_transform_height, func(lvbe_style_set_transform_height) - set_transform_angle, func(lvbe_style_set_transform_angle) - set_transform_zoom, func(lvbe_style_set_transform_zoom) - set_opa_scale, func(lvbe_style_set_opa_scale) - set_pad_top, func(lvbe_style_set_pad_top) - set_pad_bottom, func(lvbe_style_set_pad_bottom) - set_pad_left, func(lvbe_style_set_pad_left) - set_pad_right, func(lvbe_style_set_pad_right) - set_pad_inner, func(lvbe_style_set_pad_inner) - set_margin_top, func(lvbe_style_set_margin_top) - set_margin_bottom, func(lvbe_style_set_margin_bottom) - set_margin_left, func(lvbe_style_set_margin_left) - set_margin_right, func(lvbe_style_set_margin_right) - set_bg_blend_mode, func(lvbe_style_set_bg_blend_mode) - set_bg_main_stop, func(lvbe_style_set_bg_main_stop) - set_bg_grad_stop, func(lvbe_style_set_bg_grad_stop) - set_bg_grad_dir, func(lvbe_style_set_bg_grad_dir) - set_bg_color, func(lvbe_style_set_bg_color) - set_bg_grad_color, func(lvbe_style_set_bg_grad_color) - set_bg_opa, func(lvbe_style_set_bg_opa) - set_border_width, func(lvbe_style_set_border_width) - set_border_side, func(lvbe_style_set_border_side) - set_border_blend_mode, func(lvbe_style_set_border_blend_mode) - set_border_post, func(lvbe_style_set_border_post) - set_border_color, func(lvbe_style_set_border_color) - set_border_opa, func(lvbe_style_set_border_opa) - set_outline_width, func(lvbe_style_set_outline_width) - set_outline_pad, func(lvbe_style_set_outline_pad) - set_outline_blend_mode, func(lvbe_style_set_outline_blend_mode) - set_outline_color, func(lvbe_style_set_outline_color) - set_outline_opa, func(lvbe_style_set_outline_opa) - set_shadow_width, func(lvbe_style_set_shadow_width) - set_shadow_ofs_x, func(lvbe_style_set_shadow_ofs_x) - set_shadow_ofs_y, func(lvbe_style_set_shadow_ofs_y) - set_shadow_spread, func(lvbe_style_set_shadow_spread) - set_shadow_blend_mode, func(lvbe_style_set_shadow_blend_mode) - set_shadow_color, func(lvbe_style_set_shadow_color) - set_shadow_opa, func(lvbe_style_set_shadow_opa) - set_pattern_repeat, func(lvbe_style_set_pattern_repeat) - set_pattern_blend_mode, func(lvbe_style_set_pattern_blend_mode) - set_pattern_recolor, func(lvbe_style_set_pattern_recolor) - set_pattern_opa, func(lvbe_style_set_pattern_opa) - set_pattern_recolor_opa, func(lvbe_style_set_pattern_recolor_opa) - set_pattern_image, func(lvbe_style_set_pattern_image) - set_value_letter_space, func(lvbe_style_set_value_letter_space) - set_value_line_space, func(lvbe_style_set_value_line_space) - set_value_blend_mode, func(lvbe_style_set_value_blend_mode) - set_value_ofs_x, func(lvbe_style_set_value_ofs_x) - set_value_ofs_y, func(lvbe_style_set_value_ofs_y) - set_value_align, func(lvbe_style_set_value_align) - set_value_color, func(lvbe_style_set_value_color) - set_value_opa, func(lvbe_style_set_value_opa) - set_value_font, func(lvbe_style_set_value_font) - set_value_str, func(lvbe_style_set_value_str) - set_text_letter_space, func(lvbe_style_set_text_letter_space) - set_text_line_space, func(lvbe_style_set_text_line_space) - set_text_decor, func(lvbe_style_set_text_decor) - set_text_blend_mode, func(lvbe_style_set_text_blend_mode) - set_text_color, func(lvbe_style_set_text_color) - set_text_sel_color, func(lvbe_style_set_text_sel_color) - set_text_sel_bg_color, func(lvbe_style_set_text_sel_bg_color) - set_text_opa, func(lvbe_style_set_text_opa) - set_text_font, func(lvbe_style_set_text_font) - set_line_width, func(lvbe_style_set_line_width) - set_line_blend_mode, func(lvbe_style_set_line_blend_mode) - set_line_dash_width, func(lvbe_style_set_line_dash_width) - set_line_dash_gap, func(lvbe_style_set_line_dash_gap) - set_line_rounded, func(lvbe_style_set_line_rounded) - set_line_color, func(lvbe_style_set_line_color) - set_line_opa, func(lvbe_style_set_line_opa) - set_image_blend_mode, func(lvbe_style_set_image_blend_mode) - set_image_recolor, func(lvbe_style_set_image_recolor) - set_image_opa, func(lvbe_style_set_image_opa) - set_image_recolor_opa, func(lvbe_style_set_image_recolor_opa) - set_transition_time, func(lvbe_style_set_transition_time) - set_transition_delay, func(lvbe_style_set_transition_delay) - set_transition_prop_1, func(lvbe_style_set_transition_prop_1) - set_transition_prop_2, func(lvbe_style_set_transition_prop_2) - set_transition_prop_3, func(lvbe_style_set_transition_prop_3) - set_transition_prop_4, func(lvbe_style_set_transition_prop_4) - set_transition_prop_5, func(lvbe_style_set_transition_prop_5) - set_transition_prop_6, func(lvbe_style_set_transition_prop_6) - set_transition_path, func(lvbe_style_set_transition_path) - set_scale_width, func(lvbe_style_set_scale_width) - set_scale_border_width, func(lvbe_style_set_scale_border_width) - set_scale_end_border_width, func(lvbe_style_set_scale_end_border_width) - set_scale_end_line_width, func(lvbe_style_set_scale_end_line_width) - set_scale_grad_color, func(lvbe_style_set_scale_grad_color) - set_scale_end_color, func(lvbe_style_set_scale_end_color) + member, func(lvx_member) + } @const_object_info_end */ @@ -1428,26 +1186,8 @@ void be_load_lv_group_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_group_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_group_create }, - { "del", lvbe_group_del }, - { "add_obj", lvbe_group_add_obj }, - { "remove_obj", lvbe_group_remove_obj }, - { "remove_all_objs", lvbe_group_remove_all_objs }, - { "focus_obj", lvbe_group_focus_obj }, - { "focus_next", lvbe_group_focus_next }, - { "focus_prev", lvbe_group_focus_prev }, - { "focus_freeze", lvbe_group_focus_freeze }, - { "send_data", lvbe_group_send_data }, - { "set_focus_cb", lvbe_group_set_focus_cb }, - { "set_refocus_policy", lvbe_group_set_refocus_policy }, - { "set_editing", lvbe_group_set_editing }, - { "set_click_focus", lvbe_group_set_click_focus }, - { "set_wrap", lvbe_group_set_wrap }, - { "get_focused", lvbe_group_get_focused }, - { "get_editing", lvbe_group_get_editing }, - { "get_click_focus", lvbe_group_get_click_focus }, - { "get_wrap", lvbe_group_get_wrap }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -1466,25 +1206,8 @@ class be_class_lv_group (scope: global, name: lv_group) { .p, var init, func(lvbe_group_create) tostring, func(lvx_tostring) - create, func(lvbe_group_create) - del, func(lvbe_group_del) - add_obj, func(lvbe_group_add_obj) - remove_obj, func(lvbe_group_remove_obj) - remove_all_objs, func(lvbe_group_remove_all_objs) - focus_obj, func(lvbe_group_focus_obj) - focus_next, func(lvbe_group_focus_next) - focus_prev, func(lvbe_group_focus_prev) - focus_freeze, func(lvbe_group_focus_freeze) - send_data, func(lvbe_group_send_data) - set_focus_cb, func(lvbe_group_set_focus_cb) - set_refocus_policy, func(lvbe_group_set_refocus_policy) - set_editing, func(lvbe_group_set_editing) - set_click_focus, func(lvbe_group_set_click_focus) - set_wrap, func(lvbe_group_set_wrap) - get_focused, func(lvbe_group_get_focused) - get_editing, func(lvbe_group_get_editing) - get_click_focus, func(lvbe_group_get_click_focus) - get_wrap, func(lvbe_group_get_wrap) + member, func(lvx_member) + } @const_object_info_end */ @@ -1494,12 +1217,8 @@ void be_load_lv_indev_lib(bvm *vm) { { ".p", NULL }, { "init", lv0_init }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "get_type", lvbe_indev_get_type }, - { "enable", lvbe_indev_enable }, - { "set_group", lvbe_indev_set_group }, - { "get_obj_act", lvbe_indev_get_obj_act }, - { "search_obj", lvbe_indev_search_obj }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -1523,11 +1242,8 @@ class be_class_lv_indev (scope: global, name: lv_indev, super: be_class_lv_obj) .p, var init, func(lv0_init) tostring, func(lvx_tostring) - get_type, func(lvbe_indev_get_type) - enable, func(lvbe_indev_enable) - set_group, func(lvbe_indev_set_group) - get_obj_act, func(lvbe_indev_get_obj_act) - search_obj, func(lvbe_indev_search_obj) + member, func(lvx_member) + } @const_object_info_end */ @@ -1537,307 +1253,8 @@ void be_load_lv_obj_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_obj_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_obj_create }, - { "del", lvbe_obj_del }, - { "del_anim_ready_cb", lvbe_obj_del_anim_ready_cb }, - { "del_async", lvbe_obj_del_async }, - { "clean", lvbe_obj_clean }, - { "invalidate_area", lvbe_obj_invalidate_area }, - { "invalidate", lvbe_obj_invalidate }, - { "area_is_visible", lvbe_obj_area_is_visible }, - { "is_visible", lvbe_obj_is_visible }, - { "set_parent", lvbe_obj_set_parent }, - { "move_foreground", lvbe_obj_move_foreground }, - { "move_background", lvbe_obj_move_background }, - { "set_pos", lvbe_obj_set_pos }, - { "set_x", lvbe_obj_set_x }, - { "set_y", lvbe_obj_set_y }, - { "set_size", lvbe_obj_set_size }, - { "set_width", lvbe_obj_set_width }, - { "set_height", lvbe_obj_set_height }, - { "set_width_fit", lvbe_obj_set_width_fit }, - { "set_height_fit", lvbe_obj_set_height_fit }, - { "set_width_margin", lvbe_obj_set_width_margin }, - { "set_height_margin", lvbe_obj_set_height_margin }, - { "align", lvbe_obj_align }, - { "align_x", lvbe_obj_align_x }, - { "align_y", lvbe_obj_align_y }, - { "align_mid", lvbe_obj_align_mid }, - { "align_mid_x", lvbe_obj_align_mid_x }, - { "align_mid_y", lvbe_obj_align_mid_y }, - { "realign", lvbe_obj_realign }, - { "set_auto_realign", lvbe_obj_set_auto_realign }, - { "set_ext_click_area", lvbe_obj_set_ext_click_area }, - { "add_style", lvbe_obj_add_style }, - { "remove_style", lvbe_obj_remove_style }, - { "clean_style_list", lvbe_obj_clean_style_list }, - { "reset_style_list", lvbe_obj_reset_style_list }, - { "refresh_style", lvbe_obj_refresh_style }, - { "report_style_mod", lvbe_obj_report_style_mod }, - { "remove_style_local_prop", lvbe_obj_remove_style_local_prop }, - { "set_hidden", lvbe_obj_set_hidden }, - { "set_adv_hittest", lvbe_obj_set_adv_hittest }, - { "set_click", lvbe_obj_set_click }, - { "set_top", lvbe_obj_set_top }, - { "set_drag", lvbe_obj_set_drag }, - { "set_drag_dir", lvbe_obj_set_drag_dir }, - { "set_drag_throw", lvbe_obj_set_drag_throw }, - { "set_drag_parent", lvbe_obj_set_drag_parent }, - { "set_focus_parent", lvbe_obj_set_focus_parent }, - { "set_gesture_parent", lvbe_obj_set_gesture_parent }, - { "set_parent_event", lvbe_obj_set_parent_event }, - { "set_base_dir", lvbe_obj_set_base_dir }, - { "add_protect", lvbe_obj_add_protect }, - { "clear_protect", lvbe_obj_clear_protect }, - { "set_state", lvbe_obj_set_state }, - { "add_state", lvbe_obj_add_state }, - { "clear_state", lvbe_obj_clear_state }, - { "finish_transitions", lvbe_obj_finish_transitions }, - { "set_event_cb", lvbe_obj_set_event_cb }, - { "set_signal_cb", lvbe_obj_set_signal_cb }, - { "set_design_cb", lvbe_obj_set_design_cb }, - { "allocate_ext_attr", lvbe_obj_allocate_ext_attr }, - { "refresh_ext_draw_pad", lvbe_obj_refresh_ext_draw_pad }, - { "get_screen", lvbe_obj_get_screen }, - { "get_parent", lvbe_obj_get_parent }, - { "get_child", lvbe_obj_get_child }, - { "get_child_back", lvbe_obj_get_child_back }, - { "count_children", lvbe_obj_count_children }, - { "count_children_recursive", lvbe_obj_count_children_recursive }, - { "get_coords", lvbe_obj_get_coords }, - { "get_inner_coords", lvbe_obj_get_inner_coords }, - { "get_x", lvbe_obj_get_x }, - { "get_y", lvbe_obj_get_y }, - { "get_width", lvbe_obj_get_width }, - { "get_height", lvbe_obj_get_height }, - { "get_width_fit", lvbe_obj_get_width_fit }, - { "get_height_fit", lvbe_obj_get_height_fit }, - { "get_height_margin", lvbe_obj_get_height_margin }, - { "get_width_margin", lvbe_obj_get_width_margin }, - { "get_width_grid", lvbe_obj_get_width_grid }, - { "get_height_grid", lvbe_obj_get_height_grid }, - { "get_auto_realign", lvbe_obj_get_auto_realign }, - { "get_ext_click_pad_left", lvbe_obj_get_ext_click_pad_left }, - { "get_ext_click_pad_right", lvbe_obj_get_ext_click_pad_right }, - { "get_ext_click_pad_top", lvbe_obj_get_ext_click_pad_top }, - { "get_ext_click_pad_bottom", lvbe_obj_get_ext_click_pad_bottom }, - { "get_ext_draw_pad", lvbe_obj_get_ext_draw_pad }, - { "get_local_style", lvbe_obj_get_local_style }, - { "get_hidden", lvbe_obj_get_hidden }, - { "get_adv_hittest", lvbe_obj_get_adv_hittest }, - { "get_click", lvbe_obj_get_click }, - { "get_top", lvbe_obj_get_top }, - { "get_drag", lvbe_obj_get_drag }, - { "get_drag_dir", lvbe_obj_get_drag_dir }, - { "get_drag_throw", lvbe_obj_get_drag_throw }, - { "get_drag_parent", lvbe_obj_get_drag_parent }, - { "get_focus_parent", lvbe_obj_get_focus_parent }, - { "get_parent_event", lvbe_obj_get_parent_event }, - { "get_gesture_parent", lvbe_obj_get_gesture_parent }, - { "get_base_dir", lvbe_obj_get_base_dir }, - { "get_protect", lvbe_obj_get_protect }, - { "is_protected", lvbe_obj_is_protected }, - { "get_state", lvbe_obj_get_state }, - { "is_point_on_coords", lvbe_obj_is_point_on_coords }, - { "hittest", lvbe_obj_hittest }, - { "get_ext_attr", lvbe_obj_get_ext_attr }, - { "get_type", lvbe_obj_get_type }, - { "get_user_data", lvbe_obj_get_user_data }, - { "set_user_data", lvbe_obj_set_user_data }, - { "get_group", lvbe_obj_get_group }, - { "is_focused", lvbe_obj_is_focused }, - { "get_focused_obj", lvbe_obj_get_focused_obj }, - { "handle_get_type_signal", lvbe_obj_handle_get_type_signal }, - { "init_draw_rect_dsc", lvbe_obj_init_draw_rect_dsc }, - { "init_draw_label_dsc", lvbe_obj_init_draw_label_dsc }, - { "init_draw_img_dsc", lvbe_obj_init_draw_img_dsc }, - { "init_draw_line_dsc", lvbe_obj_init_draw_line_dsc }, - { "get_draw_rect_ext_pad_size", lvbe_obj_get_draw_rect_ext_pad_size }, - { "fade_in", lvbe_obj_fade_in }, - { "fade_out", lvbe_obj_fade_out }, - { "get_style_radius", lvbe_obj_get_style_radius }, - { "set_style_local_radius", lvbe_obj_set_style_local_radius }, - { "get_style_clip_corner", lvbe_obj_get_style_clip_corner }, - { "set_style_local_clip_corner", lvbe_obj_set_style_local_clip_corner }, - { "get_style_size", lvbe_obj_get_style_size }, - { "set_style_local_size", lvbe_obj_set_style_local_size }, - { "get_style_transform_width", lvbe_obj_get_style_transform_width }, - { "set_style_local_transform_width", lvbe_obj_set_style_local_transform_width }, - { "get_style_transform_height", lvbe_obj_get_style_transform_height }, - { "set_style_local_transform_height", lvbe_obj_set_style_local_transform_height }, - { "get_style_transform_angle", lvbe_obj_get_style_transform_angle }, - { "set_style_local_transform_angle", lvbe_obj_set_style_local_transform_angle }, - { "get_style_transform_zoom", lvbe_obj_get_style_transform_zoom }, - { "set_style_local_transform_zoom", lvbe_obj_set_style_local_transform_zoom }, - { "get_style_opa_scale", lvbe_obj_get_style_opa_scale }, - { "set_style_local_opa_scale", lvbe_obj_set_style_local_opa_scale }, - { "get_style_pad_top", lvbe_obj_get_style_pad_top }, - { "set_style_local_pad_top", lvbe_obj_set_style_local_pad_top }, - { "get_style_pad_bottom", lvbe_obj_get_style_pad_bottom }, - { "set_style_local_pad_bottom", lvbe_obj_set_style_local_pad_bottom }, - { "get_style_pad_left", lvbe_obj_get_style_pad_left }, - { "set_style_local_pad_left", lvbe_obj_set_style_local_pad_left }, - { "get_style_pad_right", lvbe_obj_get_style_pad_right }, - { "set_style_local_pad_right", lvbe_obj_set_style_local_pad_right }, - { "get_style_pad_inner", lvbe_obj_get_style_pad_inner }, - { "set_style_local_pad_inner", lvbe_obj_set_style_local_pad_inner }, - { "get_style_margin_top", lvbe_obj_get_style_margin_top }, - { "set_style_local_margin_top", lvbe_obj_set_style_local_margin_top }, - { "get_style_margin_bottom", lvbe_obj_get_style_margin_bottom }, - { "set_style_local_margin_bottom", lvbe_obj_set_style_local_margin_bottom }, - { "get_style_margin_left", lvbe_obj_get_style_margin_left }, - { "set_style_local_margin_left", lvbe_obj_set_style_local_margin_left }, - { "get_style_margin_right", lvbe_obj_get_style_margin_right }, - { "set_style_local_margin_right", lvbe_obj_set_style_local_margin_right }, - { "get_style_bg_blend_mode", lvbe_obj_get_style_bg_blend_mode }, - { "set_style_local_bg_blend_mode", lvbe_obj_set_style_local_bg_blend_mode }, - { "get_style_bg_main_stop", lvbe_obj_get_style_bg_main_stop }, - { "set_style_local_bg_main_stop", lvbe_obj_set_style_local_bg_main_stop }, - { "get_style_bg_grad_stop", lvbe_obj_get_style_bg_grad_stop }, - { "set_style_local_bg_grad_stop", lvbe_obj_set_style_local_bg_grad_stop }, - { "get_style_bg_grad_dir", lvbe_obj_get_style_bg_grad_dir }, - { "set_style_local_bg_grad_dir", lvbe_obj_set_style_local_bg_grad_dir }, - { "get_style_bg_color", lvbe_obj_get_style_bg_color }, - { "set_style_local_bg_color", lvbe_obj_set_style_local_bg_color }, - { "get_style_bg_grad_color", lvbe_obj_get_style_bg_grad_color }, - { "set_style_local_bg_grad_color", lvbe_obj_set_style_local_bg_grad_color }, - { "get_style_bg_opa", lvbe_obj_get_style_bg_opa }, - { "set_style_local_bg_opa", lvbe_obj_set_style_local_bg_opa }, - { "get_style_border_width", lvbe_obj_get_style_border_width }, - { "set_style_local_border_width", lvbe_obj_set_style_local_border_width }, - { "get_style_border_side", lvbe_obj_get_style_border_side }, - { "set_style_local_border_side", lvbe_obj_set_style_local_border_side }, - { "get_style_border_blend_mode", lvbe_obj_get_style_border_blend_mode }, - { "set_style_local_border_blend_mode", lvbe_obj_set_style_local_border_blend_mode }, - { "get_style_border_post", lvbe_obj_get_style_border_post }, - { "set_style_local_border_post", lvbe_obj_set_style_local_border_post }, - { "get_style_border_color", lvbe_obj_get_style_border_color }, - { "set_style_local_border_color", lvbe_obj_set_style_local_border_color }, - { "get_style_border_opa", lvbe_obj_get_style_border_opa }, - { "set_style_local_border_opa", lvbe_obj_set_style_local_border_opa }, - { "get_style_outline_width", lvbe_obj_get_style_outline_width }, - { "set_style_local_outline_width", lvbe_obj_set_style_local_outline_width }, - { "get_style_outline_pad", lvbe_obj_get_style_outline_pad }, - { "set_style_local_outline_pad", lvbe_obj_set_style_local_outline_pad }, - { "get_style_outline_blend_mode", lvbe_obj_get_style_outline_blend_mode }, - { "set_style_local_outline_blend_mode", lvbe_obj_set_style_local_outline_blend_mode }, - { "get_style_outline_color", lvbe_obj_get_style_outline_color }, - { "set_style_local_outline_color", lvbe_obj_set_style_local_outline_color }, - { "get_style_outline_opa", lvbe_obj_get_style_outline_opa }, - { "set_style_local_outline_opa", lvbe_obj_set_style_local_outline_opa }, - { "get_style_shadow_width", lvbe_obj_get_style_shadow_width }, - { "set_style_local_shadow_width", lvbe_obj_set_style_local_shadow_width }, - { "get_style_shadow_ofs_x", lvbe_obj_get_style_shadow_ofs_x }, - { "set_style_local_shadow_ofs_x", lvbe_obj_set_style_local_shadow_ofs_x }, - { "get_style_shadow_ofs_y", lvbe_obj_get_style_shadow_ofs_y }, - { "set_style_local_shadow_ofs_y", lvbe_obj_set_style_local_shadow_ofs_y }, - { "get_style_shadow_spread", lvbe_obj_get_style_shadow_spread }, - { "set_style_local_shadow_spread", lvbe_obj_set_style_local_shadow_spread }, - { "get_style_shadow_blend_mode", lvbe_obj_get_style_shadow_blend_mode }, - { "set_style_local_shadow_blend_mode", lvbe_obj_set_style_local_shadow_blend_mode }, - { "get_style_shadow_color", lvbe_obj_get_style_shadow_color }, - { "set_style_local_shadow_color", lvbe_obj_set_style_local_shadow_color }, - { "get_style_shadow_opa", lvbe_obj_get_style_shadow_opa }, - { "set_style_local_shadow_opa", lvbe_obj_set_style_local_shadow_opa }, - { "get_style_pattern_repeat", lvbe_obj_get_style_pattern_repeat }, - { "set_style_local_pattern_repeat", lvbe_obj_set_style_local_pattern_repeat }, - { "get_style_pattern_blend_mode", lvbe_obj_get_style_pattern_blend_mode }, - { "set_style_local_pattern_blend_mode", lvbe_obj_set_style_local_pattern_blend_mode }, - { "get_style_pattern_recolor", lvbe_obj_get_style_pattern_recolor }, - { "set_style_local_pattern_recolor", lvbe_obj_set_style_local_pattern_recolor }, - { "get_style_pattern_opa", lvbe_obj_get_style_pattern_opa }, - { "set_style_local_pattern_opa", lvbe_obj_set_style_local_pattern_opa }, - { "get_style_pattern_recolor_opa", lvbe_obj_get_style_pattern_recolor_opa }, - { "set_style_local_pattern_recolor_opa", lvbe_obj_set_style_local_pattern_recolor_opa }, - { "get_style_pattern_image", lvbe_obj_get_style_pattern_image }, - { "set_style_local_pattern_image", lvbe_obj_set_style_local_pattern_image }, - { "get_style_value_letter_space", lvbe_obj_get_style_value_letter_space }, - { "set_style_local_value_letter_space", lvbe_obj_set_style_local_value_letter_space }, - { "get_style_value_line_space", lvbe_obj_get_style_value_line_space }, - { "set_style_local_value_line_space", lvbe_obj_set_style_local_value_line_space }, - { "get_style_value_blend_mode", lvbe_obj_get_style_value_blend_mode }, - { "set_style_local_value_blend_mode", lvbe_obj_set_style_local_value_blend_mode }, - { "get_style_value_ofs_x", lvbe_obj_get_style_value_ofs_x }, - { "set_style_local_value_ofs_x", lvbe_obj_set_style_local_value_ofs_x }, - { "get_style_value_ofs_y", lvbe_obj_get_style_value_ofs_y }, - { "set_style_local_value_ofs_y", lvbe_obj_set_style_local_value_ofs_y }, - { "get_style_value_align", lvbe_obj_get_style_value_align }, - { "set_style_local_value_align", lvbe_obj_set_style_local_value_align }, - { "get_style_value_color", lvbe_obj_get_style_value_color }, - { "set_style_local_value_color", lvbe_obj_set_style_local_value_color }, - { "get_style_value_opa", lvbe_obj_get_style_value_opa }, - { "set_style_local_value_opa", lvbe_obj_set_style_local_value_opa }, - { "set_style_local_value_font", lvbe_obj_set_style_local_value_font }, - { "get_style_value_str", lvbe_obj_get_style_value_str }, - { "set_style_local_value_str", lvbe_obj_set_style_local_value_str }, - { "get_style_text_letter_space", lvbe_obj_get_style_text_letter_space }, - { "set_style_local_text_letter_space", lvbe_obj_set_style_local_text_letter_space }, - { "get_style_text_line_space", lvbe_obj_get_style_text_line_space }, - { "set_style_local_text_line_space", lvbe_obj_set_style_local_text_line_space }, - { "set_style_local_text_decor", lvbe_obj_set_style_local_text_decor }, - { "get_style_text_blend_mode", lvbe_obj_get_style_text_blend_mode }, - { "set_style_local_text_blend_mode", lvbe_obj_set_style_local_text_blend_mode }, - { "get_style_text_color", lvbe_obj_get_style_text_color }, - { "set_style_local_text_color", lvbe_obj_set_style_local_text_color }, - { "get_style_text_sel_color", lvbe_obj_get_style_text_sel_color }, - { "set_style_local_text_sel_color", lvbe_obj_set_style_local_text_sel_color }, - { "get_style_text_sel_bg_color", lvbe_obj_get_style_text_sel_bg_color }, - { "set_style_local_text_sel_bg_color", lvbe_obj_set_style_local_text_sel_bg_color }, - { "get_style_text_opa", lvbe_obj_get_style_text_opa }, - { "set_style_local_text_opa", lvbe_obj_set_style_local_text_opa }, - { "set_style_local_text_font", lvbe_obj_set_style_local_text_font }, - { "get_style_line_width", lvbe_obj_get_style_line_width }, - { "set_style_local_line_width", lvbe_obj_set_style_local_line_width }, - { "get_style_line_blend_mode", lvbe_obj_get_style_line_blend_mode }, - { "set_style_local_line_blend_mode", lvbe_obj_set_style_local_line_blend_mode }, - { "get_style_line_dash_width", lvbe_obj_get_style_line_dash_width }, - { "set_style_local_line_dash_width", lvbe_obj_set_style_local_line_dash_width }, - { "get_style_line_dash_gap", lvbe_obj_get_style_line_dash_gap }, - { "set_style_local_line_dash_gap", lvbe_obj_set_style_local_line_dash_gap }, - { "get_style_line_rounded", lvbe_obj_get_style_line_rounded }, - { "set_style_local_line_rounded", lvbe_obj_set_style_local_line_rounded }, - { "get_style_line_color", lvbe_obj_get_style_line_color }, - { "set_style_local_line_color", lvbe_obj_set_style_local_line_color }, - { "get_style_line_opa", lvbe_obj_get_style_line_opa }, - { "set_style_local_line_opa", lvbe_obj_set_style_local_line_opa }, - { "get_style_image_blend_mode", lvbe_obj_get_style_image_blend_mode }, - { "set_style_local_image_blend_mode", lvbe_obj_set_style_local_image_blend_mode }, - { "get_style_image_recolor", lvbe_obj_get_style_image_recolor }, - { "set_style_local_image_recolor", lvbe_obj_set_style_local_image_recolor }, - { "get_style_image_opa", lvbe_obj_get_style_image_opa }, - { "set_style_local_image_opa", lvbe_obj_set_style_local_image_opa }, - { "get_style_image_recolor_opa", lvbe_obj_get_style_image_recolor_opa }, - { "set_style_local_image_recolor_opa", lvbe_obj_set_style_local_image_recolor_opa }, - { "get_style_transition_time", lvbe_obj_get_style_transition_time }, - { "set_style_local_transition_time", lvbe_obj_set_style_local_transition_time }, - { "get_style_transition_delay", lvbe_obj_get_style_transition_delay }, - { "set_style_local_transition_delay", lvbe_obj_set_style_local_transition_delay }, - { "get_style_transition_prop_1", lvbe_obj_get_style_transition_prop_1 }, - { "set_style_local_transition_prop_1", lvbe_obj_set_style_local_transition_prop_1 }, - { "get_style_transition_prop_2", lvbe_obj_get_style_transition_prop_2 }, - { "set_style_local_transition_prop_2", lvbe_obj_set_style_local_transition_prop_2 }, - { "get_style_transition_prop_3", lvbe_obj_get_style_transition_prop_3 }, - { "set_style_local_transition_prop_3", lvbe_obj_set_style_local_transition_prop_3 }, - { "get_style_transition_prop_4", lvbe_obj_get_style_transition_prop_4 }, - { "set_style_local_transition_prop_4", lvbe_obj_set_style_local_transition_prop_4 }, - { "get_style_transition_prop_5", lvbe_obj_get_style_transition_prop_5 }, - { "set_style_local_transition_prop_5", lvbe_obj_set_style_local_transition_prop_5 }, - { "get_style_transition_prop_6", lvbe_obj_get_style_transition_prop_6 }, - { "set_style_local_transition_prop_6", lvbe_obj_set_style_local_transition_prop_6 }, - { "set_style_local_transition_path", lvbe_obj_set_style_local_transition_path }, - { "get_style_scale_width", lvbe_obj_get_style_scale_width }, - { "set_style_local_scale_width", lvbe_obj_set_style_local_scale_width }, - { "get_style_scale_border_width", lvbe_obj_get_style_scale_border_width }, - { "set_style_local_scale_border_width", lvbe_obj_set_style_local_scale_border_width }, - { "get_style_scale_end_border_width", lvbe_obj_get_style_scale_end_border_width }, - { "set_style_local_scale_end_border_width", lvbe_obj_set_style_local_scale_end_border_width }, - { "get_style_scale_end_line_width", lvbe_obj_get_style_scale_end_line_width }, - { "set_style_local_scale_end_line_width", lvbe_obj_set_style_local_scale_end_line_width }, - { "get_style_scale_grad_color", lvbe_obj_get_style_scale_grad_color }, - { "set_style_local_scale_grad_color", lvbe_obj_set_style_local_scale_grad_color }, - { "get_style_scale_end_color", lvbe_obj_get_style_scale_end_color }, - { "set_style_local_scale_end_color", lvbe_obj_set_style_local_scale_end_color }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -1856,306 +1273,8 @@ class be_class_lv_obj (scope: global, name: lv_obj) { .p, var init, func(lvbe_obj_create) tostring, func(lvx_tostring) - create, func(lvbe_obj_create) - del, func(lvbe_obj_del) - del_anim_ready_cb, func(lvbe_obj_del_anim_ready_cb) - del_async, func(lvbe_obj_del_async) - clean, func(lvbe_obj_clean) - invalidate_area, func(lvbe_obj_invalidate_area) - invalidate, func(lvbe_obj_invalidate) - area_is_visible, func(lvbe_obj_area_is_visible) - is_visible, func(lvbe_obj_is_visible) - set_parent, func(lvbe_obj_set_parent) - move_foreground, func(lvbe_obj_move_foreground) - move_background, func(lvbe_obj_move_background) - set_pos, func(lvbe_obj_set_pos) - set_x, func(lvbe_obj_set_x) - set_y, func(lvbe_obj_set_y) - set_size, func(lvbe_obj_set_size) - set_width, func(lvbe_obj_set_width) - set_height, func(lvbe_obj_set_height) - set_width_fit, func(lvbe_obj_set_width_fit) - set_height_fit, func(lvbe_obj_set_height_fit) - set_width_margin, func(lvbe_obj_set_width_margin) - set_height_margin, func(lvbe_obj_set_height_margin) - align, func(lvbe_obj_align) - align_x, func(lvbe_obj_align_x) - align_y, func(lvbe_obj_align_y) - align_mid, func(lvbe_obj_align_mid) - align_mid_x, func(lvbe_obj_align_mid_x) - align_mid_y, func(lvbe_obj_align_mid_y) - realign, func(lvbe_obj_realign) - set_auto_realign, func(lvbe_obj_set_auto_realign) - set_ext_click_area, func(lvbe_obj_set_ext_click_area) - add_style, func(lvbe_obj_add_style) - remove_style, func(lvbe_obj_remove_style) - clean_style_list, func(lvbe_obj_clean_style_list) - reset_style_list, func(lvbe_obj_reset_style_list) - refresh_style, func(lvbe_obj_refresh_style) - report_style_mod, func(lvbe_obj_report_style_mod) - remove_style_local_prop, func(lvbe_obj_remove_style_local_prop) - set_hidden, func(lvbe_obj_set_hidden) - set_adv_hittest, func(lvbe_obj_set_adv_hittest) - set_click, func(lvbe_obj_set_click) - set_top, func(lvbe_obj_set_top) - set_drag, func(lvbe_obj_set_drag) - set_drag_dir, func(lvbe_obj_set_drag_dir) - set_drag_throw, func(lvbe_obj_set_drag_throw) - set_drag_parent, func(lvbe_obj_set_drag_parent) - set_focus_parent, func(lvbe_obj_set_focus_parent) - set_gesture_parent, func(lvbe_obj_set_gesture_parent) - set_parent_event, func(lvbe_obj_set_parent_event) - set_base_dir, func(lvbe_obj_set_base_dir) - add_protect, func(lvbe_obj_add_protect) - clear_protect, func(lvbe_obj_clear_protect) - set_state, func(lvbe_obj_set_state) - add_state, func(lvbe_obj_add_state) - clear_state, func(lvbe_obj_clear_state) - finish_transitions, func(lvbe_obj_finish_transitions) - set_event_cb, func(lvbe_obj_set_event_cb) - set_signal_cb, func(lvbe_obj_set_signal_cb) - set_design_cb, func(lvbe_obj_set_design_cb) - allocate_ext_attr, func(lvbe_obj_allocate_ext_attr) - refresh_ext_draw_pad, func(lvbe_obj_refresh_ext_draw_pad) - get_screen, func(lvbe_obj_get_screen) - get_parent, func(lvbe_obj_get_parent) - get_child, func(lvbe_obj_get_child) - get_child_back, func(lvbe_obj_get_child_back) - count_children, func(lvbe_obj_count_children) - count_children_recursive, func(lvbe_obj_count_children_recursive) - get_coords, func(lvbe_obj_get_coords) - get_inner_coords, func(lvbe_obj_get_inner_coords) - get_x, func(lvbe_obj_get_x) - get_y, func(lvbe_obj_get_y) - get_width, func(lvbe_obj_get_width) - get_height, func(lvbe_obj_get_height) - get_width_fit, func(lvbe_obj_get_width_fit) - get_height_fit, func(lvbe_obj_get_height_fit) - get_height_margin, func(lvbe_obj_get_height_margin) - get_width_margin, func(lvbe_obj_get_width_margin) - get_width_grid, func(lvbe_obj_get_width_grid) - get_height_grid, func(lvbe_obj_get_height_grid) - get_auto_realign, func(lvbe_obj_get_auto_realign) - get_ext_click_pad_left, func(lvbe_obj_get_ext_click_pad_left) - get_ext_click_pad_right, func(lvbe_obj_get_ext_click_pad_right) - get_ext_click_pad_top, func(lvbe_obj_get_ext_click_pad_top) - get_ext_click_pad_bottom, func(lvbe_obj_get_ext_click_pad_bottom) - get_ext_draw_pad, func(lvbe_obj_get_ext_draw_pad) - get_local_style, func(lvbe_obj_get_local_style) - get_hidden, func(lvbe_obj_get_hidden) - get_adv_hittest, func(lvbe_obj_get_adv_hittest) - get_click, func(lvbe_obj_get_click) - get_top, func(lvbe_obj_get_top) - get_drag, func(lvbe_obj_get_drag) - get_drag_dir, func(lvbe_obj_get_drag_dir) - get_drag_throw, func(lvbe_obj_get_drag_throw) - get_drag_parent, func(lvbe_obj_get_drag_parent) - get_focus_parent, func(lvbe_obj_get_focus_parent) - get_parent_event, func(lvbe_obj_get_parent_event) - get_gesture_parent, func(lvbe_obj_get_gesture_parent) - get_base_dir, func(lvbe_obj_get_base_dir) - get_protect, func(lvbe_obj_get_protect) - is_protected, func(lvbe_obj_is_protected) - get_state, func(lvbe_obj_get_state) - is_point_on_coords, func(lvbe_obj_is_point_on_coords) - hittest, func(lvbe_obj_hittest) - get_ext_attr, func(lvbe_obj_get_ext_attr) - get_type, func(lvbe_obj_get_type) - get_user_data, func(lvbe_obj_get_user_data) - set_user_data, func(lvbe_obj_set_user_data) - get_group, func(lvbe_obj_get_group) - is_focused, func(lvbe_obj_is_focused) - get_focused_obj, func(lvbe_obj_get_focused_obj) - handle_get_type_signal, func(lvbe_obj_handle_get_type_signal) - init_draw_rect_dsc, func(lvbe_obj_init_draw_rect_dsc) - init_draw_label_dsc, func(lvbe_obj_init_draw_label_dsc) - init_draw_img_dsc, func(lvbe_obj_init_draw_img_dsc) - init_draw_line_dsc, func(lvbe_obj_init_draw_line_dsc) - get_draw_rect_ext_pad_size, func(lvbe_obj_get_draw_rect_ext_pad_size) - fade_in, func(lvbe_obj_fade_in) - fade_out, func(lvbe_obj_fade_out) - get_style_radius, func(lvbe_obj_get_style_radius) - set_style_local_radius, func(lvbe_obj_set_style_local_radius) - get_style_clip_corner, func(lvbe_obj_get_style_clip_corner) - set_style_local_clip_corner, func(lvbe_obj_set_style_local_clip_corner) - get_style_size, func(lvbe_obj_get_style_size) - set_style_local_size, func(lvbe_obj_set_style_local_size) - get_style_transform_width, func(lvbe_obj_get_style_transform_width) - set_style_local_transform_width, func(lvbe_obj_set_style_local_transform_width) - get_style_transform_height, func(lvbe_obj_get_style_transform_height) - set_style_local_transform_height, func(lvbe_obj_set_style_local_transform_height) - get_style_transform_angle, func(lvbe_obj_get_style_transform_angle) - set_style_local_transform_angle, func(lvbe_obj_set_style_local_transform_angle) - get_style_transform_zoom, func(lvbe_obj_get_style_transform_zoom) - set_style_local_transform_zoom, func(lvbe_obj_set_style_local_transform_zoom) - get_style_opa_scale, func(lvbe_obj_get_style_opa_scale) - set_style_local_opa_scale, func(lvbe_obj_set_style_local_opa_scale) - get_style_pad_top, func(lvbe_obj_get_style_pad_top) - set_style_local_pad_top, func(lvbe_obj_set_style_local_pad_top) - get_style_pad_bottom, func(lvbe_obj_get_style_pad_bottom) - set_style_local_pad_bottom, func(lvbe_obj_set_style_local_pad_bottom) - get_style_pad_left, func(lvbe_obj_get_style_pad_left) - set_style_local_pad_left, func(lvbe_obj_set_style_local_pad_left) - get_style_pad_right, func(lvbe_obj_get_style_pad_right) - set_style_local_pad_right, func(lvbe_obj_set_style_local_pad_right) - get_style_pad_inner, func(lvbe_obj_get_style_pad_inner) - set_style_local_pad_inner, func(lvbe_obj_set_style_local_pad_inner) - get_style_margin_top, func(lvbe_obj_get_style_margin_top) - set_style_local_margin_top, func(lvbe_obj_set_style_local_margin_top) - get_style_margin_bottom, func(lvbe_obj_get_style_margin_bottom) - set_style_local_margin_bottom, func(lvbe_obj_set_style_local_margin_bottom) - get_style_margin_left, func(lvbe_obj_get_style_margin_left) - set_style_local_margin_left, func(lvbe_obj_set_style_local_margin_left) - get_style_margin_right, func(lvbe_obj_get_style_margin_right) - set_style_local_margin_right, func(lvbe_obj_set_style_local_margin_right) - get_style_bg_blend_mode, func(lvbe_obj_get_style_bg_blend_mode) - set_style_local_bg_blend_mode, func(lvbe_obj_set_style_local_bg_blend_mode) - get_style_bg_main_stop, func(lvbe_obj_get_style_bg_main_stop) - set_style_local_bg_main_stop, func(lvbe_obj_set_style_local_bg_main_stop) - get_style_bg_grad_stop, func(lvbe_obj_get_style_bg_grad_stop) - set_style_local_bg_grad_stop, func(lvbe_obj_set_style_local_bg_grad_stop) - get_style_bg_grad_dir, func(lvbe_obj_get_style_bg_grad_dir) - set_style_local_bg_grad_dir, func(lvbe_obj_set_style_local_bg_grad_dir) - get_style_bg_color, func(lvbe_obj_get_style_bg_color) - set_style_local_bg_color, func(lvbe_obj_set_style_local_bg_color) - get_style_bg_grad_color, func(lvbe_obj_get_style_bg_grad_color) - set_style_local_bg_grad_color, func(lvbe_obj_set_style_local_bg_grad_color) - get_style_bg_opa, func(lvbe_obj_get_style_bg_opa) - set_style_local_bg_opa, func(lvbe_obj_set_style_local_bg_opa) - get_style_border_width, func(lvbe_obj_get_style_border_width) - set_style_local_border_width, func(lvbe_obj_set_style_local_border_width) - get_style_border_side, func(lvbe_obj_get_style_border_side) - set_style_local_border_side, func(lvbe_obj_set_style_local_border_side) - get_style_border_blend_mode, func(lvbe_obj_get_style_border_blend_mode) - set_style_local_border_blend_mode, func(lvbe_obj_set_style_local_border_blend_mode) - get_style_border_post, func(lvbe_obj_get_style_border_post) - set_style_local_border_post, func(lvbe_obj_set_style_local_border_post) - get_style_border_color, func(lvbe_obj_get_style_border_color) - set_style_local_border_color, func(lvbe_obj_set_style_local_border_color) - get_style_border_opa, func(lvbe_obj_get_style_border_opa) - set_style_local_border_opa, func(lvbe_obj_set_style_local_border_opa) - get_style_outline_width, func(lvbe_obj_get_style_outline_width) - set_style_local_outline_width, func(lvbe_obj_set_style_local_outline_width) - get_style_outline_pad, func(lvbe_obj_get_style_outline_pad) - set_style_local_outline_pad, func(lvbe_obj_set_style_local_outline_pad) - get_style_outline_blend_mode, func(lvbe_obj_get_style_outline_blend_mode) - set_style_local_outline_blend_mode, func(lvbe_obj_set_style_local_outline_blend_mode) - get_style_outline_color, func(lvbe_obj_get_style_outline_color) - set_style_local_outline_color, func(lvbe_obj_set_style_local_outline_color) - get_style_outline_opa, func(lvbe_obj_get_style_outline_opa) - set_style_local_outline_opa, func(lvbe_obj_set_style_local_outline_opa) - get_style_shadow_width, func(lvbe_obj_get_style_shadow_width) - set_style_local_shadow_width, func(lvbe_obj_set_style_local_shadow_width) - get_style_shadow_ofs_x, func(lvbe_obj_get_style_shadow_ofs_x) - set_style_local_shadow_ofs_x, func(lvbe_obj_set_style_local_shadow_ofs_x) - get_style_shadow_ofs_y, func(lvbe_obj_get_style_shadow_ofs_y) - set_style_local_shadow_ofs_y, func(lvbe_obj_set_style_local_shadow_ofs_y) - get_style_shadow_spread, func(lvbe_obj_get_style_shadow_spread) - set_style_local_shadow_spread, func(lvbe_obj_set_style_local_shadow_spread) - get_style_shadow_blend_mode, func(lvbe_obj_get_style_shadow_blend_mode) - set_style_local_shadow_blend_mode, func(lvbe_obj_set_style_local_shadow_blend_mode) - get_style_shadow_color, func(lvbe_obj_get_style_shadow_color) - set_style_local_shadow_color, func(lvbe_obj_set_style_local_shadow_color) - get_style_shadow_opa, func(lvbe_obj_get_style_shadow_opa) - set_style_local_shadow_opa, func(lvbe_obj_set_style_local_shadow_opa) - get_style_pattern_repeat, func(lvbe_obj_get_style_pattern_repeat) - set_style_local_pattern_repeat, func(lvbe_obj_set_style_local_pattern_repeat) - get_style_pattern_blend_mode, func(lvbe_obj_get_style_pattern_blend_mode) - set_style_local_pattern_blend_mode, func(lvbe_obj_set_style_local_pattern_blend_mode) - get_style_pattern_recolor, func(lvbe_obj_get_style_pattern_recolor) - set_style_local_pattern_recolor, func(lvbe_obj_set_style_local_pattern_recolor) - get_style_pattern_opa, func(lvbe_obj_get_style_pattern_opa) - set_style_local_pattern_opa, func(lvbe_obj_set_style_local_pattern_opa) - get_style_pattern_recolor_opa, func(lvbe_obj_get_style_pattern_recolor_opa) - set_style_local_pattern_recolor_opa, func(lvbe_obj_set_style_local_pattern_recolor_opa) - get_style_pattern_image, func(lvbe_obj_get_style_pattern_image) - set_style_local_pattern_image, func(lvbe_obj_set_style_local_pattern_image) - get_style_value_letter_space, func(lvbe_obj_get_style_value_letter_space) - set_style_local_value_letter_space, func(lvbe_obj_set_style_local_value_letter_space) - get_style_value_line_space, func(lvbe_obj_get_style_value_line_space) - set_style_local_value_line_space, func(lvbe_obj_set_style_local_value_line_space) - get_style_value_blend_mode, func(lvbe_obj_get_style_value_blend_mode) - set_style_local_value_blend_mode, func(lvbe_obj_set_style_local_value_blend_mode) - get_style_value_ofs_x, func(lvbe_obj_get_style_value_ofs_x) - set_style_local_value_ofs_x, func(lvbe_obj_set_style_local_value_ofs_x) - get_style_value_ofs_y, func(lvbe_obj_get_style_value_ofs_y) - set_style_local_value_ofs_y, func(lvbe_obj_set_style_local_value_ofs_y) - get_style_value_align, func(lvbe_obj_get_style_value_align) - set_style_local_value_align, func(lvbe_obj_set_style_local_value_align) - get_style_value_color, func(lvbe_obj_get_style_value_color) - set_style_local_value_color, func(lvbe_obj_set_style_local_value_color) - get_style_value_opa, func(lvbe_obj_get_style_value_opa) - set_style_local_value_opa, func(lvbe_obj_set_style_local_value_opa) - set_style_local_value_font, func(lvbe_obj_set_style_local_value_font) - get_style_value_str, func(lvbe_obj_get_style_value_str) - set_style_local_value_str, func(lvbe_obj_set_style_local_value_str) - get_style_text_letter_space, func(lvbe_obj_get_style_text_letter_space) - set_style_local_text_letter_space, func(lvbe_obj_set_style_local_text_letter_space) - get_style_text_line_space, func(lvbe_obj_get_style_text_line_space) - set_style_local_text_line_space, func(lvbe_obj_set_style_local_text_line_space) - set_style_local_text_decor, func(lvbe_obj_set_style_local_text_decor) - get_style_text_blend_mode, func(lvbe_obj_get_style_text_blend_mode) - set_style_local_text_blend_mode, func(lvbe_obj_set_style_local_text_blend_mode) - get_style_text_color, func(lvbe_obj_get_style_text_color) - set_style_local_text_color, func(lvbe_obj_set_style_local_text_color) - get_style_text_sel_color, func(lvbe_obj_get_style_text_sel_color) - set_style_local_text_sel_color, func(lvbe_obj_set_style_local_text_sel_color) - get_style_text_sel_bg_color, func(lvbe_obj_get_style_text_sel_bg_color) - set_style_local_text_sel_bg_color, func(lvbe_obj_set_style_local_text_sel_bg_color) - get_style_text_opa, func(lvbe_obj_get_style_text_opa) - set_style_local_text_opa, func(lvbe_obj_set_style_local_text_opa) - set_style_local_text_font, func(lvbe_obj_set_style_local_text_font) - get_style_line_width, func(lvbe_obj_get_style_line_width) - set_style_local_line_width, func(lvbe_obj_set_style_local_line_width) - get_style_line_blend_mode, func(lvbe_obj_get_style_line_blend_mode) - set_style_local_line_blend_mode, func(lvbe_obj_set_style_local_line_blend_mode) - get_style_line_dash_width, func(lvbe_obj_get_style_line_dash_width) - set_style_local_line_dash_width, func(lvbe_obj_set_style_local_line_dash_width) - get_style_line_dash_gap, func(lvbe_obj_get_style_line_dash_gap) - set_style_local_line_dash_gap, func(lvbe_obj_set_style_local_line_dash_gap) - get_style_line_rounded, func(lvbe_obj_get_style_line_rounded) - set_style_local_line_rounded, func(lvbe_obj_set_style_local_line_rounded) - get_style_line_color, func(lvbe_obj_get_style_line_color) - set_style_local_line_color, func(lvbe_obj_set_style_local_line_color) - get_style_line_opa, func(lvbe_obj_get_style_line_opa) - set_style_local_line_opa, func(lvbe_obj_set_style_local_line_opa) - get_style_image_blend_mode, func(lvbe_obj_get_style_image_blend_mode) - set_style_local_image_blend_mode, func(lvbe_obj_set_style_local_image_blend_mode) - get_style_image_recolor, func(lvbe_obj_get_style_image_recolor) - set_style_local_image_recolor, func(lvbe_obj_set_style_local_image_recolor) - get_style_image_opa, func(lvbe_obj_get_style_image_opa) - set_style_local_image_opa, func(lvbe_obj_set_style_local_image_opa) - get_style_image_recolor_opa, func(lvbe_obj_get_style_image_recolor_opa) - set_style_local_image_recolor_opa, func(lvbe_obj_set_style_local_image_recolor_opa) - get_style_transition_time, func(lvbe_obj_get_style_transition_time) - set_style_local_transition_time, func(lvbe_obj_set_style_local_transition_time) - get_style_transition_delay, func(lvbe_obj_get_style_transition_delay) - set_style_local_transition_delay, func(lvbe_obj_set_style_local_transition_delay) - get_style_transition_prop_1, func(lvbe_obj_get_style_transition_prop_1) - set_style_local_transition_prop_1, func(lvbe_obj_set_style_local_transition_prop_1) - get_style_transition_prop_2, func(lvbe_obj_get_style_transition_prop_2) - set_style_local_transition_prop_2, func(lvbe_obj_set_style_local_transition_prop_2) - get_style_transition_prop_3, func(lvbe_obj_get_style_transition_prop_3) - set_style_local_transition_prop_3, func(lvbe_obj_set_style_local_transition_prop_3) - get_style_transition_prop_4, func(lvbe_obj_get_style_transition_prop_4) - set_style_local_transition_prop_4, func(lvbe_obj_set_style_local_transition_prop_4) - get_style_transition_prop_5, func(lvbe_obj_get_style_transition_prop_5) - set_style_local_transition_prop_5, func(lvbe_obj_set_style_local_transition_prop_5) - get_style_transition_prop_6, func(lvbe_obj_get_style_transition_prop_6) - set_style_local_transition_prop_6, func(lvbe_obj_set_style_local_transition_prop_6) - set_style_local_transition_path, func(lvbe_obj_set_style_local_transition_path) - get_style_scale_width, func(lvbe_obj_get_style_scale_width) - set_style_local_scale_width, func(lvbe_obj_set_style_local_scale_width) - get_style_scale_border_width, func(lvbe_obj_get_style_scale_border_width) - set_style_local_scale_border_width, func(lvbe_obj_set_style_local_scale_border_width) - get_style_scale_end_border_width, func(lvbe_obj_get_style_scale_end_border_width) - set_style_local_scale_end_border_width, func(lvbe_obj_set_style_local_scale_end_border_width) - get_style_scale_end_line_width, func(lvbe_obj_get_style_scale_end_line_width) - set_style_local_scale_end_line_width, func(lvbe_obj_set_style_local_scale_end_line_width) - get_style_scale_grad_color, func(lvbe_obj_get_style_scale_grad_color) - set_style_local_scale_grad_color, func(lvbe_obj_set_style_local_scale_grad_color) - get_style_scale_end_color, func(lvbe_obj_get_style_scale_end_color) - set_style_local_scale_end_color, func(lvbe_obj_set_style_local_scale_end_color) + member, func(lvx_member) + } @const_object_info_end */ @@ -2165,30 +1284,8 @@ void be_load_lv_arc_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_arc_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_arc_create }, - { "set_start_angle", lvbe_arc_set_start_angle }, - { "set_end_angle", lvbe_arc_set_end_angle }, - { "set_angles", lvbe_arc_set_angles }, - { "set_bg_start_angle", lvbe_arc_set_bg_start_angle }, - { "set_bg_end_angle", lvbe_arc_set_bg_end_angle }, - { "set_bg_angles", lvbe_arc_set_bg_angles }, - { "set_rotation", lvbe_arc_set_rotation }, - { "set_type", lvbe_arc_set_type }, - { "set_value", lvbe_arc_set_value }, - { "set_range", lvbe_arc_set_range }, - { "set_chg_rate", lvbe_arc_set_chg_rate }, - { "set_adjustable", lvbe_arc_set_adjustable }, - { "get_angle_start", lvbe_arc_get_angle_start }, - { "get_angle_end", lvbe_arc_get_angle_end }, - { "get_bg_angle_start", lvbe_arc_get_bg_angle_start }, - { "get_bg_angle_end", lvbe_arc_get_bg_angle_end }, - { "get_type", lvbe_arc_get_type }, - { "get_value", lvbe_arc_get_value }, - { "get_min_value", lvbe_arc_get_min_value }, - { "get_max_value", lvbe_arc_get_max_value }, - { "is_dragged", lvbe_arc_is_dragged }, - { "get_adjustable", lvbe_arc_get_adjustable }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -2212,29 +1309,8 @@ class be_class_lv_arc (scope: global, name: lv_arc, super: be_class_lv_obj) { .p, var init, func(lvbe_arc_create) tostring, func(lvx_tostring) - create, func(lvbe_arc_create) - set_start_angle, func(lvbe_arc_set_start_angle) - set_end_angle, func(lvbe_arc_set_end_angle) - set_angles, func(lvbe_arc_set_angles) - set_bg_start_angle, func(lvbe_arc_set_bg_start_angle) - set_bg_end_angle, func(lvbe_arc_set_bg_end_angle) - set_bg_angles, func(lvbe_arc_set_bg_angles) - set_rotation, func(lvbe_arc_set_rotation) - set_type, func(lvbe_arc_set_type) - set_value, func(lvbe_arc_set_value) - set_range, func(lvbe_arc_set_range) - set_chg_rate, func(lvbe_arc_set_chg_rate) - set_adjustable, func(lvbe_arc_set_adjustable) - get_angle_start, func(lvbe_arc_get_angle_start) - get_angle_end, func(lvbe_arc_get_angle_end) - get_bg_angle_start, func(lvbe_arc_get_bg_angle_start) - get_bg_angle_end, func(lvbe_arc_get_bg_angle_end) - get_type, func(lvbe_arc_get_type) - get_value, func(lvbe_arc_get_value) - get_min_value, func(lvbe_arc_get_min_value) - get_max_value, func(lvbe_arc_get_max_value) - is_dragged, func(lvbe_arc_is_dragged) - get_adjustable, func(lvbe_arc_get_adjustable) + member, func(lvx_member) + } @const_object_info_end */ @@ -2244,19 +1320,8 @@ void be_load_lv_bar_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_bar_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_bar_create }, - { "set_value", lvbe_bar_set_value }, - { "set_start_value", lvbe_bar_set_start_value }, - { "set_range", lvbe_bar_set_range }, - { "set_type", lvbe_bar_set_type }, - { "set_anim_time", lvbe_bar_set_anim_time }, - { "get_value", lvbe_bar_get_value }, - { "get_start_value", lvbe_bar_get_start_value }, - { "get_min_value", lvbe_bar_get_min_value }, - { "get_max_value", lvbe_bar_get_max_value }, - { "get_type", lvbe_bar_get_type }, - { "get_anim_time", lvbe_bar_get_anim_time }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -2280,18 +1345,8 @@ class be_class_lv_bar (scope: global, name: lv_bar, super: be_class_lv_obj) { .p, var init, func(lvbe_bar_create) tostring, func(lvx_tostring) - create, func(lvbe_bar_create) - set_value, func(lvbe_bar_set_value) - set_start_value, func(lvbe_bar_set_start_value) - set_range, func(lvbe_bar_set_range) - set_type, func(lvbe_bar_set_type) - set_anim_time, func(lvbe_bar_set_anim_time) - get_value, func(lvbe_bar_get_value) - get_start_value, func(lvbe_bar_get_start_value) - get_min_value, func(lvbe_bar_get_min_value) - get_max_value, func(lvbe_bar_get_max_value) - get_type, func(lvbe_bar_get_type) - get_anim_time, func(lvbe_bar_get_anim_time) + member, func(lvx_member) + } @const_object_info_end */ @@ -2301,22 +1356,8 @@ void be_load_lv_btn_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_btn_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_btn_create }, - { "set_checkable", lvbe_btn_set_checkable }, - { "set_state", lvbe_btn_set_state }, - { "toggle", lvbe_btn_toggle }, - { "set_layout", lvbe_btn_set_layout }, - { "set_fit4", lvbe_btn_set_fit4 }, - { "set_fit2", lvbe_btn_set_fit2 }, - { "set_fit", lvbe_btn_set_fit }, - { "get_state", lvbe_btn_get_state }, - { "get_checkable", lvbe_btn_get_checkable }, - { "get_layout", lvbe_btn_get_layout }, - { "get_fit_left", lvbe_btn_get_fit_left }, - { "get_fit_right", lvbe_btn_get_fit_right }, - { "get_fit_top", lvbe_btn_get_fit_top }, - { "get_fit_bottom", lvbe_btn_get_fit_bottom }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -2340,21 +1381,8 @@ class be_class_lv_btn (scope: global, name: lv_btn, super: be_class_lv_obj) { .p, var init, func(lvbe_btn_create) tostring, func(lvx_tostring) - create, func(lvbe_btn_create) - set_checkable, func(lvbe_btn_set_checkable) - set_state, func(lvbe_btn_set_state) - toggle, func(lvbe_btn_toggle) - set_layout, func(lvbe_btn_set_layout) - set_fit4, func(lvbe_btn_set_fit4) - set_fit2, func(lvbe_btn_set_fit2) - set_fit, func(lvbe_btn_set_fit) - get_state, func(lvbe_btn_get_state) - get_checkable, func(lvbe_btn_get_checkable) - get_layout, func(lvbe_btn_get_layout) - get_fit_left, func(lvbe_btn_get_fit_left) - get_fit_right, func(lvbe_btn_get_fit_right) - get_fit_top, func(lvbe_btn_get_fit_top) - get_fit_bottom, func(lvbe_btn_get_fit_bottom) + member, func(lvx_member) + } @const_object_info_end */ @@ -2364,27 +1392,8 @@ void be_load_lv_btnmatrix_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_btnmatrix_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_btnmatrix_create }, - { "set_map", lvbe_btnmatrix_set_map }, - { "set_ctrl_map", lvbe_btnmatrix_set_ctrl_map }, - { "set_focused_btn", lvbe_btnmatrix_set_focused_btn }, - { "set_recolor", lvbe_btnmatrix_set_recolor }, - { "set_btn_ctrl", lvbe_btnmatrix_set_btn_ctrl }, - { "clear_btn_ctrl", lvbe_btnmatrix_clear_btn_ctrl }, - { "set_btn_ctrl_all", lvbe_btnmatrix_set_btn_ctrl_all }, - { "clear_btn_ctrl_all", lvbe_btnmatrix_clear_btn_ctrl_all }, - { "set_btn_width", lvbe_btnmatrix_set_btn_width }, - { "set_one_check", lvbe_btnmatrix_set_one_check }, - { "set_align", lvbe_btnmatrix_set_align }, - { "get_recolor", lvbe_btnmatrix_get_recolor }, - { "get_active_btn", lvbe_btnmatrix_get_active_btn }, - { "get_active_btn_text", lvbe_btnmatrix_get_active_btn_text }, - { "get_focused_btn", lvbe_btnmatrix_get_focused_btn }, - { "get_btn_text", lvbe_btnmatrix_get_btn_text }, - { "get_btn_ctrl", lvbe_btnmatrix_get_btn_ctrl }, - { "get_one_check", lvbe_btnmatrix_get_one_check }, - { "get_align", lvbe_btnmatrix_get_align }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -2408,26 +1417,8 @@ class be_class_lv_btnmatrix (scope: global, name: lv_btnmatrix, super: be_class_ .p, var init, func(lvbe_btnmatrix_create) tostring, func(lvx_tostring) - create, func(lvbe_btnmatrix_create) - set_map, func(lvbe_btnmatrix_set_map) - set_ctrl_map, func(lvbe_btnmatrix_set_ctrl_map) - set_focused_btn, func(lvbe_btnmatrix_set_focused_btn) - set_recolor, func(lvbe_btnmatrix_set_recolor) - set_btn_ctrl, func(lvbe_btnmatrix_set_btn_ctrl) - clear_btn_ctrl, func(lvbe_btnmatrix_clear_btn_ctrl) - set_btn_ctrl_all, func(lvbe_btnmatrix_set_btn_ctrl_all) - clear_btn_ctrl_all, func(lvbe_btnmatrix_clear_btn_ctrl_all) - set_btn_width, func(lvbe_btnmatrix_set_btn_width) - set_one_check, func(lvbe_btnmatrix_set_one_check) - set_align, func(lvbe_btnmatrix_set_align) - get_recolor, func(lvbe_btnmatrix_get_recolor) - get_active_btn, func(lvbe_btnmatrix_get_active_btn) - get_active_btn_text, func(lvbe_btnmatrix_get_active_btn_text) - get_focused_btn, func(lvbe_btnmatrix_get_focused_btn) - get_btn_text, func(lvbe_btnmatrix_get_btn_text) - get_btn_ctrl, func(lvbe_btnmatrix_get_btn_ctrl) - get_one_check, func(lvbe_btnmatrix_get_one_check) - get_align, func(lvbe_btnmatrix_get_align) + member, func(lvx_member) + } @const_object_info_end */ @@ -2437,15 +1428,8 @@ void be_load_lv_calendar_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_calendar_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_calendar_create }, - { "set_today_date", lvbe_calendar_set_today_date }, - { "set_showed_date", lvbe_calendar_set_showed_date }, - { "set_highlighted_dates", lvbe_calendar_set_highlighted_dates }, - { "set_day_names", lvbe_calendar_set_day_names }, - { "set_month_names", lvbe_calendar_set_month_names }, - { "get_highlighted_dates_num", lvbe_calendar_get_highlighted_dates_num }, - { "get_day_of_week", lvbe_calendar_get_day_of_week }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -2469,14 +1453,8 @@ class be_class_lv_calendar (scope: global, name: lv_calendar, super: be_class_lv .p, var init, func(lvbe_calendar_create) tostring, func(lvx_tostring) - create, func(lvbe_calendar_create) - set_today_date, func(lvbe_calendar_set_today_date) - set_showed_date, func(lvbe_calendar_set_showed_date) - set_highlighted_dates, func(lvbe_calendar_set_highlighted_dates) - set_day_names, func(lvbe_calendar_set_day_names) - set_month_names, func(lvbe_calendar_set_month_names) - get_highlighted_dates_num, func(lvbe_calendar_get_highlighted_dates_num) - get_day_of_week, func(lvbe_calendar_get_day_of_week) + member, func(lvx_member) + } @const_object_info_end */ @@ -2486,23 +1464,8 @@ void be_load_lv_canvas_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_canvas_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_canvas_create }, - { "set_buffer", lvbe_canvas_set_buffer }, - { "set_px", lvbe_canvas_set_px }, - { "set_palette", lvbe_canvas_set_palette }, - { "get_px", lvbe_canvas_get_px }, - { "copy_buf", lvbe_canvas_copy_buf }, - { "transform", lvbe_canvas_transform }, - { "blur_hor", lvbe_canvas_blur_hor }, - { "blur_ver", lvbe_canvas_blur_ver }, - { "fill_bg", lvbe_canvas_fill_bg }, - { "draw_rect", lvbe_canvas_draw_rect }, - { "draw_text", lvbe_canvas_draw_text }, - { "draw_img", lvbe_canvas_draw_img }, - { "draw_line", lvbe_canvas_draw_line }, - { "draw_polygon", lvbe_canvas_draw_polygon }, - { "draw_arc", lvbe_canvas_draw_arc }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -2526,22 +1489,8 @@ class be_class_lv_canvas (scope: global, name: lv_canvas, super: be_class_lv_obj .p, var init, func(lvbe_canvas_create) tostring, func(lvx_tostring) - create, func(lvbe_canvas_create) - set_buffer, func(lvbe_canvas_set_buffer) - set_px, func(lvbe_canvas_set_px) - set_palette, func(lvbe_canvas_set_palette) - get_px, func(lvbe_canvas_get_px) - copy_buf, func(lvbe_canvas_copy_buf) - transform, func(lvbe_canvas_transform) - blur_hor, func(lvbe_canvas_blur_hor) - blur_ver, func(lvbe_canvas_blur_ver) - fill_bg, func(lvbe_canvas_fill_bg) - draw_rect, func(lvbe_canvas_draw_rect) - draw_text, func(lvbe_canvas_draw_text) - draw_img, func(lvbe_canvas_draw_img) - draw_line, func(lvbe_canvas_draw_line) - draw_polygon, func(lvbe_canvas_draw_polygon) - draw_arc, func(lvbe_canvas_draw_arc) + member, func(lvx_member) + } @const_object_info_end */ @@ -2551,41 +1500,8 @@ void be_load_lv_chart_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_chart_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_chart_create }, - { "remove_series", lvbe_chart_remove_series }, - { "clear_series", lvbe_chart_clear_series }, - { "hide_series", lvbe_chart_hide_series }, - { "set_div_line_count", lvbe_chart_set_div_line_count }, - { "set_y_range", lvbe_chart_set_y_range }, - { "set_type", lvbe_chart_set_type }, - { "set_point_count", lvbe_chart_set_point_count }, - { "init_points", lvbe_chart_init_points }, - { "set_points", lvbe_chart_set_points }, - { "set_next", lvbe_chart_set_next }, - { "set_update_mode", lvbe_chart_set_update_mode }, - { "set_x_tick_length", lvbe_chart_set_x_tick_length }, - { "set_y_tick_length", lvbe_chart_set_y_tick_length }, - { "set_secondary_y_tick_length", lvbe_chart_set_secondary_y_tick_length }, - { "set_x_tick_texts", lvbe_chart_set_x_tick_texts }, - { "set_secondary_y_tick_texts", lvbe_chart_set_secondary_y_tick_texts }, - { "set_y_tick_texts", lvbe_chart_set_y_tick_texts }, - { "set_x_start_point", lvbe_chart_set_x_start_point }, - { "set_ext_array", lvbe_chart_set_ext_array }, - { "set_point_id", lvbe_chart_set_point_id }, - { "set_series_axis", lvbe_chart_set_series_axis }, - { "set_cursor_point", lvbe_chart_set_cursor_point }, - { "get_type", lvbe_chart_get_type }, - { "get_point_count", lvbe_chart_get_point_count }, - { "get_x_start_point", lvbe_chart_get_x_start_point }, - { "get_point_id", lvbe_chart_get_point_id }, - { "get_series_axis", lvbe_chart_get_series_axis }, - { "get_series_area", lvbe_chart_get_series_area }, - { "get_cursor_point", lvbe_chart_get_cursor_point }, - { "get_nearest_index_from_coord", lvbe_chart_get_nearest_index_from_coord }, - { "get_x_from_index", lvbe_chart_get_x_from_index }, - { "get_y_from_index", lvbe_chart_get_y_from_index }, - { "refresh", lvbe_chart_refresh }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -2609,40 +1525,8 @@ class be_class_lv_chart (scope: global, name: lv_chart, super: be_class_lv_obj) .p, var init, func(lvbe_chart_create) tostring, func(lvx_tostring) - create, func(lvbe_chart_create) - remove_series, func(lvbe_chart_remove_series) - clear_series, func(lvbe_chart_clear_series) - hide_series, func(lvbe_chart_hide_series) - set_div_line_count, func(lvbe_chart_set_div_line_count) - set_y_range, func(lvbe_chart_set_y_range) - set_type, func(lvbe_chart_set_type) - set_point_count, func(lvbe_chart_set_point_count) - init_points, func(lvbe_chart_init_points) - set_points, func(lvbe_chart_set_points) - set_next, func(lvbe_chart_set_next) - set_update_mode, func(lvbe_chart_set_update_mode) - set_x_tick_length, func(lvbe_chart_set_x_tick_length) - set_y_tick_length, func(lvbe_chart_set_y_tick_length) - set_secondary_y_tick_length, func(lvbe_chart_set_secondary_y_tick_length) - set_x_tick_texts, func(lvbe_chart_set_x_tick_texts) - set_secondary_y_tick_texts, func(lvbe_chart_set_secondary_y_tick_texts) - set_y_tick_texts, func(lvbe_chart_set_y_tick_texts) - set_x_start_point, func(lvbe_chart_set_x_start_point) - set_ext_array, func(lvbe_chart_set_ext_array) - set_point_id, func(lvbe_chart_set_point_id) - set_series_axis, func(lvbe_chart_set_series_axis) - set_cursor_point, func(lvbe_chart_set_cursor_point) - get_type, func(lvbe_chart_get_type) - get_point_count, func(lvbe_chart_get_point_count) - get_x_start_point, func(lvbe_chart_get_x_start_point) - get_point_id, func(lvbe_chart_get_point_id) - get_series_axis, func(lvbe_chart_get_series_axis) - get_series_area, func(lvbe_chart_get_series_area) - get_cursor_point, func(lvbe_chart_get_cursor_point) - get_nearest_index_from_coord, func(lvbe_chart_get_nearest_index_from_coord) - get_x_from_index, func(lvbe_chart_get_x_from_index) - get_y_from_index, func(lvbe_chart_get_y_from_index) - refresh, func(lvbe_chart_refresh) + member, func(lvx_member) + } @const_object_info_end */ @@ -2652,17 +1536,8 @@ void be_load_lv_checkbox_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_checkbox_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_checkbox_create }, - { "set_text", lvbe_checkbox_set_text }, - { "set_text_static", lvbe_checkbox_set_text_static }, - { "set_checked", lvbe_checkbox_set_checked }, - { "set_disabled", lvbe_checkbox_set_disabled }, - { "set_state", lvbe_checkbox_set_state }, - { "get_text", lvbe_checkbox_get_text }, - { "is_checked", lvbe_checkbox_is_checked }, - { "is_inactive", lvbe_checkbox_is_inactive }, - { "get_state", lvbe_checkbox_get_state }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -2686,16 +1561,8 @@ class be_class_lv_checkbox (scope: global, name: lv_checkbox, super: be_class_lv .p, var init, func(lvbe_checkbox_create) tostring, func(lvx_tostring) - create, func(lvbe_checkbox_create) - set_text, func(lvbe_checkbox_set_text) - set_text_static, func(lvbe_checkbox_set_text_static) - set_checked, func(lvbe_checkbox_set_checked) - set_disabled, func(lvbe_checkbox_set_disabled) - set_state, func(lvbe_checkbox_set_state) - get_text, func(lvbe_checkbox_get_text) - is_checked, func(lvbe_checkbox_is_checked) - is_inactive, func(lvbe_checkbox_is_inactive) - get_state, func(lvbe_checkbox_get_state) + member, func(lvx_member) + } @const_object_info_end */ @@ -2705,17 +1572,8 @@ void be_load_lv_cont_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_cont_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_cont_create }, - { "set_layout", lvbe_cont_set_layout }, - { "set_fit4", lvbe_cont_set_fit4 }, - { "set_fit2", lvbe_cont_set_fit2 }, - { "set_fit", lvbe_cont_set_fit }, - { "get_layout", lvbe_cont_get_layout }, - { "get_fit_left", lvbe_cont_get_fit_left }, - { "get_fit_right", lvbe_cont_get_fit_right }, - { "get_fit_top", lvbe_cont_get_fit_top }, - { "get_fit_bottom", lvbe_cont_get_fit_bottom }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -2739,16 +1597,8 @@ class be_class_lv_cont (scope: global, name: lv_cont, super: be_class_lv_obj) { .p, var init, func(lvbe_cont_create) tostring, func(lvx_tostring) - create, func(lvbe_cont_create) - set_layout, func(lvbe_cont_set_layout) - set_fit4, func(lvbe_cont_set_fit4) - set_fit2, func(lvbe_cont_set_fit2) - set_fit, func(lvbe_cont_set_fit) - get_layout, func(lvbe_cont_get_layout) - get_fit_left, func(lvbe_cont_get_fit_left) - get_fit_right, func(lvbe_cont_get_fit_right) - get_fit_top, func(lvbe_cont_get_fit_top) - get_fit_bottom, func(lvbe_cont_get_fit_bottom) + member, func(lvx_member) + } @const_object_info_end */ @@ -2758,25 +1608,8 @@ void be_load_lv_cpicker_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_cpicker_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_cpicker_create }, - { "set_type", lvbe_cpicker_set_type }, - { "set_hue", lvbe_cpicker_set_hue }, - { "set_saturation", lvbe_cpicker_set_saturation }, - { "set_value", lvbe_cpicker_set_value }, - { "set_hsv", lvbe_cpicker_set_hsv }, - { "set_color", lvbe_cpicker_set_color }, - { "set_color_mode", lvbe_cpicker_set_color_mode }, - { "set_color_mode_fixed", lvbe_cpicker_set_color_mode_fixed }, - { "set_knob_colored", lvbe_cpicker_set_knob_colored }, - { "get_color_mode", lvbe_cpicker_get_color_mode }, - { "get_color_mode_fixed", lvbe_cpicker_get_color_mode_fixed }, - { "get_hue", lvbe_cpicker_get_hue }, - { "get_saturation", lvbe_cpicker_get_saturation }, - { "get_value", lvbe_cpicker_get_value }, - { "get_hsv", lvbe_cpicker_get_hsv }, - { "get_color", lvbe_cpicker_get_color }, - { "get_knob_colored", lvbe_cpicker_get_knob_colored }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -2800,24 +1633,8 @@ class be_class_lv_cpicker (scope: global, name: lv_cpicker, super: be_class_lv_o .p, var init, func(lvbe_cpicker_create) tostring, func(lvx_tostring) - create, func(lvbe_cpicker_create) - set_type, func(lvbe_cpicker_set_type) - set_hue, func(lvbe_cpicker_set_hue) - set_saturation, func(lvbe_cpicker_set_saturation) - set_value, func(lvbe_cpicker_set_value) - set_hsv, func(lvbe_cpicker_set_hsv) - set_color, func(lvbe_cpicker_set_color) - set_color_mode, func(lvbe_cpicker_set_color_mode) - set_color_mode_fixed, func(lvbe_cpicker_set_color_mode_fixed) - set_knob_colored, func(lvbe_cpicker_set_knob_colored) - get_color_mode, func(lvbe_cpicker_get_color_mode) - get_color_mode_fixed, func(lvbe_cpicker_get_color_mode_fixed) - get_hue, func(lvbe_cpicker_get_hue) - get_saturation, func(lvbe_cpicker_get_saturation) - get_value, func(lvbe_cpicker_get_value) - get_hsv, func(lvbe_cpicker_get_hsv) - get_color, func(lvbe_cpicker_get_color) - get_knob_colored, func(lvbe_cpicker_get_knob_colored) + member, func(lvx_member) + } @const_object_info_end */ @@ -2827,29 +1644,8 @@ void be_load_lv_dropdown_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_dropdown_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_dropdown_create }, - { "set_text", lvbe_dropdown_set_text }, - { "clear_options", lvbe_dropdown_clear_options }, - { "set_options", lvbe_dropdown_set_options }, - { "set_options_static", lvbe_dropdown_set_options_static }, - { "add_option", lvbe_dropdown_add_option }, - { "set_selected", lvbe_dropdown_set_selected }, - { "set_dir", lvbe_dropdown_set_dir }, - { "set_max_height", lvbe_dropdown_set_max_height }, - { "set_symbol", lvbe_dropdown_set_symbol }, - { "set_show_selected", lvbe_dropdown_set_show_selected }, - { "get_text", lvbe_dropdown_get_text }, - { "get_options", lvbe_dropdown_get_options }, - { "get_selected", lvbe_dropdown_get_selected }, - { "get_option_cnt", lvbe_dropdown_get_option_cnt }, - { "get_selected_str", lvbe_dropdown_get_selected_str }, - { "get_max_height", lvbe_dropdown_get_max_height }, - { "get_symbol", lvbe_dropdown_get_symbol }, - { "get_dir", lvbe_dropdown_get_dir }, - { "get_show_selected", lvbe_dropdown_get_show_selected }, - { "open", lvbe_dropdown_open }, - { "close", lvbe_dropdown_close }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -2873,28 +1669,8 @@ class be_class_lv_dropdown (scope: global, name: lv_dropdown, super: be_class_lv .p, var init, func(lvbe_dropdown_create) tostring, func(lvx_tostring) - create, func(lvbe_dropdown_create) - set_text, func(lvbe_dropdown_set_text) - clear_options, func(lvbe_dropdown_clear_options) - set_options, func(lvbe_dropdown_set_options) - set_options_static, func(lvbe_dropdown_set_options_static) - add_option, func(lvbe_dropdown_add_option) - set_selected, func(lvbe_dropdown_set_selected) - set_dir, func(lvbe_dropdown_set_dir) - set_max_height, func(lvbe_dropdown_set_max_height) - set_symbol, func(lvbe_dropdown_set_symbol) - set_show_selected, func(lvbe_dropdown_set_show_selected) - get_text, func(lvbe_dropdown_get_text) - get_options, func(lvbe_dropdown_get_options) - get_selected, func(lvbe_dropdown_get_selected) - get_option_cnt, func(lvbe_dropdown_get_option_cnt) - get_selected_str, func(lvbe_dropdown_get_selected_str) - get_max_height, func(lvbe_dropdown_get_max_height) - get_symbol, func(lvbe_dropdown_get_symbol) - get_dir, func(lvbe_dropdown_get_dir) - get_show_selected, func(lvbe_dropdown_get_show_selected) - open, func(lvbe_dropdown_open) - close, func(lvbe_dropdown_close) + member, func(lvx_member) + } @const_object_info_end */ @@ -2904,28 +1680,8 @@ void be_load_lv_gauge_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_gauge_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_gauge_create }, - { "set_needle_count", lvbe_gauge_set_needle_count }, - { "set_value", lvbe_gauge_set_value }, - { "set_range", lvbe_gauge_set_range }, - { "set_critical_value", lvbe_gauge_set_critical_value }, - { "set_scale", lvbe_gauge_set_scale }, - { "set_angle_offset", lvbe_gauge_set_angle_offset }, - { "set_needle_img", lvbe_gauge_set_needle_img }, - { "set_formatter_cb", lvbe_gauge_set_formatter_cb }, - { "get_value", lvbe_gauge_get_value }, - { "get_needle_count", lvbe_gauge_get_needle_count }, - { "get_min_value", lvbe_gauge_get_min_value }, - { "get_max_value", lvbe_gauge_get_max_value }, - { "get_critical_value", lvbe_gauge_get_critical_value }, - { "get_label_count", lvbe_gauge_get_label_count }, - { "get_line_count", lvbe_gauge_get_line_count }, - { "get_scale_angle", lvbe_gauge_get_scale_angle }, - { "get_angle_offset", lvbe_gauge_get_angle_offset }, - { "get_needle_img", lvbe_gauge_get_needle_img }, - { "get_needle_img_pivot_x", lvbe_gauge_get_needle_img_pivot_x }, - { "get_needle_img_pivot_y", lvbe_gauge_get_needle_img_pivot_y }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -2949,27 +1705,8 @@ class be_class_lv_gauge (scope: global, name: lv_gauge, super: be_class_lv_obj) .p, var init, func(lvbe_gauge_create) tostring, func(lvx_tostring) - create, func(lvbe_gauge_create) - set_needle_count, func(lvbe_gauge_set_needle_count) - set_value, func(lvbe_gauge_set_value) - set_range, func(lvbe_gauge_set_range) - set_critical_value, func(lvbe_gauge_set_critical_value) - set_scale, func(lvbe_gauge_set_scale) - set_angle_offset, func(lvbe_gauge_set_angle_offset) - set_needle_img, func(lvbe_gauge_set_needle_img) - set_formatter_cb, func(lvbe_gauge_set_formatter_cb) - get_value, func(lvbe_gauge_get_value) - get_needle_count, func(lvbe_gauge_get_needle_count) - get_min_value, func(lvbe_gauge_get_min_value) - get_max_value, func(lvbe_gauge_get_max_value) - get_critical_value, func(lvbe_gauge_get_critical_value) - get_label_count, func(lvbe_gauge_get_label_count) - get_line_count, func(lvbe_gauge_get_line_count) - get_scale_angle, func(lvbe_gauge_get_scale_angle) - get_angle_offset, func(lvbe_gauge_get_angle_offset) - get_needle_img, func(lvbe_gauge_get_needle_img) - get_needle_img_pivot_x, func(lvbe_gauge_get_needle_img_pivot_x) - get_needle_img_pivot_y, func(lvbe_gauge_get_needle_img_pivot_y) + member, func(lvx_member) + } @const_object_info_end */ @@ -2979,14 +1716,8 @@ void be_load_lv_imgbtn_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_imgbtn_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_imgbtn_create }, - { "set_src", lvbe_imgbtn_set_src }, - { "set_state", lvbe_imgbtn_set_state }, - { "toggle", lvbe_imgbtn_toggle }, - { "set_checkable", lvbe_imgbtn_set_checkable }, - { "get_src", lvbe_imgbtn_get_src }, - { "get_state", lvbe_imgbtn_get_state }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -3010,13 +1741,8 @@ class be_class_lv_imgbtn (scope: global, name: lv_imgbtn, super: be_class_lv_obj .p, var init, func(lvbe_imgbtn_create) tostring, func(lvx_tostring) - create, func(lvbe_imgbtn_create) - set_src, func(lvbe_imgbtn_set_src) - set_state, func(lvbe_imgbtn_set_state) - toggle, func(lvbe_imgbtn_toggle) - set_checkable, func(lvbe_imgbtn_set_checkable) - get_src, func(lvbe_imgbtn_get_src) - get_state, func(lvbe_imgbtn_get_state) + member, func(lvx_member) + } @const_object_info_end */ @@ -3026,17 +1752,8 @@ void be_load_lv_keyboard_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_keyboard_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_keyboard_create }, - { "set_textarea", lvbe_keyboard_set_textarea }, - { "set_mode", lvbe_keyboard_set_mode }, - { "set_cursor_manage", lvbe_keyboard_set_cursor_manage }, - { "set_map", lvbe_keyboard_set_map }, - { "set_ctrl_map", lvbe_keyboard_set_ctrl_map }, - { "get_textarea", lvbe_keyboard_get_textarea }, - { "get_mode", lvbe_keyboard_get_mode }, - { "get_cursor_manage", lvbe_keyboard_get_cursor_manage }, - { "def_event_cb", lvbe_keyboard_def_event_cb }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -3060,16 +1777,8 @@ class be_class_lv_keyboard (scope: global, name: lv_keyboard, super: be_class_lv .p, var init, func(lvbe_keyboard_create) tostring, func(lvx_tostring) - create, func(lvbe_keyboard_create) - set_textarea, func(lvbe_keyboard_set_textarea) - set_mode, func(lvbe_keyboard_set_mode) - set_cursor_manage, func(lvbe_keyboard_set_cursor_manage) - set_map, func(lvbe_keyboard_set_map) - set_ctrl_map, func(lvbe_keyboard_set_ctrl_map) - get_textarea, func(lvbe_keyboard_get_textarea) - get_mode, func(lvbe_keyboard_get_mode) - get_cursor_manage, func(lvbe_keyboard_get_cursor_manage) - def_event_cb, func(lvbe_keyboard_def_event_cb) + member, func(lvx_member) + } @const_object_info_end */ @@ -3079,30 +1788,8 @@ void be_load_lv_label_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_label_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_label_create }, - { "set_text", lvbe_label_set_text }, - { "set_text_fmt", lvbe_label_set_text_fmt }, - { "set_text_static", lvbe_label_set_text_static }, - { "set_long_mode", lvbe_label_set_long_mode }, - { "set_align", lvbe_label_set_align }, - { "set_recolor", lvbe_label_set_recolor }, - { "set_anim_speed", lvbe_label_set_anim_speed }, - { "set_text_sel_start", lvbe_label_set_text_sel_start }, - { "set_text_sel_end", lvbe_label_set_text_sel_end }, - { "get_text", lvbe_label_get_text }, - { "get_long_mode", lvbe_label_get_long_mode }, - { "get_align", lvbe_label_get_align }, - { "get_recolor", lvbe_label_get_recolor }, - { "get_anim_speed", lvbe_label_get_anim_speed }, - { "get_letter_pos", lvbe_label_get_letter_pos }, - { "get_letter_on", lvbe_label_get_letter_on }, - { "is_char_under_pos", lvbe_label_is_char_under_pos }, - { "get_text_sel_start", lvbe_label_get_text_sel_start }, - { "get_text_sel_end", lvbe_label_get_text_sel_end }, - { "ins_text", lvbe_label_ins_text }, - { "cut_text", lvbe_label_cut_text }, - { "refr_text", lvbe_label_refr_text }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -3126,29 +1813,8 @@ class be_class_lv_label (scope: global, name: lv_label, super: be_class_lv_obj) .p, var init, func(lvbe_label_create) tostring, func(lvx_tostring) - create, func(lvbe_label_create) - set_text, func(lvbe_label_set_text) - set_text_fmt, func(lvbe_label_set_text_fmt) - set_text_static, func(lvbe_label_set_text_static) - set_long_mode, func(lvbe_label_set_long_mode) - set_align, func(lvbe_label_set_align) - set_recolor, func(lvbe_label_set_recolor) - set_anim_speed, func(lvbe_label_set_anim_speed) - set_text_sel_start, func(lvbe_label_set_text_sel_start) - set_text_sel_end, func(lvbe_label_set_text_sel_end) - get_text, func(lvbe_label_get_text) - get_long_mode, func(lvbe_label_get_long_mode) - get_align, func(lvbe_label_get_align) - get_recolor, func(lvbe_label_get_recolor) - get_anim_speed, func(lvbe_label_get_anim_speed) - get_letter_pos, func(lvbe_label_get_letter_pos) - get_letter_on, func(lvbe_label_get_letter_on) - is_char_under_pos, func(lvbe_label_is_char_under_pos) - get_text_sel_start, func(lvbe_label_get_text_sel_start) - get_text_sel_end, func(lvbe_label_get_text_sel_end) - ins_text, func(lvbe_label_ins_text) - cut_text, func(lvbe_label_cut_text) - refr_text, func(lvbe_label_refr_text) + member, func(lvx_member) + } @const_object_info_end */ @@ -3158,13 +1824,8 @@ void be_load_lv_led_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_led_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_led_create }, - { "set_bright", lvbe_led_set_bright }, - { "on", lvbe_led_on }, - { "off", lvbe_led_off }, - { "toggle", lvbe_led_toggle }, - { "get_bright", lvbe_led_get_bright }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -3188,12 +1849,8 @@ class be_class_lv_led (scope: global, name: lv_led, super: be_class_lv_obj) { .p, var init, func(lvbe_led_create) tostring, func(lvx_tostring) - create, func(lvbe_led_create) - set_bright, func(lvbe_led_set_bright) - on, func(lvbe_led_on) - off, func(lvbe_led_off) - toggle, func(lvbe_led_toggle) - get_bright, func(lvbe_led_get_bright) + member, func(lvx_member) + } @const_object_info_end */ @@ -3203,13 +1860,8 @@ void be_load_lv_line_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_line_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_line_create }, - { "set_points", lvbe_line_set_points }, - { "set_auto_size", lvbe_line_set_auto_size }, - { "set_y_invert", lvbe_line_set_y_invert }, - { "get_auto_size", lvbe_line_get_auto_size }, - { "get_y_invert", lvbe_line_get_y_invert }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -3233,12 +1885,8 @@ class be_class_lv_line (scope: global, name: lv_line, super: be_class_lv_obj) { .p, var init, func(lvbe_line_create) tostring, func(lvx_tostring) - create, func(lvbe_line_create) - set_points, func(lvbe_line_set_points) - set_auto_size, func(lvbe_line_set_auto_size) - set_y_invert, func(lvbe_line_set_y_invert) - get_auto_size, func(lvbe_line_get_auto_size) - get_y_invert, func(lvbe_line_get_y_invert) + member, func(lvx_member) + } @const_object_info_end */ @@ -3248,21 +1896,8 @@ void be_load_lv_linemeter_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_linemeter_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_linemeter_create }, - { "set_value", lvbe_linemeter_set_value }, - { "set_range", lvbe_linemeter_set_range }, - { "set_scale", lvbe_linemeter_set_scale }, - { "set_angle_offset", lvbe_linemeter_set_angle_offset }, - { "set_mirror", lvbe_linemeter_set_mirror }, - { "get_value", lvbe_linemeter_get_value }, - { "get_min_value", lvbe_linemeter_get_min_value }, - { "get_max_value", lvbe_linemeter_get_max_value }, - { "get_line_count", lvbe_linemeter_get_line_count }, - { "get_scale_angle", lvbe_linemeter_get_scale_angle }, - { "get_angle_offset", lvbe_linemeter_get_angle_offset }, - { "draw_scale", lvbe_linemeter_draw_scale }, - { "get_mirror", lvbe_linemeter_get_mirror }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -3286,20 +1921,8 @@ class be_class_lv_linemeter (scope: global, name: lv_linemeter, super: be_class_ .p, var init, func(lvbe_linemeter_create) tostring, func(lvx_tostring) - create, func(lvbe_linemeter_create) - set_value, func(lvbe_linemeter_set_value) - set_range, func(lvbe_linemeter_set_range) - set_scale, func(lvbe_linemeter_set_scale) - set_angle_offset, func(lvbe_linemeter_set_angle_offset) - set_mirror, func(lvbe_linemeter_set_mirror) - get_value, func(lvbe_linemeter_get_value) - get_min_value, func(lvbe_linemeter_get_min_value) - get_max_value, func(lvbe_linemeter_get_max_value) - get_line_count, func(lvbe_linemeter_get_line_count) - get_scale_angle, func(lvbe_linemeter_get_scale_angle) - get_angle_offset, func(lvbe_linemeter_get_angle_offset) - draw_scale, func(lvbe_linemeter_draw_scale) - get_mirror, func(lvbe_linemeter_get_mirror) + member, func(lvx_member) + } @const_object_info_end */ @@ -3309,33 +1932,8 @@ void be_load_lv_list_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_list_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_list_create }, - { "clean", lvbe_list_clean }, - { "add_btn", lvbe_list_add_btn }, - { "remove", lvbe_list_remove }, - { "focus_btn", lvbe_list_focus_btn }, - { "set_scrollbar_mode", lvbe_list_set_scrollbar_mode }, - { "set_scroll_propagation", lvbe_list_set_scroll_propagation }, - { "set_edge_flash", lvbe_list_set_edge_flash }, - { "set_anim_time", lvbe_list_set_anim_time }, - { "set_layout", lvbe_list_set_layout }, - { "get_btn_text", lvbe_list_get_btn_text }, - { "get_btn_label", lvbe_list_get_btn_label }, - { "get_btn_img", lvbe_list_get_btn_img }, - { "get_prev_btn", lvbe_list_get_prev_btn }, - { "get_next_btn", lvbe_list_get_next_btn }, - { "get_btn_index", lvbe_list_get_btn_index }, - { "get_size", lvbe_list_get_size }, - { "get_btn_selected", lvbe_list_get_btn_selected }, - { "get_layout", lvbe_list_get_layout }, - { "get_scrollbar_mode", lvbe_list_get_scrollbar_mode }, - { "get_scroll_propagation", lvbe_list_get_scroll_propagation }, - { "get_edge_flash", lvbe_list_get_edge_flash }, - { "get_anim_time", lvbe_list_get_anim_time }, - { "up", lvbe_list_up }, - { "down", lvbe_list_down }, - { "focus", lvbe_list_focus }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -3359,32 +1957,8 @@ class be_class_lv_list (scope: global, name: lv_list, super: be_class_lv_obj) { .p, var init, func(lvbe_list_create) tostring, func(lvx_tostring) - create, func(lvbe_list_create) - clean, func(lvbe_list_clean) - add_btn, func(lvbe_list_add_btn) - remove, func(lvbe_list_remove) - focus_btn, func(lvbe_list_focus_btn) - set_scrollbar_mode, func(lvbe_list_set_scrollbar_mode) - set_scroll_propagation, func(lvbe_list_set_scroll_propagation) - set_edge_flash, func(lvbe_list_set_edge_flash) - set_anim_time, func(lvbe_list_set_anim_time) - set_layout, func(lvbe_list_set_layout) - get_btn_text, func(lvbe_list_get_btn_text) - get_btn_label, func(lvbe_list_get_btn_label) - get_btn_img, func(lvbe_list_get_btn_img) - get_prev_btn, func(lvbe_list_get_prev_btn) - get_next_btn, func(lvbe_list_get_next_btn) - get_btn_index, func(lvbe_list_get_btn_index) - get_size, func(lvbe_list_get_size) - get_btn_selected, func(lvbe_list_get_btn_selected) - get_layout, func(lvbe_list_get_layout) - get_scrollbar_mode, func(lvbe_list_get_scrollbar_mode) - get_scroll_propagation, func(lvbe_list_get_scroll_propagation) - get_edge_flash, func(lvbe_list_get_edge_flash) - get_anim_time, func(lvbe_list_get_anim_time) - up, func(lvbe_list_up) - down, func(lvbe_list_down) - focus, func(lvbe_list_focus) + member, func(lvx_member) + } @const_object_info_end */ @@ -3394,21 +1968,8 @@ void be_load_lv_msgbox_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_msgbox_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_msgbox_create }, - { "add_btns", lvbe_msgbox_add_btns }, - { "set_text", lvbe_msgbox_set_text }, - { "set_text_fmt", lvbe_msgbox_set_text_fmt }, - { "set_anim_time", lvbe_msgbox_set_anim_time }, - { "start_auto_close", lvbe_msgbox_start_auto_close }, - { "stop_auto_close", lvbe_msgbox_stop_auto_close }, - { "set_recolor", lvbe_msgbox_set_recolor }, - { "get_text", lvbe_msgbox_get_text }, - { "get_active_btn", lvbe_msgbox_get_active_btn }, - { "get_active_btn_text", lvbe_msgbox_get_active_btn_text }, - { "get_anim_time", lvbe_msgbox_get_anim_time }, - { "get_recolor", lvbe_msgbox_get_recolor }, - { "get_btnmatrix", lvbe_msgbox_get_btnmatrix }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -3432,20 +1993,8 @@ class be_class_lv_msgbox (scope: global, name: lv_msgbox, super: be_class_lv_obj .p, var init, func(lvbe_msgbox_create) tostring, func(lvx_tostring) - create, func(lvbe_msgbox_create) - add_btns, func(lvbe_msgbox_add_btns) - set_text, func(lvbe_msgbox_set_text) - set_text_fmt, func(lvbe_msgbox_set_text_fmt) - set_anim_time, func(lvbe_msgbox_set_anim_time) - start_auto_close, func(lvbe_msgbox_start_auto_close) - stop_auto_close, func(lvbe_msgbox_stop_auto_close) - set_recolor, func(lvbe_msgbox_set_recolor) - get_text, func(lvbe_msgbox_get_text) - get_active_btn, func(lvbe_msgbox_get_active_btn) - get_active_btn_text, func(lvbe_msgbox_get_active_btn_text) - get_anim_time, func(lvbe_msgbox_get_anim_time) - get_recolor, func(lvbe_msgbox_get_recolor) - get_btnmatrix, func(lvbe_msgbox_get_btnmatrix) + member, func(lvx_member) + } @const_object_info_end */ @@ -3455,10 +2004,8 @@ void be_load_lv_objmask_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_objmask_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_objmask_create }, - { "update_mask", lvbe_objmask_update_mask }, - { "remove_mask", lvbe_objmask_remove_mask }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -3482,9 +2029,8 @@ class be_class_lv_objmask (scope: global, name: lv_objmask, super: be_class_lv_o .p, var init, func(lvbe_objmask_create) tostring, func(lvx_tostring) - create, func(lvbe_objmask_create) - update_mask, func(lvbe_objmask_update_mask) - remove_mask, func(lvbe_objmask_remove_mask) + member, func(lvx_member) + } @const_object_info_end */ @@ -3494,40 +2040,8 @@ void be_load_lv_page_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_page_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_page_create }, - { "clean", lvbe_page_clean }, - { "get_scrollable", lvbe_page_get_scrollable }, - { "get_anim_time", lvbe_page_get_anim_time }, - { "set_scrollbar_mode", lvbe_page_set_scrollbar_mode }, - { "set_anim_time", lvbe_page_set_anim_time }, - { "set_scroll_propagation", lvbe_page_set_scroll_propagation }, - { "set_edge_flash", lvbe_page_set_edge_flash }, - { "set_scrollable_fit2", lvbe_page_set_scrollable_fit2 }, - { "set_scrollable_fit", lvbe_page_set_scrollable_fit }, - { "set_scrl_width", lvbe_page_set_scrl_width }, - { "set_scrl_height", lvbe_page_set_scrl_height }, - { "set_scrl_layout", lvbe_page_set_scrl_layout }, - { "get_scrollbar_mode", lvbe_page_get_scrollbar_mode }, - { "get_scroll_propagation", lvbe_page_get_scroll_propagation }, - { "get_edge_flash", lvbe_page_get_edge_flash }, - { "get_width_fit", lvbe_page_get_width_fit }, - { "get_height_fit", lvbe_page_get_height_fit }, - { "get_width_grid", lvbe_page_get_width_grid }, - { "get_height_grid", lvbe_page_get_height_grid }, - { "get_scrl_width", lvbe_page_get_scrl_width }, - { "get_scrl_height", lvbe_page_get_scrl_height }, - { "get_scrl_layout", lvbe_page_get_scrl_layout }, - { "get_scrl_fit_left", lvbe_page_get_scrl_fit_left }, - { "get_scrl_fit_right", lvbe_page_get_scrl_fit_right }, - { "get_scrl_fit_top", lvbe_page_get_scrl_fit_top }, - { "get_scrl_fit_bottom", lvbe_page_get_scrl_fit_bottom }, - { "on_edge", lvbe_page_on_edge }, - { "glue_obj", lvbe_page_glue_obj }, - { "focus", lvbe_page_focus }, - { "scroll_hor", lvbe_page_scroll_hor }, - { "scroll_ver", lvbe_page_scroll_ver }, - { "start_edge_flash", lvbe_page_start_edge_flash }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -3551,39 +2065,8 @@ class be_class_lv_page (scope: global, name: lv_page, super: be_class_lv_obj) { .p, var init, func(lvbe_page_create) tostring, func(lvx_tostring) - create, func(lvbe_page_create) - clean, func(lvbe_page_clean) - get_scrollable, func(lvbe_page_get_scrollable) - get_anim_time, func(lvbe_page_get_anim_time) - set_scrollbar_mode, func(lvbe_page_set_scrollbar_mode) - set_anim_time, func(lvbe_page_set_anim_time) - set_scroll_propagation, func(lvbe_page_set_scroll_propagation) - set_edge_flash, func(lvbe_page_set_edge_flash) - set_scrollable_fit2, func(lvbe_page_set_scrollable_fit2) - set_scrollable_fit, func(lvbe_page_set_scrollable_fit) - set_scrl_width, func(lvbe_page_set_scrl_width) - set_scrl_height, func(lvbe_page_set_scrl_height) - set_scrl_layout, func(lvbe_page_set_scrl_layout) - get_scrollbar_mode, func(lvbe_page_get_scrollbar_mode) - get_scroll_propagation, func(lvbe_page_get_scroll_propagation) - get_edge_flash, func(lvbe_page_get_edge_flash) - get_width_fit, func(lvbe_page_get_width_fit) - get_height_fit, func(lvbe_page_get_height_fit) - get_width_grid, func(lvbe_page_get_width_grid) - get_height_grid, func(lvbe_page_get_height_grid) - get_scrl_width, func(lvbe_page_get_scrl_width) - get_scrl_height, func(lvbe_page_get_scrl_height) - get_scrl_layout, func(lvbe_page_get_scrl_layout) - get_scrl_fit_left, func(lvbe_page_get_scrl_fit_left) - get_scrl_fit_right, func(lvbe_page_get_scrl_fit_right) - get_scrl_fit_top, func(lvbe_page_get_scrl_fit_top) - get_scrl_fit_bottom, func(lvbe_page_get_scrl_fit_bottom) - on_edge, func(lvbe_page_on_edge) - glue_obj, func(lvbe_page_glue_obj) - focus, func(lvbe_page_focus) - scroll_hor, func(lvbe_page_scroll_hor) - scroll_ver, func(lvbe_page_scroll_ver) - start_edge_flash, func(lvbe_page_start_edge_flash) + member, func(lvx_member) + } @const_object_info_end */ @@ -3593,21 +2076,8 @@ void be_load_lv_roller_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_roller_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_roller_create }, - { "set_options", lvbe_roller_set_options }, - { "set_align", lvbe_roller_set_align }, - { "set_selected", lvbe_roller_set_selected }, - { "set_visible_row_count", lvbe_roller_set_visible_row_count }, - { "set_auto_fit", lvbe_roller_set_auto_fit }, - { "set_anim_time", lvbe_roller_set_anim_time }, - { "get_selected", lvbe_roller_get_selected }, - { "get_option_cnt", lvbe_roller_get_option_cnt }, - { "get_selected_str", lvbe_roller_get_selected_str }, - { "get_align", lvbe_roller_get_align }, - { "get_auto_fit", lvbe_roller_get_auto_fit }, - { "get_options", lvbe_roller_get_options }, - { "get_anim_time", lvbe_roller_get_anim_time }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -3631,20 +2101,8 @@ class be_class_lv_roller (scope: global, name: lv_roller, super: be_class_lv_obj .p, var init, func(lvbe_roller_create) tostring, func(lvx_tostring) - create, func(lvbe_roller_create) - set_options, func(lvbe_roller_set_options) - set_align, func(lvbe_roller_set_align) - set_selected, func(lvbe_roller_set_selected) - set_visible_row_count, func(lvbe_roller_set_visible_row_count) - set_auto_fit, func(lvbe_roller_set_auto_fit) - set_anim_time, func(lvbe_roller_set_anim_time) - get_selected, func(lvbe_roller_get_selected) - get_option_cnt, func(lvbe_roller_get_option_cnt) - get_selected_str, func(lvbe_roller_get_selected_str) - get_align, func(lvbe_roller_get_align) - get_auto_fit, func(lvbe_roller_get_auto_fit) - get_options, func(lvbe_roller_get_options) - get_anim_time, func(lvbe_roller_get_anim_time) + member, func(lvx_member) + } @const_object_info_end */ @@ -3654,20 +2112,8 @@ void be_load_lv_slider_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_slider_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_slider_create }, - { "set_value", lvbe_slider_set_value }, - { "set_left_value", lvbe_slider_set_left_value }, - { "set_range", lvbe_slider_set_range }, - { "set_anim_time", lvbe_slider_set_anim_time }, - { "set_type", lvbe_slider_set_type }, - { "get_value", lvbe_slider_get_value }, - { "get_left_value", lvbe_slider_get_left_value }, - { "get_min_value", lvbe_slider_get_min_value }, - { "get_max_value", lvbe_slider_get_max_value }, - { "is_dragged", lvbe_slider_is_dragged }, - { "get_anim_time", lvbe_slider_get_anim_time }, - { "get_type", lvbe_slider_get_type }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -3691,19 +2137,8 @@ class be_class_lv_slider (scope: global, name: lv_slider, super: be_class_lv_obj .p, var init, func(lvbe_slider_create) tostring, func(lvx_tostring) - create, func(lvbe_slider_create) - set_value, func(lvbe_slider_set_value) - set_left_value, func(lvbe_slider_set_left_value) - set_range, func(lvbe_slider_set_range) - set_anim_time, func(lvbe_slider_set_anim_time) - set_type, func(lvbe_slider_set_type) - get_value, func(lvbe_slider_get_value) - get_left_value, func(lvbe_slider_get_left_value) - get_min_value, func(lvbe_slider_get_min_value) - get_max_value, func(lvbe_slider_get_max_value) - is_dragged, func(lvbe_slider_is_dragged) - get_anim_time, func(lvbe_slider_get_anim_time) - get_type, func(lvbe_slider_get_type) + member, func(lvx_member) + } @const_object_info_end */ @@ -3713,21 +2148,8 @@ void be_load_lv_spinbox_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_spinbox_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_spinbox_create }, - { "set_rollover", lvbe_spinbox_set_rollover }, - { "set_value", lvbe_spinbox_set_value }, - { "set_digit_format", lvbe_spinbox_set_digit_format }, - { "set_step", lvbe_spinbox_set_step }, - { "set_range", lvbe_spinbox_set_range }, - { "set_padding_left", lvbe_spinbox_set_padding_left }, - { "get_rollover", lvbe_spinbox_get_rollover }, - { "get_value", lvbe_spinbox_get_value }, - { "get_step", lvbe_spinbox_get_step }, - { "step_next", lvbe_spinbox_step_next }, - { "step_prev", lvbe_spinbox_step_prev }, - { "increment", lvbe_spinbox_increment }, - { "decrement", lvbe_spinbox_decrement }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -3751,20 +2173,8 @@ class be_class_lv_spinbox (scope: global, name: lv_spinbox, super: be_class_lv_o .p, var init, func(lvbe_spinbox_create) tostring, func(lvx_tostring) - create, func(lvbe_spinbox_create) - set_rollover, func(lvbe_spinbox_set_rollover) - set_value, func(lvbe_spinbox_set_value) - set_digit_format, func(lvbe_spinbox_set_digit_format) - set_step, func(lvbe_spinbox_set_step) - set_range, func(lvbe_spinbox_set_range) - set_padding_left, func(lvbe_spinbox_set_padding_left) - get_rollover, func(lvbe_spinbox_get_rollover) - get_value, func(lvbe_spinbox_get_value) - get_step, func(lvbe_spinbox_get_step) - step_next, func(lvbe_spinbox_step_next) - step_prev, func(lvbe_spinbox_step_prev) - increment, func(lvbe_spinbox_increment) - decrement, func(lvbe_spinbox_decrement) + member, func(lvx_member) + } @const_object_info_end */ @@ -3774,17 +2184,8 @@ void be_load_lv_spinner_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_spinner_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_spinner_create }, - { "set_arc_length", lvbe_spinner_set_arc_length }, - { "set_spin_time", lvbe_spinner_set_spin_time }, - { "set_type", lvbe_spinner_set_type }, - { "set_dir", lvbe_spinner_set_dir }, - { "get_arc_length", lvbe_spinner_get_arc_length }, - { "get_spin_time", lvbe_spinner_get_spin_time }, - { "get_type", lvbe_spinner_get_type }, - { "get_dir", lvbe_spinner_get_dir }, - { "anim_cb", lvbe_spinner_anim_cb }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -3808,16 +2209,8 @@ class be_class_lv_spinner (scope: global, name: lv_spinner, super: be_class_lv_o .p, var init, func(lvbe_spinner_create) tostring, func(lvx_tostring) - create, func(lvbe_spinner_create) - set_arc_length, func(lvbe_spinner_set_arc_length) - set_spin_time, func(lvbe_spinner_set_spin_time) - set_type, func(lvbe_spinner_set_type) - set_dir, func(lvbe_spinner_set_dir) - get_arc_length, func(lvbe_spinner_get_arc_length) - get_spin_time, func(lvbe_spinner_get_spin_time) - get_type, func(lvbe_spinner_get_type) - get_dir, func(lvbe_spinner_get_dir) - anim_cb, func(lvbe_spinner_anim_cb) + member, func(lvx_member) + } @const_object_info_end */ @@ -3827,14 +2220,8 @@ void be_load_lv_switch_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_switch_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_switch_create }, - { "on", lvbe_switch_on }, - { "off", lvbe_switch_off }, - { "toggle", lvbe_switch_toggle }, - { "set_anim_time", lvbe_switch_set_anim_time }, - { "get_state", lvbe_switch_get_state }, - { "get_anim_time", lvbe_switch_get_anim_time }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -3858,13 +2245,8 @@ class be_class_lv_switch (scope: global, name: lv_switch, super: be_class_lv_obj .p, var init, func(lvbe_switch_create) tostring, func(lvx_tostring) - create, func(lvbe_switch_create) - on, func(lvbe_switch_on) - off, func(lvbe_switch_off) - toggle, func(lvbe_switch_toggle) - set_anim_time, func(lvbe_switch_set_anim_time) - get_state, func(lvbe_switch_get_state) - get_anim_time, func(lvbe_switch_get_anim_time) + member, func(lvx_member) + } @const_object_info_end */ @@ -3874,26 +2256,8 @@ void be_load_lv_table_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_table_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_table_create }, - { "set_cell_value", lvbe_table_set_cell_value }, - { "set_cell_value_fmt", lvbe_table_set_cell_value_fmt }, - { "set_row_cnt", lvbe_table_set_row_cnt }, - { "set_col_cnt", lvbe_table_set_col_cnt }, - { "set_col_width", lvbe_table_set_col_width }, - { "set_cell_align", lvbe_table_set_cell_align }, - { "set_cell_type", lvbe_table_set_cell_type }, - { "set_cell_crop", lvbe_table_set_cell_crop }, - { "set_cell_merge_right", lvbe_table_set_cell_merge_right }, - { "get_cell_value", lvbe_table_get_cell_value }, - { "get_row_cnt", lvbe_table_get_row_cnt }, - { "get_col_cnt", lvbe_table_get_col_cnt }, - { "get_col_width", lvbe_table_get_col_width }, - { "get_cell_align", lvbe_table_get_cell_align }, - { "get_cell_type", lvbe_table_get_cell_type }, - { "get_cell_crop", lvbe_table_get_cell_crop }, - { "get_cell_merge_right", lvbe_table_get_cell_merge_right }, - { "get_pressed_cell", lvbe_table_get_pressed_cell }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -3917,25 +2281,8 @@ class be_class_lv_table (scope: global, name: lv_table, super: be_class_lv_obj) .p, var init, func(lvbe_table_create) tostring, func(lvx_tostring) - create, func(lvbe_table_create) - set_cell_value, func(lvbe_table_set_cell_value) - set_cell_value_fmt, func(lvbe_table_set_cell_value_fmt) - set_row_cnt, func(lvbe_table_set_row_cnt) - set_col_cnt, func(lvbe_table_set_col_cnt) - set_col_width, func(lvbe_table_set_col_width) - set_cell_align, func(lvbe_table_set_cell_align) - set_cell_type, func(lvbe_table_set_cell_type) - set_cell_crop, func(lvbe_table_set_cell_crop) - set_cell_merge_right, func(lvbe_table_set_cell_merge_right) - get_cell_value, func(lvbe_table_get_cell_value) - get_row_cnt, func(lvbe_table_get_row_cnt) - get_col_cnt, func(lvbe_table_get_col_cnt) - get_col_width, func(lvbe_table_get_col_width) - get_cell_align, func(lvbe_table_get_cell_align) - get_cell_type, func(lvbe_table_get_cell_type) - get_cell_crop, func(lvbe_table_get_cell_crop) - get_cell_merge_right, func(lvbe_table_get_cell_merge_right) - get_pressed_cell, func(lvbe_table_get_pressed_cell) + member, func(lvx_member) + } @const_object_info_end */ @@ -3945,19 +2292,8 @@ void be_load_lv_tabview_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_tabview_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_tabview_create }, - { "add_tab", lvbe_tabview_add_tab }, - { "clean_tab", lvbe_tabview_clean_tab }, - { "set_tab_act", lvbe_tabview_set_tab_act }, - { "set_tab_name", lvbe_tabview_set_tab_name }, - { "set_anim_time", lvbe_tabview_set_anim_time }, - { "set_btns_pos", lvbe_tabview_set_btns_pos }, - { "get_tab_act", lvbe_tabview_get_tab_act }, - { "get_tab_count", lvbe_tabview_get_tab_count }, - { "get_tab", lvbe_tabview_get_tab }, - { "get_anim_time", lvbe_tabview_get_anim_time }, - { "get_btns_pos", lvbe_tabview_get_btns_pos }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -3981,18 +2317,8 @@ class be_class_lv_tabview (scope: global, name: lv_tabview, super: be_class_lv_o .p, var init, func(lvbe_tabview_create) tostring, func(lvx_tostring) - create, func(lvbe_tabview_create) - add_tab, func(lvbe_tabview_add_tab) - clean_tab, func(lvbe_tabview_clean_tab) - set_tab_act, func(lvbe_tabview_set_tab_act) - set_tab_name, func(lvbe_tabview_set_tab_name) - set_anim_time, func(lvbe_tabview_set_anim_time) - set_btns_pos, func(lvbe_tabview_set_btns_pos) - get_tab_act, func(lvbe_tabview_get_tab_act) - get_tab_count, func(lvbe_tabview_get_tab_count) - get_tab, func(lvbe_tabview_get_tab) - get_anim_time, func(lvbe_tabview_get_anim_time) - get_btns_pos, func(lvbe_tabview_get_btns_pos) + member, func(lvx_member) + } @const_object_info_end */ @@ -4002,51 +2328,8 @@ void be_load_lv_textarea_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_textarea_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_textarea_create }, - { "add_char", lvbe_textarea_add_char }, - { "add_text", lvbe_textarea_add_text }, - { "del_char", lvbe_textarea_del_char }, - { "del_char_forward", lvbe_textarea_del_char_forward }, - { "set_text", lvbe_textarea_set_text }, - { "set_placeholder_text", lvbe_textarea_set_placeholder_text }, - { "set_cursor_pos", lvbe_textarea_set_cursor_pos }, - { "set_cursor_hidden", lvbe_textarea_set_cursor_hidden }, - { "set_cursor_click_pos", lvbe_textarea_set_cursor_click_pos }, - { "set_pwd_mode", lvbe_textarea_set_pwd_mode }, - { "set_one_line", lvbe_textarea_set_one_line }, - { "set_text_align", lvbe_textarea_set_text_align }, - { "set_accepted_chars", lvbe_textarea_set_accepted_chars }, - { "set_max_length", lvbe_textarea_set_max_length }, - { "set_insert_replace", lvbe_textarea_set_insert_replace }, - { "set_scrollbar_mode", lvbe_textarea_set_scrollbar_mode }, - { "set_scroll_propagation", lvbe_textarea_set_scroll_propagation }, - { "set_edge_flash", lvbe_textarea_set_edge_flash }, - { "set_text_sel", lvbe_textarea_set_text_sel }, - { "set_pwd_show_time", lvbe_textarea_set_pwd_show_time }, - { "set_cursor_blink_time", lvbe_textarea_set_cursor_blink_time }, - { "get_text", lvbe_textarea_get_text }, - { "get_placeholder_text", lvbe_textarea_get_placeholder_text }, - { "get_label", lvbe_textarea_get_label }, - { "get_cursor_pos", lvbe_textarea_get_cursor_pos }, - { "get_cursor_hidden", lvbe_textarea_get_cursor_hidden }, - { "get_cursor_click_pos", lvbe_textarea_get_cursor_click_pos }, - { "get_pwd_mode", lvbe_textarea_get_pwd_mode }, - { "get_one_line", lvbe_textarea_get_one_line }, - { "get_accepted_chars", lvbe_textarea_get_accepted_chars }, - { "get_max_length", lvbe_textarea_get_max_length }, - { "get_scrollbar_mode", lvbe_textarea_get_scrollbar_mode }, - { "get_scroll_propagation", lvbe_textarea_get_scroll_propagation }, - { "get_edge_flash", lvbe_textarea_get_edge_flash }, - { "text_is_selected", lvbe_textarea_text_is_selected }, - { "get_text_sel_en", lvbe_textarea_get_text_sel_en }, - { "get_pwd_show_time", lvbe_textarea_get_pwd_show_time }, - { "get_cursor_blink_time", lvbe_textarea_get_cursor_blink_time }, - { "clear_selection", lvbe_textarea_clear_selection }, - { "cursor_right", lvbe_textarea_cursor_right }, - { "cursor_left", lvbe_textarea_cursor_left }, - { "cursor_down", lvbe_textarea_cursor_down }, - { "cursor_up", lvbe_textarea_cursor_up }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -4070,50 +2353,8 @@ class be_class_lv_textarea (scope: global, name: lv_textarea, super: be_class_lv .p, var init, func(lvbe_textarea_create) tostring, func(lvx_tostring) - create, func(lvbe_textarea_create) - add_char, func(lvbe_textarea_add_char) - add_text, func(lvbe_textarea_add_text) - del_char, func(lvbe_textarea_del_char) - del_char_forward, func(lvbe_textarea_del_char_forward) - set_text, func(lvbe_textarea_set_text) - set_placeholder_text, func(lvbe_textarea_set_placeholder_text) - set_cursor_pos, func(lvbe_textarea_set_cursor_pos) - set_cursor_hidden, func(lvbe_textarea_set_cursor_hidden) - set_cursor_click_pos, func(lvbe_textarea_set_cursor_click_pos) - set_pwd_mode, func(lvbe_textarea_set_pwd_mode) - set_one_line, func(lvbe_textarea_set_one_line) - set_text_align, func(lvbe_textarea_set_text_align) - set_accepted_chars, func(lvbe_textarea_set_accepted_chars) - set_max_length, func(lvbe_textarea_set_max_length) - set_insert_replace, func(lvbe_textarea_set_insert_replace) - set_scrollbar_mode, func(lvbe_textarea_set_scrollbar_mode) - set_scroll_propagation, func(lvbe_textarea_set_scroll_propagation) - set_edge_flash, func(lvbe_textarea_set_edge_flash) - set_text_sel, func(lvbe_textarea_set_text_sel) - set_pwd_show_time, func(lvbe_textarea_set_pwd_show_time) - set_cursor_blink_time, func(lvbe_textarea_set_cursor_blink_time) - get_text, func(lvbe_textarea_get_text) - get_placeholder_text, func(lvbe_textarea_get_placeholder_text) - get_label, func(lvbe_textarea_get_label) - get_cursor_pos, func(lvbe_textarea_get_cursor_pos) - get_cursor_hidden, func(lvbe_textarea_get_cursor_hidden) - get_cursor_click_pos, func(lvbe_textarea_get_cursor_click_pos) - get_pwd_mode, func(lvbe_textarea_get_pwd_mode) - get_one_line, func(lvbe_textarea_get_one_line) - get_accepted_chars, func(lvbe_textarea_get_accepted_chars) - get_max_length, func(lvbe_textarea_get_max_length) - get_scrollbar_mode, func(lvbe_textarea_get_scrollbar_mode) - get_scroll_propagation, func(lvbe_textarea_get_scroll_propagation) - get_edge_flash, func(lvbe_textarea_get_edge_flash) - text_is_selected, func(lvbe_textarea_text_is_selected) - get_text_sel_en, func(lvbe_textarea_get_text_sel_en) - get_pwd_show_time, func(lvbe_textarea_get_pwd_show_time) - get_cursor_blink_time, func(lvbe_textarea_get_cursor_blink_time) - clear_selection, func(lvbe_textarea_clear_selection) - cursor_right, func(lvbe_textarea_cursor_right) - cursor_left, func(lvbe_textarea_cursor_left) - cursor_down, func(lvbe_textarea_cursor_down) - cursor_up, func(lvbe_textarea_cursor_up) + member, func(lvx_member) + } @const_object_info_end */ @@ -4123,16 +2364,8 @@ void be_load_lv_tileview_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_tileview_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_tileview_create }, - { "add_element", lvbe_tileview_add_element }, - { "set_valid_positions", lvbe_tileview_set_valid_positions }, - { "set_tile_act", lvbe_tileview_set_tile_act }, - { "set_edge_flash", lvbe_tileview_set_edge_flash }, - { "set_anim_time", lvbe_tileview_set_anim_time }, - { "get_tile_act", lvbe_tileview_get_tile_act }, - { "get_edge_flash", lvbe_tileview_get_edge_flash }, - { "get_anim_time", lvbe_tileview_get_anim_time }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -4156,15 +2389,8 @@ class be_class_lv_tileview (scope: global, name: lv_tileview, super: be_class_lv .p, var init, func(lvbe_tileview_create) tostring, func(lvx_tostring) - create, func(lvbe_tileview_create) - add_element, func(lvbe_tileview_add_element) - set_valid_positions, func(lvbe_tileview_set_valid_positions) - set_tile_act, func(lvbe_tileview_set_tile_act) - set_edge_flash, func(lvbe_tileview_set_edge_flash) - set_anim_time, func(lvbe_tileview_set_anim_time) - get_tile_act, func(lvbe_tileview_get_tile_act) - get_edge_flash, func(lvbe_tileview_get_edge_flash) - get_anim_time, func(lvbe_tileview_get_anim_time) + member, func(lvx_member) + } @const_object_info_end */ @@ -4174,35 +2400,8 @@ void be_load_lv_win_lib(bvm *vm) { { ".p", NULL }, { "init", lvbe_win_create }, { "tostring", lvx_tostring }, + { "member", lvx_member }, - { "create", lvbe_win_create }, - { "clean", lvbe_win_clean }, - { "add_btn_right", lvbe_win_add_btn_right }, - { "add_btn_left", lvbe_win_add_btn_left }, - { "close_event_cb", lvbe_win_close_event_cb }, - { "set_title", lvbe_win_set_title }, - { "set_header_height", lvbe_win_set_header_height }, - { "set_btn_width", lvbe_win_set_btn_width }, - { "set_content_size", lvbe_win_set_content_size }, - { "set_layout", lvbe_win_set_layout }, - { "set_scrollbar_mode", lvbe_win_set_scrollbar_mode }, - { "set_anim_time", lvbe_win_set_anim_time }, - { "set_drag", lvbe_win_set_drag }, - { "title_set_alignment", lvbe_win_title_set_alignment }, - { "get_title", lvbe_win_get_title }, - { "get_content", lvbe_win_get_content }, - { "get_header_height", lvbe_win_get_header_height }, - { "get_btn_width", lvbe_win_get_btn_width }, - { "get_from_btn", lvbe_win_get_from_btn }, - { "get_layout", lvbe_win_get_layout }, - { "get_sb_mode", lvbe_win_get_sb_mode }, - { "get_anim_time", lvbe_win_get_anim_time }, - { "get_width", lvbe_win_get_width }, - { "get_drag", lvbe_win_get_drag }, - { "title_get_alignment", lvbe_win_title_get_alignment }, - { "focus", lvbe_win_focus }, - { "scroll_hor", lvbe_win_scroll_hor }, - { "scroll_ver", lvbe_win_scroll_ver }, // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ @@ -4226,34 +2425,8 @@ class be_class_lv_win (scope: global, name: lv_win, super: be_class_lv_obj) { .p, var init, func(lvbe_win_create) tostring, func(lvx_tostring) - create, func(lvbe_win_create) - clean, func(lvbe_win_clean) - add_btn_right, func(lvbe_win_add_btn_right) - add_btn_left, func(lvbe_win_add_btn_left) - close_event_cb, func(lvbe_win_close_event_cb) - set_title, func(lvbe_win_set_title) - set_header_height, func(lvbe_win_set_header_height) - set_btn_width, func(lvbe_win_set_btn_width) - set_content_size, func(lvbe_win_set_content_size) - set_layout, func(lvbe_win_set_layout) - set_scrollbar_mode, func(lvbe_win_set_scrollbar_mode) - set_anim_time, func(lvbe_win_set_anim_time) - set_drag, func(lvbe_win_set_drag) - title_set_alignment, func(lvbe_win_title_set_alignment) - get_title, func(lvbe_win_get_title) - get_content, func(lvbe_win_get_content) - get_header_height, func(lvbe_win_get_header_height) - get_btn_width, func(lvbe_win_get_btn_width) - get_from_btn, func(lvbe_win_get_from_btn) - get_layout, func(lvbe_win_get_layout) - get_sb_mode, func(lvbe_win_get_sb_mode) - get_anim_time, func(lvbe_win_get_anim_time) - get_width, func(lvbe_win_get_width) - get_drag, func(lvbe_win_get_drag) - title_get_alignment, func(lvbe_win_title_get_alignment) - focus, func(lvbe_win_focus) - scroll_hor, func(lvbe_win_scroll_hor) - scroll_ver, func(lvbe_win_scroll_ver) + member, func(lvx_member) + } @const_object_info_end */ diff --git a/lib/libesp32/Berry/generate/be_const_strtab.h b/lib/libesp32/Berry/generate/be_const_strtab.h index a35c8c5a1..52d95792d 100644 --- a/lib/libesp32/Berry/generate/be_const_strtab.h +++ b/lib/libesp32/Berry/generate/be_const_strtab.h @@ -1,1727 +1,563 @@ -extern const bcstring be_const_str_set_bg_angles; -extern const bcstring be_const_str_BACKLIGHT; -extern const bcstring be_const_str_get_min_value; -extern const bcstring be_const_str_def; -extern const bcstring be_const_str_ALIGN_OUT_TOP_MID; -extern const bcstring be_const_str_TEXT_DECOR_UNDERLINE; -extern const bcstring be_const_str_dump; -extern const bcstring be_const_str_get_y_invert; -extern const bcstring be_const_str_cut_text; -extern const bcstring be_const_str_remove_all_objs; -extern const bcstring be_const_str_input; -extern const bcstring be_const_str_continue; -extern const bcstring be_const_str_HRE_CLOCK; -extern const bcstring be_const_str_list_init; -extern const bcstring be_const_str_get_style_pattern_image; -extern const bcstring be_const_str_STYLE_LINE_OPA; -extern const bcstring be_const_str_get_critical_value; -extern const bcstring be_const_str_dot_p; -extern const bcstring be_const_str_ALIGN_CENTER; -extern const bcstring be_const_str_FS_RES_OUT_OF_MEM; -extern const bcstring be_const_str_set_angles; -extern const bcstring be_const_str_reset_style_list; -extern const bcstring be_const_str_AZ_TXD; -extern const bcstring be_const_str_MAX31855DO; -extern const bcstring be_const_str_SSPI_DC; -extern const bcstring be_const_str_set_options_static; -extern const bcstring be_const_str_HLW_CF; -extern const bcstring be_const_str_REL1_INV; -extern const bcstring be_const_str_del_char; -extern const bcstring be_const_str_LAYOUT_PRETTY_BOTTOM; -extern const bcstring be_const_str_lv_spinbox; -extern const bcstring be_const_str_set_style_local_pad_right; -extern const bcstring be_const_str_KEY_UP; -extern const bcstring be_const_str_set_needle_count; -extern const bcstring be_const_str_DCKI; -extern const bcstring be_const_str_MCP39F5_TX; -extern const bcstring be_const_str_SDM630_RX; -extern const bcstring be_const_str_draw_polygon; -extern const bcstring be_const_str_write_bytes; -extern const bcstring be_const_str_TEAL; -extern const bcstring be_const_str_imax; -extern const bcstring be_const_str_INPUT; -extern const bcstring be_const_str_lv_dropdown; -extern const bcstring be_const_str_set_title; -extern const bcstring be_const_str_LE01MR_RX; -extern const bcstring be_const_str_set_border_post; -extern const bcstring be_const_str_if; -extern const bcstring be_const_str_ALIGN_OUT_BOTTOM_RIGHT; -extern const bcstring be_const_str_BTNMATRIX_CTRL_DISABLED; -extern const bcstring be_const_str_STYLE_PATTERN_REPEAT; -extern const bcstring be_const_str_SWT1_NP; -extern const bcstring be_const_str_set_highlighted_dates; -extern const bcstring be_const_str_FS_RES_DENIED; -extern const bcstring be_const_str_SYMBOL_VOLUME_MAX; -extern const bcstring be_const_str_asstring; -extern const bcstring be_const_str_init_draw_line_dsc; -extern const bcstring be_const_str_top; -extern const bcstring be_const_str_PROJECTOR_CTRL_TX; -extern const bcstring be_const_str_ARIRFRCV; -extern const bcstring be_const_str_TXT_FLAG_RIGHT; -extern const bcstring be_const_str_set_style_local_margin_left; -extern const bcstring be_const_str_set_scrollable_fit; -extern const bcstring be_const_str_LED1_INV; -extern const bcstring be_const_str_get_mirror; -extern const bcstring be_const_str_get_zoom; -extern const bcstring be_const_str_lv_img; -extern const bcstring be_const_str_EVENT_PRESSED; -extern const bcstring be_const_str_set_style_local_bg_opa; -extern const bcstring be_const_str_FTC532; -extern const bcstring be_const_str_KEY_END; -extern const bcstring be_const_str_get_style_line_color; -extern const bcstring be_const_str_lv_slider; -extern const bcstring be_const_str_resp_cmnd; -extern const bcstring be_const_str_set_cursor_point; -extern const bcstring be_const_str_ANIM_ON; -extern const bcstring be_const_str_load_font; -extern const bcstring be_const_str_EVENT_DRAG_THROW_BEGIN; -extern const bcstring be_const_str_add_driver; -extern const bcstring be_const_str__write; -extern const bcstring be_const_str_set_tasmota_logo; -extern const bcstring be_const_str_SDM120_TX; -extern const bcstring be_const_str_SYMBOL_CALL; -extern const bcstring be_const_str_PROTECT_NONE; -extern const bcstring be_const_str_count; -extern const bcstring be_const_str_clear_selection; -extern const bcstring be_const_str_get_size; -extern const bcstring be_const_str_set_style_local_transform_height; -extern const bcstring be_const_str_TCP_TX; -extern const bcstring be_const_str_set_scale_end_line_width; -extern const bcstring be_const_str_set_transform_width; -extern const bcstring be_const_str_del_async; -extern const bcstring be_const_str_FS_RES_UNKNOWN; -extern const bcstring be_const_str_LAYOUT_GRID; -extern const bcstring be_const_str_STATE_CHECKED; -extern const bcstring be_const_str_STYLE_LINE_BLEND_MODE; -extern const bcstring be_const_str_get_options; -extern const bcstring be_const_str_finish_transitions; -extern const bcstring be_const_str_get_style_value_str; -extern const bcstring be_const_str_set_bg_opa; -extern const bcstring be_const_str_set_cursor_click_pos; -extern const bcstring be_const_str_get_hor_res; -extern const bcstring be_const_str_get_placeholder_text; -extern const bcstring be_const_str_get_point_id; -extern const bcstring be_const_str_LAYOUT_OFF; -extern const bcstring be_const_str_log; -extern const bcstring be_const_str_lv_obj; -extern const bcstring be_const_str_TM1637DIO; -extern const bcstring be_const_str_lv_textarea; -extern const bcstring be_const_str_set_scale_grad_color; -extern const bcstring be_const_str_BTN_STATE_DISABLED; -extern const bcstring be_const_str_get_group; -extern const bcstring be_const_str_HALLEFFECT; -extern const bcstring be_const_str_SCROLLBAR_MODE_UNHIDE; -extern const bcstring be_const_str_SM2135_CLK; -extern const bcstring be_const_str_get_style_radius; -extern const bcstring be_const_str_remove_obj; -extern const bcstring be_const_str_SYMBOL_BATTERY_FULL; -extern const bcstring be_const_str__drivers; -extern const bcstring be_const_str_set_update_mode; -extern const bcstring be_const_str_EVENT_INSERT; -extern const bcstring be_const_str_set_header_height; -extern const bcstring be_const_str_get_accepted_chars; -extern const bcstring be_const_str_set_checkable; -extern const bcstring be_const_str_CNTR1_NP; -extern const bcstring be_const_str_I2C; -extern const bcstring be_const_str_set_shadow_width; -extern const bcstring be_const_str_try_rule; -extern const bcstring be_const_str_close; -extern const bcstring be_const_str_set_color_mode_fixed; -extern const bcstring be_const_str_set_value; -extern const bcstring be_const_str_TABVIEW_TAB_POS_TOP; -extern const bcstring be_const_str_set_text_sel; -extern const bcstring be_const_str_EVENT_GESTURE; -extern const bcstring be_const_str_SYMBOL_CUT; -extern const bcstring be_const_str_BORDER_SIDE_INTERNAL; -extern const bcstring be_const_str_KEY_DEL; -extern const bcstring be_const_str_LAYOUT_COLUMN_RIGHT; -extern const bcstring be_const_str_DEEPSLEEP; -extern const bcstring be_const_str_get_style_text_opa; -extern const bcstring be_const_str_LABEL_ALIGN_AUTO; -extern const bcstring be_const_str_STYLE_IMAGE_RECOLOR_OPA; -extern const bcstring be_const_str_get_color; -extern const bcstring be_const_str_set_style_local_shadow_blend_mode; -extern const bcstring be_const_str_DISP_ROT_180; -extern const bcstring be_const_str_get_style_scale_border_width; -extern const bcstring be_const_str_save; -extern const bcstring be_const_str_SSD1351_CS; -extern const bcstring be_const_str_ALIGN_IN_LEFT_MID; -extern const bcstring be_const_str_set_points; -extern const bcstring be_const_str_text_is_selected; -extern const bcstring be_const_str_EVENT_FOCUSED; -extern const bcstring be_const_str_KEYBOARD_MODE_TEXT_LOWER; -extern const bcstring be_const_str_MP3_DFR562; -extern const bcstring be_const_str_STYLE_PATTERN_IMAGE; -extern const bcstring be_const_str_get_width_fit; -extern const bcstring be_const_str_GPS_RX; -extern const bcstring be_const_str_report_style_mod; -extern const bcstring be_const_str_isinstance; -extern const bcstring be_const_str_set_next; -extern const bcstring be_const_str_set_recolor; -extern const bcstring be_const_str_set_user_data; -extern const bcstring be_const_str_lv_indev; -extern const bcstring be_const_str_SSD1351_DC; -extern const bcstring be_const_str_SYMBOL_IMAGE; -extern const bcstring be_const_str_gamma8; -extern const bcstring be_const_str_set_color; -extern const bcstring be_const_str_FALLING; -extern const bcstring be_const_str_get_cursor_point; -extern const bcstring be_const_str_get_long_mode; -extern const bcstring be_const_str_json_append; -extern const bcstring be_const_str_lv_win; -extern const bcstring be_const_str_scroll_ver; -extern const bcstring be_const_str_set_shadow_opa; -extern const bcstring be_const_str_BTNMATRIX_CTRL_NO_REPEAT; -extern const bcstring be_const_str_blur_hor; -extern const bcstring be_const_str_set_style_local_text_blend_mode; -extern const bcstring be_const_str_reset; -extern const bcstring be_const_str_BLACK; -extern const bcstring be_const_str_DROPDOWN_DIR_UP; -extern const bcstring be_const_str_map; -extern const bcstring be_const_str_get_tab; -extern const bcstring be_const_str_set_formatter_cb; -extern const bcstring be_const_str_KEY1_NP; -extern const bcstring be_const_str_OUTPUT_LO; -extern const bcstring be_const_str_TXT_CMD_STATE_WAIT; -extern const bcstring be_const_str_set; -extern const bcstring be_const_str_get_show_selected; -extern const bcstring be_const_str_wire2; -extern const bcstring be_const_str_set_secondary_y_tick_length; -extern const bcstring be_const_str_set_style_local_pattern_recolor_opa; -extern const bcstring be_const_str_I2C_SCL; -extern const bcstring be_const_str_asin; -extern const bcstring be_const_str_PWM1_INV; -extern const bcstring be_const_str_set_show_selected; -extern const bcstring be_const_str_set_style_local_text_sel_color; -extern const bcstring be_const_str_SYMBOL_EDIT; -extern const bcstring be_const_str_set_parent_event; -extern const bcstring be_const_str_set_scrl_height; -extern const bcstring be_const_str_DHT22; -extern const bcstring be_const_str_set_shadow_color; -extern const bcstring be_const_str_align_mid_y; -extern const bcstring be_const_str_get_one_line; -extern const bcstring be_const_str_rad; -extern const bcstring be_const_str_set_start_value; -extern const bcstring be_const_str_CHART_CURSOR_LEFT; -extern const bcstring be_const_str_add_btn_left; -extern const bcstring be_const_str_get_option_cnt; -extern const bcstring be_const_str_WINDMETER_SPEED; -extern const bcstring be_const_str_every_second; -extern const bcstring be_const_str_set_series_axis; -extern const bcstring be_const_str_KEY_LEFT; -extern const bcstring be_const_str_ROLLER_MODE_INFINITE; -extern const bcstring be_const_str_add_btns; -extern const bcstring be_const_str_bytes; -extern const bcstring be_const_str_def_event_cb; -extern const bcstring be_const_str_set_bg_blend_mode; -extern const bcstring be_const_str_DROPDOWN_DIR_LEFT; -extern const bcstring be_const_str_STYLE_VALUE_OPA; -extern const bcstring be_const_str_draw_scale; -extern const bcstring be_const_str_push; -extern const bcstring be_const_str_read_bytes; -extern const bcstring be_const_str_set_style_local_margin_top; -extern const bcstring be_const_str_STYLE_OUTLINE_PAD; -extern const bcstring be_const_str_SYMBOL_LIST; -extern const bcstring be_const_str_TXT_FLAG_EXPAND; -extern const bcstring be_const_str_set_shadow_ofs_y; -extern const bcstring be_const_str_ILI9488_CS; -extern const bcstring be_const_str_layer_sys; -extern const bcstring be_const_str_ZIGBEE_TX; -extern const bcstring be_const_str_set_one_line; -extern const bcstring be_const_str_event; -extern const bcstring be_const_str_load_freetype_font; -extern const bcstring be_const_str_IBEACON_TX; -extern const bcstring be_const_str_STYLE_OUTLINE_WIDTH; -extern const bcstring be_const_str_SYMBOL_AUDIO; -extern const bcstring be_const_str_get_click; -extern const bcstring be_const_str_get_max_height; -extern const bcstring be_const_str_write; -extern const bcstring be_const_str_EXS_ENABLE; -extern const bcstring be_const_str_get_obj_act; -extern const bcstring be_const_str_IRRECV; -extern const bcstring be_const_str_HIGH; -extern const bcstring be_const_str_get_focused; -extern const bcstring be_const_str_get_style_opa_scale; -extern const bcstring be_const_str_get_style_shadow_width; -extern const bcstring be_const_str_EPAPER42_CS; -extern const bcstring be_const_str_get_max_length; -extern const bcstring be_const_str_set_power; -extern const bcstring be_const_str_set_style_local_outline_color; -extern const bcstring be_const_str_tan; -extern const bcstring be_const_str_TX2X_TXD_BLACK; -extern const bcstring be_const_str_init_points; -extern const bcstring be_const_str_set_point_count; -extern const bcstring be_const_str_TELEINFO_ENABLE; -extern const bcstring be_const_str_move_foreground; -extern const bcstring be_const_str_STYLE_PATTERN_BLEND_MODE; -extern const bcstring be_const_str_NRF24_DC; -extern const bcstring be_const_str_STYLE_OPA_SCALE; -extern const bcstring be_const_str_YELLOW; -extern const bcstring be_const_str_set_auto_size; -extern const bcstring be_const_str_MAX31855CS; -extern const bcstring be_const_str_get_hsv; -extern const bcstring be_const_str_SYMBOL_UPLOAD; -extern const bcstring be_const_str_set_align; -extern const bcstring be_const_str_STYLE_TEXT_LETTER_SPACE; -extern const bcstring be_const_str_add_option; -extern const bcstring be_const_str_GPS_TX; -extern const bcstring be_const_str__cmd; -extern const bcstring be_const_str_wire1; -extern const bcstring be_const_str_TABVIEW_TAB_POS_RIGHT; -extern const bcstring be_const_str_get_ext_draw_pad; -extern const bcstring be_const_str_set_scrollable_fit2; -extern const bcstring be_const_str_set_style_local_line_width; -extern const bcstring be_const_str_set_transform_height; -extern const bcstring be_const_str_BAR_TYPE_NORMAL; -extern const bcstring be_const_str_SPINNER_TYPE_FILLSPIN_ARC; -extern const bcstring be_const_str_STYLE_LINE_DASH_WIDTH; -extern const bcstring be_const_str_get_style_transform_angle; -extern const bcstring be_const_str_screenshot; -extern const bcstring be_const_str_ZIGBEE_RST; -extern const bcstring be_const_str_set_angle_offset; -extern const bcstring be_const_str_GREEN; -extern const bcstring be_const_str_SYMBOL_LEFT; -extern const bcstring be_const_str_WHITE; -extern const bcstring be_const_str_char; -extern const bcstring be_const_str_DHT11; -extern const bcstring be_const_str_ELECTRIQ_MOODL_TX; -extern const bcstring be_const_str_off; -extern const bcstring be_const_str_FIT_PARENT; -extern const bcstring be_const_str_OLIVE; -extern const bcstring be_const_str_align_mid_x; -extern const bcstring be_const_str_attrdump; -extern const bcstring be_const_str_digital_read; -extern const bcstring be_const_str_remove_style_local_prop; -extern const bcstring be_const_str_STYLE_LINE_WIDTH; -extern const bcstring be_const_str_get_color_mode_fixed; -extern const bcstring be_const_str_refresh_ext_draw_pad; -extern const bcstring be_const_str_set_value_str; -extern const bcstring be_const_str_ALIGN_OUT_LEFT_BOTTOM; -extern const bcstring be_const_str_get_start_value; -extern const bcstring be_const_str_set_row_cnt; -extern const bcstring be_const_str_BLEND_MODE_SUBTRACTIVE; -extern const bcstring be_const_str_set_shadow_ofs_x; -extern const bcstring be_const_str_ADC_TEMP; -extern const bcstring be_const_str_find_op; -extern const bcstring be_const_str_list_get_local_style; -extern const bcstring be_const_str_set_style_local_line_blend_mode; -extern const bcstring be_const_str_BOILER_OT_TX; -extern const bcstring be_const_str_SM16716_CLK; -extern const bcstring be_const_str_STYLE_BG_COLOR; -extern const bcstring be_const_str_set_text_sel_color; -extern const bcstring be_const_str_clear; -extern const bcstring be_const_str_set_pad_left; -extern const bcstring be_const_str_get_base_dir; -extern const bcstring be_const_str_get_style_pad_top; -extern const bcstring be_const_str_set_text_sel_end; -extern const bcstring be_const_str_set_tile_act; -extern const bcstring be_const_str_get_style_pattern_opa; -extern const bcstring be_const_str_set_transition_path; -extern const bcstring be_const_str_set_fit2; -extern const bcstring be_const_str_set_col_width; -extern const bcstring be_const_str_set_pwd_mode; -extern const bcstring be_const_str_get_style_transition_time; -extern const bcstring be_const_str_get_style_value_color; -extern const bcstring be_const_str_STYLE_PATTERN_OPA; -extern const bcstring be_const_str_STYLE_VALUE_LETTER_SPACE; -extern const bcstring be_const_str__ccmd; -extern const bcstring be_const_str_LABEL_LONG_SROLL_CIRC; -extern const bcstring be_const_str_STYLE_SHADOW_OPA; -extern const bcstring be_const_str_get_adjustable; -extern const bcstring be_const_str_HM10_RX; -extern const bcstring be_const_str_STYLE_MARGIN_TOP; -extern const bcstring be_const_str_lv_keyboard; -extern const bcstring be_const_str_set_border_width; -extern const bcstring be_const_str_get_label_count; -extern const bcstring be_const_str_get_text_sel_end; -extern const bcstring be_const_str_DDSU666_TX; -extern const bcstring be_const_str_set_pwd_show_time; -extern const bcstring be_const_str_set_style_local_line_color; -extern const bcstring be_const_str_DISP_ROT_90; -extern const bcstring be_const_str_TXD; -extern const bcstring be_const_str_SPI_CS; -extern const bcstring be_const_str_WE517_RX; -extern const bcstring be_const_str_set_pos; -extern const bcstring be_const_str_time_reached; -extern const bcstring be_const_str_init_draw_label_dsc; -extern const bcstring be_const_str_move_background; -extern const bcstring be_const_str_range; -extern const bcstring be_const_str_tostring; -extern const bcstring be_const_str_CC1101_GDO2; -extern const bcstring be_const_str_WEBCAM_SIOC; -extern const bcstring be_const_str_IEM3000_TX; -extern const bcstring be_const_str_STYLE_IMAGE_OPA; -extern const bcstring be_const_str_get_style_border_width; -extern const bcstring be_const_str_pop; -extern const bcstring be_const_str_BTN_STATE_RELEASED; -extern const bcstring be_const_str_STYLE_TEXT_OPA; -extern const bcstring be_const_str_SYMBOL_PLAY; -extern const bcstring be_const_str_set_x_start_point; -extern const bcstring be_const_str_get_btn_text; -extern const bcstring be_const_str_get_style_bg_grad_color; -extern const bcstring be_const_str_WEBCAM_PWDN; -extern const bcstring be_const_str_set_style_local_margin_right; -extern const bcstring be_const_str_time_str; -extern const bcstring be_const_str_set_style_local_scale_border_width; -extern const bcstring be_const_str_web_sensor; -extern const bcstring be_const_str_get_y_from_index; -extern const bcstring be_const_str_module; -extern const bcstring be_const_str_set_text_font; -extern const bcstring be_const_str_SM16716_DAT; -extern const bcstring be_const_str_focus_btn; -extern const bcstring be_const_str_get_fit_right; -extern const bcstring be_const_str_FS_RES_TOUT; -extern const bcstring be_const_str_get_auto_size; -extern const bcstring be_const_str_set_style_local_line_dash_gap; -extern const bcstring be_const_str_STYLE_OUTLINE_COLOR; -extern const bcstring be_const_str_STYLE_PAD_BOTTOM; -extern const bcstring be_const_str_MGC3130_RESET; -extern const bcstring be_const_str_get_protect; -extern const bcstring be_const_str_LIST_PART_BG; -extern const bcstring be_const_str_get_file_name; -extern const bcstring be_const_str_get_scrl_fit_right; -extern const bcstring be_const_str_draw_text; -extern const bcstring be_const_str_set_cell_crop; -extern const bcstring be_const_str_get_style_transition_prop_6; -extern const bcstring be_const_str_time_dump; -extern const bcstring be_const_str_fade_out; -extern const bcstring be_const_str_set_type; -extern const bcstring be_const_str_BTN_STATE_PRESSED; -extern const bcstring be_const_str_DDS2382_RX; -extern const bcstring be_const_str_get_letter_pos; -extern const bcstring be_const_str_lv_tabview; -extern const bcstring be_const_str_set_transition_delay; -extern const bcstring be_const_str_STYLE_TRANSITION_DELAY; -extern const bcstring be_const_str_get_style_bg_color; -extern const bcstring be_const_str_SAIR_RX; -extern const bcstring be_const_str_STYLE_BORDER_COLOR; -extern const bcstring be_const_str_WS2812; -extern const bcstring be_const_str_lv_group; -extern const bcstring be_const_str_KEYBOARD_PART_BG; -extern const bcstring be_const_str_FS_RES_NOT_IMP; -extern const bcstring be_const_str_floor; -extern const bcstring be_const_str_get_cell_value; -extern const bcstring be_const_str_LIST_PART_EDGE_FLASH; -extern const bcstring be_const_str_raise; -extern const bcstring be_const_str_MIEL_HVAC_TX; -extern const bcstring be_const_str_get_bg_angle_end; -extern const bcstring be_const_str_GAUGE_PART_MAIN; -extern const bcstring be_const_str_get_text; -extern const bcstring be_const_str_step_prev; -extern const bcstring be_const_str_OUTPUT_OPEN_DRAIN; -extern const bcstring be_const_str_resp_cmnd_failed; -extern const bcstring be_const_str_DHT11_OUT; -extern const bcstring be_const_str_set_cell_value_fmt; -extern const bcstring be_const_str_set_color_mode; -extern const bcstring be_const_str_get_style_shadow_color; -extern const bcstring be_const_str_get_style_transform_width; -extern const bcstring be_const_str_for; -extern const bcstring be_const_str_PROJECTOR_CTRL_RX; -extern const bcstring be_const_str_STYLE_TRANSFORM_ANGLE; -extern const bcstring be_const_str_cosh; -extern const bcstring be_const_str_set_adjustable; -extern const bcstring be_const_str_set_style_local_pad_top; -extern const bcstring be_const_str_copy; -extern const bcstring be_const_str_get_active_btn; -extern const bcstring be_const_str_MIEL_HVAC_RX; -extern const bcstring be_const_str_SHELLY_DIMMER_BOOT0; -extern const bcstring be_const_str_get_text_sel_en; -extern const bcstring be_const_str_set_style_local_value_blend_mode; -extern const bcstring be_const_str_set_style_local_value_line_space; -extern const bcstring be_const_str_set_text; -extern const bcstring be_const_str_CHART_PART_SERIES_BG; -extern const bcstring be_const_str_set_rollover; -extern const bcstring be_const_str_FS_MODE_RD; -extern const bcstring be_const_str_STYLE_VALUE_COLOR; -extern const bcstring be_const_str_get_btns_pos; -extern const bcstring be_const_str_set_x_tick_texts; -extern const bcstring be_const_str_AZ_RXD; -extern const bcstring be_const_str_DYP_RX; -extern const bcstring be_const_str_EPD_DATA; -extern const bcstring be_const_str_LOW; -extern const bcstring be_const_str_PZEM004_RX; -extern const bcstring be_const_str_STYLE_VALUE_STR; -extern const bcstring be_const_str_STYLE_TEXT_BLEND_MODE; -extern const bcstring be_const_str_ins_text; -extern const bcstring be_const_str_is_protected; -extern const bcstring be_const_str_lv_chart; -extern const bcstring be_const_str_update_mask; -extern const bcstring be_const_str_ARC_PART_KNOB; -extern const bcstring be_const_str_OPTION_A; -extern const bcstring be_const_str_RXD; -extern const bcstring be_const_str_set_style_local_text_line_space; -extern const bcstring be_const_str_get_x_start_point; -extern const bcstring be_const_str_set_fit4; -extern const bcstring be_const_str_set_shadow_blend_mode; -extern const bcstring be_const_str_remove_prop; -extern const bcstring be_const_str_add_tab; -extern const bcstring be_const_str_CPICKER_COLOR_MODE_HUE; -extern const bcstring be_const_str_KEY_RIGHT; -extern const bcstring be_const_str_SCROLLBAR_MODE_AUTO; -extern const bcstring be_const_str_cos; -extern const bcstring be_const_str_get_style_outline_width; -extern const bcstring be_const_str_get_ver_res; -extern const bcstring be_const_str_KEYBOARD_MODE_TEXT_UPPER; -extern const bcstring be_const_str_MAX31855CLK; -extern const bcstring be_const_str_SCROLLBAR_MODE_ON; -extern const bcstring be_const_str_get_style_transition_prop_5; -extern const bcstring be_const_str_get_content; -extern const bcstring be_const_str_nil; -extern const bcstring be_const_str_start_edge_flash; -extern const bcstring be_const_str_set_style_local_pad_bottom; -extern const bcstring be_const_str_get_focused_obj; -extern const bcstring be_const_str_get_inner_coords; -extern const bcstring be_const_str_get_line_count; -extern const bcstring be_const_str_millis; -extern const bcstring be_const_str_DRAG_DIR_BOTH; -extern const bcstring be_const_str_OPA_30; -extern const bcstring be_const_str_ZEROCROSS; -extern const bcstring be_const_str__available; -extern const bcstring be_const_str_assert; -extern const bcstring be_const_str_STYLE_TRANSITION_PROP_6; -extern const bcstring be_const_str_get_hue; -extern const bcstring be_const_str_STYLE_MARGIN_RIGHT; -extern const bcstring be_const_str_SYMBOL_HOME; -extern const bcstring be_const_str_int; -extern const bcstring be_const_str_set_style_local_text_font; -extern const bcstring be_const_str_CHART_AXIS_SECONDARY_Y; -extern const bcstring be_const_str_get_style_scale_width; -extern const bcstring be_const_str_is_visible; -extern const bcstring be_const_str_lv_msgbox; -extern const bcstring be_const_str_set_src; -extern const bcstring be_const_str_EVENT_DELETE; -extern const bcstring be_const_str_get_style_outline_pad; -extern const bcstring be_const_str_find_key_i; -extern const bcstring be_const_str_hex; -extern const bcstring be_const_str_get_style_value_line_space; -extern const bcstring be_const_str_LAYOUT_ROW_MID; -extern const bcstring be_const_str_CC1101_GDO0; -extern const bcstring be_const_str_CHECKBOX_PART_BG; -extern const bcstring be_const_str_LEDLNK; -extern const bcstring be_const_str_OBJ_PART_ALL; -extern const bcstring be_const_str_fade_in; -extern const bcstring be_const_str_classof; -extern const bcstring be_const_str_get_draw_rect_ext_pad_size; -extern const bcstring be_const_str_set_cursor_hidden; -extern const bcstring be_const_str_exec_rules; -extern const bcstring be_const_str_get_px; -extern const bcstring be_const_str_set_pattern_recolor_opa; -extern const bcstring be_const_str_KEY_ESC; -extern const bcstring be_const_str_set_border_color; -extern const bcstring be_const_str_get_pivot; -extern const bcstring be_const_str_BTNMATRIX_CTRL_HIDDEN; -extern const bcstring be_const_str_EVENT_REFRESH; -extern const bcstring be_const_str_GRAD_DIR_VER; -extern const bcstring be_const_str_set_style_local_pattern_repeat; -extern const bcstring be_const_str_RC522_RST; -extern const bcstring be_const_str_clear_state; -extern const bcstring be_const_str_set_style_local_line_opa; -extern const bcstring be_const_str_set_cell_type; -extern const bcstring be_const_str_tanh; -extern const bcstring be_const_str_SLIDER_TYPE_NORMAL; -extern const bcstring be_const_str_set_line_rounded; -extern const bcstring be_const_str_true; -extern const bcstring be_const_str_set_line_blend_mode; -extern const bcstring be_const_str_LABEL_LONG_CROP; -extern const bcstring be_const_str_PMS5003_RX; -extern const bcstring be_const_str_CHART_CURSOR_UP; -extern const bcstring be_const_str_pi; -extern const bcstring be_const_str_OUTPUT; -extern const bcstring be_const_str_SYMBOL_SETTINGS; -extern const bcstring be_const_str_concat; -extern const bcstring be_const_str_up; -extern const bcstring be_const_str_EVENT_APPLY; -extern const bcstring be_const_str_get_tab_act; -extern const bcstring be_const_str_STYLE_LINE_ROUNDED; -extern const bcstring be_const_str_set_transition_prop_5; -extern const bcstring be_const_str_get_ext_click_pad_right; -extern const bcstring be_const_str_false; -extern const bcstring be_const_str_WIEGAND_D0; -extern const bcstring be_const_str_get_anim_time; -extern const bcstring be_const_str_get_style_pad_inner; -extern const bcstring be_const_str_OPA_80; -extern const bcstring be_const_str_get_selected_str; -extern const bcstring be_const_str_CHECKBOX_PART_BULLET; -extern const bcstring be_const_str_get_style_transition_prop_4; -extern const bcstring be_const_str_set_style_local_pattern_opa; -extern const bcstring be_const_str_STATE_EDITED; -extern const bcstring be_const_str_STYLE_BORDER_WIDTH; -extern const bcstring be_const_str_exec_cmd; -extern const bcstring be_const_str_lv_led; -extern const bcstring be_const_str_WEBCAM_DATA; -extern const bcstring be_const_str_get_style_text_blend_mode; -extern const bcstring be_const_str_LMT01; -extern const bcstring be_const_str_SDM72_RX; -extern const bcstring be_const_str_lv_color; -extern const bcstring be_const_str_SSPI_CS; -extern const bcstring be_const_str_KEY_HOME; -extern const bcstring be_const_str_EVENT_DRAG_END; -extern const bcstring be_const_str_SOLAXX1_TX; -extern const bcstring be_const_str_focus_next; -extern const bcstring be_const_str_keys; -extern const bcstring be_const_str__request_from; -extern const bcstring be_const_str_get_pwd_mode; -extern const bcstring be_const_str_get_needle_count; -extern const bcstring be_const_str_get_style_bg_main_stop; -extern const bcstring be_const_str_set_valid_positions; -extern const bcstring be_const_str_KEY_DOWN; -extern const bcstring be_const_str_get_bright; -extern const bcstring be_const_str_get_style_scale_grad_color; -extern const bcstring be_const_str_set_style_local_clip_corner; -extern const bcstring be_const_str_set_y_tick_texts; -extern const bcstring be_const_str_SYMBOL_BELL; -extern const bcstring be_const_str_get_style_value_align; -extern const bcstring be_const_str_get_textarea; -extern const bcstring be_const_str_FIT_MAX; -extern const bcstring be_const_str_SPINNER_TYPE_SPINNING_ARC; -extern const bcstring be_const_str_STYLE_MARGIN_LEFT; -extern const bcstring be_const_str_SYMBOL_COPY; -extern const bcstring be_const_str_get_cell_crop; -extern const bcstring be_const_str_opt_eq; -extern const bcstring be_const_str_GESTURE_DIR_LEFT; -extern const bcstring be_const_str_STYLE_BORDER_OPA; -extern const bcstring be_const_str_get_height_fit; -extern const bcstring be_const_str_STYLE_PAD_INNER; -extern const bcstring be_const_str_add; -extern const bcstring be_const_str_atan; -extern const bcstring be_const_str_set_value_align; -extern const bcstring be_const_str_SYMBOL_DRIVE; -extern const bcstring be_const_str_set_style_local_border_width; -extern const bcstring be_const_str_lv_objmask; -extern const bcstring be_const_str_set_needle_img; -extern const bcstring be_const_str_scroll_hor; -extern const bcstring be_const_str_set_hue; -extern const bcstring be_const_str_STATE_DISABLED; -extern const bcstring be_const_str_search_obj; -extern const bcstring be_const_str_CPICKER_COLOR_MODE_VALUE; -extern const bcstring be_const_str_TXT_CMD_STATE_PAR; -extern const bcstring be_const_str_get_btn_width; -extern const bcstring be_const_str_get_fit_bottom; -extern const bcstring be_const_str_set_transition_prop_4; -extern const bcstring be_const_str_KEY1; -extern const bcstring be_const_str_OPA_10; -extern const bcstring be_const_str_get_style_shadow_spread; -extern const bcstring be_const_str_enable; -extern const bcstring be_const_str_is_char_under_pos; -extern const bcstring be_const_str_set_style_local_radius; -extern const bcstring be_const_str_toggle; -extern const bcstring be_const_str_WIEGAND_D1; -extern const bcstring be_const_str_on; -extern const bcstring be_const_str_DROPDOWN_PART_SCROLLBAR; -extern const bcstring be_const_str_lv_arc; -extern const bcstring be_const_str_LAYOUT_PRETTY_MID; -extern const bcstring be_const_str_SSPI_MISO; -extern const bcstring be_const_str_add_rule; -extern const bcstring be_const_str_get_style_transition_prop_3; -extern const bcstring be_const_str_ALIGN_OUT_RIGHT_TOP; -extern const bcstring be_const_str_RFSEND; -extern const bcstring be_const_str_get_scroll_propagation; -extern const bcstring be_const_str_cursor_right; -extern const bcstring be_const_str_layer_top; -extern const bcstring be_const_str_set_base_dir; -extern const bcstring be_const_str_set_style_local_transform_angle; -extern const bcstring be_const_str_set_style_local_transform_zoom; -extern const bcstring be_const_str_STYLE_TRANSITION_PROP_4; -extern const bcstring be_const_str_SYMBOL_PASTE; -extern const bcstring be_const_str_get_value; -extern const bcstring be_const_str_set_showed_date; -extern const bcstring be_const_str_PMS5003_TX; -extern const bcstring be_const_str_end; -extern const bcstring be_const_str_get_style_pattern_recolor_opa; -extern const bcstring be_const_str_HX711_SCK; -extern const bcstring be_const_str_get_style_image_recolor_opa; -extern const bcstring be_const_str_STYLE_LINE_COLOR; -extern const bcstring be_const_str_STYLE_VALUE_FONT; -extern const bcstring be_const_str_set_value_color; -extern const bcstring be_const_str_LAYOUT_CENTER; -extern const bcstring be_const_str_PAGE_EDGE_RIGHT; -extern const bcstring be_const_str_get_spin_time; -extern const bcstring be_const_str_GRAD_DIR_HOR; -extern const bcstring be_const_str_add_style; -extern const bcstring be_const_str_A4988_ENA; -extern const bcstring be_const_str_EVENT_SHORT_CLICKED; -extern const bcstring be_const_str_STYLE_IMAGE_RECOLOR; -extern const bcstring be_const_str_real; extern const bcstring be_const_str_ADE7953_IRQ; -extern const bcstring be_const_str_STYLE_PATTERN_RECOLOR_OPA; -extern const bcstring be_const_str_STYLE_VALUE_BLEND_MODE; -extern const bcstring be_const_str_cmd; -extern const bcstring be_const_str_create; -extern const bcstring be_const_str_get_style_bg_grad_dir; -extern const bcstring be_const_str_increment; -extern const bcstring be_const_str_lv_tileview; -extern const bcstring be_const_str_set_style_local_bg_grad_stop; -extern const bcstring be_const_str_LABEL_ALIGN_LEFT; -extern const bcstring be_const_str_OPEN_DRAIN; -extern const bcstring be_const_str_get_angle_offset; -extern const bcstring be_const_str_SYMBOL_EJECT; -extern const bcstring be_const_str_STYLE_PAD_RIGHT; -extern const bcstring be_const_str_get_style_line_blend_mode; -extern const bcstring be_const_str_set_style_local_scale_grad_color; -extern const bcstring be_const_str_PROTECT_CLICK_FOCUS; -extern const bcstring be_const_str_resolvecmnd; -extern const bcstring be_const_str_TASMOTACLIENT_RST; -extern const bcstring be_const_str_get_rollover; -extern const bcstring be_const_str_OBJMASK_PART_MAIN; -extern const bcstring be_const_str_STYLE_OUTLINE_OPA; -extern const bcstring be_const_str_remove_rule; -extern const bcstring be_const_str_set_image_opa; -extern const bcstring be_const_str_get_btnmatrix; -extern const bcstring be_const_str_lv_switch; -extern const bcstring be_const_str_set_wrap; -extern const bcstring be_const_str_SSPI; -extern const bcstring be_const_str_STYLE_SCALE_BORDER_WIDTH; -extern const bcstring be_const_str_set_map; -extern const bcstring be_const_str_set_width_margin; -extern const bcstring be_const_str_DRAG_DIR_HOR; -extern const bcstring be_const_str_KEY_BACKSPACE; -extern const bcstring be_const_str_set_focus_parent; -extern const bcstring be_const_str_get_one_check; -extern const bcstring be_const_str_get_state; -extern const bcstring be_const_str_set_style_local_image_blend_mode; -extern const bcstring be_const_str_set_y; -extern const bcstring be_const_str_TEXT_DECOR_NONE; -extern const bcstring be_const_str_ALIGN_IN_BOTTOM_MID; -extern const bcstring be_const_str_PZEM016_RX; -extern const bcstring be_const_str_exp; -extern const bcstring be_const_str_get_style_size; -extern const bcstring be_const_str_get_style_transition_prop_2; -extern const bcstring be_const_str_HM10_TX; -extern const bcstring be_const_str_STYLE_OUTLINE_BLEND_MODE; -extern const bcstring be_const_str_STYLE_SCALE_END_BORDER_WIDTH; -extern const bcstring be_const_str_get_style_text_sel_color; -extern const bcstring be_const_str_set_ext_click_area; -extern const bcstring be_const_str_else; -extern const bcstring be_const_str_ceil; -extern const bcstring be_const_str_set_content_size; -extern const bcstring be_const_str_get_edge_flash; -extern const bcstring be_const_str_get_style_outline_color; -extern const bcstring be_const_str_get_scrl_layout; -extern const bcstring be_const_str_lv_spinner; -extern const bcstring be_const_str_STYLE_TRANSITION_PROP_5; -extern const bcstring be_const_str_set_editing; -extern const bcstring be_const_str_transform; -extern const bcstring be_const_str_SDM120_RX; -extern const bcstring be_const_str_get_style_line_dash_width; -extern const bcstring be_const_str_scr_act; -extern const bcstring be_const_str_INDEV_STATE_REL; -extern const bcstring be_const_str_gc; -extern const bcstring be_const_str_get_btn_ctrl; -extern const bcstring be_const_str_get_y; -extern const bcstring be_const_str_register_button_encoder; -extern const bcstring be_const_str_hide_series; -extern const bcstring be_const_str_issubclass; -extern const bcstring be_const_str_IBEACON_RX; -extern const bcstring be_const_str_SYMBOL_POWER; -extern const bcstring be_const_str_set_text_static; -extern const bcstring be_const_str_set_value_letter_space; -extern const bcstring be_const_str_set_col_cnt; -extern const bcstring be_const_str_do; -extern const bcstring be_const_str_ILI9341_CS; -extern const bcstring be_const_str_set_btns_pos; -extern const bcstring be_const_str_set_style_local_value_letter_space; -extern const bcstring be_const_str_get_btn_label; -extern const bcstring be_const_str_get_dir; -extern const bcstring be_const_str_RISING; -extern const bcstring be_const_str_set_design_cb; -extern const bcstring be_const_str_super; -extern const bcstring be_const_str_get_tile_act; -extern const bcstring be_const_str_set_today_date; -extern const bcstring be_const_str_GRAD_DIR_NONE; -extern const bcstring be_const_str_Wire; -extern const bcstring be_const_str___upper__; -extern const bcstring be_const_str_get_style_line_width; -extern const bcstring be_const_str_set_scale; -extern const bcstring be_const_str_set_btn_width; -extern const bcstring be_const_str_TABVIEW_TAB_POS_BOTTOM; -extern const bcstring be_const_str_set_pivot; -extern const bcstring be_const_str_set_scrl_layout; -extern const bcstring be_const_str_ALIGN_IN_TOP_LEFT; -extern const bcstring be_const_str_detect; -extern const bcstring be_const_str_get_width_margin; -extern const bcstring be_const_str_set_style_local_bg_grad_dir; -extern const bcstring be_const_str_EVENT_DEFOCUSED; -extern const bcstring be_const_str_get_max_value; -extern const bcstring be_const_str_MCP39F5_RX; -extern const bcstring be_const_str_TXT_FLAG_CENTER; -extern const bcstring be_const_str_add_char; -extern const bcstring be_const_str_clear_btn_ctrl_all; -extern const bcstring be_const_str_count_children; -extern const bcstring be_const_str_set_style_local_transition_time; -extern const bcstring be_const_str_set_text_blend_mode; -extern const bcstring be_const_str_align_x; -extern const bcstring be_const_str_set_style_local_value_str; -extern const bcstring be_const_str_LABEL_LONG_EXPAND; -extern const bcstring be_const_str_set_transition_prop_6; -extern const bcstring be_const_str_PROTECT_FOLLOW; -extern const bcstring be_const_str_RF_SENSOR; -extern const bcstring be_const_str_STYLE_BG_BLEND_MODE; -extern const bcstring be_const_str_lv_page; -extern const bcstring be_const_str_set_transition_time; -extern const bcstring be_const_str_SHELLY_DIMMER_RST_INV; -extern const bcstring be_const_str_seg7_font; -extern const bcstring be_const_str_set_x; -extern const bcstring be_const_str_send_data; -extern const bcstring be_const_str_set_group; -extern const bcstring be_const_str_ALIGN_OUT_RIGHT_BOTTOM; -extern const bcstring be_const_str_get_style_line_dash_gap; -extern const bcstring be_const_str_get_style_transition_prop_1; -extern const bcstring be_const_str_set_y_tick_length; -extern const bcstring be_const_str_set_style_local_pattern_blend_mode; -extern const bcstring be_const_str_add_element; -extern const bcstring be_const_str_get_style_image_opa; -extern const bcstring be_const_str_KEY_ENTER; -extern const bcstring be_const_str_SBR_RX; -extern const bcstring be_const_str_set_max_height; -extern const bcstring be_const_str_BLEND_MODE_NORMAL; -extern const bcstring be_const_str_get_cursor_manage; -extern const bcstring be_const_str_STYLE_TRANSITION_PROP_2; -extern const bcstring be_const_str_get_x; -extern const bcstring be_const_str_is_inactive; -extern const bcstring be_const_str_CHART_TYPE_NONE; -extern const bcstring be_const_str_number; -extern const bcstring be_const_str_set_end_angle; -extern const bcstring be_const_str_LE01MR_TX; -extern const bcstring be_const_str_set_padding_left; -extern const bcstring be_const_str_get_active_btn_text; -extern const bcstring be_const_str_get_style_shadow_blend_mode; -extern const bcstring be_const_str_get_tasmota; -extern const bcstring be_const_str_ILI9341_DC; -extern const bcstring be_const_str_SENSOR_END; -extern const bcstring be_const_str_STYLE_MARGIN_BOTTOM; -extern const bcstring be_const_str_STYLE_TEXT_SEL_BG_COLOR; -extern const bcstring be_const_str_get_cursor_pos; -extern const bcstring be_const_str_set_dir; -extern const bcstring be_const_str_DROPDOWN_DIR_DOWN; -extern const bcstring be_const_str_get_cell_align; -extern const bcstring be_const_str_SYMBOL_NEW_LINE; -extern const bcstring be_const_str_focus_prev; -extern const bcstring be_const_str_get_drag_throw; -extern const bcstring be_const_str_set_text_align; -extern const bcstring be_const_str_CHART_AXIS_INVERSE_LABELS_ORDER; -extern const bcstring be_const_str_get_ext_attr; -extern const bcstring be_const_str_set_placeholder_text; -extern const bcstring be_const_str_RC522_CS; -extern const bcstring be_const_str_get_style_value_ofs_x; -extern const bcstring be_const_str_set_outline_blend_mode; -extern const bcstring be_const_str_set_scale_border_width; -extern const bcstring be_const_str_web_add_button; -extern const bcstring be_const_str_web_add_main_button; -extern const bcstring be_const_str_Driver; -extern const bcstring be_const_str_get_title; -extern const bcstring be_const_str_collect; -extern const bcstring be_const_str_get_series_area; -extern const bcstring be_const_str_set_style_local_line_rounded; -extern const bcstring be_const_str_SSPI_MOSI; -extern const bcstring be_const_str_TUYA_TX; -extern const bcstring be_const_str_get_cell_merge_right; -extern const bcstring be_const_str_CHANGE; -extern const bcstring be_const_str_NRG_SEL; -extern const bcstring be_const_str_STYLE_BORDER_BLEND_MODE; -extern const bcstring be_const_str_set_zoom; -extern const bcstring be_const_str_get_point_count; -extern const bcstring be_const_str_BORDER_SIDE_TOP; -extern const bcstring be_const_str_SYMBOL_MUTE; -extern const bcstring be_const_str_get_style_outline_opa; -extern const bcstring be_const_str_set_click; -extern const bcstring be_const_str_STYLE_VALUE_LINE_SPACE; -extern const bcstring be_const_str_SYMBOL_SHUFFLE; -extern const bcstring be_const_str_SYMBOL_STOP; -extern const bcstring be_const_str_align_y; -extern const bcstring be_const_str_set_selected; -extern const bcstring be_const_str_MAX7219CLK; -extern const bcstring be_const_str_set_transition_prop_1; -extern const bcstring be_const_str_HJL_CF; -extern const bcstring be_const_str_set_event_cb; -extern const bcstring be_const_str_set_style_local_bg_color; -extern const bcstring be_const_str_ETH_PHY_MDIO; -extern const bcstring be_const_str_set_adv_hittest; -extern const bcstring be_const_str_opt_add; -extern const bcstring be_const_str_GAUGE_PART_MAJOR; -extern const bcstring be_const_str_setrange; -extern const bcstring be_const_str_ALIGN_IN_RIGHT_MID; -extern const bcstring be_const_str_NAVY; -extern const bcstring be_const_str_set_drag_dir; -extern const bcstring be_const_str_BUZZER; -extern const bcstring be_const_str_yield; extern const bcstring be_const_str_KEY1_TC; -extern const bcstring be_const_str_get_checkable; -extern const bcstring be_const_str_set_style_local_value_ofs_x; -extern const bcstring be_const_str_DRAG_DIR_VER; -extern const bcstring be_const_str_EVENT_CANCEL; -extern const bcstring be_const_str_lv_line; -extern const bcstring be_const_str_CALENDAR_PART_BG; -extern const bcstring be_const_str_EVENT_RELEASED; -extern const bcstring be_const_str_LAYOUT_COLUMN_LEFT; -extern const bcstring be_const_str_STYLE_SCALE_END_LINE_WIDTH; -extern const bcstring be_const_str_gamma10; -extern const bcstring be_const_str_set_digit_format; -extern const bcstring be_const_str_set_outline_pad; -extern const bcstring be_const_str_STYLE_TRANSITION_PROP_3; -extern const bcstring be_const_str_copy_buf; -extern const bcstring be_const_str_imin; -extern const bcstring be_const_str_set_style_local_shadow_spread; -extern const bcstring be_const_str_DSB; -extern const bcstring be_const_str_get_style_line_rounded; -extern const bcstring be_const_str_CALENDAR_PART_DATE; -extern const bcstring be_const_str_DISP_SIZE_LARGE; -extern const bcstring be_const_str_WEBCAM_PSCLK; -extern const bcstring be_const_str_get_src; -extern const bcstring be_const_str_set_disabled; -extern const bcstring be_const_str_find; -extern const bcstring be_const_str_PULLUP; -extern const bcstring be_const_str_set_style_local_transition_prop_3; -extern const bcstring be_const_str_return; -extern const bcstring be_const_str_ADC_PH; -extern const bcstring be_const_str_OBJ_PART_VIRTUAL_FIRST; -extern const bcstring be_const_str_WEBCAM_RESET; -extern const bcstring be_const_str_sinh; -extern const bcstring be_const_str_get_focused_btn; -extern const bcstring be_const_str_is_focused; -extern const bcstring be_const_str_set_line_opa; -extern const bcstring be_const_str_GAUGE_PART_NEEDLE; -extern const bcstring be_const_str_SYMBOL_KEYBOARD; -extern const bcstring be_const_str_set_style_local_value_opa; -extern const bcstring be_const_str_KEY_NEXT; -extern const bcstring be_const_str_SYMBOL_UP; -extern const bcstring be_const_str_get_editing; -extern const bcstring be_const_str_set_checked; -extern const bcstring be_const_str_CHART_TYPE_COLUMN; -extern const bcstring be_const_str_get_style_bg_opa; -extern const bcstring be_const_str_CHART_AXIS_DRAW_LAST_TICK; -extern const bcstring be_const_str_get_style_value_ofs_y; -extern const bcstring be_const_str_SAIR_TX; -extern const bcstring be_const_str_SDM630_TX; -extern const bcstring be_const_str_PROTECT_POS; -extern const bcstring be_const_str_STATE_DEFAULT; -extern const bcstring be_const_str_focus_freeze; -extern const bcstring be_const_str_get_offset_y; -extern const bcstring be_const_str_set_pad_right; -extern const bcstring be_const_str_get_style_transform_height; -extern const bcstring be_const_str_set_btn_ctrl_all; -extern const bcstring be_const_str_set_style_local_shadow_color; -extern const bcstring be_const_str_P9813_DAT; -extern const bcstring be_const_str_set_drag_throw; -extern const bcstring be_const_str_get_day_of_week; -extern const bcstring be_const_str_set_bright; -extern const bcstring be_const_str_set_symbol; -extern const bcstring be_const_str_calldepth; -extern const bcstring be_const_str_Tasmota; -extern const bcstring be_const_str_get_scrollbar_mode; -extern const bcstring be_const_str_CPICKER_TYPE_RECT; -extern const bcstring be_const_str_TFMINIPLUS_TX; -extern const bcstring be_const_str_BL0940_RX; -extern const bcstring be_const_str_get_bg_angle_start; -extern const bcstring be_const_str_get_style_margin_top; -extern const bcstring be_const_str_ARC_PART_INDIC; -extern const bcstring be_const_str_SYMBOL_WARNING; -extern const bcstring be_const_str_OPA_60; -extern const bcstring be_const_str_SYMBOL_BLUETOOTH; -extern const bcstring be_const_str_get_scrl_fit_bottom; -extern const bcstring be_const_str_traceback; -extern const bcstring be_const_str_import; -extern const bcstring be_const_str_STYLE_BG_OPA; -extern const bcstring be_const_str_get_style_pad_bottom; -extern const bcstring be_const_str_pin; -extern const bcstring be_const_str_chars_in_string; -extern const bcstring be_const_str_del_anim_ready_cb; -extern const bcstring be_const_str_set_bg_color; -extern const bcstring be_const_str_PROTECT_CHILD_CHG; -extern const bcstring be_const_str_MHZ_TXD; -extern const bcstring be_const_str_set_ext_array; -extern const bcstring be_const_str_fromstring; -extern const bcstring be_const_str_get_height_grid; -extern const bcstring be_const_str_set_style_local_value_ofs_y; -extern const bcstring be_const_str_DSB_OUT; -extern const bcstring be_const_str_invalidate; -extern const bcstring be_const_str_set_critical_value; -extern const bcstring be_const_str_set_height_margin; -extern const bcstring be_const_str_get_style_border_side; -extern const bcstring be_const_str_get_sb_mode; -extern const bcstring be_const_str_set_pad_top; -extern const bcstring be_const_str_CHART_CURSOR_NONE; -extern const bcstring be_const_str_SSD1331_CS; -extern const bcstring be_const_str_SYMBOL_PLUS; -extern const bcstring be_const_str_SYMBOL_SAVE; -extern const bcstring be_const_str_lv_gauge; -extern const bcstring be_const_str_set_btn_ctrl; -extern const bcstring be_const_str_set_max_length; -extern const bcstring be_const_str_get_style_scale_end_color; -extern const bcstring be_const_str_del; -extern const bcstring be_const_str_focus_obj; -extern const bcstring be_const_str_lv_checkbox; -extern const bcstring be_const_str_set_pattern_recolor; -extern const bcstring be_const_str_SDS0X1_RX; -extern const bcstring be_const_str_SYMBOL_MINUS; -extern const bcstring be_const_str_set_style_local_transition_prop_2; -extern const bcstring be_const_str_remove; -extern const bcstring be_const_str_PROTECT_EVENT_TO_DISABLED; -extern const bcstring be_const_str_clear_protect; -extern const bcstring be_const_str_get_height_margin; -extern const bcstring be_const_str_REL1; -extern const bcstring be_const_str_down; -extern const bcstring be_const_str_WE517_TX; -extern const bcstring be_const_str_set_pattern_repeat; -extern const bcstring be_const_str_stop_auto_close; -extern const bcstring be_const_str_NRF24_CS; -extern const bcstring be_const_str_CALENDAR_PART_DAY_NAMES; -extern const bcstring be_const_str_i2c_enabled; -extern const bcstring be_const_str_BORDER_SIDE_FULL; -extern const bcstring be_const_str_EVENT_PRESSING; -extern const bcstring be_const_str_TXT_FLAG_FIT; -extern const bcstring be_const_str_ZIGBEE_RX; -extern const bcstring be_const_str_ALIGN_OUT_BOTTOM_LEFT; -extern const bcstring be_const_str_set_gesture_parent; -extern const bcstring be_const_str_get_offset_x; -extern const bcstring be_const_str_set_buffer; -extern const bcstring be_const_str_SYMBOL_VOLUME_MID; -extern const bcstring be_const_str_A4988_MS1; -extern const bcstring be_const_str_resp_cmnd_error; -extern const bcstring be_const_str_get_next_btn; -extern const bcstring be_const_str_LIST_PART_SCROLLBAR; -extern const bcstring be_const_str_TEXTAREA_CURSOR_LAST; -extern const bcstring be_const_str_get_needle_img_pivot_x; -extern const bcstring be_const_str_BTNMATRIX_CTRL_CLICK_TRIG; -extern const bcstring be_const_str_VSPI; -extern const bcstring be_const_str_remove_mask; -extern const bcstring be_const_str_set_style_local_border_opa; -extern const bcstring be_const_str_get_angle_start; -extern const bcstring be_const_str_set_focus_cb; -extern const bcstring be_const_str_OPA_0; -extern const bcstring be_const_str_SLIDER_TYPE_RANGE; -extern const bcstring be_const_str_resize; -extern const bcstring be_const_str_SYMBOL_GPS; -extern const bcstring be_const_str_get_style_text_color; -extern const bcstring be_const_str_set_transition_prop_3; -extern const bcstring be_const_str_PN532_TXD; -extern const bcstring be_const_str_init_draw_rect_dsc; -extern const bcstring be_const_str_set_line_dash_gap; -extern const bcstring be_const_str_set_style_local_image_recolor_opa; -extern const bcstring be_const_str_get_local_style; -extern const bcstring be_const_str_set_cell_value; -extern const bcstring be_const_str_set_style_local_border_color; -extern const bcstring be_const_str_I2C_SDA; -extern const bcstring be_const_str_SR04_TRIG; -extern const bcstring be_const_str_get_child; -extern const bcstring be_const_str_set_line_width; -extern const bcstring be_const_str_set_y_invert; -extern const bcstring be_const_str_set_one_check; -extern const bcstring be_const_str_get_align; -extern const bcstring be_const_str_SYMBOL_DIRECTORY; -extern const bcstring be_const_str_set_chg_rate; -extern const bcstring be_const_str_STYLE_SIZE; -extern const bcstring be_const_str_get_top; -extern const bcstring be_const_str_EVENT_LONG_PRESSED_REPEAT; -extern const bcstring be_const_str_rtc; -extern const bcstring be_const_str_FIT_TIGHT; -extern const bcstring be_const_str_STYLE_TRANSITION_PROP_1; -extern const bcstring be_const_str_get_width; -extern const bcstring be_const_str_lv_roller; -extern const bcstring be_const_str_TABVIEW_TAB_POS_LEFT; -extern const bcstring be_const_str_get_layout; -extern const bcstring be_const_str_tolower; -extern const bcstring be_const_str_STYLE_SHADOW_WIDTH; -extern const bcstring be_const_str_DROPDOWN_PART_SELECTED; -extern const bcstring be_const_str_FS_RES_FULL; -extern const bcstring be_const_str_set_pattern_opa; -extern const bcstring be_const_str_set_style_local_transition_prop_1; -extern const bcstring be_const_str_LINEMETER_PART_MAIN; -extern const bcstring be_const_str_AQUA; -extern const bcstring be_const_str_DISP_SIZE_SMALL; -extern const bcstring be_const_str_SYMBOL_PAUSE; -extern const bcstring be_const_str_STATE_HOVERED; -extern const bcstring be_const_str_SYMBOL_BATTERY_3; -extern const bcstring be_const_str_get_left_value; -extern const bcstring be_const_str_get_text_sel_start; -extern const bcstring be_const_str_ALIGN_OUT_LEFT_TOP; -extern const bcstring be_const_str_STYLE_SHADOW_OFS_X; -extern const bcstring be_const_str_OLED_RESET; -extern const bcstring be_const_str_KEYBOARD_MODE_SPECIAL; -extern const bcstring be_const_str_add_state; -extern const bcstring be_const_str_opt_neq; -extern const bcstring be_const_str_HRXL_RX; -extern const bcstring be_const_str_WEBCAM_VSYNC; -extern const bcstring be_const_str_LED_PART_MAIN; -extern const bcstring be_const_str_get_needle_img_pivot_y; -extern const bcstring be_const_str_STYLE_IMAGE_BLEND_MODE; -extern const bcstring be_const_str_add_cmd; -extern const bcstring be_const_str_set_x_tick_length; -extern const bcstring be_const_str_get_ext_click_pad_bottom; -extern const bcstring be_const_str_get_style_value_letter_space; -extern const bcstring be_const_str_STYLE_BORDER_POST; -extern const bcstring be_const_str_set_style_local_text_opa; -extern const bcstring be_const_str_get_style_shadow_opa; -extern const bcstring be_const_str_set_transition_prop_2; -extern const bcstring be_const_str_set_style_local_pattern_image; -extern const bcstring be_const_str_KEY1_INV; -extern const bcstring be_const_str_WEBCAM_XCLK; -extern const bcstring be_const_str_get_style_text_line_space; -extern const bcstring be_const_str_resp_cmnd_done; -extern const bcstring be_const_str_get_angle_end; -extern const bcstring be_const_str_scan; -extern const bcstring be_const_str_set_size; -extern const bcstring be_const_str_PWM1; -extern const bcstring be_const_str_set_top; -extern const bcstring be_const_str_SSPI_MAX31865_CS1; -extern const bcstring be_const_str_get_ext_click_pad_top; -extern const bcstring be_const_str_set_start_angle; -extern const bcstring be_const_str_ROT1B; -extern const bcstring be_const_str_STYLE_TEXT_COLOR; -extern const bcstring be_const_str_SYMBOL_BACKSPACE; -extern const bcstring be_const_str_FS_RES_BUSY; -extern const bcstring be_const_str_byte; -extern const bcstring be_const_str_set_clip_corner; -extern const bcstring be_const_str_set_fit; -extern const bcstring be_const_str_SYMBOL_BULLET; -extern const bcstring be_const_str_get_child_back; -extern const bcstring be_const_str_FS_RES_OK; -extern const bcstring be_const_str_STYLE_VALUE_OFS_Y; -extern const bcstring be_const_str_BUZZER_INV; -extern const bcstring be_const_str_CPICKER_COLOR_MODE_SATURATION; -extern const bcstring be_const_str_SYMBOL_DOWN; -extern const bcstring be_const_str_get_auto_fit; -extern const bcstring be_const_str_get_type; -extern const bcstring be_const_str_SCROLLBAR_MODE_HIDE; -extern const bcstring be_const_str_set_outline_opa; -extern const bcstring be_const_str_ADC_RANGE; -extern const bcstring be_const_str_AS608_TX; -extern const bcstring be_const_str_LEDLNK_INV; -extern const bcstring be_const_str_SPI_MOSI; -extern const bcstring be_const_str_pin_used; -extern const bcstring be_const_str_set_style_local_pattern_recolor; -extern const bcstring be_const_str_ADC_INPUT; -extern const bcstring be_const_str_STYLE_TRANSITION_TIME; -extern const bcstring be_const_str_focus; -extern const bcstring be_const_str_iter; -extern const bcstring be_const_str_set_style_local_border_blend_mode; -extern const bcstring be_const_str_set_div_line_count; -extern const bcstring be_const_str_set_style_local_text_color; -extern const bcstring be_const_str_reverse_gamma10; -extern const bcstring be_const_str_SYMBOL_BATTERY_2; -extern const bcstring be_const_str_class; -extern const bcstring be_const_str_CPICKER_PART_MAIN; -extern const bcstring be_const_str_STYLE_SHADOW_OFS_Y; -extern const bcstring be_const_str_get_symbol; -extern const bcstring be_const_str_realign; -extern const bcstring be_const_str_ADC_CT_POWER; -extern const bcstring be_const_str_AS3935; -extern const bcstring be_const_str_get_auto_realign; -extern const bcstring be_const_str_A4988_DIR; -extern const bcstring be_const_str_set_text_fmt; -extern const bcstring be_const_str_NEOPOOL_RX; -extern const bcstring be_const_str_STYLE_TEXT_DECOR; -extern const bcstring be_const_str_get_style_transform_zoom; -extern const bcstring be_const_str_HSPI; -extern const bcstring be_const_str_get_height; -extern const bcstring be_const_str_get_letter_on; -extern const bcstring be_const_str_CALENDAR_PART_HEADER; -extern const bcstring be_const_str_GESTURE_DIR_RIGHT; -extern const bcstring be_const_str_get_pwd_show_time; -extern const bcstring be_const_str_scale_uint; -extern const bcstring be_const_str_set_hidden; -extern const bcstring be_const_str_set_left_value; -extern const bcstring be_const_str_set_style_local_text_decor; -extern const bcstring be_const_str_BLUE; -extern const bcstring be_const_str_STYLE_TRANSITION_PATH; -extern const bcstring be_const_str_draw_arc; -extern const bcstring be_const_str_handle_get_type_signal; -extern const bcstring be_const_str_is_dragged; -extern const bcstring be_const_str_set_angle; -extern const bcstring be_const_str_set_anim_speed; -extern const bcstring be_const_str_set_px; -extern const bcstring be_const_str_KEYBOARD_PART_BTN; -extern const bcstring be_const_str_STYLE_SCALE_END_COLOR; -extern const bcstring be_const_str_SYMBOL_CHARGE; -extern const bcstring be_const_str_get_btn_img; -extern const bcstring be_const_str_set_bg_end_angle; -extern const bcstring be_const_str_set_margin_right; -extern const bcstring be_const_str_get_fit_left; -extern const bcstring be_const_str_RFRECV; -extern const bcstring be_const_str_set_scale_end_color; -extern const bcstring be_const_str_set_style_local_transform_width; -extern const bcstring be_const_str_set_click_focus; -extern const bcstring be_const_str_lv_calendar; -extern const bcstring be_const_str_STYLE_BG_GRAD_STOP; -extern const bcstring be_const_str_set_insert_replace; -extern const bcstring be_const_str_set_line_dash_width; -extern const bcstring be_const_str_DRAG_DIR_ONE; -extern const bcstring be_const_str_HRE_DATA; -extern const bcstring be_const_str_format; -extern const bcstring be_const_str_get_light; -extern const bcstring be_const_str_get_option; -extern const bcstring be_const_str_count_children_recursive; -extern const bcstring be_const_str_is_checked; -extern const bcstring be_const_str_lv_imgbtn; -extern const bcstring be_const_str_PZEM0XX_TX; -extern const bcstring be_const_str_bus; -extern const bcstring be_const_str_rand; -extern const bcstring be_const_str_BS814_DAT; -extern const bcstring be_const_str_STYLE_VALUE_OFS_X; -extern const bcstring be_const_str_get_nearest_index_from_coord; -extern const bcstring be_const_str_OPA_TRANSP; -extern const bcstring be_const_str_TXT_CMD_STATE_IN; -extern const bcstring be_const_str_lv_font; -extern const bcstring be_const_str_set_knob_colored; -extern const bcstring be_const_str_PAGE_EDGE_LEFT; -extern const bcstring be_const_str_SYMBOL_EYE_CLOSE; -extern const bcstring be_const_str_get_style_margin_right; -extern const bcstring be_const_str_ARC_TYPE_SYMMETRIC; -extern const bcstring be_const_str_PN532_RXD; -extern const bcstring be_const_str_add_protect; -extern const bcstring be_const_str_list; -extern const bcstring be_const_str_set_style_local_value_color; -extern const bcstring be_const_str_GESTURE_DIR_BOTTOM; -extern const bcstring be_const_str_SM16716_SEL; -extern const bcstring be_const_str_resp_cmnd_str; -extern const bcstring be_const_str_set_style_local_outline_blend_mode; -extern const bcstring be_const_str_TASMOTACLIENT_RST_INV; -extern const bcstring be_const_str_title_get_alignment; -extern const bcstring be_const_str_ROT1B_NP; -extern const bcstring be_const_str_STYLE_SCALE_WIDTH; -extern const bcstring be_const_str_TCP_RX; -extern const bcstring be_const_str___iterator__; -extern const bcstring be_const_str_cursor_up; -extern const bcstring be_const_str_get_style_clip_corner; -extern const bcstring be_const_str_get_style_value_blend_mode; -extern const bcstring be_const_str_CHART_AXIS_SKIP_LAST_TICK; -extern const bcstring be_const_str_del_char_forward; -extern const bcstring be_const_str_invalidate_area; -extern const bcstring be_const_str_set_range; -extern const bcstring be_const_str_CSE7766_RX; -extern const bcstring be_const_str_set_pattern_blend_mode; -extern const bcstring be_const_str_set_style_local_opa_scale; -extern const bcstring be_const_str_TM1638CLK; -extern const bcstring be_const_str_get_highlighted_dates_num; -extern const bcstring be_const_str_set_auto_fit; -extern const bcstring be_const_str_SYMBOL_BATTERY_1; -extern const bcstring be_const_str_split; -extern const bcstring be_const_str_SI7021; -extern const bcstring be_const_str_remove_style; -extern const bcstring be_const_str_set_light; -extern const bcstring be_const_str_lv_btn; -extern const bcstring be_const_str_set_margin_left; -extern const bcstring be_const_str_CHART_CURSOR_RIGHT; -extern const bcstring be_const_str_get_cell_type; -extern const bcstring be_const_str_run_deferred; -extern const bcstring be_const_str_set_style_local_bg_main_stop; -extern const bcstring be_const_str_set_text_opa; -extern const bcstring be_const_str_SYMBOL_SD_CARD; -extern const bcstring be_const_str_set_style_local_bg_grad_color; -extern const bcstring be_const_str_SYMBOL_EYE_OPEN; -extern const bcstring be_const_str_set_point_id; -extern const bcstring be_const_str_clear_series; -extern const bcstring be_const_str_LAYOUT_ROW_TOP; -extern const bcstring be_const_str_set_radius; -extern const bcstring be_const_str_OPA_70; -extern const bcstring be_const_str_wire_scan; -extern const bcstring be_const_str_ARIRFSEL; -extern const bcstring be_const_str_LABEL_ALIGN_RIGHT; -extern const bcstring be_const_str_clean; -extern const bcstring be_const_str_get_angle; -extern const bcstring be_const_str_OPA_50; -extern const bcstring be_const_str_STYLE_PATTERN_RECOLOR; -extern const bcstring be_const_str_abs; -extern const bcstring be_const_str_get_pressed_cell; -extern const bcstring be_const_str_set_style_local_scale_end_border_width; -extern const bcstring be_const_str_get_scrl_fit_top; -extern const bcstring be_const_str_set_height; -extern const bcstring be_const_str_BAR_TYPE_CUSTOM; -extern const bcstring be_const_str_LABEL_LONG_DOT; -extern const bcstring be_const_str_SYMBOL_WIFI; -extern const bcstring be_const_str_area_is_visible; -extern const bcstring be_const_str_set_textarea; -extern const bcstring be_const_str_ADC_BUTTON; -extern const bcstring be_const_str_EVENT_KEY; -extern const bcstring be_const_str_get_style_bg_blend_mode; -extern const bcstring be_const_str_get_label; -extern const bcstring be_const_str_LAYOUT_ROW_BOTTOM; -extern const bcstring be_const_str_set_day_names; -extern const bcstring be_const_str_set_hsv; -extern const bcstring be_const_str_set_style_local_shadow_ofs_y; -extern const bcstring be_const_str_ROLLER_MODE_NORMAL; -extern const bcstring be_const_str_VL53L0X_XSHUT1; -extern const bcstring be_const_str_STYLE_TEXT_FONT; -extern const bcstring be_const_str_set_opa_scale; -extern const bcstring be_const_str_set_style_local_border_post; -extern const bcstring be_const_str_MAX7219CS; -extern const bcstring be_const_str_delay; -extern const bcstring be_const_str_init_draw_img_dsc; -extern const bcstring be_const_str_sin; -extern const bcstring be_const_str_CNTR1; -extern const bcstring be_const_str_A4988_STP; -extern const bcstring be_const_str_MHZ_RXD; -extern const bcstring be_const_str_WEBCAM_PSRCS; -extern const bcstring be_const_str_clean_tab; -extern const bcstring be_const_str_get_style_image_blend_mode; -extern const bcstring be_const_str_set_style_local_shadow_opa; -extern const bcstring be_const_str_TXT_FLAG_NONE; -extern const bcstring be_const_str_WEBCAM_HSD; -extern const bcstring be_const_str_get_arc_length; -extern const bcstring be_const_str_lv_btnmatrix; -extern const bcstring be_const_str_ETH_PHY_MDC; -extern const bcstring be_const_str_set_style_local_transition_prop_6; -extern const bcstring be_const_str_clean_style_list; -extern const bcstring be_const_str_INPUT_PULLUP; -extern const bcstring be_const_str_TEXT_DECOR_STRIKETHROUGH; -extern const bcstring be_const_str_get_width_grid; -extern const bcstring be_const_str_set_style_local_border_side; -extern const bcstring be_const_str_set_text_decor; -extern const bcstring be_const_str_read; -extern const bcstring be_const_str_set_style_local_pad_left; -extern const bcstring be_const_str_SLIDER_TYPE_SYMMETRICAL; -extern const bcstring be_const_str_get_scale_angle; -extern const bcstring be_const_str_BOILER_OT_RX; -extern const bcstring be_const_str_OBJ_PART_MAIN; -extern const bcstring be_const_str_STYLE_SCALE_GRAD_COLOR; -extern const bcstring be_const_str_lv_label; extern const bcstring be_const_str_button_pressed; -extern const bcstring be_const_str_get_scrl_width; -extern const bcstring be_const_str_refresh_style; -extern const bcstring be_const_str_set_value_line_space; -extern const bcstring be_const_str_STYLE_TRANSFORM_WIDTH; -extern const bcstring be_const_str_get_style_pattern_blend_mode; -extern const bcstring be_const_str_BLEND_MODE_ADDITIVE; -extern const bcstring be_const_str_compile; -extern const bcstring be_const_str_set_style_local_margin_bottom; -extern const bcstring be_const_str_OPA_20; -extern const bcstring be_const_str_SWT1; -extern const bcstring be_const_str_get_saturation; -extern const bcstring be_const_str_set_scroll_propagation; -extern const bcstring be_const_str_get; -extern const bcstring be_const_str_blur_ver; -extern const bcstring be_const_str_SDCARD_CS; -extern const bcstring be_const_str_set_style_local_transition_delay; -extern const bcstring be_const_str_P9813_CLK; -extern const bcstring be_const_str_set_scale_width; -extern const bcstring be_const_str_ALIGN_OUT_LEFT_MID; -extern const bcstring be_const_str_PZEM017_RX; -extern const bcstring be_const_str_SM2135_DAT; -extern const bcstring be_const_str_get_style_transition_delay; -extern const bcstring be_const_str_reverse; -extern const bcstring be_const_str_SYMBOL_TRASH; -extern const bcstring be_const_str_BS814_CLK; -extern const bcstring be_const_str_save_before_restart; -extern const bcstring be_const_str_DDSU666_RX; -extern const bcstring be_const_str_STATE_PRESSED; -extern const bcstring be_const_str_TEMPL_STYLE_Y; -extern const bcstring be_const_str_CSE7761_TX; -extern const bcstring be_const_str_SOLAXX1_RX; -extern const bcstring be_const_str_lv_linemeter; -extern const bcstring be_const_str_set_style_local_image_opa; -extern const bcstring be_const_str_BORDER_SIDE_BOTTOM; -extern const bcstring be_const_str_get_recolor; -extern const bcstring be_const_str_set_line_color; -extern const bcstring be_const_str_PAGE_EDGE_BOTTOM; -extern const bcstring be_const_str_get_prev_btn; -extern const bcstring be_const_str_lv_cpicker; -extern const bcstring be_const_str_set_style_local_shadow_ofs_x; -extern const bcstring be_const_str_ALIGN_IN_BOTTOM_LEFT; -extern const bcstring be_const_str_ROT1A; -extern const bcstring be_const_str_FS_MODE_WR; -extern const bcstring be_const_str_IEM3000_RX; -extern const bcstring be_const_str_add_obj; -extern const bcstring be_const_str_acos; -extern const bcstring be_const_str_get_style_bg_grad_stop; -extern const bcstring be_const_str_get_style_pad_left; -extern const bcstring be_const_str_set_height_fit; -extern const bcstring be_const_str_set_image_blend_mode; -extern const bcstring be_const_str_STYLE_TEXT_LINE_SPACE; -extern const bcstring be_const_str_codedump; -extern const bcstring be_const_str_set_image_recolor; -extern const bcstring be_const_str_MAROON; -extern const bcstring be_const_str_STYLE_BG_GRAD_COLOR; -extern const bcstring be_const_str_get_btn_index; -extern const bcstring be_const_str_get_style_image_recolor; -extern const bcstring be_const_str_get_style_pad_right; -extern const bcstring be_const_str_set_focused_btn; -extern const bcstring be_const_str_BAR_TYPE_SYMMETRICAL; -extern const bcstring be_const_str_set_text_color; -extern const bcstring be_const_str_SYMBOL_OK; -extern const bcstring be_const_str_deinit; -extern const bcstring be_const_str_EPAPER29_CS; -extern const bcstring be_const_str_set_style_local_transition_prop_5; -extern const bcstring be_const_str_get_scrl_height; -extern const bcstring be_const_str_set_value_ofs_x; -extern const bcstring be_const_str_LABEL_LONG_BREAK; -extern const bcstring be_const_str_STYLE_TRANSFORM_ZOOM; -extern const bcstring be_const_str_lv_table; -extern const bcstring be_const_str_set_auto_realign; -extern const bcstring be_const_str_add_btn; -extern const bcstring be_const_str_set_palette; -extern const bcstring be_const_str_set_style_local_image_recolor; -extern const bcstring be_const_str_get_needle_img; -extern const bcstring be_const_str_lv_list; -extern const bcstring be_const_str_draw_rect; -extern const bcstring be_const_str_ADC_JOY; -extern const bcstring be_const_str_set_text_letter_space; -extern const bcstring be_const_str_IRSEND; -extern const bcstring be_const_str_set_pattern_image; -extern const bcstring be_const_str_STYLE_SHADOW_SPREAD; -extern const bcstring be_const_str_PULLDOWN; -extern const bcstring be_const_str__read; -extern const bcstring be_const_str_draw_img; -extern const bcstring be_const_str_STYLE_LINE_DASH_GAP; -extern const bcstring be_const_str_get_gesture_parent; -extern const bcstring be_const_str_get_parent_event; -extern const bcstring be_const_str_TM1638DIO; -extern const bcstring be_const_str_get_cursor_blink_time; -extern const bcstring be_const_str_set_cursor_manage; -extern const bcstring be_const_str_set_timer; -extern const bcstring be_const_str_LIME; -extern const bcstring be_const_str_FS_RES_LOCKED; -extern const bcstring be_const_str_set_secondary_y_tick_texts; -extern const bcstring be_const_str_set_text_sel_start; -extern const bcstring be_const_str_TEMPL_STYLE_X; -extern const bcstring be_const_str_get_scrl_fit_left; -extern const bcstring be_const_str_EVENT_LONG_PRESSED; -extern const bcstring be_const_str_HPMA_RX; -extern const bcstring be_const_str_ADC_LIGHT; -extern const bcstring be_const_str_every_100ms; -extern const bcstring be_const_str_SYMBOL_BATTERY_EMPTY; -extern const bcstring be_const_str_HX711_DAT; -extern const bcstring be_const_str_get_tab_count; -extern const bcstring be_const_str_set_style_local_text_letter_space; -extern const bcstring be_const_str_get_style_border_color; -extern const bcstring be_const_str_set_month_names; -extern const bcstring be_const_str_STYLE_SHADOW_BLEND_MODE; -extern const bcstring be_const_str_setitem; -extern const bcstring be_const_str_BTN_STATE_CHECKED_RELEASED; -extern const bcstring be_const_str_ROT1A_NP; -extern const bcstring be_const_str_TFMINIPLUS_RX; -extern const bcstring be_const_str_CHART_PART_BG; -extern const bcstring be_const_str_publish; -extern const bcstring be_const_str_ARC_PART_BG; -extern const bcstring be_const_str_LED1; -extern const bcstring be_const_str_RA8876_CS; -extern const bcstring be_const_str_TASMOTACLIENT_TXD; -extern const bcstring be_const_str_BORDER_SIDE_RIGHT; -extern const bcstring be_const_str_get_hidden; -extern const bcstring be_const_str_set_arc_length; -extern const bcstring be_const_str_set_border_side; -extern const bcstring be_const_str_CHART_TYPE_LINE; -extern const bcstring be_const_str_SPI; -extern const bcstring be_const_str_get_style_line_opa; -extern const bcstring be_const_str_set_style_local_transition_prop_4; -extern const bcstring be_const_str_GESTURE_DIR_TOP; -extern const bcstring be_const_str_set_value_ofs_y; -extern const bcstring be_const_str_opt_connect; -extern const bcstring be_const_str_BTNMATRIX_CTRL_CHECK_STATE; -extern const bcstring be_const_str_EVENT_LEAVE; -extern const bcstring be_const_str_SDM72_TX; -extern const bcstring be_const_str_fill_bg; -extern const bcstring be_const_str_set_style_local_line_dash_width; -extern const bcstring be_const_str_set_tab_act; -extern const bcstring be_const_str_CSE7761_RX; -extern const bcstring be_const_str_lv_canvas; -extern const bcstring be_const_str_srand; -extern const bcstring be_const_str_add_text; -extern const bcstring be_const_str_get_antialias; -extern const bcstring be_const_str_remove_series; -extern const bcstring be_const_str_set_pad_inner; -extern const bcstring be_const_str_get_step; -extern const bcstring be_const_str_set_state; -extern const bcstring be_const_str_LABEL_LONG_SROLL; -extern const bcstring be_const_str_get_drag_dir; -extern const bcstring be_const_str_BTN_STATE_CHECKED_PRESSED; -extern const bcstring be_const_str_INDEV_STATE_PR; -extern const bcstring be_const_str_classname; -extern const bcstring be_const_str_get_btn_selected; -extern const bcstring be_const_str_set_drag; -extern const bcstring be_const_str_set_mirror; -extern const bcstring be_const_str_CHART_CURSOR_DOWN; -extern const bcstring be_const_str_WEBCAM_HREF; -extern const bcstring be_const_str_get_col_cnt; -extern const bcstring be_const_str_set_value_blend_mode; -extern const bcstring be_const_str_SPINNER_DIR_FORWARD; -extern const bcstring be_const_str_set_style_local_value_font; -extern const bcstring be_const_str_set_transform_zoom; -extern const bcstring be_const_str_set_antialias; -extern const bcstring be_const_str_set_width_fit; -extern const bcstring be_const_str_ARC_TYPE_NORMAL; -extern const bcstring be_const_str_ETH_PHY_POWER; -extern const bcstring be_const_str_SCROLLBAR_MODE_OFF; -extern const bcstring be_const_str_set_scrollbar_mode; -extern const bcstring be_const_str_set_shadow_spread; -extern const bcstring be_const_str_set_options; -extern const bcstring be_const_str_ALIGN_OUT_BOTTOM_MID; -extern const bcstring be_const_str_SDS0X1_TX; -extern const bcstring be_const_str_set_outline_width; -extern const bcstring be_const_str_SCROLLBAR_MODE_DRAG; -extern const bcstring be_const_str_get_selected; -extern const bcstring be_const_str_CPICKER_PART_KNOB; -extern const bcstring be_const_str_TABVIEW_TAB_POS_NONE; -extern const bcstring be_const_str_except; -extern const bcstring be_const_str_OPA_90; -extern const bcstring be_const_str_OUTPUT_HI; -extern const bcstring be_const_str_TELEINFO_RX; -extern const bcstring be_const_str_get_anim_speed; -extern const bcstring be_const_str_set_style_local_outline_pad; -extern const bcstring be_const_str_str; -extern const bcstring be_const_str_STYLE_SHADOW_COLOR; -extern const bcstring be_const_str_montserrat_font; -extern const bcstring be_const_str_MAGENTA; -extern const bcstring be_const_str_set_image_recolor_opa; -extern const bcstring be_const_str_set_text_line_space; -extern const bcstring be_const_str_FS_RES_FS_ERR; -extern const bcstring be_const_str_SYMBOL_CLOSE; -extern const bcstring be_const_str__rules; -extern const bcstring be_const_str_print; -extern const bcstring be_const_str_item; -extern const bcstring be_const_str_ALIGN_OUT_RIGHT_MID; -extern const bcstring be_const_str_DROPDOWN_PART_LIST; -extern const bcstring be_const_str_SSD1331_DC; -extern const bcstring be_const_str_get_style_shadow_ofs_y; -extern const bcstring be_const_str_on_edge; -extern const bcstring be_const_str_SYMBOL_PREV; -extern const bcstring be_const_str_set_value_opa; -extern const bcstring be_const_str_set_width; -extern const bcstring be_const_str_AS608_RX; -extern const bcstring be_const_str_CHART_AXIS_PRIMARY_Y; -extern const bcstring be_const_str_TM1638STB; -extern const bcstring be_const_str_SYMBOL_FILE; -extern const bcstring be_const_str_align; -extern const bcstring be_const_str_SYMBOL_REFRESH; -extern const bcstring be_const_str_set_mode; -extern const bcstring be_const_str_add_btn_right; -extern const bcstring be_const_str_refr_text; -extern const bcstring be_const_str_SPI_DC; -extern const bcstring be_const_str_CHART_UPDATE_MODE_SHIFT; -extern const bcstring be_const_str_allocated; -extern const bcstring be_const_str_get_free_heap; -extern const bcstring be_const_str_set_rotation; -extern const bcstring be_const_str_sqrt; -extern const bcstring be_const_str_while; -extern const bcstring be_const_str_EVENT_PRESS_LOST; -extern const bcstring be_const_str_RED; -extern const bcstring be_const_str_set_long_mode; -extern const bcstring be_const_str_STYLE_PAD_TOP; -extern const bcstring be_const_str_get_x_from_index; -extern const bcstring be_const_str_set_offset_y; -extern const bcstring be_const_str_set_bg_main_stop; -extern const bcstring be_const_str_set_style_local_size; -extern const bcstring be_const_str_set_visible_row_count; -extern const bcstring be_const_str_FS_RES_INV_PARAM; -extern const bcstring be_const_str_HPMA_TX; -extern const bcstring be_const_str_NEOPOOL_TX; -extern const bcstring be_const_str_pin_mode; -extern const bcstring be_const_str_SYMBOL_VIDEO; -extern const bcstring be_const_str_MCP39F5_RST; -extern const bcstring be_const_str_log10; -extern const bcstring be_const_str_CHART_PART_SERIES; -extern const bcstring be_const_str_OPA_100; -extern const bcstring be_const_str_is_point_on_coords; -extern const bcstring be_const_str_start_auto_close; -extern const bcstring be_const_str_STYLE_BG_MAIN_STOP; -extern const bcstring be_const_str_web_send_decimal; -extern const bcstring be_const_str_ALIGN_OUT_TOP_LEFT; -extern const bcstring be_const_str_BTN_STATE_CHECKED_DISABLED; -extern const bcstring be_const_str_list_copy; -extern const bcstring be_const_str_set_style_local_scale_width; -extern const bcstring be_const_str_set_value_font; -extern const bcstring be_const_str_as; -extern const bcstring be_const_str_INPUT_PULLDOWN; -extern const bcstring be_const_str_set_bg_grad_dir; -extern const bcstring be_const_str_set_style_local_value_align; -extern const bcstring be_const_str_STYLE_VALUE_ALIGN; -extern const bcstring be_const_str_load; -extern const bcstring be_const_str_set_saturation; -extern const bcstring be_const_str_SYMBOL_NEXT; -extern const bcstring be_const_str_align_mid; -extern const bcstring be_const_str_SPINNER_DIR_BACKWARD; -extern const bcstring be_const_str_response_append; -extern const bcstring be_const_str_set_border_opa; -extern const bcstring be_const_str_get_adv_hittest; -extern const bcstring be_const_str_get_fit_top; -extern const bcstring be_const_str_DISP_ROT_270; -extern const bcstring be_const_str_OPA_40; -extern const bcstring be_const_str_allocate_ext_attr; -extern const bcstring be_const_str_get_style_pattern_recolor; -extern const bcstring be_const_str_BORDER_SIDE_LEFT; -extern const bcstring be_const_str_SBR_TX; -extern const bcstring be_const_str_set_pad_bottom; -extern const bcstring be_const_str_LABEL_ALIGN_CENTER; -extern const bcstring be_const_str_set_scale_end_border_width; -extern const bcstring be_const_str_set_style_local_shadow_width; -extern const bcstring be_const_str_SYMBOL_DUMMY; -extern const bcstring be_const_str_set_accepted_chars; -extern const bcstring be_const_str_get_user_data; -extern const bcstring be_const_str_; -extern const bcstring be_const_str_get_style_border_post; -extern const bcstring be_const_str_pow; -extern const bcstring be_const_str_set_style_local_pad_inner; -extern const bcstring be_const_str_DROPDOWN_DIR_RIGHT; -extern const bcstring be_const_str_get_knob_colored; -extern const bcstring be_const_str_get_row_cnt; -extern const bcstring be_const_str_get_style_margin_left; -extern const bcstring be_const_str__begin_transmission; -extern const bcstring be_const_str_PROTECT_PRESS_LOST; -extern const bcstring be_const_str_SPI_CLK; -extern const bcstring be_const_str_CSE7766_TX; -extern const bcstring be_const_str_get_style_shadow_ofs_x; -extern const bcstring be_const_str_get_drag_parent; -extern const bcstring be_const_str_PROTECT_PARENT; -extern const bcstring be_const_str_STYLE_RADIUS; -extern const bcstring be_const_str_STYLE_TEXT_SEL_COLOR; -extern const bcstring be_const_str_STYLE_PAD_LEFT; -extern const bcstring be_const_str_LAYOUT_COLUMN_MID; -extern const bcstring be_const_str_get_style_pattern_repeat; -extern const bcstring be_const_str_set_ctrl_map; -extern const bcstring be_const_str_clear_btn_ctrl; -extern const bcstring be_const_str_set_style_local_outline_opa; -extern const bcstring be_const_str_lower; -extern const bcstring be_const_str_type; -extern const bcstring be_const_str_PAGE_EDGE_TOP; -extern const bcstring be_const_str_EVENT_CLICKED; -extern const bcstring be_const_str_get_cursor_hidden; -extern const bcstring be_const_str_get_style_value_opa; +extern const bcstring be_const_str_lv_slider; extern const bcstring be_const_str_var; -extern const bcstring be_const_str_get_style_text_letter_space; -extern const bcstring be_const_str_set_offset_x; -extern const bcstring be_const_str_set_style_local_bg_blend_mode; -extern const bcstring be_const_str_TUYA_RX; -extern const bcstring be_const_str_clear_options; -extern const bcstring be_const_str_DISP_SIZE_MEDIUM; -extern const bcstring be_const_str_set_cell_align; -extern const bcstring be_const_str_DROPDOWN_PART_MAIN; -extern const bcstring be_const_str_KEYBOARD_MODE_NUM; -extern const bcstring be_const_str_set_bg_grad_color; -extern const bcstring be_const_str_EVENT_VALUE_CHANGED; -extern const bcstring be_const_str_step_next; -extern const bcstring be_const_str_EVENT_DRAG_BEGIN; -extern const bcstring be_const_str_SPINNER_TYPE_CONSTANT_ARC; +extern const bcstring be_const_str_TASMOTACLIENT_RST_INV; +extern const bcstring be_const_str_isinstance; +extern const bcstring be_const_str_pin_mode; +extern const bcstring be_const_str_SYMBOL_CHARGE; +extern const bcstring be_const_str_WEBCAM_VSYNC; +extern const bcstring be_const_str_opt_neq; +extern const bcstring be_const_str_BS814_CLK; +extern const bcstring be_const_str_load_freetype_font; +extern const bcstring be_const_str_LOW; +extern const bcstring be_const_str_MP3_DFR562; +extern const bcstring be_const_str_SDM72_TX; +extern const bcstring be_const_str_SENSOR_END; +extern const bcstring be_const_str_opt_add; +extern const bcstring be_const_str_DEEPSLEEP; extern const bcstring be_const_str_SPI_MISO; -extern const bcstring be_const_str_ST7789_CS; -extern const bcstring be_const_str_SYMBOL_DOWNLOAD; -extern const bcstring be_const_str__end_transmission; -extern const bcstring be_const_str_get_style_text_sel_bg_color; -extern const bcstring be_const_str_glue_obj; -extern const bcstring be_const_str_set_parent; -extern const bcstring be_const_str_list_get_style; -extern const bcstring be_const_str_set_bg_start_angle; -extern const bcstring be_const_str_upper; -extern const bcstring be_const_str_MGC3130_XFER; -extern const bcstring be_const_str_close_event_cb; -extern const bcstring be_const_str_RDM6300_RX; -extern const bcstring be_const_str_TASMOTACLIENT_RXD; -extern const bcstring be_const_str_set_cursor_blink_time; -extern const bcstring be_const_str_set_edge_flash; -extern const bcstring be_const_str_ARC_TYPE_REVERSE; -extern const bcstring be_const_str_DI; -extern const bcstring be_const_str_SYMBOL_USB; -extern const bcstring be_const_str_set_style_local_scale_end_color; -extern const bcstring be_const_str_refresh; -extern const bcstring be_const_str_set_layout; -extern const bcstring be_const_str_SR04_ECHO; -extern const bcstring be_const_str_get_header_height; -extern const bcstring be_const_str_ST7789_DC; -extern const bcstring be_const_str_get_style_scale_end_border_width; -extern const bcstring be_const_str_set_spin_time; -extern const bcstring be_const_str_start; -extern const bcstring be_const_str_get_coords; -extern const bcstring be_const_str_ALIGN_IN_BOTTOM_RIGHT; -extern const bcstring be_const_str_CYAN; -extern const bcstring be_const_str_get_ext_click_pad_left; -extern const bcstring be_const_str_NONE; -extern const bcstring be_const_str_get_series_axis; -extern const bcstring be_const_str_get_wrap; -extern const bcstring be_const_str_get_cursor_click_pos; -extern const bcstring be_const_str_size; -extern const bcstring be_const_str_break; -extern const bcstring be_const_str_elif; -extern const bcstring be_const_str_digital_write; -extern const bcstring be_const_str_get_parent; -extern const bcstring be_const_str_set_cursor_pos; -extern const bcstring be_const_str_XPT2046_CS; -extern const bcstring be_const_str_get_scrollable; -extern const bcstring be_const_str_DISP_SIZE_EXTRA_LARGE; -extern const bcstring be_const_str_PURPLE; -extern const bcstring be_const_str_remove_cmd; -extern const bcstring be_const_str_set_style_local_scale_end_line_width; -extern const bcstring be_const_str_ANIM_OFF; -extern const bcstring be_const_str_SILVER; -extern const bcstring be_const_str_TM1637CLK; -extern const bcstring be_const_str_KEY_PREV; -extern const bcstring be_const_str_cursor_down; -extern const bcstring be_const_str_DDS2382_TX; -extern const bcstring be_const_str_FS_RES_HW_ERR; -extern const bcstring be_const_str_KEY1_INV_NP; -extern const bcstring be_const_str_set_style_local_transition_path; -extern const bcstring be_const_str_cursor_left; -extern const bcstring be_const_str_get_focus_parent; -extern const bcstring be_const_str_ALIGN_OUT_TOP_RIGHT; -extern const bcstring be_const_str_LAYOUT_PRETTY_TOP; -extern const bcstring be_const_str_STYLE_BG_GRAD_DIR; -extern const bcstring be_const_str_set_scrl_width; -extern const bcstring be_const_str_set_bg_grad_stop; -extern const bcstring be_const_str_set_transform_angle; -extern const bcstring be_const_str_STYLE_CLIP_CORNER; -extern const bcstring be_const_str_get_style_border_opa; +extern const bcstring be_const_str_def; +extern const bcstring be_const_str_ADC_BUTTON; +extern const bcstring be_const_str_MHZ_TXD; +extern const bcstring be_const_str_RFRECV; +extern const bcstring be_const_str_WINDMETER_SPEED; +extern const bcstring be_const_str_SYMBOL_EJECT; +extern const bcstring be_const_str_SDM630_RX; +extern const bcstring be_const_str_SYMBOL_POWER; +extern const bcstring be_const_str_lv_btnmatrix; +extern const bcstring be_const_str_scr_act; +extern const bcstring be_const_str_setitem; +extern const bcstring be_const_str_ARIRFRCV; +extern const bcstring be_const_str_lv_label; +extern const bcstring be_const_str_module; +extern const bcstring be_const_str_traceback; +extern const bcstring be_const_str_while; +extern const bcstring be_const_str_SYMBOL_SD_CARD; +extern const bcstring be_const_str_lv_roller; +extern const bcstring be_const_str_HRE_CLOCK; +extern const bcstring be_const_str_LEDLNK_INV; +extern const bcstring be_const_str_P9813_DAT; +extern const bcstring be_const_str_rtc; extern const bcstring be_const_str_deg; -extern const bcstring be_const_str__timers; -extern const bcstring be_const_str_set_margin_bottom; -extern const bcstring be_const_str_set_style_local_outline_width; -extern const bcstring be_const_str_ALIGN_IN_TOP_MID; -extern const bcstring be_const_str_CHART_UPDATE_MODE_CIRCULAR; -extern const bcstring be_const_str_NRG_CF1; -extern const bcstring be_const_str_STYLE_BORDER_SIDE; -extern const bcstring be_const_str_get_power; +extern const bcstring be_const_str_lv_spinner; +extern const bcstring be_const_str_HM10_RX; +extern const bcstring be_const_str_MIEL_HVAC_TX; +extern const bcstring be_const_str_gamma8; +extern const bcstring be_const_str_SYMBOL_MINUS; +extern const bcstring be_const_str_NRF24_DC; +extern const bcstring be_const_str_IBEACON_RX; +extern const bcstring be_const_str_REL1_INV; +extern const bcstring be_const_str_SYMBOL_OK; +extern const bcstring be_const_str_EPAPER29_CS; +extern const bcstring be_const_str_ROT1B; +extern const bcstring be_const_str_raise; +extern const bcstring be_const_str_IRRECV; +extern const bcstring be_const_str_lv_indev; +extern const bcstring be_const_str_pop; +extern const bcstring be_const_str_lv_linemeter; +extern const bcstring be_const_str_upper; +extern const bcstring be_const_str_lv_btn; +extern const bcstring be_const_str_SYMBOL_USB; +extern const bcstring be_const_str_break; +extern const bcstring be_const_str_SYMBOL_BELL; +extern const bcstring be_const_str_SYMBOL_DOWNLOAD; +extern const bcstring be_const_str_TCP_RX; +extern const bcstring be_const_str_CHANGE; +extern const bcstring be_const_str_RISING; +extern const bcstring be_const_str_RA8876_CS; +extern const bcstring be_const_str_lv_page; +extern const bcstring be_const_str_lv_group; +extern const bcstring be_const_str_LEDLNK; +extern const bcstring be_const_str_RFSEND; +extern const bcstring be_const_str_ROT1B_NP; +extern const bcstring be_const_str_SYMBOL_BACKSPACE; +extern const bcstring be_const_str_TCP_TX; +extern const bcstring be_const_str_lv_textarea; +extern const bcstring be_const_str_SYMBOL_EDIT; +extern const bcstring be_const_str_WEBCAM_SIOD; +extern const bcstring be_const_str_set; +extern const bcstring be_const_str__end_transmission; +extern const bcstring be_const_str_run_deferred; +extern const bcstring be_const_str_ADC_JOY; +extern const bcstring be_const_str_sin; +extern const bcstring be_const_str_NEOPOOL_TX; +extern const bcstring be_const_str_DCKI; +extern const bcstring be_const_str_I2C_SCL; +extern const bcstring be_const_str_i2c_enabled; +extern const bcstring be_const_str_FALLING; +extern const bcstring be_const_str_PZEM004_RX; +extern const bcstring be_const_str_REL1; +extern const bcstring be_const_str_exec_rules; +extern const bcstring be_const_str_SM16716_CLK; +extern const bcstring be_const_str_DDSU666_RX; +extern const bcstring be_const_str_TELEINFO_RX; +extern const bcstring be_const_str_fromstring; +extern const bcstring be_const_str_gc; +extern const bcstring be_const_str_open; +extern const bcstring be_const_str_BL0940_RX; +extern const bcstring be_const_str_OUTPUT_HI; +extern const bcstring be_const_str_RF_SENSOR; +extern const bcstring be_const_str_lv_dropdown; +extern const bcstring be_const_str_IRSEND; +extern const bcstring be_const_str_ROT1A_NP; +extern const bcstring be_const_str_str; +extern const bcstring be_const_str_WEBCAM_XCLK; +extern const bcstring be_const_str_RC522_CS; +extern const bcstring be_const_str_get_option; +extern const bcstring be_const_str_tanh; +extern const bcstring be_const_str_IEM3000_RX; +extern const bcstring be_const_str_KEY1; +extern const bcstring be_const_str_compile; +extern const bcstring be_const_str_int; +extern const bcstring be_const_str_class; +extern const bcstring be_const_str_CSE7761_RX; +extern const bcstring be_const_str_montserrat_font; +extern const bcstring be_const_str_set_light; +extern const bcstring be_const_str_AS608_RX; +extern const bcstring be_const_str_SDM120_TX; +extern const bcstring be_const_str_MAX7219CS; +extern const bcstring be_const_str_PZEM0XX_TX; +extern const bcstring be_const_str_cos; +extern const bcstring be_const_str_BOILER_OT_RX; +extern const bcstring be_const_str_SWT1_NP; +extern const bcstring be_const_str_SYMBOL_VOLUME_MID; +extern const bcstring be_const_str_TM1637DIO; +extern const bcstring be_const_str_BUZZER_INV; +extern const bcstring be_const_str_SYMBOL_CUT; +extern const bcstring be_const_str_setrange; +extern const bcstring be_const_str_EPAPER42_CS; +extern const bcstring be_const_str_LE01MR_RX; +extern const bcstring be_const_str_MAX31855CLK; +extern const bcstring be_const_str_SDM120_RX; +extern const bcstring be_const_str_SYMBOL_DUMMY; +extern const bcstring be_const_str_super; +extern const bcstring be_const_str_classof; +extern const bcstring be_const_str_PMS5003_RX; +extern const bcstring be_const_str_iter; +extern const bcstring be_const_str_lv_list; +extern const bcstring be_const_str_MAX7219DIN; +extern const bcstring be_const_str_SYMBOL_LOOP; +extern const bcstring be_const_str_attrdump; +extern const bcstring be_const_str_ADC_PH; +extern const bcstring be_const_str__drivers; +extern const bcstring be_const_str_layer_top; +extern const bcstring be_const_str_scan; +extern const bcstring be_const_str_screenshot; +extern const bcstring be_const_str_DYP_RX; +extern const bcstring be_const_str_ELECTRIQ_MOODL_TX; +extern const bcstring be_const_str_time_reached; +extern const bcstring be_const_str_LED1; +extern const bcstring be_const_str_lv_chart; +extern const bcstring be_const_str_ADC_BUTTON_INV; +extern const bcstring be_const_str_TFMINIPLUS_TX; +extern const bcstring be_const_str_SPI_CLK; +extern const bcstring be_const_str_TUYA_TX; extern const bcstring be_const_str_NRG_SEL_INV; extern const bcstring be_const_str_SSPI_SCLK; -extern const bcstring be_const_str_STYLE_TRANSFORM_HEIGHT; -extern const bcstring be_const_str_lv_bar; -extern const bcstring be_const_str_ADC_BUTTON_INV; -extern const bcstring be_const_str_SYMBOL_LOOP; -extern const bcstring be_const_str_get_drag; -extern const bcstring be_const_str_get_screen; -extern const bcstring be_const_str_get_style_outline_blend_mode; -extern const bcstring be_const_str_set_drag_parent; -extern const bcstring be_const_str_get_col_width; -extern const bcstring be_const_str_WEBCAM_PCLK; -extern const bcstring be_const_str_draw_line; -extern const bcstring be_const_str_set_border_blend_mode; -extern const bcstring be_const_str_MAX7219DIN; -extern const bcstring be_const_str_set_cell_merge_right; -extern const bcstring be_const_str_CHART_PART_CURSOR; -extern const bcstring be_const_str_DISP_ROT_NONE; -extern const bcstring be_const_str_set_text_sel_bg_color; -extern const bcstring be_const_str_toupper; -extern const bcstring be_const_str_get_from_btn; -extern const bcstring be_const_str_get_style_border_blend_mode; -extern const bcstring be_const_str_set_margin_top; -extern const bcstring be_const_str_BORDER_SIDE_NONE; -extern const bcstring be_const_str_set_anim_time; -extern const bcstring be_const_str_set_outline_color; -extern const bcstring be_const_str_set_step; -extern const bcstring be_const_str_ALIGN_IN_TOP_RIGHT; -extern const bcstring be_const_str_set_style_local_text_sel_bg_color; -extern const bcstring be_const_str_OBJ_PART_REAL_FIRST; -extern const bcstring be_const_str_WEBCAM_SIOD; -extern const bcstring be_const_str_decrement; -extern const bcstring be_const_str_STATE_FOCUSED; -extern const bcstring be_const_str_SYMBOL_RIGHT; -extern const bcstring be_const_str_hittest; -extern const bcstring be_const_str_lv_style; -extern const bcstring be_const_str_try; -extern const bcstring be_const_str_set_refocus_policy; -extern const bcstring be_const_str___lower__; -extern const bcstring be_const_str_get_mode; -extern const bcstring be_const_str_CPICKER_TYPE_DISC; -extern const bcstring be_const_str_get_click_focus; -extern const bcstring be_const_str_get_style_margin_bottom; -extern const bcstring be_const_str_get_style_scale_end_line_width; +extern const bcstring be_const_str_SYMBOL_BATTERY_1; +extern const bcstring be_const_str_SYMBOL_GPS; +extern const bcstring be_const_str_SYMBOL_VOLUME_MAX; +extern const bcstring be_const_str_lv_tabview; +extern const bcstring be_const_str_size; +extern const bcstring be_const_str_I2C_SDA; +extern const bcstring be_const_str_INPUT_PULLUP; +extern const bcstring be_const_str_SOLAXX1_RX; +extern const bcstring be_const_str_get_hor_res; +extern const bcstring be_const_str_KEY1_NP; +extern const bcstring be_const_str_SYMBOL_TRASH; +extern const bcstring be_const_str_range; +extern const bcstring be_const_str_resp_cmnd_done; +extern const bcstring be_const_str_SYMBOL_CLOSE; +extern const bcstring be_const_str__begin_transmission; +extern const bcstring be_const_str_publish; +extern const bcstring be_const_str_lv_gauge; extern const bcstring be_const_str_insert; -extern const bcstring be_const_str_lv_cont; -extern const bcstring be_const_str_FIT_NONE; -extern const bcstring be_const_str_GRAY; -extern const bcstring be_const_str_anim_cb; -extern const bcstring be_const_str_get_color_mode; -extern const bcstring be_const_str_open; -extern const bcstring be_const_str_FS_RES_NOT_EX; -extern const bcstring be_const_str_set_tab_name; -extern const bcstring be_const_str_title_set_alignment; -extern const bcstring be_const_str_set_signal_cb; -extern const bcstring be_const_str_set_y_range; -extern const bcstring be_const_str_TXT_FLAG_RECOLOR; -extern const bcstring be_const_str_BTNMATRIX_CTRL_CHECKABLE; -extern const bcstring be_const_str_OPA_COVER; +extern const bcstring be_const_str_lv_spinbox; +extern const bcstring be_const_str_WEBCAM_DATA; +extern const bcstring be_const_str_SYMBOL_BATTERY_2; +extern const bcstring be_const_str_pow; +extern const bcstring be_const_str_try; +extern const bcstring be_const_str_ARIRFSEL; +extern const bcstring be_const_str__timers; +extern const bcstring be_const_str_format; +extern const bcstring be_const_str_assert; +extern const bcstring be_const_str_chars_in_string; +extern const bcstring be_const_str_lv_objmask; +extern const bcstring be_const_str_member; +extern const bcstring be_const_str_remove_rule; +extern const bcstring be_const_str_ADC_INPUT; +extern const bcstring be_const_str_byte; +extern const bcstring be_const_str_ceil; +extern const bcstring be_const_str_log10; +extern const bcstring be_const_str_time_str; +extern const bcstring be_const_str_LED1_INV; +extern const bcstring be_const_str_SYMBOL_IMAGE; +extern const bcstring be_const_str_lv_cpicker; +extern const bcstring be_const_str_ADC_TEMP; +extern const bcstring be_const_str_SYMBOL_EYE_CLOSE; +extern const bcstring be_const_str_SAIR_RX; +extern const bcstring be_const_str_SDS0X1_RX; +extern const bcstring be_const_str_SYMBOL_BATTERY_3; +extern const bcstring be_const_str_find_op; +extern const bcstring be_const_str_add_rule; +extern const bcstring be_const_str_item; +extern const bcstring be_const_str_load; +extern const bcstring be_const_str_read; +extern const bcstring be_const_str_remove_cmd; +extern const bcstring be_const_str_SYMBOL_FILE; +extern const bcstring be_const_str_SYMBOL_PLAY; +extern const bcstring be_const_str_BUZZER; +extern const bcstring be_const_str_MGC3130_RESET; +extern const bcstring be_const_str_SYMBOL_EYE_OPEN; +extern const bcstring be_const_str_sqrt; +extern const bcstring be_const_str_acos; +extern const bcstring be_const_str_pin_used; +extern const bcstring be_const_str_concat; +extern const bcstring be_const_str_lv_img; +extern const bcstring be_const_str_TM1637CLK; +extern const bcstring be_const_str_set_power; +extern const bcstring be_const_str_SI7021; +extern const bcstring be_const_str_SYMBOL_PREV; +extern const bcstring be_const_str_PULLUP; +extern const bcstring be_const_str_PWM1; +extern const bcstring be_const_str_WEBCAM_PSRCS; +extern const bcstring be_const_str_lower; +extern const bcstring be_const_str_read_bytes; +extern const bcstring be_const_str_CC1101_GDO0; +extern const bcstring be_const_str_P9813_CLK; +extern const bcstring be_const_str_DDS2382_RX; +extern const bcstring be_const_str_SYMBOL_RIGHT; +extern const bcstring be_const_str_save_before_restart; +extern const bcstring be_const_str_PROJECTOR_CTRL_RX; +extern const bcstring be_const_str_SYMBOL_SETTINGS; +extern const bcstring be_const_str_SYMBOL_CALL; +extern const bcstring be_const_str_save; +extern const bcstring be_const_str_DHT11_OUT; +extern const bcstring be_const_str_CSE7761_TX; +extern const bcstring be_const_str_ILI9341_CS; +extern const bcstring be_const_str_WEBCAM_PCLK; +extern const bcstring be_const_str_set_timer; +extern const bcstring be_const_str_Driver; +extern const bcstring be_const_str_atan; +extern const bcstring be_const_str_SYMBOL_LIST; +extern const bcstring be_const_str_SYMBOL_UPLOAD; +extern const bcstring be_const_str_lv_obj; +extern const bcstring be_const_str_ST7789_CS; +extern const bcstring be_const_str_add_driver; +extern const bcstring be_const_str_ST7789_DC; +extern const bcstring be_const_str_deinit; +extern const bcstring be_const_str_resize; +extern const bcstring be_const_str_ETH_PHY_MDIO; +extern const bcstring be_const_str_OUTPUT_LO; +extern const bcstring be_const_str_SYMBOL_VIDEO; +extern const bcstring be_const_str_TXD; +extern const bcstring be_const_str_find; +extern const bcstring be_const_str_tolower; +extern const bcstring be_const_str_MAX31855DO; +extern const bcstring be_const_str_resp_cmnd_str; +extern const bcstring be_const_str_sinh; +extern const bcstring be_const_str_lv_led; +extern const bcstring be_const_str_register_button_encoder; +extern const bcstring be_const_str_SBR_TX; +extern const bcstring be_const_str_start; +extern const bcstring be_const_str_CC1101_GDO2; +extern const bcstring be_const_str_SDCARD_CS; +extern const bcstring be_const_str_get_free_heap; +extern const bcstring be_const_str_log; +extern const bcstring be_const_str_asstring; +extern const bcstring be_const_str_CSE7766_TX; +extern const bcstring be_const_str_GPS_RX; +extern const bcstring be_const_str_reverse; +extern const bcstring be_const_str_DSB_OUT; +extern const bcstring be_const_str_calldepth; +extern const bcstring be_const_str_every_second; +extern const bcstring be_const_str_MAX31855CS; +extern const bcstring be_const_str_SR04_TRIG; +extern const bcstring be_const_str_elif; +extern const bcstring be_const_str_SSD1331_CS; +extern const bcstring be_const_str_lv_win; +extern const bcstring be_const_str_WEBCAM_PWDN; +extern const bcstring be_const_str_AS3935; +extern const bcstring be_const_str_web_add_button; +extern const bcstring be_const_str_INPUT_PULLDOWN; +extern const bcstring be_const_str_MCP39F5_TX; +extern const bcstring be_const_str_reverse_gamma10; +extern const bcstring be_const_str_CNTR1_NP; +extern const bcstring be_const_str_VL53L0X_XSHUT1; +extern const bcstring be_const_str_ZIGBEE_RX; +extern const bcstring be_const_str_SYMBOL_WARNING; +extern const bcstring be_const_str_WEBCAM_RESET; +extern const bcstring be_const_str_collect; +extern const bcstring be_const_str_digital_write; +extern const bcstring be_const_str_A4988_MS1; +extern const bcstring be_const_str_PZEM016_RX; +extern const bcstring be_const_str_top; +extern const bcstring be_const_str_SSD1331_DC; +extern const bcstring be_const_str_resolvecmnd; +extern const bcstring be_const_str_SYMBOL_BATTERY_FULL; +extern const bcstring be_const_str_WE517_RX; +extern const bcstring be_const_str_RDM6300_RX; +extern const bcstring be_const_str_SYMBOL_REFRESH; +extern const bcstring be_const_str__rules; +extern const bcstring be_const_str_print; +extern const bcstring be_const_str_HPMA_TX; +extern const bcstring be_const_str_SYMBOL_LEFT; +extern const bcstring be_const_str_lv_arc; +extern const bcstring be_const_str_get_light; +extern const bcstring be_const_str_time_dump; +extern const bcstring be_const_str_Tasmota; +extern const bcstring be_const_str_list; +extern const bcstring be_const_str_AZ_RXD; +extern const bcstring be_const_str_SYMBOL_KEYBOARD; +extern const bcstring be_const_str_if; +extern const bcstring be_const_str_type; +extern const bcstring be_const_str_WE517_TX; +extern const bcstring be_const_str_millis; +extern const bcstring be_const_str_MAX7219CLK; +extern const bcstring be_const_str_allocated; +extern const bcstring be_const_str_wire_scan; +extern const bcstring be_const_str_SYMBOL_SAVE; +extern const bcstring be_const_str__write; +extern const bcstring be_const_str_nil; +extern const bcstring be_const_str_SYMBOL_WIFI; +extern const bcstring be_const_str_delay; +extern const bcstring be_const_str_web_send_decimal; +extern const bcstring be_const_str_NEOPOOL_RX; +extern const bcstring be_const_str_SHELLY_DIMMER_BOOT0; +extern const bcstring be_const_str__available; +extern const bcstring be_const_str_ILI9341_DC; +extern const bcstring be_const_str_push; +extern const bcstring be_const_str_wire1; +extern const bcstring be_const_str_lv_switch; +extern const bcstring be_const_str_remove; +extern const bcstring be_const_str_continue; +extern const bcstring be_const_str_TM1638CLK; +extern const bcstring be_const_str_MCP39F5_RST; +extern const bcstring be_const_str_try_rule; +extern const bcstring be_const_str_lv_imgbtn; +extern const bcstring be_const_str_bus; +extern const bcstring be_const_str_WIEGAND_D1; +extern const bcstring be_const_str_bytes; +extern const bcstring be_const_str_cmd; +extern const bcstring be_const_str_lv_bar; +extern const bcstring be_const_str_resp_cmnd_error; +extern const bcstring be_const_str_SYMBOL_BLUETOOTH; +extern const bcstring be_const_str_real; +extern const bcstring be_const_str_wire2; +extern const bcstring be_const_str_GPS_TX; +extern const bcstring be_const_str_HM10_TX; +extern const bcstring be_const_str_ZEROCROSS; +extern const bcstring be_const_str_get_ver_res; +extern const bcstring be_const_str_input; +extern const bcstring be_const_str_rad; +extern const bcstring be_const_str_toupper; +extern const bcstring be_const_str_SPI_DC; +extern const bcstring be_const_str__read; +extern const bcstring be_const_str_CSE7766_RX; +extern const bcstring be_const_str_lv_checkbox; +extern const bcstring be_const_str_TM1638STB; +extern const bcstring be_const_str_event; +extern const bcstring be_const_str_lv_canvas; +extern const bcstring be_const_str_SYMBOL_COPY; +extern const bcstring be_const_str_else; +extern const bcstring be_const_str_HX711_DAT; +extern const bcstring be_const_str_WIEGAND_D0; +extern const bcstring be_const_str_OUTPUT_OPEN_DRAIN; +extern const bcstring be_const_str_detect; +extern const bcstring be_const_str_IBEACON_TX; +extern const bcstring be_const_str_classname; +extern const bcstring be_const_str_rand; +extern const bcstring be_const_str_BACKLIGHT; +extern const bcstring be_const_str__request_from; +extern const bcstring be_const_str_lv_color; +extern const bcstring be_const_str_ETH_PHY_POWER; +extern const bcstring be_const_str_HRE_DATA; +extern const bcstring be_const_str_SYMBOL_PLUS; +extern const bcstring be_const_str_dump; +extern const bcstring be_const_str_imax; +extern const bcstring be_const_str_SWT1; +extern const bcstring be_const_str_PMS5003_TX; +extern const bcstring be_const_str_TFMINIPLUS_RX; +extern const bcstring be_const_str___lower__; +extern const bcstring be_const_str_lv_table; +extern const bcstring be_const_str_clear; +extern const bcstring be_const_str_HX711_SCK; +extern const bcstring be_const_str_DDSU666_TX; +extern const bcstring be_const_str_A4988_DIR; +extern const bcstring be_const_str_WS2812; +extern const bcstring be_const_str_map; +extern const bcstring be_const_str_dot_p; +extern const bcstring be_const_str_FTC532; +extern const bcstring be_const_str_LMT01; extern const bcstring be_const_str_init; +extern const bcstring be_const_str_A4988_STP; +extern const bcstring be_const_str_ETH_PHY_MDC; +extern const bcstring be_const_str_floor; +extern const bcstring be_const_str_SPI_MOSI; +extern const bcstring be_const_str_copy; +extern const bcstring be_const_str_response_append; +extern const bcstring be_const_str_lv_cont; +extern const bcstring be_const_str_; +extern const bcstring be_const_str_IEM3000_TX; +extern const bcstring be_const_str_SYMBOL_NEXT; +extern const bcstring be_const_str_lv_calendar; +extern const bcstring be_const_str_SYMBOL_BULLET; +extern const bcstring be_const_str_keys; +extern const bcstring be_const_str_true; +extern const bcstring be_const_str_hex; +extern const bcstring be_const_str_ILI9488_CS; +extern const bcstring be_const_str_NRG_CF1; +extern const bcstring be_const_str_SOLAXX1_TX; +extern const bcstring be_const_str_WEBCAM_PSCLK; +extern const bcstring be_const_str_BS814_DAT; +extern const bcstring be_const_str_OPTION_A; +extern const bcstring be_const_str_count; +extern const bcstring be_const_str_BOILER_OT_TX; +extern const bcstring be_const_str_PULLDOWN; +extern const bcstring be_const_str_SYMBOL_BATTERY_EMPTY; +extern const bcstring be_const_str_exp; +extern const bcstring be_const_str_SR04_ECHO; +extern const bcstring be_const_str_tostring; +extern const bcstring be_const_str_TASMOTACLIENT_RST; +extern const bcstring be_const_str_get_power; +extern const bcstring be_const_str_SAIR_TX; +extern const bcstring be_const_str_SDS0X1_TX; +extern const bcstring be_const_str_yield; +extern const bcstring be_const_str_HPMA_RX; +extern const bcstring be_const_str_MGC3130_XFER; +extern const bcstring be_const_str_TM1638DIO; +extern const bcstring be_const_str_LE01MR_TX; +extern const bcstring be_const_str_SSPI_MISO; +extern const bcstring be_const_str_KEY1_INV; +extern const bcstring be_const_str_SM16716_DAT; +extern const bcstring be_const_str_SM16716_SEL; +extern const bcstring be_const_str_TASMOTACLIENT_RXD; +extern const bcstring be_const_str_gamma10; +extern const bcstring be_const_str_ZIGBEE_RST; +extern const bcstring be_const_str_SM2135_DAT; +extern const bcstring be_const_str_SSPI_MOSI; +extern const bcstring be_const_str_TASMOTACLIENT_TXD; +extern const bcstring be_const_str_char; +extern const bcstring be_const_str_codedump; +extern const bcstring be_const_str_resp_cmnd_failed; +extern const bcstring be_const_str_pin; +extern const bcstring be_const_str_as; +extern const bcstring be_const_str_KEY1_INV_NP; +extern const bcstring be_const_str_opt_eq; +extern const bcstring be_const_str_EXS_ENABLE; +extern const bcstring be_const_str_RC522_RST; +extern const bcstring be_const_str_lv_style; +extern const bcstring be_const_str_number; +extern const bcstring be_const_str_lv_line; +extern const bcstring be_const_str_asin; +extern const bcstring be_const_str_web_add_main_button; +extern const bcstring be_const_str_HRXL_RX; +extern const bcstring be_const_str_OUTPUT; +extern const bcstring be_const_str_SYMBOL_DIRECTORY; +extern const bcstring be_const_str_TUYA_RX; +extern const bcstring be_const_str_abs; +extern const bcstring be_const_str_pi; +extern const bcstring be_const_str_HJL_CF; +extern const bcstring be_const_str_INPUT; +extern const bcstring be_const_str___iterator__; +extern const bcstring be_const_str_DHT22; +extern const bcstring be_const_str_DI; +extern const bcstring be_const_str_CNTR1; +extern const bcstring be_const_str_lv_keyboard; +extern const bcstring be_const_str_opt_connect; +extern const bcstring be_const_str_EPD_DATA; +extern const bcstring be_const_str_lv_msgbox; +extern const bcstring be_const_str_PROJECTOR_CTRL_TX; +extern const bcstring be_const_str_split; +extern const bcstring be_const_str_web_sensor; +extern const bcstring be_const_str_NRG_SEL; +extern const bcstring be_const_str_SYMBOL_AUDIO; +extern const bcstring be_const_str__ccmd; +extern const bcstring be_const_str_false; +extern const bcstring be_const_str_MCP39F5_RX; +extern const bcstring be_const_str_SYMBOL_DRIVE; +extern const bcstring be_const_str_get_tasmota; +extern const bcstring be_const_str_write; +extern const bcstring be_const_str_OLED_RESET; +extern const bcstring be_const_str_SSPI_MAX31865_CS1; +extern const bcstring be_const_str_every_100ms; +extern const bcstring be_const_str_HLW_CF; +extern const bcstring be_const_str_SYMBOL_STOP; +extern const bcstring be_const_str_WEBCAM_HREF; +extern const bcstring be_const_str_cosh; +extern const bcstring be_const_str_except; +extern const bcstring be_const_str_layer_sys; +extern const bcstring be_const_str_SYMBOL_PASTE; +extern const bcstring be_const_str_TX2X_TXD_BLACK; +extern const bcstring be_const_str_do; +extern const bcstring be_const_str_SM2135_CLK; +extern const bcstring be_const_str_find_key_i; +extern const bcstring be_const_str_load_font; +extern const bcstring be_const_str_write_bytes; +extern const bcstring be_const_str_A4988_ENA; +extern const bcstring be_const_str_MIEL_HVAC_RX; +extern const bcstring be_const_str_SYMBOL_SHUFFLE; +extern const bcstring be_const_str_ADC_LIGHT; +extern const bcstring be_const_str_SHELLY_DIMMER_RST_INV; +extern const bcstring be_const_str__cmd; +extern const bcstring be_const_str_return; +extern const bcstring be_const_str_resp_cmnd; +extern const bcstring be_const_str_AZ_TXD; +extern const bcstring be_const_str_DHT11; +extern const bcstring be_const_str_exec_cmd; +extern const bcstring be_const_str_get; +extern const bcstring be_const_str_lv_tileview; +extern const bcstring be_const_str_MHZ_RXD; +extern const bcstring be_const_str_SBR_RX; +extern const bcstring be_const_str_SDM72_RX; +extern const bcstring be_const_str_lv_font; +extern const bcstring be_const_str_seg7_font; +extern const bcstring be_const_str_DSB; +extern const bcstring be_const_str_SSD1351_CS; +extern const bcstring be_const_str___upper__; +extern const bcstring be_const_str_json_append; +extern const bcstring be_const_str_srand; +extern const bcstring be_const_str_OPEN_DRAIN; +extern const bcstring be_const_str_PN532_RXD; +extern const bcstring be_const_str_SDM630_TX; +extern const bcstring be_const_str_SSD1351_DC; +extern const bcstring be_const_str_end; +extern const bcstring be_const_str_AS608_TX; +extern const bcstring be_const_str_SYMBOL_DOWN; +extern const bcstring be_const_str_Wire; +extern const bcstring be_const_str_NONE; +extern const bcstring be_const_str_PN532_TXD; +extern const bcstring be_const_str_PZEM017_RX; +extern const bcstring be_const_str_SSPI_DC; +extern const bcstring be_const_str_SYMBOL_PAUSE; +extern const bcstring be_const_str_PWM1_INV; +extern const bcstring be_const_str_SYMBOL_NEW_LINE; +extern const bcstring be_const_str_tan; +extern const bcstring be_const_str_HIGH; +extern const bcstring be_const_str_SYMBOL_HOME; +extern const bcstring be_const_str_ADC_RANGE; +extern const bcstring be_const_str_issubclass; +extern const bcstring be_const_str_XPT2046_CS; +extern const bcstring be_const_str_WEBCAM_SIOC; +extern const bcstring be_const_str_for; +extern const bcstring be_const_str_import; +extern const bcstring be_const_str_WEBCAM_HSD; +extern const bcstring be_const_str_digital_read; +extern const bcstring be_const_str_imin; +extern const bcstring be_const_str_SSPI_CS; +extern const bcstring be_const_str_ADC_CT_POWER; +extern const bcstring be_const_str_SYMBOL_MUTE; +extern const bcstring be_const_str_add; +extern const bcstring be_const_str_ROT1A; +extern const bcstring be_const_str_ZIGBEE_TX; +extern const bcstring be_const_str_DDS2382_TX; +extern const bcstring be_const_str_SYMBOL_UP; +extern const bcstring be_const_str_TELEINFO_ENABLE; +extern const bcstring be_const_str_HALLEFFECT; +extern const bcstring be_const_str_RXD; +extern const bcstring be_const_str_add_cmd; +extern const bcstring be_const_str_scale_uint; +extern const bcstring be_const_str_SPI_CS; +extern const bcstring be_const_str_NRF24_CS; diff --git a/lib/libesp32/Berry/generate/be_const_strtab_def.h b/lib/libesp32/Berry/generate/be_const_strtab_def.h index 745adb3b3..6720eb97d 100644 --- a/lib/libesp32/Berry/generate/be_const_strtab_def.h +++ b/lib/libesp32/Berry/generate/be_const_strtab_def.h @@ -1,2589 +1,843 @@ -be_define_const_str(set_bg_angles, "set_bg_angles", 2873640992u, 0, 13, NULL); -be_define_const_str(BACKLIGHT, "BACKLIGHT", 3147761926u, 0, 9, &be_const_str_get_min_value); -be_define_const_str(get_min_value, "get_min_value", 3238705374u, 0, 13, &be_const_str_def); -be_define_const_str(def, "def", 3310976652u, 55, 3, NULL); -be_define_const_str(ALIGN_OUT_TOP_MID, "ALIGN_OUT_TOP_MID", 1680148984u, 0, 17, &be_const_str_TEXT_DECOR_UNDERLINE); -be_define_const_str(TEXT_DECOR_UNDERLINE, "TEXT_DECOR_UNDERLINE", 1425097719u, 0, 20, &be_const_str_dump); -be_define_const_str(dump, "dump", 3663001223u, 0, 4, &be_const_str_get_y_invert); -be_define_const_str(get_y_invert, "get_y_invert", 2518095240u, 0, 12, NULL); -be_define_const_str(cut_text, "cut_text", 3023853443u, 0, 8, NULL); -be_define_const_str(remove_all_objs, "remove_all_objs", 2136122696u, 0, 15, NULL); -be_define_const_str(input, "input", 4191711099u, 0, 5, &be_const_str_continue); -be_define_const_str(continue, "continue", 2977070660u, 59, 8, NULL); -be_define_const_str(HRE_CLOCK, "HRE_CLOCK", 2870559111u, 0, 9, &be_const_str_list_init); -be_define_const_str(list_init, "list_init", 2798529232u, 0, 9, NULL); -be_define_const_str(get_style_pattern_image, "get_style_pattern_image", 2402970102u, 0, 23, NULL); -be_define_const_str(STYLE_LINE_OPA, "STYLE_LINE_OPA", 1080991556u, 0, 14, &be_const_str_get_critical_value); -be_define_const_str(get_critical_value, "get_critical_value", 4180625515u, 0, 18, NULL); -be_define_const_str(dot_p, ".p", 1171526419u, 0, 2, &be_const_str_ALIGN_CENTER); -be_define_const_str(ALIGN_CENTER, "ALIGN_CENTER", 622705366u, 0, 12, NULL); -be_define_const_str(FS_RES_OUT_OF_MEM, "FS_RES_OUT_OF_MEM", 802499854u, 0, 17, &be_const_str_set_angles); -be_define_const_str(set_angles, "set_angles", 895400084u, 0, 10, NULL); -be_define_const_str(reset_style_list, "reset_style_list", 4135460875u, 0, 16, NULL); -be_define_const_str(AZ_TXD, "AZ_TXD", 850268709u, 0, 6, NULL); -be_define_const_str(MAX31855DO, "MAX31855DO", 552730368u, 0, 10, &be_const_str_SSPI_DC); -be_define_const_str(SSPI_DC, "SSPI_DC", 1782271864u, 0, 7, &be_const_str_set_options_static); -be_define_const_str(set_options_static, "set_options_static", 652047717u, 0, 18, NULL); -be_define_const_str(HLW_CF, "HLW_CF", 3982619486u, 0, 6, &be_const_str_REL1_INV); -be_define_const_str(REL1_INV, "REL1_INV", 3733155371u, 0, 8, NULL); -be_define_const_str(del_char, "del_char", 3624762103u, 0, 8, NULL); -be_define_const_str(LAYOUT_PRETTY_BOTTOM, "LAYOUT_PRETTY_BOTTOM", 2090319170u, 0, 20, &be_const_str_lv_spinbox); -be_define_const_str(lv_spinbox, "lv_spinbox", 2666096729u, 0, 10, &be_const_str_set_style_local_pad_right); -be_define_const_str(set_style_local_pad_right, "set_style_local_pad_right", 1126712366u, 0, 25, NULL); -be_define_const_str(KEY_UP, "KEY_UP", 1961213356u, 0, 6, &be_const_str_set_needle_count); -be_define_const_str(set_needle_count, "set_needle_count", 2611099555u, 0, 16, NULL); -be_define_const_str(DCKI, "DCKI", 3846847480u, 0, 4, &be_const_str_MCP39F5_TX); -be_define_const_str(MCP39F5_TX, "MCP39F5_TX", 1332322047u, 0, 10, &be_const_str_SDM630_RX); -be_define_const_str(SDM630_RX, "SDM630_RX", 1971606309u, 0, 9, &be_const_str_draw_polygon); -be_define_const_str(draw_polygon, "draw_polygon", 271325674u, 0, 12, &be_const_str_write_bytes); -be_define_const_str(write_bytes, "write_bytes", 1227543792u, 0, 11, NULL); -be_define_const_str(TEAL, "TEAL", 1728307679u, 0, 4, &be_const_str_imax); -be_define_const_str(imax, "imax", 3084515410u, 0, 4, NULL); -be_define_const_str(INPUT, "INPUT", 1638025307u, 0, 5, &be_const_str_lv_dropdown); -be_define_const_str(lv_dropdown, "lv_dropdown", 2797165301u, 0, 11, &be_const_str_set_title); -be_define_const_str(set_title, "set_title", 793032418u, 0, 9, NULL); -be_define_const_str(LE01MR_RX, "LE01MR_RX", 1521590809u, 0, 9, NULL); -be_define_const_str(set_border_post, "set_border_post", 2318575153u, 0, 15, &be_const_str_if); -be_define_const_str(if, "if", 959999494u, 50, 2, NULL); -be_define_const_str(ALIGN_OUT_BOTTOM_RIGHT, "ALIGN_OUT_BOTTOM_RIGHT", 3680861364u, 0, 22, &be_const_str_BTNMATRIX_CTRL_DISABLED); -be_define_const_str(BTNMATRIX_CTRL_DISABLED, "BTNMATRIX_CTRL_DISABLED", 2790045315u, 0, 23, &be_const_str_STYLE_PATTERN_REPEAT); -be_define_const_str(STYLE_PATTERN_REPEAT, "STYLE_PATTERN_REPEAT", 721793275u, 0, 20, &be_const_str_SWT1_NP); -be_define_const_str(SWT1_NP, "SWT1_NP", 4033043739u, 0, 7, &be_const_str_set_highlighted_dates); -be_define_const_str(set_highlighted_dates, "set_highlighted_dates", 344528435u, 0, 21, NULL); -be_define_const_str(FS_RES_DENIED, "FS_RES_DENIED", 63556207u, 0, 13, NULL); -be_define_const_str(SYMBOL_VOLUME_MAX, "SYMBOL_VOLUME_MAX", 3582646093u, 0, 17, NULL); -be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, &be_const_str_init_draw_line_dsc); -be_define_const_str(init_draw_line_dsc, "init_draw_line_dsc", 2507936040u, 0, 18, &be_const_str_top); -be_define_const_str(top, "top", 2802900028u, 0, 3, NULL); -be_define_const_str(PROJECTOR_CTRL_TX, "PROJECTOR_CTRL_TX", 535811130u, 0, 17, NULL); -be_define_const_str(ARIRFRCV, "ARIRFRCV", 1120816444u, 0, 8, &be_const_str_TXT_FLAG_RIGHT); -be_define_const_str(TXT_FLAG_RIGHT, "TXT_FLAG_RIGHT", 3664649251u, 0, 14, &be_const_str_set_style_local_margin_left); -be_define_const_str(set_style_local_margin_left, "set_style_local_margin_left", 3162175100u, 0, 27, NULL); -be_define_const_str(set_scrollable_fit, "set_scrollable_fit", 4068661613u, 0, 18, NULL); -be_define_const_str(LED1_INV, "LED1_INV", 2112045097u, 0, 8, NULL); -be_define_const_str(get_mirror, "get_mirror", 2155743435u, 0, 10, &be_const_str_get_zoom); -be_define_const_str(get_zoom, "get_zoom", 2259829907u, 0, 8, &be_const_str_lv_img); -be_define_const_str(lv_img, "lv_img", 2474052327u, 0, 6, NULL); -be_define_const_str(EVENT_PRESSED, "EVENT_PRESSED", 3734627670u, 0, 13, &be_const_str_set_style_local_bg_opa); -be_define_const_str(set_style_local_bg_opa, "set_style_local_bg_opa", 1720245992u, 0, 22, NULL); -be_define_const_str(FTC532, "FTC532", 3182343438u, 0, 6, &be_const_str_KEY_END); -be_define_const_str(KEY_END, "KEY_END", 1131758734u, 0, 7, &be_const_str_get_style_line_color); -be_define_const_str(get_style_line_color, "get_style_line_color", 805371932u, 0, 20, &be_const_str_lv_slider); -be_define_const_str(lv_slider, "lv_slider", 2274180781u, 0, 9, &be_const_str_resp_cmnd); -be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, &be_const_str_set_cursor_point); -be_define_const_str(set_cursor_point, "set_cursor_point", 4201331267u, 0, 16, NULL); -be_define_const_str(ANIM_ON, "ANIM_ON", 1377334024u, 0, 7, &be_const_str_load_font); -be_define_const_str(load_font, "load_font", 1875840019u, 0, 9, NULL); -be_define_const_str(EVENT_DRAG_THROW_BEGIN, "EVENT_DRAG_THROW_BEGIN", 977261671u, 0, 22, &be_const_str_add_driver); -be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, NULL); -be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_set_tasmota_logo); -be_define_const_str(set_tasmota_logo, "set_tasmota_logo", 4090375591u, 0, 16, NULL); -be_define_const_str(SDM120_TX, "SDM120_TX", 2509332415u, 0, 9, &be_const_str_SYMBOL_CALL); -be_define_const_str(SYMBOL_CALL, "SYMBOL_CALL", 1444504366u, 0, 11, NULL); -be_define_const_str(PROTECT_NONE, "PROTECT_NONE", 2861685391u, 0, 12, &be_const_str_count); -be_define_const_str(count, "count", 967958004u, 0, 5, NULL); -be_define_const_str(clear_selection, "clear_selection", 4157132227u, 0, 15, &be_const_str_get_size); -be_define_const_str(get_size, "get_size", 2803644713u, 0, 8, &be_const_str_set_style_local_transform_height); -be_define_const_str(set_style_local_transform_height, "set_style_local_transform_height", 2823225328u, 0, 32, NULL); -be_define_const_str(TCP_TX, "TCP_TX", 2762594089u, 0, 6, NULL); -be_define_const_str(set_scale_end_line_width, "set_scale_end_line_width", 1121812764u, 0, 24, &be_const_str_set_transform_width); -be_define_const_str(set_transform_width, "set_transform_width", 3190371031u, 0, 19, NULL); -be_define_const_str(del_async, "del_async", 2148432385u, 0, 9, NULL); -be_define_const_str(FS_RES_UNKNOWN, "FS_RES_UNKNOWN", 352331702u, 0, 14, &be_const_str_LAYOUT_GRID); -be_define_const_str(LAYOUT_GRID, "LAYOUT_GRID", 1755252272u, 0, 11, &be_const_str_STATE_CHECKED); -be_define_const_str(STATE_CHECKED, "STATE_CHECKED", 136056964u, 0, 13, &be_const_str_STYLE_LINE_BLEND_MODE); -be_define_const_str(STYLE_LINE_BLEND_MODE, "STYLE_LINE_BLEND_MODE", 1400961281u, 0, 21, &be_const_str_get_options); -be_define_const_str(get_options, "get_options", 1198221094u, 0, 11, NULL); -be_define_const_str(finish_transitions, "finish_transitions", 1663237457u, 0, 18, &be_const_str_get_style_value_str); -be_define_const_str(get_style_value_str, "get_style_value_str", 967747319u, 0, 19, &be_const_str_set_bg_opa); -be_define_const_str(set_bg_opa, "set_bg_opa", 3379539138u, 0, 10, &be_const_str_set_cursor_click_pos); -be_define_const_str(set_cursor_click_pos, "set_cursor_click_pos", 641192476u, 0, 20, NULL); -be_define_const_str(get_hor_res, "get_hor_res", 37131144u, 0, 11, &be_const_str_get_placeholder_text); -be_define_const_str(get_placeholder_text, "get_placeholder_text", 1148345333u, 0, 20, &be_const_str_get_point_id); -be_define_const_str(get_point_id, "get_point_id", 2837084878u, 0, 12, NULL); -be_define_const_str(LAYOUT_OFF, "LAYOUT_OFF", 3375414885u, 0, 10, &be_const_str_log); -be_define_const_str(log, "log", 1062293841u, 0, 3, &be_const_str_lv_obj); -be_define_const_str(lv_obj, "lv_obj", 4257833149u, 0, 6, NULL); -be_define_const_str(TM1637DIO, "TM1637DIO", 1574659381u, 0, 9, &be_const_str_lv_textarea); -be_define_const_str(lv_textarea, "lv_textarea", 2864635074u, 0, 11, &be_const_str_set_scale_grad_color); -be_define_const_str(set_scale_grad_color, "set_scale_grad_color", 818937207u, 0, 20, NULL); -be_define_const_str(BTN_STATE_DISABLED, "BTN_STATE_DISABLED", 496829054u, 0, 18, NULL); -be_define_const_str(get_group, "get_group", 1497401467u, 0, 9, NULL); -be_define_const_str(HALLEFFECT, "HALLEFFECT", 3334305407u, 0, 10, NULL); -be_define_const_str(SCROLLBAR_MODE_UNHIDE, "SCROLLBAR_MODE_UNHIDE", 827854473u, 0, 21, NULL); -be_define_const_str(SM2135_CLK, "SM2135_CLK", 2383410011u, 0, 10, &be_const_str_get_style_radius); -be_define_const_str(get_style_radius, "get_style_radius", 1315526516u, 0, 16, &be_const_str_remove_obj); -be_define_const_str(remove_obj, "remove_obj", 2093082931u, 0, 10, NULL); -be_define_const_str(SYMBOL_BATTERY_FULL, "SYMBOL_BATTERY_FULL", 2638935545u, 0, 19, &be_const_str__drivers); -be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, &be_const_str_set_update_mode); -be_define_const_str(set_update_mode, "set_update_mode", 2089081509u, 0, 15, NULL); -be_define_const_str(EVENT_INSERT, "EVENT_INSERT", 3754467621u, 0, 12, &be_const_str_set_header_height); -be_define_const_str(set_header_height, "set_header_height", 2913303849u, 0, 17, NULL); -be_define_const_str(get_accepted_chars, "get_accepted_chars", 2210030087u, 0, 18, &be_const_str_set_checkable); -be_define_const_str(set_checkable, "set_checkable", 3024222852u, 0, 13, NULL); -be_define_const_str(CNTR1_NP, "CNTR1_NP", 4288381648u, 0, 8, &be_const_str_I2C); -be_define_const_str(I2C, "I2C", 4096783347u, 0, 3, &be_const_str_set_shadow_width); -be_define_const_str(set_shadow_width, "set_shadow_width", 1524575495u, 0, 16, &be_const_str_try_rule); -be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, NULL); -be_define_const_str(close, "close", 667630371u, 0, 5, &be_const_str_set_color_mode_fixed); -be_define_const_str(set_color_mode_fixed, "set_color_mode_fixed", 802591178u, 0, 20, &be_const_str_set_value); -be_define_const_str(set_value, "set_value", 2288413965u, 0, 9, NULL); -be_define_const_str(TABVIEW_TAB_POS_TOP, "TABVIEW_TAB_POS_TOP", 4224766616u, 0, 19, &be_const_str_set_text_sel); -be_define_const_str(set_text_sel, "set_text_sel", 1928405316u, 0, 12, NULL); -be_define_const_str(EVENT_GESTURE, "EVENT_GESTURE", 2506519243u, 0, 13, &be_const_str_SYMBOL_CUT); -be_define_const_str(SYMBOL_CUT, "SYMBOL_CUT", 3455112394u, 0, 10, NULL); -be_define_const_str(BORDER_SIDE_INTERNAL, "BORDER_SIDE_INTERNAL", 4209377645u, 0, 20, &be_const_str_KEY_DEL); -be_define_const_str(KEY_DEL, "KEY_DEL", 1749022830u, 0, 7, &be_const_str_LAYOUT_COLUMN_RIGHT); -be_define_const_str(LAYOUT_COLUMN_RIGHT, "LAYOUT_COLUMN_RIGHT", 912913083u, 0, 19, NULL); -be_define_const_str(DEEPSLEEP, "DEEPSLEEP", 189922226u, 0, 9, &be_const_str_get_style_text_opa); -be_define_const_str(get_style_text_opa, "get_style_text_opa", 2378295432u, 0, 18, NULL); -be_define_const_str(LABEL_ALIGN_AUTO, "LABEL_ALIGN_AUTO", 1755016863u, 0, 16, &be_const_str_STYLE_IMAGE_RECOLOR_OPA); -be_define_const_str(STYLE_IMAGE_RECOLOR_OPA, "STYLE_IMAGE_RECOLOR_OPA", 3785340258u, 0, 23, &be_const_str_get_color); -be_define_const_str(get_color, "get_color", 754086191u, 0, 9, &be_const_str_set_style_local_shadow_blend_mode); -be_define_const_str(set_style_local_shadow_blend_mode, "set_style_local_shadow_blend_mode", 2580830900u, 0, 33, NULL); -be_define_const_str(DISP_ROT_180, "DISP_ROT_180", 1300448899u, 0, 12, &be_const_str_get_style_scale_border_width); -be_define_const_str(get_style_scale_border_width, "get_style_scale_border_width", 206289592u, 0, 28, &be_const_str_save); -be_define_const_str(save, "save", 3439296072u, 0, 4, NULL); -be_define_const_str(SSD1351_CS, "SSD1351_CS", 488746042u, 0, 10, NULL); -be_define_const_str(ALIGN_IN_LEFT_MID, "ALIGN_IN_LEFT_MID", 60432565u, 0, 17, &be_const_str_set_points); -be_define_const_str(set_points, "set_points", 1252105979u, 0, 10, &be_const_str_text_is_selected); -be_define_const_str(text_is_selected, "text_is_selected", 3422750433u, 0, 16, NULL); -be_define_const_str(EVENT_FOCUSED, "EVENT_FOCUSED", 3253401785u, 0, 13, NULL); -be_define_const_str(KEYBOARD_MODE_TEXT_LOWER, "KEYBOARD_MODE_TEXT_LOWER", 3755201214u, 0, 24, &be_const_str_MP3_DFR562); -be_define_const_str(MP3_DFR562, "MP3_DFR562", 2859952977u, 0, 10, &be_const_str_STYLE_PATTERN_IMAGE); -be_define_const_str(STYLE_PATTERN_IMAGE, "STYLE_PATTERN_IMAGE", 3293741009u, 0, 19, &be_const_str_get_width_fit); -be_define_const_str(get_width_fit, "get_width_fit", 416240192u, 0, 13, NULL); -be_define_const_str(GPS_RX, "GPS_RX", 1075637342u, 0, 6, NULL); -be_define_const_str(report_style_mod, "report_style_mod", 4174977870u, 0, 16, NULL); -be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, &be_const_str_set_next); -be_define_const_str(set_next, "set_next", 1039873613u, 0, 8, &be_const_str_set_recolor); -be_define_const_str(set_recolor, "set_recolor", 2750390248u, 0, 11, NULL); -be_define_const_str(set_user_data, "set_user_data", 3596043360u, 0, 13, NULL); -be_define_const_str(lv_indev, "lv_indev", 225602374u, 0, 8, NULL); -be_define_const_str(SSD1351_DC, "SSD1351_DC", 84950353u, 0, 10, &be_const_str_SYMBOL_IMAGE); -be_define_const_str(SYMBOL_IMAGE, "SYMBOL_IMAGE", 815601151u, 0, 12, &be_const_str_gamma8); -be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, NULL); -be_define_const_str(set_color, "set_color", 3381219579u, 0, 9, NULL); -be_define_const_str(FALLING, "FALLING", 2851701064u, 0, 7, &be_const_str_get_cursor_point); -be_define_const_str(get_cursor_point, "get_cursor_point", 2365780231u, 0, 16, &be_const_str_get_long_mode); -be_define_const_str(get_long_mode, "get_long_mode", 2750961764u, 0, 13, NULL); -be_define_const_str(json_append, "json_append", 3002019284u, 0, 11, NULL); -be_define_const_str(lv_win, "lv_win", 780927558u, 0, 6, &be_const_str_scroll_ver); -be_define_const_str(scroll_ver, "scroll_ver", 3241545950u, 0, 10, &be_const_str_set_shadow_opa); -be_define_const_str(set_shadow_opa, "set_shadow_opa", 1336611849u, 0, 14, NULL); -be_define_const_str(BTNMATRIX_CTRL_NO_REPEAT, "BTNMATRIX_CTRL_NO_REPEAT", 2228999978u, 0, 24, &be_const_str_blur_hor); -be_define_const_str(blur_hor, "blur_hor", 346002478u, 0, 8, &be_const_str_set_style_local_text_blend_mode); -be_define_const_str(set_style_local_text_blend_mode, "set_style_local_text_blend_mode", 3467626777u, 0, 31, NULL); -be_define_const_str(reset, "reset", 1695364032u, 0, 5, NULL); -be_define_const_str(BLACK, "BLACK", 1750494276u, 0, 5, NULL); -be_define_const_str(DROPDOWN_DIR_UP, "DROPDOWN_DIR_UP", 2415359156u, 0, 15, &be_const_str_map); -be_define_const_str(map, "map", 3751997361u, 0, 3, NULL); -be_define_const_str(get_tab, "get_tab", 2415176615u, 0, 7, &be_const_str_set_formatter_cb); -be_define_const_str(set_formatter_cb, "set_formatter_cb", 1245371562u, 0, 16, NULL); -be_define_const_str(KEY1_NP, "KEY1_NP", 709918726u, 0, 7, &be_const_str_OUTPUT_LO); -be_define_const_str(OUTPUT_LO, "OUTPUT_LO", 3724620328u, 0, 9, &be_const_str_TXT_CMD_STATE_WAIT); -be_define_const_str(TXT_CMD_STATE_WAIT, "TXT_CMD_STATE_WAIT", 1721068338u, 0, 18, &be_const_str_set); -be_define_const_str(set, "set", 3324446467u, 0, 3, NULL); -be_define_const_str(get_show_selected, "get_show_selected", 3185075651u, 0, 17, &be_const_str_wire2); -be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, NULL); -be_define_const_str(set_secondary_y_tick_length, "set_secondary_y_tick_length", 4022147583u, 0, 27, &be_const_str_set_style_local_pattern_recolor_opa); -be_define_const_str(set_style_local_pattern_recolor_opa, "set_style_local_pattern_recolor_opa", 2215956762u, 0, 35, NULL); -be_define_const_str(I2C_SCL, "I2C_SCL", 164217098u, 0, 7, &be_const_str_asin); -be_define_const_str(asin, "asin", 4272848550u, 0, 4, NULL); -be_define_const_str(PWM1_INV, "PWM1_INV", 3939021030u, 0, 8, &be_const_str_set_show_selected); -be_define_const_str(set_show_selected, "set_show_selected", 1276300495u, 0, 17, &be_const_str_set_style_local_text_sel_color); -be_define_const_str(set_style_local_text_sel_color, "set_style_local_text_sel_color", 3749375246u, 0, 30, NULL); -be_define_const_str(SYMBOL_EDIT, "SYMBOL_EDIT", 1396182822u, 0, 11, &be_const_str_set_parent_event); -be_define_const_str(set_parent_event, "set_parent_event", 49610579u, 0, 16, &be_const_str_set_scrl_height); -be_define_const_str(set_scrl_height, "set_scrl_height", 3462735686u, 0, 15, NULL); -be_define_const_str(DHT22, "DHT22", 215937903u, 0, 5, &be_const_str_set_shadow_color); -be_define_const_str(set_shadow_color, "set_shadow_color", 1565203920u, 0, 16, NULL); -be_define_const_str(align_mid_y, "align_mid_y", 1664201395u, 0, 11, NULL); -be_define_const_str(get_one_line, "get_one_line", 3981525171u, 0, 12, &be_const_str_rad); -be_define_const_str(rad, "rad", 1358899048u, 0, 3, &be_const_str_set_start_value); -be_define_const_str(set_start_value, "set_start_value", 1399674154u, 0, 15, NULL); -be_define_const_str(CHART_CURSOR_LEFT, "CHART_CURSOR_LEFT", 2003546122u, 0, 17, &be_const_str_add_btn_left); -be_define_const_str(add_btn_left, "add_btn_left", 3984572941u, 0, 12, &be_const_str_get_option_cnt); -be_define_const_str(get_option_cnt, "get_option_cnt", 2922481u, 0, 14, NULL); -be_define_const_str(WINDMETER_SPEED, "WINDMETER_SPEED", 1980822204u, 0, 15, &be_const_str_every_second); -be_define_const_str(every_second, "every_second", 2075451465u, 0, 12, &be_const_str_set_series_axis); -be_define_const_str(set_series_axis, "set_series_axis", 3828439823u, 0, 15, NULL); -be_define_const_str(KEY_LEFT, "KEY_LEFT", 3050288868u, 0, 8, &be_const_str_ROLLER_MODE_INFINITE); -be_define_const_str(ROLLER_MODE_INFINITE, "ROLLER_MODE_INFINITE", 288931678u, 0, 20, &be_const_str_add_btns); -be_define_const_str(add_btns, "add_btns", 828629896u, 0, 8, &be_const_str_bytes); -be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, &be_const_str_def_event_cb); -be_define_const_str(def_event_cb, "def_event_cb", 3544166485u, 0, 12, &be_const_str_set_bg_blend_mode); -be_define_const_str(set_bg_blend_mode, "set_bg_blend_mode", 2432224687u, 0, 17, NULL); -be_define_const_str(DROPDOWN_DIR_LEFT, "DROPDOWN_DIR_LEFT", 3057408860u, 0, 17, &be_const_str_STYLE_VALUE_OPA); -be_define_const_str(STYLE_VALUE_OPA, "STYLE_VALUE_OPA", 2917777025u, 0, 15, &be_const_str_draw_scale); -be_define_const_str(draw_scale, "draw_scale", 3602887006u, 0, 10, &be_const_str_push); -be_define_const_str(push, "push", 2272264157u, 0, 4, &be_const_str_read_bytes); -be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, &be_const_str_set_style_local_margin_top); -be_define_const_str(set_style_local_margin_top, "set_style_local_margin_top", 2065926016u, 0, 26, NULL); -be_define_const_str(STYLE_OUTLINE_PAD, "STYLE_OUTLINE_PAD", 2090004501u, 0, 17, &be_const_str_SYMBOL_LIST); -be_define_const_str(SYMBOL_LIST, "SYMBOL_LIST", 70793990u, 0, 11, &be_const_str_TXT_FLAG_EXPAND); -be_define_const_str(TXT_FLAG_EXPAND, "TXT_FLAG_EXPAND", 964598951u, 0, 15, NULL); -be_define_const_str(set_shadow_ofs_y, "set_shadow_ofs_y", 3086758033u, 0, 16, NULL); -be_define_const_str(ILI9488_CS, "ILI9488_CS", 2363112073u, 0, 10, &be_const_str_layer_sys); -be_define_const_str(layer_sys, "layer_sys", 593658256u, 0, 9, NULL); -be_define_const_str(ZIGBEE_TX, "ZIGBEE_TX", 25119256u, 0, 9, &be_const_str_set_one_line); -be_define_const_str(set_one_line, "set_one_line", 3397406135u, 0, 12, NULL); -be_define_const_str(event, "event", 4264611999u, 0, 5, NULL); -be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, NULL); -be_define_const_str(IBEACON_TX, "IBEACON_TX", 3471826977u, 0, 10, &be_const_str_STYLE_OUTLINE_WIDTH); -be_define_const_str(STYLE_OUTLINE_WIDTH, "STYLE_OUTLINE_WIDTH", 2786055068u, 0, 19, &be_const_str_SYMBOL_AUDIO); -be_define_const_str(SYMBOL_AUDIO, "SYMBOL_AUDIO", 3056537956u, 0, 12, &be_const_str_get_click); -be_define_const_str(get_click, "get_click", 1755279632u, 0, 9, &be_const_str_get_max_height); -be_define_const_str(get_max_height, "get_max_height", 3803847844u, 0, 14, NULL); -be_define_const_str(write, "write", 3190202204u, 0, 5, NULL); -be_define_const_str(EXS_ENABLE, "EXS_ENABLE", 1896914313u, 0, 10, &be_const_str_get_obj_act); -be_define_const_str(get_obj_act, "get_obj_act", 2401444194u, 0, 11, NULL); -be_define_const_str(IRRECV, "IRRECV", 1743648982u, 0, 6, NULL); -be_define_const_str(HIGH, "HIGH", 2066738941u, 0, 4, &be_const_str_get_focused); -be_define_const_str(get_focused, "get_focused", 973974289u, 0, 11, &be_const_str_get_style_opa_scale); -be_define_const_str(get_style_opa_scale, "get_style_opa_scale", 568621865u, 0, 19, &be_const_str_get_style_shadow_width); -be_define_const_str(get_style_shadow_width, "get_style_shadow_width", 4237112141u, 0, 22, NULL); -be_define_const_str(EPAPER42_CS, "EPAPER42_CS", 3274717451u, 0, 11, &be_const_str_get_max_length); -be_define_const_str(get_max_length, "get_max_length", 13029699u, 0, 14, &be_const_str_set_power); -be_define_const_str(set_power, "set_power", 549820893u, 0, 9, &be_const_str_set_style_local_outline_color); -be_define_const_str(set_style_local_outline_color, "set_style_local_outline_color", 2290216412u, 0, 29, &be_const_str_tan); -be_define_const_str(tan, "tan", 2633446552u, 0, 3, NULL); -be_define_const_str(TX2X_TXD_BLACK, "TX2X_TXD_BLACK", 956526176u, 0, 14, &be_const_str_init_points); -be_define_const_str(init_points, "init_points", 718504203u, 0, 11, &be_const_str_set_point_count); -be_define_const_str(set_point_count, "set_point_count", 1721576758u, 0, 15, NULL); -be_define_const_str(TELEINFO_ENABLE, "TELEINFO_ENABLE", 1600974501u, 0, 15, &be_const_str_move_foreground); -be_define_const_str(move_foreground, "move_foreground", 2558800524u, 0, 15, NULL); -be_define_const_str(STYLE_PATTERN_BLEND_MODE, "STYLE_PATTERN_BLEND_MODE", 2331743867u, 0, 24, NULL); -be_define_const_str(NRF24_DC, "NRF24_DC", 688921313u, 0, 8, &be_const_str_STYLE_OPA_SCALE); -be_define_const_str(STYLE_OPA_SCALE, "STYLE_OPA_SCALE", 4014485970u, 0, 15, &be_const_str_YELLOW); -be_define_const_str(YELLOW, "YELLOW", 2964049737u, 0, 6, &be_const_str_set_auto_size); -be_define_const_str(set_auto_size, "set_auto_size", 903259741u, 0, 13, NULL); -be_define_const_str(MAX31855CS, "MAX31855CS", 753620511u, 0, 10, &be_const_str_get_hsv); -be_define_const_str(get_hsv, "get_hsv", 774943805u, 0, 7, NULL); -be_define_const_str(SYMBOL_UPLOAD, "SYMBOL_UPLOAD", 3293679647u, 0, 13, &be_const_str_set_align); -be_define_const_str(set_align, "set_align", 2592958913u, 0, 9, NULL); -be_define_const_str(STYLE_TEXT_LETTER_SPACE, "STYLE_TEXT_LETTER_SPACE", 2264289484u, 0, 23, &be_const_str_add_option); -be_define_const_str(add_option, "add_option", 3444380864u, 0, 10, NULL); -be_define_const_str(GPS_TX, "GPS_TX", 4228740808u, 0, 6, &be_const_str__cmd); -be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, &be_const_str_wire1); -be_define_const_str(wire1, "wire1", 3212721419u, 0, 5, NULL); -be_define_const_str(TABVIEW_TAB_POS_RIGHT, "TABVIEW_TAB_POS_RIGHT", 3809644849u, 0, 21, &be_const_str_get_ext_draw_pad); -be_define_const_str(get_ext_draw_pad, "get_ext_draw_pad", 3775653652u, 0, 16, &be_const_str_set_scrollable_fit2); -be_define_const_str(set_scrollable_fit2, "set_scrollable_fit2", 586952845u, 0, 19, &be_const_str_set_style_local_line_width); -be_define_const_str(set_style_local_line_width, "set_style_local_line_width", 1133761671u, 0, 26, &be_const_str_set_transform_height); -be_define_const_str(set_transform_height, "set_transform_height", 3869973274u, 0, 20, NULL); -be_define_const_str(BAR_TYPE_NORMAL, "BAR_TYPE_NORMAL", 3652519691u, 0, 15, &be_const_str_SPINNER_TYPE_FILLSPIN_ARC); -be_define_const_str(SPINNER_TYPE_FILLSPIN_ARC, "SPINNER_TYPE_FILLSPIN_ARC", 2324275006u, 0, 25, &be_const_str_STYLE_LINE_DASH_WIDTH); -be_define_const_str(STYLE_LINE_DASH_WIDTH, "STYLE_LINE_DASH_WIDTH", 1366928369u, 0, 21, &be_const_str_get_style_transform_angle); -be_define_const_str(get_style_transform_angle, "get_style_transform_angle", 1307352290u, 0, 25, &be_const_str_screenshot); -be_define_const_str(screenshot, "screenshot", 3894592561u, 0, 10, NULL); -be_define_const_str(ZIGBEE_RST, "ZIGBEE_RST", 721588661u, 0, 10, &be_const_str_set_angle_offset); -be_define_const_str(set_angle_offset, "set_angle_offset", 1203695731u, 0, 16, NULL); -be_define_const_str(GREEN, "GREEN", 2875364188u, 0, 5, &be_const_str_SYMBOL_LEFT); -be_define_const_str(SYMBOL_LEFT, "SYMBOL_LEFT", 1563517575u, 0, 11, &be_const_str_WHITE); -be_define_const_str(WHITE, "WHITE", 2856149510u, 0, 5, &be_const_str_char); -be_define_const_str(char, "char", 2823553821u, 0, 4, NULL); -be_define_const_str(DHT11, "DHT11", 367083569u, 0, 5, NULL); -be_define_const_str(ELECTRIQ_MOODL_TX, "ELECTRIQ_MOODL_TX", 31009247u, 0, 17, &be_const_str_off); -be_define_const_str(off, "off", 2872740362u, 0, 3, NULL); -be_define_const_str(FIT_PARENT, "FIT_PARENT", 3852740121u, 0, 10, &be_const_str_OLIVE); -be_define_const_str(OLIVE, "OLIVE", 1722893804u, 0, 5, &be_const_str_align_mid_x); -be_define_const_str(align_mid_x, "align_mid_x", 1647423776u, 0, 11, NULL); -be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, &be_const_str_digital_read); -be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, &be_const_str_remove_style_local_prop); -be_define_const_str(remove_style_local_prop, "remove_style_local_prop", 1160046873u, 0, 23, NULL); -be_define_const_str(STYLE_LINE_WIDTH, "STYLE_LINE_WIDTH", 537342374u, 0, 16, NULL); -be_define_const_str(get_color_mode_fixed, "get_color_mode_fixed", 2272722254u, 0, 20, &be_const_str_refresh_ext_draw_pad); -be_define_const_str(refresh_ext_draw_pad, "refresh_ext_draw_pad", 3485714697u, 0, 20, &be_const_str_set_value_str); -be_define_const_str(set_value_str, "set_value_str", 2950562969u, 0, 13, NULL); -be_define_const_str(ALIGN_OUT_LEFT_BOTTOM, "ALIGN_OUT_LEFT_BOTTOM", 1578004935u, 0, 21, NULL); -be_define_const_str(get_start_value, "get_start_value", 2039237390u, 0, 15, &be_const_str_set_row_cnt); -be_define_const_str(set_row_cnt, "set_row_cnt", 3198609400u, 0, 11, NULL); -be_define_const_str(BLEND_MODE_SUBTRACTIVE, "BLEND_MODE_SUBTRACTIVE", 3202763511u, 0, 22, NULL); -be_define_const_str(set_shadow_ofs_x, "set_shadow_ofs_x", 3069980414u, 0, 16, NULL); -be_define_const_str(ADC_TEMP, "ADC_TEMP", 3771053440u, 0, 8, &be_const_str_find_op); -be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, &be_const_str_list_get_local_style); -be_define_const_str(list_get_local_style, "list_get_local_style", 2313938368u, 0, 20, &be_const_str_set_style_local_line_blend_mode); -be_define_const_str(set_style_local_line_blend_mode, "set_style_local_line_blend_mode", 2166063994u, 0, 31, NULL); -be_define_const_str(BOILER_OT_TX, "BOILER_OT_TX", 671743623u, 0, 12, &be_const_str_SM16716_CLK); -be_define_const_str(SM16716_CLK, "SM16716_CLK", 3037641483u, 0, 11, &be_const_str_STYLE_BG_COLOR); -be_define_const_str(STYLE_BG_COLOR, "STYLE_BG_COLOR", 2207533444u, 0, 14, &be_const_str_set_text_sel_color); -be_define_const_str(set_text_sel_color, "set_text_sel_color", 1561573604u, 0, 18, NULL); -be_define_const_str(clear, "clear", 1550717474u, 0, 5, &be_const_str_set_pad_left); -be_define_const_str(set_pad_left, "set_pad_left", 3931796175u, 0, 12, NULL); -be_define_const_str(get_base_dir, "get_base_dir", 1814851485u, 0, 12, &be_const_str_get_style_pad_top); -be_define_const_str(get_style_pad_top, "get_style_pad_top", 2896917811u, 0, 17, &be_const_str_set_text_sel_end); -be_define_const_str(set_text_sel_end, "set_text_sel_end", 3422399078u, 0, 16, &be_const_str_set_tile_act); -be_define_const_str(set_tile_act, "set_tile_act", 1400046115u, 0, 12, NULL); -be_define_const_str(get_style_pattern_opa, "get_style_pattern_opa", 865471869u, 0, 21, &be_const_str_set_transition_path); -be_define_const_str(set_transition_path, "set_transition_path", 689428023u, 0, 19, NULL); -be_define_const_str(set_fit2, "set_fit2", 4226206571u, 0, 8, NULL); -be_define_const_str(set_col_width, "set_col_width", 28420413u, 0, 13, &be_const_str_set_pwd_mode); -be_define_const_str(set_pwd_mode, "set_pwd_mode", 1333849907u, 0, 12, NULL); -be_define_const_str(get_style_transition_time, "get_style_transition_time", 3928047247u, 0, 25, NULL); -be_define_const_str(get_style_value_color, "get_style_value_color", 76857167u, 0, 21, NULL); -be_define_const_str(STYLE_PATTERN_OPA, "STYLE_PATTERN_OPA", 1423872118u, 0, 17, NULL); -be_define_const_str(STYLE_VALUE_LETTER_SPACE, "STYLE_VALUE_LETTER_SPACE", 2129682704u, 0, 24, &be_const_str__ccmd); -be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, NULL); -be_define_const_str(LABEL_LONG_SROLL_CIRC, "LABEL_LONG_SROLL_CIRC", 179427009u, 0, 21, &be_const_str_STYLE_SHADOW_OPA); -be_define_const_str(STYLE_SHADOW_OPA, "STYLE_SHADOW_OPA", 3011667646u, 0, 16, &be_const_str_get_adjustable); -be_define_const_str(get_adjustable, "get_adjustable", 982674931u, 0, 14, NULL); -be_define_const_str(HM10_RX, "HM10_RX", 515085922u, 0, 7, &be_const_str_STYLE_MARGIN_TOP); -be_define_const_str(STYLE_MARGIN_TOP, "STYLE_MARGIN_TOP", 4150683665u, 0, 16, &be_const_str_lv_keyboard); -be_define_const_str(lv_keyboard, "lv_keyboard", 197530229u, 0, 11, &be_const_str_set_border_width); -be_define_const_str(set_border_width, "set_border_width", 2740080977u, 0, 16, NULL); -be_define_const_str(get_label_count, "get_label_count", 1700997322u, 0, 15, &be_const_str_get_text_sel_end); -be_define_const_str(get_text_sel_end, "get_text_sel_end", 3650450346u, 0, 16, NULL); -be_define_const_str(DDSU666_TX, "DDSU666_TX", 1880604150u, 0, 10, &be_const_str_set_pwd_show_time); -be_define_const_str(set_pwd_show_time, "set_pwd_show_time", 2699027795u, 0, 17, &be_const_str_set_style_local_line_color); -be_define_const_str(set_style_local_line_color, "set_style_local_line_color", 1174390096u, 0, 26, NULL); -be_define_const_str(DISP_ROT_90, "DISP_ROT_90", 3961393585u, 0, 11, &be_const_str_TXD); -be_define_const_str(TXD, "TXD", 3614562079u, 0, 3, NULL); -be_define_const_str(SPI_CS, "SPI_CS", 553701236u, 0, 6, &be_const_str_WE517_RX); -be_define_const_str(WE517_RX, "WE517_RX", 4096577879u, 0, 8, &be_const_str_set_pos); -be_define_const_str(set_pos, "set_pos", 4146975678u, 0, 7, &be_const_str_time_reached); -be_define_const_str(time_reached, "time_reached", 2075136773u, 0, 12, NULL); -be_define_const_str(init_draw_label_dsc, "init_draw_label_dsc", 3549659870u, 0, 19, &be_const_str_move_background); -be_define_const_str(move_background, "move_background", 3375135217u, 0, 15, &be_const_str_range); -be_define_const_str(range, "range", 4208725202u, 0, 5, NULL); -be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, NULL); -be_define_const_str(CC1101_GDO2, "CC1101_GDO2", 974166265u, 0, 11, NULL); -be_define_const_str(WEBCAM_SIOC, "WEBCAM_SIOC", 218815147u, 0, 11, NULL); -be_define_const_str(IEM3000_TX, "IEM3000_TX", 1185907310u, 0, 10, &be_const_str_STYLE_IMAGE_OPA); -be_define_const_str(STYLE_IMAGE_OPA, "STYLE_IMAGE_OPA", 1064316425u, 0, 15, &be_const_str_get_style_border_width); -be_define_const_str(get_style_border_width, "get_style_border_width", 3436292763u, 0, 22, NULL); -be_define_const_str(pop, "pop", 1362321360u, 0, 3, NULL); -be_define_const_str(BTN_STATE_RELEASED, "BTN_STATE_RELEASED", 4133711537u, 0, 18, &be_const_str_STYLE_TEXT_OPA); -be_define_const_str(STYLE_TEXT_OPA, "STYLE_TEXT_OPA", 3094351509u, 0, 14, NULL); -be_define_const_str(SYMBOL_PLAY, "SYMBOL_PLAY", 1750902100u, 0, 11, &be_const_str_set_x_start_point); -be_define_const_str(set_x_start_point, "set_x_start_point", 257195034u, 0, 17, NULL); -be_define_const_str(get_btn_text, "get_btn_text", 1417317686u, 0, 12, &be_const_str_get_style_bg_grad_color); -be_define_const_str(get_style_bg_grad_color, "get_style_bg_grad_color", 4149817886u, 0, 23, NULL); -be_define_const_str(WEBCAM_PWDN, "WEBCAM_PWDN", 2219597454u, 0, 11, NULL); -be_define_const_str(set_style_local_margin_right, "set_style_local_margin_right", 2606287945u, 0, 28, &be_const_str_time_str); -be_define_const_str(time_str, "time_str", 2613827612u, 0, 8, NULL); -be_define_const_str(set_style_local_scale_border_width, "set_style_local_scale_border_width", 285010516u, 0, 34, &be_const_str_web_sensor); -be_define_const_str(web_sensor, "web_sensor", 2900096972u, 0, 10, NULL); -be_define_const_str(get_y_from_index, "get_y_from_index", 2777682943u, 0, 16, &be_const_str_module); -be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_set_text_font); -be_define_const_str(set_text_font, "set_text_font", 724363521u, 0, 13, NULL); -be_define_const_str(SM16716_DAT, "SM16716_DAT", 1905621806u, 0, 11, &be_const_str_focus_btn); -be_define_const_str(focus_btn, "focus_btn", 1087954772u, 0, 9, &be_const_str_get_fit_right); -be_define_const_str(get_fit_right, "get_fit_right", 2037949402u, 0, 13, NULL); -be_define_const_str(FS_RES_TOUT, "FS_RES_TOUT", 733368644u, 0, 11, &be_const_str_get_auto_size); -be_define_const_str(get_auto_size, "get_auto_size", 241966433u, 0, 13, NULL); -be_define_const_str(set_style_local_line_dash_gap, "set_style_local_line_dash_gap", 923588498u, 0, 29, NULL); -be_define_const_str(STYLE_OUTLINE_COLOR, "STYLE_OUTLINE_COLOR", 2723763111u, 0, 19, &be_const_str_STYLE_PAD_BOTTOM); -be_define_const_str(STYLE_PAD_BOTTOM, "STYLE_PAD_BOTTOM", 3910623046u, 0, 16, NULL); -be_define_const_str(MGC3130_RESET, "MGC3130_RESET", 405013121u, 0, 13, NULL); -be_define_const_str(get_protect, "get_protect", 4241180167u, 0, 11, NULL); -be_define_const_str(LIST_PART_BG, "LIST_PART_BG", 1920031543u, 0, 12, &be_const_str_get_file_name); -be_define_const_str(get_file_name, "get_file_name", 3239886120u, 0, 13, &be_const_str_get_scrl_fit_right); -be_define_const_str(get_scrl_fit_right, "get_scrl_fit_right", 4214186985u, 0, 18, NULL); -be_define_const_str(draw_text, "draw_text", 25865715u, 0, 9, &be_const_str_set_cell_crop); -be_define_const_str(set_cell_crop, "set_cell_crop", 1055583431u, 0, 13, NULL); -be_define_const_str(get_style_transition_prop_6, "get_style_transition_prop_6", 3488279722u, 0, 27, &be_const_str_time_dump); -be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, NULL); -be_define_const_str(fade_out, "fade_out", 215415112u, 0, 8, &be_const_str_set_type); -be_define_const_str(set_type, "set_type", 4284078396u, 0, 8, NULL); -be_define_const_str(BTN_STATE_PRESSED, "BTN_STATE_PRESSED", 1194269292u, 0, 17, &be_const_str_DDS2382_RX); -be_define_const_str(DDS2382_RX, "DDS2382_RX", 432446462u, 0, 10, &be_const_str_get_letter_pos); -be_define_const_str(get_letter_pos, "get_letter_pos", 1477814169u, 0, 14, &be_const_str_lv_tabview); -be_define_const_str(lv_tabview, "lv_tabview", 2109024786u, 0, 10, NULL); -be_define_const_str(set_transition_delay, "set_transition_delay", 2787845599u, 0, 20, NULL); -be_define_const_str(STYLE_TRANSITION_DELAY, "STYLE_TRANSITION_DELAY", 251340916u, 0, 22, &be_const_str_get_style_bg_color); -be_define_const_str(get_style_bg_color, "get_style_bg_color", 964794381u, 0, 18, NULL); -be_define_const_str(SAIR_RX, "SAIR_RX", 1273688713u, 0, 7, NULL); -be_define_const_str(STYLE_BORDER_COLOR, "STYLE_BORDER_COLOR", 809973177u, 0, 18, &be_const_str_WS2812); -be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, &be_const_str_lv_group); -be_define_const_str(lv_group, "lv_group", 3852039019u, 0, 8, NULL); -be_define_const_str(KEYBOARD_PART_BG, "KEYBOARD_PART_BG", 3167702710u, 0, 16, NULL); -be_define_const_str(FS_RES_NOT_IMP, "FS_RES_NOT_IMP", 3493778168u, 0, 14, &be_const_str_floor); -be_define_const_str(floor, "floor", 3102149661u, 0, 5, &be_const_str_get_cell_value); -be_define_const_str(get_cell_value, "get_cell_value", 3068122638u, 0, 14, NULL); -be_define_const_str(LIST_PART_EDGE_FLASH, "LIST_PART_EDGE_FLASH", 549302352u, 0, 20, NULL); -be_define_const_str(raise, "raise", 1593437475u, 70, 5, NULL); -be_define_const_str(MIEL_HVAC_TX, "MIEL_HVAC_TX", 567403014u, 0, 12, NULL); -be_define_const_str(get_bg_angle_end, "get_bg_angle_end", 602326541u, 0, 16, NULL); -be_define_const_str(GAUGE_PART_MAIN, "GAUGE_PART_MAIN", 3145322556u, 0, 15, &be_const_str_get_text); -be_define_const_str(get_text, "get_text", 3133031679u, 0, 8, &be_const_str_step_prev); -be_define_const_str(step_prev, "step_prev", 2831593421u, 0, 9, NULL); -be_define_const_str(OUTPUT_OPEN_DRAIN, "OUTPUT_OPEN_DRAIN", 2147249436u, 0, 17, &be_const_str_resp_cmnd_failed); -be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, NULL); -be_define_const_str(DHT11_OUT, "DHT11_OUT", 1645300734u, 0, 9, &be_const_str_set_cell_value_fmt); -be_define_const_str(set_cell_value_fmt, "set_cell_value_fmt", 355090466u, 0, 18, &be_const_str_set_color_mode); -be_define_const_str(set_color_mode, "set_color_mode", 1155621583u, 0, 14, NULL); -be_define_const_str(get_style_shadow_color, "get_style_shadow_color", 920648234u, 0, 22, &be_const_str_get_style_transform_width); -be_define_const_str(get_style_transform_width, "get_style_transform_width", 713115893u, 0, 25, &be_const_str_for); -be_define_const_str(for, "for", 2901640080u, 54, 3, NULL); -be_define_const_str(PROJECTOR_CTRL_RX, "PROJECTOR_CTRL_RX", 1542762460u, 0, 17, &be_const_str_STYLE_TRANSFORM_ANGLE); -be_define_const_str(STYLE_TRANSFORM_ANGLE, "STYLE_TRANSFORM_ANGLE", 411149629u, 0, 21, &be_const_str_cosh); -be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, &be_const_str_set_adjustable); -be_define_const_str(set_adjustable, "set_adjustable", 1573073815u, 0, 14, &be_const_str_set_style_local_pad_top); -be_define_const_str(set_style_local_pad_top, "set_style_local_pad_top", 785256663u, 0, 23, NULL); -be_define_const_str(copy, "copy", 3848464964u, 0, 4, &be_const_str_get_active_btn); -be_define_const_str(get_active_btn, "get_active_btn", 3720382749u, 0, 14, NULL); -be_define_const_str(MIEL_HVAC_RX, "MIEL_HVAC_RX", 3720609648u, 0, 12, &be_const_str_SHELLY_DIMMER_BOOT0); -be_define_const_str(SHELLY_DIMMER_BOOT0, "SHELLY_DIMMER_BOOT0", 2948777716u, 0, 19, &be_const_str_get_text_sel_en); -be_define_const_str(get_text_sel_en, "get_text_sel_en", 500051850u, 0, 15, &be_const_str_set_style_local_value_blend_mode); -be_define_const_str(set_style_local_value_blend_mode, "set_style_local_value_blend_mode", 1178211587u, 0, 32, NULL); -be_define_const_str(set_style_local_value_line_space, "set_style_local_value_line_space", 987261567u, 0, 32, &be_const_str_set_text); -be_define_const_str(set_text, "set_text", 1849641155u, 0, 8, NULL); -be_define_const_str(CHART_PART_SERIES_BG, "CHART_PART_SERIES_BG", 4240790375u, 0, 20, &be_const_str_set_rollover); -be_define_const_str(set_rollover, "set_rollover", 1838959037u, 0, 12, NULL); -be_define_const_str(FS_MODE_RD, "FS_MODE_RD", 2906271023u, 0, 10, &be_const_str_STYLE_VALUE_COLOR); -be_define_const_str(STYLE_VALUE_COLOR, "STYLE_VALUE_COLOR", 2491635400u, 0, 17, &be_const_str_get_btns_pos); -be_define_const_str(get_btns_pos, "get_btns_pos", 2951340984u, 0, 12, &be_const_str_set_x_tick_texts); -be_define_const_str(set_x_tick_texts, "set_x_tick_texts", 481792535u, 0, 16, NULL); -be_define_const_str(AZ_RXD, "AZ_RXD", 699914019u, 0, 6, &be_const_str_DYP_RX); -be_define_const_str(DYP_RX, "DYP_RX", 2122310285u, 0, 6, &be_const_str_EPD_DATA); -be_define_const_str(EPD_DATA, "EPD_DATA", 3799141097u, 0, 8, &be_const_str_LOW); -be_define_const_str(LOW, "LOW", 3526092385u, 0, 3, &be_const_str_PZEM004_RX); -be_define_const_str(PZEM004_RX, "PZEM004_RX", 3411153194u, 0, 10, &be_const_str_STYLE_VALUE_STR); -be_define_const_str(STYLE_VALUE_STR, "STYLE_VALUE_STR", 144639168u, 0, 15, NULL); -be_define_const_str(STYLE_TEXT_BLEND_MODE, "STYLE_TEXT_BLEND_MODE", 44336606u, 0, 21, &be_const_str_ins_text); -be_define_const_str(ins_text, "ins_text", 2467863999u, 0, 8, &be_const_str_is_protected); -be_define_const_str(is_protected, "is_protected", 1864002268u, 0, 12, NULL); -be_define_const_str(lv_chart, "lv_chart", 2652494144u, 0, 8, NULL); -be_define_const_str(update_mask, "update_mask", 833922029u, 0, 11, NULL); -be_define_const_str(ARC_PART_KNOB, "ARC_PART_KNOB", 1431875030u, 0, 13, &be_const_str_OPTION_A); -be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, NULL); -be_define_const_str(RXD, "RXD", 2311579049u, 0, 3, &be_const_str_set_style_local_text_line_space); -be_define_const_str(set_style_local_text_line_space, "set_style_local_text_line_space", 3775207629u, 0, 31, NULL); -be_define_const_str(get_x_start_point, "get_x_start_point", 4100384878u, 0, 17, &be_const_str_set_fit4); -be_define_const_str(set_fit4, "set_fit4", 31904989u, 0, 8, &be_const_str_set_shadow_blend_mode); -be_define_const_str(set_shadow_blend_mode, "set_shadow_blend_mode", 3767233786u, 0, 21, NULL); -be_define_const_str(remove_prop, "remove_prop", 4280941095u, 0, 11, NULL); -be_define_const_str(add_tab, "add_tab", 1821901608u, 0, 7, NULL); -be_define_const_str(CPICKER_COLOR_MODE_HUE, "CPICKER_COLOR_MODE_HUE", 1583032607u, 0, 22, &be_const_str_KEY_RIGHT); -be_define_const_str(KEY_RIGHT, "KEY_RIGHT", 3690237745u, 0, 9, &be_const_str_SCROLLBAR_MODE_AUTO); -be_define_const_str(SCROLLBAR_MODE_AUTO, "SCROLLBAR_MODE_AUTO", 2882381917u, 0, 19, &be_const_str_cos); -be_define_const_str(cos, "cos", 4220379804u, 0, 3, &be_const_str_get_style_outline_width); -be_define_const_str(get_style_outline_width, "get_style_outline_width", 1118345503u, 0, 23, &be_const_str_get_ver_res); -be_define_const_str(get_ver_res, "get_ver_res", 4160557208u, 0, 11, NULL); -be_define_const_str(KEYBOARD_MODE_TEXT_UPPER, "KEYBOARD_MODE_TEXT_UPPER", 2335009259u, 0, 24, &be_const_str_MAX31855CLK); -be_define_const_str(MAX31855CLK, "MAX31855CLK", 715977727u, 0, 11, &be_const_str_SCROLLBAR_MODE_ON); -be_define_const_str(SCROLLBAR_MODE_ON, "SCROLLBAR_MODE_ON", 1562259499u, 0, 17, &be_const_str_get_style_transition_prop_5); -be_define_const_str(get_style_transition_prop_5, "get_style_transition_prop_5", 3471502103u, 0, 27, NULL); -be_define_const_str(get_content, "get_content", 2390895261u, 0, 11, &be_const_str_nil); -be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL); -be_define_const_str(start_edge_flash, "start_edge_flash", 305008300u, 0, 16, NULL); -be_define_const_str(set_style_local_pad_bottom, "set_style_local_pad_bottom", 1362436575u, 0, 26, NULL); -be_define_const_str(get_focused_obj, "get_focused_obj", 208302839u, 0, 15, &be_const_str_get_inner_coords); -be_define_const_str(get_inner_coords, "get_inner_coords", 985433607u, 0, 16, &be_const_str_get_line_count); -be_define_const_str(get_line_count, "get_line_count", 4160991390u, 0, 14, &be_const_str_millis); -be_define_const_str(millis, "millis", 1214679063u, 0, 6, NULL); -be_define_const_str(DRAG_DIR_BOTH, "DRAG_DIR_BOTH", 740935659u, 0, 13, &be_const_str_OPA_30); -be_define_const_str(OPA_30, "OPA_30", 95806641u, 0, 6, &be_const_str_ZEROCROSS); -be_define_const_str(ZEROCROSS, "ZEROCROSS", 1747596785u, 0, 9, &be_const_str__available); -be_define_const_str(_available, "_available", 1306196581u, 0, 10, &be_const_str_assert); -be_define_const_str(assert, "assert", 2774883451u, 0, 6, NULL); -be_define_const_str(STYLE_TRANSITION_PROP_6, "STYLE_TRANSITION_PROP_6", 1046607357u, 0, 23, &be_const_str_get_hue); -be_define_const_str(get_hue, "get_hue", 1060457518u, 0, 7, NULL); -be_define_const_str(STYLE_MARGIN_RIGHT, "STYLE_MARGIN_RIGHT", 1123385036u, 0, 18, &be_const_str_SYMBOL_HOME); -be_define_const_str(SYMBOL_HOME, "SYMBOL_HOME", 730845525u, 0, 11, &be_const_str_int); -be_define_const_str(int, "int", 2515107422u, 0, 3, &be_const_str_set_style_local_text_font); -be_define_const_str(set_style_local_text_font, "set_style_local_text_font", 954295699u, 0, 25, NULL); -be_define_const_str(CHART_AXIS_SECONDARY_Y, "CHART_AXIS_SECONDARY_Y", 755580820u, 0, 22, &be_const_str_get_style_scale_width); -be_define_const_str(get_style_scale_width, "get_style_scale_width", 2556361915u, 0, 21, NULL); -be_define_const_str(is_visible, "is_visible", 597904624u, 0, 10, &be_const_str_lv_msgbox); -be_define_const_str(lv_msgbox, "lv_msgbox", 689085206u, 0, 9, &be_const_str_set_src); -be_define_const_str(set_src, "set_src", 1156089058u, 0, 7, NULL); -be_define_const_str(EVENT_DELETE, "EVENT_DELETE", 282828603u, 0, 12, &be_const_str_get_style_outline_pad); -be_define_const_str(get_style_outline_pad, "get_style_outline_pad", 4225397162u, 0, 21, NULL); -be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, &be_const_str_hex); -be_define_const_str(hex, "hex", 4273249610u, 0, 3, NULL); -be_define_const_str(get_style_value_line_space, "get_style_value_line_space", 592322595u, 0, 26, NULL); -be_define_const_str(LAYOUT_ROW_MID, "LAYOUT_ROW_MID", 932854697u, 0, 14, NULL); -be_define_const_str(CC1101_GDO0, "CC1101_GDO0", 940611027u, 0, 11, &be_const_str_CHECKBOX_PART_BG); -be_define_const_str(CHECKBOX_PART_BG, "CHECKBOX_PART_BG", 1308611434u, 0, 16, &be_const_str_LEDLNK); -be_define_const_str(LEDLNK, "LEDLNK", 2862810701u, 0, 6, &be_const_str_OBJ_PART_ALL); -be_define_const_str(OBJ_PART_ALL, "OBJ_PART_ALL", 3502425074u, 0, 12, &be_const_str_fade_in); -be_define_const_str(fade_in, "fade_in", 3410278043u, 0, 7, NULL); -be_define_const_str(classof, "classof", 1796577762u, 0, 7, &be_const_str_get_draw_rect_ext_pad_size); -be_define_const_str(get_draw_rect_ext_pad_size, "get_draw_rect_ext_pad_size", 3223809685u, 0, 26, &be_const_str_set_cursor_hidden); -be_define_const_str(set_cursor_hidden, "set_cursor_hidden", 647911755u, 0, 17, NULL); -be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, &be_const_str_get_px); -be_define_const_str(get_px, "get_px", 1651889344u, 0, 6, &be_const_str_set_pattern_recolor_opa); -be_define_const_str(set_pattern_recolor_opa, "set_pattern_recolor_opa", 1479951840u, 0, 23, NULL); -be_define_const_str(KEY_ESC, "KEY_ESC", 915768258u, 0, 7, &be_const_str_set_border_color); -be_define_const_str(set_border_color, "set_border_color", 2628124814u, 0, 16, NULL); -be_define_const_str(get_pivot, "get_pivot", 2963122652u, 0, 9, NULL); -be_define_const_str(BTNMATRIX_CTRL_HIDDEN, "BTNMATRIX_CTRL_HIDDEN", 2766999187u, 0, 21, &be_const_str_EVENT_REFRESH); -be_define_const_str(EVENT_REFRESH, "EVENT_REFRESH", 741028651u, 0, 13, &be_const_str_GRAD_DIR_VER); -be_define_const_str(GRAD_DIR_VER, "GRAD_DIR_VER", 1112540859u, 0, 12, &be_const_str_set_style_local_pattern_repeat); -be_define_const_str(set_style_local_pattern_repeat, "set_style_local_pattern_repeat", 2930402426u, 0, 30, NULL); -be_define_const_str(RC522_RST, "RC522_RST", 720511443u, 0, 9, &be_const_str_clear_state); -be_define_const_str(clear_state, "clear_state", 2113290696u, 0, 11, &be_const_str_set_style_local_line_opa); -be_define_const_str(set_style_local_line_opa, "set_style_local_line_opa", 909807497u, 0, 24, NULL); -be_define_const_str(set_cell_type, "set_cell_type", 1502464221u, 0, 13, &be_const_str_tanh); -be_define_const_str(tanh, "tanh", 153638352u, 0, 4, NULL); -be_define_const_str(SLIDER_TYPE_NORMAL, "SLIDER_TYPE_NORMAL", 613555481u, 0, 18, &be_const_str_set_line_rounded); -be_define_const_str(set_line_rounded, "set_line_rounded", 1057786792u, 0, 16, NULL); -be_define_const_str(true, "true", 1303515621u, 61, 4, NULL); -be_define_const_str(set_line_blend_mode, "set_line_blend_mode", 350784568u, 0, 19, NULL); -be_define_const_str(LABEL_LONG_CROP, "LABEL_LONG_CROP", 4057484127u, 0, 15, &be_const_str_PMS5003_RX); -be_define_const_str(PMS5003_RX, "PMS5003_RX", 3934985650u, 0, 10, NULL); -be_define_const_str(CHART_CURSOR_UP, "CHART_CURSOR_UP", 2345195814u, 0, 15, &be_const_str_pi); -be_define_const_str(pi, "pi", 1213090802u, 0, 2, NULL); -be_define_const_str(OUTPUT, "OUTPUT", 1469629700u, 0, 6, &be_const_str_SYMBOL_SETTINGS); -be_define_const_str(SYMBOL_SETTINGS, "SYMBOL_SETTINGS", 339656335u, 0, 15, &be_const_str_concat); -be_define_const_str(concat, "concat", 4124019837u, 0, 6, &be_const_str_up); -be_define_const_str(up, "up", 1128467232u, 0, 2, NULL); -be_define_const_str(EVENT_APPLY, "EVENT_APPLY", 1983056372u, 0, 11, &be_const_str_get_tab_act); -be_define_const_str(get_tab_act, "get_tab_act", 2665251652u, 0, 11, NULL); -be_define_const_str(STYLE_LINE_ROUNDED, "STYLE_LINE_ROUNDED", 3677440219u, 0, 18, &be_const_str_set_transition_prop_5); -be_define_const_str(set_transition_prop_5, "set_transition_prop_5", 3101011821u, 0, 21, NULL); -be_define_const_str(get_ext_click_pad_right, "get_ext_click_pad_right", 3976528463u, 0, 23, &be_const_str_false); -be_define_const_str(false, "false", 184981848u, 62, 5, NULL); -be_define_const_str(WIEGAND_D0, "WIEGAND_D0", 4192335759u, 0, 10, &be_const_str_get_anim_time); -be_define_const_str(get_anim_time, "get_anim_time", 641972335u, 0, 13, &be_const_str_get_style_pad_inner); -be_define_const_str(get_style_pad_inner, "get_style_pad_inner", 213811544u, 0, 19, NULL); -be_define_const_str(OPA_80, "OPA_80", 4221864914u, 0, 6, &be_const_str_get_selected_str); -be_define_const_str(get_selected_str, "get_selected_str", 1743823997u, 0, 16, NULL); -be_define_const_str(CHECKBOX_PART_BULLET, "CHECKBOX_PART_BULLET", 3413099789u, 0, 20, NULL); -be_define_const_str(get_style_transition_prop_4, "get_style_transition_prop_4", 3454724484u, 0, 27, &be_const_str_set_style_local_pattern_opa); -be_define_const_str(set_style_local_pattern_opa, "set_style_local_pattern_opa", 3467015361u, 0, 27, NULL); -be_define_const_str(STATE_EDITED, "STATE_EDITED", 46966454u, 0, 12, &be_const_str_STYLE_BORDER_WIDTH); -be_define_const_str(STYLE_BORDER_WIDTH, "STYLE_BORDER_WIDTH", 2777818658u, 0, 18, &be_const_str_exec_cmd); -be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, &be_const_str_lv_led); -be_define_const_str(lv_led, "lv_led", 3192184733u, 0, 6, NULL); -be_define_const_str(WEBCAM_DATA, "WEBCAM_DATA", 1476954421u, 0, 11, &be_const_str_get_style_text_blend_mode); -be_define_const_str(get_style_text_blend_mode, "get_style_text_blend_mode", 3370225453u, 0, 25, NULL); -be_define_const_str(LMT01, "LMT01", 2490623797u, 0, 5, &be_const_str_SDM72_RX); -be_define_const_str(SDM72_RX, "SDM72_RX", 766750035u, 0, 8, &be_const_str_lv_color); -be_define_const_str(lv_color, "lv_color", 1419148319u, 0, 8, NULL); -be_define_const_str(SSPI_CS, "SSPI_CS", 977784795u, 0, 7, NULL); -be_define_const_str(KEY_HOME, "KEY_HOME", 2722222682u, 0, 8, NULL); -be_define_const_str(EVENT_DRAG_END, "EVENT_DRAG_END", 3617672228u, 0, 14, &be_const_str_SOLAXX1_TX); -be_define_const_str(SOLAXX1_TX, "SOLAXX1_TX", 903770840u, 0, 10, &be_const_str_focus_next); -be_define_const_str(focus_next, "focus_next", 2510018461u, 0, 10, NULL); -be_define_const_str(keys, "keys", 4182378701u, 0, 4, NULL); -be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, &be_const_str_get_pwd_mode); -be_define_const_str(get_pwd_mode, "get_pwd_mode", 364593807u, 0, 12, NULL); -be_define_const_str(get_needle_count, "get_needle_count", 2722615919u, 0, 16, NULL); -be_define_const_str(get_style_bg_main_stop, "get_style_bg_main_stop", 3096799724u, 0, 22, &be_const_str_set_valid_positions); -be_define_const_str(set_valid_positions, "set_valid_positions", 358534097u, 0, 19, NULL); -be_define_const_str(KEY_DOWN, "KEY_DOWN", 2353719865u, 0, 8, &be_const_str_get_bright); -be_define_const_str(get_bright, "get_bright", 203831460u, 0, 10, &be_const_str_get_style_scale_grad_color); -be_define_const_str(get_style_scale_grad_color, "get_style_scale_grad_color", 715761969u, 0, 26, &be_const_str_set_style_local_clip_corner); -be_define_const_str(set_style_local_clip_corner, "set_style_local_clip_corner", 1588926036u, 0, 27, &be_const_str_set_y_tick_texts); -be_define_const_str(set_y_tick_texts, "set_y_tick_texts", 1388790058u, 0, 16, NULL); -be_define_const_str(SYMBOL_BELL, "SYMBOL_BELL", 1736196487u, 0, 11, NULL); -be_define_const_str(get_style_value_align, "get_style_value_align", 1340960645u, 0, 21, &be_const_str_get_textarea); -be_define_const_str(get_textarea, "get_textarea", 839445266u, 0, 12, NULL); -be_define_const_str(FIT_MAX, "FIT_MAX", 361794269u, 0, 7, NULL); -be_define_const_str(SPINNER_TYPE_SPINNING_ARC, "SPINNER_TYPE_SPINNING_ARC", 3298556409u, 0, 25, &be_const_str_STYLE_MARGIN_LEFT); -be_define_const_str(STYLE_MARGIN_LEFT, "STYLE_MARGIN_LEFT", 671809443u, 0, 17, NULL); -be_define_const_str(SYMBOL_COPY, "SYMBOL_COPY", 4193681815u, 0, 11, &be_const_str_get_cell_crop); -be_define_const_str(get_cell_crop, "get_cell_crop", 2916382555u, 0, 13, NULL); -be_define_const_str(opt_eq, "==", 2431966415u, 0, 2, &be_const_str_GESTURE_DIR_LEFT); -be_define_const_str(GESTURE_DIR_LEFT, "GESTURE_DIR_LEFT", 1888875816u, 0, 16, &be_const_str_STYLE_BORDER_OPA); -be_define_const_str(STYLE_BORDER_OPA, "STYLE_BORDER_OPA", 2705633552u, 0, 16, NULL); -be_define_const_str(get_height_fit, "get_height_fit", 2561566971u, 0, 14, NULL); -be_define_const_str(STYLE_PAD_INNER, "STYLE_PAD_INNER", 1651002267u, 0, 15, &be_const_str_add); -be_define_const_str(add, "add", 993596020u, 0, 3, NULL); -be_define_const_str(atan, "atan", 108579519u, 0, 4, &be_const_str_set_value_align); -be_define_const_str(set_value_align, "set_value_align", 1467667831u, 0, 15, NULL); -be_define_const_str(SYMBOL_DRIVE, "SYMBOL_DRIVE", 567203502u, 0, 12, NULL); -be_define_const_str(set_style_local_border_width, "set_style_local_border_width", 4234107199u, 0, 28, NULL); -be_define_const_str(lv_objmask, "lv_objmask", 1311221665u, 0, 10, &be_const_str_set_needle_img); -be_define_const_str(set_needle_img, "set_needle_img", 1214192915u, 0, 14, NULL); -be_define_const_str(scroll_hor, "scroll_hor", 4153158354u, 0, 10, &be_const_str_set_hue); -be_define_const_str(set_hue, "set_hue", 830075074u, 0, 7, NULL); -be_define_const_str(STATE_DISABLED, "STATE_DISABLED", 3398267003u, 0, 14, &be_const_str_search_obj); -be_define_const_str(search_obj, "search_obj", 1702929503u, 0, 10, NULL); -be_define_const_str(CPICKER_COLOR_MODE_VALUE, "CPICKER_COLOR_MODE_VALUE", 980055508u, 0, 24, &be_const_str_TXT_CMD_STATE_PAR); -be_define_const_str(TXT_CMD_STATE_PAR, "TXT_CMD_STATE_PAR", 159232374u, 0, 17, &be_const_str_get_btn_width); -be_define_const_str(get_btn_width, "get_btn_width", 254956887u, 0, 13, &be_const_str_get_fit_bottom); -be_define_const_str(get_fit_bottom, "get_fit_bottom", 664659611u, 0, 14, &be_const_str_set_transition_prop_4); -be_define_const_str(set_transition_prop_4, "set_transition_prop_4", 3084234202u, 0, 21, NULL); -be_define_const_str(KEY1, "KEY1", 6715975u, 0, 4, &be_const_str_OPA_10); -be_define_const_str(OPA_10, "OPA_10", 1908083683u, 0, 6, &be_const_str_get_style_shadow_spread); -be_define_const_str(get_style_shadow_spread, "get_style_shadow_spread", 1343265468u, 0, 23, NULL); -be_define_const_str(enable, "enable", 2945169614u, 0, 6, &be_const_str_is_char_under_pos); -be_define_const_str(is_char_under_pos, "is_char_under_pos", 2744967102u, 0, 17, &be_const_str_set_style_local_radius); -be_define_const_str(set_style_local_radius, "set_style_local_radius", 1410446896u, 0, 22, &be_const_str_toggle); -be_define_const_str(toggle, "toggle", 1076453893u, 0, 6, NULL); -be_define_const_str(WIEGAND_D1, "WIEGAND_D1", 4175558140u, 0, 10, &be_const_str_on); -be_define_const_str(on, "on", 1630810064u, 0, 2, NULL); -be_define_const_str(DROPDOWN_PART_SCROLLBAR, "DROPDOWN_PART_SCROLLBAR", 699787861u, 0, 23, &be_const_str_lv_arc); -be_define_const_str(lv_arc, "lv_arc", 4170125384u, 0, 6, NULL); -be_define_const_str(LAYOUT_PRETTY_MID, "LAYOUT_PRETTY_MID", 2040633917u, 0, 17, &be_const_str_SSPI_MISO); -be_define_const_str(SSPI_MISO, "SSPI_MISO", 2485347173u, 0, 9, &be_const_str_add_rule); -be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, &be_const_str_get_style_transition_prop_3); -be_define_const_str(get_style_transition_prop_3, "get_style_transition_prop_3", 3437946865u, 0, 27, NULL); -be_define_const_str(ALIGN_OUT_RIGHT_TOP, "ALIGN_OUT_RIGHT_TOP", 1142849712u, 0, 19, &be_const_str_RFSEND); -be_define_const_str(RFSEND, "RFSEND", 1862630731u, 0, 6, &be_const_str_get_scroll_propagation); -be_define_const_str(get_scroll_propagation, "get_scroll_propagation", 431556896u, 0, 22, NULL); -be_define_const_str(cursor_right, "cursor_right", 2216262354u, 0, 12, NULL); -be_define_const_str(layer_top, "layer_top", 645939682u, 0, 9, &be_const_str_set_base_dir); -be_define_const_str(set_base_dir, "set_base_dir", 1813064609u, 0, 12, &be_const_str_set_style_local_transform_angle); -be_define_const_str(set_style_local_transform_angle, "set_style_local_transform_angle", 3618600326u, 0, 31, NULL); -be_define_const_str(set_style_local_transform_zoom, "set_style_local_transform_zoom", 3474945744u, 0, 30, NULL); -be_define_const_str(STYLE_TRANSITION_PROP_4, "STYLE_TRANSITION_PROP_4", 1013052119u, 0, 23, &be_const_str_SYMBOL_PASTE); -be_define_const_str(SYMBOL_PASTE, "SYMBOL_PASTE", 2281577421u, 0, 12, &be_const_str_get_value); -be_define_const_str(get_value, "get_value", 3844420137u, 0, 9, &be_const_str_set_showed_date); -be_define_const_str(set_showed_date, "set_showed_date", 158767501u, 0, 15, NULL); -be_define_const_str(PMS5003_TX, "PMS5003_TX", 3868169364u, 0, 10, &be_const_str_end); -be_define_const_str(end, "end", 1787721130u, 56, 3, NULL); -be_define_const_str(get_style_pattern_recolor_opa, "get_style_pattern_recolor_opa", 1906150798u, 0, 29, NULL); -be_define_const_str(HX711_SCK, "HX711_SCK", 3785979404u, 0, 9, &be_const_str_get_style_image_recolor_opa); -be_define_const_str(get_style_image_recolor_opa, "get_style_image_recolor_opa", 1049713209u, 0, 27, NULL); -be_define_const_str(STYLE_LINE_COLOR, "STYLE_LINE_COLOR", 623603885u, 0, 16, NULL); -be_define_const_str(STYLE_VALUE_FONT, "STYLE_VALUE_FONT", 1861540608u, 0, 16, &be_const_str_set_value_color); -be_define_const_str(set_value_color, "set_value_color", 2148821625u, 0, 15, NULL); -be_define_const_str(LAYOUT_CENTER, "LAYOUT_CENTER", 1686380473u, 0, 13, &be_const_str_PAGE_EDGE_RIGHT); -be_define_const_str(PAGE_EDGE_RIGHT, "PAGE_EDGE_RIGHT", 1268763615u, 0, 15, &be_const_str_get_spin_time); -be_define_const_str(get_spin_time, "get_spin_time", 1036768940u, 0, 13, NULL); -be_define_const_str(GRAD_DIR_HOR, "GRAD_DIR_HOR", 2383101491u, 0, 12, &be_const_str_add_style); -be_define_const_str(add_style, "add_style", 2931235026u, 0, 9, NULL); -be_define_const_str(A4988_ENA, "A4988_ENA", 1517502682u, 0, 9, &be_const_str_EVENT_SHORT_CLICKED); -be_define_const_str(EVENT_SHORT_CLICKED, "EVENT_SHORT_CLICKED", 2804944112u, 0, 19, &be_const_str_STYLE_IMAGE_RECOLOR); -be_define_const_str(STYLE_IMAGE_RECOLOR, "STYLE_IMAGE_RECOLOR", 1769022527u, 0, 19, &be_const_str_real); -be_define_const_str(real, "real", 3604983901u, 0, 4, NULL); -be_define_const_str(ADE7953_IRQ, "ADE7953_IRQ", 2329185922u, 0, 11, &be_const_str_STYLE_PATTERN_RECOLOR_OPA); -be_define_const_str(STYLE_PATTERN_RECOLOR_OPA, "STYLE_PATTERN_RECOLOR_OPA", 3355859281u, 0, 25, &be_const_str_STYLE_VALUE_BLEND_MODE); -be_define_const_str(STYLE_VALUE_BLEND_MODE, "STYLE_VALUE_BLEND_MODE", 930238626u, 0, 22, &be_const_str_cmd); -be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, &be_const_str_create); -be_define_const_str(create, "create", 649812317u, 0, 6, NULL); -be_define_const_str(get_style_bg_grad_dir, "get_style_bg_grad_dir", 1158213966u, 0, 21, NULL); -be_define_const_str(increment, "increment", 940762942u, 0, 9, &be_const_str_lv_tileview); -be_define_const_str(lv_tileview, "lv_tileview", 2419887973u, 0, 11, &be_const_str_set_style_local_bg_grad_stop); -be_define_const_str(set_style_local_bg_grad_stop, "set_style_local_bg_grad_stop", 1180238427u, 0, 28, NULL); -be_define_const_str(LABEL_ALIGN_LEFT, "LABEL_ALIGN_LEFT", 49345529u, 0, 16, &be_const_str_OPEN_DRAIN); -be_define_const_str(OPEN_DRAIN, "OPEN_DRAIN", 677872608u, 0, 10, &be_const_str_get_angle_offset); -be_define_const_str(get_angle_offset, "get_angle_offset", 2775374871u, 0, 16, NULL); -be_define_const_str(SYMBOL_EJECT, "SYMBOL_EJECT", 873760647u, 0, 12, NULL); -be_define_const_str(STYLE_PAD_RIGHT, "STYLE_PAD_RIGHT", 4135691505u, 0, 15, &be_const_str_get_style_line_blend_mode); -be_define_const_str(get_style_line_blend_mode, "get_style_line_blend_mode", 1609249662u, 0, 25, &be_const_str_set_style_local_scale_grad_color); -be_define_const_str(set_style_local_scale_grad_color, "set_style_local_scale_grad_color", 1682685285u, 0, 32, NULL); -be_define_const_str(PROTECT_CLICK_FOCUS, "PROTECT_CLICK_FOCUS", 293740268u, 0, 19, &be_const_str_resolvecmnd); -be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, NULL); -be_define_const_str(TASMOTACLIENT_RST, "TASMOTACLIENT_RST", 3326196213u, 0, 17, &be_const_str_get_rollover); -be_define_const_str(get_rollover, "get_rollover", 2637132577u, 0, 12, NULL); -be_define_const_str(OBJMASK_PART_MAIN, "OBJMASK_PART_MAIN", 1960600366u, 0, 17, &be_const_str_STYLE_OUTLINE_OPA); -be_define_const_str(STYLE_OUTLINE_OPA, "STYLE_OUTLINE_OPA", 1357184754u, 0, 17, &be_const_str_remove_rule); -be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, &be_const_str_set_image_opa); -be_define_const_str(set_image_opa, "set_image_opa", 517268068u, 0, 13, NULL); -be_define_const_str(get_btnmatrix, "get_btnmatrix", 1628630681u, 0, 13, NULL); -be_define_const_str(lv_switch, "lv_switch", 3407171508u, 0, 9, &be_const_str_set_wrap); -be_define_const_str(set_wrap, "set_wrap", 776352320u, 0, 8, NULL); -be_define_const_str(SSPI, "SSPI", 2469416576u, 0, 4, &be_const_str_STYLE_SCALE_BORDER_WIDTH); -be_define_const_str(STYLE_SCALE_BORDER_WIDTH, "STYLE_SCALE_BORDER_WIDTH", 4091410577u, 0, 24, &be_const_str_set_map); -be_define_const_str(set_map, "set_map", 4012856954u, 0, 7, &be_const_str_set_width_margin); -be_define_const_str(set_width_margin, "set_width_margin", 2313657923u, 0, 16, NULL); -be_define_const_str(DRAG_DIR_HOR, "DRAG_DIR_HOR", 1213227361u, 0, 12, &be_const_str_KEY_BACKSPACE); -be_define_const_str(KEY_BACKSPACE, "KEY_BACKSPACE", 269443424u, 0, 13, &be_const_str_set_focus_parent); -be_define_const_str(set_focus_parent, "set_focus_parent", 2829293865u, 0, 16, NULL); -be_define_const_str(get_one_check, "get_one_check", 2649478907u, 0, 13, &be_const_str_get_state); -be_define_const_str(get_state, "get_state", 3804504029u, 0, 9, &be_const_str_set_style_local_image_blend_mode); -be_define_const_str(set_style_local_image_blend_mode, "set_style_local_image_blend_mode", 1792244615u, 0, 32, NULL); -be_define_const_str(set_y, "set_y", 1866178391u, 0, 5, NULL); -be_define_const_str(TEXT_DECOR_NONE, "TEXT_DECOR_NONE", 2700466131u, 0, 15, NULL); -be_define_const_str(ALIGN_IN_BOTTOM_MID, "ALIGN_IN_BOTTOM_MID", 4192809251u, 0, 19, &be_const_str_PZEM016_RX); -be_define_const_str(PZEM016_RX, "PZEM016_RX", 1004012055u, 0, 10, &be_const_str_exp); -be_define_const_str(exp, "exp", 1923516200u, 0, 3, NULL); -be_define_const_str(get_style_size, "get_style_size", 3698157111u, 0, 14, NULL); -be_define_const_str(get_style_transition_prop_2, "get_style_transition_prop_2", 3421169246u, 0, 27, NULL); -be_define_const_str(HM10_TX, "HM10_TX", 1522037252u, 0, 7, &be_const_str_STYLE_OUTLINE_BLEND_MODE); -be_define_const_str(STYLE_OUTLINE_BLEND_MODE, "STYLE_OUTLINE_BLEND_MODE", 3861262655u, 0, 24, &be_const_str_STYLE_SCALE_END_BORDER_WIDTH); -be_define_const_str(STYLE_SCALE_END_BORDER_WIDTH, "STYLE_SCALE_END_BORDER_WIDTH", 763958239u, 0, 28, &be_const_str_get_style_text_sel_color); -be_define_const_str(get_style_text_sel_color, "get_style_text_sel_color", 1751096754u, 0, 24, &be_const_str_set_ext_click_area); -be_define_const_str(set_ext_click_area, "set_ext_click_area", 1298742324u, 0, 18, NULL); -be_define_const_str(else, "else", 3183434736u, 52, 4, NULL); -be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, &be_const_str_set_content_size); -be_define_const_str(set_content_size, "set_content_size", 10638115u, 0, 16, NULL); -be_define_const_str(get_edge_flash, "get_edge_flash", 3226611892u, 0, 14, &be_const_str_get_style_outline_color); -be_define_const_str(get_style_outline_color, "get_style_outline_color", 3936324952u, 0, 23, NULL); -be_define_const_str(get_scrl_layout, "get_scrl_layout", 2842797719u, 0, 15, &be_const_str_lv_spinner); -be_define_const_str(lv_spinner, "lv_spinner", 3361501901u, 0, 10, NULL); -be_define_const_str(STYLE_TRANSITION_PROP_5, "STYLE_TRANSITION_PROP_5", 996274500u, 0, 23, &be_const_str_set_editing); -be_define_const_str(set_editing, "set_editing", 1742905400u, 0, 11, &be_const_str_transform); -be_define_const_str(transform, "transform", 3786248987u, 0, 9, NULL); -be_define_const_str(SDM120_RX, "SDM120_RX", 1367571753u, 0, 9, &be_const_str_get_style_line_dash_width); -be_define_const_str(get_style_line_dash_width, "get_style_line_dash_width", 4191923846u, 0, 25, &be_const_str_scr_act); -be_define_const_str(scr_act, "scr_act", 2080211456u, 0, 7, NULL); -be_define_const_str(INDEV_STATE_REL, "INDEV_STATE_REL", 3257789899u, 0, 15, &be_const_str_gc); -be_define_const_str(gc, "gc", 1042313471u, 0, 2, &be_const_str_get_btn_ctrl); -be_define_const_str(get_btn_ctrl, "get_btn_ctrl", 370184444u, 0, 12, &be_const_str_get_y); -be_define_const_str(get_y, "get_y", 1205519667u, 0, 5, &be_const_str_register_button_encoder); -be_define_const_str(register_button_encoder, "register_button_encoder", 2811301550u, 0, 23, NULL); -be_define_const_str(hide_series, "hide_series", 3053662735u, 0, 11, &be_const_str_issubclass); -be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, NULL); -be_define_const_str(IBEACON_RX, "IBEACON_RX", 2466155575u, 0, 10, &be_const_str_SYMBOL_POWER); -be_define_const_str(SYMBOL_POWER, "SYMBOL_POWER", 1125993627u, 0, 12, &be_const_str_set_text_static); -be_define_const_str(set_text_static, "set_text_static", 3831207210u, 0, 15, &be_const_str_set_value_letter_space); -be_define_const_str(set_value_letter_space, "set_value_letter_space", 1113519355u, 0, 22, NULL); -be_define_const_str(set_col_cnt, "set_col_cnt", 3803893298u, 0, 11, &be_const_str_do); -be_define_const_str(do, "do", 1646057492u, 65, 2, NULL); -be_define_const_str(ILI9341_CS, "ILI9341_CS", 3519318851u, 0, 10, &be_const_str_set_btns_pos); -be_define_const_str(set_btns_pos, "set_btns_pos", 3991891940u, 0, 12, &be_const_str_set_style_local_value_letter_space); -be_define_const_str(set_style_local_value_letter_space, "set_style_local_value_letter_space", 826246017u, 0, 34, NULL); -be_define_const_str(get_btn_label, "get_btn_label", 3300200213u, 0, 13, NULL); -be_define_const_str(get_dir, "get_dir", 1037382287u, 0, 7, NULL); -be_define_const_str(RISING, "RISING", 1256404539u, 0, 6, NULL); -be_define_const_str(set_design_cb, "set_design_cb", 1469311634u, 0, 13, &be_const_str_super); -be_define_const_str(super, "super", 4152230356u, 0, 5, NULL); -be_define_const_str(get_tile_act, "get_tile_act", 3705631119u, 0, 12, &be_const_str_set_today_date); -be_define_const_str(set_today_date, "set_today_date", 3983571786u, 0, 14, NULL); -be_define_const_str(GRAD_DIR_NONE, "GRAD_DIR_NONE", 1627825480u, 0, 13, &be_const_str_Wire); -be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, &be_const_str___upper__); -be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, NULL); -be_define_const_str(get_style_line_width, "get_style_line_width", 1172338835u, 0, 20, &be_const_str_set_scale); -be_define_const_str(set_scale, "set_scale", 3828634574u, 0, 9, NULL); -be_define_const_str(set_btn_width, "set_btn_width", 2736013227u, 0, 13, NULL); -be_define_const_str(TABVIEW_TAB_POS_BOTTOM, "TABVIEW_TAB_POS_BOTTOM", 3095544198u, 0, 22, &be_const_str_set_pivot); -be_define_const_str(set_pivot, "set_pivot", 2329940872u, 0, 9, &be_const_str_set_scrl_layout); -be_define_const_str(set_scrl_layout, "set_scrl_layout", 2051800603u, 0, 15, NULL); -be_define_const_str(ALIGN_IN_TOP_LEFT, "ALIGN_IN_TOP_LEFT", 1231214604u, 0, 17, &be_const_str_detect); -be_define_const_str(detect, "detect", 8884370u, 0, 6, &be_const_str_get_width_margin); -be_define_const_str(get_width_margin, "get_width_margin", 872387359u, 0, 16, &be_const_str_set_style_local_bg_grad_dir); -be_define_const_str(set_style_local_bg_grad_dir, "set_style_local_bg_grad_dir", 946802226u, 0, 27, NULL); -be_define_const_str(EVENT_DEFOCUSED, "EVENT_DEFOCUSED", 1034310644u, 0, 15, &be_const_str_get_max_value); -be_define_const_str(get_max_value, "get_max_value", 2625343304u, 0, 13, NULL); -be_define_const_str(MCP39F5_RX, "MCP39F5_RX", 190458217u, 0, 10, &be_const_str_TXT_FLAG_CENTER); -be_define_const_str(TXT_FLAG_CENTER, "TXT_FLAG_CENTER", 1125425546u, 0, 15, NULL); -be_define_const_str(add_char, "add_char", 2276421097u, 0, 8, &be_const_str_clear_btn_ctrl_all); -be_define_const_str(clear_btn_ctrl_all, "clear_btn_ctrl_all", 895272499u, 0, 18, NULL); -be_define_const_str(count_children, "count_children", 1689969950u, 0, 14, &be_const_str_set_style_local_transition_time); -be_define_const_str(set_style_local_transition_time, "set_style_local_transition_time", 1761097355u, 0, 31, &be_const_str_set_text_blend_mode); -be_define_const_str(set_text_blend_mode, "set_text_blend_mode", 1236604715u, 0, 19, NULL); -be_define_const_str(align_x, "align_x", 3735213169u, 0, 7, &be_const_str_set_style_local_value_str); -be_define_const_str(set_style_local_value_str, "set_style_local_value_str", 3984127099u, 0, 25, NULL); -be_define_const_str(LABEL_LONG_EXPAND, "LABEL_LONG_EXPAND", 2357238585u, 0, 17, &be_const_str_set_transition_prop_6); -be_define_const_str(set_transition_prop_6, "set_transition_prop_6", 3050678964u, 0, 21, NULL); -be_define_const_str(PROTECT_FOLLOW, "PROTECT_FOLLOW", 44354676u, 0, 14, &be_const_str_RF_SENSOR); -be_define_const_str(RF_SENSOR, "RF_SENSOR", 2289628100u, 0, 9, &be_const_str_STYLE_BG_BLEND_MODE); -be_define_const_str(STYLE_BG_BLEND_MODE, "STYLE_BG_BLEND_MODE", 1458637206u, 0, 19, &be_const_str_lv_page); -be_define_const_str(lv_page, "lv_page", 2373170067u, 0, 7, &be_const_str_set_transition_time); -be_define_const_str(set_transition_time, "set_transition_time", 887720041u, 0, 19, NULL); -be_define_const_str(SHELLY_DIMMER_RST_INV, "SHELLY_DIMMER_RST_INV", 2366759773u, 0, 21, &be_const_str_seg7_font); -be_define_const_str(seg7_font, "seg7_font", 4099690689u, 0, 9, &be_const_str_set_x); -be_define_const_str(set_x, "set_x", 1849400772u, 0, 5, NULL); -be_define_const_str(send_data, "send_data", 4178328760u, 0, 9, &be_const_str_set_group); -be_define_const_str(set_group, "set_group", 2448788519u, 0, 9, NULL); -be_define_const_str(ALIGN_OUT_RIGHT_BOTTOM, "ALIGN_OUT_RIGHT_BOTTOM", 3786852942u, 0, 22, NULL); -be_define_const_str(get_style_line_dash_gap, "get_style_line_dash_gap", 1205629734u, 0, 23, &be_const_str_get_style_transition_prop_1); -be_define_const_str(get_style_transition_prop_1, "get_style_transition_prop_1", 3404391627u, 0, 27, &be_const_str_set_y_tick_length); -be_define_const_str(set_y_tick_length, "set_y_tick_length", 1194305306u, 0, 17, NULL); -be_define_const_str(set_style_local_pattern_blend_mode, "set_style_local_pattern_blend_mode", 3861434146u, 0, 34, NULL); -be_define_const_str(add_element, "add_element", 940011507u, 0, 11, &be_const_str_get_style_image_opa); -be_define_const_str(get_style_image_opa, "get_style_image_opa", 111986494u, 0, 19, NULL); -be_define_const_str(KEY_ENTER, "KEY_ENTER", 2614103337u, 0, 9, &be_const_str_SBR_RX); -be_define_const_str(SBR_RX, "SBR_RX", 3350999801u, 0, 6, &be_const_str_set_max_height); -be_define_const_str(set_max_height, "set_max_height", 394927448u, 0, 14, NULL); -be_define_const_str(BLEND_MODE_NORMAL, "BLEND_MODE_NORMAL", 1282739232u, 0, 17, &be_const_str_get_cursor_manage); -be_define_const_str(get_cursor_manage, "get_cursor_manage", 2216849296u, 0, 17, NULL); -be_define_const_str(STYLE_TRANSITION_PROP_2, "STYLE_TRANSITION_PROP_2", 979496881u, 0, 23, NULL); -be_define_const_str(get_x, "get_x", 1188742048u, 0, 5, &be_const_str_is_inactive); -be_define_const_str(is_inactive, "is_inactive", 2737113619u, 0, 11, NULL); -be_define_const_str(CHART_TYPE_NONE, "CHART_TYPE_NONE", 1127256103u, 0, 15, &be_const_str_number); -be_define_const_str(number, "number", 467038368u, 0, 6, &be_const_str_set_end_angle); -be_define_const_str(set_end_angle, "set_end_angle", 2783087761u, 0, 13, NULL); -be_define_const_str(LE01MR_TX, "LE01MR_TX", 1589687023u, 0, 9, &be_const_str_set_padding_left); -be_define_const_str(set_padding_left, "set_padding_left", 1230478487u, 0, 16, NULL); -be_define_const_str(get_active_btn_text, "get_active_btn_text", 2709356149u, 0, 19, &be_const_str_get_style_shadow_blend_mode); -be_define_const_str(get_style_shadow_blend_mode, "get_style_shadow_blend_mode", 977594696u, 0, 27, &be_const_str_get_tasmota); -be_define_const_str(get_tasmota, "get_tasmota", 334356779u, 0, 11, NULL); -be_define_const_str(ILI9341_DC, "ILI9341_DC", 28838624u, 0, 10, &be_const_str_SENSOR_END); -be_define_const_str(SENSOR_END, "SENSOR_END", 3512542657u, 0, 10, &be_const_str_STYLE_MARGIN_BOTTOM); -be_define_const_str(STYLE_MARGIN_BOTTOM, "STYLE_MARGIN_BOTTOM", 4176801053u, 0, 19, &be_const_str_STYLE_TEXT_SEL_BG_COLOR); -be_define_const_str(STYLE_TEXT_SEL_BG_COLOR, "STYLE_TEXT_SEL_BG_COLOR", 2758212579u, 0, 23, &be_const_str_get_cursor_pos); -be_define_const_str(get_cursor_pos, "get_cursor_pos", 3695280847u, 0, 14, NULL); -be_define_const_str(set_dir, "set_dir", 331967531u, 0, 7, NULL); -be_define_const_str(DROPDOWN_DIR_DOWN, "DROPDOWN_DIR_DOWN", 214322625u, 0, 17, &be_const_str_get_cell_align); -be_define_const_str(get_cell_align, "get_cell_align", 2284605658u, 0, 14, NULL); -be_define_const_str(SYMBOL_NEW_LINE, "SYMBOL_NEW_LINE", 2014334315u, 0, 15, &be_const_str_focus_prev); -be_define_const_str(focus_prev, "focus_prev", 2639915985u, 0, 10, &be_const_str_get_drag_throw); -be_define_const_str(get_drag_throw, "get_drag_throw", 2409838001u, 0, 14, &be_const_str_set_text_align); -be_define_const_str(set_text_align, "set_text_align", 2734674049u, 0, 14, NULL); -be_define_const_str(CHART_AXIS_INVERSE_LABELS_ORDER, "CHART_AXIS_INVERSE_LABELS_ORDER", 1279914111u, 0, 31, &be_const_str_get_ext_attr); -be_define_const_str(get_ext_attr, "get_ext_attr", 2125271231u, 0, 12, &be_const_str_set_placeholder_text); -be_define_const_str(set_placeholder_text, "set_placeholder_text", 1413918705u, 0, 20, NULL); -be_define_const_str(RC522_CS, "RC522_CS", 2639619996u, 0, 8, &be_const_str_get_style_value_ofs_x); -be_define_const_str(get_style_value_ofs_x, "get_style_value_ofs_x", 4017645761u, 0, 21, &be_const_str_set_outline_blend_mode); -be_define_const_str(set_outline_blend_mode, "set_outline_blend_mode", 4273381132u, 0, 22, &be_const_str_set_scale_border_width); -be_define_const_str(set_scale_border_width, "set_scale_border_width", 3210684730u, 0, 22, &be_const_str_web_add_button); -be_define_const_str(web_add_button, "web_add_button", 3537875058u, 0, 14, &be_const_str_web_add_main_button); -be_define_const_str(web_add_main_button, "web_add_main_button", 3960367664u, 0, 19, NULL); -be_define_const_str(Driver, "Driver", 3576386303u, 0, 6, &be_const_str_get_title); -be_define_const_str(get_title, "get_title", 1263271230u, 0, 9, NULL); -be_define_const_str(collect, "collect", 2399039025u, 0, 7, &be_const_str_get_series_area); -be_define_const_str(get_series_area, "get_series_area", 1561258251u, 0, 15, NULL); -be_define_const_str(set_style_local_line_rounded, "set_style_local_line_rounded", 3167871810u, 0, 28, NULL); -be_define_const_str(SSPI_MOSI, "SSPI_MOSI", 3745917497u, 0, 9, &be_const_str_TUYA_TX); -be_define_const_str(TUYA_TX, "TUYA_TX", 1541301465u, 0, 7, &be_const_str_get_cell_merge_right); -be_define_const_str(get_cell_merge_right, "get_cell_merge_right", 207626582u, 0, 20, NULL); -be_define_const_str(CHANGE, "CHANGE", 4280911421u, 0, 6, &be_const_str_NRG_SEL); -be_define_const_str(NRG_SEL, "NRG_SEL", 1771358125u, 0, 7, NULL); -be_define_const_str(STYLE_BORDER_BLEND_MODE, "STYLE_BORDER_BLEND_MODE", 3752388357u, 0, 23, &be_const_str_set_zoom); -be_define_const_str(set_zoom, "set_zoom", 1925134407u, 0, 8, NULL); -be_define_const_str(get_point_count, "get_point_count", 617480290u, 0, 15, NULL); -be_define_const_str(BORDER_SIDE_TOP, "BORDER_SIDE_TOP", 3643834727u, 0, 15, &be_const_str_SYMBOL_MUTE); -be_define_const_str(SYMBOL_MUTE, "SYMBOL_MUTE", 563116043u, 0, 11, NULL); -be_define_const_str(get_style_outline_opa, "get_style_outline_opa", 1286010513u, 0, 21, &be_const_str_set_click); -be_define_const_str(set_click, "set_click", 2550101068u, 0, 9, NULL); -be_define_const_str(STYLE_VALUE_LINE_SPACE, "STYLE_VALUE_LINE_SPACE", 2028376414u, 0, 22, &be_const_str_SYMBOL_SHUFFLE); -be_define_const_str(SYMBOL_SHUFFLE, "SYMBOL_SHUFFLE", 1123310147u, 0, 14, &be_const_str_SYMBOL_STOP); -be_define_const_str(SYMBOL_STOP, "SYMBOL_STOP", 2836505202u, 0, 11, &be_const_str_align_y); -be_define_const_str(align_y, "align_y", 3718435550u, 0, 7, &be_const_str_set_selected); -be_define_const_str(set_selected, "set_selected", 386442685u, 0, 12, NULL); -be_define_const_str(MAX7219CLK, "MAX7219CLK", 963568838u, 0, 10, &be_const_str_set_transition_prop_1); -be_define_const_str(set_transition_prop_1, "set_transition_prop_1", 3033901345u, 0, 21, NULL); -be_define_const_str(HJL_CF, "HJL_CF", 786158487u, 0, 6, &be_const_str_set_event_cb); -be_define_const_str(set_event_cb, "set_event_cb", 3611711604u, 0, 12, &be_const_str_set_style_local_bg_color); -be_define_const_str(set_style_local_bg_color, "set_style_local_bg_color", 3796704273u, 0, 24, NULL); -be_define_const_str(ETH_PHY_MDIO, "ETH_PHY_MDIO", 3261871568u, 0, 12, NULL); -be_define_const_str(set_adv_hittest, "set_adv_hittest", 2312818651u, 0, 15, NULL); -be_define_const_str(opt_add, "+", 772578730u, 0, 1, &be_const_str_GAUGE_PART_MAJOR); -be_define_const_str(GAUGE_PART_MAJOR, "GAUGE_PART_MAJOR", 3656186174u, 0, 16, &be_const_str_setrange); -be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, NULL); -be_define_const_str(ALIGN_IN_RIGHT_MID, "ALIGN_IN_RIGHT_MID", 1518023108u, 0, 18, &be_const_str_NAVY); -be_define_const_str(NAVY, "NAVY", 1719816465u, 0, 4, &be_const_str_set_drag_dir); -be_define_const_str(set_drag_dir, "set_drag_dir", 2315801594u, 0, 12, NULL); -be_define_const_str(BUZZER, "BUZZER", 1550039611u, 0, 6, &be_const_str_yield); -be_define_const_str(yield, "yield", 1821831854u, 0, 5, NULL); -be_define_const_str(KEY1_TC, "KEY1_TC", 25685109u, 0, 7, &be_const_str_get_checkable); -be_define_const_str(get_checkable, "get_checkable", 2811548136u, 0, 13, &be_const_str_set_style_local_value_ofs_x); -be_define_const_str(set_style_local_value_ofs_x, "set_style_local_value_ofs_x", 3057670197u, 0, 27, NULL); -be_define_const_str(DRAG_DIR_VER, "DRAG_DIR_VER", 3097064297u, 0, 12, &be_const_str_EVENT_CANCEL); -be_define_const_str(EVENT_CANCEL, "EVENT_CANCEL", 3703374138u, 0, 12, &be_const_str_lv_line); -be_define_const_str(lv_line, "lv_line", 2692732914u, 0, 7, NULL); -be_define_const_str(CALENDAR_PART_BG, "CALENDAR_PART_BG", 562605961u, 0, 16, NULL); -be_define_const_str(EVENT_RELEASED, "EVENT_RELEASED", 4173795963u, 0, 14, NULL); -be_define_const_str(LAYOUT_COLUMN_LEFT, "LAYOUT_COLUMN_LEFT", 3178094182u, 0, 18, &be_const_str_STYLE_SCALE_END_LINE_WIDTH); -be_define_const_str(STYLE_SCALE_END_LINE_WIDTH, "STYLE_SCALE_END_LINE_WIDTH", 2154819175u, 0, 26, &be_const_str_gamma10); -be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, &be_const_str_set_digit_format); -be_define_const_str(set_digit_format, "set_digit_format", 293274625u, 0, 16, &be_const_str_set_outline_pad); -be_define_const_str(set_outline_pad, "set_outline_pad", 2845869448u, 0, 15, NULL); -be_define_const_str(STYLE_TRANSITION_PROP_3, "STYLE_TRANSITION_PROP_3", 962719262u, 0, 23, &be_const_str_copy_buf); -be_define_const_str(copy_buf, "copy_buf", 2209552774u, 0, 8, &be_const_str_imin); -be_define_const_str(imin, "imin", 2714127864u, 0, 4, &be_const_str_set_style_local_shadow_spread); -be_define_const_str(set_style_local_shadow_spread, "set_style_local_shadow_spread", 850759600u, 0, 29, NULL); -be_define_const_str(DSB, "DSB", 98073254u, 0, 3, &be_const_str_get_style_line_rounded); -be_define_const_str(get_style_line_rounded, "get_style_line_rounded", 2936625238u, 0, 22, NULL); -be_define_const_str(CALENDAR_PART_DATE, "CALENDAR_PART_DATE", 1097756842u, 0, 18, &be_const_str_DISP_SIZE_LARGE); -be_define_const_str(DISP_SIZE_LARGE, "DISP_SIZE_LARGE", 3377069231u, 0, 15, NULL); -be_define_const_str(WEBCAM_PSCLK, "WEBCAM_PSCLK", 3150007456u, 0, 12, &be_const_str_get_src); -be_define_const_str(get_src, "get_src", 403557294u, 0, 7, &be_const_str_set_disabled); -be_define_const_str(set_disabled, "set_disabled", 3892741852u, 0, 12, NULL); -be_define_const_str(find, "find", 3186656602u, 0, 4, NULL); -be_define_const_str(PULLUP, "PULLUP", 3417628531u, 0, 6, &be_const_str_set_style_local_transition_prop_3); -be_define_const_str(set_style_local_transition_prop_3, "set_style_local_transition_prop_3", 2619092581u, 0, 33, &be_const_str_return); -be_define_const_str(return, "return", 2246981567u, 60, 6, NULL); -be_define_const_str(ADC_PH, "ADC_PH", 3820290594u, 0, 6, &be_const_str_OBJ_PART_VIRTUAL_FIRST); -be_define_const_str(OBJ_PART_VIRTUAL_FIRST, "OBJ_PART_VIRTUAL_FIRST", 1744058739u, 0, 22, &be_const_str_WEBCAM_RESET); -be_define_const_str(WEBCAM_RESET, "WEBCAM_RESET", 2171221520u, 0, 12, NULL); -be_define_const_str(sinh, "sinh", 282220607u, 0, 4, NULL); -be_define_const_str(get_focused_btn, "get_focused_btn", 1271435326u, 0, 15, &be_const_str_is_focused); -be_define_const_str(is_focused, "is_focused", 2171112339u, 0, 10, &be_const_str_set_line_opa); -be_define_const_str(set_line_opa, "set_line_opa", 2983219519u, 0, 12, NULL); -be_define_const_str(GAUGE_PART_NEEDLE, "GAUGE_PART_NEEDLE", 154997366u, 0, 17, &be_const_str_SYMBOL_KEYBOARD); -be_define_const_str(SYMBOL_KEYBOARD, "SYMBOL_KEYBOARD", 1621492879u, 0, 15, &be_const_str_set_style_local_value_opa); -be_define_const_str(set_style_local_value_opa, "set_style_local_value_opa", 3003874062u, 0, 25, NULL); -be_define_const_str(KEY_NEXT, "KEY_NEXT", 4124880692u, 0, 8, &be_const_str_SYMBOL_UP); -be_define_const_str(SYMBOL_UP, "SYMBOL_UP", 3886401511u, 0, 9, &be_const_str_get_editing); -be_define_const_str(get_editing, "get_editing", 281870028u, 0, 11, &be_const_str_set_checked); -be_define_const_str(set_checked, "set_checked", 1119609005u, 0, 11, NULL); -be_define_const_str(CHART_TYPE_COLUMN, "CHART_TYPE_COLUMN", 385586299u, 0, 17, &be_const_str_get_style_bg_opa); -be_define_const_str(get_style_bg_opa, "get_style_bg_opa", 1274566692u, 0, 16, NULL); -be_define_const_str(CHART_AXIS_DRAW_LAST_TICK, "CHART_AXIS_DRAW_LAST_TICK", 811055023u, 0, 25, &be_const_str_get_style_value_ofs_y); -be_define_const_str(get_style_value_ofs_y, "get_style_value_ofs_y", 4000868142u, 0, 21, NULL); -be_define_const_str(SAIR_TX, "SAIR_TX", 268017311u, 0, 7, &be_const_str_SDM630_TX); -be_define_const_str(SDM630_TX, "SDM630_TX", 696213075u, 0, 9, NULL); -be_define_const_str(PROTECT_POS, "PROTECT_POS", 1960404285u, 0, 11, &be_const_str_STATE_DEFAULT); -be_define_const_str(STATE_DEFAULT, "STATE_DEFAULT", 712406428u, 0, 13, &be_const_str_focus_freeze); -be_define_const_str(focus_freeze, "focus_freeze", 3394722079u, 0, 12, &be_const_str_get_offset_y); -be_define_const_str(get_offset_y, "get_offset_y", 3939359167u, 0, 12, &be_const_str_set_pad_right); -be_define_const_str(set_pad_right, "set_pad_right", 4274005568u, 0, 13, NULL); -be_define_const_str(get_style_transform_height, "get_style_transform_height", 3736737548u, 0, 26, &be_const_str_set_btn_ctrl_all); -be_define_const_str(set_btn_ctrl_all, "set_btn_ctrl_all", 274690332u, 0, 16, &be_const_str_set_style_local_shadow_color); -be_define_const_str(set_style_local_shadow_color, "set_style_local_shadow_color", 2778451758u, 0, 28, NULL); -be_define_const_str(P9813_DAT, "P9813_DAT", 778577052u, 0, 9, &be_const_str_set_drag_throw); -be_define_const_str(set_drag_throw, "set_drag_throw", 2511679421u, 0, 14, NULL); -be_define_const_str(get_day_of_week, "get_day_of_week", 3301373175u, 0, 15, &be_const_str_set_bright); -be_define_const_str(set_bright, "set_bright", 499797888u, 0, 10, &be_const_str_set_symbol); -be_define_const_str(set_symbol, "set_symbol", 2254998928u, 0, 10, NULL); -be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, NULL); -be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, &be_const_str_get_scrollbar_mode); -be_define_const_str(get_scrollbar_mode, "get_scrollbar_mode", 1258717108u, 0, 18, NULL); -be_define_const_str(CPICKER_TYPE_RECT, "CPICKER_TYPE_RECT", 126543004u, 0, 17, &be_const_str_TFMINIPLUS_TX); -be_define_const_str(TFMINIPLUS_TX, "TFMINIPLUS_TX", 2527875337u, 0, 13, NULL); -be_define_const_str(BL0940_RX, "BL0940_RX", 2908993179u, 0, 9, &be_const_str_get_bg_angle_start); -be_define_const_str(get_bg_angle_start, "get_bg_angle_start", 1794378932u, 0, 18, &be_const_str_get_style_margin_top); -be_define_const_str(get_style_margin_top, "get_style_margin_top", 2201799028u, 0, 20, NULL); -be_define_const_str(ARC_PART_INDIC, "ARC_PART_INDIC", 1749778975u, 0, 14, &be_const_str_SYMBOL_WARNING); -be_define_const_str(SYMBOL_WARNING, "SYMBOL_WARNING", 4119913686u, 0, 14, NULL); -be_define_const_str(OPA_60, "OPA_60", 2008896492u, 0, 6, &be_const_str_SYMBOL_BLUETOOTH); -be_define_const_str(SYMBOL_BLUETOOTH, "SYMBOL_BLUETOOTH", 679376572u, 0, 16, NULL); -be_define_const_str(get_scrl_fit_bottom, "get_scrl_fit_bottom", 446102398u, 0, 19, &be_const_str_traceback); -be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, &be_const_str_import); -be_define_const_str(import, "import", 288002260u, 66, 6, NULL); -be_define_const_str(STYLE_BG_OPA, "STYLE_BG_OPA", 1487941245u, 0, 12, &be_const_str_get_style_pad_bottom); -be_define_const_str(get_style_pad_bottom, "get_style_pad_bottom", 1749510283u, 0, 20, &be_const_str_pin); -be_define_const_str(pin, "pin", 1866532500u, 0, 3, NULL); -be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, &be_const_str_del_anim_ready_cb); -be_define_const_str(del_anim_ready_cb, "del_anim_ready_cb", 1276516666u, 0, 17, &be_const_str_set_bg_color); -be_define_const_str(set_bg_color, "set_bg_color", 3381646455u, 0, 12, NULL); -be_define_const_str(PROTECT_CHILD_CHG, "PROTECT_CHILD_CHG", 998079554u, 0, 17, NULL); -be_define_const_str(MHZ_TXD, "MHZ_TXD", 3310158233u, 0, 7, &be_const_str_set_ext_array); -be_define_const_str(set_ext_array, "set_ext_array", 3579382093u, 0, 13, NULL); -be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, NULL); -be_define_const_str(get_height_grid, "get_height_grid", 1178822580u, 0, 15, &be_const_str_set_style_local_value_ofs_y); -be_define_const_str(set_style_local_value_ofs_y, "set_style_local_value_ofs_y", 3040892578u, 0, 27, NULL); -be_define_const_str(DSB_OUT, "DSB_OUT", 732335085u, 0, 7, &be_const_str_invalidate); -be_define_const_str(invalidate, "invalidate", 2649734928u, 0, 10, &be_const_str_set_critical_value); -be_define_const_str(set_critical_value, "set_critical_value", 1194587727u, 0, 18, &be_const_str_set_height_margin); -be_define_const_str(set_height_margin, "set_height_margin", 3083248294u, 0, 17, NULL); -be_define_const_str(get_style_border_side, "get_style_border_side", 1552576474u, 0, 21, NULL); -be_define_const_str(get_sb_mode, "get_sb_mode", 2283093353u, 0, 11, &be_const_str_set_pad_top); -be_define_const_str(set_pad_top, "set_pad_top", 193376421u, 0, 11, NULL); -be_define_const_str(CHART_CURSOR_NONE, "CHART_CURSOR_NONE", 2955624997u, 0, 17, &be_const_str_SSD1331_CS); -be_define_const_str(SSD1331_CS, "SSD1331_CS", 4191047928u, 0, 10, &be_const_str_SYMBOL_PLUS); -be_define_const_str(SYMBOL_PLUS, "SYMBOL_PLUS", 2860093262u, 0, 11, &be_const_str_SYMBOL_SAVE); -be_define_const_str(SYMBOL_SAVE, "SYMBOL_SAVE", 2439821015u, 0, 11, &be_const_str_lv_gauge); -be_define_const_str(lv_gauge, "lv_gauge", 118613531u, 0, 8, NULL); -be_define_const_str(set_btn_ctrl, "set_btn_ctrl", 3999876128u, 0, 12, &be_const_str_set_max_length); -be_define_const_str(set_max_length, "set_max_length", 2269400999u, 0, 14, NULL); -be_define_const_str(get_style_scale_end_color, "get_style_scale_end_color", 142275754u, 0, 25, NULL); -be_define_const_str(del, "del", 3478752842u, 0, 3, &be_const_str_focus_obj); -be_define_const_str(focus_obj, "focus_obj", 1075574617u, 0, 9, &be_const_str_lv_checkbox); -be_define_const_str(lv_checkbox, "lv_checkbox", 7454841u, 0, 11, &be_const_str_set_pattern_recolor); -be_define_const_str(set_pattern_recolor, "set_pattern_recolor", 3136030237u, 0, 19, NULL); -be_define_const_str(SDS0X1_RX, "SDS0X1_RX", 1170717385u, 0, 9, &be_const_str_SYMBOL_MINUS); -be_define_const_str(SYMBOL_MINUS, "SYMBOL_MINUS", 1806749158u, 0, 12, &be_const_str_set_style_local_transition_prop_2); -be_define_const_str(set_style_local_transition_prop_2, "set_style_local_transition_prop_2", 2602314962u, 0, 33, NULL); -be_define_const_str(remove, "remove", 3683784189u, 0, 6, NULL); -be_define_const_str(PROTECT_EVENT_TO_DISABLED, "PROTECT_EVENT_TO_DISABLED", 330306814u, 0, 25, &be_const_str_clear_protect); -be_define_const_str(clear_protect, "clear_protect", 2408863094u, 0, 13, &be_const_str_get_height_margin); -be_define_const_str(get_height_margin, "get_height_margin", 4277714442u, 0, 17, NULL); -be_define_const_str(REL1, "REL1", 3142397887u, 0, 4, &be_const_str_down); -be_define_const_str(down, "down", 1035581717u, 0, 4, NULL); -be_define_const_str(WE517_TX, "WE517_TX", 2954817217u, 0, 8, &be_const_str_set_pattern_repeat); -be_define_const_str(set_pattern_repeat, "set_pattern_repeat", 553014028u, 0, 18, &be_const_str_stop_auto_close); -be_define_const_str(stop_auto_close, "stop_auto_close", 3282451958u, 0, 15, NULL); -be_define_const_str(NRF24_CS, "NRF24_CS", 555833194u, 0, 8, NULL); -be_define_const_str(CALENDAR_PART_DAY_NAMES, "CALENDAR_PART_DAY_NAMES", 1761763651u, 0, 23, &be_const_str_i2c_enabled); -be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, NULL); -be_define_const_str(BORDER_SIDE_FULL, "BORDER_SIDE_FULL", 703648713u, 0, 16, &be_const_str_EVENT_PRESSING); -be_define_const_str(EVENT_PRESSING, "EVENT_PRESSING", 2840400065u, 0, 14, &be_const_str_TXT_FLAG_FIT); -be_define_const_str(TXT_FLAG_FIT, "TXT_FLAG_FIT", 3174579022u, 0, 12, &be_const_str_ZIGBEE_RX); -be_define_const_str(ZIGBEE_RX, "ZIGBEE_RX", 93215470u, 0, 9, NULL); -be_define_const_str(ALIGN_OUT_BOTTOM_LEFT, "ALIGN_OUT_BOTTOM_LEFT", 1302083659u, 0, 21, &be_const_str_set_gesture_parent); -be_define_const_str(set_gesture_parent, "set_gesture_parent", 3726242272u, 0, 18, NULL); -be_define_const_str(get_offset_x, "get_offset_x", 3922581548u, 0, 12, &be_const_str_set_buffer); -be_define_const_str(set_buffer, "set_buffer", 311233742u, 0, 10, NULL); -be_define_const_str(SYMBOL_VOLUME_MID, "SYMBOL_VOLUME_MID", 158835057u, 0, 17, NULL); -be_define_const_str(A4988_MS1, "A4988_MS1", 1729976611u, 0, 9, &be_const_str_resp_cmnd_error); -be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, NULL); -be_define_const_str(get_next_btn, "get_next_btn", 1221160406u, 0, 12, NULL); -be_define_const_str(LIST_PART_SCROLLBAR, "LIST_PART_SCROLLBAR", 3690731034u, 0, 19, &be_const_str_TEXTAREA_CURSOR_LAST); -be_define_const_str(TEXTAREA_CURSOR_LAST, "TEXTAREA_CURSOR_LAST", 1393995267u, 0, 20, NULL); -be_define_const_str(get_needle_img_pivot_x, "get_needle_img_pivot_x", 1521736283u, 0, 22, NULL); -be_define_const_str(BTNMATRIX_CTRL_CLICK_TRIG, "BTNMATRIX_CTRL_CLICK_TRIG", 2305639872u, 0, 25, &be_const_str_VSPI); -be_define_const_str(VSPI, "VSPI", 790634249u, 0, 4, &be_const_str_remove_mask); -be_define_const_str(remove_mask, "remove_mask", 1680723542u, 0, 11, &be_const_str_set_style_local_border_opa); -be_define_const_str(set_style_local_border_opa, "set_style_local_border_opa", 2125961393u, 0, 26, NULL); -be_define_const_str(get_angle_start, "get_angle_start", 99415936u, 0, 15, &be_const_str_set_focus_cb); -be_define_const_str(set_focus_cb, "set_focus_cb", 4094066116u, 0, 12, NULL); -be_define_const_str(OPA_0, "OPA_0", 3351018670u, 0, 5, &be_const_str_SLIDER_TYPE_RANGE); -be_define_const_str(SLIDER_TYPE_RANGE, "SLIDER_TYPE_RANGE", 1380197143u, 0, 17, NULL); -be_define_const_str(resize, "resize", 3514612129u, 0, 6, NULL); -be_define_const_str(SYMBOL_GPS, "SYMBOL_GPS", 3044165570u, 0, 10, &be_const_str_get_style_text_color); -be_define_const_str(get_style_text_color, "get_style_text_color", 1013168305u, 0, 20, &be_const_str_set_transition_prop_3); -be_define_const_str(set_transition_prop_3, "set_transition_prop_3", 3000346107u, 0, 21, NULL); -be_define_const_str(PN532_TXD, "PN532_TXD", 3093418644u, 0, 9, &be_const_str_init_draw_rect_dsc); -be_define_const_str(init_draw_rect_dsc, "init_draw_rect_dsc", 4242061620u, 0, 18, &be_const_str_set_line_dash_gap); -be_define_const_str(set_line_dash_gap, "set_line_dash_gap", 3499494412u, 0, 17, &be_const_str_set_style_local_image_recolor_opa); -be_define_const_str(set_style_local_image_recolor_opa, "set_style_local_image_recolor_opa", 1752356781u, 0, 33, NULL); -be_define_const_str(get_local_style, "get_local_style", 2060541417u, 0, 15, &be_const_str_set_cell_value); -be_define_const_str(set_cell_value, "set_cell_value", 3982436570u, 0, 14, &be_const_str_set_style_local_border_color); -be_define_const_str(set_style_local_border_color, "set_style_local_border_color", 2798696056u, 0, 28, NULL); -be_define_const_str(I2C_SDA, "I2C_SDA", 1052592262u, 0, 7, &be_const_str_SR04_TRIG); -be_define_const_str(SR04_TRIG, "SR04_TRIG", 68671263u, 0, 9, &be_const_str_get_child); -be_define_const_str(get_child, "get_child", 1282595182u, 0, 9, &be_const_str_set_line_width); -be_define_const_str(set_line_width, "set_line_width", 908110269u, 0, 14, NULL); -be_define_const_str(set_y_invert, "set_y_invert", 4003140588u, 0, 12, NULL); -be_define_const_str(set_one_check, "set_one_check", 1355948919u, 0, 13, NULL); -be_define_const_str(get_align, "get_align", 1275859045u, 0, 9, NULL); -be_define_const_str(SYMBOL_DIRECTORY, "SYMBOL_DIRECTORY", 1886053449u, 0, 16, NULL); -be_define_const_str(set_chg_rate, "set_chg_rate", 1522157679u, 0, 12, NULL); -be_define_const_str(STYLE_SIZE, "STYLE_SIZE", 2268500266u, 0, 10, &be_const_str_get_top); -be_define_const_str(get_top, "get_top", 1711502355u, 0, 7, NULL); -be_define_const_str(EVENT_LONG_PRESSED_REPEAT, "EVENT_LONG_PRESSED_REPEAT", 1734201539u, 0, 25, &be_const_str_rtc); -be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, NULL); -be_define_const_str(FIT_TIGHT, "FIT_TIGHT", 2710930043u, 0, 9, &be_const_str_STYLE_TRANSITION_PROP_1); -be_define_const_str(STYLE_TRANSITION_PROP_1, "STYLE_TRANSITION_PROP_1", 929164024u, 0, 23, &be_const_str_get_width); -be_define_const_str(get_width, "get_width", 3293417300u, 0, 9, &be_const_str_lv_roller); -be_define_const_str(lv_roller, "lv_roller", 661902064u, 0, 9, NULL); -be_define_const_str(TABVIEW_TAB_POS_LEFT, "TABVIEW_TAB_POS_LEFT", 897772772u, 0, 20, NULL); -be_define_const_str(get_layout, "get_layout", 2537311278u, 0, 10, &be_const_str_tolower); -be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, NULL); -be_define_const_str(STYLE_SHADOW_WIDTH, "STYLE_SHADOW_WIDTH", 629491480u, 0, 18, NULL); -be_define_const_str(DROPDOWN_PART_SELECTED, "DROPDOWN_PART_SELECTED", 1685473920u, 0, 22, &be_const_str_FS_RES_FULL); -be_define_const_str(FS_RES_FULL, "FS_RES_FULL", 3987964025u, 0, 11, NULL); -be_define_const_str(set_pattern_opa, "set_pattern_opa", 3749193119u, 0, 15, &be_const_str_set_style_local_transition_prop_1); -be_define_const_str(set_style_local_transition_prop_1, "set_style_local_transition_prop_1", 2585537343u, 0, 33, NULL); -be_define_const_str(LINEMETER_PART_MAIN, "LINEMETER_PART_MAIN", 1524851464u, 0, 19, NULL); -be_define_const_str(AQUA, "AQUA", 1203273877u, 0, 4, NULL); -be_define_const_str(DISP_SIZE_SMALL, "DISP_SIZE_SMALL", 722343095u, 0, 15, &be_const_str_SYMBOL_PAUSE); -be_define_const_str(SYMBOL_PAUSE, "SYMBOL_PAUSE", 641998172u, 0, 12, NULL); -be_define_const_str(STATE_HOVERED, "STATE_HOVERED", 1864667050u, 0, 13, &be_const_str_SYMBOL_BATTERY_3); -be_define_const_str(SYMBOL_BATTERY_3, "SYMBOL_BATTERY_3", 662591301u, 0, 16, &be_const_str_get_left_value); -be_define_const_str(get_left_value, "get_left_value", 1136489099u, 0, 14, &be_const_str_get_text_sel_start); -be_define_const_str(get_text_sel_start, "get_text_sel_start", 1075131103u, 0, 18, NULL); -be_define_const_str(ALIGN_OUT_LEFT_TOP, "ALIGN_OUT_LEFT_TOP", 2335540111u, 0, 18, &be_const_str_STYLE_SHADOW_OFS_X); -be_define_const_str(STYLE_SHADOW_OFS_X, "STYLE_SHADOW_OFS_X", 2707391813u, 0, 18, NULL); -be_define_const_str(OLED_RESET, "OLED_RESET", 4048987655u, 0, 10, NULL); -be_define_const_str(KEYBOARD_MODE_SPECIAL, "KEYBOARD_MODE_SPECIAL", 968590554u, 0, 21, &be_const_str_add_state); -be_define_const_str(add_state, "add_state", 934613858u, 0, 9, NULL); -be_define_const_str(opt_neq, "!=", 2428715011u, 0, 2, &be_const_str_HRXL_RX); -be_define_const_str(HRXL_RX, "HRXL_RX", 92702006u, 0, 7, NULL); +be_define_const_str(ADE7953_IRQ, "ADE7953_IRQ", 2329185922u, 0, 11, &be_const_str_KEY1_TC); +be_define_const_str(KEY1_TC, "KEY1_TC", 25685109u, 0, 7, &be_const_str_button_pressed); +be_define_const_str(button_pressed, "button_pressed", 1694209616u, 0, 14, &be_const_str_lv_slider); +be_define_const_str(lv_slider, "lv_slider", 2274180781u, 0, 9, &be_const_str_var); +be_define_const_str(var, "var", 2317739966u, 64, 3, NULL); +be_define_const_str(TASMOTACLIENT_RST_INV, "TASMOTACLIENT_RST_INV", 2601785365u, 0, 21, &be_const_str_isinstance); +be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, &be_const_str_pin_mode); +be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, NULL); +be_define_const_str(SYMBOL_CHARGE, "SYMBOL_CHARGE", 2106391946u, 0, 13, &be_const_str_WEBCAM_VSYNC); be_define_const_str(WEBCAM_VSYNC, "WEBCAM_VSYNC", 4032882166u, 0, 12, NULL); -be_define_const_str(LED_PART_MAIN, "LED_PART_MAIN", 3314442918u, 0, 13, &be_const_str_get_needle_img_pivot_y); -be_define_const_str(get_needle_img_pivot_y, "get_needle_img_pivot_y", 1504958664u, 0, 22, NULL); -be_define_const_str(STYLE_IMAGE_BLEND_MODE, "STYLE_IMAGE_BLEND_MODE", 3457971258u, 0, 22, &be_const_str_add_cmd); -be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, &be_const_str_set_x_tick_length); -be_define_const_str(set_x_tick_length, "set_x_tick_length", 3530536821u, 0, 17, NULL); -be_define_const_str(get_ext_click_pad_bottom, "get_ext_click_pad_bottom", 1405930484u, 0, 24, &be_const_str_get_style_value_letter_space); -be_define_const_str(get_style_value_letter_space, "get_style_value_letter_space", 193712565u, 0, 28, NULL); -be_define_const_str(STYLE_BORDER_POST, "STYLE_BORDER_POST", 1815444696u, 0, 17, &be_const_str_set_style_local_text_opa); -be_define_const_str(set_style_local_text_opa, "set_style_local_text_opa", 1391350156u, 0, 24, NULL); -be_define_const_str(get_style_shadow_opa, "get_style_shadow_opa", 2392646767u, 0, 20, &be_const_str_set_transition_prop_2); -be_define_const_str(set_transition_prop_2, "set_transition_prop_2", 2983568488u, 0, 21, NULL); -be_define_const_str(set_style_local_pattern_image, "set_style_local_pattern_image", 350348106u, 0, 29, NULL); -be_define_const_str(KEY1_INV, "KEY1_INV", 263542563u, 0, 8, &be_const_str_WEBCAM_XCLK); -be_define_const_str(WEBCAM_XCLK, "WEBCAM_XCLK", 536207425u, 0, 11, &be_const_str_get_style_text_line_space); -be_define_const_str(get_style_text_line_space, "get_style_text_line_space", 1588877665u, 0, 25, &be_const_str_resp_cmnd_done); -be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, NULL); -be_define_const_str(get_angle_end, "get_angle_end", 2420725825u, 0, 13, &be_const_str_scan); -be_define_const_str(scan, "scan", 3974641896u, 0, 4, &be_const_str_set_size); -be_define_const_str(set_size, "set_size", 2183165325u, 0, 8, NULL); -be_define_const_str(PWM1, "PWM1", 1353352426u, 0, 4, &be_const_str_set_top); -be_define_const_str(set_top, "set_top", 1234335895u, 0, 7, NULL); -be_define_const_str(SSPI_MAX31865_CS1, "SSPI_MAX31865_CS1", 1256578724u, 0, 17, NULL); -be_define_const_str(get_ext_click_pad_top, "get_ext_click_pad_top", 284862450u, 0, 21, NULL); -be_define_const_str(set_start_angle, "set_start_angle", 3152567416u, 0, 15, NULL); -be_define_const_str(ROT1B, "ROT1B", 809932573u, 0, 5, &be_const_str_STYLE_TEXT_COLOR); -be_define_const_str(STYLE_TEXT_COLOR, "STYLE_TEXT_COLOR", 2549754876u, 0, 16, &be_const_str_SYMBOL_BACKSPACE); -be_define_const_str(SYMBOL_BACKSPACE, "SYMBOL_BACKSPACE", 1997168681u, 0, 16, NULL); -be_define_const_str(FS_RES_BUSY, "FS_RES_BUSY", 3847519313u, 0, 11, &be_const_str_byte); -be_define_const_str(byte, "byte", 1683620383u, 0, 4, &be_const_str_set_clip_corner); -be_define_const_str(set_clip_corner, "set_clip_corner", 2280572814u, 0, 15, NULL); -be_define_const_str(set_fit, "set_fit", 4009334267u, 0, 7, NULL); -be_define_const_str(SYMBOL_BULLET, "SYMBOL_BULLET", 587181862u, 0, 13, &be_const_str_get_child_back); -be_define_const_str(get_child_back, "get_child_back", 3815628204u, 0, 14, NULL); -be_define_const_str(FS_RES_OK, "FS_RES_OK", 223294622u, 0, 9, &be_const_str_STYLE_VALUE_OFS_Y); -be_define_const_str(STYLE_VALUE_OFS_Y, "STYLE_VALUE_OFS_Y", 1374857417u, 0, 17, NULL); -be_define_const_str(BUZZER_INV, "BUZZER_INV", 3274564335u, 0, 10, &be_const_str_CPICKER_COLOR_MODE_SATURATION); -be_define_const_str(CPICKER_COLOR_MODE_SATURATION, "CPICKER_COLOR_MODE_SATURATION", 1463184715u, 0, 29, &be_const_str_SYMBOL_DOWN); -be_define_const_str(SYMBOL_DOWN, "SYMBOL_DOWN", 1107513570u, 0, 11, NULL); -be_define_const_str(get_auto_fit, "get_auto_fit", 2158692767u, 0, 12, &be_const_str_get_type); -be_define_const_str(get_type, "get_type", 2996227024u, 0, 8, NULL); -be_define_const_str(SCROLLBAR_MODE_HIDE, "SCROLLBAR_MODE_HIDE", 3451699170u, 0, 19, &be_const_str_set_outline_opa); -be_define_const_str(set_outline_opa, "set_outline_opa", 1167424027u, 0, 15, NULL); -be_define_const_str(ADC_RANGE, "ADC_RANGE", 3467329543u, 0, 9, &be_const_str_AS608_TX); -be_define_const_str(AS608_TX, "AS608_TX", 48630934u, 0, 8, &be_const_str_LEDLNK_INV); -be_define_const_str(LEDLNK_INV, "LEDLNK_INV", 3559015101u, 0, 10, NULL); -be_define_const_str(SPI_MOSI, "SPI_MOSI", 2494218614u, 0, 8, &be_const_str_pin_used); -be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, NULL); -be_define_const_str(set_style_local_pattern_recolor, "set_style_local_pattern_recolor", 2810797623u, 0, 31, NULL); -be_define_const_str(ADC_INPUT, "ADC_INPUT", 2207556878u, 0, 9, &be_const_str_STYLE_TRANSITION_TIME); -be_define_const_str(STYLE_TRANSITION_TIME, "STYLE_TRANSITION_TIME", 3058729752u, 0, 21, &be_const_str_focus); -be_define_const_str(focus, "focus", 337658899u, 0, 5, &be_const_str_iter); -be_define_const_str(iter, "iter", 3124256359u, 0, 4, &be_const_str_set_style_local_border_blend_mode); -be_define_const_str(set_style_local_border_blend_mode, "set_style_local_border_blend_mode", 3453690930u, 0, 33, NULL); -be_define_const_str(set_div_line_count, "set_div_line_count", 918956222u, 0, 18, &be_const_str_set_style_local_text_color); -be_define_const_str(set_style_local_text_color, "set_style_local_text_color", 2285935637u, 0, 26, NULL); -be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, NULL); -be_define_const_str(SYMBOL_BATTERY_2, "SYMBOL_BATTERY_2", 645813682u, 0, 16, &be_const_str_class); -be_define_const_str(class, "class", 2872970239u, 57, 5, NULL); -be_define_const_str(CPICKER_PART_MAIN, "CPICKER_PART_MAIN", 4275135052u, 0, 17, &be_const_str_STYLE_SHADOW_OFS_Y); -be_define_const_str(STYLE_SHADOW_OFS_Y, "STYLE_SHADOW_OFS_Y", 2690614194u, 0, 18, &be_const_str_get_symbol); -be_define_const_str(get_symbol, "get_symbol", 2697453548u, 0, 10, &be_const_str_realign); -be_define_const_str(realign, "realign", 170046109u, 0, 7, NULL); -be_define_const_str(ADC_CT_POWER, "ADC_CT_POWER", 3382284599u, 0, 12, &be_const_str_AS3935); -be_define_const_str(AS3935, "AS3935", 603621745u, 0, 6, &be_const_str_get_auto_realign); -be_define_const_str(get_auto_realign, "get_auto_realign", 4029512850u, 0, 16, NULL); -be_define_const_str(A4988_DIR, "A4988_DIR", 2223595843u, 0, 9, &be_const_str_set_text_fmt); -be_define_const_str(set_text_fmt, "set_text_fmt", 699875119u, 0, 12, NULL); -be_define_const_str(NEOPOOL_RX, "NEOPOOL_RX", 1917974474u, 0, 10, &be_const_str_STYLE_TEXT_DECOR); -be_define_const_str(STYLE_TEXT_DECOR, "STYLE_TEXT_DECOR", 2624841926u, 0, 16, &be_const_str_get_style_transform_zoom); -be_define_const_str(get_style_transform_zoom, "get_style_transform_zoom", 380604044u, 0, 24, NULL); -be_define_const_str(HSPI, "HSPI", 2263006151u, 0, 4, NULL); -be_define_const_str(get_height, "get_height", 3571755523u, 0, 10, NULL); -be_define_const_str(get_letter_on, "get_letter_on", 3272656192u, 0, 13, NULL); -be_define_const_str(CALENDAR_PART_HEADER, "CALENDAR_PART_HEADER", 1199188911u, 0, 20, &be_const_str_GESTURE_DIR_RIGHT); -be_define_const_str(GESTURE_DIR_RIGHT, "GESTURE_DIR_RIGHT", 3761728861u, 0, 17, &be_const_str_get_pwd_show_time); -be_define_const_str(get_pwd_show_time, "get_pwd_show_time", 2965915687u, 0, 17, &be_const_str_scale_uint); -be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, &be_const_str_set_hidden); -be_define_const_str(set_hidden, "set_hidden", 2478665880u, 0, 10, &be_const_str_set_left_value); -be_define_const_str(set_left_value, "set_left_value", 731130751u, 0, 14, &be_const_str_set_style_local_text_decor); -be_define_const_str(set_style_local_text_decor, "set_style_local_text_decor", 2615974143u, 0, 26, NULL); -be_define_const_str(BLUE, "BLUE", 750204685u, 0, 4, NULL); -be_define_const_str(STYLE_TRANSITION_PATH, "STYLE_TRANSITION_PATH", 3341574330u, 0, 21, &be_const_str_draw_arc); -be_define_const_str(draw_arc, "draw_arc", 1828251676u, 0, 8, &be_const_str_handle_get_type_signal); -be_define_const_str(handle_get_type_signal, "handle_get_type_signal", 3735097350u, 0, 22, &be_const_str_is_dragged); -be_define_const_str(is_dragged, "is_dragged", 1443807988u, 0, 10, &be_const_str_set_angle); -be_define_const_str(set_angle, "set_angle", 2542866927u, 0, 9, &be_const_str_set_anim_speed); -be_define_const_str(set_anim_speed, "set_anim_speed", 3709305189u, 0, 14, &be_const_str_set_px); -be_define_const_str(set_px, "set_px", 1137035068u, 0, 6, NULL); -be_define_const_str(KEYBOARD_PART_BTN, "KEYBOARD_PART_BTN", 875459207u, 0, 17, &be_const_str_STYLE_SCALE_END_COLOR); -be_define_const_str(STYLE_SCALE_END_COLOR, "STYLE_SCALE_END_COLOR", 1403682869u, 0, 21, &be_const_str_SYMBOL_CHARGE); -be_define_const_str(SYMBOL_CHARGE, "SYMBOL_CHARGE", 2106391946u, 0, 13, NULL); -be_define_const_str(get_btn_img, "get_btn_img", 177039868u, 0, 11, &be_const_str_set_bg_end_angle); -be_define_const_str(set_bg_end_angle, "set_bg_end_angle", 569028341u, 0, 16, &be_const_str_set_margin_right); -be_define_const_str(set_margin_right, "set_margin_right", 283278459u, 0, 16, NULL); -be_define_const_str(get_fit_left, "get_fit_left", 2671576953u, 0, 12, NULL); -be_define_const_str(RFRECV, "RFRECV", 354742801u, 0, 6, &be_const_str_set_scale_end_color); -be_define_const_str(set_scale_end_color, "set_scale_end_color", 355018320u, 0, 19, &be_const_str_set_style_local_transform_width); -be_define_const_str(set_style_local_transform_width, "set_style_local_transform_width", 3850555169u, 0, 31, NULL); -be_define_const_str(set_click_focus, "set_click_focus", 3544636103u, 0, 15, NULL); -be_define_const_str(lv_calendar, "lv_calendar", 3284396894u, 0, 11, NULL); -be_define_const_str(STYLE_BG_GRAD_STOP, "STYLE_BG_GRAD_STOP", 1591142422u, 0, 18, &be_const_str_set_insert_replace); -be_define_const_str(set_insert_replace, "set_insert_replace", 1439171942u, 0, 18, &be_const_str_set_line_dash_width); -be_define_const_str(set_line_dash_width, "set_line_dash_width", 347528132u, 0, 19, NULL); -be_define_const_str(DRAG_DIR_ONE, "DRAG_DIR_ONE", 2088479808u, 0, 12, &be_const_str_HRE_DATA); -be_define_const_str(HRE_DATA, "HRE_DATA", 1820377643u, 0, 8, &be_const_str_format); -be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_get_light); -be_define_const_str(get_light, "get_light", 381930476u, 0, 9, &be_const_str_get_option); -be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, NULL); -be_define_const_str(count_children_recursive, "count_children_recursive", 497030885u, 0, 24, &be_const_str_is_checked); -be_define_const_str(is_checked, "is_checked", 3623625615u, 0, 10, &be_const_str_lv_imgbtn); -be_define_const_str(lv_imgbtn, "lv_imgbtn", 2402844429u, 0, 9, NULL); -be_define_const_str(PZEM0XX_TX, "PZEM0XX_TX", 944775704u, 0, 10, NULL); -be_define_const_str(bus, "bus", 1607822841u, 0, 3, &be_const_str_rand); -be_define_const_str(rand, "rand", 2711325910u, 0, 4, NULL); -be_define_const_str(BS814_DAT, "BS814_DAT", 3620403837u, 0, 9, NULL); -be_define_const_str(STYLE_VALUE_OFS_X, "STYLE_VALUE_OFS_X", 1358079798u, 0, 17, &be_const_str_get_nearest_index_from_coord); -be_define_const_str(get_nearest_index_from_coord, "get_nearest_index_from_coord", 847963620u, 0, 28, NULL); -be_define_const_str(OPA_TRANSP, "OPA_TRANSP", 2652293196u, 0, 10, &be_const_str_TXT_CMD_STATE_IN); -be_define_const_str(TXT_CMD_STATE_IN, "TXT_CMD_STATE_IN", 2162626840u, 0, 16, &be_const_str_lv_font); -be_define_const_str(lv_font, "lv_font", 1550958453u, 0, 7, NULL); -be_define_const_str(set_knob_colored, "set_knob_colored", 2285165409u, 0, 16, NULL); -be_define_const_str(PAGE_EDGE_LEFT, "PAGE_EDGE_LEFT", 4240364242u, 0, 14, &be_const_str_SYMBOL_EYE_CLOSE); -be_define_const_str(SYMBOL_EYE_CLOSE, "SYMBOL_EYE_CLOSE", 404721792u, 0, 16, &be_const_str_get_style_margin_right); -be_define_const_str(get_style_margin_right, "get_style_margin_right", 2672767757u, 0, 22, NULL); -be_define_const_str(ARC_TYPE_SYMMETRIC, "ARC_TYPE_SYMMETRIC", 3784955220u, 0, 18, &be_const_str_PN532_RXD); -be_define_const_str(PN532_RXD, "PN532_RXD", 1780093022u, 0, 9, &be_const_str_add_protect); -be_define_const_str(add_protect, "add_protect", 175601728u, 0, 11, &be_const_str_list); -be_define_const_str(list, "list", 217798785u, 0, 4, &be_const_str_set_style_local_value_color); -be_define_const_str(set_style_local_value_color, "set_style_local_value_color", 2695342403u, 0, 27, NULL); -be_define_const_str(GESTURE_DIR_BOTTOM, "GESTURE_DIR_BOTTOM", 336208834u, 0, 18, &be_const_str_SM16716_SEL); -be_define_const_str(SM16716_SEL, "SM16716_SEL", 142377379u, 0, 11, &be_const_str_resp_cmnd_str); -be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, &be_const_str_set_style_local_outline_blend_mode); -be_define_const_str(set_style_local_outline_blend_mode, "set_style_local_outline_blend_mode", 3321200446u, 0, 34, NULL); -be_define_const_str(TASMOTACLIENT_RST_INV, "TASMOTACLIENT_RST_INV", 2601785365u, 0, 21, &be_const_str_title_get_alignment); -be_define_const_str(title_get_alignment, "title_get_alignment", 3374080476u, 0, 19, NULL); -be_define_const_str(ROT1B_NP, "ROT1B_NP", 3710079736u, 0, 8, &be_const_str_STYLE_SCALE_WIDTH); -be_define_const_str(STYLE_SCALE_WIDTH, "STYLE_SCALE_WIDTH", 3756994736u, 0, 17, &be_const_str_TCP_RX); -be_define_const_str(TCP_RX, "TCP_RX", 3904354751u, 0, 6, &be_const_str___iterator__); -be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, &be_const_str_cursor_up); -be_define_const_str(cursor_up, "cursor_up", 4142217213u, 0, 9, &be_const_str_get_style_clip_corner); -be_define_const_str(get_style_clip_corner, "get_style_clip_corner", 352453368u, 0, 21, &be_const_str_get_style_value_blend_mode); -be_define_const_str(get_style_value_blend_mode, "get_style_value_blend_mode", 1884607703u, 0, 26, NULL); -be_define_const_str(CHART_AXIS_SKIP_LAST_TICK, "CHART_AXIS_SKIP_LAST_TICK", 3664086830u, 0, 25, &be_const_str_del_char_forward); -be_define_const_str(del_char_forward, "del_char_forward", 400381733u, 0, 16, &be_const_str_invalidate_area); -be_define_const_str(invalidate_area, "invalidate_area", 1904223292u, 0, 15, &be_const_str_set_range); -be_define_const_str(set_range, "set_range", 228092793u, 0, 9, NULL); -be_define_const_str(CSE7766_RX, "CSE7766_RX", 1546766819u, 0, 10, &be_const_str_set_pattern_blend_mode); -be_define_const_str(set_pattern_blend_mode, "set_pattern_blend_mode", 4267769432u, 0, 22, &be_const_str_set_style_local_opa_scale); -be_define_const_str(set_style_local_opa_scale, "set_style_local_opa_scale", 2718681341u, 0, 25, NULL); -be_define_const_str(TM1638CLK, "TM1638CLK", 3045182446u, 0, 9, &be_const_str_get_highlighted_dates_num); -be_define_const_str(get_highlighted_dates_num, "get_highlighted_dates_num", 82319360u, 0, 25, &be_const_str_set_auto_fit); -be_define_const_str(set_auto_fit, "set_auto_fit", 1407948747u, 0, 12, NULL); -be_define_const_str(SYMBOL_BATTERY_1, "SYMBOL_BATTERY_1", 629036063u, 0, 16, &be_const_str_split); -be_define_const_str(split, "split", 2276994531u, 0, 5, NULL); -be_define_const_str(SI7021, "SI7021", 864377911u, 0, 6, NULL); -be_define_const_str(remove_style, "remove_style", 3826054475u, 0, 12, &be_const_str_set_light); -be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, NULL); -be_define_const_str(lv_btn, "lv_btn", 1612829968u, 0, 6, &be_const_str_set_margin_left); -be_define_const_str(set_margin_left, "set_margin_left", 4194347462u, 0, 15, NULL); -be_define_const_str(CHART_CURSOR_RIGHT, "CHART_CURSOR_RIGHT", 2464313335u, 0, 18, &be_const_str_get_cell_type); -be_define_const_str(get_cell_type, "get_cell_type", 3348412009u, 0, 13, &be_const_str_run_deferred); -be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, &be_const_str_set_style_local_bg_main_stop); -be_define_const_str(set_style_local_bg_main_stop, "set_style_local_bg_main_stop", 2599091600u, 0, 28, &be_const_str_set_text_opa); -be_define_const_str(set_text_opa, "set_text_opa", 3995853510u, 0, 12, NULL); -be_define_const_str(SYMBOL_SD_CARD, "SYMBOL_SD_CARD", 2542376484u, 0, 14, NULL); -be_define_const_str(set_style_local_bg_grad_color, "set_style_local_bg_grad_color", 3774593842u, 0, 29, NULL); -be_define_const_str(SYMBOL_EYE_OPEN, "SYMBOL_EYE_OPEN", 3449311676u, 0, 15, &be_const_str_set_point_id); -be_define_const_str(set_point_id, "set_point_id", 388814210u, 0, 12, NULL); -be_define_const_str(clear_series, "clear_series", 3353669054u, 0, 12, NULL); -be_define_const_str(LAYOUT_ROW_TOP, "LAYOUT_ROW_TOP", 4030593648u, 0, 14, &be_const_str_set_radius); -be_define_const_str(set_radius, "set_radius", 1362452298u, 0, 10, NULL); -be_define_const_str(OPA_70, "OPA_70", 2109709301u, 0, 6, &be_const_str_wire_scan); -be_define_const_str(wire_scan, "wire_scan", 2671275880u, 0, 9, NULL); -be_define_const_str(ARIRFSEL, "ARIRFSEL", 233874443u, 0, 8, &be_const_str_LABEL_ALIGN_RIGHT); -be_define_const_str(LABEL_ALIGN_RIGHT, "LABEL_ALIGN_RIGHT", 3127457722u, 0, 17, &be_const_str_clean); -be_define_const_str(clean, "clean", 1349386046u, 0, 5, NULL); -be_define_const_str(get_angle, "get_angle", 1113203995u, 0, 9, NULL); -be_define_const_str(OPA_50, "OPA_50", 163902855u, 0, 6, &be_const_str_STYLE_PATTERN_RECOLOR); -be_define_const_str(STYLE_PATTERN_RECOLOR, "STYLE_PATTERN_RECOLOR", 2178713592u, 0, 21, &be_const_str_abs); -be_define_const_str(abs, "abs", 709362235u, 0, 3, NULL); -be_define_const_str(get_pressed_cell, "get_pressed_cell", 2707217039u, 0, 16, &be_const_str_set_style_local_scale_end_border_width); -be_define_const_str(set_style_local_scale_end_border_width, "set_style_local_scale_end_border_width", 3774452254u, 0, 38, NULL); -be_define_const_str(get_scrl_fit_top, "get_scrl_fit_top", 3432048672u, 0, 16, &be_const_str_set_height); -be_define_const_str(set_height, "set_height", 1080207399u, 0, 10, NULL); -be_define_const_str(BAR_TYPE_CUSTOM, "BAR_TYPE_CUSTOM", 895647203u, 0, 15, &be_const_str_LABEL_LONG_DOT); -be_define_const_str(LABEL_LONG_DOT, "LABEL_LONG_DOT", 1312457976u, 0, 14, &be_const_str_SYMBOL_WIFI); -be_define_const_str(SYMBOL_WIFI, "SYMBOL_WIFI", 682141303u, 0, 11, &be_const_str_area_is_visible); -be_define_const_str(area_is_visible, "area_is_visible", 4009415372u, 0, 15, &be_const_str_set_textarea); -be_define_const_str(set_textarea, "set_textarea", 1978833518u, 0, 12, NULL); -be_define_const_str(ADC_BUTTON, "ADC_BUTTON", 3393454690u, 0, 10, &be_const_str_EVENT_KEY); -be_define_const_str(EVENT_KEY, "EVENT_KEY", 2739613983u, 0, 9, &be_const_str_get_style_bg_blend_mode); -be_define_const_str(get_style_bg_blend_mode, "get_style_bg_blend_mode", 69677921u, 0, 23, NULL); -be_define_const_str(get_label, "get_label", 3416266470u, 0, 9, NULL); -be_define_const_str(LAYOUT_ROW_BOTTOM, "LAYOUT_ROW_BOTTOM", 1098190350u, 0, 17, &be_const_str_set_day_names); -be_define_const_str(set_day_names, "set_day_names", 1217780097u, 0, 13, &be_const_str_set_hsv); -be_define_const_str(set_hsv, "set_hsv", 545841289u, 0, 7, &be_const_str_set_style_local_shadow_ofs_y); -be_define_const_str(set_style_local_shadow_ofs_y, "set_style_local_shadow_ofs_y", 1635871223u, 0, 28, NULL); -be_define_const_str(ROLLER_MODE_NORMAL, "ROLLER_MODE_NORMAL", 72783697u, 0, 18, &be_const_str_VL53L0X_XSHUT1); -be_define_const_str(VL53L0X_XSHUT1, "VL53L0X_XSHUT1", 2341134183u, 0, 14, NULL); -be_define_const_str(STYLE_TEXT_FONT, "STYLE_TEXT_FONT", 75931268u, 0, 15, &be_const_str_set_opa_scale); -be_define_const_str(set_opa_scale, "set_opa_scale", 1694654867u, 0, 13, &be_const_str_set_style_local_border_post); -be_define_const_str(set_style_local_border_post, "set_style_local_border_post", 4148896231u, 0, 27, NULL); -be_define_const_str(MAX7219CS, "MAX7219CS", 2593198244u, 0, 9, &be_const_str_delay); -be_define_const_str(delay, "delay", 1322381784u, 0, 5, &be_const_str_init_draw_img_dsc); -be_define_const_str(init_draw_img_dsc, "init_draw_img_dsc", 1278847223u, 0, 17, &be_const_str_sin); -be_define_const_str(sin, "sin", 3761252941u, 0, 3, NULL); -be_define_const_str(CNTR1, "CNTR1", 510376965u, 0, 5, NULL); -be_define_const_str(A4988_STP, "A4988_STP", 1622172049u, 0, 9, &be_const_str_MHZ_RXD); -be_define_const_str(MHZ_RXD, "MHZ_RXD", 328619727u, 0, 7, &be_const_str_WEBCAM_PSRCS); -be_define_const_str(WEBCAM_PSRCS, "WEBCAM_PSRCS", 624464864u, 0, 12, &be_const_str_clean_tab); -be_define_const_str(clean_tab, "clean_tab", 3280421962u, 0, 9, NULL); -be_define_const_str(get_style_image_blend_mode, "get_style_image_blend_mode", 896275u, 0, 26, &be_const_str_set_style_local_shadow_opa); -be_define_const_str(set_style_local_shadow_opa, "set_style_local_shadow_opa", 2192328339u, 0, 26, NULL); -be_define_const_str(TXT_FLAG_NONE, "TXT_FLAG_NONE", 3092237369u, 0, 13, &be_const_str_WEBCAM_HSD); -be_define_const_str(WEBCAM_HSD, "WEBCAM_HSD", 2648502504u, 0, 10, &be_const_str_get_arc_length); -be_define_const_str(get_arc_length, "get_arc_length", 2763412693u, 0, 14, &be_const_str_lv_btnmatrix); -be_define_const_str(lv_btnmatrix, "lv_btnmatrix", 626248489u, 0, 12, NULL); -be_define_const_str(ETH_PHY_MDC, "ETH_PHY_MDC", 1519379581u, 0, 11, &be_const_str_set_style_local_transition_prop_6); -be_define_const_str(set_style_local_transition_prop_6, "set_style_local_transition_prop_6", 2535204486u, 0, 33, NULL); -be_define_const_str(clean_style_list, "clean_style_list", 1108481805u, 0, 16, NULL); -be_define_const_str(INPUT_PULLUP, "INPUT_PULLUP", 2912931654u, 0, 12, &be_const_str_TEXT_DECOR_STRIKETHROUGH); -be_define_const_str(TEXT_DECOR_STRIKETHROUGH, "TEXT_DECOR_STRIKETHROUGH", 2875711852u, 0, 24, NULL); -be_define_const_str(get_width_grid, "get_width_grid", 2821365517u, 0, 14, NULL); -be_define_const_str(set_style_local_border_side, "set_style_local_border_side", 2699338750u, 0, 27, &be_const_str_set_text_decor); -be_define_const_str(set_text_decor, "set_text_decor", 768023065u, 0, 14, NULL); -be_define_const_str(read, "read", 3470762949u, 0, 4, &be_const_str_set_style_local_pad_left); -be_define_const_str(set_style_local_pad_left, "set_style_local_pad_left", 279437461u, 0, 24, NULL); -be_define_const_str(SLIDER_TYPE_SYMMETRICAL, "SLIDER_TYPE_SYMMETRICAL", 768283232u, 0, 23, &be_const_str_get_scale_angle); -be_define_const_str(get_scale_angle, "get_scale_angle", 845147062u, 0, 15, NULL); -be_define_const_str(BOILER_OT_RX, "BOILER_OT_RX", 603647409u, 0, 12, &be_const_str_OBJ_PART_MAIN); -be_define_const_str(OBJ_PART_MAIN, "OBJ_PART_MAIN", 658062838u, 0, 13, &be_const_str_STYLE_SCALE_GRAD_COLOR); -be_define_const_str(STYLE_SCALE_GRAD_COLOR, "STYLE_SCALE_GRAD_COLOR", 3981239948u, 0, 22, &be_const_str_lv_label); -be_define_const_str(lv_label, "lv_label", 4199664246u, 0, 8, NULL); -be_define_const_str(button_pressed, "button_pressed", 1694209616u, 0, 14, NULL); -be_define_const_str(get_scrl_width, "get_scrl_width", 1498509239u, 0, 14, &be_const_str_refresh_style); -be_define_const_str(refresh_style, "refresh_style", 3029800338u, 0, 13, &be_const_str_set_value_line_space); -be_define_const_str(set_value_line_space, "set_value_line_space", 355798025u, 0, 20, NULL); -be_define_const_str(STYLE_TRANSFORM_WIDTH, "STYLE_TRANSFORM_WIDTH", 2096880210u, 0, 21, NULL); -be_define_const_str(get_style_pattern_blend_mode, "get_style_pattern_blend_mode", 2548894294u, 0, 28, NULL); -be_define_const_str(BLEND_MODE_ADDITIVE, "BLEND_MODE_ADDITIVE", 3732684283u, 0, 19, &be_const_str_compile); -be_define_const_str(compile, "compile", 1000265118u, 0, 7, NULL); -be_define_const_str(set_style_local_margin_bottom, "set_style_local_margin_bottom", 3687231326u, 0, 29, NULL); -be_define_const_str(OPA_20, "OPA_20", 4289961128u, 0, 6, &be_const_str_SWT1); -be_define_const_str(SWT1, "SWT1", 805224112u, 0, 4, &be_const_str_get_saturation); -be_define_const_str(get_saturation, "get_saturation", 3458845696u, 0, 14, &be_const_str_set_scroll_propagation); -be_define_const_str(set_scroll_propagation, "set_scroll_propagation", 2960260372u, 0, 22, NULL); -be_define_const_str(get, "get", 1410115415u, 0, 3, NULL); -be_define_const_str(blur_ver, "blur_ver", 2584500226u, 0, 8, NULL); -be_define_const_str(SDCARD_CS, "SDCARD_CS", 3348952003u, 0, 9, &be_const_str_set_style_local_transition_delay); -be_define_const_str(set_style_local_transition_delay, "set_style_local_transition_delay", 958588397u, 0, 32, NULL); -be_define_const_str(P9813_CLK, "P9813_CLK", 2455391001u, 0, 9, &be_const_str_set_scale_width); -be_define_const_str(set_scale_width, "set_scale_width", 2442490229u, 0, 15, NULL); -be_define_const_str(ALIGN_OUT_LEFT_MID, "ALIGN_OUT_LEFT_MID", 4283557662u, 0, 18, &be_const_str_PZEM017_RX); -be_define_const_str(PZEM017_RX, "PZEM017_RX", 3227495894u, 0, 10, &be_const_str_SM2135_DAT); -be_define_const_str(SM2135_DAT, "SM2135_DAT", 2882726942u, 0, 10, &be_const_str_get_style_transition_delay); -be_define_const_str(get_style_transition_delay, "get_style_transition_delay", 1536173465u, 0, 26, &be_const_str_reverse); -be_define_const_str(reverse, "reverse", 558918661u, 0, 7, NULL); -be_define_const_str(SYMBOL_TRASH, "SYMBOL_TRASH", 3169100368u, 0, 12, NULL); -be_define_const_str(BS814_CLK, "BS814_CLK", 3002713336u, 0, 9, &be_const_str_save_before_restart); -be_define_const_str(save_before_restart, "save_before_restart", 1253239338u, 0, 19, NULL); -be_define_const_str(DDSU666_RX, "DDSU666_RX", 1812507936u, 0, 10, &be_const_str_STATE_PRESSED); -be_define_const_str(STATE_PRESSED, "STATE_PRESSED", 2471016259u, 0, 13, &be_const_str_TEMPL_STYLE_Y); -be_define_const_str(TEMPL_STYLE_Y, "TEMPL_STYLE_Y", 1997423835u, 0, 13, NULL); -be_define_const_str(CSE7761_TX, "CSE7761_TX", 3354719142u, 0, 10, &be_const_str_SOLAXX1_RX); -be_define_const_str(SOLAXX1_RX, "SOLAXX1_RX", 971867054u, 0, 10, NULL); -be_define_const_str(lv_linemeter, "lv_linemeter", 1413069363u, 0, 12, NULL); -be_define_const_str(set_style_local_image_opa, "set_style_local_image_opa", 3630403626u, 0, 25, NULL); -be_define_const_str(BORDER_SIDE_BOTTOM, "BORDER_SIDE_BOTTOM", 1006865647u, 0, 18, NULL); -be_define_const_str(get_recolor, "get_recolor", 4128330436u, 0, 11, &be_const_str_set_line_color); -be_define_const_str(set_line_color, "set_line_color", 2944146362u, 0, 14, NULL); -be_define_const_str(PAGE_EDGE_BOTTOM, "PAGE_EDGE_BOTTOM", 3735543556u, 0, 16, &be_const_str_get_prev_btn); -be_define_const_str(get_prev_btn, "get_prev_btn", 4150536586u, 0, 12, &be_const_str_lv_cpicker); -be_define_const_str(lv_cpicker, "lv_cpicker", 1935129251u, 0, 10, &be_const_str_set_style_local_shadow_ofs_x); -be_define_const_str(set_style_local_shadow_ofs_x, "set_style_local_shadow_ofs_x", 1619093604u, 0, 28, NULL); -be_define_const_str(ALIGN_IN_BOTTOM_LEFT, "ALIGN_IN_BOTTOM_LEFT", 3951704846u, 0, 20, &be_const_str_ROT1A); -be_define_const_str(ROT1A, "ROT1A", 759599716u, 0, 5, NULL); -be_define_const_str(FS_MODE_WR, "FS_MODE_WR", 2839601832u, 0, 10, &be_const_str_IEM3000_RX); -be_define_const_str(IEM3000_RX, "IEM3000_RX", 1117811096u, 0, 10, &be_const_str_add_obj); -be_define_const_str(add_obj, "add_obj", 3846256134u, 0, 7, NULL); -be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_get_style_bg_grad_stop); -be_define_const_str(get_style_bg_grad_stop, "get_style_bg_grad_stop", 1023453943u, 0, 22, &be_const_str_get_style_pad_left); -be_define_const_str(get_style_pad_left, "get_style_pad_left", 2843013833u, 0, 18, &be_const_str_set_height_fit); -be_define_const_str(set_height_fit, "set_height_fit", 4033083607u, 0, 14, &be_const_str_set_image_blend_mode); -be_define_const_str(set_image_blend_mode, "set_image_blend_mode", 2083195553u, 0, 20, NULL); -be_define_const_str(STYLE_TEXT_LINE_SPACE, "STYLE_TEXT_LINE_SPACE", 4185649482u, 0, 21, &be_const_str_codedump); -be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, &be_const_str_set_image_recolor); -be_define_const_str(set_image_recolor, "set_image_recolor", 271208598u, 0, 17, NULL); -be_define_const_str(MAROON, "MAROON", 770976181u, 0, 6, &be_const_str_STYLE_BG_GRAD_COLOR); -be_define_const_str(STYLE_BG_GRAD_COLOR, "STYLE_BG_GRAD_COLOR", 444266945u, 0, 19, &be_const_str_get_btn_index); -be_define_const_str(get_btn_index, "get_btn_index", 1289059379u, 0, 13, &be_const_str_get_style_image_recolor); -be_define_const_str(get_style_image_recolor, "get_style_image_recolor", 2369811232u, 0, 23, &be_const_str_get_style_pad_right); -be_define_const_str(get_style_pad_right, "get_style_pad_right", 3150287466u, 0, 19, &be_const_str_set_focused_btn); -be_define_const_str(set_focused_btn, "set_focused_btn", 4211166978u, 0, 15, NULL); -be_define_const_str(BAR_TYPE_SYMMETRICAL, "BAR_TYPE_SYMMETRICAL", 1357819710u, 0, 20, &be_const_str_set_text_color); -be_define_const_str(set_text_color, "set_text_color", 2780604091u, 0, 14, NULL); -be_define_const_str(SYMBOL_OK, "SYMBOL_OK", 4033162940u, 0, 9, NULL); -be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, NULL); -be_define_const_str(EPAPER29_CS, "EPAPER29_CS", 3916373594u, 0, 11, &be_const_str_set_style_local_transition_prop_5); -be_define_const_str(set_style_local_transition_prop_5, "set_style_local_transition_prop_5", 2518426867u, 0, 33, NULL); -be_define_const_str(get_scrl_height, "get_scrl_height", 1933731194u, 0, 15, &be_const_str_set_value_ofs_x); -be_define_const_str(set_value_ofs_x, "set_value_ofs_x", 112450803u, 0, 15, NULL); -be_define_const_str(LABEL_LONG_BREAK, "LABEL_LONG_BREAK", 3669129840u, 0, 16, NULL); -be_define_const_str(STYLE_TRANSFORM_ZOOM, "STYLE_TRANSFORM_ZOOM", 224871941u, 0, 20, &be_const_str_lv_table); -be_define_const_str(lv_table, "lv_table", 1675691020u, 0, 8, &be_const_str_set_auto_realign); -be_define_const_str(set_auto_realign, "set_auto_realign", 3175723934u, 0, 16, NULL); -be_define_const_str(add_btn, "add_btn", 1053483819u, 0, 7, NULL); -be_define_const_str(set_palette, "set_palette", 4093380483u, 0, 11, &be_const_str_set_style_local_image_recolor); -be_define_const_str(set_style_local_image_recolor, "set_style_local_image_recolor", 43538644u, 0, 29, NULL); -be_define_const_str(get_needle_img, "get_needle_img", 477560399u, 0, 14, NULL); -be_define_const_str(lv_list, "lv_list", 2876551248u, 0, 7, NULL); -be_define_const_str(draw_rect, "draw_rect", 1619240338u, 0, 9, NULL); -be_define_const_str(ADC_JOY, "ADC_JOY", 1116943612u, 0, 7, NULL); -be_define_const_str(set_text_letter_space, "set_text_letter_space", 4274937273u, 0, 21, NULL); -be_define_const_str(IRSEND, "IRSEND", 184848336u, 0, 6, &be_const_str_set_pattern_image); -be_define_const_str(set_pattern_image, "set_pattern_image", 1204394880u, 0, 17, NULL); -be_define_const_str(STYLE_SHADOW_SPREAD, "STYLE_SHADOW_SPREAD", 3685821355u, 0, 19, NULL); -be_define_const_str(PULLDOWN, "PULLDOWN", 1853074086u, 0, 8, &be_const_str__read); -be_define_const_str(_read, "_read", 346717030u, 0, 5, NULL); -be_define_const_str(draw_img, "draw_img", 3217263339u, 0, 8, NULL); -be_define_const_str(STYLE_LINE_DASH_GAP, "STYLE_LINE_DASH_GAP", 1823312065u, 0, 19, &be_const_str_get_gesture_parent); -be_define_const_str(get_gesture_parent, "get_gesture_parent", 2610282188u, 0, 18, NULL); -be_define_const_str(get_parent_event, "get_parent_event", 102705295u, 0, 16, NULL); -be_define_const_str(TM1638DIO, "TM1638DIO", 1408212414u, 0, 9, &be_const_str_get_cursor_blink_time); -be_define_const_str(get_cursor_blink_time, "get_cursor_blink_time", 1960576829u, 0, 21, &be_const_str_set_cursor_manage); -be_define_const_str(set_cursor_manage, "set_cursor_manage", 2587391084u, 0, 17, &be_const_str_set_timer); -be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, NULL); -be_define_const_str(LIME, "LIME", 87366652u, 0, 4, NULL); -be_define_const_str(FS_RES_LOCKED, "FS_RES_LOCKED", 3948147866u, 0, 13, &be_const_str_set_secondary_y_tick_texts); -be_define_const_str(set_secondary_y_tick_texts, "set_secondary_y_tick_texts", 2165523729u, 0, 26, &be_const_str_set_text_sel_start); -be_define_const_str(set_text_sel_start, "set_text_sel_start", 886455347u, 0, 18, NULL); -be_define_const_str(TEMPL_STYLE_X, "TEMPL_STYLE_X", 1980646216u, 0, 13, NULL); -be_define_const_str(get_scrl_fit_left, "get_scrl_fit_left", 1227937692u, 0, 17, NULL); -be_define_const_str(EVENT_LONG_PRESSED, "EVENT_LONG_PRESSED", 1806426939u, 0, 18, &be_const_str_HPMA_RX); -be_define_const_str(HPMA_RX, "HPMA_RX", 3462528998u, 0, 7, NULL); -be_define_const_str(ADC_LIGHT, "ADC_LIGHT", 3982461502u, 0, 9, &be_const_str_every_100ms); -be_define_const_str(every_100ms, "every_100ms", 1546407804u, 0, 11, NULL); -be_define_const_str(SYMBOL_BATTERY_EMPTY, "SYMBOL_BATTERY_EMPTY", 3945064277u, 0, 20, NULL); -be_define_const_str(HX711_DAT, "HX711_DAT", 2935118250u, 0, 9, &be_const_str_get_tab_count); -be_define_const_str(get_tab_count, "get_tab_count", 218245863u, 0, 13, &be_const_str_set_style_local_text_letter_space); -be_define_const_str(set_style_local_text_letter_space, "set_style_local_text_letter_space", 2313398111u, 0, 33, NULL); -be_define_const_str(get_style_border_color, "get_style_border_color", 4173187188u, 0, 22, &be_const_str_set_month_names); -be_define_const_str(set_month_names, "set_month_names", 158482125u, 0, 15, NULL); -be_define_const_str(STYLE_SHADOW_BLEND_MODE, "STYLE_SHADOW_BLEND_MODE", 4197731411u, 0, 23, &be_const_str_setitem); +be_define_const_str(opt_neq, "!=", 2428715011u, 0, 2, &be_const_str_BS814_CLK); +be_define_const_str(BS814_CLK, "BS814_CLK", 3002713336u, 0, 9, &be_const_str_load_freetype_font); +be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, NULL); +be_define_const_str(LOW, "LOW", 3526092385u, 0, 3, NULL); +be_define_const_str(MP3_DFR562, "MP3_DFR562", 2859952977u, 0, 10, &be_const_str_SDM72_TX); +be_define_const_str(SDM72_TX, "SDM72_TX", 2042143269u, 0, 8, &be_const_str_SENSOR_END); +be_define_const_str(SENSOR_END, "SENSOR_END", 3512542657u, 0, 10, NULL); +be_define_const_str(opt_add, "+", 772578730u, 0, 1, &be_const_str_DEEPSLEEP); +be_define_const_str(DEEPSLEEP, "DEEPSLEEP", 189922226u, 0, 9, &be_const_str_SPI_MISO); +be_define_const_str(SPI_MISO, "SPI_MISO", 150818010u, 0, 8, &be_const_str_def); +be_define_const_str(def, "def", 3310976652u, 55, 3, NULL); +be_define_const_str(ADC_BUTTON, "ADC_BUTTON", 3393454690u, 0, 10, &be_const_str_MHZ_TXD); +be_define_const_str(MHZ_TXD, "MHZ_TXD", 3310158233u, 0, 7, &be_const_str_RFRECV); +be_define_const_str(RFRECV, "RFRECV", 354742801u, 0, 6, &be_const_str_WINDMETER_SPEED); +be_define_const_str(WINDMETER_SPEED, "WINDMETER_SPEED", 1980822204u, 0, 15, NULL); +be_define_const_str(SYMBOL_EJECT, "SYMBOL_EJECT", 873760647u, 0, 12, NULL); +be_define_const_str(SDM630_RX, "SDM630_RX", 1971606309u, 0, 9, &be_const_str_SYMBOL_POWER); +be_define_const_str(SYMBOL_POWER, "SYMBOL_POWER", 1125993627u, 0, 12, &be_const_str_lv_btnmatrix); +be_define_const_str(lv_btnmatrix, "lv_btnmatrix", 626248489u, 0, 12, &be_const_str_scr_act); +be_define_const_str(scr_act, "scr_act", 2080211456u, 0, 7, &be_const_str_setitem); be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, NULL); -be_define_const_str(BTN_STATE_CHECKED_RELEASED, "BTN_STATE_CHECKED_RELEASED", 571978995u, 0, 26, &be_const_str_ROT1A_NP); -be_define_const_str(ROT1A_NP, "ROT1A_NP", 2322706903u, 0, 8, &be_const_str_TFMINIPLUS_RX); -be_define_const_str(TFMINIPLUS_RX, "TFMINIPLUS_RX", 1522203935u, 0, 13, NULL); -be_define_const_str(CHART_PART_BG, "CHART_PART_BG", 990069269u, 0, 13, &be_const_str_publish); -be_define_const_str(publish, "publish", 264247304u, 0, 7, NULL); -be_define_const_str(ARC_PART_BG, "ARC_PART_BG", 3149008005u, 0, 11, &be_const_str_LED1); -be_define_const_str(LED1, "LED1", 21005825u, 0, 4, &be_const_str_RA8876_CS); -be_define_const_str(RA8876_CS, "RA8876_CS", 2529944108u, 0, 9, &be_const_str_TASMOTACLIENT_TXD); -be_define_const_str(TASMOTACLIENT_TXD, "TASMOTACLIENT_TXD", 1386193940u, 0, 17, NULL); -be_define_const_str(BORDER_SIDE_RIGHT, "BORDER_SIDE_RIGHT", 1842095998u, 0, 17, NULL); -be_define_const_str(get_hidden, "get_hidden", 2608152268u, 0, 10, &be_const_str_set_arc_length); -be_define_const_str(set_arc_length, "set_arc_length", 2972977809u, 0, 14, &be_const_str_set_border_side); -be_define_const_str(set_border_side, "set_border_side", 466446692u, 0, 15, NULL); -be_define_const_str(CHART_TYPE_LINE, "CHART_TYPE_LINE", 1459459819u, 0, 15, &be_const_str_SPI); -be_define_const_str(SPI, "SPI", 1746663213u, 0, 3, &be_const_str_get_style_line_opa); -be_define_const_str(get_style_line_opa, "get_style_line_opa", 3653868853u, 0, 18, &be_const_str_set_style_local_transition_prop_4); -be_define_const_str(set_style_local_transition_prop_4, "set_style_local_transition_prop_4", 2501649248u, 0, 33, NULL); -be_define_const_str(GESTURE_DIR_TOP, "GESTURE_DIR_TOP", 84881028u, 0, 15, &be_const_str_set_value_ofs_y); -be_define_const_str(set_value_ofs_y, "set_value_ofs_y", 95673184u, 0, 15, NULL); -be_define_const_str(opt_connect, "..", 2748622605u, 0, 2, &be_const_str_BTNMATRIX_CTRL_CHECK_STATE); -be_define_const_str(BTNMATRIX_CTRL_CHECK_STATE, "BTNMATRIX_CTRL_CHECK_STATE", 377731u, 0, 26, NULL); -be_define_const_str(EVENT_LEAVE, "EVENT_LEAVE", 2218217823u, 0, 11, &be_const_str_SDM72_TX); -be_define_const_str(SDM72_TX, "SDM72_TX", 2042143269u, 0, 8, &be_const_str_fill_bg); -be_define_const_str(fill_bg, "fill_bg", 1581152214u, 0, 7, &be_const_str_set_style_local_line_dash_width); -be_define_const_str(set_style_local_line_dash_width, "set_style_local_line_dash_width", 3177951154u, 0, 31, &be_const_str_set_tab_act); -be_define_const_str(set_tab_act, "set_tab_act", 2505737680u, 0, 11, NULL); -be_define_const_str(CSE7761_RX, "CSE7761_RX", 65423248u, 0, 10, &be_const_str_lv_canvas); -be_define_const_str(lv_canvas, "lv_canvas", 142865412u, 0, 9, &be_const_str_srand); -be_define_const_str(srand, "srand", 465518633u, 0, 5, NULL); -be_define_const_str(add_text, "add_text", 2433225858u, 0, 8, &be_const_str_get_antialias); -be_define_const_str(get_antialias, "get_antialias", 220729812u, 0, 13, &be_const_str_remove_series); -be_define_const_str(remove_series, "remove_series", 2007033791u, 0, 13, &be_const_str_set_pad_inner); -be_define_const_str(set_pad_inner, "set_pad_inner", 1662755314u, 0, 13, NULL); -be_define_const_str(get_step, "get_step", 2497148826u, 0, 8, &be_const_str_set_state); -be_define_const_str(set_state, "set_state", 905808233u, 0, 9, NULL); -be_define_const_str(LABEL_LONG_SROLL, "LABEL_LONG_SROLL", 3854826277u, 0, 16, &be_const_str_get_drag_dir); -be_define_const_str(get_drag_dir, "get_drag_dir", 3921105230u, 0, 12, NULL); -be_define_const_str(BTN_STATE_CHECKED_PRESSED, "BTN_STATE_CHECKED_PRESSED", 2837756846u, 0, 25, &be_const_str_INDEV_STATE_PR); -be_define_const_str(INDEV_STATE_PR, "INDEV_STATE_PR", 3567716714u, 0, 14, NULL); -be_define_const_str(classname, "classname", 1998589948u, 0, 9, &be_const_str_get_btn_selected); -be_define_const_str(get_btn_selected, "get_btn_selected", 1715353004u, 0, 16, &be_const_str_set_drag); -be_define_const_str(set_drag, "set_drag", 2586329126u, 0, 8, &be_const_str_set_mirror); -be_define_const_str(set_mirror, "set_mirror", 1608447367u, 0, 10, NULL); -be_define_const_str(CHART_CURSOR_DOWN, "CHART_CURSOR_DOWN", 790177263u, 0, 17, &be_const_str_WEBCAM_HREF); -be_define_const_str(WEBCAM_HREF, "WEBCAM_HREF", 3161890024u, 0, 11, &be_const_str_get_col_cnt); -be_define_const_str(get_col_cnt, "get_col_cnt", 2182323590u, 0, 11, &be_const_str_set_value_blend_mode); -be_define_const_str(set_value_blend_mode, "set_value_blend_mode", 86539269u, 0, 20, NULL); -be_define_const_str(SPINNER_DIR_FORWARD, "SPINNER_DIR_FORWARD", 660203948u, 0, 19, &be_const_str_set_style_local_value_font); -be_define_const_str(set_style_local_value_font, "set_style_local_value_font", 117758217u, 0, 26, &be_const_str_set_transform_zoom); -be_define_const_str(set_transform_zoom, "set_transform_zoom", 140970906u, 0, 18, NULL); -be_define_const_str(set_antialias, "set_antialias", 1998560096u, 0, 13, &be_const_str_set_width_fit); -be_define_const_str(set_width_fit, "set_width_fit", 703845988u, 0, 13, NULL); -be_define_const_str(ARC_TYPE_NORMAL, "ARC_TYPE_NORMAL", 1554666574u, 0, 15, &be_const_str_ETH_PHY_POWER); -be_define_const_str(ETH_PHY_POWER, "ETH_PHY_POWER", 487529454u, 0, 13, &be_const_str_SCROLLBAR_MODE_OFF); -be_define_const_str(SCROLLBAR_MODE_OFF, "SCROLLBAR_MODE_OFF", 3547490383u, 0, 18, &be_const_str_set_scrollbar_mode); -be_define_const_str(set_scrollbar_mode, "set_scrollbar_mode", 3373216512u, 0, 18, &be_const_str_set_shadow_spread); -be_define_const_str(set_shadow_spread, "set_shadow_spread", 3535503174u, 0, 17, NULL); -be_define_const_str(set_options, "set_options", 2975436170u, 0, 11, NULL); -be_define_const_str(ALIGN_OUT_BOTTOM_MID, "ALIGN_OUT_BOTTOM_MID", 2853556972u, 0, 20, NULL); -be_define_const_str(SDS0X1_TX, "SDS0X1_TX", 165045983u, 0, 9, &be_const_str_set_outline_width); -be_define_const_str(set_outline_width, "set_outline_width", 2428704969u, 0, 17, NULL); -be_define_const_str(SCROLLBAR_MODE_DRAG, "SCROLLBAR_MODE_DRAG", 2145885996u, 0, 19, &be_const_str_get_selected); -be_define_const_str(get_selected, "get_selected", 2280142225u, 0, 12, NULL); -be_define_const_str(CPICKER_PART_KNOB, "CPICKER_PART_KNOB", 4094649797u, 0, 17, &be_const_str_TABVIEW_TAB_POS_NONE); -be_define_const_str(TABVIEW_TAB_POS_NONE, "TABVIEW_TAB_POS_NONE", 3094416879u, 0, 20, &be_const_str_except); -be_define_const_str(except, "except", 950914032u, 69, 6, NULL); -be_define_const_str(OPA_90, "OPA_90", 27710427u, 0, 6, &be_const_str_OUTPUT_HI); -be_define_const_str(OUTPUT_HI, "OUTPUT_HI", 3153592902u, 0, 9, &be_const_str_TELEINFO_RX); -be_define_const_str(TELEINFO_RX, "TELEINFO_RX", 1195717356u, 0, 11, &be_const_str_get_anim_speed); -be_define_const_str(get_anim_speed, "get_anim_speed", 1731518217u, 0, 14, &be_const_str_set_style_local_outline_pad); -be_define_const_str(set_style_local_outline_pad, "set_style_local_outline_pad", 3480414734u, 0, 27, &be_const_str_str); +be_define_const_str(ARIRFRCV, "ARIRFRCV", 1120816444u, 0, 8, &be_const_str_lv_label); +be_define_const_str(lv_label, "lv_label", 4199664246u, 0, 8, &be_const_str_module); +be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_traceback); +be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, &be_const_str_while); +be_define_const_str(while, "while", 231090382u, 53, 5, NULL); +be_define_const_str(SYMBOL_SD_CARD, "SYMBOL_SD_CARD", 2542376484u, 0, 14, &be_const_str_lv_roller); +be_define_const_str(lv_roller, "lv_roller", 661902064u, 0, 9, NULL); +be_define_const_str(HRE_CLOCK, "HRE_CLOCK", 2870559111u, 0, 9, NULL); +be_define_const_str(LEDLNK_INV, "LEDLNK_INV", 3559015101u, 0, 10, &be_const_str_P9813_DAT); +be_define_const_str(P9813_DAT, "P9813_DAT", 778577052u, 0, 9, &be_const_str_rtc); +be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, NULL); +be_define_const_str(deg, "deg", 3327754271u, 0, 3, &be_const_str_lv_spinner); +be_define_const_str(lv_spinner, "lv_spinner", 3361501901u, 0, 10, NULL); +be_define_const_str(HM10_RX, "HM10_RX", 515085922u, 0, 7, &be_const_str_MIEL_HVAC_TX); +be_define_const_str(MIEL_HVAC_TX, "MIEL_HVAC_TX", 567403014u, 0, 12, &be_const_str_gamma8); +be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, NULL); +be_define_const_str(SYMBOL_MINUS, "SYMBOL_MINUS", 1806749158u, 0, 12, NULL); +be_define_const_str(NRF24_DC, "NRF24_DC", 688921313u, 0, 8, NULL); +be_define_const_str(IBEACON_RX, "IBEACON_RX", 2466155575u, 0, 10, &be_const_str_REL1_INV); +be_define_const_str(REL1_INV, "REL1_INV", 3733155371u, 0, 8, &be_const_str_SYMBOL_OK); +be_define_const_str(SYMBOL_OK, "SYMBOL_OK", 4033162940u, 0, 9, NULL); +be_define_const_str(EPAPER29_CS, "EPAPER29_CS", 3916373594u, 0, 11, NULL); +be_define_const_str(ROT1B, "ROT1B", 809932573u, 0, 5, &be_const_str_raise); +be_define_const_str(raise, "raise", 1593437475u, 70, 5, NULL); +be_define_const_str(IRRECV, "IRRECV", 1743648982u, 0, 6, &be_const_str_lv_indev); +be_define_const_str(lv_indev, "lv_indev", 225602374u, 0, 8, NULL); +be_define_const_str(pop, "pop", 1362321360u, 0, 3, NULL); +be_define_const_str(lv_linemeter, "lv_linemeter", 1413069363u, 0, 12, &be_const_str_upper); +be_define_const_str(upper, "upper", 176974407u, 0, 5, NULL); +be_define_const_str(lv_btn, "lv_btn", 1612829968u, 0, 6, NULL); +be_define_const_str(SYMBOL_USB, "SYMBOL_USB", 1962656552u, 0, 10, &be_const_str_break); +be_define_const_str(break, "break", 3378807160u, 58, 5, NULL); +be_define_const_str(SYMBOL_BELL, "SYMBOL_BELL", 1736196487u, 0, 11, &be_const_str_SYMBOL_DOWNLOAD); +be_define_const_str(SYMBOL_DOWNLOAD, "SYMBOL_DOWNLOAD", 2607324090u, 0, 15, &be_const_str_TCP_RX); +be_define_const_str(TCP_RX, "TCP_RX", 3904354751u, 0, 6, NULL); +be_define_const_str(CHANGE, "CHANGE", 4280911421u, 0, 6, &be_const_str_RISING); +be_define_const_str(RISING, "RISING", 1256404539u, 0, 6, NULL); +be_define_const_str(RA8876_CS, "RA8876_CS", 2529944108u, 0, 9, NULL); +be_define_const_str(lv_page, "lv_page", 2373170067u, 0, 7, NULL); +be_define_const_str(lv_group, "lv_group", 3852039019u, 0, 8, NULL); +be_define_const_str(LEDLNK, "LEDLNK", 2862810701u, 0, 6, NULL); +be_define_const_str(RFSEND, "RFSEND", 1862630731u, 0, 6, &be_const_str_ROT1B_NP); +be_define_const_str(ROT1B_NP, "ROT1B_NP", 3710079736u, 0, 8, &be_const_str_SYMBOL_BACKSPACE); +be_define_const_str(SYMBOL_BACKSPACE, "SYMBOL_BACKSPACE", 1997168681u, 0, 16, &be_const_str_TCP_TX); +be_define_const_str(TCP_TX, "TCP_TX", 2762594089u, 0, 6, &be_const_str_lv_textarea); +be_define_const_str(lv_textarea, "lv_textarea", 2864635074u, 0, 11, NULL); +be_define_const_str(SYMBOL_EDIT, "SYMBOL_EDIT", 1396182822u, 0, 11, &be_const_str_WEBCAM_SIOD); +be_define_const_str(WEBCAM_SIOD, "WEBCAM_SIOD", 302703242u, 0, 11, NULL); +be_define_const_str(set, "set", 3324446467u, 0, 3, NULL); +be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, &be_const_str_run_deferred); +be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, NULL); +be_define_const_str(ADC_JOY, "ADC_JOY", 1116943612u, 0, 7, &be_const_str_sin); +be_define_const_str(sin, "sin", 3761252941u, 0, 3, NULL); +be_define_const_str(NEOPOOL_TX, "NEOPOOL_TX", 2924925804u, 0, 10, NULL); +be_define_const_str(DCKI, "DCKI", 3846847480u, 0, 4, &be_const_str_I2C_SCL); +be_define_const_str(I2C_SCL, "I2C_SCL", 164217098u, 0, 7, &be_const_str_i2c_enabled); +be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, NULL); +be_define_const_str(FALLING, "FALLING", 2851701064u, 0, 7, NULL); +be_define_const_str(PZEM004_RX, "PZEM004_RX", 3411153194u, 0, 10, &be_const_str_REL1); +be_define_const_str(REL1, "REL1", 3142397887u, 0, 4, &be_const_str_exec_rules); +be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, NULL); +be_define_const_str(SM16716_CLK, "SM16716_CLK", 3037641483u, 0, 11, NULL); +be_define_const_str(DDSU666_RX, "DDSU666_RX", 1812507936u, 0, 10, &be_const_str_TELEINFO_RX); +be_define_const_str(TELEINFO_RX, "TELEINFO_RX", 1195717356u, 0, 11, NULL); +be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, &be_const_str_gc); +be_define_const_str(gc, "gc", 1042313471u, 0, 2, &be_const_str_open); +be_define_const_str(open, "open", 3546203337u, 0, 4, NULL); +be_define_const_str(BL0940_RX, "BL0940_RX", 2908993179u, 0, 9, NULL); +be_define_const_str(OUTPUT_HI, "OUTPUT_HI", 3153592902u, 0, 9, &be_const_str_RF_SENSOR); +be_define_const_str(RF_SENSOR, "RF_SENSOR", 2289628100u, 0, 9, &be_const_str_lv_dropdown); +be_define_const_str(lv_dropdown, "lv_dropdown", 2797165301u, 0, 11, NULL); +be_define_const_str(IRSEND, "IRSEND", 184848336u, 0, 6, &be_const_str_ROT1A_NP); +be_define_const_str(ROT1A_NP, "ROT1A_NP", 2322706903u, 0, 8, &be_const_str_str); be_define_const_str(str, "str", 3259748752u, 0, 3, NULL); -be_define_const_str(STYLE_SHADOW_COLOR, "STYLE_SHADOW_COLOR", 368908723u, 0, 18, &be_const_str_montserrat_font); -be_define_const_str(montserrat_font, "montserrat_font", 1819065874u, 0, 15, NULL); -be_define_const_str(MAGENTA, "MAGENTA", 1444046984u, 0, 7, NULL); -be_define_const_str(set_image_recolor_opa, "set_image_recolor_opa", 558003471u, 0, 21, &be_const_str_set_text_line_space); -be_define_const_str(set_text_line_space, "set_text_line_space", 3186151063u, 0, 19, NULL); -be_define_const_str(FS_RES_FS_ERR, "FS_RES_FS_ERR", 3587821087u, 0, 13, &be_const_str_SYMBOL_CLOSE); -be_define_const_str(SYMBOL_CLOSE, "SYMBOL_CLOSE", 2654402806u, 0, 12, &be_const_str__rules); +be_define_const_str(WEBCAM_XCLK, "WEBCAM_XCLK", 536207425u, 0, 11, NULL); +be_define_const_str(RC522_CS, "RC522_CS", 2639619996u, 0, 8, &be_const_str_get_option); +be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, &be_const_str_tanh); +be_define_const_str(tanh, "tanh", 153638352u, 0, 4, NULL); +be_define_const_str(IEM3000_RX, "IEM3000_RX", 1117811096u, 0, 10, NULL); +be_define_const_str(KEY1, "KEY1", 6715975u, 0, 4, &be_const_str_compile); +be_define_const_str(compile, "compile", 1000265118u, 0, 7, &be_const_str_int); +be_define_const_str(int, "int", 2515107422u, 0, 3, &be_const_str_class); +be_define_const_str(class, "class", 2872970239u, 57, 5, NULL); +be_define_const_str(CSE7761_RX, "CSE7761_RX", 65423248u, 0, 10, &be_const_str_montserrat_font); +be_define_const_str(montserrat_font, "montserrat_font", 1819065874u, 0, 15, &be_const_str_set_light); +be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, NULL); +be_define_const_str(AS608_RX, "AS608_RX", 4275502016u, 0, 8, &be_const_str_SDM120_TX); +be_define_const_str(SDM120_TX, "SDM120_TX", 2509332415u, 0, 9, NULL); +be_define_const_str(MAX7219CS, "MAX7219CS", 2593198244u, 0, 9, &be_const_str_PZEM0XX_TX); +be_define_const_str(PZEM0XX_TX, "PZEM0XX_TX", 944775704u, 0, 10, &be_const_str_cos); +be_define_const_str(cos, "cos", 4220379804u, 0, 3, NULL); +be_define_const_str(BOILER_OT_RX, "BOILER_OT_RX", 603647409u, 0, 12, NULL); +be_define_const_str(SWT1_NP, "SWT1_NP", 4033043739u, 0, 7, NULL); +be_define_const_str(SYMBOL_VOLUME_MID, "SYMBOL_VOLUME_MID", 158835057u, 0, 17, &be_const_str_TM1637DIO); +be_define_const_str(TM1637DIO, "TM1637DIO", 1574659381u, 0, 9, NULL); +be_define_const_str(BUZZER_INV, "BUZZER_INV", 3274564335u, 0, 10, &be_const_str_SYMBOL_CUT); +be_define_const_str(SYMBOL_CUT, "SYMBOL_CUT", 3455112394u, 0, 10, &be_const_str_setrange); +be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, NULL); +be_define_const_str(EPAPER42_CS, "EPAPER42_CS", 3274717451u, 0, 11, &be_const_str_LE01MR_RX); +be_define_const_str(LE01MR_RX, "LE01MR_RX", 1521590809u, 0, 9, &be_const_str_MAX31855CLK); +be_define_const_str(MAX31855CLK, "MAX31855CLK", 715977727u, 0, 11, &be_const_str_SDM120_RX); +be_define_const_str(SDM120_RX, "SDM120_RX", 1367571753u, 0, 9, &be_const_str_SYMBOL_DUMMY); +be_define_const_str(SYMBOL_DUMMY, "SYMBOL_DUMMY", 3621732138u, 0, 12, &be_const_str_super); +be_define_const_str(super, "super", 4152230356u, 0, 5, NULL); +be_define_const_str(classof, "classof", 1796577762u, 0, 7, NULL); +be_define_const_str(PMS5003_RX, "PMS5003_RX", 3934985650u, 0, 10, &be_const_str_iter); +be_define_const_str(iter, "iter", 3124256359u, 0, 4, &be_const_str_lv_list); +be_define_const_str(lv_list, "lv_list", 2876551248u, 0, 7, NULL); +be_define_const_str(MAX7219DIN, "MAX7219DIN", 380687049u, 0, 10, &be_const_str_SYMBOL_LOOP); +be_define_const_str(SYMBOL_LOOP, "SYMBOL_LOOP", 2762053208u, 0, 11, &be_const_str_attrdump); +be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, NULL); +be_define_const_str(ADC_PH, "ADC_PH", 3820290594u, 0, 6, &be_const_str__drivers); +be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, &be_const_str_layer_top); +be_define_const_str(layer_top, "layer_top", 645939682u, 0, 9, &be_const_str_scan); +be_define_const_str(scan, "scan", 3974641896u, 0, 4, &be_const_str_screenshot); +be_define_const_str(screenshot, "screenshot", 3894592561u, 0, 10, NULL); +be_define_const_str(DYP_RX, "DYP_RX", 2122310285u, 0, 6, &be_const_str_ELECTRIQ_MOODL_TX); +be_define_const_str(ELECTRIQ_MOODL_TX, "ELECTRIQ_MOODL_TX", 31009247u, 0, 17, &be_const_str_time_reached); +be_define_const_str(time_reached, "time_reached", 2075136773u, 0, 12, NULL); +be_define_const_str(LED1, "LED1", 21005825u, 0, 4, &be_const_str_lv_chart); +be_define_const_str(lv_chart, "lv_chart", 2652494144u, 0, 8, NULL); +be_define_const_str(ADC_BUTTON_INV, "ADC_BUTTON_INV", 2027625326u, 0, 14, &be_const_str_TFMINIPLUS_TX); +be_define_const_str(TFMINIPLUS_TX, "TFMINIPLUS_TX", 2527875337u, 0, 13, NULL); +be_define_const_str(SPI_CLK, "SPI_CLK", 3943233814u, 0, 7, &be_const_str_TUYA_TX); +be_define_const_str(TUYA_TX, "TUYA_TX", 1541301465u, 0, 7, NULL); +be_define_const_str(NRG_SEL_INV, "NRG_SEL_INV", 3567431069u, 0, 11, &be_const_str_SSPI_SCLK); +be_define_const_str(SSPI_SCLK, "SSPI_SCLK", 136688954u, 0, 9, &be_const_str_SYMBOL_BATTERY_1); +be_define_const_str(SYMBOL_BATTERY_1, "SYMBOL_BATTERY_1", 629036063u, 0, 16, &be_const_str_SYMBOL_GPS); +be_define_const_str(SYMBOL_GPS, "SYMBOL_GPS", 3044165570u, 0, 10, &be_const_str_SYMBOL_VOLUME_MAX); +be_define_const_str(SYMBOL_VOLUME_MAX, "SYMBOL_VOLUME_MAX", 3582646093u, 0, 17, &be_const_str_lv_tabview); +be_define_const_str(lv_tabview, "lv_tabview", 2109024786u, 0, 10, &be_const_str_size); +be_define_const_str(size, "size", 597743964u, 0, 4, NULL); +be_define_const_str(I2C_SDA, "I2C_SDA", 1052592262u, 0, 7, NULL); +be_define_const_str(INPUT_PULLUP, "INPUT_PULLUP", 2912931654u, 0, 12, &be_const_str_SOLAXX1_RX); +be_define_const_str(SOLAXX1_RX, "SOLAXX1_RX", 971867054u, 0, 10, &be_const_str_get_hor_res); +be_define_const_str(get_hor_res, "get_hor_res", 37131144u, 0, 11, NULL); +be_define_const_str(KEY1_NP, "KEY1_NP", 709918726u, 0, 7, NULL); +be_define_const_str(SYMBOL_TRASH, "SYMBOL_TRASH", 3169100368u, 0, 12, &be_const_str_range); +be_define_const_str(range, "range", 4208725202u, 0, 5, &be_const_str_resp_cmnd_done); +be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, NULL); +be_define_const_str(SYMBOL_CLOSE, "SYMBOL_CLOSE", 2654402806u, 0, 12, &be_const_str__begin_transmission); +be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, &be_const_str_publish); +be_define_const_str(publish, "publish", 264247304u, 0, 7, NULL); +be_define_const_str(lv_gauge, "lv_gauge", 118613531u, 0, 8, NULL); +be_define_const_str(insert, "insert", 3332609576u, 0, 6, &be_const_str_lv_spinbox); +be_define_const_str(lv_spinbox, "lv_spinbox", 2666096729u, 0, 10, NULL); +be_define_const_str(WEBCAM_DATA, "WEBCAM_DATA", 1476954421u, 0, 11, NULL); +be_define_const_str(SYMBOL_BATTERY_2, "SYMBOL_BATTERY_2", 645813682u, 0, 16, NULL); +be_define_const_str(pow, "pow", 1479764693u, 0, 3, &be_const_str_try); +be_define_const_str(try, "try", 2887626766u, 68, 3, NULL); +be_define_const_str(ARIRFSEL, "ARIRFSEL", 233874443u, 0, 8, &be_const_str__timers); +be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, &be_const_str_format); +be_define_const_str(format, "format", 3114108242u, 0, 6, NULL); +be_define_const_str(assert, "assert", 2774883451u, 0, 6, &be_const_str_chars_in_string); +be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, &be_const_str_lv_objmask); +be_define_const_str(lv_objmask, "lv_objmask", 1311221665u, 0, 10, NULL); +be_define_const_str(member, "member", 719708611u, 0, 6, NULL); +be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, NULL); +be_define_const_str(ADC_INPUT, "ADC_INPUT", 2207556878u, 0, 9, &be_const_str_byte); +be_define_const_str(byte, "byte", 1683620383u, 0, 4, &be_const_str_ceil); +be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, &be_const_str_log10); +be_define_const_str(log10, "log10", 2346846000u, 0, 5, &be_const_str_time_str); +be_define_const_str(time_str, "time_str", 2613827612u, 0, 8, NULL); +be_define_const_str(LED1_INV, "LED1_INV", 2112045097u, 0, 8, &be_const_str_SYMBOL_IMAGE); +be_define_const_str(SYMBOL_IMAGE, "SYMBOL_IMAGE", 815601151u, 0, 12, &be_const_str_lv_cpicker); +be_define_const_str(lv_cpicker, "lv_cpicker", 1935129251u, 0, 10, NULL); +be_define_const_str(ADC_TEMP, "ADC_TEMP", 3771053440u, 0, 8, &be_const_str_SYMBOL_EYE_CLOSE); +be_define_const_str(SYMBOL_EYE_CLOSE, "SYMBOL_EYE_CLOSE", 404721792u, 0, 16, NULL); +be_define_const_str(SAIR_RX, "SAIR_RX", 1273688713u, 0, 7, &be_const_str_SDS0X1_RX); +be_define_const_str(SDS0X1_RX, "SDS0X1_RX", 1170717385u, 0, 9, &be_const_str_SYMBOL_BATTERY_3); +be_define_const_str(SYMBOL_BATTERY_3, "SYMBOL_BATTERY_3", 662591301u, 0, 16, &be_const_str_find_op); +be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, NULL); +be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, &be_const_str_item); +be_define_const_str(item, "item", 2671260646u, 0, 4, &be_const_str_load); +be_define_const_str(load, "load", 3859241449u, 0, 4, &be_const_str_read); +be_define_const_str(read, "read", 3470762949u, 0, 4, &be_const_str_remove_cmd); +be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, NULL); +be_define_const_str(SYMBOL_FILE, "SYMBOL_FILE", 237085260u, 0, 11, &be_const_str_SYMBOL_PLAY); +be_define_const_str(SYMBOL_PLAY, "SYMBOL_PLAY", 1750902100u, 0, 11, NULL); +be_define_const_str(BUZZER, "BUZZER", 1550039611u, 0, 6, &be_const_str_MGC3130_RESET); +be_define_const_str(MGC3130_RESET, "MGC3130_RESET", 405013121u, 0, 13, NULL); +be_define_const_str(SYMBOL_EYE_OPEN, "SYMBOL_EYE_OPEN", 3449311676u, 0, 15, &be_const_str_sqrt); +be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, NULL); +be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_pin_used); +be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, NULL); +be_define_const_str(concat, "concat", 4124019837u, 0, 6, NULL); +be_define_const_str(lv_img, "lv_img", 2474052327u, 0, 6, NULL); +be_define_const_str(TM1637CLK, "TM1637CLK", 2797300857u, 0, 9, &be_const_str_set_power); +be_define_const_str(set_power, "set_power", 549820893u, 0, 9, NULL); +be_define_const_str(SI7021, "SI7021", 864377911u, 0, 6, &be_const_str_SYMBOL_PREV); +be_define_const_str(SYMBOL_PREV, "SYMBOL_PREV", 2952615023u, 0, 11, NULL); +be_define_const_str(PULLUP, "PULLUP", 3417628531u, 0, 6, &be_const_str_PWM1); +be_define_const_str(PWM1, "PWM1", 1353352426u, 0, 4, &be_const_str_WEBCAM_PSRCS); +be_define_const_str(WEBCAM_PSRCS, "WEBCAM_PSRCS", 624464864u, 0, 12, &be_const_str_lower); +be_define_const_str(lower, "lower", 3038577850u, 0, 5, &be_const_str_read_bytes); +be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, NULL); +be_define_const_str(CC1101_GDO0, "CC1101_GDO0", 940611027u, 0, 11, &be_const_str_P9813_CLK); +be_define_const_str(P9813_CLK, "P9813_CLK", 2455391001u, 0, 9, NULL); +be_define_const_str(DDS2382_RX, "DDS2382_RX", 432446462u, 0, 10, &be_const_str_SYMBOL_RIGHT); +be_define_const_str(SYMBOL_RIGHT, "SYMBOL_RIGHT", 2984010648u, 0, 12, &be_const_str_save_before_restart); +be_define_const_str(save_before_restart, "save_before_restart", 1253239338u, 0, 19, NULL); +be_define_const_str(PROJECTOR_CTRL_RX, "PROJECTOR_CTRL_RX", 1542762460u, 0, 17, NULL); +be_define_const_str(SYMBOL_SETTINGS, "SYMBOL_SETTINGS", 339656335u, 0, 15, NULL); +be_define_const_str(SYMBOL_CALL, "SYMBOL_CALL", 1444504366u, 0, 11, NULL); +be_define_const_str(save, "save", 3439296072u, 0, 4, NULL); +be_define_const_str(DHT11_OUT, "DHT11_OUT", 1645300734u, 0, 9, NULL); +be_define_const_str(CSE7761_TX, "CSE7761_TX", 3354719142u, 0, 10, &be_const_str_ILI9341_CS); +be_define_const_str(ILI9341_CS, "ILI9341_CS", 3519318851u, 0, 10, &be_const_str_WEBCAM_PCLK); +be_define_const_str(WEBCAM_PCLK, "WEBCAM_PCLK", 3813770649u, 0, 11, &be_const_str_set_timer); +be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, NULL); +be_define_const_str(Driver, "Driver", 3576386303u, 0, 6, NULL); +be_define_const_str(atan, "atan", 108579519u, 0, 4, NULL); +be_define_const_str(SYMBOL_LIST, "SYMBOL_LIST", 70793990u, 0, 11, &be_const_str_SYMBOL_UPLOAD); +be_define_const_str(SYMBOL_UPLOAD, "SYMBOL_UPLOAD", 3293679647u, 0, 13, &be_const_str_lv_obj); +be_define_const_str(lv_obj, "lv_obj", 4257833149u, 0, 6, NULL); +be_define_const_str(ST7789_CS, "ST7789_CS", 2937305434u, 0, 9, &be_const_str_add_driver); +be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, NULL); +be_define_const_str(ST7789_DC, "ST7789_DC", 2533509745u, 0, 9, &be_const_str_deinit); +be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_resize); +be_define_const_str(resize, "resize", 3514612129u, 0, 6, NULL); +be_define_const_str(ETH_PHY_MDIO, "ETH_PHY_MDIO", 3261871568u, 0, 12, &be_const_str_OUTPUT_LO); +be_define_const_str(OUTPUT_LO, "OUTPUT_LO", 3724620328u, 0, 9, &be_const_str_SYMBOL_VIDEO); +be_define_const_str(SYMBOL_VIDEO, "SYMBOL_VIDEO", 789726913u, 0, 12, &be_const_str_TXD); +be_define_const_str(TXD, "TXD", 3614562079u, 0, 3, &be_const_str_find); +be_define_const_str(find, "find", 3186656602u, 0, 4, &be_const_str_tolower); +be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, NULL); +be_define_const_str(MAX31855DO, "MAX31855DO", 552730368u, 0, 10, &be_const_str_resp_cmnd_str); +be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, &be_const_str_sinh); +be_define_const_str(sinh, "sinh", 282220607u, 0, 4, NULL); +be_define_const_str(lv_led, "lv_led", 3192184733u, 0, 6, &be_const_str_register_button_encoder); +be_define_const_str(register_button_encoder, "register_button_encoder", 2811301550u, 0, 23, NULL); +be_define_const_str(SBR_TX, "SBR_TX", 3419096015u, 0, 6, &be_const_str_start); +be_define_const_str(start, "start", 1697318111u, 0, 5, NULL); +be_define_const_str(CC1101_GDO2, "CC1101_GDO2", 974166265u, 0, 11, NULL); +be_define_const_str(SDCARD_CS, "SDCARD_CS", 3348952003u, 0, 9, &be_const_str_get_free_heap); +be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, NULL); +be_define_const_str(log, "log", 1062293841u, 0, 3, NULL); +be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, NULL); +be_define_const_str(CSE7766_TX, "CSE7766_TX", 674624821u, 0, 10, &be_const_str_GPS_RX); +be_define_const_str(GPS_RX, "GPS_RX", 1075637342u, 0, 6, &be_const_str_reverse); +be_define_const_str(reverse, "reverse", 558918661u, 0, 7, NULL); +be_define_const_str(DSB_OUT, "DSB_OUT", 732335085u, 0, 7, NULL); +be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, &be_const_str_every_second); +be_define_const_str(every_second, "every_second", 2075451465u, 0, 12, NULL); +be_define_const_str(MAX31855CS, "MAX31855CS", 753620511u, 0, 10, &be_const_str_SR04_TRIG); +be_define_const_str(SR04_TRIG, "SR04_TRIG", 68671263u, 0, 9, NULL); +be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL); +be_define_const_str(SSD1331_CS, "SSD1331_CS", 4191047928u, 0, 10, &be_const_str_lv_win); +be_define_const_str(lv_win, "lv_win", 780927558u, 0, 6, NULL); +be_define_const_str(WEBCAM_PWDN, "WEBCAM_PWDN", 2219597454u, 0, 11, NULL); +be_define_const_str(AS3935, "AS3935", 603621745u, 0, 6, &be_const_str_web_add_button); +be_define_const_str(web_add_button, "web_add_button", 3537875058u, 0, 14, NULL); +be_define_const_str(INPUT_PULLDOWN, "INPUT_PULLDOWN", 1172232591u, 0, 14, &be_const_str_MCP39F5_TX); +be_define_const_str(MCP39F5_TX, "MCP39F5_TX", 1332322047u, 0, 10, NULL); +be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, NULL); +be_define_const_str(CNTR1_NP, "CNTR1_NP", 4288381648u, 0, 8, &be_const_str_VL53L0X_XSHUT1); +be_define_const_str(VL53L0X_XSHUT1, "VL53L0X_XSHUT1", 2341134183u, 0, 14, &be_const_str_ZIGBEE_RX); +be_define_const_str(ZIGBEE_RX, "ZIGBEE_RX", 93215470u, 0, 9, NULL); +be_define_const_str(SYMBOL_WARNING, "SYMBOL_WARNING", 4119913686u, 0, 14, &be_const_str_WEBCAM_RESET); +be_define_const_str(WEBCAM_RESET, "WEBCAM_RESET", 2171221520u, 0, 12, &be_const_str_collect); +be_define_const_str(collect, "collect", 2399039025u, 0, 7, &be_const_str_digital_write); +be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, NULL); +be_define_const_str(A4988_MS1, "A4988_MS1", 1729976611u, 0, 9, &be_const_str_PZEM016_RX); +be_define_const_str(PZEM016_RX, "PZEM016_RX", 1004012055u, 0, 10, &be_const_str_top); +be_define_const_str(top, "top", 2802900028u, 0, 3, NULL); +be_define_const_str(SSD1331_DC, "SSD1331_DC", 3386560859u, 0, 10, &be_const_str_resolvecmnd); +be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, NULL); +be_define_const_str(SYMBOL_BATTERY_FULL, "SYMBOL_BATTERY_FULL", 2638935545u, 0, 19, &be_const_str_WE517_RX); +be_define_const_str(WE517_RX, "WE517_RX", 4096577879u, 0, 8, NULL); +be_define_const_str(RDM6300_RX, "RDM6300_RX", 1522345628u, 0, 10, &be_const_str_SYMBOL_REFRESH); +be_define_const_str(SYMBOL_REFRESH, "SYMBOL_REFRESH", 1266229761u, 0, 14, &be_const_str__rules); be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, &be_const_str_print); be_define_const_str(print, "print", 372738696u, 0, 5, NULL); -be_define_const_str(item, "item", 2671260646u, 0, 4, NULL); -be_define_const_str(ALIGN_OUT_RIGHT_MID, "ALIGN_OUT_RIGHT_MID", 2298501353u, 0, 19, NULL); -be_define_const_str(DROPDOWN_PART_LIST, "DROPDOWN_PART_LIST", 2923479101u, 0, 18, &be_const_str_SSD1331_DC); -be_define_const_str(SSD1331_DC, "SSD1331_DC", 3386560859u, 0, 10, &be_const_str_get_style_shadow_ofs_y); -be_define_const_str(get_style_shadow_ofs_y, "get_style_shadow_ofs_y", 2337159315u, 0, 22, &be_const_str_on_edge); -be_define_const_str(on_edge, "on_edge", 1159443540u, 0, 7, NULL); -be_define_const_str(SYMBOL_PREV, "SYMBOL_PREV", 2952615023u, 0, 11, &be_const_str_set_value_opa); -be_define_const_str(set_value_opa, "set_value_opa", 1055786128u, 0, 13, &be_const_str_set_width); -be_define_const_str(set_width, "set_width", 484671920u, 0, 9, NULL); -be_define_const_str(AS608_RX, "AS608_RX", 4275502016u, 0, 8, &be_const_str_CHART_AXIS_PRIMARY_Y); -be_define_const_str(CHART_AXIS_PRIMARY_Y, "CHART_AXIS_PRIMARY_Y", 2499204580u, 0, 20, &be_const_str_TM1638STB); -be_define_const_str(TM1638STB, "TM1638STB", 823674593u, 0, 9, NULL); -be_define_const_str(SYMBOL_FILE, "SYMBOL_FILE", 237085260u, 0, 11, &be_const_str_align); -be_define_const_str(align, "align", 1613521886u, 0, 5, NULL); -be_define_const_str(SYMBOL_REFRESH, "SYMBOL_REFRESH", 1266229761u, 0, 14, &be_const_str_set_mode); -be_define_const_str(set_mode, "set_mode", 4109106455u, 0, 8, NULL); -be_define_const_str(add_btn_right, "add_btn_right", 2154922694u, 0, 13, &be_const_str_refr_text); -be_define_const_str(refr_text, "refr_text", 3162090502u, 0, 9, NULL); -be_define_const_str(SPI_DC, "SPI_DC", 553259951u, 0, 6, NULL); -be_define_const_str(CHART_UPDATE_MODE_SHIFT, "CHART_UPDATE_MODE_SHIFT", 1343723110u, 0, 23, &be_const_str_allocated); -be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_get_free_heap); -be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, &be_const_str_set_rotation); -be_define_const_str(set_rotation, "set_rotation", 2130936338u, 0, 12, &be_const_str_sqrt); -be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, &be_const_str_while); -be_define_const_str(while, "while", 231090382u, 53, 5, NULL); -be_define_const_str(EVENT_PRESS_LOST, "EVENT_PRESS_LOST", 3685074190u, 0, 16, &be_const_str_RED); -be_define_const_str(RED, "RED", 2211354620u, 0, 3, &be_const_str_set_long_mode); -be_define_const_str(set_long_mode, "set_long_mode", 1177453792u, 0, 13, NULL); -be_define_const_str(STYLE_PAD_TOP, "STYLE_PAD_TOP", 2731711064u, 0, 13, &be_const_str_get_x_from_index); -be_define_const_str(get_x_from_index, "get_x_from_index", 2843960746u, 0, 16, NULL); -be_define_const_str(set_offset_y, "set_offset_y", 437927531u, 0, 12, NULL); -be_define_const_str(set_bg_main_stop, "set_bg_main_stop", 1702668926u, 0, 16, &be_const_str_set_style_local_size); -be_define_const_str(set_style_local_size, "set_style_local_size", 1442450187u, 0, 20, &be_const_str_set_visible_row_count); -be_define_const_str(set_visible_row_count, "set_visible_row_count", 840407905u, 0, 21, NULL); -be_define_const_str(FS_RES_INV_PARAM, "FS_RES_INV_PARAM", 2676717305u, 0, 16, &be_const_str_HPMA_TX); -be_define_const_str(HPMA_TX, "HPMA_TX", 173233104u, 0, 7, &be_const_str_NEOPOOL_TX); -be_define_const_str(NEOPOOL_TX, "NEOPOOL_TX", 2924925804u, 0, 10, &be_const_str_pin_mode); -be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, NULL); -be_define_const_str(SYMBOL_VIDEO, "SYMBOL_VIDEO", 789726913u, 0, 12, NULL); -be_define_const_str(MCP39F5_RST, "MCP39F5_RST", 3657125652u, 0, 11, &be_const_str_log10); -be_define_const_str(log10, "log10", 2346846000u, 0, 5, NULL); -be_define_const_str(CHART_PART_SERIES, "CHART_PART_SERIES", 3401824459u, 0, 17, &be_const_str_OPA_100); -be_define_const_str(OPA_100, "OPA_100", 3698564393u, 0, 7, &be_const_str_is_point_on_coords); -be_define_const_str(is_point_on_coords, "is_point_on_coords", 2479052471u, 0, 18, &be_const_str_start_auto_close); -be_define_const_str(start_auto_close, "start_auto_close", 2189620188u, 0, 16, NULL); -be_define_const_str(STYLE_BG_MAIN_STOP, "STYLE_BG_MAIN_STOP", 376609633u, 0, 18, &be_const_str_web_send_decimal); -be_define_const_str(web_send_decimal, "web_send_decimal", 1407210204u, 0, 16, NULL); -be_define_const_str(ALIGN_OUT_TOP_LEFT, "ALIGN_OUT_TOP_LEFT", 1073920927u, 0, 18, &be_const_str_BTN_STATE_CHECKED_DISABLED); -be_define_const_str(BTN_STATE_CHECKED_DISABLED, "BTN_STATE_CHECKED_DISABLED", 1537172432u, 0, 26, NULL); -be_define_const_str(list_copy, "list_copy", 680267399u, 0, 9, &be_const_str_set_style_local_scale_width); -be_define_const_str(set_style_local_scale_width, "set_style_local_scale_width", 2071128255u, 0, 27, &be_const_str_set_value_font); -be_define_const_str(set_value_font, "set_value_font", 3846644343u, 0, 14, &be_const_str_as); -be_define_const_str(as, "as", 1579491469u, 67, 2, NULL); -be_define_const_str(INPUT_PULLDOWN, "INPUT_PULLDOWN", 1172232591u, 0, 14, &be_const_str_set_bg_grad_dir); -be_define_const_str(set_bg_grad_dir, "set_bg_grad_dir", 1390928996u, 0, 15, &be_const_str_set_style_local_value_align); -be_define_const_str(set_style_local_value_align, "set_style_local_value_align", 17354185u, 0, 27, NULL); -be_define_const_str(STYLE_VALUE_ALIGN, "STYLE_VALUE_ALIGN", 3531731246u, 0, 17, &be_const_str_load); -be_define_const_str(load, "load", 3859241449u, 0, 4, &be_const_str_set_saturation); -be_define_const_str(set_saturation, "set_saturation", 2225192852u, 0, 14, NULL); -be_define_const_str(SYMBOL_NEXT, "SYMBOL_NEXT", 1102844455u, 0, 11, &be_const_str_align_mid); -be_define_const_str(align_mid, "align_mid", 497514711u, 0, 9, NULL); -be_define_const_str(SPINNER_DIR_BACKWARD, "SPINNER_DIR_BACKWARD", 4078587842u, 0, 20, &be_const_str_response_append); -be_define_const_str(response_append, "response_append", 450346371u, 0, 15, &be_const_str_set_border_opa); -be_define_const_str(set_border_opa, "set_border_opa", 3722959347u, 0, 14, NULL); -be_define_const_str(get_adv_hittest, "get_adv_hittest", 1985963887u, 0, 15, NULL); -be_define_const_str(get_fit_top, "get_fit_top", 1805788963u, 0, 11, NULL); -be_define_const_str(DISP_ROT_270, "DISP_ROT_270", 3187294969u, 0, 12, &be_const_str_OPA_40); -be_define_const_str(OPA_40, "OPA_40", 2210522110u, 0, 6, &be_const_str_allocate_ext_attr); -be_define_const_str(allocate_ext_attr, "allocate_ext_attr", 915956424u, 0, 17, &be_const_str_get_style_pattern_recolor); -be_define_const_str(get_style_pattern_recolor, "get_style_pattern_recolor", 1808910091u, 0, 25, NULL); -be_define_const_str(BORDER_SIDE_LEFT, "BORDER_SIDE_LEFT", 1415977349u, 0, 16, &be_const_str_SBR_TX); -be_define_const_str(SBR_TX, "SBR_TX", 3419096015u, 0, 6, &be_const_str_set_pad_bottom); -be_define_const_str(set_pad_bottom, "set_pad_bottom", 900543569u, 0, 14, NULL); -be_define_const_str(LABEL_ALIGN_CENTER, "LABEL_ALIGN_CENTER", 3698850161u, 0, 18, &be_const_str_set_scale_end_border_width); -be_define_const_str(set_scale_end_border_width, "set_scale_end_border_width", 3280087724u, 0, 26, &be_const_str_set_style_local_shadow_width); -be_define_const_str(set_style_local_shadow_width, "set_style_local_shadow_width", 2466053617u, 0, 28, NULL); -be_define_const_str(SYMBOL_DUMMY, "SYMBOL_DUMMY", 3621732138u, 0, 12, &be_const_str_set_accepted_chars); -be_define_const_str(set_accepted_chars, "set_accepted_chars", 3900817531u, 0, 18, NULL); -be_define_const_str(get_user_data, "get_user_data", 1175796436u, 0, 13, NULL); -be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_get_style_border_post); -be_define_const_str(get_style_border_post, "get_style_border_post", 3537874563u, 0, 21, &be_const_str_pow); -be_define_const_str(pow, "pow", 1479764693u, 0, 3, &be_const_str_set_style_local_pad_inner); -be_define_const_str(set_style_local_pad_inner, "set_style_local_pad_inner", 3980353812u, 0, 25, NULL); -be_define_const_str(DROPDOWN_DIR_RIGHT, "DROPDOWN_DIR_RIGHT", 103533641u, 0, 18, &be_const_str_get_knob_colored); -be_define_const_str(get_knob_colored, "get_knob_colored", 2664754853u, 0, 16, &be_const_str_get_row_cnt); -be_define_const_str(get_row_cnt, "get_row_cnt", 541121788u, 0, 11, &be_const_str_get_style_margin_left); -be_define_const_str(get_style_margin_left, "get_style_margin_left", 1765248440u, 0, 21, NULL); -be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, NULL); -be_define_const_str(PROTECT_PRESS_LOST, "PROTECT_PRESS_LOST", 2967498203u, 0, 18, &be_const_str_SPI_CLK); -be_define_const_str(SPI_CLK, "SPI_CLK", 3943233814u, 0, 7, NULL); -be_define_const_str(CSE7766_TX, "CSE7766_TX", 674624821u, 0, 10, &be_const_str_get_style_shadow_ofs_x); -be_define_const_str(get_style_shadow_ofs_x, "get_style_shadow_ofs_x", 2320381696u, 0, 22, NULL); -be_define_const_str(get_drag_parent, "get_drag_parent", 1546081183u, 0, 15, NULL); -be_define_const_str(PROTECT_PARENT, "PROTECT_PARENT", 3109095353u, 0, 14, &be_const_str_STYLE_RADIUS); -be_define_const_str(STYLE_RADIUS, "STYLE_RADIUS", 1029481353u, 0, 12, &be_const_str_STYLE_TEXT_SEL_COLOR); -be_define_const_str(STYLE_TEXT_SEL_COLOR, "STYLE_TEXT_SEL_COLOR", 1096559567u, 0, 20, NULL); -be_define_const_str(STYLE_PAD_LEFT, "STYLE_PAD_LEFT", 1524023460u, 0, 14, NULL); -be_define_const_str(LAYOUT_COLUMN_MID, "LAYOUT_COLUMN_MID", 669575067u, 0, 17, &be_const_str_get_style_pattern_repeat); -be_define_const_str(get_style_pattern_repeat, "get_style_pattern_repeat", 3530119950u, 0, 24, &be_const_str_set_ctrl_map); -be_define_const_str(set_ctrl_map, "set_ctrl_map", 305774832u, 0, 12, NULL); -be_define_const_str(clear_btn_ctrl, "clear_btn_ctrl", 2659827935u, 0, 14, &be_const_str_set_style_local_outline_opa); -be_define_const_str(set_style_local_outline_opa, "set_style_local_outline_opa", 1280559349u, 0, 27, NULL); -be_define_const_str(lower, "lower", 3038577850u, 0, 5, &be_const_str_type); +be_define_const_str(HPMA_TX, "HPMA_TX", 173233104u, 0, 7, &be_const_str_SYMBOL_LEFT); +be_define_const_str(SYMBOL_LEFT, "SYMBOL_LEFT", 1563517575u, 0, 11, &be_const_str_lv_arc); +be_define_const_str(lv_arc, "lv_arc", 4170125384u, 0, 6, NULL); +be_define_const_str(get_light, "get_light", 381930476u, 0, 9, &be_const_str_time_dump); +be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, NULL); +be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, &be_const_str_list); +be_define_const_str(list, "list", 217798785u, 0, 4, NULL); +be_define_const_str(AZ_RXD, "AZ_RXD", 699914019u, 0, 6, &be_const_str_SYMBOL_KEYBOARD); +be_define_const_str(SYMBOL_KEYBOARD, "SYMBOL_KEYBOARD", 1621492879u, 0, 15, &be_const_str_if); +be_define_const_str(if, "if", 959999494u, 50, 2, NULL); be_define_const_str(type, "type", 1361572173u, 0, 4, NULL); -be_define_const_str(PAGE_EDGE_TOP, "PAGE_EDGE_TOP", 869728962u, 0, 13, NULL); -be_define_const_str(EVENT_CLICKED, "EVENT_CLICKED", 243475129u, 0, 13, &be_const_str_get_cursor_hidden); -be_define_const_str(get_cursor_hidden, "get_cursor_hidden", 3032264799u, 0, 17, &be_const_str_get_style_value_opa); -be_define_const_str(get_style_value_opa, "get_style_value_opa", 1671026074u, 0, 19, &be_const_str_var); -be_define_const_str(var, "var", 2317739966u, 64, 3, NULL); -be_define_const_str(get_style_text_letter_space, "get_style_text_letter_space", 772735187u, 0, 27, &be_const_str_set_offset_x); -be_define_const_str(set_offset_x, "set_offset_x", 421149912u, 0, 12, &be_const_str_set_style_local_bg_blend_mode); -be_define_const_str(set_style_local_bg_blend_mode, "set_style_local_bg_blend_mode", 2691986893u, 0, 29, NULL); -be_define_const_str(TUYA_RX, "TUYA_RX", 1609397679u, 0, 7, &be_const_str_clear_options); -be_define_const_str(clear_options, "clear_options", 1509347603u, 0, 13, NULL); -be_define_const_str(DISP_SIZE_MEDIUM, "DISP_SIZE_MEDIUM", 3336923135u, 0, 16, &be_const_str_set_cell_align); -be_define_const_str(set_cell_align, "set_cell_align", 3036710638u, 0, 14, NULL); -be_define_const_str(DROPDOWN_PART_MAIN, "DROPDOWN_PART_MAIN", 1806576308u, 0, 18, &be_const_str_KEYBOARD_MODE_NUM); -be_define_const_str(KEYBOARD_MODE_NUM, "KEYBOARD_MODE_NUM", 2625982609u, 0, 17, &be_const_str_set_bg_grad_color); -be_define_const_str(set_bg_grad_color, "set_bg_grad_color", 51037480u, 0, 17, NULL); -be_define_const_str(EVENT_VALUE_CHANGED, "EVENT_VALUE_CHANGED", 1871067374u, 0, 19, &be_const_str_step_next); -be_define_const_str(step_next, "step_next", 3163156801u, 0, 9, NULL); -be_define_const_str(EVENT_DRAG_BEGIN, "EVENT_DRAG_BEGIN", 25766504u, 0, 16, &be_const_str_SPINNER_TYPE_CONSTANT_ARC); -be_define_const_str(SPINNER_TYPE_CONSTANT_ARC, "SPINNER_TYPE_CONSTANT_ARC", 2728560979u, 0, 25, &be_const_str_SPI_MISO); -be_define_const_str(SPI_MISO, "SPI_MISO", 150818010u, 0, 8, NULL); -be_define_const_str(ST7789_CS, "ST7789_CS", 2937305434u, 0, 9, &be_const_str_SYMBOL_DOWNLOAD); -be_define_const_str(SYMBOL_DOWNLOAD, "SYMBOL_DOWNLOAD", 2607324090u, 0, 15, NULL); -be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, &be_const_str_get_style_text_sel_bg_color); -be_define_const_str(get_style_text_sel_bg_color, "get_style_text_sel_bg_color", 1889477676u, 0, 27, NULL); -be_define_const_str(glue_obj, "glue_obj", 1757706238u, 0, 8, &be_const_str_set_parent); -be_define_const_str(set_parent, "set_parent", 1528807100u, 0, 10, NULL); -be_define_const_str(list_get_style, "list_get_style", 2060904236u, 0, 14, &be_const_str_set_bg_start_angle); -be_define_const_str(set_bg_start_angle, "set_bg_start_angle", 2285338772u, 0, 18, &be_const_str_upper); -be_define_const_str(upper, "upper", 176974407u, 0, 5, NULL); -be_define_const_str(MGC3130_XFER, "MGC3130_XFER", 4178219131u, 0, 12, &be_const_str_close_event_cb); -be_define_const_str(close_event_cb, "close_event_cb", 1180945172u, 0, 14, NULL); -be_define_const_str(RDM6300_RX, "RDM6300_RX", 1522345628u, 0, 10, &be_const_str_TASMOTACLIENT_RXD); -be_define_const_str(TASMOTACLIENT_RXD, "TASMOTACLIENT_RXD", 72868318u, 0, 17, &be_const_str_set_cursor_blink_time); -be_define_const_str(set_cursor_blink_time, "set_cursor_blink_time", 3508000825u, 0, 21, &be_const_str_set_edge_flash); -be_define_const_str(set_edge_flash, "set_edge_flash", 1114840232u, 0, 14, NULL); -be_define_const_str(ARC_TYPE_REVERSE, "ARC_TYPE_REVERSE", 3290331433u, 0, 16, &be_const_str_DI); -be_define_const_str(DI, "DI", 1070498734u, 0, 2, &be_const_str_SYMBOL_USB); -be_define_const_str(SYMBOL_USB, "SYMBOL_USB", 1962656552u, 0, 10, &be_const_str_set_style_local_scale_end_color); -be_define_const_str(set_style_local_scale_end_color, "set_style_local_scale_end_color", 2968375966u, 0, 31, NULL); -be_define_const_str(refresh, "refresh", 3572655668u, 0, 7, &be_const_str_set_layout); -be_define_const_str(set_layout, "set_layout", 3108581018u, 0, 10, NULL); -be_define_const_str(SR04_ECHO, "SR04_ECHO", 1906909592u, 0, 9, &be_const_str_get_header_height); -be_define_const_str(get_header_height, "get_header_height", 3313773581u, 0, 17, NULL); -be_define_const_str(ST7789_DC, "ST7789_DC", 2533509745u, 0, 9, &be_const_str_get_style_scale_end_border_width); -be_define_const_str(get_style_scale_end_border_width, "get_style_scale_end_border_width", 2717605058u, 0, 32, &be_const_str_set_spin_time); -be_define_const_str(set_spin_time, "set_spin_time", 1386363784u, 0, 13, NULL); -be_define_const_str(start, "start", 1697318111u, 0, 5, NULL); -be_define_const_str(get_coords, "get_coords", 1044089006u, 0, 10, NULL); -be_define_const_str(ALIGN_IN_BOTTOM_RIGHT, "ALIGN_IN_BOTTOM_RIGHT", 1575436355u, 0, 21, &be_const_str_CYAN); -be_define_const_str(CYAN, "CYAN", 1196590906u, 0, 4, &be_const_str_get_ext_click_pad_left); -be_define_const_str(get_ext_click_pad_left, "get_ext_click_pad_left", 1709871714u, 0, 22, NULL); -be_define_const_str(NONE, "NONE", 1932136219u, 0, 4, &be_const_str_get_series_axis); -be_define_const_str(get_series_axis, "get_series_axis", 524215363u, 0, 15, &be_const_str_get_wrap); -be_define_const_str(get_wrap, "get_wrap", 52299084u, 0, 8, NULL); -be_define_const_str(get_cursor_click_pos, "get_cursor_click_pos", 3249294464u, 0, 20, &be_const_str_size); -be_define_const_str(size, "size", 597743964u, 0, 4, &be_const_str_break); -be_define_const_str(break, "break", 3378807160u, 58, 5, &be_const_str_elif); -be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL); -be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, &be_const_str_get_parent); -be_define_const_str(get_parent, "get_parent", 350250280u, 0, 10, &be_const_str_set_cursor_pos); -be_define_const_str(set_cursor_pos, "set_cursor_pos", 1354380555u, 0, 14, NULL); -be_define_const_str(XPT2046_CS, "XPT2046_CS", 4049231042u, 0, 10, &be_const_str_get_scrollable); -be_define_const_str(get_scrollable, "get_scrollable", 1510903497u, 0, 14, NULL); -be_define_const_str(DISP_SIZE_EXTRA_LARGE, "DISP_SIZE_EXTRA_LARGE", 3382996246u, 0, 21, &be_const_str_PURPLE); -be_define_const_str(PURPLE, "PURPLE", 2539335743u, 0, 6, &be_const_str_remove_cmd); -be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, &be_const_str_set_style_local_scale_end_line_width); -be_define_const_str(set_style_local_scale_end_line_width, "set_style_local_scale_end_line_width", 2316920258u, 0, 36, NULL); -be_define_const_str(ANIM_OFF, "ANIM_OFF", 3664307970u, 0, 8, &be_const_str_SILVER); -be_define_const_str(SILVER, "SILVER", 1471925664u, 0, 6, &be_const_str_TM1637CLK); -be_define_const_str(TM1637CLK, "TM1637CLK", 2797300857u, 0, 9, NULL); -be_define_const_str(KEY_PREV, "KEY_PREV", 3127352148u, 0, 8, &be_const_str_cursor_down); -be_define_const_str(cursor_down, "cursor_down", 657234748u, 0, 11, NULL); -be_define_const_str(DDS2382_TX, "DDS2382_TX", 1438117864u, 0, 10, &be_const_str_FS_RES_HW_ERR); -be_define_const_str(FS_RES_HW_ERR, "FS_RES_HW_ERR", 1676324085u, 0, 13, &be_const_str_KEY1_INV_NP); -be_define_const_str(KEY1_INV_NP, "KEY1_INV_NP", 3160558586u, 0, 11, &be_const_str_set_style_local_transition_path); -be_define_const_str(set_style_local_transition_path, "set_style_local_transition_path", 1414572505u, 0, 31, NULL); -be_define_const_str(cursor_left, "cursor_left", 785231665u, 0, 11, NULL); -be_define_const_str(get_focus_parent, "get_focus_parent", 1187935525u, 0, 16, NULL); -be_define_const_str(ALIGN_OUT_TOP_RIGHT, "ALIGN_OUT_TOP_RIGHT", 1193969648u, 0, 19, &be_const_str_LAYOUT_PRETTY_TOP); -be_define_const_str(LAYOUT_PRETTY_TOP, "LAYOUT_PRETTY_TOP", 725519108u, 0, 17, &be_const_str_STYLE_BG_GRAD_DIR); -be_define_const_str(STYLE_BG_GRAD_DIR, "STYLE_BG_GRAD_DIR", 2986594357u, 0, 17, &be_const_str_set_scrl_width); -be_define_const_str(set_scrl_width, "set_scrl_width", 2522533355u, 0, 14, NULL); -be_define_const_str(set_bg_grad_stop, "set_bg_grad_stop", 1329650389u, 0, 16, &be_const_str_set_transform_angle); -be_define_const_str(set_transform_angle, "set_transform_angle", 2657176848u, 0, 19, NULL); -be_define_const_str(STYLE_CLIP_CORNER, "STYLE_CLIP_CORNER", 2883973343u, 0, 17, &be_const_str_get_style_border_opa); -be_define_const_str(get_style_border_opa, "get_style_border_opa", 140307373u, 0, 20, NULL); -be_define_const_str(deg, "deg", 3327754271u, 0, 3, NULL); -be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, NULL); -be_define_const_str(set_margin_bottom, "set_margin_bottom", 1238288976u, 0, 17, &be_const_str_set_style_local_outline_width); -be_define_const_str(set_style_local_outline_width, "set_style_local_outline_width", 3081743955u, 0, 29, NULL); -be_define_const_str(ALIGN_IN_TOP_MID, "ALIGN_IN_TOP_MID", 717802025u, 0, 16, &be_const_str_CHART_UPDATE_MODE_CIRCULAR); -be_define_const_str(CHART_UPDATE_MODE_CIRCULAR, "CHART_UPDATE_MODE_CIRCULAR", 776810859u, 0, 26, &be_const_str_NRG_CF1); -be_define_const_str(NRG_CF1, "NRG_CF1", 3292534757u, 0, 7, &be_const_str_STYLE_BORDER_SIDE); -be_define_const_str(STYLE_BORDER_SIDE, "STYLE_BORDER_SIDE", 3876109589u, 0, 17, &be_const_str_get_power); -be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, NULL); -be_define_const_str(NRG_SEL_INV, "NRG_SEL_INV", 3567431069u, 0, 11, NULL); -be_define_const_str(SSPI_SCLK, "SSPI_SCLK", 136688954u, 0, 9, &be_const_str_STYLE_TRANSFORM_HEIGHT); -be_define_const_str(STYLE_TRANSFORM_HEIGHT, "STYLE_TRANSFORM_HEIGHT", 953009101u, 0, 22, &be_const_str_lv_bar); -be_define_const_str(lv_bar, "lv_bar", 1582673229u, 0, 6, NULL); -be_define_const_str(ADC_BUTTON_INV, "ADC_BUTTON_INV", 2027625326u, 0, 14, &be_const_str_SYMBOL_LOOP); -be_define_const_str(SYMBOL_LOOP, "SYMBOL_LOOP", 2762053208u, 0, 11, &be_const_str_get_drag); -be_define_const_str(get_drag, "get_drag", 1996600010u, 0, 8, &be_const_str_get_screen); -be_define_const_str(get_screen, "get_screen", 2759490796u, 0, 10, &be_const_str_get_style_outline_blend_mode); -be_define_const_str(get_style_outline_blend_mode, "get_style_outline_blend_mode", 4053824466u, 0, 28, &be_const_str_set_drag_parent); -be_define_const_str(set_drag_parent, "set_drag_parent", 3979167347u, 0, 15, NULL); -be_define_const_str(get_col_width, "get_col_width", 638670073u, 0, 13, NULL); -be_define_const_str(WEBCAM_PCLK, "WEBCAM_PCLK", 3813770649u, 0, 11, &be_const_str_draw_line); -be_define_const_str(draw_line, "draw_line", 1634465686u, 0, 9, &be_const_str_set_border_blend_mode); -be_define_const_str(set_border_blend_mode, "set_border_blend_mode", 882247636u, 0, 21, NULL); -be_define_const_str(MAX7219DIN, "MAX7219DIN", 380687049u, 0, 10, &be_const_str_set_cell_merge_right); -be_define_const_str(set_cell_merge_right, "set_cell_merge_right", 3174593866u, 0, 20, NULL); -be_define_const_str(CHART_PART_CURSOR, "CHART_PART_CURSOR", 2123603184u, 0, 17, &be_const_str_DISP_ROT_NONE); -be_define_const_str(DISP_ROT_NONE, "DISP_ROT_NONE", 1805190226u, 0, 13, &be_const_str_set_text_sel_bg_color); -be_define_const_str(set_text_sel_bg_color, "set_text_sel_bg_color", 3929347886u, 0, 21, &be_const_str_toupper); +be_define_const_str(WE517_TX, "WE517_TX", 2954817217u, 0, 8, &be_const_str_millis); +be_define_const_str(millis, "millis", 1214679063u, 0, 6, NULL); +be_define_const_str(MAX7219CLK, "MAX7219CLK", 963568838u, 0, 10, &be_const_str_allocated); +be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_wire_scan); +be_define_const_str(wire_scan, "wire_scan", 2671275880u, 0, 9, NULL); +be_define_const_str(SYMBOL_SAVE, "SYMBOL_SAVE", 2439821015u, 0, 11, &be_const_str__write); +be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_nil); +be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL); +be_define_const_str(SYMBOL_WIFI, "SYMBOL_WIFI", 682141303u, 0, 11, &be_const_str_delay); +be_define_const_str(delay, "delay", 1322381784u, 0, 5, &be_const_str_web_send_decimal); +be_define_const_str(web_send_decimal, "web_send_decimal", 1407210204u, 0, 16, NULL); +be_define_const_str(NEOPOOL_RX, "NEOPOOL_RX", 1917974474u, 0, 10, &be_const_str_SHELLY_DIMMER_BOOT0); +be_define_const_str(SHELLY_DIMMER_BOOT0, "SHELLY_DIMMER_BOOT0", 2948777716u, 0, 19, &be_const_str__available); +be_define_const_str(_available, "_available", 1306196581u, 0, 10, NULL); +be_define_const_str(ILI9341_DC, "ILI9341_DC", 28838624u, 0, 10, &be_const_str_push); +be_define_const_str(push, "push", 2272264157u, 0, 4, &be_const_str_wire1); +be_define_const_str(wire1, "wire1", 3212721419u, 0, 5, NULL); +be_define_const_str(lv_switch, "lv_switch", 3407171508u, 0, 9, &be_const_str_remove); +be_define_const_str(remove, "remove", 3683784189u, 0, 6, &be_const_str_continue); +be_define_const_str(continue, "continue", 2977070660u, 59, 8, NULL); +be_define_const_str(TM1638CLK, "TM1638CLK", 3045182446u, 0, 9, NULL); +be_define_const_str(MCP39F5_RST, "MCP39F5_RST", 3657125652u, 0, 11, &be_const_str_try_rule); +be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, NULL); +be_define_const_str(lv_imgbtn, "lv_imgbtn", 2402844429u, 0, 9, NULL); +be_define_const_str(bus, "bus", 1607822841u, 0, 3, NULL); +be_define_const_str(WIEGAND_D1, "WIEGAND_D1", 4175558140u, 0, 10, &be_const_str_bytes); +be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, &be_const_str_cmd); +be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, &be_const_str_lv_bar); +be_define_const_str(lv_bar, "lv_bar", 1582673229u, 0, 6, &be_const_str_resp_cmnd_error); +be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, NULL); +be_define_const_str(SYMBOL_BLUETOOTH, "SYMBOL_BLUETOOTH", 679376572u, 0, 16, &be_const_str_real); +be_define_const_str(real, "real", 3604983901u, 0, 4, &be_const_str_wire2); +be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, NULL); +be_define_const_str(GPS_TX, "GPS_TX", 4228740808u, 0, 6, &be_const_str_HM10_TX); +be_define_const_str(HM10_TX, "HM10_TX", 1522037252u, 0, 7, &be_const_str_ZEROCROSS); +be_define_const_str(ZEROCROSS, "ZEROCROSS", 1747596785u, 0, 9, &be_const_str_get_ver_res); +be_define_const_str(get_ver_res, "get_ver_res", 4160557208u, 0, 11, NULL); +be_define_const_str(input, "input", 4191711099u, 0, 5, &be_const_str_rad); +be_define_const_str(rad, "rad", 1358899048u, 0, 3, &be_const_str_toupper); be_define_const_str(toupper, "toupper", 3691983576u, 0, 7, NULL); -be_define_const_str(get_from_btn, "get_from_btn", 2802016263u, 0, 12, &be_const_str_get_style_border_blend_mode); -be_define_const_str(get_style_border_blend_mode, "get_style_border_blend_mode", 2498951334u, 0, 27, &be_const_str_set_margin_top); -be_define_const_str(set_margin_top, "set_margin_top", 805678094u, 0, 14, NULL); -be_define_const_str(BORDER_SIDE_NONE, "BORDER_SIDE_NONE", 3808959734u, 0, 16, &be_const_str_set_anim_time); -be_define_const_str(set_anim_time, "set_anim_time", 1473685427u, 0, 13, NULL); -be_define_const_str(set_outline_color, "set_outline_color", 3028574774u, 0, 17, &be_const_str_set_step); -be_define_const_str(set_step, "set_step", 2114390790u, 0, 8, NULL); -be_define_const_str(ALIGN_IN_TOP_RIGHT, "ALIGN_IN_TOP_RIGHT", 3273089785u, 0, 18, NULL); -be_define_const_str(set_style_local_text_sel_bg_color, "set_style_local_text_sel_bg_color", 501411296u, 0, 33, NULL); -be_define_const_str(OBJ_PART_REAL_FIRST, "OBJ_PART_REAL_FIRST", 819443818u, 0, 19, &be_const_str_WEBCAM_SIOD); -be_define_const_str(WEBCAM_SIOD, "WEBCAM_SIOD", 302703242u, 0, 11, &be_const_str_decrement); -be_define_const_str(decrement, "decrement", 432748210u, 0, 9, NULL); -be_define_const_str(STATE_FOCUSED, "STATE_FOCUSED", 3780463572u, 0, 13, &be_const_str_SYMBOL_RIGHT); -be_define_const_str(SYMBOL_RIGHT, "SYMBOL_RIGHT", 2984010648u, 0, 12, &be_const_str_hittest); -be_define_const_str(hittest, "hittest", 4018046250u, 0, 7, &be_const_str_lv_style); -be_define_const_str(lv_style, "lv_style", 4151611549u, 0, 8, &be_const_str_try); -be_define_const_str(try, "try", 2887626766u, 68, 3, NULL); -be_define_const_str(set_refocus_policy, "set_refocus_policy", 3274550126u, 0, 18, NULL); -be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_get_mode); -be_define_const_str(get_mode, "get_mode", 4031647339u, 0, 8, NULL); -be_define_const_str(CPICKER_TYPE_DISC, "CPICKER_TYPE_DISC", 2110878147u, 0, 17, &be_const_str_get_click_focus); -be_define_const_str(get_click_focus, "get_click_focus", 1418740299u, 0, 15, &be_const_str_get_style_margin_bottom); -be_define_const_str(get_style_margin_bottom, "get_style_margin_bottom", 2589475122u, 0, 23, &be_const_str_get_style_scale_end_line_width); -be_define_const_str(get_style_scale_end_line_width, "get_style_scale_end_line_width", 1969204230u, 0, 30, NULL); -be_define_const_str(insert, "insert", 3332609576u, 0, 6, &be_const_str_lv_cont); -be_define_const_str(lv_cont, "lv_cont", 1391686552u, 0, 7, NULL); -be_define_const_str(FIT_NONE, "FIT_NONE", 692142959u, 0, 8, &be_const_str_GRAY); -be_define_const_str(GRAY, "GRAY", 4159498394u, 0, 4, &be_const_str_anim_cb); -be_define_const_str(anim_cb, "anim_cb", 2120778920u, 0, 7, &be_const_str_get_color_mode); -be_define_const_str(get_color_mode, "get_color_mode", 833403171u, 0, 14, NULL); -be_define_const_str(open, "open", 3546203337u, 0, 4, NULL); -be_define_const_str(FS_RES_NOT_EX, "FS_RES_NOT_EX", 3124641355u, 0, 13, &be_const_str_set_tab_name); -be_define_const_str(set_tab_name, "set_tab_name", 2075400175u, 0, 12, &be_const_str_title_set_alignment); -be_define_const_str(title_set_alignment, "title_set_alignment", 192669664u, 0, 19, NULL); -be_define_const_str(set_signal_cb, "set_signal_cb", 1476300744u, 0, 13, &be_const_str_set_y_range); -be_define_const_str(set_y_range, "set_y_range", 1531043725u, 0, 11, NULL); -be_define_const_str(TXT_FLAG_RECOLOR, "TXT_FLAG_RECOLOR", 2017218753u, 0, 16, NULL); -be_define_const_str(BTNMATRIX_CTRL_CHECKABLE, "BTNMATRIX_CTRL_CHECKABLE", 2892484613u, 0, 24, &be_const_str_OPA_COVER); -be_define_const_str(OPA_COVER, "OPA_COVER", 3000088857u, 0, 9, &be_const_str_init); +be_define_const_str(SPI_DC, "SPI_DC", 553259951u, 0, 6, &be_const_str__read); +be_define_const_str(_read, "_read", 346717030u, 0, 5, NULL); +be_define_const_str(CSE7766_RX, "CSE7766_RX", 1546766819u, 0, 10, &be_const_str_lv_checkbox); +be_define_const_str(lv_checkbox, "lv_checkbox", 7454841u, 0, 11, NULL); +be_define_const_str(TM1638STB, "TM1638STB", 823674593u, 0, 9, &be_const_str_event); +be_define_const_str(event, "event", 4264611999u, 0, 5, &be_const_str_lv_canvas); +be_define_const_str(lv_canvas, "lv_canvas", 142865412u, 0, 9, NULL); +be_define_const_str(SYMBOL_COPY, "SYMBOL_COPY", 4193681815u, 0, 11, &be_const_str_else); +be_define_const_str(else, "else", 3183434736u, 52, 4, NULL); +be_define_const_str(HX711_DAT, "HX711_DAT", 2935118250u, 0, 9, &be_const_str_WIEGAND_D0); +be_define_const_str(WIEGAND_D0, "WIEGAND_D0", 4192335759u, 0, 10, NULL); +be_define_const_str(OUTPUT_OPEN_DRAIN, "OUTPUT_OPEN_DRAIN", 2147249436u, 0, 17, &be_const_str_detect); +be_define_const_str(detect, "detect", 8884370u, 0, 6, NULL); +be_define_const_str(IBEACON_TX, "IBEACON_TX", 3471826977u, 0, 10, &be_const_str_classname); +be_define_const_str(classname, "classname", 1998589948u, 0, 9, &be_const_str_rand); +be_define_const_str(rand, "rand", 2711325910u, 0, 4, NULL); +be_define_const_str(BACKLIGHT, "BACKLIGHT", 3147761926u, 0, 9, NULL); +be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, &be_const_str_lv_color); +be_define_const_str(lv_color, "lv_color", 1419148319u, 0, 8, NULL); +be_define_const_str(ETH_PHY_POWER, "ETH_PHY_POWER", 487529454u, 0, 13, &be_const_str_HRE_DATA); +be_define_const_str(HRE_DATA, "HRE_DATA", 1820377643u, 0, 8, &be_const_str_SYMBOL_PLUS); +be_define_const_str(SYMBOL_PLUS, "SYMBOL_PLUS", 2860093262u, 0, 11, NULL); +be_define_const_str(dump, "dump", 3663001223u, 0, 4, NULL); +be_define_const_str(imax, "imax", 3084515410u, 0, 4, NULL); +be_define_const_str(SWT1, "SWT1", 805224112u, 0, 4, NULL); +be_define_const_str(PMS5003_TX, "PMS5003_TX", 3868169364u, 0, 10, &be_const_str_TFMINIPLUS_RX); +be_define_const_str(TFMINIPLUS_RX, "TFMINIPLUS_RX", 1522203935u, 0, 13, NULL); +be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_lv_table); +be_define_const_str(lv_table, "lv_table", 1675691020u, 0, 8, NULL); +be_define_const_str(clear, "clear", 1550717474u, 0, 5, NULL); +be_define_const_str(HX711_SCK, "HX711_SCK", 3785979404u, 0, 9, NULL); +be_define_const_str(DDSU666_TX, "DDSU666_TX", 1880604150u, 0, 10, NULL); +be_define_const_str(A4988_DIR, "A4988_DIR", 2223595843u, 0, 9, &be_const_str_WS2812); +be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, &be_const_str_map); +be_define_const_str(map, "map", 3751997361u, 0, 3, NULL); +be_define_const_str(dot_p, ".p", 1171526419u, 0, 2, &be_const_str_FTC532); +be_define_const_str(FTC532, "FTC532", 3182343438u, 0, 6, &be_const_str_LMT01); +be_define_const_str(LMT01, "LMT01", 2490623797u, 0, 5, &be_const_str_init); be_define_const_str(init, "init", 380752755u, 0, 4, NULL); +be_define_const_str(A4988_STP, "A4988_STP", 1622172049u, 0, 9, &be_const_str_ETH_PHY_MDC); +be_define_const_str(ETH_PHY_MDC, "ETH_PHY_MDC", 1519379581u, 0, 11, &be_const_str_floor); +be_define_const_str(floor, "floor", 3102149661u, 0, 5, NULL); +be_define_const_str(SPI_MOSI, "SPI_MOSI", 2494218614u, 0, 8, NULL); +be_define_const_str(copy, "copy", 3848464964u, 0, 4, &be_const_str_response_append); +be_define_const_str(response_append, "response_append", 450346371u, 0, 15, NULL); +be_define_const_str(lv_cont, "lv_cont", 1391686552u, 0, 7, NULL); +be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_IEM3000_TX); +be_define_const_str(IEM3000_TX, "IEM3000_TX", 1185907310u, 0, 10, &be_const_str_SYMBOL_NEXT); +be_define_const_str(SYMBOL_NEXT, "SYMBOL_NEXT", 1102844455u, 0, 11, &be_const_str_lv_calendar); +be_define_const_str(lv_calendar, "lv_calendar", 3284396894u, 0, 11, NULL); +be_define_const_str(SYMBOL_BULLET, "SYMBOL_BULLET", 587181862u, 0, 13, &be_const_str_keys); +be_define_const_str(keys, "keys", 4182378701u, 0, 4, NULL); +be_define_const_str(true, "true", 1303515621u, 61, 4, NULL); +be_define_const_str(hex, "hex", 4273249610u, 0, 3, NULL); +be_define_const_str(ILI9488_CS, "ILI9488_CS", 2363112073u, 0, 10, &be_const_str_NRG_CF1); +be_define_const_str(NRG_CF1, "NRG_CF1", 3292534757u, 0, 7, &be_const_str_SOLAXX1_TX); +be_define_const_str(SOLAXX1_TX, "SOLAXX1_TX", 903770840u, 0, 10, &be_const_str_WEBCAM_PSCLK); +be_define_const_str(WEBCAM_PSCLK, "WEBCAM_PSCLK", 3150007456u, 0, 12, NULL); +be_define_const_str(BS814_DAT, "BS814_DAT", 3620403837u, 0, 9, &be_const_str_OPTION_A); +be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, &be_const_str_count); +be_define_const_str(count, "count", 967958004u, 0, 5, NULL); +be_define_const_str(BOILER_OT_TX, "BOILER_OT_TX", 671743623u, 0, 12, &be_const_str_PULLDOWN); +be_define_const_str(PULLDOWN, "PULLDOWN", 1853074086u, 0, 8, &be_const_str_SYMBOL_BATTERY_EMPTY); +be_define_const_str(SYMBOL_BATTERY_EMPTY, "SYMBOL_BATTERY_EMPTY", 3945064277u, 0, 20, &be_const_str_exp); +be_define_const_str(exp, "exp", 1923516200u, 0, 3, NULL); +be_define_const_str(SR04_ECHO, "SR04_ECHO", 1906909592u, 0, 9, &be_const_str_tostring); +be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, NULL); +be_define_const_str(TASMOTACLIENT_RST, "TASMOTACLIENT_RST", 3326196213u, 0, 17, &be_const_str_get_power); +be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, NULL); +be_define_const_str(SAIR_TX, "SAIR_TX", 268017311u, 0, 7, &be_const_str_SDS0X1_TX); +be_define_const_str(SDS0X1_TX, "SDS0X1_TX", 165045983u, 0, 9, &be_const_str_yield); +be_define_const_str(yield, "yield", 1821831854u, 0, 5, NULL); +be_define_const_str(HPMA_RX, "HPMA_RX", 3462528998u, 0, 7, &be_const_str_MGC3130_XFER); +be_define_const_str(MGC3130_XFER, "MGC3130_XFER", 4178219131u, 0, 12, &be_const_str_TM1638DIO); +be_define_const_str(TM1638DIO, "TM1638DIO", 1408212414u, 0, 9, NULL); +be_define_const_str(LE01MR_TX, "LE01MR_TX", 1589687023u, 0, 9, NULL); +be_define_const_str(SSPI_MISO, "SSPI_MISO", 2485347173u, 0, 9, NULL); +be_define_const_str(KEY1_INV, "KEY1_INV", 263542563u, 0, 8, &be_const_str_SM16716_DAT); +be_define_const_str(SM16716_DAT, "SM16716_DAT", 1905621806u, 0, 11, &be_const_str_SM16716_SEL); +be_define_const_str(SM16716_SEL, "SM16716_SEL", 142377379u, 0, 11, &be_const_str_TASMOTACLIENT_RXD); +be_define_const_str(TASMOTACLIENT_RXD, "TASMOTACLIENT_RXD", 72868318u, 0, 17, &be_const_str_gamma10); +be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, NULL); +be_define_const_str(ZIGBEE_RST, "ZIGBEE_RST", 721588661u, 0, 10, NULL); +be_define_const_str(SM2135_DAT, "SM2135_DAT", 2882726942u, 0, 10, &be_const_str_SSPI_MOSI); +be_define_const_str(SSPI_MOSI, "SSPI_MOSI", 3745917497u, 0, 9, &be_const_str_TASMOTACLIENT_TXD); +be_define_const_str(TASMOTACLIENT_TXD, "TASMOTACLIENT_TXD", 1386193940u, 0, 17, &be_const_str_char); +be_define_const_str(char, "char", 2823553821u, 0, 4, &be_const_str_codedump); +be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, NULL); +be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, NULL); +be_define_const_str(pin, "pin", 1866532500u, 0, 3, NULL); +be_define_const_str(as, "as", 1579491469u, 67, 2, NULL); +be_define_const_str(KEY1_INV_NP, "KEY1_INV_NP", 3160558586u, 0, 11, NULL); +be_define_const_str(opt_eq, "==", 2431966415u, 0, 2, &be_const_str_EXS_ENABLE); +be_define_const_str(EXS_ENABLE, "EXS_ENABLE", 1896914313u, 0, 10, &be_const_str_RC522_RST); +be_define_const_str(RC522_RST, "RC522_RST", 720511443u, 0, 9, &be_const_str_lv_style); +be_define_const_str(lv_style, "lv_style", 4151611549u, 0, 8, &be_const_str_number); +be_define_const_str(number, "number", 467038368u, 0, 6, NULL); +be_define_const_str(lv_line, "lv_line", 2692732914u, 0, 7, NULL); +be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_web_add_main_button); +be_define_const_str(web_add_main_button, "web_add_main_button", 3960367664u, 0, 19, NULL); +be_define_const_str(HRXL_RX, "HRXL_RX", 92702006u, 0, 7, &be_const_str_OUTPUT); +be_define_const_str(OUTPUT, "OUTPUT", 1469629700u, 0, 6, &be_const_str_SYMBOL_DIRECTORY); +be_define_const_str(SYMBOL_DIRECTORY, "SYMBOL_DIRECTORY", 1886053449u, 0, 16, &be_const_str_TUYA_RX); +be_define_const_str(TUYA_RX, "TUYA_RX", 1609397679u, 0, 7, &be_const_str_abs); +be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_pi); +be_define_const_str(pi, "pi", 1213090802u, 0, 2, NULL); +be_define_const_str(HJL_CF, "HJL_CF", 786158487u, 0, 6, &be_const_str_INPUT); +be_define_const_str(INPUT, "INPUT", 1638025307u, 0, 5, &be_const_str___iterator__); +be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, NULL); +be_define_const_str(DHT22, "DHT22", 215937903u, 0, 5, &be_const_str_DI); +be_define_const_str(DI, "DI", 1070498734u, 0, 2, NULL); +be_define_const_str(CNTR1, "CNTR1", 510376965u, 0, 5, &be_const_str_lv_keyboard); +be_define_const_str(lv_keyboard, "lv_keyboard", 197530229u, 0, 11, NULL); +be_define_const_str(opt_connect, "..", 2748622605u, 0, 2, &be_const_str_EPD_DATA); +be_define_const_str(EPD_DATA, "EPD_DATA", 3799141097u, 0, 8, &be_const_str_lv_msgbox); +be_define_const_str(lv_msgbox, "lv_msgbox", 689085206u, 0, 9, NULL); +be_define_const_str(PROJECTOR_CTRL_TX, "PROJECTOR_CTRL_TX", 535811130u, 0, 17, &be_const_str_split); +be_define_const_str(split, "split", 2276994531u, 0, 5, &be_const_str_web_sensor); +be_define_const_str(web_sensor, "web_sensor", 2900096972u, 0, 10, NULL); +be_define_const_str(NRG_SEL, "NRG_SEL", 1771358125u, 0, 7, &be_const_str_SYMBOL_AUDIO); +be_define_const_str(SYMBOL_AUDIO, "SYMBOL_AUDIO", 3056537956u, 0, 12, &be_const_str__ccmd); +be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_false); +be_define_const_str(false, "false", 184981848u, 62, 5, NULL); +be_define_const_str(MCP39F5_RX, "MCP39F5_RX", 190458217u, 0, 10, NULL); +be_define_const_str(SYMBOL_DRIVE, "SYMBOL_DRIVE", 567203502u, 0, 12, &be_const_str_get_tasmota); +be_define_const_str(get_tasmota, "get_tasmota", 334356779u, 0, 11, &be_const_str_write); +be_define_const_str(write, "write", 3190202204u, 0, 5, NULL); +be_define_const_str(OLED_RESET, "OLED_RESET", 4048987655u, 0, 10, NULL); +be_define_const_str(SSPI_MAX31865_CS1, "SSPI_MAX31865_CS1", 1256578724u, 0, 17, &be_const_str_every_100ms); +be_define_const_str(every_100ms, "every_100ms", 1546407804u, 0, 11, NULL); +be_define_const_str(HLW_CF, "HLW_CF", 3982619486u, 0, 6, &be_const_str_SYMBOL_STOP); +be_define_const_str(SYMBOL_STOP, "SYMBOL_STOP", 2836505202u, 0, 11, &be_const_str_WEBCAM_HREF); +be_define_const_str(WEBCAM_HREF, "WEBCAM_HREF", 3161890024u, 0, 11, NULL); +be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, &be_const_str_except); +be_define_const_str(except, "except", 950914032u, 69, 6, NULL); +be_define_const_str(layer_sys, "layer_sys", 593658256u, 0, 9, NULL); +be_define_const_str(SYMBOL_PASTE, "SYMBOL_PASTE", 2281577421u, 0, 12, NULL); +be_define_const_str(TX2X_TXD_BLACK, "TX2X_TXD_BLACK", 956526176u, 0, 14, &be_const_str_do); +be_define_const_str(do, "do", 1646057492u, 65, 2, NULL); +be_define_const_str(SM2135_CLK, "SM2135_CLK", 2383410011u, 0, 10, &be_const_str_find_key_i); +be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, &be_const_str_load_font); +be_define_const_str(load_font, "load_font", 1875840019u, 0, 9, &be_const_str_write_bytes); +be_define_const_str(write_bytes, "write_bytes", 1227543792u, 0, 11, NULL); +be_define_const_str(A4988_ENA, "A4988_ENA", 1517502682u, 0, 9, &be_const_str_MIEL_HVAC_RX); +be_define_const_str(MIEL_HVAC_RX, "MIEL_HVAC_RX", 3720609648u, 0, 12, &be_const_str_SYMBOL_SHUFFLE); +be_define_const_str(SYMBOL_SHUFFLE, "SYMBOL_SHUFFLE", 1123310147u, 0, 14, NULL); +be_define_const_str(ADC_LIGHT, "ADC_LIGHT", 3982461502u, 0, 9, &be_const_str_SHELLY_DIMMER_RST_INV); +be_define_const_str(SHELLY_DIMMER_RST_INV, "SHELLY_DIMMER_RST_INV", 2366759773u, 0, 21, &be_const_str__cmd); +be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, &be_const_str_return); +be_define_const_str(return, "return", 2246981567u, 60, 6, NULL); +be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, NULL); +be_define_const_str(AZ_TXD, "AZ_TXD", 850268709u, 0, 6, NULL); +be_define_const_str(DHT11, "DHT11", 367083569u, 0, 5, &be_const_str_exec_cmd); +be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, &be_const_str_get); +be_define_const_str(get, "get", 1410115415u, 0, 3, &be_const_str_lv_tileview); +be_define_const_str(lv_tileview, "lv_tileview", 2419887973u, 0, 11, NULL); +be_define_const_str(MHZ_RXD, "MHZ_RXD", 328619727u, 0, 7, &be_const_str_SBR_RX); +be_define_const_str(SBR_RX, "SBR_RX", 3350999801u, 0, 6, NULL); +be_define_const_str(SDM72_RX, "SDM72_RX", 766750035u, 0, 8, &be_const_str_lv_font); +be_define_const_str(lv_font, "lv_font", 1550958453u, 0, 7, &be_const_str_seg7_font); +be_define_const_str(seg7_font, "seg7_font", 4099690689u, 0, 9, NULL); +be_define_const_str(DSB, "DSB", 98073254u, 0, 3, NULL); +be_define_const_str(SSD1351_CS, "SSD1351_CS", 488746042u, 0, 10, &be_const_str___upper__); +be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, NULL); +be_define_const_str(json_append, "json_append", 3002019284u, 0, 11, &be_const_str_srand); +be_define_const_str(srand, "srand", 465518633u, 0, 5, NULL); +be_define_const_str(OPEN_DRAIN, "OPEN_DRAIN", 677872608u, 0, 10, &be_const_str_PN532_RXD); +be_define_const_str(PN532_RXD, "PN532_RXD", 1780093022u, 0, 9, &be_const_str_SDM630_TX); +be_define_const_str(SDM630_TX, "SDM630_TX", 696213075u, 0, 9, &be_const_str_SSD1351_DC); +be_define_const_str(SSD1351_DC, "SSD1351_DC", 84950353u, 0, 10, &be_const_str_end); +be_define_const_str(end, "end", 1787721130u, 56, 3, NULL); +be_define_const_str(AS608_TX, "AS608_TX", 48630934u, 0, 8, &be_const_str_SYMBOL_DOWN); +be_define_const_str(SYMBOL_DOWN, "SYMBOL_DOWN", 1107513570u, 0, 11, &be_const_str_Wire); +be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, NULL); +be_define_const_str(NONE, "NONE", 1932136219u, 0, 4, &be_const_str_PN532_TXD); +be_define_const_str(PN532_TXD, "PN532_TXD", 3093418644u, 0, 9, &be_const_str_PZEM017_RX); +be_define_const_str(PZEM017_RX, "PZEM017_RX", 3227495894u, 0, 10, &be_const_str_SSPI_DC); +be_define_const_str(SSPI_DC, "SSPI_DC", 1782271864u, 0, 7, &be_const_str_SYMBOL_PAUSE); +be_define_const_str(SYMBOL_PAUSE, "SYMBOL_PAUSE", 641998172u, 0, 12, NULL); +be_define_const_str(PWM1_INV, "PWM1_INV", 3939021030u, 0, 8, &be_const_str_SYMBOL_NEW_LINE); +be_define_const_str(SYMBOL_NEW_LINE, "SYMBOL_NEW_LINE", 2014334315u, 0, 15, &be_const_str_tan); +be_define_const_str(tan, "tan", 2633446552u, 0, 3, NULL); +be_define_const_str(HIGH, "HIGH", 2066738941u, 0, 4, &be_const_str_SYMBOL_HOME); +be_define_const_str(SYMBOL_HOME, "SYMBOL_HOME", 730845525u, 0, 11, NULL); +be_define_const_str(ADC_RANGE, "ADC_RANGE", 3467329543u, 0, 9, &be_const_str_issubclass); +be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, NULL); +be_define_const_str(XPT2046_CS, "XPT2046_CS", 4049231042u, 0, 10, NULL); +be_define_const_str(WEBCAM_SIOC, "WEBCAM_SIOC", 218815147u, 0, 11, &be_const_str_for); +be_define_const_str(for, "for", 2901640080u, 54, 3, &be_const_str_import); +be_define_const_str(import, "import", 288002260u, 66, 6, NULL); +be_define_const_str(WEBCAM_HSD, "WEBCAM_HSD", 2648502504u, 0, 10, &be_const_str_digital_read); +be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, &be_const_str_imin); +be_define_const_str(imin, "imin", 2714127864u, 0, 4, NULL); +be_define_const_str(SSPI_CS, "SSPI_CS", 977784795u, 0, 7, NULL); +be_define_const_str(ADC_CT_POWER, "ADC_CT_POWER", 3382284599u, 0, 12, &be_const_str_SYMBOL_MUTE); +be_define_const_str(SYMBOL_MUTE, "SYMBOL_MUTE", 563116043u, 0, 11, &be_const_str_add); +be_define_const_str(add, "add", 993596020u, 0, 3, NULL); +be_define_const_str(ROT1A, "ROT1A", 759599716u, 0, 5, &be_const_str_ZIGBEE_TX); +be_define_const_str(ZIGBEE_TX, "ZIGBEE_TX", 25119256u, 0, 9, NULL); +be_define_const_str(DDS2382_TX, "DDS2382_TX", 1438117864u, 0, 10, &be_const_str_SYMBOL_UP); +be_define_const_str(SYMBOL_UP, "SYMBOL_UP", 3886401511u, 0, 9, &be_const_str_TELEINFO_ENABLE); +be_define_const_str(TELEINFO_ENABLE, "TELEINFO_ENABLE", 1600974501u, 0, 15, NULL); +be_define_const_str(HALLEFFECT, "HALLEFFECT", 3334305407u, 0, 10, &be_const_str_RXD); +be_define_const_str(RXD, "RXD", 2311579049u, 0, 3, &be_const_str_add_cmd); +be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, &be_const_str_scale_uint); +be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, NULL); +be_define_const_str(SPI_CS, "SPI_CS", 553701236u, 0, 6, NULL); +be_define_const_str(NRF24_CS, "NRF24_CS", 555833194u, 0, 8, NULL); static const bstring* const m_string_table[] = { - (const bstring *)&be_const_str_set_bg_angles, - (const bstring *)&be_const_str_BACKLIGHT, - (const bstring *)&be_const_str_ALIGN_OUT_TOP_MID, - NULL, - (const bstring *)&be_const_str_cut_text, - (const bstring *)&be_const_str_remove_all_objs, - (const bstring *)&be_const_str_input, - NULL, - (const bstring *)&be_const_str_HRE_CLOCK, - (const bstring *)&be_const_str_get_style_pattern_image, - (const bstring *)&be_const_str_STYLE_LINE_OPA, - NULL, - (const bstring *)&be_const_str_dot_p, - (const bstring *)&be_const_str_FS_RES_OUT_OF_MEM, - (const bstring *)&be_const_str_reset_style_list, - (const bstring *)&be_const_str_AZ_TXD, - (const bstring *)&be_const_str_MAX31855DO, - NULL, - (const bstring *)&be_const_str_HLW_CF, - (const bstring *)&be_const_str_del_char, - (const bstring *)&be_const_str_LAYOUT_PRETTY_BOTTOM, - (const bstring *)&be_const_str_KEY_UP, - (const bstring *)&be_const_str_DCKI, - (const bstring *)&be_const_str_TEAL, - (const bstring *)&be_const_str_INPUT, - NULL, - (const bstring *)&be_const_str_LE01MR_RX, - (const bstring *)&be_const_str_set_border_post, - NULL, - (const bstring *)&be_const_str_ALIGN_OUT_BOTTOM_RIGHT, - (const bstring *)&be_const_str_FS_RES_DENIED, - (const bstring *)&be_const_str_SYMBOL_VOLUME_MAX, - (const bstring *)&be_const_str_asstring, - (const bstring *)&be_const_str_PROJECTOR_CTRL_TX, - (const bstring *)&be_const_str_ARIRFRCV, - (const bstring *)&be_const_str_set_scrollable_fit, - NULL, - (const bstring *)&be_const_str_LED1_INV, - (const bstring *)&be_const_str_get_mirror, - (const bstring *)&be_const_str_EVENT_PRESSED, - (const bstring *)&be_const_str_FTC532, - NULL, - (const bstring *)&be_const_str_ANIM_ON, - (const bstring *)&be_const_str_EVENT_DRAG_THROW_BEGIN, - NULL, - (const bstring *)&be_const_str__write, - (const bstring *)&be_const_str_SDM120_TX, - (const bstring *)&be_const_str_PROTECT_NONE, - (const bstring *)&be_const_str_clear_selection, - (const bstring *)&be_const_str_TCP_TX, - (const bstring *)&be_const_str_set_scale_end_line_width, - (const bstring *)&be_const_str_del_async, - (const bstring *)&be_const_str_FS_RES_UNKNOWN, - (const bstring *)&be_const_str_finish_transitions, - (const bstring *)&be_const_str_get_hor_res, - (const bstring *)&be_const_str_LAYOUT_OFF, - (const bstring *)&be_const_str_TM1637DIO, - (const bstring *)&be_const_str_BTN_STATE_DISABLED, - (const bstring *)&be_const_str_get_group, - (const bstring *)&be_const_str_HALLEFFECT, - (const bstring *)&be_const_str_SCROLLBAR_MODE_UNHIDE, - (const bstring *)&be_const_str_SM2135_CLK, - (const bstring *)&be_const_str_SYMBOL_BATTERY_FULL, - (const bstring *)&be_const_str_EVENT_INSERT, - (const bstring *)&be_const_str_get_accepted_chars, - (const bstring *)&be_const_str_CNTR1_NP, - (const bstring *)&be_const_str_close, - (const bstring *)&be_const_str_TABVIEW_TAB_POS_TOP, - (const bstring *)&be_const_str_EVENT_GESTURE, - (const bstring *)&be_const_str_BORDER_SIDE_INTERNAL, - (const bstring *)&be_const_str_DEEPSLEEP, - (const bstring *)&be_const_str_LABEL_ALIGN_AUTO, - (const bstring *)&be_const_str_DISP_ROT_180, - (const bstring *)&be_const_str_SSD1351_CS, - (const bstring *)&be_const_str_ALIGN_IN_LEFT_MID, - (const bstring *)&be_const_str_EVENT_FOCUSED, - (const bstring *)&be_const_str_KEYBOARD_MODE_TEXT_LOWER, - (const bstring *)&be_const_str_GPS_RX, - (const bstring *)&be_const_str_report_style_mod, - (const bstring *)&be_const_str_isinstance, - (const bstring *)&be_const_str_set_user_data, - (const bstring *)&be_const_str_lv_indev, - NULL, - (const bstring *)&be_const_str_SSD1351_DC, - (const bstring *)&be_const_str_set_color, - (const bstring *)&be_const_str_FALLING, - (const bstring *)&be_const_str_json_append, - (const bstring *)&be_const_str_lv_win, - (const bstring *)&be_const_str_BTNMATRIX_CTRL_NO_REPEAT, - (const bstring *)&be_const_str_reset, - (const bstring *)&be_const_str_BLACK, - (const bstring *)&be_const_str_DROPDOWN_DIR_UP, - (const bstring *)&be_const_str_get_tab, - (const bstring *)&be_const_str_KEY1_NP, - (const bstring *)&be_const_str_get_show_selected, - (const bstring *)&be_const_str_set_secondary_y_tick_length, - NULL, - (const bstring *)&be_const_str_I2C_SCL, - (const bstring *)&be_const_str_PWM1_INV, - (const bstring *)&be_const_str_SYMBOL_EDIT, - (const bstring *)&be_const_str_DHT22, - (const bstring *)&be_const_str_align_mid_y, - (const bstring *)&be_const_str_get_one_line, - (const bstring *)&be_const_str_CHART_CURSOR_LEFT, - NULL, - (const bstring *)&be_const_str_WINDMETER_SPEED, - (const bstring *)&be_const_str_KEY_LEFT, - (const bstring *)&be_const_str_DROPDOWN_DIR_LEFT, - (const bstring *)&be_const_str_STYLE_OUTLINE_PAD, - (const bstring *)&be_const_str_set_shadow_ofs_y, - NULL, - (const bstring *)&be_const_str_ILI9488_CS, - (const bstring *)&be_const_str_ZIGBEE_TX, - NULL, - (const bstring *)&be_const_str_event, - (const bstring *)&be_const_str_load_freetype_font, - (const bstring *)&be_const_str_IBEACON_TX, - (const bstring *)&be_const_str_write, - (const bstring *)&be_const_str_EXS_ENABLE, - NULL, - NULL, - (const bstring *)&be_const_str_IRRECV, - NULL, - (const bstring *)&be_const_str_HIGH, - (const bstring *)&be_const_str_EPAPER42_CS, - (const bstring *)&be_const_str_TX2X_TXD_BLACK, - (const bstring *)&be_const_str_TELEINFO_ENABLE, - (const bstring *)&be_const_str_STYLE_PATTERN_BLEND_MODE, - (const bstring *)&be_const_str_NRF24_DC, - (const bstring *)&be_const_str_MAX31855CS, - (const bstring *)&be_const_str_SYMBOL_UPLOAD, - (const bstring *)&be_const_str_STYLE_TEXT_LETTER_SPACE, - (const bstring *)&be_const_str_GPS_TX, - (const bstring *)&be_const_str_TABVIEW_TAB_POS_RIGHT, - (const bstring *)&be_const_str_BAR_TYPE_NORMAL, - (const bstring *)&be_const_str_ZIGBEE_RST, - (const bstring *)&be_const_str_GREEN, - (const bstring *)&be_const_str_DHT11, - (const bstring *)&be_const_str_ELECTRIQ_MOODL_TX, - (const bstring *)&be_const_str_FIT_PARENT, - (const bstring *)&be_const_str_attrdump, - NULL, - (const bstring *)&be_const_str_STYLE_LINE_WIDTH, - (const bstring *)&be_const_str_get_color_mode_fixed, - (const bstring *)&be_const_str_ALIGN_OUT_LEFT_BOTTOM, - (const bstring *)&be_const_str_get_start_value, - (const bstring *)&be_const_str_BLEND_MODE_SUBTRACTIVE, - (const bstring *)&be_const_str_set_shadow_ofs_x, - NULL, - NULL, - (const bstring *)&be_const_str_ADC_TEMP, - NULL, - (const bstring *)&be_const_str_BOILER_OT_TX, - (const bstring *)&be_const_str_clear, - NULL, - (const bstring *)&be_const_str_get_base_dir, - (const bstring *)&be_const_str_get_style_pattern_opa, - NULL, - (const bstring *)&be_const_str_set_fit2, - (const bstring *)&be_const_str_set_col_width, - (const bstring *)&be_const_str_get_style_transition_time, - (const bstring *)&be_const_str_get_style_value_color, - (const bstring *)&be_const_str_STYLE_PATTERN_OPA, - (const bstring *)&be_const_str_STYLE_VALUE_LETTER_SPACE, - NULL, - (const bstring *)&be_const_str_LABEL_LONG_SROLL_CIRC, - (const bstring *)&be_const_str_HM10_RX, - (const bstring *)&be_const_str_get_label_count, - (const bstring *)&be_const_str_DDSU666_TX, - (const bstring *)&be_const_str_DISP_ROT_90, - (const bstring *)&be_const_str_SPI_CS, - (const bstring *)&be_const_str_init_draw_label_dsc, - NULL, - (const bstring *)&be_const_str_tostring, - (const bstring *)&be_const_str_CC1101_GDO2, - (const bstring *)&be_const_str_WEBCAM_SIOC, - (const bstring *)&be_const_str_IEM3000_TX, - NULL, - (const bstring *)&be_const_str_pop, - (const bstring *)&be_const_str_BTN_STATE_RELEASED, - (const bstring *)&be_const_str_SYMBOL_PLAY, - NULL, - (const bstring *)&be_const_str_get_btn_text, - (const bstring *)&be_const_str_WEBCAM_PWDN, - (const bstring *)&be_const_str_set_style_local_margin_right, - (const bstring *)&be_const_str_set_style_local_scale_border_width, - (const bstring *)&be_const_str_get_y_from_index, - (const bstring *)&be_const_str_SM16716_DAT, - (const bstring *)&be_const_str_FS_RES_TOUT, - (const bstring *)&be_const_str_set_style_local_line_dash_gap, - (const bstring *)&be_const_str_STYLE_OUTLINE_COLOR, - (const bstring *)&be_const_str_MGC3130_RESET, - (const bstring *)&be_const_str_get_protect, - NULL, - NULL, - (const bstring *)&be_const_str_LIST_PART_BG, - (const bstring *)&be_const_str_draw_text, - (const bstring *)&be_const_str_get_style_transition_prop_6, - (const bstring *)&be_const_str_fade_out, - (const bstring *)&be_const_str_BTN_STATE_PRESSED, - (const bstring *)&be_const_str_set_transition_delay, - (const bstring *)&be_const_str_STYLE_TRANSITION_DELAY, - (const bstring *)&be_const_str_SAIR_RX, - (const bstring *)&be_const_str_STYLE_BORDER_COLOR, - (const bstring *)&be_const_str_KEYBOARD_PART_BG, - (const bstring *)&be_const_str_FS_RES_NOT_IMP, - NULL, - (const bstring *)&be_const_str_LIST_PART_EDGE_FLASH, - (const bstring *)&be_const_str_raise, - (const bstring *)&be_const_str_MIEL_HVAC_TX, - (const bstring *)&be_const_str_get_bg_angle_end, - (const bstring *)&be_const_str_GAUGE_PART_MAIN, - NULL, - (const bstring *)&be_const_str_OUTPUT_OPEN_DRAIN, - (const bstring *)&be_const_str_DHT11_OUT, - NULL, - (const bstring *)&be_const_str_get_style_shadow_color, - (const bstring *)&be_const_str_PROJECTOR_CTRL_RX, - (const bstring *)&be_const_str_copy, - (const bstring *)&be_const_str_MIEL_HVAC_RX, - (const bstring *)&be_const_str_set_style_local_value_line_space, - (const bstring *)&be_const_str_CHART_PART_SERIES_BG, - (const bstring *)&be_const_str_FS_MODE_RD, - (const bstring *)&be_const_str_AZ_RXD, - NULL, - (const bstring *)&be_const_str_STYLE_TEXT_BLEND_MODE, - (const bstring *)&be_const_str_lv_chart, - (const bstring *)&be_const_str_update_mask, - (const bstring *)&be_const_str_ARC_PART_KNOB, - (const bstring *)&be_const_str_RXD, - (const bstring *)&be_const_str_get_x_start_point, - (const bstring *)&be_const_str_remove_prop, - NULL, - (const bstring *)&be_const_str_add_tab, - (const bstring *)&be_const_str_CPICKER_COLOR_MODE_HUE, - (const bstring *)&be_const_str_KEYBOARD_MODE_TEXT_UPPER, - (const bstring *)&be_const_str_get_content, - (const bstring *)&be_const_str_start_edge_flash, - (const bstring *)&be_const_str_set_style_local_pad_bottom, - (const bstring *)&be_const_str_get_focused_obj, - (const bstring *)&be_const_str_DRAG_DIR_BOTH, - (const bstring *)&be_const_str_STYLE_TRANSITION_PROP_6, - NULL, - (const bstring *)&be_const_str_STYLE_MARGIN_RIGHT, - (const bstring *)&be_const_str_CHART_AXIS_SECONDARY_Y, - (const bstring *)&be_const_str_is_visible, - (const bstring *)&be_const_str_EVENT_DELETE, - (const bstring *)&be_const_str_find_key_i, - (const bstring *)&be_const_str_get_style_value_line_space, - (const bstring *)&be_const_str_LAYOUT_ROW_MID, - (const bstring *)&be_const_str_CC1101_GDO0, - (const bstring *)&be_const_str_classof, - (const bstring *)&be_const_str_exec_rules, - (const bstring *)&be_const_str_KEY_ESC, - (const bstring *)&be_const_str_get_pivot, - (const bstring *)&be_const_str_BTNMATRIX_CTRL_HIDDEN, - (const bstring *)&be_const_str_RC522_RST, - (const bstring *)&be_const_str_set_cell_type, - (const bstring *)&be_const_str_SLIDER_TYPE_NORMAL, - (const bstring *)&be_const_str_true, - (const bstring *)&be_const_str_set_line_blend_mode, - (const bstring *)&be_const_str_LABEL_LONG_CROP, - NULL, - NULL, - (const bstring *)&be_const_str_CHART_CURSOR_UP, - (const bstring *)&be_const_str_OUTPUT, - (const bstring *)&be_const_str_EVENT_APPLY, - (const bstring *)&be_const_str_STYLE_LINE_ROUNDED, - (const bstring *)&be_const_str_get_ext_click_pad_right, - NULL, - (const bstring *)&be_const_str_WIEGAND_D0, - (const bstring *)&be_const_str_OPA_80, - (const bstring *)&be_const_str_CHECKBOX_PART_BULLET, - (const bstring *)&be_const_str_get_style_transition_prop_4, - (const bstring *)&be_const_str_STATE_EDITED, - (const bstring *)&be_const_str_WEBCAM_DATA, - NULL, - (const bstring *)&be_const_str_LMT01, - (const bstring *)&be_const_str_SSPI_CS, - (const bstring *)&be_const_str_KEY_HOME, - (const bstring *)&be_const_str_EVENT_DRAG_END, - (const bstring *)&be_const_str_keys, - (const bstring *)&be_const_str__request_from, - (const bstring *)&be_const_str_get_needle_count, - (const bstring *)&be_const_str_get_style_bg_main_stop, - NULL, - (const bstring *)&be_const_str_KEY_DOWN, - (const bstring *)&be_const_str_SYMBOL_BELL, - NULL, - (const bstring *)&be_const_str_get_style_value_align, - (const bstring *)&be_const_str_FIT_MAX, - (const bstring *)&be_const_str_SPINNER_TYPE_SPINNING_ARC, - (const bstring *)&be_const_str_SYMBOL_COPY, - (const bstring *)&be_const_str_opt_eq, - (const bstring *)&be_const_str_get_height_fit, - (const bstring *)&be_const_str_STYLE_PAD_INNER, - (const bstring *)&be_const_str_atan, - NULL, - NULL, - (const bstring *)&be_const_str_SYMBOL_DRIVE, - (const bstring *)&be_const_str_set_style_local_border_width, - (const bstring *)&be_const_str_lv_objmask, - (const bstring *)&be_const_str_scroll_hor, - (const bstring *)&be_const_str_STATE_DISABLED, - NULL, - (const bstring *)&be_const_str_CPICKER_COLOR_MODE_VALUE, - (const bstring *)&be_const_str_KEY1, - (const bstring *)&be_const_str_enable, - (const bstring *)&be_const_str_WIEGAND_D1, - (const bstring *)&be_const_str_DROPDOWN_PART_SCROLLBAR, - NULL, - (const bstring *)&be_const_str_LAYOUT_PRETTY_MID, - (const bstring *)&be_const_str_ALIGN_OUT_RIGHT_TOP, - (const bstring *)&be_const_str_cursor_right, - (const bstring *)&be_const_str_layer_top, - (const bstring *)&be_const_str_set_style_local_transform_zoom, - NULL, - (const bstring *)&be_const_str_STYLE_TRANSITION_PROP_4, - (const bstring *)&be_const_str_PMS5003_TX, - (const bstring *)&be_const_str_get_style_pattern_recolor_opa, - (const bstring *)&be_const_str_HX711_SCK, - NULL, - (const bstring *)&be_const_str_STYLE_LINE_COLOR, - (const bstring *)&be_const_str_STYLE_VALUE_FONT, - NULL, - NULL, - (const bstring *)&be_const_str_LAYOUT_CENTER, - (const bstring *)&be_const_str_GRAD_DIR_HOR, - (const bstring *)&be_const_str_A4988_ENA, (const bstring *)&be_const_str_ADE7953_IRQ, - (const bstring *)&be_const_str_get_style_bg_grad_dir, - (const bstring *)&be_const_str_increment, - (const bstring *)&be_const_str_LABEL_ALIGN_LEFT, + (const bstring *)&be_const_str_TASMOTACLIENT_RST_INV, + (const bstring *)&be_const_str_SYMBOL_CHARGE, + (const bstring *)&be_const_str_opt_neq, + (const bstring *)&be_const_str_LOW, + (const bstring *)&be_const_str_MP3_DFR562, + (const bstring *)&be_const_str_opt_add, + (const bstring *)&be_const_str_ADC_BUTTON, (const bstring *)&be_const_str_SYMBOL_EJECT, - (const bstring *)&be_const_str_STYLE_PAD_RIGHT, - (const bstring *)&be_const_str_PROTECT_CLICK_FOCUS, - (const bstring *)&be_const_str_TASMOTACLIENT_RST, + (const bstring *)&be_const_str_SDM630_RX, + (const bstring *)&be_const_str_ARIRFRCV, + (const bstring *)&be_const_str_SYMBOL_SD_CARD, + (const bstring *)&be_const_str_HRE_CLOCK, NULL, - (const bstring *)&be_const_str_OBJMASK_PART_MAIN, - NULL, - (const bstring *)&be_const_str_get_btnmatrix, - (const bstring *)&be_const_str_lv_switch, - (const bstring *)&be_const_str_SSPI, - (const bstring *)&be_const_str_DRAG_DIR_HOR, - (const bstring *)&be_const_str_get_one_check, - (const bstring *)&be_const_str_set_y, - (const bstring *)&be_const_str_TEXT_DECOR_NONE, - (const bstring *)&be_const_str_ALIGN_IN_BOTTOM_MID, - (const bstring *)&be_const_str_get_style_size, - (const bstring *)&be_const_str_get_style_transition_prop_2, - (const bstring *)&be_const_str_HM10_TX, - (const bstring *)&be_const_str_else, - (const bstring *)&be_const_str_ceil, - (const bstring *)&be_const_str_get_edge_flash, - (const bstring *)&be_const_str_get_scrl_layout, - (const bstring *)&be_const_str_STYLE_TRANSITION_PROP_5, - (const bstring *)&be_const_str_SDM120_RX, - (const bstring *)&be_const_str_INDEV_STATE_REL, - (const bstring *)&be_const_str_hide_series, + (const bstring *)&be_const_str_LEDLNK_INV, + (const bstring *)&be_const_str_deg, + (const bstring *)&be_const_str_HM10_RX, + (const bstring *)&be_const_str_SYMBOL_MINUS, + (const bstring *)&be_const_str_NRF24_DC, NULL, (const bstring *)&be_const_str_IBEACON_RX, - (const bstring *)&be_const_str_set_col_cnt, - (const bstring *)&be_const_str_ILI9341_CS, - NULL, - (const bstring *)&be_const_str_get_btn_label, - NULL, - (const bstring *)&be_const_str_get_dir, - (const bstring *)&be_const_str_RISING, - (const bstring *)&be_const_str_set_design_cb, - NULL, - (const bstring *)&be_const_str_get_tile_act, - (const bstring *)&be_const_str_GRAD_DIR_NONE, - (const bstring *)&be_const_str_get_style_line_width, - (const bstring *)&be_const_str_set_btn_width, - (const bstring *)&be_const_str_TABVIEW_TAB_POS_BOTTOM, - (const bstring *)&be_const_str_ALIGN_IN_TOP_LEFT, - (const bstring *)&be_const_str_EVENT_DEFOCUSED, - (const bstring *)&be_const_str_MCP39F5_RX, - (const bstring *)&be_const_str_add_char, - (const bstring *)&be_const_str_count_children, - (const bstring *)&be_const_str_align_x, - (const bstring *)&be_const_str_LABEL_LONG_EXPAND, - (const bstring *)&be_const_str_PROTECT_FOLLOW, - (const bstring *)&be_const_str_SHELLY_DIMMER_RST_INV, - (const bstring *)&be_const_str_send_data, - NULL, - (const bstring *)&be_const_str_ALIGN_OUT_RIGHT_BOTTOM, - (const bstring *)&be_const_str_get_style_line_dash_gap, - (const bstring *)&be_const_str_set_style_local_pattern_blend_mode, - (const bstring *)&be_const_str_add_element, - (const bstring *)&be_const_str_KEY_ENTER, - (const bstring *)&be_const_str_BLEND_MODE_NORMAL, - NULL, - (const bstring *)&be_const_str_STYLE_TRANSITION_PROP_2, - NULL, - (const bstring *)&be_const_str_get_x, - (const bstring *)&be_const_str_CHART_TYPE_NONE, - (const bstring *)&be_const_str_LE01MR_TX, - (const bstring *)&be_const_str_get_active_btn_text, - NULL, - (const bstring *)&be_const_str_ILI9341_DC, - NULL, - NULL, - (const bstring *)&be_const_str_set_dir, - (const bstring *)&be_const_str_DROPDOWN_DIR_DOWN, - (const bstring *)&be_const_str_SYMBOL_NEW_LINE, - (const bstring *)&be_const_str_CHART_AXIS_INVERSE_LABELS_ORDER, - (const bstring *)&be_const_str_RC522_CS, - (const bstring *)&be_const_str_Driver, - (const bstring *)&be_const_str_collect, - (const bstring *)&be_const_str_set_style_local_line_rounded, - (const bstring *)&be_const_str_SSPI_MOSI, - (const bstring *)&be_const_str_CHANGE, - (const bstring *)&be_const_str_STYLE_BORDER_BLEND_MODE, - (const bstring *)&be_const_str_get_point_count, - NULL, - (const bstring *)&be_const_str_BORDER_SIDE_TOP, - (const bstring *)&be_const_str_get_style_outline_opa, - (const bstring *)&be_const_str_STYLE_VALUE_LINE_SPACE, - (const bstring *)&be_const_str_MAX7219CLK, - (const bstring *)&be_const_str_HJL_CF, - (const bstring *)&be_const_str_ETH_PHY_MDIO, - (const bstring *)&be_const_str_set_adv_hittest, - (const bstring *)&be_const_str_opt_add, - (const bstring *)&be_const_str_ALIGN_IN_RIGHT_MID, - (const bstring *)&be_const_str_BUZZER, - (const bstring *)&be_const_str_KEY1_TC, - (const bstring *)&be_const_str_DRAG_DIR_VER, - (const bstring *)&be_const_str_CALENDAR_PART_BG, - (const bstring *)&be_const_str_EVENT_RELEASED, - (const bstring *)&be_const_str_LAYOUT_COLUMN_LEFT, - (const bstring *)&be_const_str_STYLE_TRANSITION_PROP_3, - (const bstring *)&be_const_str_DSB, - NULL, - (const bstring *)&be_const_str_CALENDAR_PART_DATE, - (const bstring *)&be_const_str_WEBCAM_PSCLK, - (const bstring *)&be_const_str_find, - (const bstring *)&be_const_str_PULLUP, - (const bstring *)&be_const_str_ADC_PH, - (const bstring *)&be_const_str_sinh, - NULL, - (const bstring *)&be_const_str_get_focused_btn, - (const bstring *)&be_const_str_GAUGE_PART_NEEDLE, - (const bstring *)&be_const_str_KEY_NEXT, - (const bstring *)&be_const_str_CHART_TYPE_COLUMN, - (const bstring *)&be_const_str_CHART_AXIS_DRAW_LAST_TICK, - (const bstring *)&be_const_str_SAIR_TX, - (const bstring *)&be_const_str_PROTECT_POS, - (const bstring *)&be_const_str_get_style_transform_height, - (const bstring *)&be_const_str_P9813_DAT, - NULL, - (const bstring *)&be_const_str_get_day_of_week, - (const bstring *)&be_const_str_calldepth, - (const bstring *)&be_const_str_Tasmota, - (const bstring *)&be_const_str_CPICKER_TYPE_RECT, - (const bstring *)&be_const_str_BL0940_RX, - (const bstring *)&be_const_str_ARC_PART_INDIC, - (const bstring *)&be_const_str_OPA_60, - (const bstring *)&be_const_str_get_scrl_fit_bottom, - (const bstring *)&be_const_str_STYLE_BG_OPA, - (const bstring *)&be_const_str_chars_in_string, - (const bstring *)&be_const_str_PROTECT_CHILD_CHG, - (const bstring *)&be_const_str_MHZ_TXD, - (const bstring *)&be_const_str_fromstring, - (const bstring *)&be_const_str_get_height_grid, - (const bstring *)&be_const_str_DSB_OUT, - (const bstring *)&be_const_str_get_style_border_side, - NULL, - (const bstring *)&be_const_str_get_sb_mode, - (const bstring *)&be_const_str_CHART_CURSOR_NONE, - (const bstring *)&be_const_str_set_btn_ctrl, - NULL, - (const bstring *)&be_const_str_get_style_scale_end_color, - NULL, - (const bstring *)&be_const_str_del, - (const bstring *)&be_const_str_SDS0X1_RX, - (const bstring *)&be_const_str_remove, - (const bstring *)&be_const_str_PROTECT_EVENT_TO_DISABLED, - NULL, - (const bstring *)&be_const_str_REL1, - (const bstring *)&be_const_str_WE517_TX, - (const bstring *)&be_const_str_NRF24_CS, - (const bstring *)&be_const_str_CALENDAR_PART_DAY_NAMES, - (const bstring *)&be_const_str_BORDER_SIDE_FULL, - (const bstring *)&be_const_str_ALIGN_OUT_BOTTOM_LEFT, - (const bstring *)&be_const_str_get_offset_x, - (const bstring *)&be_const_str_SYMBOL_VOLUME_MID, - (const bstring *)&be_const_str_A4988_MS1, - (const bstring *)&be_const_str_get_next_btn, - (const bstring *)&be_const_str_LIST_PART_SCROLLBAR, - (const bstring *)&be_const_str_get_needle_img_pivot_x, - (const bstring *)&be_const_str_BTNMATRIX_CTRL_CLICK_TRIG, - (const bstring *)&be_const_str_get_angle_start, - (const bstring *)&be_const_str_OPA_0, - (const bstring *)&be_const_str_resize, - (const bstring *)&be_const_str_SYMBOL_GPS, - (const bstring *)&be_const_str_PN532_TXD, - (const bstring *)&be_const_str_get_local_style, - (const bstring *)&be_const_str_I2C_SDA, - (const bstring *)&be_const_str_set_y_invert, - (const bstring *)&be_const_str_set_one_check, - NULL, - (const bstring *)&be_const_str_get_align, - (const bstring *)&be_const_str_SYMBOL_DIRECTORY, - (const bstring *)&be_const_str_set_chg_rate, - (const bstring *)&be_const_str_STYLE_SIZE, - (const bstring *)&be_const_str_EVENT_LONG_PRESSED_REPEAT, - (const bstring *)&be_const_str_FIT_TIGHT, - (const bstring *)&be_const_str_TABVIEW_TAB_POS_LEFT, - (const bstring *)&be_const_str_get_layout, - NULL, - (const bstring *)&be_const_str_STYLE_SHADOW_WIDTH, - (const bstring *)&be_const_str_DROPDOWN_PART_SELECTED, - (const bstring *)&be_const_str_set_pattern_opa, - NULL, - (const bstring *)&be_const_str_LINEMETER_PART_MAIN, - (const bstring *)&be_const_str_AQUA, - (const bstring *)&be_const_str_DISP_SIZE_SMALL, - NULL, - NULL, - (const bstring *)&be_const_str_STATE_HOVERED, - (const bstring *)&be_const_str_ALIGN_OUT_LEFT_TOP, - (const bstring *)&be_const_str_OLED_RESET, - NULL, - (const bstring *)&be_const_str_KEYBOARD_MODE_SPECIAL, - (const bstring *)&be_const_str_opt_neq, - (const bstring *)&be_const_str_WEBCAM_VSYNC, - NULL, - (const bstring *)&be_const_str_LED_PART_MAIN, - (const bstring *)&be_const_str_STYLE_IMAGE_BLEND_MODE, - (const bstring *)&be_const_str_get_ext_click_pad_bottom, - (const bstring *)&be_const_str_STYLE_BORDER_POST, - NULL, - (const bstring *)&be_const_str_get_style_shadow_opa, - (const bstring *)&be_const_str_set_style_local_pattern_image, - NULL, - (const bstring *)&be_const_str_KEY1_INV, - (const bstring *)&be_const_str_get_angle_end, - NULL, - (const bstring *)&be_const_str_PWM1, - (const bstring *)&be_const_str_SSPI_MAX31865_CS1, - (const bstring *)&be_const_str_get_ext_click_pad_top, - (const bstring *)&be_const_str_set_start_angle, - (const bstring *)&be_const_str_ROT1B, - (const bstring *)&be_const_str_FS_RES_BUSY, - (const bstring *)&be_const_str_set_fit, - (const bstring *)&be_const_str_SYMBOL_BULLET, - (const bstring *)&be_const_str_FS_RES_OK, - (const bstring *)&be_const_str_BUZZER_INV, - (const bstring *)&be_const_str_get_auto_fit, - (const bstring *)&be_const_str_SCROLLBAR_MODE_HIDE, - (const bstring *)&be_const_str_ADC_RANGE, - (const bstring *)&be_const_str_SPI_MOSI, - (const bstring *)&be_const_str_set_style_local_pattern_recolor, - NULL, - (const bstring *)&be_const_str_ADC_INPUT, - (const bstring *)&be_const_str_set_div_line_count, - (const bstring *)&be_const_str_reverse_gamma10, - (const bstring *)&be_const_str_SYMBOL_BATTERY_2, - (const bstring *)&be_const_str_CPICKER_PART_MAIN, - (const bstring *)&be_const_str_ADC_CT_POWER, - (const bstring *)&be_const_str_A4988_DIR, - (const bstring *)&be_const_str_NEOPOOL_RX, - (const bstring *)&be_const_str_HSPI, - NULL, - (const bstring *)&be_const_str_get_height, - (const bstring *)&be_const_str_get_letter_on, - (const bstring *)&be_const_str_CALENDAR_PART_HEADER, - (const bstring *)&be_const_str_BLUE, - (const bstring *)&be_const_str_STYLE_TRANSITION_PATH, - (const bstring *)&be_const_str_KEYBOARD_PART_BTN, - (const bstring *)&be_const_str_get_btn_img, - (const bstring *)&be_const_str_get_fit_left, - (const bstring *)&be_const_str_RFRECV, - (const bstring *)&be_const_str_set_click_focus, - NULL, - (const bstring *)&be_const_str_lv_calendar, - NULL, - (const bstring *)&be_const_str_STYLE_BG_GRAD_STOP, - (const bstring *)&be_const_str_DRAG_DIR_ONE, - (const bstring *)&be_const_str_count_children_recursive, - (const bstring *)&be_const_str_PZEM0XX_TX, - (const bstring *)&be_const_str_bus, - (const bstring *)&be_const_str_BS814_DAT, - NULL, - (const bstring *)&be_const_str_STYLE_VALUE_OFS_X, - (const bstring *)&be_const_str_OPA_TRANSP, - (const bstring *)&be_const_str_set_knob_colored, - (const bstring *)&be_const_str_PAGE_EDGE_LEFT, - (const bstring *)&be_const_str_ARC_TYPE_SYMMETRIC, - (const bstring *)&be_const_str_GESTURE_DIR_BOTTOM, - (const bstring *)&be_const_str_TASMOTACLIENT_RST_INV, - (const bstring *)&be_const_str_ROT1B_NP, - (const bstring *)&be_const_str_CHART_AXIS_SKIP_LAST_TICK, - (const bstring *)&be_const_str_CSE7766_RX, - (const bstring *)&be_const_str_TM1638CLK, - (const bstring *)&be_const_str_SYMBOL_BATTERY_1, - (const bstring *)&be_const_str_SI7021, - (const bstring *)&be_const_str_remove_style, - (const bstring *)&be_const_str_lv_btn, - (const bstring *)&be_const_str_CHART_CURSOR_RIGHT, - (const bstring *)&be_const_str_SYMBOL_SD_CARD, - (const bstring *)&be_const_str_set_style_local_bg_grad_color, - (const bstring *)&be_const_str_SYMBOL_EYE_OPEN, - NULL, - NULL, - (const bstring *)&be_const_str_clear_series, - (const bstring *)&be_const_str_LAYOUT_ROW_TOP, - (const bstring *)&be_const_str_OPA_70, - (const bstring *)&be_const_str_ARIRFSEL, - (const bstring *)&be_const_str_get_angle, - (const bstring *)&be_const_str_OPA_50, - (const bstring *)&be_const_str_get_pressed_cell, - (const bstring *)&be_const_str_get_scrl_fit_top, - NULL, - (const bstring *)&be_const_str_BAR_TYPE_CUSTOM, - (const bstring *)&be_const_str_ADC_BUTTON, - (const bstring *)&be_const_str_get_label, - (const bstring *)&be_const_str_LAYOUT_ROW_BOTTOM, - (const bstring *)&be_const_str_ROLLER_MODE_NORMAL, - (const bstring *)&be_const_str_STYLE_TEXT_FONT, - (const bstring *)&be_const_str_MAX7219CS, - (const bstring *)&be_const_str_CNTR1, - NULL, - (const bstring *)&be_const_str_A4988_STP, - (const bstring *)&be_const_str_get_style_image_blend_mode, - (const bstring *)&be_const_str_TXT_FLAG_NONE, - (const bstring *)&be_const_str_ETH_PHY_MDC, - (const bstring *)&be_const_str_clean_style_list, - (const bstring *)&be_const_str_INPUT_PULLUP, - (const bstring *)&be_const_str_get_width_grid, - (const bstring *)&be_const_str_set_style_local_border_side, - (const bstring *)&be_const_str_read, - (const bstring *)&be_const_str_SLIDER_TYPE_SYMMETRICAL, - (const bstring *)&be_const_str_BOILER_OT_RX, - (const bstring *)&be_const_str_button_pressed, - (const bstring *)&be_const_str_get_scrl_width, - (const bstring *)&be_const_str_STYLE_TRANSFORM_WIDTH, - (const bstring *)&be_const_str_get_style_pattern_blend_mode, - (const bstring *)&be_const_str_BLEND_MODE_ADDITIVE, - (const bstring *)&be_const_str_set_style_local_margin_bottom, - NULL, - (const bstring *)&be_const_str_OPA_20, - (const bstring *)&be_const_str_get, - (const bstring *)&be_const_str_blur_ver, - (const bstring *)&be_const_str_SDCARD_CS, - (const bstring *)&be_const_str_P9813_CLK, - (const bstring *)&be_const_str_ALIGN_OUT_LEFT_MID, - (const bstring *)&be_const_str_SYMBOL_TRASH, - (const bstring *)&be_const_str_BS814_CLK, - (const bstring *)&be_const_str_DDSU666_RX, - (const bstring *)&be_const_str_CSE7761_TX, - (const bstring *)&be_const_str_lv_linemeter, - (const bstring *)&be_const_str_set_style_local_image_opa, - (const bstring *)&be_const_str_BORDER_SIDE_BOTTOM, - (const bstring *)&be_const_str_get_recolor, - (const bstring *)&be_const_str_PAGE_EDGE_BOTTOM, - (const bstring *)&be_const_str_ALIGN_IN_BOTTOM_LEFT, - (const bstring *)&be_const_str_FS_MODE_WR, - (const bstring *)&be_const_str_acos, - (const bstring *)&be_const_str_STYLE_TEXT_LINE_SPACE, - (const bstring *)&be_const_str_MAROON, - (const bstring *)&be_const_str_BAR_TYPE_SYMMETRICAL, - (const bstring *)&be_const_str_SYMBOL_OK, - (const bstring *)&be_const_str_deinit, (const bstring *)&be_const_str_EPAPER29_CS, - (const bstring *)&be_const_str_get_scrl_height, - (const bstring *)&be_const_str_LABEL_LONG_BREAK, + (const bstring *)&be_const_str_ROT1B, + (const bstring *)&be_const_str_IRRECV, + (const bstring *)&be_const_str_pop, + (const bstring *)&be_const_str_lv_linemeter, + (const bstring *)&be_const_str_lv_btn, + (const bstring *)&be_const_str_SYMBOL_USB, + (const bstring *)&be_const_str_SYMBOL_BELL, NULL, - (const bstring *)&be_const_str_STYLE_TRANSFORM_ZOOM, - (const bstring *)&be_const_str_add_btn, - (const bstring *)&be_const_str_set_palette, - (const bstring *)&be_const_str_get_needle_img, - (const bstring *)&be_const_str_lv_list, - (const bstring *)&be_const_str_draw_rect, - (const bstring *)&be_const_str_ADC_JOY, - (const bstring *)&be_const_str_set_text_letter_space, - (const bstring *)&be_const_str_IRSEND, - (const bstring *)&be_const_str_STYLE_SHADOW_SPREAD, - (const bstring *)&be_const_str_PULLDOWN, - (const bstring *)&be_const_str_draw_img, - (const bstring *)&be_const_str_STYLE_LINE_DASH_GAP, - NULL, - (const bstring *)&be_const_str_get_parent_event, - NULL, - (const bstring *)&be_const_str_TM1638DIO, - (const bstring *)&be_const_str_LIME, - (const bstring *)&be_const_str_FS_RES_LOCKED, - (const bstring *)&be_const_str_TEMPL_STYLE_X, - (const bstring *)&be_const_str_get_scrl_fit_left, - (const bstring *)&be_const_str_EVENT_LONG_PRESSED, - NULL, - (const bstring *)&be_const_str_ADC_LIGHT, - (const bstring *)&be_const_str_SYMBOL_BATTERY_EMPTY, - NULL, - (const bstring *)&be_const_str_HX711_DAT, - (const bstring *)&be_const_str_get_style_border_color, - (const bstring *)&be_const_str_STYLE_SHADOW_BLEND_MODE, - (const bstring *)&be_const_str_BTN_STATE_CHECKED_RELEASED, - (const bstring *)&be_const_str_CHART_PART_BG, - (const bstring *)&be_const_str_ARC_PART_BG, - (const bstring *)&be_const_str_BORDER_SIDE_RIGHT, - (const bstring *)&be_const_str_get_hidden, - (const bstring *)&be_const_str_CHART_TYPE_LINE, - (const bstring *)&be_const_str_GESTURE_DIR_TOP, - (const bstring *)&be_const_str_opt_connect, - (const bstring *)&be_const_str_EVENT_LEAVE, - (const bstring *)&be_const_str_CSE7761_RX, - (const bstring *)&be_const_str_add_text, - (const bstring *)&be_const_str_get_step, - (const bstring *)&be_const_str_LABEL_LONG_SROLL, - (const bstring *)&be_const_str_BTN_STATE_CHECKED_PRESSED, - (const bstring *)&be_const_str_classname, - (const bstring *)&be_const_str_CHART_CURSOR_DOWN, - (const bstring *)&be_const_str_SPINNER_DIR_FORWARD, - (const bstring *)&be_const_str_set_antialias, - (const bstring *)&be_const_str_ARC_TYPE_NORMAL, - (const bstring *)&be_const_str_set_options, - (const bstring *)&be_const_str_ALIGN_OUT_BOTTOM_MID, - (const bstring *)&be_const_str_SDS0X1_TX, - (const bstring *)&be_const_str_SCROLLBAR_MODE_DRAG, - (const bstring *)&be_const_str_CPICKER_PART_KNOB, - (const bstring *)&be_const_str_OPA_90, - NULL, - (const bstring *)&be_const_str_STYLE_SHADOW_COLOR, - (const bstring *)&be_const_str_MAGENTA, - (const bstring *)&be_const_str_set_image_recolor_opa, - (const bstring *)&be_const_str_FS_RES_FS_ERR, - (const bstring *)&be_const_str_item, - (const bstring *)&be_const_str_ALIGN_OUT_RIGHT_MID, - NULL, - (const bstring *)&be_const_str_DROPDOWN_PART_LIST, - (const bstring *)&be_const_str_SYMBOL_PREV, - (const bstring *)&be_const_str_AS608_RX, - (const bstring *)&be_const_str_SYMBOL_FILE, - (const bstring *)&be_const_str_SYMBOL_REFRESH, - (const bstring *)&be_const_str_add_btn_right, - NULL, - NULL, - (const bstring *)&be_const_str_SPI_DC, - (const bstring *)&be_const_str_CHART_UPDATE_MODE_SHIFT, - (const bstring *)&be_const_str_EVENT_PRESS_LOST, - (const bstring *)&be_const_str_STYLE_PAD_TOP, - (const bstring *)&be_const_str_set_offset_y, - (const bstring *)&be_const_str_set_bg_main_stop, - NULL, - (const bstring *)&be_const_str_FS_RES_INV_PARAM, - (const bstring *)&be_const_str_SYMBOL_VIDEO, - (const bstring *)&be_const_str_MCP39F5_RST, - (const bstring *)&be_const_str_CHART_PART_SERIES, - (const bstring *)&be_const_str_STYLE_BG_MAIN_STOP, - (const bstring *)&be_const_str_ALIGN_OUT_TOP_LEFT, - (const bstring *)&be_const_str_list_copy, - (const bstring *)&be_const_str_INPUT_PULLDOWN, - (const bstring *)&be_const_str_STYLE_VALUE_ALIGN, - (const bstring *)&be_const_str_SYMBOL_NEXT, - (const bstring *)&be_const_str_SPINNER_DIR_BACKWARD, - (const bstring *)&be_const_str_get_adv_hittest, - (const bstring *)&be_const_str_get_fit_top, - (const bstring *)&be_const_str_DISP_ROT_270, - NULL, - (const bstring *)&be_const_str_BORDER_SIDE_LEFT, - (const bstring *)&be_const_str_LABEL_ALIGN_CENTER, - (const bstring *)&be_const_str_SYMBOL_DUMMY, - (const bstring *)&be_const_str_get_user_data, - (const bstring *)&be_const_str_, - (const bstring *)&be_const_str_DROPDOWN_DIR_RIGHT, - (const bstring *)&be_const_str__begin_transmission, - (const bstring *)&be_const_str_PROTECT_PRESS_LOST, - (const bstring *)&be_const_str_CSE7766_TX, - (const bstring *)&be_const_str_get_drag_parent, - (const bstring *)&be_const_str_PROTECT_PARENT, - NULL, - NULL, - (const bstring *)&be_const_str_STYLE_PAD_LEFT, - (const bstring *)&be_const_str_LAYOUT_COLUMN_MID, - (const bstring *)&be_const_str_clear_btn_ctrl, - NULL, - (const bstring *)&be_const_str_lower, - (const bstring *)&be_const_str_PAGE_EDGE_TOP, - (const bstring *)&be_const_str_EVENT_CLICKED, - (const bstring *)&be_const_str_get_style_text_letter_space, - (const bstring *)&be_const_str_TUYA_RX, - (const bstring *)&be_const_str_DISP_SIZE_MEDIUM, - (const bstring *)&be_const_str_DROPDOWN_PART_MAIN, - (const bstring *)&be_const_str_EVENT_VALUE_CHANGED, - (const bstring *)&be_const_str_EVENT_DRAG_BEGIN, - (const bstring *)&be_const_str_ST7789_CS, + (const bstring *)&be_const_str_CHANGE, + (const bstring *)&be_const_str_RA8876_CS, + (const bstring *)&be_const_str_lv_page, + (const bstring *)&be_const_str_lv_group, + (const bstring *)&be_const_str_LEDLNK, + (const bstring *)&be_const_str_RFSEND, + (const bstring *)&be_const_str_SYMBOL_EDIT, + (const bstring *)&be_const_str_set, (const bstring *)&be_const_str__end_transmission, + (const bstring *)&be_const_str_ADC_JOY, + (const bstring *)&be_const_str_NEOPOOL_TX, + (const bstring *)&be_const_str_DCKI, + (const bstring *)&be_const_str_FALLING, + (const bstring *)&be_const_str_PZEM004_RX, + (const bstring *)&be_const_str_SM16716_CLK, + (const bstring *)&be_const_str_DDSU666_RX, + (const bstring *)&be_const_str_fromstring, + (const bstring *)&be_const_str_BL0940_RX, + (const bstring *)&be_const_str_OUTPUT_HI, + (const bstring *)&be_const_str_IRSEND, + (const bstring *)&be_const_str_WEBCAM_XCLK, + (const bstring *)&be_const_str_RC522_CS, + (const bstring *)&be_const_str_IEM3000_RX, + (const bstring *)&be_const_str_KEY1, + (const bstring *)&be_const_str_CSE7761_RX, NULL, - (const bstring *)&be_const_str_glue_obj, - (const bstring *)&be_const_str_list_get_style, - (const bstring *)&be_const_str_MGC3130_XFER, - (const bstring *)&be_const_str_RDM6300_RX, - (const bstring *)&be_const_str_ARC_TYPE_REVERSE, - (const bstring *)&be_const_str_refresh, - (const bstring *)&be_const_str_SR04_ECHO, - (const bstring *)&be_const_str_ST7789_DC, - (const bstring *)&be_const_str_start, - (const bstring *)&be_const_str_get_coords, - (const bstring *)&be_const_str_ALIGN_IN_BOTTOM_RIGHT, - (const bstring *)&be_const_str_NONE, - (const bstring *)&be_const_str_get_cursor_click_pos, - (const bstring *)&be_const_str_digital_write, - (const bstring *)&be_const_str_XPT2046_CS, - (const bstring *)&be_const_str_DISP_SIZE_EXTRA_LARGE, - (const bstring *)&be_const_str_ANIM_OFF, - (const bstring *)&be_const_str_KEY_PREV, - (const bstring *)&be_const_str_DDS2382_TX, - (const bstring *)&be_const_str_cursor_left, - (const bstring *)&be_const_str_get_focus_parent, - (const bstring *)&be_const_str_ALIGN_OUT_TOP_RIGHT, + (const bstring *)&be_const_str_AS608_RX, + (const bstring *)&be_const_str_MAX7219CS, + (const bstring *)&be_const_str_BOILER_OT_RX, + (const bstring *)&be_const_str_SWT1_NP, + (const bstring *)&be_const_str_SYMBOL_VOLUME_MID, NULL, - (const bstring *)&be_const_str_set_bg_grad_stop, + (const bstring *)&be_const_str_BUZZER_INV, + (const bstring *)&be_const_str_EPAPER42_CS, + (const bstring *)&be_const_str_classof, NULL, - (const bstring *)&be_const_str_STYLE_CLIP_CORNER, - (const bstring *)&be_const_str_deg, - (const bstring *)&be_const_str__timers, - (const bstring *)&be_const_str_set_margin_bottom, - (const bstring *)&be_const_str_ALIGN_IN_TOP_MID, NULL, - (const bstring *)&be_const_str_NRG_SEL_INV, - (const bstring *)&be_const_str_SSPI_SCLK, - (const bstring *)&be_const_str_ADC_BUTTON_INV, - (const bstring *)&be_const_str_get_col_width, - (const bstring *)&be_const_str_WEBCAM_PCLK, + NULL, + (const bstring *)&be_const_str_PMS5003_RX, + NULL, (const bstring *)&be_const_str_MAX7219DIN, - (const bstring *)&be_const_str_CHART_PART_CURSOR, - (const bstring *)&be_const_str_get_from_btn, + (const bstring *)&be_const_str_ADC_PH, + (const bstring *)&be_const_str_DYP_RX, + (const bstring *)&be_const_str_LED1, + (const bstring *)&be_const_str_ADC_BUTTON_INV, NULL, - (const bstring *)&be_const_str_BORDER_SIDE_NONE, + (const bstring *)&be_const_str_SPI_CLK, + (const bstring *)&be_const_str_NRG_SEL_INV, + (const bstring *)&be_const_str_I2C_SDA, + (const bstring *)&be_const_str_INPUT_PULLUP, + (const bstring *)&be_const_str_KEY1_NP, + (const bstring *)&be_const_str_SYMBOL_TRASH, + (const bstring *)&be_const_str_SYMBOL_CLOSE, + (const bstring *)&be_const_str_lv_gauge, + (const bstring *)&be_const_str_insert, + (const bstring *)&be_const_str_WEBCAM_DATA, + (const bstring *)&be_const_str_SYMBOL_BATTERY_2, + (const bstring *)&be_const_str_pow, + (const bstring *)&be_const_str_ARIRFSEL, + (const bstring *)&be_const_str_assert, + (const bstring *)&be_const_str_member, + (const bstring *)&be_const_str_remove_rule, + (const bstring *)&be_const_str_ADC_INPUT, + (const bstring *)&be_const_str_LED1_INV, + (const bstring *)&be_const_str_ADC_TEMP, + (const bstring *)&be_const_str_SAIR_RX, + (const bstring *)&be_const_str_add_rule, + (const bstring *)&be_const_str_SYMBOL_FILE, + (const bstring *)&be_const_str_BUZZER, + (const bstring *)&be_const_str_SYMBOL_EYE_OPEN, + (const bstring *)&be_const_str_acos, + NULL, + (const bstring *)&be_const_str_concat, + (const bstring *)&be_const_str_lv_img, + (const bstring *)&be_const_str_TM1637CLK, + (const bstring *)&be_const_str_SI7021, + (const bstring *)&be_const_str_PULLUP, + NULL, + (const bstring *)&be_const_str_CC1101_GDO0, + (const bstring *)&be_const_str_DDS2382_RX, + (const bstring *)&be_const_str_PROJECTOR_CTRL_RX, + (const bstring *)&be_const_str_SYMBOL_SETTINGS, + (const bstring *)&be_const_str_SYMBOL_CALL, + (const bstring *)&be_const_str_save, + (const bstring *)&be_const_str_DHT11_OUT, + (const bstring *)&be_const_str_CSE7761_TX, + (const bstring *)&be_const_str_Driver, + (const bstring *)&be_const_str_atan, + (const bstring *)&be_const_str_SYMBOL_LIST, + (const bstring *)&be_const_str_ST7789_CS, + NULL, + (const bstring *)&be_const_str_ST7789_DC, + (const bstring *)&be_const_str_ETH_PHY_MDIO, + (const bstring *)&be_const_str_MAX31855DO, + (const bstring *)&be_const_str_lv_led, + (const bstring *)&be_const_str_SBR_TX, + (const bstring *)&be_const_str_CC1101_GDO2, + (const bstring *)&be_const_str_SDCARD_CS, + (const bstring *)&be_const_str_log, + NULL, + (const bstring *)&be_const_str_asstring, + (const bstring *)&be_const_str_CSE7766_TX, + (const bstring *)&be_const_str_DSB_OUT, + (const bstring *)&be_const_str_calldepth, + (const bstring *)&be_const_str_MAX31855CS, + (const bstring *)&be_const_str_elif, + NULL, + (const bstring *)&be_const_str_SSD1331_CS, + (const bstring *)&be_const_str_WEBCAM_PWDN, + (const bstring *)&be_const_str_AS3935, + (const bstring *)&be_const_str_INPUT_PULLDOWN, + (const bstring *)&be_const_str_reverse_gamma10, + (const bstring *)&be_const_str_CNTR1_NP, + (const bstring *)&be_const_str_SYMBOL_WARNING, + (const bstring *)&be_const_str_A4988_MS1, + (const bstring *)&be_const_str_SSD1331_DC, + (const bstring *)&be_const_str_SYMBOL_BATTERY_FULL, + (const bstring *)&be_const_str_RDM6300_RX, + (const bstring *)&be_const_str_HPMA_TX, + (const bstring *)&be_const_str_get_light, + (const bstring *)&be_const_str_Tasmota, + (const bstring *)&be_const_str_AZ_RXD, + (const bstring *)&be_const_str_type, + (const bstring *)&be_const_str_WE517_TX, + (const bstring *)&be_const_str_MAX7219CLK, + NULL, + (const bstring *)&be_const_str_SYMBOL_SAVE, + (const bstring *)&be_const_str_SYMBOL_WIFI, + (const bstring *)&be_const_str_NEOPOOL_RX, + (const bstring *)&be_const_str_ILI9341_DC, + (const bstring *)&be_const_str_lv_switch, + (const bstring *)&be_const_str_TM1638CLK, NULL, NULL, - (const bstring *)&be_const_str_set_outline_color, + (const bstring *)&be_const_str_MCP39F5_RST, + (const bstring *)&be_const_str_lv_imgbtn, + (const bstring *)&be_const_str_bus, + (const bstring *)&be_const_str_WIEGAND_D1, + (const bstring *)&be_const_str_SYMBOL_BLUETOOTH, + (const bstring *)&be_const_str_GPS_TX, NULL, - (const bstring *)&be_const_str_ALIGN_IN_TOP_RIGHT, - (const bstring *)&be_const_str_set_style_local_text_sel_bg_color, + (const bstring *)&be_const_str_input, + (const bstring *)&be_const_str_SPI_DC, + (const bstring *)&be_const_str_CSE7766_RX, + (const bstring *)&be_const_str_TM1638STB, + (const bstring *)&be_const_str_SYMBOL_COPY, + (const bstring *)&be_const_str_HX711_DAT, + (const bstring *)&be_const_str_OUTPUT_OPEN_DRAIN, + (const bstring *)&be_const_str_IBEACON_TX, + (const bstring *)&be_const_str_BACKLIGHT, + (const bstring *)&be_const_str__request_from, NULL, - (const bstring *)&be_const_str_OBJ_PART_REAL_FIRST, - (const bstring *)&be_const_str_STATE_FOCUSED, - (const bstring *)&be_const_str_set_refocus_policy, NULL, + (const bstring *)&be_const_str_ETH_PHY_POWER, + (const bstring *)&be_const_str_dump, + (const bstring *)&be_const_str_imax, + (const bstring *)&be_const_str_SWT1, + (const bstring *)&be_const_str_PMS5003_TX, NULL, (const bstring *)&be_const_str___lower__, - (const bstring *)&be_const_str_CPICKER_TYPE_DISC, - (const bstring *)&be_const_str_insert, - (const bstring *)&be_const_str_FIT_NONE, - (const bstring *)&be_const_str_open, - (const bstring *)&be_const_str_FS_RES_NOT_EX, - (const bstring *)&be_const_str_set_signal_cb, - (const bstring *)&be_const_str_TXT_FLAG_RECOLOR, - (const bstring *)&be_const_str_BTNMATRIX_CTRL_CHECKABLE, - NULL + (const bstring *)&be_const_str_clear, + (const bstring *)&be_const_str_HX711_SCK, + (const bstring *)&be_const_str_DDSU666_TX, + (const bstring *)&be_const_str_A4988_DIR, + (const bstring *)&be_const_str_dot_p, + (const bstring *)&be_const_str_A4988_STP, + (const bstring *)&be_const_str_SPI_MOSI, + (const bstring *)&be_const_str_copy, + (const bstring *)&be_const_str_lv_cont, + (const bstring *)&be_const_str_, + (const bstring *)&be_const_str_SYMBOL_BULLET, + (const bstring *)&be_const_str_true, + (const bstring *)&be_const_str_hex, + (const bstring *)&be_const_str_ILI9488_CS, + (const bstring *)&be_const_str_BS814_DAT, + (const bstring *)&be_const_str_BOILER_OT_TX, + (const bstring *)&be_const_str_SR04_ECHO, + (const bstring *)&be_const_str_TASMOTACLIENT_RST, + (const bstring *)&be_const_str_SAIR_TX, + (const bstring *)&be_const_str_HPMA_RX, + (const bstring *)&be_const_str_LE01MR_TX, + (const bstring *)&be_const_str_SSPI_MISO, + (const bstring *)&be_const_str_KEY1_INV, + (const bstring *)&be_const_str_ZIGBEE_RST, + (const bstring *)&be_const_str_SM2135_DAT, + (const bstring *)&be_const_str_resp_cmnd_failed, + NULL, + (const bstring *)&be_const_str_pin, + (const bstring *)&be_const_str_as, + (const bstring *)&be_const_str_KEY1_INV_NP, + (const bstring *)&be_const_str_opt_eq, + (const bstring *)&be_const_str_lv_line, + (const bstring *)&be_const_str_asin, + (const bstring *)&be_const_str_HRXL_RX, + (const bstring *)&be_const_str_HJL_CF, + (const bstring *)&be_const_str_DHT22, + (const bstring *)&be_const_str_CNTR1, + (const bstring *)&be_const_str_opt_connect, + (const bstring *)&be_const_str_PROJECTOR_CTRL_TX, + (const bstring *)&be_const_str_NRG_SEL, + (const bstring *)&be_const_str_MCP39F5_RX, + (const bstring *)&be_const_str_SYMBOL_DRIVE, + (const bstring *)&be_const_str_OLED_RESET, + (const bstring *)&be_const_str_SSPI_MAX31865_CS1, + (const bstring *)&be_const_str_HLW_CF, + (const bstring *)&be_const_str_cosh, + (const bstring *)&be_const_str_layer_sys, + (const bstring *)&be_const_str_SYMBOL_PASTE, + NULL, + NULL, + (const bstring *)&be_const_str_TX2X_TXD_BLACK, + (const bstring *)&be_const_str_SM2135_CLK, + (const bstring *)&be_const_str_A4988_ENA, + (const bstring *)&be_const_str_ADC_LIGHT, + NULL, + (const bstring *)&be_const_str_resp_cmnd, + NULL, + (const bstring *)&be_const_str_AZ_TXD, + (const bstring *)&be_const_str_DHT11, + (const bstring *)&be_const_str_MHZ_RXD, + (const bstring *)&be_const_str_SDM72_RX, + (const bstring *)&be_const_str_DSB, + (const bstring *)&be_const_str_SSD1351_CS, + (const bstring *)&be_const_str_json_append, + (const bstring *)&be_const_str_OPEN_DRAIN, + (const bstring *)&be_const_str_AS608_TX, + (const bstring *)&be_const_str_NONE, + NULL, + (const bstring *)&be_const_str_PWM1_INV, + (const bstring *)&be_const_str_HIGH, + (const bstring *)&be_const_str_ADC_RANGE, + (const bstring *)&be_const_str_XPT2046_CS, + (const bstring *)&be_const_str_WEBCAM_SIOC, + (const bstring *)&be_const_str_WEBCAM_HSD, + (const bstring *)&be_const_str_SSPI_CS, + (const bstring *)&be_const_str_ADC_CT_POWER, + (const bstring *)&be_const_str_ROT1A, + (const bstring *)&be_const_str_DDS2382_TX, + (const bstring *)&be_const_str_HALLEFFECT, + (const bstring *)&be_const_str_SPI_CS, + (const bstring *)&be_const_str_NRF24_CS }; static const struct bconststrtab m_const_string_table = { - .size = 853, - .count = 1706, + .size = 271, + .count = 542, .table = m_string_table }; diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_arc.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_arc.h index 979b597cc..dfa8110f5 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_arc.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_arc.h @@ -1,37 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_arc_map) { - { be_const_key(set_type, -1), be_const_func(lvbe_arc_set_type) }, - { be_const_key(set_adjustable, -1), be_const_func(lvbe_arc_set_adjustable) }, - { be_const_key(set_bg_start_angle, -1), be_const_func(lvbe_arc_set_bg_start_angle) }, - { be_const_key(set_chg_rate, -1), be_const_func(lvbe_arc_set_chg_rate) }, - { be_const_key(set_start_angle, 18), be_const_func(lvbe_arc_set_start_angle) }, - { be_const_key(get_min_value, -1), be_const_func(lvbe_arc_get_min_value) }, - { be_const_key(create, 7), be_const_func(lvbe_arc_create) }, - { be_const_key(dot_p, 16), be_const_int(0) }, - { be_const_key(get_bg_angle_start, 5), be_const_func(lvbe_arc_get_bg_angle_start) }, - { be_const_key(is_dragged, -1), be_const_func(lvbe_arc_is_dragged) }, - { be_const_key(set_range, 21), be_const_func(lvbe_arc_set_range) }, - { be_const_key(get_angle_end, 6), be_const_func(lvbe_arc_get_angle_end) }, - { be_const_key(get_max_value, 9), be_const_func(lvbe_arc_get_max_value) }, + { be_const_key(init, 2), be_const_func(lvbe_arc_create) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(set_bg_angles, -1), be_const_func(lvbe_arc_set_bg_angles) }, - { be_const_key(set_end_angle, -1), be_const_func(lvbe_arc_set_end_angle) }, - { be_const_key(set_bg_end_angle, 23), be_const_func(lvbe_arc_set_bg_end_angle) }, - { be_const_key(get_adjustable, -1), be_const_func(lvbe_arc_get_adjustable) }, - { be_const_key(set_rotation, -1), be_const_func(lvbe_arc_set_rotation) }, - { be_const_key(set_value, 10), be_const_func(lvbe_arc_set_value) }, - { be_const_key(set_angles, -1), be_const_func(lvbe_arc_set_angles) }, - { be_const_key(init, -1), be_const_func(lvbe_arc_create) }, - { be_const_key(get_angle_start, -1), be_const_func(lvbe_arc_get_angle_start) }, - { be_const_key(get_bg_angle_end, -1), be_const_func(lvbe_arc_get_bg_angle_end) }, - { be_const_key(get_type, 4), be_const_func(lvbe_arc_get_type) }, - { be_const_key(get_value, 15), be_const_func(lvbe_arc_get_value) }, + { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_arc_map, - 26 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_bar.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_bar.h index fe06ad0d9..2d4336f44 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_bar.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_bar.h @@ -1,26 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_bar_map) { - { be_const_key(set_value, 8), be_const_func(lvbe_bar_set_value) }, - { be_const_key(get_anim_time, -1), be_const_func(lvbe_bar_get_anim_time) }, - { be_const_key(set_anim_time, 7), be_const_func(lvbe_bar_set_anim_time) }, - { be_const_key(set_range, -1), be_const_func(lvbe_bar_set_range) }, - { be_const_key(get_type, 11), be_const_func(lvbe_bar_get_type) }, - { be_const_key(get_start_value, -1), be_const_func(lvbe_bar_get_start_value) }, - { be_const_key(set_type, -1), be_const_func(lvbe_bar_set_type) }, - { be_const_key(create, -1), be_const_func(lvbe_bar_create) }, - { be_const_key(init, -1), be_const_func(lvbe_bar_create) }, - { be_const_key(get_min_value, -1), be_const_func(lvbe_bar_get_min_value) }, - { be_const_key(tostring, 1), be_const_func(lvx_tostring) }, - { be_const_key(set_start_value, 13), be_const_func(lvbe_bar_set_start_value) }, - { be_const_key(get_value, -1), be_const_func(lvbe_bar_get_value) }, + { be_const_key(init, 2), be_const_func(lvbe_bar_create) }, + { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(get_max_value, -1), be_const_func(lvbe_bar_get_max_value) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_bar_map, - 15 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_btn.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_btn.h index 97cd84937..cf8d80833 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_btn.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_btn.h @@ -1,29 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_btn_map) { - { be_const_key(get_state, -1), be_const_func(lvbe_btn_get_state) }, - { be_const_key(get_fit_top, 10), be_const_func(lvbe_btn_get_fit_top) }, - { be_const_key(get_fit_bottom, 0), be_const_func(lvbe_btn_get_fit_bottom) }, - { be_const_key(set_fit4, -1), be_const_func(lvbe_btn_set_fit4) }, - { be_const_key(get_fit_right, -1), be_const_func(lvbe_btn_get_fit_right) }, - { be_const_key(create, -1), be_const_func(lvbe_btn_create) }, - { be_const_key(set_fit, -1), be_const_func(lvbe_btn_set_fit) }, - { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, - { be_const_key(set_layout, -1), be_const_func(lvbe_btn_set_layout) }, - { be_const_key(get_fit_left, -1), be_const_func(lvbe_btn_get_fit_left) }, - { be_const_key(dot_p, 13), be_const_int(0) }, - { be_const_key(set_state, 6), be_const_func(lvbe_btn_set_state) }, - { be_const_key(set_checkable, 14), be_const_func(lvbe_btn_set_checkable) }, - { be_const_key(toggle, -1), be_const_func(lvbe_btn_toggle) }, - { be_const_key(get_layout, 16), be_const_func(lvbe_btn_get_layout) }, - { be_const_key(init, 9), be_const_func(lvbe_btn_create) }, - { be_const_key(get_checkable, -1), be_const_func(lvbe_btn_get_checkable) }, - { be_const_key(set_fit2, 2), be_const_func(lvbe_btn_set_fit2) }, + { be_const_key(init, 2), be_const_func(lvbe_btn_create) }, + { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, + { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_btn_map, - 18 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_btnmatrix.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_btnmatrix.h index 10067df1d..ec4dc09e0 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_btnmatrix.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_btnmatrix.h @@ -1,34 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_btnmatrix_map) { - { be_const_key(clear_btn_ctrl, 13), be_const_func(lvbe_btnmatrix_clear_btn_ctrl) }, - { be_const_key(set_align, -1), be_const_func(lvbe_btnmatrix_set_align) }, - { be_const_key(get_btn_text, 7), be_const_func(lvbe_btnmatrix_get_btn_text) }, - { be_const_key(get_active_btn_text, -1), be_const_func(lvbe_btnmatrix_get_active_btn_text) }, - { be_const_key(create, 3), be_const_func(lvbe_btnmatrix_create) }, - { be_const_key(set_btn_ctrl_all, -1), be_const_func(lvbe_btnmatrix_set_btn_ctrl_all) }, - { be_const_key(clear_btn_ctrl_all, 12), be_const_func(lvbe_btnmatrix_clear_btn_ctrl_all) }, - { be_const_key(get_one_check, -1), be_const_func(lvbe_btnmatrix_get_one_check) }, - { be_const_key(get_active_btn, -1), be_const_func(lvbe_btnmatrix_get_active_btn) }, - { be_const_key(get_align, 22), be_const_func(lvbe_btnmatrix_get_align) }, - { be_const_key(set_focused_btn, 4), be_const_func(lvbe_btnmatrix_set_focused_btn) }, - { be_const_key(set_map, -1), be_const_func(lvbe_btnmatrix_set_map) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(set_one_check, 20), be_const_func(lvbe_btnmatrix_set_one_check) }, - { be_const_key(init, -1), be_const_func(lvbe_btnmatrix_create) }, - { be_const_key(get_recolor, -1), be_const_func(lvbe_btnmatrix_get_recolor) }, - { be_const_key(set_recolor, 8), be_const_func(lvbe_btnmatrix_set_recolor) }, - { be_const_key(set_btn_ctrl, -1), be_const_func(lvbe_btnmatrix_set_btn_ctrl) }, - { be_const_key(get_focused_btn, -1), be_const_func(lvbe_btnmatrix_get_focused_btn) }, - { be_const_key(set_btn_width, 0), be_const_func(lvbe_btnmatrix_set_btn_width) }, - { be_const_key(get_btn_ctrl, -1), be_const_func(lvbe_btnmatrix_get_btn_ctrl) }, - { be_const_key(set_ctrl_map, 5), be_const_func(lvbe_btnmatrix_set_ctrl_map) }, + { be_const_key(init, 2), be_const_func(lvbe_btnmatrix_create) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, + { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_btnmatrix_map, - 23 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_calendar.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_calendar.h index cd6df54f3..593c30b69 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_calendar.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_calendar.h @@ -1,22 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_calendar_map) { - { be_const_key(create, -1), be_const_func(lvbe_calendar_create) }, - { be_const_key(get_day_of_week, -1), be_const_func(lvbe_calendar_get_day_of_week) }, - { be_const_key(get_highlighted_dates_num, 5), be_const_func(lvbe_calendar_get_highlighted_dates_num) }, + { be_const_key(init, 2), be_const_func(lvbe_calendar_create) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(set_highlighted_dates, -1), be_const_func(lvbe_calendar_set_highlighted_dates) }, - { be_const_key(set_showed_date, -1), be_const_func(lvbe_calendar_set_showed_date) }, - { be_const_key(set_day_names, -1), be_const_func(lvbe_calendar_set_day_names) }, - { be_const_key(set_today_date, -1), be_const_func(lvbe_calendar_set_today_date) }, { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(init, 4), be_const_func(lvbe_calendar_create) }, - { be_const_key(set_month_names, -1), be_const_func(lvbe_calendar_set_month_names) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_calendar_map, - 11 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_canvas.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_canvas.h index 8557ba375..74607f0a4 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_canvas.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_canvas.h @@ -1,30 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_canvas_map) { - { be_const_key(init, 16), be_const_func(lvbe_canvas_create) }, - { be_const_key(set_palette, -1), be_const_func(lvbe_canvas_set_palette) }, + { be_const_key(init, 2), be_const_func(lvbe_canvas_create) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(draw_img, -1), be_const_func(lvbe_canvas_draw_img) }, { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(copy_buf, 6), be_const_func(lvbe_canvas_copy_buf) }, - { be_const_key(create, 17), be_const_func(lvbe_canvas_create) }, - { be_const_key(draw_arc, 10), be_const_func(lvbe_canvas_draw_arc) }, - { be_const_key(get_px, 7), be_const_func(lvbe_canvas_get_px) }, - { be_const_key(transform, -1), be_const_func(lvbe_canvas_transform) }, - { be_const_key(draw_text, 3), be_const_func(lvbe_canvas_draw_text) }, - { be_const_key(fill_bg, -1), be_const_func(lvbe_canvas_fill_bg) }, - { be_const_key(draw_polygon, -1), be_const_func(lvbe_canvas_draw_polygon) }, - { be_const_key(blur_ver, 0), be_const_func(lvbe_canvas_blur_ver) }, - { be_const_key(blur_hor, -1), be_const_func(lvbe_canvas_blur_hor) }, - { be_const_key(draw_line, -1), be_const_func(lvbe_canvas_draw_line) }, - { be_const_key(draw_rect, -1), be_const_func(lvbe_canvas_draw_rect) }, - { be_const_key(set_buffer, -1), be_const_func(lvbe_canvas_set_buffer) }, - { be_const_key(set_px, -1), be_const_func(lvbe_canvas_set_px) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_canvas_map, - 19 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_chart.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_chart.h index 65d0c2bc5..0ebc1f578 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_chart.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_chart.h @@ -1,48 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_chart_map) { - { be_const_key(init, -1), be_const_func(lvbe_chart_create) }, - { be_const_key(set_secondary_y_tick_length, -1), be_const_func(lvbe_chart_set_secondary_y_tick_length) }, - { be_const_key(create, -1), be_const_func(lvbe_chart_create) }, - { be_const_key(set_x_tick_length, -1), be_const_func(lvbe_chart_set_x_tick_length) }, - { be_const_key(set_next, -1), be_const_func(lvbe_chart_set_next) }, - { be_const_key(set_x_start_point, 14), be_const_func(lvbe_chart_set_x_start_point) }, - { be_const_key(set_point_id, 23), be_const_func(lvbe_chart_set_point_id) }, + { be_const_key(init, 2), be_const_func(lvbe_chart_create) }, + { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(set_ext_array, 12), be_const_func(lvbe_chart_set_ext_array) }, - { be_const_key(get_cursor_point, 4), be_const_func(lvbe_chart_get_cursor_point) }, - { be_const_key(hide_series, -1), be_const_func(lvbe_chart_hide_series) }, - { be_const_key(refresh, -1), be_const_func(lvbe_chart_refresh) }, - { be_const_key(set_point_count, -1), be_const_func(lvbe_chart_set_point_count) }, - { be_const_key(set_secondary_y_tick_texts, -1), be_const_func(lvbe_chart_set_secondary_y_tick_texts) }, - { be_const_key(set_points, 27), be_const_func(lvbe_chart_set_points) }, - { be_const_key(set_update_mode, -1), be_const_func(lvbe_chart_set_update_mode) }, - { be_const_key(set_y_tick_texts, 1), be_const_func(lvbe_chart_set_y_tick_texts) }, - { be_const_key(set_cursor_point, -1), be_const_func(lvbe_chart_set_cursor_point) }, - { be_const_key(get_point_count, -1), be_const_func(lvbe_chart_get_point_count) }, - { be_const_key(init_points, 20), be_const_func(lvbe_chart_init_points) }, - { be_const_key(remove_series, -1), be_const_func(lvbe_chart_remove_series) }, - { be_const_key(set_series_axis, 8), be_const_func(lvbe_chart_set_series_axis) }, - { be_const_key(set_type, -1), be_const_func(lvbe_chart_set_type) }, - { be_const_key(clear_series, -1), be_const_func(lvbe_chart_clear_series) }, - { be_const_key(set_div_line_count, -1), be_const_func(lvbe_chart_set_div_line_count) }, - { be_const_key(get_point_id, 31), be_const_func(lvbe_chart_get_point_id) }, - { be_const_key(tostring, 17), be_const_func(lvx_tostring) }, - { be_const_key(set_y_range, -1), be_const_func(lvbe_chart_set_y_range) }, - { be_const_key(get_type, -1), be_const_func(lvbe_chart_get_type) }, - { be_const_key(get_series_axis, 30), be_const_func(lvbe_chart_get_series_axis) }, - { be_const_key(set_y_tick_length, -1), be_const_func(lvbe_chart_set_y_tick_length) }, - { be_const_key(get_nearest_index_from_coord, -1), be_const_func(lvbe_chart_get_nearest_index_from_coord) }, - { be_const_key(set_x_tick_texts, -1), be_const_func(lvbe_chart_set_x_tick_texts) }, - { be_const_key(get_x_from_index, -1), be_const_func(lvbe_chart_get_x_from_index) }, - { be_const_key(get_x_start_point, -1), be_const_func(lvbe_chart_get_x_start_point) }, - { be_const_key(get_series_area, 33), be_const_func(lvbe_chart_get_series_area) }, - { be_const_key(get_y_from_index, -1), be_const_func(lvbe_chart_get_y_from_index) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_chart_map, - 37 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_checkbox.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_checkbox.h index ea7f09ac4..f64be0ded 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_checkbox.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_checkbox.h @@ -1,24 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_checkbox_map) { + { be_const_key(init, 2), be_const_func(lvbe_checkbox_create) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(get_state, -1), be_const_func(lvbe_checkbox_get_state) }, - { be_const_key(is_checked, 7), be_const_func(lvbe_checkbox_is_checked) }, - { be_const_key(dot_p, 4), be_const_int(0) }, - { be_const_key(create, 9), be_const_func(lvbe_checkbox_create) }, - { be_const_key(set_state, -1), be_const_func(lvbe_checkbox_set_state) }, - { be_const_key(is_inactive, 10), be_const_func(lvbe_checkbox_is_inactive) }, - { be_const_key(set_disabled, -1), be_const_func(lvbe_checkbox_set_disabled) }, - { be_const_key(set_checked, -1), be_const_func(lvbe_checkbox_set_checked) }, - { be_const_key(get_text, -1), be_const_func(lvbe_checkbox_get_text) }, - { be_const_key(init, -1), be_const_func(lvbe_checkbox_create) }, - { be_const_key(set_text, 3), be_const_func(lvbe_checkbox_set_text) }, - { be_const_key(set_text_static, 2), be_const_func(lvbe_checkbox_set_text_static) }, + { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_checkbox_map, - 13 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_cont.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_cont.h index 5925f9691..3ab5828ba 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_cont.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_cont.h @@ -1,24 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_cont_map) { + { be_const_key(init, 2), be_const_func(lvbe_cont_create) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(get_layout, -1), be_const_func(lvbe_cont_get_layout) }, - { be_const_key(set_fit2, -1), be_const_func(lvbe_cont_set_fit2) }, - { be_const_key(set_fit, -1), be_const_func(lvbe_cont_set_fit) }, - { be_const_key(get_fit_top, -1), be_const_func(lvbe_cont_get_fit_top) }, - { be_const_key(get_fit_bottom, -1), be_const_func(lvbe_cont_get_fit_bottom) }, - { be_const_key(init, 9), be_const_func(lvbe_cont_create) }, - { be_const_key(create, -1), be_const_func(lvbe_cont_create) }, - { be_const_key(get_fit_right, 1), be_const_func(lvbe_cont_get_fit_right) }, - { be_const_key(get_fit_left, -1), be_const_func(lvbe_cont_get_fit_left) }, - { be_const_key(set_layout, -1), be_const_func(lvbe_cont_set_layout) }, - { be_const_key(dot_p, 7), be_const_int(0) }, - { be_const_key(set_fit4, -1), be_const_func(lvbe_cont_set_fit4) }, + { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_cont_map, - 13 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_cpicker.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_cpicker.h index a9ff749d2..5a91a5708 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_cpicker.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_cpicker.h @@ -2,31 +2,14 @@ static be_define_const_map_slots(be_class_lv_cpicker_map) { { be_const_key(init, 2), be_const_func(lvbe_cpicker_create) }, - { be_const_key(get_hue, -1), be_const_func(lvbe_cpicker_get_hue) }, - { be_const_key(get_value, -1), be_const_func(lvbe_cpicker_get_value) }, - { be_const_key(set_color, 13), be_const_func(lvbe_cpicker_set_color) }, - { be_const_key(set_color_mode, -1), be_const_func(lvbe_cpicker_set_color_mode) }, - { be_const_key(get_knob_colored, 15), be_const_func(lvbe_cpicker_get_knob_colored) }, - { be_const_key(get_color_mode, -1), be_const_func(lvbe_cpicker_get_color_mode) }, - { be_const_key(set_hsv, 18), be_const_func(lvbe_cpicker_set_hsv) }, - { be_const_key(set_saturation, -1), be_const_func(lvbe_cpicker_set_saturation) }, - { be_const_key(set_knob_colored, -1), be_const_func(lvbe_cpicker_set_knob_colored) }, - { be_const_key(set_hue, 17), be_const_func(lvbe_cpicker_set_hue) }, - { be_const_key(set_color_mode_fixed, -1), be_const_func(lvbe_cpicker_set_color_mode_fixed) }, - { be_const_key(set_value, 0), be_const_func(lvbe_cpicker_set_value) }, - { be_const_key(set_type, -1), be_const_func(lvbe_cpicker_set_type) }, - { be_const_key(create, -1), be_const_func(lvbe_cpicker_create) }, - { be_const_key(get_color, 16), be_const_func(lvbe_cpicker_get_color) }, - { be_const_key(get_color_mode_fixed, -1), be_const_func(lvbe_cpicker_get_color_mode_fixed) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(get_saturation, -1), be_const_func(lvbe_cpicker_get_saturation) }, - { be_const_key(get_hsv, -1), be_const_func(lvbe_cpicker_get_hsv) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_cpicker_map, - 21 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_dropdown.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_dropdown.h index ee5d4904e..c36d9970e 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_dropdown.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_dropdown.h @@ -1,36 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_dropdown_map) { - { be_const_key(get_selected, -1), be_const_func(lvbe_dropdown_get_selected) }, - { be_const_key(get_show_selected, -1), be_const_func(lvbe_dropdown_get_show_selected) }, - { be_const_key(init, -1), be_const_func(lvbe_dropdown_create) }, - { be_const_key(set_symbol, 18), be_const_func(lvbe_dropdown_set_symbol) }, - { be_const_key(get_text, -1), be_const_func(lvbe_dropdown_get_text) }, - { be_const_key(set_text, 2), be_const_func(lvbe_dropdown_set_text) }, - { be_const_key(set_dir, 8), be_const_func(lvbe_dropdown_set_dir) }, - { be_const_key(get_dir, -1), be_const_func(lvbe_dropdown_get_dir) }, - { be_const_key(get_option_cnt, -1), be_const_func(lvbe_dropdown_get_option_cnt) }, - { be_const_key(create, -1), be_const_func(lvbe_dropdown_create) }, - { be_const_key(set_selected, -1), be_const_func(lvbe_dropdown_set_selected) }, - { be_const_key(dot_p, 24), be_const_int(0) }, - { be_const_key(open, 7), be_const_func(lvbe_dropdown_open) }, - { be_const_key(set_max_height, -1), be_const_func(lvbe_dropdown_set_max_height) }, - { be_const_key(add_option, -1), be_const_func(lvbe_dropdown_add_option) }, - { be_const_key(set_show_selected, 16), be_const_func(lvbe_dropdown_set_show_selected) }, + { be_const_key(init, 2), be_const_func(lvbe_dropdown_create) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(set_options_static, 9), be_const_func(lvbe_dropdown_set_options_static) }, - { be_const_key(clear_options, -1), be_const_func(lvbe_dropdown_clear_options) }, - { be_const_key(get_max_height, 11), be_const_func(lvbe_dropdown_get_max_height) }, - { be_const_key(set_options, 15), be_const_func(lvbe_dropdown_set_options) }, - { be_const_key(close, -1), be_const_func(lvbe_dropdown_close) }, - { be_const_key(get_selected_str, -1), be_const_func(lvbe_dropdown_get_selected_str) }, - { be_const_key(get_symbol, 13), be_const_func(lvbe_dropdown_get_symbol) }, - { be_const_key(get_options, -1), be_const_func(lvbe_dropdown_get_options) }, + { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_dropdown_map, - 25 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_gauge.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_gauge.h index eb7d98fa4..2e84145b9 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_gauge.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_gauge.h @@ -1,35 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_gauge_map) { - { be_const_key(get_needle_img_pivot_y, -1), be_const_func(lvbe_gauge_get_needle_img_pivot_y) }, - { be_const_key(get_needle_img_pivot_x, -1), be_const_func(lvbe_gauge_get_needle_img_pivot_x) }, - { be_const_key(get_line_count, -1), be_const_func(lvbe_gauge_get_line_count) }, - { be_const_key(init, -1), be_const_func(lvbe_gauge_create) }, - { be_const_key(dot_p, 20), be_const_int(0) }, - { be_const_key(create, -1), be_const_func(lvbe_gauge_create) }, - { be_const_key(get_min_value, 2), be_const_func(lvbe_gauge_get_min_value) }, - { be_const_key(set_range, -1), be_const_func(lvbe_gauge_set_range) }, - { be_const_key(get_max_value, -1), be_const_func(lvbe_gauge_get_max_value) }, - { be_const_key(get_value, 7), be_const_func(lvbe_gauge_get_value) }, - { be_const_key(get_label_count, -1), be_const_func(lvbe_gauge_get_label_count) }, - { be_const_key(set_needle_img, 1), be_const_func(lvbe_gauge_set_needle_img) }, - { be_const_key(get_needle_count, -1), be_const_func(lvbe_gauge_get_needle_count) }, + { be_const_key(init, 2), be_const_func(lvbe_gauge_create) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(set_scale, -1), be_const_func(lvbe_gauge_set_scale) }, - { be_const_key(set_critical_value, 16), be_const_func(lvbe_gauge_set_critical_value) }, - { be_const_key(get_angle_offset, -1), be_const_func(lvbe_gauge_get_angle_offset) }, - { be_const_key(get_critical_value, -1), be_const_func(lvbe_gauge_get_critical_value) }, - { be_const_key(set_formatter_cb, -1), be_const_func(lvbe_gauge_set_formatter_cb) }, - { be_const_key(set_needle_count, 4), be_const_func(lvbe_gauge_set_needle_count) }, - { be_const_key(set_angle_offset, 17), be_const_func(lvbe_gauge_set_angle_offset) }, - { be_const_key(set_value, -1), be_const_func(lvbe_gauge_set_value) }, - { be_const_key(get_scale_angle, -1), be_const_func(lvbe_gauge_get_scale_angle) }, - { be_const_key(get_needle_img, 12), be_const_func(lvbe_gauge_get_needle_img) }, + { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_gauge_map, - 24 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_group.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_group.h index b8387836f..46f29f0c1 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_group.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_group.h @@ -1,33 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_group_map) { - { be_const_key(get_editing, -1), be_const_func(lvbe_group_get_editing) }, - { be_const_key(focus_freeze, -1), be_const_func(lvbe_group_focus_freeze) }, - { be_const_key(get_wrap, -1), be_const_func(lvbe_group_get_wrap) }, - { be_const_key(tostring, 20), be_const_func(lvx_tostring) }, - { be_const_key(remove_all_objs, 21), be_const_func(lvbe_group_remove_all_objs) }, - { be_const_key(remove_obj, 10), be_const_func(lvbe_group_remove_obj) }, - { be_const_key(add_obj, -1), be_const_func(lvbe_group_add_obj) }, - { be_const_key(focus_obj, -1), be_const_func(lvbe_group_focus_obj) }, - { be_const_key(set_focus_cb, -1), be_const_func(lvbe_group_set_focus_cb) }, - { be_const_key(get_click_focus, 14), be_const_func(lvbe_group_get_click_focus) }, - { be_const_key(focus_next, -1), be_const_func(lvbe_group_focus_next) }, - { be_const_key(create, -1), be_const_func(lvbe_group_create) }, - { be_const_key(set_refocus_policy, 15), be_const_func(lvbe_group_set_refocus_policy) }, - { be_const_key(get_focused, -1), be_const_func(lvbe_group_get_focused) }, - { be_const_key(init, -1), be_const_func(lvbe_group_create) }, - { be_const_key(send_data, -1), be_const_func(lvbe_group_send_data) }, - { be_const_key(set_editing, -1), be_const_func(lvbe_group_set_editing) }, + { be_const_key(init, 2), be_const_func(lvbe_group_create) }, + { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(set_wrap, -1), be_const_func(lvbe_group_set_wrap) }, - { be_const_key(set_click_focus, 17), be_const_func(lvbe_group_set_click_focus) }, - { be_const_key(focus_prev, -1), be_const_func(lvbe_group_focus_prev) }, - { be_const_key(del, -1), be_const_func(lvbe_group_del) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_group_map, - 22 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_img.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_img.h index afca9d38d..6f04c933b 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_img.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_img.h @@ -1,33 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_img_map) { - { be_const_key(get_offset_y, -1), be_const_func(lvbe_img_get_offset_y) }, - { be_const_key(get_zoom, 2), be_const_func(lvbe_img_get_zoom) }, - { be_const_key(set_tasmota_logo, -1), be_const_func(lvbe_img_set_tasmota_logo) }, + { be_const_key(init, 2), be_const_func(lvbe_img_create) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(get_pivot, 15), be_const_func(lvbe_img_get_pivot) }, - { be_const_key(get_auto_size, 1), be_const_func(lvbe_img_get_auto_size) }, - { be_const_key(get_offset_x, 4), be_const_func(lvbe_img_get_offset_x) }, - { be_const_key(set_angle, 0), be_const_func(lvbe_img_set_angle) }, - { be_const_key(get_src, -1), be_const_func(lvbe_img_get_src) }, - { be_const_key(set_zoom, 12), be_const_func(lvbe_img_set_zoom) }, { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(create, -1), be_const_func(lvbe_img_create) }, - { be_const_key(init, -1), be_const_func(lvbe_img_create) }, - { be_const_key(get_angle, -1), be_const_func(lvbe_img_get_angle) }, - { be_const_key(set_src, -1), be_const_func(lvbe_img_set_src) }, - { be_const_key(set_pivot, 17), be_const_func(lvbe_img_set_pivot) }, - { be_const_key(set_antialias, -1), be_const_func(lvbe_img_set_antialias) }, - { be_const_key(get_antialias, -1), be_const_func(lvbe_img_get_antialias) }, - { be_const_key(set_offset_x, -1), be_const_func(lvbe_img_set_offset_x) }, - { be_const_key(set_offset_y, 10), be_const_func(lvbe_img_set_offset_y) }, - { be_const_key(get_file_name, -1), be_const_func(lvbe_img_get_file_name) }, - { be_const_key(set_auto_size, -1), be_const_func(lvbe_img_set_auto_size) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_img_map, - 22 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_imgbtn.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_imgbtn.h index fb982bdc8..2270dfdff 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_imgbtn.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_imgbtn.h @@ -1,21 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_imgbtn_map) { - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(set_state, -1), be_const_func(lvbe_imgbtn_set_state) }, - { be_const_key(set_checkable, -1), be_const_func(lvbe_imgbtn_set_checkable) }, - { be_const_key(toggle, 1), be_const_func(lvbe_imgbtn_toggle) }, - { be_const_key(get_src, -1), be_const_func(lvbe_imgbtn_get_src) }, - { be_const_key(init, 6), be_const_func(lvbe_imgbtn_create) }, + { be_const_key(init, 2), be_const_func(lvbe_imgbtn_create) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(create, -1), be_const_func(lvbe_imgbtn_create) }, - { be_const_key(set_src, -1), be_const_func(lvbe_imgbtn_set_src) }, - { be_const_key(get_state, 0), be_const_func(lvbe_imgbtn_get_state) }, + { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_imgbtn_map, - 10 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_indev.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_indev.h index a6cedfe26..c8428ec95 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_indev.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_indev.h @@ -1,19 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_indev_map) { - { be_const_key(get_type, -1), be_const_func(lvbe_indev_get_type) }, - { be_const_key(search_obj, -1), be_const_func(lvbe_indev_search_obj) }, - { be_const_key(get_obj_act, -1), be_const_func(lvbe_indev_get_obj_act) }, - { be_const_key(init, 4), be_const_func(lv0_init) }, - { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(init, 2), be_const_func(lv0_init) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(enable, -1), be_const_func(lvbe_indev_enable) }, - { be_const_key(set_group, 1), be_const_func(lvbe_indev_set_group) }, + { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_indev_map, - 8 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_keyboard.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_keyboard.h index cae6a2476..68d674421 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_keyboard.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_keyboard.h @@ -1,24 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_keyboard_map) { + { be_const_key(init, 2), be_const_func(lvbe_keyboard_create) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(set_ctrl_map, 3), be_const_func(lvbe_keyboard_set_ctrl_map) }, - { be_const_key(def_event_cb, 8), be_const_func(lvbe_keyboard_def_event_cb) }, - { be_const_key(set_textarea, 9), be_const_func(lvbe_keyboard_set_textarea) }, - { be_const_key(create, -1), be_const_func(lvbe_keyboard_create) }, - { be_const_key(get_mode, 7), be_const_func(lvbe_keyboard_get_mode) }, - { be_const_key(init, -1), be_const_func(lvbe_keyboard_create) }, - { be_const_key(set_cursor_manage, -1), be_const_func(lvbe_keyboard_set_cursor_manage) }, - { be_const_key(set_map, -1), be_const_func(lvbe_keyboard_set_map) }, - { be_const_key(set_mode, -1), be_const_func(lvbe_keyboard_set_mode) }, - { be_const_key(get_textarea, -1), be_const_func(lvbe_keyboard_get_textarea) }, - { be_const_key(dot_p, 4), be_const_int(0) }, - { be_const_key(get_cursor_manage, 1), be_const_func(lvbe_keyboard_get_cursor_manage) }, + { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_keyboard_map, - 13 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_label.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_label.h index b59c025e1..5bcfae692 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_label.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_label.h @@ -1,37 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_label_map) { - { be_const_key(get_letter_on, -1), be_const_func(lvbe_label_get_letter_on) }, - { be_const_key(create, 14), be_const_func(lvbe_label_create) }, - { be_const_key(is_char_under_pos, -1), be_const_func(lvbe_label_is_char_under_pos) }, - { be_const_key(ins_text, -1), be_const_func(lvbe_label_ins_text) }, - { be_const_key(set_text_static, -1), be_const_func(lvbe_label_set_text_static) }, - { be_const_key(set_anim_speed, -1), be_const_func(lvbe_label_set_anim_speed) }, - { be_const_key(init, -1), be_const_func(lvbe_label_create) }, - { be_const_key(get_text_sel_start, -1), be_const_func(lvbe_label_get_text_sel_start) }, - { be_const_key(set_recolor, 15), be_const_func(lvbe_label_set_recolor) }, - { be_const_key(get_letter_pos, 23), be_const_func(lvbe_label_get_letter_pos) }, - { be_const_key(get_text_sel_end, -1), be_const_func(lvbe_label_get_text_sel_end) }, - { be_const_key(set_text_sel_start, 1), be_const_func(lvbe_label_set_text_sel_start) }, - { be_const_key(refr_text, 4), be_const_func(lvbe_label_refr_text) }, - { be_const_key(cut_text, 9), be_const_func(lvbe_label_cut_text) }, - { be_const_key(get_text, 16), be_const_func(lvbe_label_get_text) }, - { be_const_key(set_long_mode, -1), be_const_func(lvbe_label_set_long_mode) }, - { be_const_key(set_text, 17), be_const_func(lvbe_label_set_text) }, + { be_const_key(init, 2), be_const_func(lvbe_label_create) }, + { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(get_long_mode, -1), be_const_func(lvbe_label_get_long_mode) }, - { be_const_key(get_align, 6), be_const_func(lvbe_label_get_align) }, - { be_const_key(set_text_sel_end, 2), be_const_func(lvbe_label_set_text_sel_end) }, - { be_const_key(set_text_fmt, -1), be_const_func(lvbe_label_set_text_fmt) }, - { be_const_key(get_recolor, -1), be_const_func(lvbe_label_get_recolor) }, - { be_const_key(tostring, 24), be_const_func(lvx_tostring) }, - { be_const_key(get_anim_speed, -1), be_const_func(lvbe_label_get_anim_speed) }, - { be_const_key(set_align, -1), be_const_func(lvbe_label_set_align) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_label_map, - 26 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_led.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_led.h index 87f42c003..70bc6b820 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_led.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_led.h @@ -1,20 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_led_map) { - { be_const_key(get_bright, -1), be_const_func(lvbe_led_get_bright) }, - { be_const_key(toggle, 4), be_const_func(lvbe_led_toggle) }, - { be_const_key(on, -1), be_const_func(lvbe_led_on) }, - { be_const_key(set_bright, -1), be_const_func(lvbe_led_set_bright) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(off, 8), be_const_func(lvbe_led_off) }, - { be_const_key(init, 3), be_const_func(lvbe_led_create) }, + { be_const_key(init, 2), be_const_func(lvbe_led_create) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(create, -1), be_const_func(lvbe_led_create) }, + { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_led_map, - 9 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_line.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_line.h index 6bd3d7bc7..7c32984a9 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_line.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_line.h @@ -1,20 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_line_map) { - { be_const_key(get_y_invert, -1), be_const_func(lvbe_line_get_y_invert) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(get_auto_size, -1), be_const_func(lvbe_line_get_auto_size) }, - { be_const_key(init, -1), be_const_func(lvbe_line_create) }, - { be_const_key(set_auto_size, -1), be_const_func(lvbe_line_set_auto_size) }, - { be_const_key(set_points, 8), be_const_func(lvbe_line_set_points) }, - { be_const_key(set_y_invert, 3), be_const_func(lvbe_line_set_y_invert) }, + { be_const_key(init, 2), be_const_func(lvbe_line_create) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(create, -1), be_const_func(lvbe_line_create) }, + { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_line_map, - 9 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_linemeter.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_linemeter.h index c9742f1be..af20fbd2f 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_linemeter.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_linemeter.h @@ -1,28 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_linemeter_map) { - { be_const_key(set_mirror, 9), be_const_func(lvbe_linemeter_set_mirror) }, - { be_const_key(get_max_value, 10), be_const_func(lvbe_linemeter_get_max_value) }, - { be_const_key(tostring, 12), be_const_func(lvx_tostring) }, - { be_const_key(set_value, -1), be_const_func(lvbe_linemeter_set_value) }, - { be_const_key(set_angle_offset, -1), be_const_func(lvbe_linemeter_set_angle_offset) }, - { be_const_key(draw_scale, -1), be_const_func(lvbe_linemeter_draw_scale) }, - { be_const_key(get_mirror, 11), be_const_func(lvbe_linemeter_get_mirror) }, - { be_const_key(get_line_count, -1), be_const_func(lvbe_linemeter_get_line_count) }, - { be_const_key(set_scale, -1), be_const_func(lvbe_linemeter_set_scale) }, - { be_const_key(get_value, -1), be_const_func(lvbe_linemeter_get_value) }, - { be_const_key(get_scale_angle, -1), be_const_func(lvbe_linemeter_get_scale_angle) }, - { be_const_key(get_angle_offset, -1), be_const_func(lvbe_linemeter_get_angle_offset) }, - { be_const_key(set_range, -1), be_const_func(lvbe_linemeter_set_range) }, - { be_const_key(dot_p, 5), be_const_int(0) }, - { be_const_key(get_min_value, -1), be_const_func(lvbe_linemeter_get_min_value) }, - { be_const_key(init, -1), be_const_func(lvbe_linemeter_create) }, - { be_const_key(create, -1), be_const_func(lvbe_linemeter_create) }, + { be_const_key(init, 2), be_const_func(lvbe_linemeter_create) }, + { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, + { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_linemeter_map, - 17 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_list.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_list.h index 0de5de999..56701ea96 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_list.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_list.h @@ -1,40 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_list_map) { - { be_const_key(remove, -1), be_const_func(lvbe_list_remove) }, - { be_const_key(get_edge_flash, 16), be_const_func(lvbe_list_get_edge_flash) }, - { be_const_key(get_anim_time, -1), be_const_func(lvbe_list_get_anim_time) }, + { be_const_key(init, 2), be_const_func(lvbe_list_create) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(get_btn_label, 24), be_const_func(lvbe_list_get_btn_label) }, - { be_const_key(up, -1), be_const_func(lvbe_list_up) }, - { be_const_key(get_scrollbar_mode, -1), be_const_func(lvbe_list_get_scrollbar_mode) }, - { be_const_key(get_prev_btn, 28), be_const_func(lvbe_list_get_prev_btn) }, - { be_const_key(get_scroll_propagation, 14), be_const_func(lvbe_list_get_scroll_propagation) }, - { be_const_key(focus, 13), be_const_func(lvbe_list_focus) }, - { be_const_key(get_layout, 4), be_const_func(lvbe_list_get_layout) }, - { be_const_key(down, -1), be_const_func(lvbe_list_down) }, - { be_const_key(get_btn_index, -1), be_const_func(lvbe_list_get_btn_index) }, - { be_const_key(clean, -1), be_const_func(lvbe_list_clean) }, - { be_const_key(create, -1), be_const_func(lvbe_list_create) }, - { be_const_key(get_next_btn, -1), be_const_func(lvbe_list_get_next_btn) }, - { be_const_key(get_btn_img, -1), be_const_func(lvbe_list_get_btn_img) }, - { be_const_key(get_btn_selected, -1), be_const_func(lvbe_list_get_btn_selected) }, - { be_const_key(set_edge_flash, -1), be_const_func(lvbe_list_set_edge_flash) }, - { be_const_key(get_btn_text, -1), be_const_func(lvbe_list_get_btn_text) }, - { be_const_key(set_layout, -1), be_const_func(lvbe_list_set_layout) }, { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(set_scrollbar_mode, -1), be_const_func(lvbe_list_set_scrollbar_mode) }, - { be_const_key(focus_btn, -1), be_const_func(lvbe_list_focus_btn) }, - { be_const_key(init, -1), be_const_func(lvbe_list_create) }, - { be_const_key(set_scroll_propagation, 27), be_const_func(lvbe_list_set_scroll_propagation) }, - { be_const_key(get_size, 20), be_const_func(lvbe_list_get_size) }, - { be_const_key(set_anim_time, -1), be_const_func(lvbe_list_set_anim_time) }, - { be_const_key(add_btn, -1), be_const_func(lvbe_list_add_btn) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_list_map, - 29 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_msgbox.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_msgbox.h index 6a349f213..f60c95fdd 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_msgbox.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_msgbox.h @@ -1,28 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_msgbox_map) { - { be_const_key(get_text, 12), be_const_func(lvbe_msgbox_get_text) }, - { be_const_key(set_anim_time, 3), be_const_func(lvbe_msgbox_set_anim_time) }, - { be_const_key(tostring, 0), be_const_func(lvx_tostring) }, - { be_const_key(add_btns, 4), be_const_func(lvbe_msgbox_add_btns) }, - { be_const_key(get_active_btn, -1), be_const_func(lvbe_msgbox_get_active_btn) }, - { be_const_key(stop_auto_close, -1), be_const_func(lvbe_msgbox_stop_auto_close) }, - { be_const_key(start_auto_close, -1), be_const_func(lvbe_msgbox_start_auto_close) }, - { be_const_key(init, -1), be_const_func(lvbe_msgbox_create) }, - { be_const_key(get_btnmatrix, -1), be_const_func(lvbe_msgbox_get_btnmatrix) }, - { be_const_key(get_anim_time, 6), be_const_func(lvbe_msgbox_get_anim_time) }, - { be_const_key(set_text_fmt, -1), be_const_func(lvbe_msgbox_set_text_fmt) }, - { be_const_key(set_recolor, 10), be_const_func(lvbe_msgbox_set_recolor) }, - { be_const_key(get_active_btn_text, -1), be_const_func(lvbe_msgbox_get_active_btn_text) }, - { be_const_key(dot_p, 8), be_const_int(0) }, - { be_const_key(get_recolor, -1), be_const_func(lvbe_msgbox_get_recolor) }, - { be_const_key(set_text, 7), be_const_func(lvbe_msgbox_set_text) }, - { be_const_key(create, -1), be_const_func(lvbe_msgbox_create) }, + { be_const_key(init, 2), be_const_func(lvbe_msgbox_create) }, + { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, + { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_msgbox_map, - 17 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_obj.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_obj.h index dec9038bf..5f5328325 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_obj.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_obj.h @@ -1,314 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_obj_map) { - { be_const_key(set_style_local_value_line_space, -1), be_const_func(lvbe_obj_set_style_local_value_line_space) }, - { be_const_key(get_style_scale_width, 160), be_const_func(lvbe_obj_get_style_scale_width) }, - { be_const_key(set_style_local_line_opa, 109), be_const_func(lvbe_obj_set_style_local_line_opa) }, - { be_const_key(get_style_border_color, -1), be_const_func(lvbe_obj_get_style_border_color) }, - { be_const_key(set_style_local_scale_border_width, -1), be_const_func(lvbe_obj_set_style_local_scale_border_width) }, - { be_const_key(get_style_shadow_color, 254), be_const_func(lvbe_obj_get_style_shadow_color) }, - { be_const_key(get_style_line_dash_gap, -1), be_const_func(lvbe_obj_get_style_line_dash_gap) }, - { be_const_key(get_height, -1), be_const_func(lvbe_obj_get_height) }, - { be_const_key(get_style_transform_angle, 21), be_const_func(lvbe_obj_get_style_transform_angle) }, - { be_const_key(get_style_image_recolor_opa, 277), be_const_func(lvbe_obj_get_style_image_recolor_opa) }, - { be_const_key(get_group, 129), be_const_func(lvbe_obj_get_group) }, - { be_const_key(set_style_local_text_color, -1), be_const_func(lvbe_obj_set_style_local_text_color) }, - { be_const_key(get_style_pattern_recolor_opa, -1), be_const_func(lvbe_obj_get_style_pattern_recolor_opa) }, - { be_const_key(get_local_style, -1), be_const_func(lvbe_obj_get_local_style) }, - { be_const_key(fade_in, -1), be_const_func(lvbe_obj_fade_in) }, - { be_const_key(get_style_value_line_space, 215), be_const_func(lvbe_obj_get_style_value_line_space) }, - { be_const_key(set_style_local_line_blend_mode, 186), be_const_func(lvbe_obj_set_style_local_line_blend_mode) }, - { be_const_key(get_style_size, -1), be_const_func(lvbe_obj_get_style_size) }, - { be_const_key(set_style_local_shadow_opa, -1), be_const_func(lvbe_obj_set_style_local_shadow_opa) }, - { be_const_key(get_drag_throw, 211), be_const_func(lvbe_obj_get_drag_throw) }, - { be_const_key(get_style_line_width, 38), be_const_func(lvbe_obj_get_style_line_width) }, - { be_const_key(set_drag_throw, 252), be_const_func(lvbe_obj_set_drag_throw) }, - { be_const_key(set_style_local_image_opa, 287), be_const_func(lvbe_obj_set_style_local_image_opa) }, - { be_const_key(init_draw_label_dsc, 60), be_const_func(lvbe_obj_init_draw_label_dsc) }, - { be_const_key(get_style_shadow_ofs_y, -1), be_const_func(lvbe_obj_get_style_shadow_ofs_y) }, - { be_const_key(set_style_local_pattern_blend_mode, 194), be_const_func(lvbe_obj_set_style_local_pattern_blend_mode) }, - { be_const_key(set_style_local_value_blend_mode, 81), be_const_func(lvbe_obj_set_style_local_value_blend_mode) }, - { be_const_key(set_size, -1), be_const_func(lvbe_obj_set_size) }, - { be_const_key(set_focus_parent, -1), be_const_func(lvbe_obj_set_focus_parent) }, - { be_const_key(get_screen, -1), be_const_func(lvbe_obj_get_screen) }, - { be_const_key(get_ext_click_pad_top, -1), be_const_func(lvbe_obj_get_ext_click_pad_top) }, - { be_const_key(set_style_local_value_ofs_y, -1), be_const_func(lvbe_obj_set_style_local_value_ofs_y) }, - { be_const_key(create, -1), be_const_func(lvbe_obj_create) }, - { be_const_key(get_style_pattern_image, -1), be_const_func(lvbe_obj_get_style_pattern_image) }, - { be_const_key(get_style_line_opa, -1), be_const_func(lvbe_obj_get_style_line_opa) }, - { be_const_key(set_state, 180), be_const_func(lvbe_obj_set_state) }, - { be_const_key(get_style_outline_opa, 22), be_const_func(lvbe_obj_get_style_outline_opa) }, - { be_const_key(set_style_local_transition_path, 52), be_const_func(lvbe_obj_set_style_local_transition_path) }, - { be_const_key(set_style_local_bg_main_stop, -1), be_const_func(lvbe_obj_set_style_local_bg_main_stop) }, - { be_const_key(get_inner_coords, 301), be_const_func(lvbe_obj_get_inner_coords) }, - { be_const_key(set_style_local_scale_end_border_width, -1), be_const_func(lvbe_obj_set_style_local_scale_end_border_width) }, - { be_const_key(set_style_local_pattern_repeat, 62), be_const_func(lvbe_obj_set_style_local_pattern_repeat) }, - { be_const_key(set_style_local_bg_color, 64), be_const_func(lvbe_obj_set_style_local_bg_color) }, - { be_const_key(set_click, 268), be_const_func(lvbe_obj_set_click) }, - { be_const_key(get_style_text_letter_space, 245), be_const_func(lvbe_obj_get_style_text_letter_space) }, - { be_const_key(set_style_local_pad_top, -1), be_const_func(lvbe_obj_set_style_local_pad_top) }, - { be_const_key(set_style_local_border_width, -1), be_const_func(lvbe_obj_set_style_local_border_width) }, - { be_const_key(get_style_transform_height, 184), be_const_func(lvbe_obj_get_style_transform_height) }, - { be_const_key(get_ext_click_pad_bottom, -1), be_const_func(lvbe_obj_get_ext_click_pad_bottom) }, - { be_const_key(get_drag_parent, -1), be_const_func(lvbe_obj_get_drag_parent) }, - { be_const_key(get_style_line_dash_width, 266), be_const_func(lvbe_obj_get_style_line_dash_width) }, - { be_const_key(get_style_bg_grad_stop, -1), be_const_func(lvbe_obj_get_style_bg_grad_stop) }, - { be_const_key(move_background, -1), be_const_func(lvbe_obj_move_background) }, - { be_const_key(get_style_line_color, -1), be_const_func(lvbe_obj_get_style_line_color) }, - { be_const_key(get_style_margin_right, -1), be_const_func(lvbe_obj_get_style_margin_right) }, - { be_const_key(get_style_image_recolor, -1), be_const_func(lvbe_obj_get_style_image_recolor) }, - { be_const_key(add_state, -1), be_const_func(lvbe_obj_add_state) }, - { be_const_key(set_design_cb, -1), be_const_func(lvbe_obj_set_design_cb) }, - { be_const_key(set_style_local_bg_blend_mode, -1), be_const_func(lvbe_obj_set_style_local_bg_blend_mode) }, - { be_const_key(get_style_shadow_blend_mode, -1), be_const_func(lvbe_obj_get_style_shadow_blend_mode) }, - { be_const_key(set_style_local_transition_delay, 195), be_const_func(lvbe_obj_set_style_local_transition_delay) }, - { be_const_key(align_x, 93), be_const_func(lvbe_obj_align_x) }, - { be_const_key(get_style_bg_main_stop, 168), be_const_func(lvbe_obj_get_style_bg_main_stop) }, - { be_const_key(get_style_border_width, 74), be_const_func(lvbe_obj_get_style_border_width) }, - { be_const_key(get_style_border_blend_mode, -1), be_const_func(lvbe_obj_get_style_border_blend_mode) }, - { be_const_key(clear_protect, -1), be_const_func(lvbe_obj_clear_protect) }, - { be_const_key(move_foreground, -1), be_const_func(lvbe_obj_move_foreground) }, - { be_const_key(get_style_bg_grad_dir, -1), be_const_func(lvbe_obj_get_style_bg_grad_dir) }, - { be_const_key(set_style_local_transition_prop_2, -1), be_const_func(lvbe_obj_set_style_local_transition_prop_2) }, - { be_const_key(set_style_local_pad_inner, -1), be_const_func(lvbe_obj_set_style_local_pad_inner) }, - { be_const_key(get_style_border_opa, -1), be_const_func(lvbe_obj_get_style_border_opa) }, - { be_const_key(set_style_local_border_opa, -1), be_const_func(lvbe_obj_set_style_local_border_opa) }, - { be_const_key(set_style_local_line_color, -1), be_const_func(lvbe_obj_set_style_local_line_color) }, - { be_const_key(get_style_line_blend_mode, -1), be_const_func(lvbe_obj_get_style_line_blend_mode) }, - { be_const_key(get_style_text_sel_color, -1), be_const_func(lvbe_obj_get_style_text_sel_color) }, - { be_const_key(set_style_local_shadow_ofs_x, -1), be_const_func(lvbe_obj_set_style_local_shadow_ofs_x) }, - { be_const_key(set_style_local_radius, 267), be_const_func(lvbe_obj_set_style_local_radius) }, - { be_const_key(init_draw_line_dsc, -1), be_const_func(lvbe_obj_init_draw_line_dsc) }, - { be_const_key(is_focused, -1), be_const_func(lvbe_obj_is_focused) }, - { be_const_key(get_adv_hittest, 116), be_const_func(lvbe_obj_get_adv_hittest) }, - { be_const_key(set_style_local_text_letter_space, -1), be_const_func(lvbe_obj_set_style_local_text_letter_space) }, - { be_const_key(get_click, -1), be_const_func(lvbe_obj_get_click) }, - { be_const_key(get_style_shadow_spread, -1), be_const_func(lvbe_obj_get_style_shadow_spread) }, - { be_const_key(set_style_local_outline_pad, -1), be_const_func(lvbe_obj_set_style_local_outline_pad) }, - { be_const_key(set_event_cb, 131), be_const_func(lvbe_obj_set_event_cb) }, - { be_const_key(realign, 94), be_const_func(lvbe_obj_realign) }, - { be_const_key(set_parent_event, 191), be_const_func(lvbe_obj_set_parent_event) }, - { be_const_key(get_style_value_ofs_y, -1), be_const_func(lvbe_obj_get_style_value_ofs_y) }, - { be_const_key(get_focus_parent, 117), be_const_func(lvbe_obj_get_focus_parent) }, - { be_const_key(clean, 170), be_const_func(lvbe_obj_clean) }, - { be_const_key(set_ext_click_area, -1), be_const_func(lvbe_obj_set_ext_click_area) }, - { be_const_key(get_style_pattern_recolor, 133), be_const_func(lvbe_obj_get_style_pattern_recolor) }, - { be_const_key(get_coords, -1), be_const_func(lvbe_obj_get_coords) }, - { be_const_key(get_width_margin, -1), be_const_func(lvbe_obj_get_width_margin) }, - { be_const_key(set_gesture_parent, 130), be_const_func(lvbe_obj_set_gesture_parent) }, - { be_const_key(get_ext_click_pad_right, 57), be_const_func(lvbe_obj_get_ext_click_pad_right) }, - { be_const_key(set_style_local_clip_corner, -1), be_const_func(lvbe_obj_set_style_local_clip_corner) }, - { be_const_key(invalidate_area, 236), be_const_func(lvbe_obj_invalidate_area) }, - { be_const_key(is_point_on_coords, -1), be_const_func(lvbe_obj_is_point_on_coords) }, - { be_const_key(set_style_local_bg_grad_stop, -1), be_const_func(lvbe_obj_set_style_local_bg_grad_stop) }, - { be_const_key(get_style_pad_bottom, 119), be_const_func(lvbe_obj_get_style_pad_bottom) }, - { be_const_key(set_style_local_transform_angle, -1), be_const_func(lvbe_obj_set_style_local_transform_angle) }, - { be_const_key(get_style_pad_right, 67), be_const_func(lvbe_obj_get_style_pad_right) }, - { be_const_key(set_style_local_transform_height, -1), be_const_func(lvbe_obj_set_style_local_transform_height) }, - { be_const_key(set_style_local_transition_prop_1, -1), be_const_func(lvbe_obj_set_style_local_transition_prop_1) }, - { be_const_key(set_style_local_pad_bottom, -1), be_const_func(lvbe_obj_set_style_local_pad_bottom) }, - { be_const_key(set_style_local_scale_end_color, 141), be_const_func(lvbe_obj_set_style_local_scale_end_color) }, - { be_const_key(get_drag_dir, -1), be_const_func(lvbe_obj_get_drag_dir) }, - { be_const_key(get_child_back, -1), be_const_func(lvbe_obj_get_child_back) }, - { be_const_key(set_style_local_outline_color, 138), be_const_func(lvbe_obj_set_style_local_outline_color) }, - { be_const_key(set_adv_hittest, -1), be_const_func(lvbe_obj_set_adv_hittest) }, - { be_const_key(init_draw_rect_dsc, 82), be_const_func(lvbe_obj_init_draw_rect_dsc) }, - { be_const_key(get_parent_event, -1), be_const_func(lvbe_obj_get_parent_event) }, - { be_const_key(get_style_transition_prop_4, -1), be_const_func(lvbe_obj_get_style_transition_prop_4) }, - { be_const_key(set_style_local_pattern_image, 166), be_const_func(lvbe_obj_set_style_local_pattern_image) }, - { be_const_key(set_style_local_margin_right, -1), be_const_func(lvbe_obj_set_style_local_margin_right) }, - { be_const_key(get_hidden, -1), be_const_func(lvbe_obj_get_hidden) }, - { be_const_key(get_user_data, 169), be_const_func(lvbe_obj_get_user_data) }, - { be_const_key(get_style_pattern_blend_mode, 136), be_const_func(lvbe_obj_get_style_pattern_blend_mode) }, - { be_const_key(get_style_transition_prop_6, -1), be_const_func(lvbe_obj_get_style_transition_prop_6) }, - { be_const_key(get_style_value_letter_space, 33), be_const_func(lvbe_obj_get_style_value_letter_space) }, - { be_const_key(get_style_shadow_ofs_x, 173), be_const_func(lvbe_obj_get_style_shadow_ofs_x) }, - { be_const_key(get_style_value_blend_mode, -1), be_const_func(lvbe_obj_get_style_value_blend_mode) }, - { be_const_key(get_height_fit, -1), be_const_func(lvbe_obj_get_height_fit) }, - { be_const_key(set_style_local_shadow_blend_mode, -1), be_const_func(lvbe_obj_set_style_local_shadow_blend_mode) }, - { be_const_key(area_is_visible, -1), be_const_func(lvbe_obj_area_is_visible) }, - { be_const_key(set_style_local_size, -1), be_const_func(lvbe_obj_set_style_local_size) }, - { be_const_key(set_style_local_bg_grad_color, -1), be_const_func(lvbe_obj_set_style_local_bg_grad_color) }, - { be_const_key(get_style_transition_delay, -1), be_const_func(lvbe_obj_get_style_transition_delay) }, - { be_const_key(get_type, -1), be_const_func(lvbe_obj_get_type) }, - { be_const_key(get_protect, 265), be_const_func(lvbe_obj_get_protect) }, - { be_const_key(get_auto_realign, -1), be_const_func(lvbe_obj_get_auto_realign) }, - { be_const_key(get_style_clip_corner, -1), be_const_func(lvbe_obj_get_style_clip_corner) }, - { be_const_key(get_style_transition_time, -1), be_const_func(lvbe_obj_get_style_transition_time) }, - { be_const_key(get_style_margin_left, -1), be_const_func(lvbe_obj_get_style_margin_left) }, - { be_const_key(get_height_margin, 233), be_const_func(lvbe_obj_get_height_margin) }, - { be_const_key(get_style_image_opa, -1), be_const_func(lvbe_obj_get_style_image_opa) }, - { be_const_key(set_style_local_margin_left, 257), be_const_func(lvbe_obj_set_style_local_margin_left) }, - { be_const_key(get_width_fit, -1), be_const_func(lvbe_obj_get_width_fit) }, - { be_const_key(get_style_margin_top, 147), be_const_func(lvbe_obj_get_style_margin_top) }, - { be_const_key(set_style_local_value_align, -1), be_const_func(lvbe_obj_set_style_local_value_align) }, - { be_const_key(get_width_grid, 29), be_const_func(lvbe_obj_get_width_grid) }, - { be_const_key(get_style_line_rounded, -1), be_const_func(lvbe_obj_get_style_line_rounded) }, - { be_const_key(get_ext_attr, -1), be_const_func(lvbe_obj_get_ext_attr) }, - { be_const_key(set_style_local_line_rounded, -1), be_const_func(lvbe_obj_set_style_local_line_rounded) }, - { be_const_key(set_style_local_outline_opa, -1), be_const_func(lvbe_obj_set_style_local_outline_opa) }, - { be_const_key(del, 218), be_const_func(lvbe_obj_del) }, - { be_const_key(get_style_outline_color, 177), be_const_func(lvbe_obj_get_style_outline_color) }, - { be_const_key(refresh_ext_draw_pad, 285), be_const_func(lvbe_obj_refresh_ext_draw_pad) }, - { be_const_key(remove_style, 227), be_const_func(lvbe_obj_remove_style) }, - { be_const_key(allocate_ext_attr, -1), be_const_func(lvbe_obj_allocate_ext_attr) }, - { be_const_key(invalidate, -1), be_const_func(lvbe_obj_invalidate) }, - { be_const_key(set_drag_parent, -1), be_const_func(lvbe_obj_set_drag_parent) }, - { be_const_key(set_style_local_transition_prop_6, -1), be_const_func(lvbe_obj_set_style_local_transition_prop_6) }, + { be_const_key(init, 2), be_const_func(lvbe_obj_create) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(set_style_local_bg_opa, 159), be_const_func(lvbe_obj_set_style_local_bg_opa) }, - { be_const_key(get_style_margin_bottom, 28), be_const_func(lvbe_obj_get_style_margin_bottom) }, - { be_const_key(get_parent, -1), be_const_func(lvbe_obj_get_parent) }, - { be_const_key(align_y, -1), be_const_func(lvbe_obj_align_y) }, - { be_const_key(set_style_local_scale_end_line_width, -1), be_const_func(lvbe_obj_set_style_local_scale_end_line_width) }, - { be_const_key(get_style_image_blend_mode, -1), be_const_func(lvbe_obj_get_style_image_blend_mode) }, - { be_const_key(finish_transitions, -1), be_const_func(lvbe_obj_finish_transitions) }, - { be_const_key(remove_style_local_prop, -1), be_const_func(lvbe_obj_remove_style_local_prop) }, - { be_const_key(get_style_value_opa, 140), be_const_func(lvbe_obj_get_style_value_opa) }, - { be_const_key(get_style_value_str, -1), be_const_func(lvbe_obj_get_style_value_str) }, - { be_const_key(set_style_local_value_letter_space, 104), be_const_func(lvbe_obj_set_style_local_value_letter_space) }, - { be_const_key(set_pos, -1), be_const_func(lvbe_obj_set_pos) }, - { be_const_key(set_drag_dir, -1), be_const_func(lvbe_obj_set_drag_dir) }, - { be_const_key(get_style_bg_blend_mode, 59), be_const_func(lvbe_obj_get_style_bg_blend_mode) }, - { be_const_key(get_style_transition_prop_3, 262), be_const_func(lvbe_obj_get_style_transition_prop_3) }, - { be_const_key(set_width, -1), be_const_func(lvbe_obj_set_width) }, - { be_const_key(get_height_grid, -1), be_const_func(lvbe_obj_get_height_grid) }, - { be_const_key(set_style_local_pattern_opa, 302), be_const_func(lvbe_obj_set_style_local_pattern_opa) }, - { be_const_key(get_child, -1), be_const_func(lvbe_obj_get_child) }, - { be_const_key(set_base_dir, -1), be_const_func(lvbe_obj_set_base_dir) }, - { be_const_key(set_style_local_outline_blend_mode, -1), be_const_func(lvbe_obj_set_style_local_outline_blend_mode) }, - { be_const_key(count_children, 174), be_const_func(lvbe_obj_count_children) }, - { be_const_key(set_style_local_shadow_spread, -1), be_const_func(lvbe_obj_set_style_local_shadow_spread) }, - { be_const_key(is_visible, -1), be_const_func(lvbe_obj_is_visible) }, - { be_const_key(get_style_scale_end_border_width, 251), be_const_func(lvbe_obj_get_style_scale_end_border_width) }, - { be_const_key(get_focused_obj, -1), be_const_func(lvbe_obj_get_focused_obj) }, - { be_const_key(get_style_value_align, -1), be_const_func(lvbe_obj_get_style_value_align) }, - { be_const_key(get_style_bg_grad_color, 48), be_const_func(lvbe_obj_get_style_bg_grad_color) }, - { be_const_key(set_style_local_image_recolor_opa, -1), be_const_func(lvbe_obj_set_style_local_image_recolor_opa) }, - { be_const_key(get_style_outline_pad, -1), be_const_func(lvbe_obj_get_style_outline_pad) }, - { be_const_key(get_style_transition_prop_2, -1), be_const_func(lvbe_obj_get_style_transition_prop_2) }, - { be_const_key(set_width_fit, -1), be_const_func(lvbe_obj_set_width_fit) }, - { be_const_key(set_style_local_shadow_color, 234), be_const_func(lvbe_obj_set_style_local_shadow_color) }, - { be_const_key(set_style_local_scale_width, -1), be_const_func(lvbe_obj_set_style_local_scale_width) }, - { be_const_key(get_top, -1), be_const_func(lvbe_obj_get_top) }, - { be_const_key(get_style_pad_inner, -1), be_const_func(lvbe_obj_get_style_pad_inner) }, - { be_const_key(set_style_local_margin_bottom, -1), be_const_func(lvbe_obj_set_style_local_margin_bottom) }, - { be_const_key(get_style_outline_blend_mode, 77), be_const_func(lvbe_obj_get_style_outline_blend_mode) }, - { be_const_key(set_style_local_line_dash_width, 70), be_const_func(lvbe_obj_set_style_local_line_dash_width) }, - { be_const_key(get_x, -1), be_const_func(lvbe_obj_get_x) }, - { be_const_key(set_auto_realign, -1), be_const_func(lvbe_obj_set_auto_realign) }, - { be_const_key(set_style_local_border_color, -1), be_const_func(lvbe_obj_set_style_local_border_color) }, - { be_const_key(get_style_transition_prop_5, -1), be_const_func(lvbe_obj_get_style_transition_prop_5) }, - { be_const_key(set_style_local_pattern_recolor_opa, -1), be_const_func(lvbe_obj_set_style_local_pattern_recolor_opa) }, - { be_const_key(add_protect, -1), be_const_func(lvbe_obj_add_protect) }, - { be_const_key(set_style_local_pad_right, 190), be_const_func(lvbe_obj_set_style_local_pad_right) }, - { be_const_key(get_base_dir, -1), be_const_func(lvbe_obj_get_base_dir) }, - { be_const_key(is_protected, -1), be_const_func(lvbe_obj_is_protected) }, - { be_const_key(get_style_radius, -1), be_const_func(lvbe_obj_get_style_radius) }, - { be_const_key(get_style_border_post, 126), be_const_func(lvbe_obj_get_style_border_post) }, - { be_const_key(get_style_text_line_space, 235), be_const_func(lvbe_obj_get_style_text_line_space) }, - { be_const_key(set_style_local_opa_scale, -1), be_const_func(lvbe_obj_set_style_local_opa_scale) }, - { be_const_key(set_signal_cb, -1), be_const_func(lvbe_obj_set_signal_cb) }, - { be_const_key(set_style_local_image_blend_mode, 124), be_const_func(lvbe_obj_set_style_local_image_blend_mode) }, - { be_const_key(set_drag, 181), be_const_func(lvbe_obj_set_drag) }, - { be_const_key(set_style_local_line_width, -1), be_const_func(lvbe_obj_set_style_local_line_width) }, - { be_const_key(set_style_local_text_sel_color, 208), be_const_func(lvbe_obj_set_style_local_text_sel_color) }, - { be_const_key(get_gesture_parent, 54), be_const_func(lvbe_obj_get_gesture_parent) }, - { be_const_key(get_draw_rect_ext_pad_size, -1), be_const_func(lvbe_obj_get_draw_rect_ext_pad_size) }, - { be_const_key(set_style_local_text_opa, -1), be_const_func(lvbe_obj_set_style_local_text_opa) }, - { be_const_key(refresh_style, -1), be_const_func(lvbe_obj_refresh_style) }, - { be_const_key(hittest, 183), be_const_func(lvbe_obj_hittest) }, - { be_const_key(clear_state, -1), be_const_func(lvbe_obj_clear_state) }, - { be_const_key(set_style_local_value_color, -1), be_const_func(lvbe_obj_set_style_local_value_color) }, - { be_const_key(get_style_scale_grad_color, 13), be_const_func(lvbe_obj_get_style_scale_grad_color) }, - { be_const_key(reset_style_list, 12), be_const_func(lvbe_obj_reset_style_list) }, - { be_const_key(set_width_margin, 19), be_const_func(lvbe_obj_set_width_margin) }, - { be_const_key(get_style_bg_opa, -1), be_const_func(lvbe_obj_get_style_bg_opa) }, - { be_const_key(get_style_scale_border_width, -1), be_const_func(lvbe_obj_get_style_scale_border_width) }, - { be_const_key(align, -1), be_const_func(lvbe_obj_align) }, - { be_const_key(align_mid, -1), be_const_func(lvbe_obj_align_mid) }, - { be_const_key(set_style_local_border_side, -1), be_const_func(lvbe_obj_set_style_local_border_side) }, - { be_const_key(set_style_local_transition_time, -1), be_const_func(lvbe_obj_set_style_local_transition_time) }, - { be_const_key(init, 217), be_const_func(lvbe_obj_create) }, - { be_const_key(set_style_local_text_font, -1), be_const_func(lvbe_obj_set_style_local_text_font) }, - { be_const_key(set_style_local_text_sel_bg_color, -1), be_const_func(lvbe_obj_set_style_local_text_sel_bg_color) }, - { be_const_key(get_y, 151), be_const_func(lvbe_obj_get_y) }, - { be_const_key(get_style_border_side, 4), be_const_func(lvbe_obj_get_style_border_side) }, - { be_const_key(set_hidden, -1), be_const_func(lvbe_obj_set_hidden) }, - { be_const_key(set_style_local_value_opa, 244), be_const_func(lvbe_obj_set_style_local_value_opa) }, - { be_const_key(set_style_local_margin_top, -1), be_const_func(lvbe_obj_set_style_local_margin_top) }, - { be_const_key(set_style_local_value_str, -1), be_const_func(lvbe_obj_set_style_local_value_str) }, - { be_const_key(set_style_local_value_ofs_x, 187), be_const_func(lvbe_obj_set_style_local_value_ofs_x) }, - { be_const_key(get_style_text_color, 51), be_const_func(lvbe_obj_get_style_text_color) }, - { be_const_key(get_style_pattern_opa, -1), be_const_func(lvbe_obj_get_style_pattern_opa) }, - { be_const_key(clean_style_list, -1), be_const_func(lvbe_obj_clean_style_list) }, - { be_const_key(set_style_local_text_blend_mode, -1), be_const_func(lvbe_obj_set_style_local_text_blend_mode) }, - { be_const_key(get_style_transform_width, -1), be_const_func(lvbe_obj_get_style_transform_width) }, - { be_const_key(set_style_local_transform_zoom, 239), be_const_func(lvbe_obj_set_style_local_transform_zoom) }, - { be_const_key(set_style_local_scale_grad_color, 188), be_const_func(lvbe_obj_set_style_local_scale_grad_color) }, - { be_const_key(set_style_local_transition_prop_4, -1), be_const_func(lvbe_obj_set_style_local_transition_prop_4) }, - { be_const_key(set_style_local_pattern_recolor, -1), be_const_func(lvbe_obj_set_style_local_pattern_recolor) }, - { be_const_key(set_style_local_shadow_width, -1), be_const_func(lvbe_obj_set_style_local_shadow_width) }, - { be_const_key(get_style_opa_scale, -1), be_const_func(lvbe_obj_get_style_opa_scale) }, - { be_const_key(set_style_local_bg_grad_dir, -1), be_const_func(lvbe_obj_set_style_local_bg_grad_dir) }, - { be_const_key(set_top, 269), be_const_func(lvbe_obj_set_top) }, - { be_const_key(set_y, -1), be_const_func(lvbe_obj_set_y) }, - { be_const_key(get_width, -1), be_const_func(lvbe_obj_get_width) }, - { be_const_key(set_style_local_border_post, -1), be_const_func(lvbe_obj_set_style_local_border_post) }, - { be_const_key(get_style_value_color, -1), be_const_func(lvbe_obj_get_style_value_color) }, - { be_const_key(get_style_text_opa, -1), be_const_func(lvbe_obj_get_style_text_opa) }, - { be_const_key(set_style_local_pad_left, 295), be_const_func(lvbe_obj_set_style_local_pad_left) }, - { be_const_key(get_style_shadow_width, -1), be_const_func(lvbe_obj_get_style_shadow_width) }, - { be_const_key(report_style_mod, -1), be_const_func(lvbe_obj_report_style_mod) }, - { be_const_key(get_style_pad_top, 110), be_const_func(lvbe_obj_get_style_pad_top) }, - { be_const_key(set_style_local_line_dash_gap, -1), be_const_func(lvbe_obj_set_style_local_line_dash_gap) }, - { be_const_key(get_style_scale_end_line_width, 201), be_const_func(lvbe_obj_get_style_scale_end_line_width) }, - { be_const_key(del_anim_ready_cb, -1), be_const_func(lvbe_obj_del_anim_ready_cb) }, - { be_const_key(set_style_local_transform_width, -1), be_const_func(lvbe_obj_set_style_local_transform_width) }, - { be_const_key(get_style_bg_color, -1), be_const_func(lvbe_obj_get_style_bg_color) }, - { be_const_key(get_style_text_blend_mode, -1), be_const_func(lvbe_obj_get_style_text_blend_mode) }, - { be_const_key(align_mid_x, -1), be_const_func(lvbe_obj_align_mid_x) }, - { be_const_key(get_style_outline_width, -1), be_const_func(lvbe_obj_get_style_outline_width) }, - { be_const_key(get_ext_draw_pad, -1), be_const_func(lvbe_obj_get_ext_draw_pad) }, - { be_const_key(dot_p, 278), be_const_int(0) }, - { be_const_key(get_style_pattern_repeat, -1), be_const_func(lvbe_obj_get_style_pattern_repeat) }, - { be_const_key(set_style_local_image_recolor, -1), be_const_func(lvbe_obj_set_style_local_image_recolor) }, - { be_const_key(init_draw_img_dsc, -1), be_const_func(lvbe_obj_init_draw_img_dsc) }, - { be_const_key(set_style_local_border_blend_mode, 148), be_const_func(lvbe_obj_set_style_local_border_blend_mode) }, - { be_const_key(set_style_local_transition_prop_3, 72), be_const_func(lvbe_obj_set_style_local_transition_prop_3) }, - { be_const_key(get_state, -1), be_const_func(lvbe_obj_get_state) }, - { be_const_key(set_x, -1), be_const_func(lvbe_obj_set_x) }, - { be_const_key(set_style_local_text_decor, -1), be_const_func(lvbe_obj_set_style_local_text_decor) }, - { be_const_key(set_style_local_transition_prop_5, -1), be_const_func(lvbe_obj_set_style_local_transition_prop_5) }, - { be_const_key(set_height, 172), be_const_func(lvbe_obj_set_height) }, - { be_const_key(del_async, 213), be_const_func(lvbe_obj_del_async) }, - { be_const_key(set_style_local_shadow_ofs_y, -1), be_const_func(lvbe_obj_set_style_local_shadow_ofs_y) }, - { be_const_key(get_style_transition_prop_1, -1), be_const_func(lvbe_obj_get_style_transition_prop_1) }, - { be_const_key(count_children_recursive, -1), be_const_func(lvbe_obj_count_children_recursive) }, - { be_const_key(get_style_pad_left, -1), be_const_func(lvbe_obj_get_style_pad_left) }, - { be_const_key(set_user_data, -1), be_const_func(lvbe_obj_set_user_data) }, - { be_const_key(set_height_margin, 288), be_const_func(lvbe_obj_set_height_margin) }, - { be_const_key(set_style_local_text_line_space, -1), be_const_func(lvbe_obj_set_style_local_text_line_space) }, - { be_const_key(get_style_scale_end_color, -1), be_const_func(lvbe_obj_get_style_scale_end_color) }, - { be_const_key(set_height_fit, -1), be_const_func(lvbe_obj_set_height_fit) }, - { be_const_key(get_style_transform_zoom, 283), be_const_func(lvbe_obj_get_style_transform_zoom) }, - { be_const_key(handle_get_type_signal, -1), be_const_func(lvbe_obj_handle_get_type_signal) }, - { be_const_key(fade_out, -1), be_const_func(lvbe_obj_fade_out) }, - { be_const_key(get_style_value_ofs_x, 125), be_const_func(lvbe_obj_get_style_value_ofs_x) }, - { be_const_key(get_ext_click_pad_left, 113), be_const_func(lvbe_obj_get_ext_click_pad_left) }, - { be_const_key(align_mid_y, -1), be_const_func(lvbe_obj_align_mid_y) }, - { be_const_key(get_drag, -1), be_const_func(lvbe_obj_get_drag) }, - { be_const_key(set_style_local_value_font, 17), be_const_func(lvbe_obj_set_style_local_value_font) }, - { be_const_key(get_style_shadow_opa, -1), be_const_func(lvbe_obj_get_style_shadow_opa) }, - { be_const_key(set_parent, -1), be_const_func(lvbe_obj_set_parent) }, - { be_const_key(add_style, 73), be_const_func(lvbe_obj_add_style) }, - { be_const_key(set_style_local_outline_width, -1), be_const_func(lvbe_obj_set_style_local_outline_width) }, - { be_const_key(get_style_text_sel_bg_color, -1), be_const_func(lvbe_obj_get_style_text_sel_bg_color) }, + { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_obj_map, - 303 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_objmask.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_objmask.h index 2175712ca..e0d00517a 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_objmask.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_objmask.h @@ -1,17 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_objmask_map) { + { be_const_key(init, 2), be_const_func(lvbe_objmask_create) }, + { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(tostring, 0), be_const_func(lvx_tostring) }, - { be_const_key(remove_mask, -1), be_const_func(lvbe_objmask_remove_mask) }, - { be_const_key(init, -1), be_const_func(lvbe_objmask_create) }, - { be_const_key(create, -1), be_const_func(lvbe_objmask_create) }, - { be_const_key(update_mask, 4), be_const_func(lvbe_objmask_update_mask) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_objmask_map, - 6 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_page.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_page.h index 2e8e90c40..a345946de 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_page.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_page.h @@ -1,47 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_page_map) { - { be_const_key(on_edge, -1), be_const_func(lvbe_page_on_edge) }, - { be_const_key(glue_obj, -1), be_const_func(lvbe_page_glue_obj) }, - { be_const_key(scroll_ver, -1), be_const_func(lvbe_page_scroll_ver) }, - { be_const_key(get_height_fit, -1), be_const_func(lvbe_page_get_height_fit) }, - { be_const_key(get_scrollbar_mode, 16), be_const_func(lvbe_page_get_scrollbar_mode) }, - { be_const_key(create, 29), be_const_func(lvbe_page_create) }, - { be_const_key(get_scrl_height, -1), be_const_func(lvbe_page_get_scrl_height) }, - { be_const_key(set_scrl_layout, -1), be_const_func(lvbe_page_set_scrl_layout) }, - { be_const_key(set_edge_flash, -1), be_const_func(lvbe_page_set_edge_flash) }, - { be_const_key(get_height_grid, -1), be_const_func(lvbe_page_get_height_grid) }, - { be_const_key(get_scrl_fit_bottom, 1), be_const_func(lvbe_page_get_scrl_fit_bottom) }, - { be_const_key(get_scrl_layout, 18), be_const_func(lvbe_page_get_scrl_layout) }, - { be_const_key(get_scrl_fit_left, 33), be_const_func(lvbe_page_get_scrl_fit_left) }, - { be_const_key(get_width_grid, -1), be_const_func(lvbe_page_get_width_grid) }, - { be_const_key(set_scrl_height, 6), be_const_func(lvbe_page_set_scrl_height) }, - { be_const_key(init, -1), be_const_func(lvbe_page_create) }, - { be_const_key(get_edge_flash, -1), be_const_func(lvbe_page_get_edge_flash) }, - { be_const_key(focus, -1), be_const_func(lvbe_page_focus) }, - { be_const_key(set_anim_time, -1), be_const_func(lvbe_page_set_anim_time) }, + { be_const_key(init, 2), be_const_func(lvbe_page_create) }, + { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(get_width_fit, 22), be_const_func(lvbe_page_get_width_fit) }, - { be_const_key(get_scrollable, 34), be_const_func(lvbe_page_get_scrollable) }, - { be_const_key(get_scroll_propagation, -1), be_const_func(lvbe_page_get_scroll_propagation) }, - { be_const_key(get_scrl_width, -1), be_const_func(lvbe_page_get_scrl_width) }, - { be_const_key(set_scrollbar_mode, 9), be_const_func(lvbe_page_set_scrollbar_mode) }, - { be_const_key(tostring, 27), be_const_func(lvx_tostring) }, - { be_const_key(clean, -1), be_const_func(lvbe_page_clean) }, - { be_const_key(set_scrollable_fit2, -1), be_const_func(lvbe_page_set_scrollable_fit2) }, - { be_const_key(set_scroll_propagation, 32), be_const_func(lvbe_page_set_scroll_propagation) }, - { be_const_key(set_scrollable_fit, -1), be_const_func(lvbe_page_set_scrollable_fit) }, - { be_const_key(scroll_hor, -1), be_const_func(lvbe_page_scroll_hor) }, - { be_const_key(get_anim_time, 17), be_const_func(lvbe_page_get_anim_time) }, - { be_const_key(start_edge_flash, -1), be_const_func(lvbe_page_start_edge_flash) }, - { be_const_key(get_scrl_fit_top, -1), be_const_func(lvbe_page_get_scrl_fit_top) }, - { be_const_key(get_scrl_fit_right, -1), be_const_func(lvbe_page_get_scrl_fit_right) }, - { be_const_key(set_scrl_width, -1), be_const_func(lvbe_page_set_scrl_width) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_page_map, - 36 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_roller.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_roller.h index b7ba4f84f..82995edf2 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_roller.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_roller.h @@ -1,28 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_roller_map) { - { be_const_key(set_options, -1), be_const_func(lvbe_roller_set_options) }, - { be_const_key(get_align, 6), be_const_func(lvbe_roller_get_align) }, - { be_const_key(set_visible_row_count, 12), be_const_func(lvbe_roller_set_visible_row_count) }, - { be_const_key(get_selected_str, -1), be_const_func(lvbe_roller_get_selected_str) }, - { be_const_key(get_selected, -1), be_const_func(lvbe_roller_get_selected) }, - { be_const_key(set_selected, -1), be_const_func(lvbe_roller_set_selected) }, - { be_const_key(set_anim_time, 0), be_const_func(lvbe_roller_set_anim_time) }, - { be_const_key(set_align, -1), be_const_func(lvbe_roller_set_align) }, - { be_const_key(get_auto_fit, -1), be_const_func(lvbe_roller_get_auto_fit) }, - { be_const_key(set_auto_fit, 10), be_const_func(lvbe_roller_set_auto_fit) }, - { be_const_key(get_anim_time, -1), be_const_func(lvbe_roller_get_anim_time) }, - { be_const_key(get_option_cnt, 5), be_const_func(lvbe_roller_get_option_cnt) }, + { be_const_key(init, 2), be_const_func(lvbe_roller_create) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(get_options, 14), be_const_func(lvbe_roller_get_options) }, { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(init, 7), be_const_func(lvbe_roller_create) }, - { be_const_key(create, -1), be_const_func(lvbe_roller_create) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_roller_map, - 17 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_slider.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_slider.h index 6e51a05c7..10a0a7823 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_slider.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_slider.h @@ -1,27 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_slider_map) { - { be_const_key(get_type, -1), be_const_func(lvbe_slider_get_type) }, - { be_const_key(get_anim_time, -1), be_const_func(lvbe_slider_get_anim_time) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(init, 10), be_const_func(lvbe_slider_create) }, - { be_const_key(is_dragged, -1), be_const_func(lvbe_slider_is_dragged) }, + { be_const_key(init, 2), be_const_func(lvbe_slider_create) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(create, -1), be_const_func(lvbe_slider_create) }, - { be_const_key(get_value, -1), be_const_func(lvbe_slider_get_value) }, - { be_const_key(get_max_value, -1), be_const_func(lvbe_slider_get_max_value) }, - { be_const_key(set_range, 7), be_const_func(lvbe_slider_set_range) }, - { be_const_key(set_anim_time, 2), be_const_func(lvbe_slider_set_anim_time) }, - { be_const_key(get_left_value, -1), be_const_func(lvbe_slider_get_left_value) }, - { be_const_key(set_type, -1), be_const_func(lvbe_slider_set_type) }, - { be_const_key(set_value, 6), be_const_func(lvbe_slider_set_value) }, - { be_const_key(get_min_value, -1), be_const_func(lvbe_slider_get_min_value) }, - { be_const_key(set_left_value, 1), be_const_func(lvbe_slider_set_left_value) }, + { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_slider_map, - 16 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_spinbox.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_spinbox.h index c641683f3..14129797d 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_spinbox.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_spinbox.h @@ -1,28 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_spinbox_map) { - { be_const_key(get_value, 6), be_const_func(lvbe_spinbox_get_value) }, - { be_const_key(decrement, -1), be_const_func(lvbe_spinbox_decrement) }, - { be_const_key(tostring, 4), be_const_func(lvx_tostring) }, - { be_const_key(set_value, -1), be_const_func(lvbe_spinbox_set_value) }, - { be_const_key(step_next, 11), be_const_func(lvbe_spinbox_step_next) }, - { be_const_key(init, -1), be_const_func(lvbe_spinbox_create) }, - { be_const_key(set_rollover, -1), be_const_func(lvbe_spinbox_set_rollover) }, - { be_const_key(get_step, -1), be_const_func(lvbe_spinbox_get_step) }, - { be_const_key(set_padding_left, -1), be_const_func(lvbe_spinbox_set_padding_left) }, - { be_const_key(set_digit_format, -1), be_const_func(lvbe_spinbox_set_digit_format) }, - { be_const_key(increment, -1), be_const_func(lvbe_spinbox_increment) }, - { be_const_key(set_range, -1), be_const_func(lvbe_spinbox_set_range) }, - { be_const_key(get_rollover, -1), be_const_func(lvbe_spinbox_get_rollover) }, + { be_const_key(init, 2), be_const_func(lvbe_spinbox_create) }, + { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(set_step, -1), be_const_func(lvbe_spinbox_set_step) }, - { be_const_key(step_prev, 5), be_const_func(lvbe_spinbox_step_prev) }, - { be_const_key(create, -1), be_const_func(lvbe_spinbox_create) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_spinbox_map, - 17 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_spinner.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_spinner.h index 1e61698e5..5f5e44912 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_spinner.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_spinner.h @@ -1,24 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_spinner_map) { - { be_const_key(tostring, 8), be_const_func(lvx_tostring) }, - { be_const_key(get_dir, -1), be_const_func(lvbe_spinner_get_dir) }, - { be_const_key(get_arc_length, -1), be_const_func(lvbe_spinner_get_arc_length) }, - { be_const_key(dot_p, 4), be_const_int(0) }, - { be_const_key(create, -1), be_const_func(lvbe_spinner_create) }, - { be_const_key(get_spin_time, -1), be_const_func(lvbe_spinner_get_spin_time) }, - { be_const_key(init, 1), be_const_func(lvbe_spinner_create) }, - { be_const_key(anim_cb, -1), be_const_func(lvbe_spinner_anim_cb) }, - { be_const_key(set_spin_time, 10), be_const_func(lvbe_spinner_set_spin_time) }, - { be_const_key(set_arc_length, -1), be_const_func(lvbe_spinner_set_arc_length) }, - { be_const_key(set_type, 7), be_const_func(lvbe_spinner_set_type) }, - { be_const_key(get_type, 3), be_const_func(lvbe_spinner_get_type) }, - { be_const_key(set_dir, 5), be_const_func(lvbe_spinner_set_dir) }, + { be_const_key(init, 2), be_const_func(lvbe_spinner_create) }, + { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, + { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_spinner_map, - 13 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_style.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_style.h index 1cb58622f..f3bc896ad 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_style.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_style.h @@ -1,114 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_style_map) { - { be_const_key(set_line_dash_width, -1), be_const_func(lvbe_style_set_line_dash_width) }, - { be_const_key(set_bg_grad_dir, -1), be_const_func(lvbe_style_set_bg_grad_dir) }, - { be_const_key(set_text_blend_mode, 84), be_const_func(lvbe_style_set_text_blend_mode) }, - { be_const_key(set_border_blend_mode, 75), be_const_func(lvbe_style_set_border_blend_mode) }, - { be_const_key(set_bg_main_stop, -1), be_const_func(lvbe_style_set_bg_main_stop) }, - { be_const_key(list_get_local_style, -1), be_const_func(lvbe_style_list_get_local_style) }, - { be_const_key(set_transform_height, 40), be_const_func(lvbe_style_set_transform_height) }, - { be_const_key(set_shadow_opa, 33), be_const_func(lvbe_style_set_shadow_opa) }, - { be_const_key(set_value_blend_mode, 51), be_const_func(lvbe_style_set_value_blend_mode) }, - { be_const_key(set_shadow_ofs_x, -1), be_const_func(lvbe_style_set_shadow_ofs_x) }, - { be_const_key(set_pattern_blend_mode, -1), be_const_func(lvbe_style_set_pattern_blend_mode) }, - { be_const_key(set_text_letter_space, -1), be_const_func(lvbe_style_set_text_letter_space) }, - { be_const_key(set_margin_right, 14), be_const_func(lvbe_style_set_margin_right) }, - { be_const_key(set_transition_delay, -1), be_const_func(lvbe_style_set_transition_delay) }, - { be_const_key(set_shadow_blend_mode, -1), be_const_func(lvbe_style_set_shadow_blend_mode) }, - { be_const_key(set_value_color, -1), be_const_func(lvbe_style_set_value_color) }, - { be_const_key(set_text_line_space, -1), be_const_func(lvbe_style_set_text_line_space) }, - { be_const_key(set_transition_prop_1, -1), be_const_func(lvbe_style_set_transition_prop_1) }, - { be_const_key(set_pattern_image, 47), be_const_func(lvbe_style_set_pattern_image) }, - { be_const_key(set_image_recolor, -1), be_const_func(lvbe_style_set_image_recolor) }, - { be_const_key(set_pattern_opa, -1), be_const_func(lvbe_style_set_pattern_opa) }, - { be_const_key(set_outline_blend_mode, -1), be_const_func(lvbe_style_set_outline_blend_mode) }, - { be_const_key(set_radius, -1), be_const_func(lvbe_style_set_radius) }, - { be_const_key(set_text_color, -1), be_const_func(lvbe_style_set_text_color) }, - { be_const_key(set_pattern_repeat, -1), be_const_func(lvbe_style_set_pattern_repeat) }, - { be_const_key(set_value_align, -1), be_const_func(lvbe_style_set_value_align) }, - { be_const_key(set_scale_width, 82), be_const_func(lvbe_style_set_scale_width) }, - { be_const_key(set_line_color, -1), be_const_func(lvbe_style_set_line_color) }, - { be_const_key(set_text_opa, 4), be_const_func(lvbe_style_set_text_opa) }, - { be_const_key(set_size, -1), be_const_func(lvbe_style_set_size) }, - { be_const_key(set_border_opa, 72), be_const_func(lvbe_style_set_border_opa) }, - { be_const_key(set_line_opa, 12), be_const_func(lvbe_style_set_line_opa) }, - { be_const_key(set_pad_inner, -1), be_const_func(lvbe_style_set_pad_inner) }, - { be_const_key(set_margin_bottom, -1), be_const_func(lvbe_style_set_margin_bottom) }, - { be_const_key(set_margin_top, 66), be_const_func(lvbe_style_set_margin_top) }, - { be_const_key(init, -1), be_const_func(lvs_init) }, - { be_const_key(set_transition_prop_2, -1), be_const_func(lvbe_style_set_transition_prop_2) }, - { be_const_key(set_transition_prop_5, -1), be_const_func(lvbe_style_set_transition_prop_5) }, - { be_const_key(set_transition_prop_6, 26), be_const_func(lvbe_style_set_transition_prop_6) }, - { be_const_key(set_border_post, 30), be_const_func(lvbe_style_set_border_post) }, - { be_const_key(set_scale_end_line_width, -1), be_const_func(lvbe_style_set_scale_end_line_width) }, - { be_const_key(set_pad_left, 64), be_const_func(lvbe_style_set_pad_left) }, - { be_const_key(set_scale_border_width, -1), be_const_func(lvbe_style_set_scale_border_width) }, - { be_const_key(set_line_blend_mode, 34), be_const_func(lvbe_style_set_line_blend_mode) }, - { be_const_key(set_image_recolor_opa, -1), be_const_func(lvbe_style_set_image_recolor_opa) }, - { be_const_key(set_bg_color, -1), be_const_func(lvbe_style_set_bg_color) }, - { be_const_key(set_pad_bottom, -1), be_const_func(lvbe_style_set_pad_bottom) }, - { be_const_key(set_transition_time, -1), be_const_func(lvbe_style_set_transition_time) }, - { be_const_key(set_outline_pad, 67), be_const_func(lvbe_style_set_outline_pad) }, - { be_const_key(set_transform_angle, 32), be_const_func(lvbe_style_set_transform_angle) }, - { be_const_key(set_value_line_space, -1), be_const_func(lvbe_style_set_value_line_space) }, - { be_const_key(set_image_opa, 76), be_const_func(lvbe_style_set_image_opa) }, - { be_const_key(set_pattern_recolor, -1), be_const_func(lvbe_style_set_pattern_recolor) }, - { be_const_key(set_bg_grad_color, 85), be_const_func(lvbe_style_set_bg_grad_color) }, - { be_const_key(set_value_letter_space, -1), be_const_func(lvbe_style_set_value_letter_space) }, - { be_const_key(set_shadow_spread, 0), be_const_func(lvbe_style_set_shadow_spread) }, - { be_const_key(set_text_font, 97), be_const_func(lvbe_style_set_text_font) }, - { be_const_key(set_line_width, -1), be_const_func(lvbe_style_set_line_width) }, - { be_const_key(set_shadow_color, -1), be_const_func(lvbe_style_set_shadow_color) }, - { be_const_key(set_transform_zoom, -1), be_const_func(lvbe_style_set_transform_zoom) }, - { be_const_key(set_outline_color, 79), be_const_func(lvbe_style_set_outline_color) }, - { be_const_key(set_shadow_ofs_y, 87), be_const_func(lvbe_style_set_shadow_ofs_y) }, - { be_const_key(set_text_sel_bg_color, -1), be_const_func(lvbe_style_set_text_sel_bg_color) }, - { be_const_key(set_text_decor, -1), be_const_func(lvbe_style_set_text_decor) }, + { be_const_key(init, 2), be_const_func(lvs_init) }, { be_const_key(tostring, -1), be_const_func(lvs_tostring) }, - { be_const_key(set_clip_corner, -1), be_const_func(lvbe_style_set_clip_corner) }, - { be_const_key(set_value_str, -1), be_const_func(lvbe_style_set_value_str) }, - { be_const_key(set_pattern_recolor_opa, 16), be_const_func(lvbe_style_set_pattern_recolor_opa) }, - { be_const_key(set_border_side, -1), be_const_func(lvbe_style_set_border_side) }, - { be_const_key(set_scale_grad_color, -1), be_const_func(lvbe_style_set_scale_grad_color) }, - { be_const_key(set_line_rounded, 10), be_const_func(lvbe_style_set_line_rounded) }, - { be_const_key(set_pad_right, 35), be_const_func(lvbe_style_set_pad_right) }, - { be_const_key(set_transition_prop_4, -1), be_const_func(lvbe_style_set_transition_prop_4) }, - { be_const_key(set_transition_prop_3, 99), be_const_func(lvbe_style_set_transition_prop_3) }, - { be_const_key(list_init, -1), be_const_func(lvbe_style_list_init) }, - { be_const_key(set_transform_width, -1), be_const_func(lvbe_style_set_transform_width) }, - { be_const_key(set_bg_grad_stop, -1), be_const_func(lvbe_style_set_bg_grad_stop) }, { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(set_value_opa, 50), be_const_func(lvbe_style_set_value_opa) }, - { be_const_key(set_value_font, -1), be_const_func(lvbe_style_set_value_font) }, - { be_const_key(set_text_sel_color, -1), be_const_func(lvbe_style_set_text_sel_color) }, - { be_const_key(set_outline_width, -1), be_const_func(lvbe_style_set_outline_width) }, - { be_const_key(set_value_ofs_x, 11), be_const_func(lvbe_style_set_value_ofs_x) }, - { be_const_key(set_scale_end_color, -1), be_const_func(lvbe_style_set_scale_end_color) }, - { be_const_key(set_margin_left, -1), be_const_func(lvbe_style_set_margin_left) }, - { be_const_key(copy, -1), be_const_func(lvbe_style_copy) }, - { be_const_key(set_shadow_width, -1), be_const_func(lvbe_style_set_shadow_width) }, - { be_const_key(set_bg_opa, -1), be_const_func(lvbe_style_set_bg_opa) }, - { be_const_key(list_copy, 73), be_const_func(lvbe_style_list_copy) }, - { be_const_key(set_value_ofs_y, 17), be_const_func(lvbe_style_set_value_ofs_y) }, - { be_const_key(set_opa_scale, 15), be_const_func(lvbe_style_set_opa_scale) }, - { be_const_key(set_scale_end_border_width, 37), be_const_func(lvbe_style_set_scale_end_border_width) }, - { be_const_key(set_border_color, 81), be_const_func(lvbe_style_set_border_color) }, - { be_const_key(set_line_dash_gap, 95), be_const_func(lvbe_style_set_line_dash_gap) }, - { be_const_key(set_bg_blend_mode, -1), be_const_func(lvbe_style_set_bg_blend_mode) }, - { be_const_key(remove_prop, 77), be_const_func(lvbe_style_remove_prop) }, - { be_const_key(set_border_width, -1), be_const_func(lvbe_style_set_border_width) }, - { be_const_key(set_image_blend_mode, -1), be_const_func(lvbe_style_set_image_blend_mode) }, - { be_const_key(set_transition_path, -1), be_const_func(lvbe_style_set_transition_path) }, - { be_const_key(set_outline_opa, 29), be_const_func(lvbe_style_set_outline_opa) }, - { be_const_key(reset, -1), be_const_func(lvbe_style_reset) }, - { be_const_key(set_pad_top, 45), be_const_func(lvbe_style_set_pad_top) }, - { be_const_key(list_get_style, -1), be_const_func(lvbe_style_list_get_style) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_style_map, - 103 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_switch.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_switch.h index e7011f6d0..335286fce 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_switch.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_switch.h @@ -1,21 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_switch_map) { - { be_const_key(get_anim_time, 1), be_const_func(lvbe_switch_get_anim_time) }, - { be_const_key(init, -1), be_const_func(lvbe_switch_create) }, - { be_const_key(off, -1), be_const_func(lvbe_switch_off) }, - { be_const_key(toggle, -1), be_const_func(lvbe_switch_toggle) }, - { be_const_key(on, -1), be_const_func(lvbe_switch_on) }, - { be_const_key(tostring, 0), be_const_func(lvx_tostring) }, - { be_const_key(get_state, -1), be_const_func(lvbe_switch_get_state) }, - { be_const_key(set_anim_time, 8), be_const_func(lvbe_switch_set_anim_time) }, - { be_const_key(create, -1), be_const_func(lvbe_switch_create) }, - { be_const_key(dot_p, 6), be_const_int(0) }, + { be_const_key(init, 2), be_const_func(lvbe_switch_create) }, + { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, + { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_switch_map, - 10 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_table.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_table.h index 9b63755bc..9ad524712 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_table.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_table.h @@ -1,33 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_table_map) { - { be_const_key(init, -1), be_const_func(lvbe_table_create) }, - { be_const_key(set_cell_crop, -1), be_const_func(lvbe_table_set_cell_crop) }, - { be_const_key(set_cell_value, -1), be_const_func(lvbe_table_set_cell_value) }, + { be_const_key(init, 2), be_const_func(lvbe_table_create) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(set_cell_merge_right, -1), be_const_func(lvbe_table_set_cell_merge_right) }, - { be_const_key(set_cell_type, -1), be_const_func(lvbe_table_set_cell_type) }, - { be_const_key(get_col_width, 15), be_const_func(lvbe_table_get_col_width) }, - { be_const_key(get_row_cnt, 12), be_const_func(lvbe_table_get_row_cnt) }, - { be_const_key(set_row_cnt, -1), be_const_func(lvbe_table_set_row_cnt) }, - { be_const_key(get_cell_crop, 0), be_const_func(lvbe_table_get_cell_crop) }, - { be_const_key(get_cell_align, 14), be_const_func(lvbe_table_get_cell_align) }, - { be_const_key(create, -1), be_const_func(lvbe_table_create) }, - { be_const_key(get_cell_merge_right, -1), be_const_func(lvbe_table_get_cell_merge_right) }, - { be_const_key(set_col_width, -1), be_const_func(lvbe_table_set_col_width) }, - { be_const_key(set_cell_align, -1), be_const_func(lvbe_table_set_cell_align) }, { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(set_cell_value_fmt, 10), be_const_func(lvbe_table_set_cell_value_fmt) }, - { be_const_key(set_col_cnt, -1), be_const_func(lvbe_table_set_col_cnt) }, - { be_const_key(get_col_cnt, 17), be_const_func(lvbe_table_get_col_cnt) }, - { be_const_key(get_cell_type, 6), be_const_func(lvbe_table_get_cell_type) }, - { be_const_key(get_cell_value, 7), be_const_func(lvbe_table_get_cell_value) }, - { be_const_key(get_pressed_cell, 13), be_const_func(lvbe_table_get_pressed_cell) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_table_map, - 22 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_tabview.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_tabview.h index 5aba1814a..1c29ebe88 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_tabview.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_tabview.h @@ -1,26 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_tabview_map) { - { be_const_key(init, -1), be_const_func(lvbe_tabview_create) }, - { be_const_key(get_anim_time, 13), be_const_func(lvbe_tabview_get_anim_time) }, - { be_const_key(set_anim_time, 8), be_const_func(lvbe_tabview_set_anim_time) }, - { be_const_key(add_tab, 6), be_const_func(lvbe_tabview_add_tab) }, + { be_const_key(init, 2), be_const_func(lvbe_tabview_create) }, + { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(set_btns_pos, 12), be_const_func(lvbe_tabview_set_btns_pos) }, - { be_const_key(get_tab_count, -1), be_const_func(lvbe_tabview_get_tab_count) }, - { be_const_key(get_tab_act, 11), be_const_func(lvbe_tabview_get_tab_act) }, - { be_const_key(create, -1), be_const_func(lvbe_tabview_create) }, - { be_const_key(get_btns_pos, -1), be_const_func(lvbe_tabview_get_btns_pos) }, - { be_const_key(set_tab_act, 1), be_const_func(lvbe_tabview_set_tab_act) }, - { be_const_key(clean_tab, -1), be_const_func(lvbe_tabview_clean_tab) }, - { be_const_key(get_tab, -1), be_const_func(lvbe_tabview_get_tab) }, - { be_const_key(tostring, 14), be_const_func(lvx_tostring) }, - { be_const_key(set_tab_name, -1), be_const_func(lvbe_tabview_set_tab_name) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_tabview_map, - 15 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_textarea.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_textarea.h index 25cbc8835..0284a9e59 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_textarea.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_textarea.h @@ -1,58 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_textarea_map) { - { be_const_key(get_text, -1), be_const_func(lvbe_textarea_get_text) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(get_pwd_mode, 10), be_const_func(lvbe_textarea_get_pwd_mode) }, - { be_const_key(get_text_sel_en, 27), be_const_func(lvbe_textarea_get_text_sel_en) }, - { be_const_key(set_scrollbar_mode, 41), be_const_func(lvbe_textarea_set_scrollbar_mode) }, - { be_const_key(set_cursor_click_pos, -1), be_const_func(lvbe_textarea_set_cursor_click_pos) }, - { be_const_key(set_text, 9), be_const_func(lvbe_textarea_set_text) }, - { be_const_key(del_char, 39), be_const_func(lvbe_textarea_del_char) }, - { be_const_key(cursor_right, 42), be_const_func(lvbe_textarea_cursor_right) }, - { be_const_key(cursor_up, -1), be_const_func(lvbe_textarea_cursor_up) }, - { be_const_key(cursor_down, -1), be_const_func(lvbe_textarea_cursor_down) }, - { be_const_key(set_text_align, 45), be_const_func(lvbe_textarea_set_text_align) }, - { be_const_key(set_pwd_mode, -1), be_const_func(lvbe_textarea_set_pwd_mode) }, - { be_const_key(del_char_forward, -1), be_const_func(lvbe_textarea_del_char_forward) }, - { be_const_key(text_is_selected, 38), be_const_func(lvbe_textarea_text_is_selected) }, - { be_const_key(get_cursor_hidden, -1), be_const_func(lvbe_textarea_get_cursor_hidden) }, - { be_const_key(set_text_sel, -1), be_const_func(lvbe_textarea_set_text_sel) }, - { be_const_key(set_insert_replace, -1), be_const_func(lvbe_textarea_set_insert_replace) }, - { be_const_key(get_max_length, 34), be_const_func(lvbe_textarea_get_max_length) }, - { be_const_key(set_cursor_blink_time, 25), be_const_func(lvbe_textarea_set_cursor_blink_time) }, - { be_const_key(add_char, 19), be_const_func(lvbe_textarea_add_char) }, - { be_const_key(init, -1), be_const_func(lvbe_textarea_create) }, - { be_const_key(get_edge_flash, -1), be_const_func(lvbe_textarea_get_edge_flash) }, - { be_const_key(set_cursor_hidden, 0), be_const_func(lvbe_textarea_set_cursor_hidden) }, - { be_const_key(get_one_line, -1), be_const_func(lvbe_textarea_get_one_line) }, - { be_const_key(get_placeholder_text, -1), be_const_func(lvbe_textarea_get_placeholder_text) }, - { be_const_key(set_cursor_pos, -1), be_const_func(lvbe_textarea_set_cursor_pos) }, - { be_const_key(get_scrollbar_mode, -1), be_const_func(lvbe_textarea_get_scrollbar_mode) }, - { be_const_key(get_cursor_blink_time, 17), be_const_func(lvbe_textarea_get_cursor_blink_time) }, - { be_const_key(get_scroll_propagation, 28), be_const_func(lvbe_textarea_get_scroll_propagation) }, - { be_const_key(get_label, 18), be_const_func(lvbe_textarea_get_label) }, - { be_const_key(cursor_left, -1), be_const_func(lvbe_textarea_cursor_left) }, - { be_const_key(set_accepted_chars, -1), be_const_func(lvbe_textarea_set_accepted_chars) }, - { be_const_key(set_placeholder_text, 31), be_const_func(lvbe_textarea_set_placeholder_text) }, - { be_const_key(set_max_length, -1), be_const_func(lvbe_textarea_set_max_length) }, - { be_const_key(get_accepted_chars, 37), be_const_func(lvbe_textarea_get_accepted_chars) }, - { be_const_key(get_cursor_click_pos, -1), be_const_func(lvbe_textarea_get_cursor_click_pos) }, - { be_const_key(get_cursor_pos, -1), be_const_func(lvbe_textarea_get_cursor_pos) }, - { be_const_key(set_pwd_show_time, -1), be_const_func(lvbe_textarea_set_pwd_show_time) }, - { be_const_key(set_edge_flash, -1), be_const_func(lvbe_textarea_set_edge_flash) }, - { be_const_key(clear_selection, 22), be_const_func(lvbe_textarea_clear_selection) }, - { be_const_key(get_pwd_show_time, -1), be_const_func(lvbe_textarea_get_pwd_show_time) }, + { be_const_key(init, 2), be_const_func(lvbe_textarea_create) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(set_one_line, -1), be_const_func(lvbe_textarea_set_one_line) }, - { be_const_key(add_text, 7), be_const_func(lvbe_textarea_add_text) }, - { be_const_key(set_scroll_propagation, -1), be_const_func(lvbe_textarea_set_scroll_propagation) }, - { be_const_key(create, -1), be_const_func(lvbe_textarea_create) }, + { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_textarea_map, - 47 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_tileview.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_tileview.h index 2887c8219..34111754a 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_tileview.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_tileview.h @@ -1,23 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_tileview_map) { - { be_const_key(get_tile_act, 2), be_const_func(lvbe_tileview_get_tile_act) }, + { be_const_key(init, 2), be_const_func(lvbe_tileview_create) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(init, -1), be_const_func(lvbe_tileview_create) }, - { be_const_key(add_element, 0), be_const_func(lvbe_tileview_add_element) }, - { be_const_key(get_edge_flash, -1), be_const_func(lvbe_tileview_get_edge_flash) }, - { be_const_key(set_valid_positions, 6), be_const_func(lvbe_tileview_set_valid_positions) }, - { be_const_key(create, -1), be_const_func(lvbe_tileview_create) }, - { be_const_key(set_tile_act, 9), be_const_func(lvbe_tileview_set_tile_act) }, - { be_const_key(set_edge_flash, -1), be_const_func(lvbe_tileview_set_edge_flash) }, - { be_const_key(dot_p, 10), be_const_int(0) }, - { be_const_key(get_anim_time, -1), be_const_func(lvbe_tileview_get_anim_time) }, - { be_const_key(set_anim_time, -1), be_const_func(lvbe_tileview_set_anim_time) }, + { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_tileview_map, - 12 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_win.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_win.h index bf7f60f75..5d65d04e9 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_win.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_win.h @@ -1,42 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_win_map) { - { be_const_key(set_content_size, 10), be_const_func(lvbe_win_set_content_size) }, - { be_const_key(set_layout, -1), be_const_func(lvbe_win_set_layout) }, + { be_const_key(init, 2), be_const_func(lvbe_win_create) }, + { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(get_title, -1), be_const_func(lvbe_win_get_title) }, - { be_const_key(clean, 8), be_const_func(lvbe_win_clean) }, - { be_const_key(get_content, -1), be_const_func(lvbe_win_get_content) }, - { be_const_key(set_btn_width, -1), be_const_func(lvbe_win_set_btn_width) }, - { be_const_key(title_get_alignment, -1), be_const_func(lvbe_win_title_get_alignment) }, - { be_const_key(scroll_hor, -1), be_const_func(lvbe_win_scroll_hor) }, - { be_const_key(add_btn_right, -1), be_const_func(lvbe_win_add_btn_right) }, - { be_const_key(get_anim_time, 13), be_const_func(lvbe_win_get_anim_time) }, - { be_const_key(init, -1), be_const_func(lvbe_win_create) }, - { be_const_key(get_from_btn, 15), be_const_func(lvbe_win_get_from_btn) }, - { be_const_key(add_btn_left, -1), be_const_func(lvbe_win_add_btn_left) }, - { be_const_key(title_set_alignment, -1), be_const_func(lvbe_win_title_set_alignment) }, - { be_const_key(scroll_ver, -1), be_const_func(lvbe_win_scroll_ver) }, - { be_const_key(set_header_height, -1), be_const_func(lvbe_win_set_header_height) }, - { be_const_key(focus, 19), be_const_func(lvbe_win_focus) }, - { be_const_key(set_anim_time, 5), be_const_func(lvbe_win_set_anim_time) }, - { be_const_key(close_event_cb, -1), be_const_func(lvbe_win_close_event_cb) }, - { be_const_key(create, -1), be_const_func(lvbe_win_create) }, - { be_const_key(get_sb_mode, 7), be_const_func(lvbe_win_get_sb_mode) }, - { be_const_key(get_btn_width, -1), be_const_func(lvbe_win_get_btn_width) }, - { be_const_key(get_width, -1), be_const_func(lvbe_win_get_width) }, - { be_const_key(get_layout, -1), be_const_func(lvbe_win_get_layout) }, - { be_const_key(set_drag, 2), be_const_func(lvbe_win_set_drag) }, - { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, - { be_const_key(set_scrollbar_mode, -1), be_const_func(lvbe_win_set_scrollbar_mode) }, - { be_const_key(set_title, 24), be_const_func(lvbe_win_set_title) }, - { be_const_key(get_drag, 11), be_const_func(lvbe_win_get_drag) }, - { be_const_key(get_header_height, -1), be_const_func(lvbe_win_get_header_height) }, + { be_const_key(member, 0), be_const_func(lvx_member) }, }; static be_define_const_map( be_class_lv_win_map, - 31 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_lvgl.h b/lib/libesp32/Berry/generate/be_fixed_lvgl.h index 75d8d2df5..b284e5ab2 100644 --- a/lib/libesp32/Berry/generate/be_fixed_lvgl.h +++ b/lib/libesp32/Berry/generate/be_fixed_lvgl.h @@ -1,474 +1,83 @@ #include "be_constobj.h" static be_define_const_map_slots(m_liblvgl_map) { - { be_const_key(screenshot, 63), be_const_func(lv0_screenshot) }, - { be_const_key(ALIGN_OUT_LEFT_BOTTOM, -1), be_const_int(17) }, - { be_const_key(SYMBOL_PLAY, 26), be_const_str(&be_local_const_str_SYMBOL_PLAY) }, - { be_const_key(DISP_SIZE_MEDIUM, -1), be_const_int(1) }, - { be_const_key(SYMBOL_BLUETOOTH, -1), be_const_str(&be_local_const_str_SYMBOL_BLUETOOTH) }, - { be_const_key(SLIDER_TYPE_RANGE, -1), be_const_int(2) }, - { be_const_key(LED_PART_MAIN, -1), be_const_int(0) }, - { be_const_key(SPINNER_DIR_BACKWARD, -1), be_const_int(1) }, - { be_const_key(STYLE_LINE_DASH_GAP, 10), be_const_int(147) }, - { be_const_key(STYLE_TRANSITION_PROP_2, -1), be_const_int(179) }, - { be_const_key(CHART_AXIS_SECONDARY_Y, -1), be_const_int(1) }, - { be_const_key(OPA_TRANSP, 79), be_const_int(0) }, - { be_const_key(OBJMASK_PART_MAIN, 32), be_const_int(0) }, - { be_const_key(DISP_SIZE_LARGE, 61), be_const_int(2) }, - { be_const_key(SYMBOL_SAVE, -1), be_const_str(&be_local_const_str_SYMBOL_SAVE) }, - { be_const_key(SLIDER_TYPE_SYMMETRICAL, 276), be_const_int(1) }, - { be_const_key(CHART_TYPE_LINE, -1), be_const_int(1) }, - { be_const_key(BLEND_MODE_ADDITIVE, -1), be_const_int(1) }, - { be_const_key(ALIGN_OUT_RIGHT_BOTTOM, -1), be_const_int(20) }, - { be_const_key(ALIGN_IN_BOTTOM_LEFT, -1), be_const_int(4) }, - { be_const_key(CHART_PART_SERIES, -1), be_const_int(2) }, - { be_const_key(LABEL_LONG_EXPAND, -1), be_const_int(0) }, - { be_const_key(STYLE_TEXT_LETTER_SPACE, 274), be_const_int(32896) }, - { be_const_key(SYMBOL_LIST, -1), be_const_str(&be_local_const_str_SYMBOL_LIST) }, - { be_const_key(STYLE_TRANSITION_PROP_6, -1), be_const_int(183) }, - { be_const_key(SYMBOL_HOME, -1), be_const_str(&be_local_const_str_SYMBOL_HOME) }, - { be_const_key(CHART_CURSOR_RIGHT, 157), be_const_int(1) }, - { be_const_key(OBJ_PART_REAL_FIRST, -1), be_const_int(64) }, - { be_const_key(STYLE_PAD_RIGHT, -1), be_const_int(19) }, - { be_const_key(EVENT_LONG_PRESSED, 134), be_const_int(4) }, - { be_const_key(TXT_FLAG_EXPAND, 66), be_const_int(2) }, - { be_const_key(BORDER_SIDE_RIGHT, 136), be_const_int(8) }, - { be_const_key(OBJ_PART_MAIN, -1), be_const_int(0) }, - { be_const_key(SYMBOL_NEW_LINE, -1), be_const_str(&be_local_const_str_SYMBOL_NEW_LINE) }, - { be_const_key(ANIM_OFF, -1), be_const_int(0) }, - { be_const_key(SYMBOL_OK, -1), be_const_str(&be_local_const_str_SYMBOL_OK) }, - { be_const_key(CALENDAR_PART_DAY_NAMES, 336), be_const_int(2) }, - { be_const_key(OPA_70, -1), be_const_int(178) }, - { be_const_key(OPA_60, 131), be_const_int(153) }, - { be_const_key(I2C, 339), be_const_int(1) }, - { be_const_key(PAGE_EDGE_LEFT, -1), be_const_int(1) }, - { be_const_key(OBJ_PART_ALL, -1), be_const_int(255) }, - { be_const_key(ALIGN_OUT_LEFT_TOP, 43), be_const_int(15) }, - { be_const_key(STYLE_LINE_DASH_WIDTH, -1), be_const_int(146) }, - { be_const_key(STYLE_SCALE_END_LINE_WIDTH, 17), be_const_int(195) }, - { be_const_key(LABEL_LONG_SROLL, -1), be_const_int(3) }, - { be_const_key(STYLE_SHADOW_COLOR, -1), be_const_int(89) }, - { be_const_key(BLEND_MODE_NORMAL, 442), be_const_int(0) }, - { be_const_key(layer_top, 234), be_const_func(lv0_layer_top) }, - { be_const_key(KEY_DEL, 206), be_const_int(127) }, - { be_const_key(FIT_MAX, -1), be_const_int(3) }, - { be_const_key(STYLE_CLIP_CORNER, 225), be_const_int(2) }, - { be_const_key(CHART_CURSOR_DOWN, 355), be_const_int(8) }, - { be_const_key(LAYOUT_COLUMN_LEFT, 448), be_const_int(2) }, - { be_const_key(LAYOUT_CENTER, 462), be_const_int(1) }, - { be_const_key(EVENT_APPLY, -1), be_const_int(19) }, - { be_const_key(STYLE_BORDER_COLOR, -1), be_const_int(57) }, - { be_const_key(SSPI, 406), be_const_int(2) }, - { be_const_key(STYLE_SCALE_BORDER_WIDTH, 146), be_const_int(193) }, - { be_const_key(SYMBOL_STOP, -1), be_const_str(&be_local_const_str_SYMBOL_STOP) }, - { be_const_key(FS_RES_NOT_IMP, -1), be_const_int(9) }, - { be_const_key(CPICKER_PART_MAIN, 143), be_const_int(0) }, - { be_const_key(KEY_NEXT, -1), be_const_int(9) }, - { be_const_key(SYMBOL_MINUS, 150), be_const_str(&be_local_const_str_SYMBOL_MINUS) }, - { be_const_key(ALIGN_OUT_TOP_RIGHT, -1), be_const_int(11) }, { be_const_key(SYMBOL_EYE_CLOSE, -1), be_const_str(&be_local_const_str_SYMBOL_EYE_CLOSE) }, - { be_const_key(CHART_AXIS_PRIMARY_Y, 68), be_const_int(0) }, - { be_const_key(BTNMATRIX_CTRL_HIDDEN, -1), be_const_int(8) }, - { be_const_key(OPA_10, 116), be_const_int(25) }, - { be_const_key(SCROLLBAR_MODE_HIDE, -1), be_const_int(4) }, - { be_const_key(STYLE_BORDER_OPA, -1), be_const_int(60) }, - { be_const_key(SPINNER_TYPE_SPINNING_ARC, -1), be_const_int(0) }, - { be_const_key(BLEND_MODE_SUBTRACTIVE, 313), be_const_int(2) }, - { be_const_key(STYLE_TRANSFORM_ANGLE, -1), be_const_int(6) }, - { be_const_key(STYLE_TEXT_BLEND_MODE, -1), be_const_int(32899) }, - { be_const_key(STATE_PRESSED, 39), be_const_int(16) }, - { be_const_key(TXT_FLAG_FIT, -1), be_const_int(16) }, - { be_const_key(CPICKER_COLOR_MODE_SATURATION, 60), be_const_int(1) }, - { be_const_key(LIST_PART_EDGE_FLASH, -1), be_const_int(2) }, - { be_const_key(FS_RES_OUT_OF_MEM, 80), be_const_int(10) }, - { be_const_key(GRAD_DIR_VER, 120), be_const_int(1) }, - { be_const_key(BLACK, 435), be_const_int(0) }, - { be_const_key(KEY_UP, -1), be_const_int(17) }, - { be_const_key(STYLE_TRANSITION_PROP_4, -1), be_const_int(181) }, - { be_const_key(TXT_FLAG_RIGHT, 446), be_const_int(8) }, - { be_const_key(PAGE_EDGE_RIGHT, -1), be_const_int(4) }, - { be_const_key(ARC_PART_BG, 183), be_const_int(0) }, - { be_const_key(GESTURE_DIR_TOP, -1), be_const_int(0) }, - { be_const_key(TXT_CMD_STATE_WAIT, -1), be_const_int(0) }, - { be_const_key(DROPDOWN_DIR_UP, -1), be_const_int(1) }, - { be_const_key(STYLE_TEXT_SEL_COLOR, -1), be_const_int(32906) }, - { be_const_key(EVENT_DRAG_BEGIN, 109), be_const_int(8) }, - { be_const_key(FIT_NONE, -1), be_const_int(0) }, - { be_const_key(STYLE_PATTERN_RECOLOR_OPA, -1), be_const_int(109) }, - { be_const_key(BAR_TYPE_CUSTOM, -1), be_const_int(2) }, - { be_const_key(FS_RES_LOCKED, 137), be_const_int(5) }, - { be_const_key(SYMBOL_BATTERY_1, -1), be_const_str(&be_local_const_str_SYMBOL_BATTERY_1) }, - { be_const_key(EVENT_CLICKED, 322), be_const_int(6) }, - { be_const_key(CPICKER_COLOR_MODE_VALUE, -1), be_const_int(2) }, - { be_const_key(TEXT_DECOR_NONE, -1), be_const_int(0) }, - { be_const_key(OPA_80, 112), be_const_int(204) }, - { be_const_key(KEY_DOWN, 414), be_const_int(18) }, - { be_const_key(EVENT_LEAVE, -1), be_const_int(15) }, - { be_const_key(STYLE_VALUE_OPA, -1), be_const_int(124) }, - { be_const_key(PROTECT_CLICK_FOCUS, -1), be_const_int(32) }, - { be_const_key(SYMBOL_EYE_OPEN, -1), be_const_str(&be_local_const_str_SYMBOL_EYE_OPEN) }, - { be_const_key(FS_RES_FULL, 337), be_const_int(4) }, - { be_const_key(STYLE_PATTERN_IMAGE, -1), be_const_int(110) }, - { be_const_key(EVENT_VALUE_CHANGED, 302), be_const_int(16) }, - { be_const_key(SYMBOL_FILE, -1), be_const_str(&be_local_const_str_SYMBOL_FILE) }, - { be_const_key(KEYBOARD_MODE_SPECIAL, 179), be_const_int(2) }, - { be_const_key(KEY_BACKSPACE, 99), be_const_int(8) }, - { be_const_key(OPA_90, -1), be_const_int(229) }, - { be_const_key(ARC_TYPE_NORMAL, -1), be_const_int(0) }, - { be_const_key(FS_MODE_RD, 196), be_const_int(2) }, - { be_const_key(ARC_PART_INDIC, -1), be_const_int(1) }, - { be_const_key(STYLE_VALUE_FONT, 441), be_const_int(126) }, - { be_const_key(GAUGE_PART_MAIN, -1), be_const_int(0) }, - { be_const_key(INDEV_STATE_REL, -1), be_const_int(0) }, - { be_const_key(STYLE_VALUE_ALIGN, 237), be_const_int(117) }, - { be_const_key(SYMBOL_EJECT, 424), be_const_str(&be_local_const_str_SYMBOL_EJECT) }, - { be_const_key(STYLE_TRANSITION_PROP_3, 328), be_const_int(180) }, - { be_const_key(BORDER_SIDE_FULL, -1), be_const_int(15) }, - { be_const_key(ALIGN_OUT_BOTTOM_LEFT, 182), be_const_int(12) }, - { be_const_key(SYMBOL_BACKSPACE, 176), be_const_str(&be_local_const_str_SYMBOL_BACKSPACE) }, - { be_const_key(SCROLLBAR_MODE_OFF, 126), be_const_int(0) }, - { be_const_key(HSPI, -1), be_const_int(0) }, - { be_const_key(DISP_SIZE_SMALL, -1), be_const_int(0) }, - { be_const_key(KEY_PREV, 236), be_const_int(11) }, - { be_const_key(SYMBOL_VOLUME_MID, 410), be_const_str(&be_local_const_str_SYMBOL_VOLUME_MID) }, - { be_const_key(PAGE_EDGE_TOP, 118), be_const_int(2) }, - { be_const_key(FS_MODE_WR, 270), be_const_int(1) }, - { be_const_key(YELLOW, -1), be_const_int(16776960) }, - { be_const_key(ARC_TYPE_SYMMETRIC, -1), be_const_int(1) }, - { be_const_key(CPICKER_PART_KNOB, -1), be_const_int(1) }, - { be_const_key(ALIGN_IN_RIGHT_MID, 443), be_const_int(8) }, - { be_const_key(CPICKER_TYPE_DISC, -1), be_const_int(1) }, - { be_const_key(KEY_ESC, -1), be_const_int(27) }, - { be_const_key(LABEL_ALIGN_RIGHT, -1), be_const_int(2) }, - { be_const_key(STYLE_LINE_BLEND_MODE, -1), be_const_int(145) }, - { be_const_key(CHART_CURSOR_NONE, 53), be_const_int(0) }, - { be_const_key(DROPDOWN_DIR_DOWN, -1), be_const_int(0) }, - { be_const_key(BTNMATRIX_CTRL_CLICK_TRIG, 350), be_const_int(256) }, - { be_const_key(OPA_100, -1), be_const_int(255) }, - { be_const_key(BTNMATRIX_CTRL_DISABLED, -1), be_const_int(32) }, - { be_const_key(scr_act, 38), be_const_func(lv0_scr_act) }, - { be_const_key(KEY_RIGHT, 403), be_const_int(19) }, - { be_const_key(BTN_STATE_PRESSED, 199), be_const_int(1) }, - { be_const_key(CPICKER_COLOR_MODE_HUE, -1), be_const_int(0) }, - { be_const_key(load_font, -1), be_const_func(lv0_load_font) }, - { be_const_key(DRAG_DIR_BOTH, -1), be_const_int(3) }, - { be_const_key(LIST_PART_SCROLLBAR, -1), be_const_int(1) }, - { be_const_key(CHART_AXIS_INVERSE_LABELS_ORDER, -1), be_const_int(2) }, - { be_const_key(FS_RES_UNKNOWN, 263), be_const_int(12) }, - { be_const_key(STYLE_BORDER_WIDTH, 226), be_const_int(48) }, - { be_const_key(MAROON, -1), be_const_int(8388608) }, - { be_const_key(LABEL_LONG_SROLL_CIRC, 155), be_const_int(4) }, - { be_const_key(ALIGN_OUT_BOTTOM_MID, 405), be_const_int(13) }, - { be_const_key(EVENT_INSERT, -1), be_const_int(17) }, - { be_const_key(STYLE_PAD_LEFT, -1), be_const_int(18) }, - { be_const_key(STYLE_SHADOW_OFS_Y, 344), be_const_int(82) }, - { be_const_key(ALIGN_IN_TOP_MID, -1), be_const_int(2) }, - { be_const_key(SYMBOL_WIFI, 5), be_const_str(&be_local_const_str_SYMBOL_WIFI) }, - { be_const_key(EVENT_DRAG_THROW_BEGIN, -1), be_const_int(10) }, - { be_const_key(SYMBOL_MUTE, 87), be_const_str(&be_local_const_str_SYMBOL_MUTE) }, - { be_const_key(TEMPL_STYLE_Y, 52), be_const_int(1) }, - { be_const_key(EVENT_PRESSING, -1), be_const_int(1) }, - { be_const_key(CHART_PART_CURSOR, -1), be_const_int(3) }, - { be_const_key(SYMBOL_VOLUME_MAX, -1), be_const_str(&be_local_const_str_SYMBOL_VOLUME_MAX) }, - { be_const_key(SYMBOL_BULLET, 315), be_const_str(&be_local_const_str_SYMBOL_BULLET) }, - { be_const_key(VSPI, -1), be_const_int(1) }, - { be_const_key(BTN_STATE_CHECKED_PRESSED, -1), be_const_int(4) }, - { be_const_key(ARC_TYPE_REVERSE, -1), be_const_int(2) }, - { be_const_key(CHART_PART_SERIES_BG, -1), be_const_int(1) }, - { be_const_key(PROTECT_PRESS_LOST, -1), be_const_int(16) }, - { be_const_key(FS_RES_HW_ERR, 333), be_const_int(1) }, - { be_const_key(STYLE_SHADOW_SPREAD, -1), be_const_int(83) }, - { be_const_key(PROTECT_CHILD_CHG, -1), be_const_int(1) }, - { be_const_key(STYLE_SCALE_GRAD_COLOR, -1), be_const_int(201) }, - { be_const_key(LABEL_ALIGN_CENTER, -1), be_const_int(1) }, - { be_const_key(LAYOUT_ROW_MID, 250), be_const_int(6) }, - { be_const_key(ALIGN_IN_TOP_RIGHT, 186), be_const_int(3) }, - { be_const_key(TXT_FLAG_CENTER, -1), be_const_int(4) }, - { be_const_key(SYMBOL_BATTERY_EMPTY, -1), be_const_str(&be_local_const_str_SYMBOL_BATTERY_EMPTY) }, - { be_const_key(GAUGE_PART_MAJOR, 3), be_const_int(1) }, - { be_const_key(STYLE_LINE_WIDTH, -1), be_const_int(144) }, - { be_const_key(BORDER_SIDE_INTERNAL, 338), be_const_int(16) }, - { be_const_key(LAYOUT_ROW_BOTTOM, 224), be_const_int(7) }, - { be_const_key(BORDER_SIDE_TOP, -1), be_const_int(2) }, - { be_const_key(CHART_TYPE_NONE, 74), be_const_int(0) }, - { be_const_key(ALIGN_OUT_LEFT_MID, 221), be_const_int(16) }, - { be_const_key(DISP_ROT_270, 264), be_const_int(3) }, - { be_const_key(TXT_CMD_STATE_PAR, -1), be_const_int(1) }, - { be_const_key(SYMBOL_CLOSE, -1), be_const_str(&be_local_const_str_SYMBOL_CLOSE) }, - { be_const_key(STYLE_TEXT_FONT, -1), be_const_int(32910) }, - { be_const_key(TXT_FLAG_NONE, 372), be_const_int(0) }, - { be_const_key(EVENT_CANCEL, -1), be_const_int(20) }, - { be_const_key(FS_RES_DENIED, 233), be_const_int(6) }, - { be_const_key(STYLE_IMAGE_BLEND_MODE, 267), be_const_int(32928) }, - { be_const_key(STYLE_MARGIN_LEFT, 271), be_const_int(23) }, - { be_const_key(FS_RES_NOT_EX, -1), be_const_int(3) }, - { be_const_key(CHECKBOX_PART_BULLET, 266), be_const_int(64) }, - { be_const_key(PROTECT_FOLLOW, 89), be_const_int(8) }, - { be_const_key(WHITE, 54), be_const_int(16777215) }, - { be_const_key(DROPDOWN_PART_SELECTED, -1), be_const_int(66) }, - { be_const_key(PURPLE, -1), be_const_int(8388736) }, - { be_const_key(SILVER, 409), be_const_int(12632256) }, - { be_const_key(SYMBOL_KEYBOARD, -1), be_const_str(&be_local_const_str_SYMBOL_KEYBOARD) }, - { be_const_key(CHART_AXIS_SKIP_LAST_TICK, -1), be_const_int(0) }, - { be_const_key(LAYOUT_COLUMN_MID, -1), be_const_int(3) }, - { be_const_key(GRAD_DIR_HOR, 238), be_const_int(2) }, - { be_const_key(STYLE_MARGIN_BOTTOM, -1), be_const_int(22) }, - { be_const_key(SLIDER_TYPE_NORMAL, 400), be_const_int(0) }, - { be_const_key(STYLE_SCALE_END_COLOR, 173), be_const_int(202) }, - { be_const_key(STYLE_LINE_ROUNDED, 171), be_const_int(148) }, - { be_const_key(STYLE_VALUE_OFS_Y, -1), be_const_int(116) }, - { be_const_key(SYMBOL_NEXT, 107), be_const_str(&be_local_const_str_SYMBOL_NEXT) }, - { be_const_key(STATE_DEFAULT, 72), be_const_int(0) }, - { be_const_key(DRAG_DIR_HOR, -1), be_const_int(1) }, - { be_const_key(EVENT_GESTURE, 307), be_const_int(11) }, - { be_const_key(EVENT_PRESSED, -1), be_const_int(0) }, - { be_const_key(SPINNER_TYPE_FILLSPIN_ARC, -1), be_const_int(1) }, - { be_const_key(LABEL_LONG_BREAK, -1), be_const_int(1) }, - { be_const_key(FIT_TIGHT, -1), be_const_int(1) }, - { be_const_key(SYMBOL_RIGHT, 380), be_const_str(&be_local_const_str_SYMBOL_RIGHT) }, - { be_const_key(SYMBOL_COPY, 56), be_const_str(&be_local_const_str_SYMBOL_COPY) }, - { be_const_key(STYLE_BG_BLEND_MODE, -1), be_const_int(32) }, - { be_const_key(STYLE_BORDER_BLEND_MODE, -1), be_const_int(50) }, - { be_const_key(OPA_50, 354), be_const_int(127) }, - { be_const_key(BLUE, -1), be_const_int(255) }, - { be_const_key(SYMBOL_REFRESH, -1), be_const_str(&be_local_const_str_SYMBOL_REFRESH) }, - { be_const_key(ALIGN_OUT_TOP_MID, -1), be_const_int(10) }, - { be_const_key(ROLLER_MODE_INFINITE, -1), be_const_int(1) }, - { be_const_key(STATE_EDITED, -1), be_const_int(4) }, - { be_const_key(STATE_FOCUSED, -1), be_const_int(2) }, - { be_const_key(ANIM_ON, -1), be_const_int(1) }, - { be_const_key(EVENT_DEFOCUSED, -1), be_const_int(14) }, - { be_const_key(layer_sys, 321), be_const_func(lv0_layer_sys) }, - { be_const_key(SPINNER_DIR_FORWARD, 254), be_const_int(0) }, - { be_const_key(STYLE_SHADOW_OFS_X, -1), be_const_int(81) }, - { be_const_key(seg7_font, 434), be_const_func(lv0_load_seg7_font) }, - { be_const_key(LAYOUT_COLUMN_RIGHT, 369), be_const_int(4) }, - { be_const_key(ALIGN_IN_BOTTOM_MID, -1), be_const_int(5) }, - { be_const_key(DRAG_DIR_ONE, 341), be_const_int(4) }, - { be_const_key(KEY_ENTER, 294), be_const_int(10) }, - { be_const_key(GAUGE_PART_NEEDLE, 168), be_const_int(2) }, - { be_const_key(SYMBOL_DOWNLOAD, -1), be_const_str(&be_local_const_str_SYMBOL_DOWNLOAD) }, - { be_const_key(STATE_CHECKED, -1), be_const_int(1) }, - { be_const_key(STYLE_MARGIN_TOP, 83), be_const_int(21) }, - { be_const_key(STYLE_SHADOW_BLEND_MODE, 331), be_const_int(84) }, - { be_const_key(BAR_TYPE_SYMMETRICAL, -1), be_const_int(1) }, - { be_const_key(KEYBOARD_MODE_TEXT_UPPER, -1), be_const_int(1) }, - { be_const_key(ALIGN_OUT_BOTTOM_RIGHT, -1), be_const_int(14) }, - { be_const_key(CALENDAR_PART_BG, -1), be_const_int(0) }, - { be_const_key(LABEL_LONG_DOT, -1), be_const_int(2) }, - { be_const_key(CHART_PART_BG, -1), be_const_int(0) }, - { be_const_key(STATE_DISABLED, -1), be_const_int(32) }, - { be_const_key(FS_RES_TOUT, 280), be_const_int(8) }, - { be_const_key(OPA_COVER, 98), be_const_int(255) }, - { be_const_key(SYMBOL_DRIVE, -1), be_const_str(&be_local_const_str_SYMBOL_DRIVE) }, - { be_const_key(SYMBOL_IMAGE, 37), be_const_str(&be_local_const_str_SYMBOL_IMAGE) }, - { be_const_key(load_freetype_font, -1), be_const_func(lv0_load_freetype_font) }, - { be_const_key(STYLE_OUTLINE_OPA, 385), be_const_int(76) }, - { be_const_key(STYLE_OUTLINE_PAD, 365), be_const_int(65) }, - { be_const_key(BORDER_SIDE_LEFT, -1), be_const_int(4) }, - { be_const_key(STYLE_MARGIN_RIGHT, 62), be_const_int(24) }, - { be_const_key(STYLE_BG_COLOR, 402), be_const_int(41) }, - { be_const_key(BAR_TYPE_NORMAL, -1), be_const_int(0) }, - { be_const_key(STYLE_IMAGE_OPA, 286), be_const_int(32940) }, - { be_const_key(SCROLLBAR_MODE_ON, 211), be_const_int(1) }, - { be_const_key(KEY_END, 413), be_const_int(3) }, - { be_const_key(OPA_0, -1), be_const_int(0) }, - { be_const_key(CHECKBOX_PART_BG, -1), be_const_int(0) }, - { be_const_key(STYLE_TEXT_SEL_BG_COLOR, -1), be_const_int(32907) }, - { be_const_key(STYLE_OPA_SCALE, -1), be_const_int(32780) }, - { be_const_key(register_button_encoder, -1), be_const_func(lv0_register_button_encoder) }, - { be_const_key(SYMBOL_USB, -1), be_const_str(&be_local_const_str_SYMBOL_USB) }, - { be_const_key(TEMPL_STYLE_X, 153), be_const_int(0) }, - { be_const_key(TABVIEW_TAB_POS_BOTTOM, -1), be_const_int(2) }, - { be_const_key(CYAN, -1), be_const_int(65535) }, - { be_const_key(STYLE_OUTLINE_WIDTH, -1), be_const_int(64) }, - { be_const_key(STYLE_PAD_INNER, -1), be_const_int(20) }, - { be_const_key(STYLE_SIZE, -1), be_const_int(3) }, - { be_const_key(STYLE_VALUE_STR, -1), be_const_int(127) }, - { be_const_key(STYLE_PATTERN_BLEND_MODE, 318), be_const_int(96) }, - { be_const_key(EVENT_DELETE, 291), be_const_int(21) }, - { be_const_key(STYLE_VALUE_LINE_SPACE, -1), be_const_int(113) }, - { be_const_key(KEYBOARD_PART_BTN, 135), be_const_int(1) }, - { be_const_key(FS_RES_FS_ERR, -1), be_const_int(2) }, - { be_const_key(LAYOUT_GRID, -1), be_const_int(11) }, - { be_const_key(EVENT_SHORT_CLICKED, 281), be_const_int(3) }, - { be_const_key(LAYOUT_PRETTY_TOP, -1), be_const_int(8) }, - { be_const_key(KEY_HOME, 342), be_const_int(2) }, - { be_const_key(SYMBOL_DUMMY, -1), be_const_str(&be_local_const_str_SYMBOL_DUMMY) }, - { be_const_key(OBJ_PART_VIRTUAL_FIRST, -1), be_const_int(1) }, - { be_const_key(LABEL_LONG_CROP, -1), be_const_int(5) }, - { be_const_key(STATE_HOVERED, 122), be_const_int(8) }, - { be_const_key(STYLE_LINE_COLOR, 395), be_const_int(153) }, - { be_const_key(ALIGN_OUT_TOP_LEFT, -1), be_const_int(9) }, - { be_const_key(PROTECT_EVENT_TO_DISABLED, -1), be_const_int(64) }, - { be_const_key(SYMBOL_CHARGE, -1), be_const_str(&be_local_const_str_SYMBOL_CHARGE) }, - { be_const_key(INDEV_STATE_PR, -1), be_const_int(1) }, - { be_const_key(CHART_UPDATE_MODE_CIRCULAR, 88), be_const_int(1) }, - { be_const_key(SYMBOL_EDIT, -1), be_const_str(&be_local_const_str_SYMBOL_EDIT) }, - { be_const_key(ARC_PART_KNOB, -1), be_const_int(2) }, - { be_const_key(STYLE_TEXT_LINE_SPACE, -1), be_const_int(32897) }, - { be_const_key(STYLE_VALUE_LETTER_SPACE, -1), be_const_int(112) }, - { be_const_key(STYLE_SCALE_WIDTH, -1), be_const_int(192) }, - { be_const_key(AQUA, 253), be_const_int(65535) }, - { be_const_key(LAYOUT_PRETTY_MID, 19), be_const_int(9) }, - { be_const_key(DISP_ROT_90, -1), be_const_int(1) }, - { be_const_key(BTN_STATE_RELEASED, -1), be_const_int(0) }, - { be_const_key(DROPDOWN_PART_MAIN, -1), be_const_int(0) }, - { be_const_key(OPA_30, -1), be_const_int(76) }, - { be_const_key(SYMBOL_POWER, 431), be_const_str(&be_local_const_str_SYMBOL_POWER) }, - { be_const_key(GESTURE_DIR_RIGHT, -1), be_const_int(3) }, - { be_const_key(get_ver_res, 185), be_const_func(lv0_get_ver_res) }, - { be_const_key(SYMBOL_LOOP, -1), be_const_str(&be_local_const_str_SYMBOL_LOOP) }, - { be_const_key(DROPDOWN_DIR_LEFT, -1), be_const_int(2) }, - { be_const_key(LINEMETER_PART_MAIN, -1), be_const_int(0) }, - { be_const_key(STYLE_OUTLINE_COLOR, -1), be_const_int(73) }, - { be_const_key(SPINNER_TYPE_CONSTANT_ARC, -1), be_const_int(2) }, - { be_const_key(ROLLER_MODE_NORMAL, -1), be_const_int(0) }, - { be_const_key(SYMBOL_WARNING, 45), be_const_str(&be_local_const_str_SYMBOL_WARNING) }, - { be_const_key(STYLE_VALUE_BLEND_MODE, -1), be_const_int(114) }, - { be_const_key(KEYBOARD_MODE_NUM, -1), be_const_int(3) }, - { be_const_key(STYLE_BG_GRAD_STOP, -1), be_const_int(34) }, - { be_const_key(STYLE_VALUE_OFS_X, -1), be_const_int(115) }, - { be_const_key(SYMBOL_PLUS, -1), be_const_str(&be_local_const_str_SYMBOL_PLUS) }, - { be_const_key(CHART_AXIS_DRAW_LAST_TICK, -1), be_const_int(1) }, - { be_const_key(EVENT_FOCUSED, -1), be_const_int(13) }, - { be_const_key(STYLE_TRANSFORM_ZOOM, -1), be_const_int(7) }, - { be_const_key(TEXT_DECOR_STRIKETHROUGH, -1), be_const_int(2) }, - { be_const_key(LIST_PART_BG, -1), be_const_int(0) }, - { be_const_key(DROPDOWN_PART_LIST, 123), be_const_int(64) }, - { be_const_key(SYMBOL_BATTERY_3, -1), be_const_str(&be_local_const_str_SYMBOL_BATTERY_3) }, - { be_const_key(STYLE_PAD_BOTTOM, -1), be_const_int(17) }, - { be_const_key(LAYOUT_PRETTY_BOTTOM, -1), be_const_int(10) }, - { be_const_key(GESTURE_DIR_LEFT, -1), be_const_int(2) }, - { be_const_key(STYLE_OUTLINE_BLEND_MODE, -1), be_const_int(66) }, - { be_const_key(STYLE_BG_MAIN_STOP, 100), be_const_int(33) }, - { be_const_key(PROTECT_POS, 246), be_const_int(4) }, - { be_const_key(PAGE_EDGE_BOTTOM, -1), be_const_int(8) }, - { be_const_key(CHART_UPDATE_MODE_SHIFT, 142), be_const_int(0) }, - { be_const_key(STYLE_TRANSITION_TIME, -1), be_const_int(176) }, - { be_const_key(STYLE_TRANSITION_PROP_1, -1), be_const_int(178) }, - { be_const_key(SYMBOL_UP, -1), be_const_str(&be_local_const_str_SYMBOL_UP) }, - { be_const_key(STYLE_PATTERN_OPA, -1), be_const_int(108) }, - { be_const_key(DRAG_DIR_VER, -1), be_const_int(2) }, - { be_const_key(PROTECT_PARENT, -1), be_const_int(2) }, - { be_const_key(STYLE_SHADOW_OPA, 352), be_const_int(92) }, - { be_const_key(STYLE_PATTERN_REPEAT, 160), be_const_int(97) }, - { be_const_key(SPI, 361), be_const_int(0) }, - { be_const_key(TEAL, -1), be_const_int(32896) }, - { be_const_key(EVENT_REFRESH, -1), be_const_int(18) }, - { be_const_key(DISP_SIZE_EXTRA_LARGE, -1), be_const_int(3) }, - { be_const_key(STYLE_BG_GRAD_DIR, -1), be_const_int(35) }, - { be_const_key(GRAD_DIR_NONE, -1), be_const_int(0) }, - { be_const_key(ALIGN_OUT_RIGHT_MID, -1), be_const_int(19) }, - { be_const_key(DROPDOWN_DIR_RIGHT, 417), be_const_int(3) }, - { be_const_key(STYLE_TRANSITION_PROP_5, -1), be_const_int(182) }, - { be_const_key(CHART_CURSOR_UP, -1), be_const_int(2) }, - { be_const_key(CHART_TYPE_COLUMN, -1), be_const_int(2) }, - { be_const_key(CPICKER_TYPE_RECT, -1), be_const_int(0) }, - { be_const_key(TABVIEW_TAB_POS_NONE, 23), be_const_int(0) }, - { be_const_key(STYLE_TEXT_OPA, -1), be_const_int(32908) }, - { be_const_key(OPA_20, 217), be_const_int(51) }, - { be_const_key(EVENT_KEY, -1), be_const_int(12) }, - { be_const_key(STYLE_SCALE_END_BORDER_WIDTH, -1), be_const_int(194) }, - { be_const_key(EVENT_PRESS_LOST, -1), be_const_int(2) }, - { be_const_key(BTN_STATE_CHECKED_RELEASED, 144), be_const_int(3) }, - { be_const_key(FS_RES_OK, 69), be_const_int(0) }, - { be_const_key(SYMBOL_BELL, -1), be_const_str(&be_local_const_str_SYMBOL_BELL) }, - { be_const_key(SYMBOL_BATTERY_FULL, -1), be_const_str(&be_local_const_str_SYMBOL_BATTERY_FULL) }, - { be_const_key(ALIGN_IN_TOP_LEFT, 201), be_const_int(1) }, - { be_const_key(OPA_40, -1), be_const_int(102) }, - { be_const_key(BTNMATRIX_CTRL_NO_REPEAT, -1), be_const_int(16) }, - { be_const_key(STYLE_BORDER_SIDE, -1), be_const_int(49) }, - { be_const_key(LABEL_ALIGN_LEFT, -1), be_const_int(0) }, - { be_const_key(STYLE_IMAGE_RECOLOR, 408), be_const_int(32937) }, - { be_const_key(NAVY, -1), be_const_int(128) }, - { be_const_key(GREEN, -1), be_const_int(32768) }, - { be_const_key(SYMBOL_SHUFFLE, 212), be_const_str(&be_local_const_str_SYMBOL_SHUFFLE) }, - { be_const_key(GRAY, -1), be_const_int(8421504) }, - { be_const_key(STYLE_SHADOW_WIDTH, -1), be_const_int(80) }, - { be_const_key(SYMBOL_DIRECTORY, -1), be_const_str(&be_local_const_str_SYMBOL_DIRECTORY) }, - { be_const_key(BTNMATRIX_CTRL_CHECK_STATE, -1), be_const_int(128) }, - { be_const_key(TEXT_DECOR_UNDERLINE, 367), be_const_int(1) }, - { be_const_key(STYLE_BG_GRAD_COLOR, 141), be_const_int(42) }, - { be_const_key(SYMBOL_CALL, -1), be_const_str(&be_local_const_str_SYMBOL_CALL) }, - { be_const_key(STYLE_RADIUS, -1), be_const_int(1) }, - { be_const_key(CALENDAR_PART_HEADER, -1), be_const_int(1) }, - { be_const_key(start, 228), be_const_func(lv0_start) }, - { be_const_key(LAYOUT_ROW_TOP, -1), be_const_int(5) }, - { be_const_key(BTN_STATE_CHECKED_DISABLED, -1), be_const_int(5) }, - { be_const_key(SYMBOL_GPS, -1), be_const_str(&be_local_const_str_SYMBOL_GPS) }, - { be_const_key(get_hor_res, -1), be_const_func(lv0_get_hor_res) }, - { be_const_key(SYMBOL_AUDIO, -1), be_const_str(&be_local_const_str_SYMBOL_AUDIO) }, - { be_const_key(STYLE_BORDER_POST, 284), be_const_int(51) }, - { be_const_key(SYMBOL_SD_CARD, -1), be_const_str(&be_local_const_str_SYMBOL_SD_CARD) }, - { be_const_key(BORDER_SIDE_BOTTOM, 14), be_const_int(1) }, - { be_const_key(DROPDOWN_PART_SCROLLBAR, -1), be_const_int(65) }, - { be_const_key(SYMBOL_LEFT, -1), be_const_str(&be_local_const_str_SYMBOL_LEFT) }, - { be_const_key(KEY_LEFT, -1), be_const_int(20) }, - { be_const_key(LIME, -1), be_const_int(65280) }, - { be_const_key(SYMBOL_PASTE, -1), be_const_str(&be_local_const_str_SYMBOL_PASTE) }, - { be_const_key(SYMBOL_PAUSE, -1), be_const_str(&be_local_const_str_SYMBOL_PAUSE) }, - { be_const_key(FS_RES_INV_PARAM, -1), be_const_int(11) }, - { be_const_key(ALIGN_CENTER, -1), be_const_int(0) }, - { be_const_key(EVENT_RELEASED, -1), be_const_int(7) }, - { be_const_key(SYMBOL_PREV, -1), be_const_str(&be_local_const_str_SYMBOL_PREV) }, - { be_const_key(RED, -1), be_const_int(16711680) }, - { be_const_key(BORDER_SIDE_NONE, -1), be_const_int(0) }, - { be_const_key(ALIGN_IN_BOTTOM_RIGHT, -1), be_const_int(6) }, - { be_const_key(SYMBOL_TRASH, -1), be_const_str(&be_local_const_str_SYMBOL_TRASH) }, - { be_const_key(STYLE_PAD_TOP, -1), be_const_int(16) }, - { be_const_key(ALIGN_IN_LEFT_MID, 71), be_const_int(7) }, - { be_const_key(SYMBOL_CUT, 426), be_const_str(&be_local_const_str_SYMBOL_CUT) }, - { be_const_key(STYLE_IMAGE_RECOLOR_OPA, -1), be_const_int(32941) }, - { be_const_key(SCROLLBAR_MODE_AUTO, 148), be_const_int(3) }, - { be_const_key(STYLE_PATTERN_RECOLOR, 58), be_const_int(105) }, - { be_const_key(TABVIEW_TAB_POS_TOP, 438), be_const_int(1) }, - { be_const_key(BTN_STATE_DISABLED, -1), be_const_int(2) }, - { be_const_key(TEXTAREA_CURSOR_LAST, 285), be_const_int(32767) }, - { be_const_key(STYLE_TEXT_DECOR, 363), be_const_int(32898) }, - { be_const_key(FS_RES_BUSY, 399), be_const_int(7) }, - { be_const_key(KEYBOARD_MODE_TEXT_LOWER, -1), be_const_int(0) }, - { be_const_key(DISP_ROT_180, -1), be_const_int(2) }, - { be_const_key(OLIVE, -1), be_const_int(8421376) }, - { be_const_key(LAYOUT_OFF, -1), be_const_int(0) }, - { be_const_key(EVENT_DRAG_END, -1), be_const_int(9) }, - { be_const_key(EVENT_LONG_PRESSED_REPEAT, 432), be_const_int(5) }, - { be_const_key(SYMBOL_VIDEO, -1), be_const_str(&be_local_const_str_SYMBOL_VIDEO) }, + { be_const_key(SYMBOL_IMAGE, 15), be_const_str(&be_local_const_str_SYMBOL_IMAGE) }, + { be_const_key(SYMBOL_SETTINGS, 70), be_const_str(&be_local_const_str_SYMBOL_SETTINGS) }, { be_const_key(SYMBOL_UPLOAD, -1), be_const_str(&be_local_const_str_SYMBOL_UPLOAD) }, - { be_const_key(KEYBOARD_PART_BG, -1), be_const_int(0) }, - { be_const_key(STYLE_TRANSITION_PATH, 113), be_const_int(190) }, - { be_const_key(STYLE_TRANSFORM_WIDTH, -1), be_const_int(4) }, - { be_const_key(STYLE_VALUE_COLOR, -1), be_const_int(121) }, - { be_const_key(ALIGN_OUT_RIGHT_TOP, -1), be_const_int(18) }, - { be_const_key(SYMBOL_DOWN, 167), be_const_str(&be_local_const_str_SYMBOL_DOWN) }, - { be_const_key(STYLE_TRANSITION_DELAY, -1), be_const_int(177) }, - { be_const_key(TABVIEW_TAB_POS_LEFT, -1), be_const_int(3) }, - { be_const_key(CALENDAR_PART_DATE, -1), be_const_int(3) }, - { be_const_key(TABVIEW_TAB_POS_RIGHT, 457), be_const_int(4) }, - { be_const_key(TXT_FLAG_RECOLOR, 353), be_const_int(1) }, - { be_const_key(FIT_PARENT, 180), be_const_int(2) }, - { be_const_key(LABEL_ALIGN_AUTO, -1), be_const_int(3) }, - { be_const_key(SYMBOL_BATTERY_2, -1), be_const_str(&be_local_const_str_SYMBOL_BATTERY_2) }, - { be_const_key(TXT_CMD_STATE_IN, -1), be_const_int(2) }, - { be_const_key(STYLE_TEXT_COLOR, -1), be_const_int(32905) }, - { be_const_key(SCROLLBAR_MODE_DRAG, -1), be_const_int(2) }, - { be_const_key(MAGENTA, 377), be_const_int(16711935) }, - { be_const_key(DISP_ROT_NONE, 70), be_const_int(0) }, - { be_const_key(montserrat_font, 82), be_const_func(lv0_load_montserrat_font) }, - { be_const_key(STYLE_LINE_OPA, -1), be_const_int(156) }, - { be_const_key(BTNMATRIX_CTRL_CHECKABLE, -1), be_const_int(64) }, - { be_const_key(PROTECT_NONE, -1), be_const_int(0) }, - { be_const_key(SCROLLBAR_MODE_UNHIDE, -1), be_const_int(8) }, - { be_const_key(GESTURE_DIR_BOTTOM, 41), be_const_int(1) }, - { be_const_key(STYLE_TRANSFORM_HEIGHT, -1), be_const_int(5) }, - { be_const_key(STYLE_BG_OPA, -1), be_const_int(44) }, - { be_const_key(SYMBOL_SETTINGS, 379), be_const_str(&be_local_const_str_SYMBOL_SETTINGS) }, - { be_const_key(CHART_CURSOR_LEFT, -1), be_const_int(4) }, + { be_const_key(SYMBOL_AUDIO, -1), be_const_str(&be_local_const_str_SYMBOL_AUDIO) }, + { be_const_key(SYMBOL_USB, -1), be_const_str(&be_local_const_str_SYMBOL_USB) }, + { be_const_key(SYMBOL_EDIT, -1), be_const_str(&be_local_const_str_SYMBOL_EDIT) }, + { be_const_key(SYMBOL_BELL, 2), be_const_str(&be_local_const_str_SYMBOL_BELL) }, + { be_const_key(SYMBOL_LOOP, -1), be_const_str(&be_local_const_str_SYMBOL_LOOP) }, + { be_const_key(SYMBOL_CALL, 16), be_const_str(&be_local_const_str_SYMBOL_CALL) }, + { be_const_key(SYMBOL_CUT, -1), be_const_str(&be_local_const_str_SYMBOL_CUT) }, + { be_const_key(SYMBOL_MUTE, -1), be_const_str(&be_local_const_str_SYMBOL_MUTE) }, + { be_const_key(SYMBOL_RIGHT, -1), be_const_str(&be_local_const_str_SYMBOL_RIGHT) }, + { be_const_key(SYMBOL_HOME, -1), be_const_str(&be_local_const_str_SYMBOL_HOME) }, + { be_const_key(SYMBOL_PREV, 54), be_const_str(&be_local_const_str_SYMBOL_PREV) }, + { be_const_key(SYMBOL_WIFI, 49), be_const_str(&be_local_const_str_SYMBOL_WIFI) }, + { be_const_key(SYMBOL_CLOSE, -1), be_const_str(&be_local_const_str_SYMBOL_CLOSE) }, + { be_const_key(SYMBOL_BLUETOOTH, -1), be_const_str(&be_local_const_str_SYMBOL_BLUETOOTH) }, + { be_const_key(SYMBOL_DUMMY, -1), be_const_str(&be_local_const_str_SYMBOL_DUMMY) }, + { be_const_key(SYMBOL_VIDEO, -1), be_const_str(&be_local_const_str_SYMBOL_VIDEO) }, + { be_const_key(SYMBOL_PAUSE, -1), be_const_str(&be_local_const_str_SYMBOL_PAUSE) }, + { be_const_key(SYMBOL_PASTE, 13), be_const_str(&be_local_const_str_SYMBOL_PASTE) }, + { be_const_key(SYMBOL_MINUS, -1), be_const_str(&be_local_const_str_SYMBOL_MINUS) }, + { be_const_key(SYMBOL_STOP, -1), be_const_str(&be_local_const_str_SYMBOL_STOP) }, + { be_const_key(get_hor_res, 12), be_const_func(lv0_get_hor_res) }, + { be_const_key(screenshot, 19), be_const_func(lv0_screenshot) }, + { be_const_key(SYMBOL_GPS, -1), be_const_str(&be_local_const_str_SYMBOL_GPS) }, + { be_const_key(SYMBOL_POWER, -1), be_const_str(&be_local_const_str_SYMBOL_POWER) }, + { be_const_key(SYMBOL_VOLUME_MID, 51), be_const_str(&be_local_const_str_SYMBOL_VOLUME_MID) }, + { be_const_key(SYMBOL_BATTERY_EMPTY, -1), be_const_str(&be_local_const_str_SYMBOL_BATTERY_EMPTY) }, + { be_const_key(SYMBOL_DRIVE, 61), be_const_str(&be_local_const_str_SYMBOL_DRIVE) }, + { be_const_key(SYMBOL_KEYBOARD, -1), be_const_str(&be_local_const_str_SYMBOL_KEYBOARD) }, + { be_const_key(load_freetype_font, -1), be_const_func(lv0_load_freetype_font) }, + { be_const_key(SYMBOL_REFRESH, 28), be_const_str(&be_local_const_str_SYMBOL_REFRESH) }, + { be_const_key(SYMBOL_BATTERY_2, 53), be_const_str(&be_local_const_str_SYMBOL_BATTERY_2) }, + { be_const_key(SYMBOL_NEW_LINE, -1), be_const_str(&be_local_const_str_SYMBOL_NEW_LINE) }, + { be_const_key(SYMBOL_SD_CARD, -1), be_const_str(&be_local_const_str_SYMBOL_SD_CARD) }, + { be_const_key(SYMBOL_VOLUME_MAX, -1), be_const_str(&be_local_const_str_SYMBOL_VOLUME_MAX) }, + { be_const_key(SYMBOL_PLUS, -1), be_const_str(&be_local_const_str_SYMBOL_PLUS) }, + { be_const_key(SYMBOL_EJECT, -1), be_const_str(&be_local_const_str_SYMBOL_EJECT) }, + { be_const_key(layer_sys, -1), be_const_func(lv0_layer_sys) }, + { be_const_key(SYMBOL_BATTERY_FULL, -1), be_const_str(&be_local_const_str_SYMBOL_BATTERY_FULL) }, + { be_const_key(SYMBOL_DOWNLOAD, 23), be_const_str(&be_local_const_str_SYMBOL_DOWNLOAD) }, + { be_const_key(load_font, -1), be_const_func(lv0_load_font) }, + { be_const_key(SYMBOL_EYE_OPEN, -1), be_const_str(&be_local_const_str_SYMBOL_EYE_OPEN) }, + { be_const_key(register_button_encoder, -1), be_const_func(lv0_register_button_encoder) }, + { be_const_key(SYMBOL_BULLET, 9), be_const_str(&be_local_const_str_SYMBOL_BULLET) }, + { be_const_key(start, 3), be_const_func(lv0_start) }, + { be_const_key(scr_act, 5), be_const_func(lv0_scr_act) }, + { be_const_key(SYMBOL_UP, -1), be_const_str(&be_local_const_str_SYMBOL_UP) }, + { be_const_key(SYMBOL_CHARGE, -1), be_const_str(&be_local_const_str_SYMBOL_CHARGE) }, + { be_const_key(seg7_font, -1), be_const_func(lv0_load_seg7_font) }, + { be_const_key(SYMBOL_PLAY, 17), be_const_str(&be_local_const_str_SYMBOL_PLAY) }, + { be_const_key(layer_top, -1), be_const_func(lv0_layer_top) }, + { be_const_key(SYMBOL_SAVE, -1), be_const_str(&be_local_const_str_SYMBOL_SAVE) }, + { be_const_key(SYMBOL_COPY, 1), be_const_str(&be_local_const_str_SYMBOL_COPY) }, + { be_const_key(get_ver_res, 48), be_const_func(lv0_get_ver_res) }, + { be_const_key(SYMBOL_DIRECTORY, -1), be_const_str(&be_local_const_str_SYMBOL_DIRECTORY) }, + { be_const_key(montserrat_font, -1), be_const_func(lv0_load_montserrat_font) }, + { be_const_key(SYMBOL_SHUFFLE, -1), be_const_str(&be_local_const_str_SYMBOL_SHUFFLE) }, + { be_const_key(SYMBOL_FILE, -1), be_const_str(&be_local_const_str_SYMBOL_FILE) }, + { be_const_key(SYMBOL_WARNING, -1), be_const_str(&be_local_const_str_SYMBOL_WARNING) }, + { be_const_key(SYMBOL_LIST, 45), be_const_str(&be_local_const_str_SYMBOL_LIST) }, + { be_const_key(SYMBOL_LEFT, -1), be_const_str(&be_local_const_str_SYMBOL_LEFT) }, + { be_const_key(SYMBOL_TRASH, -1), be_const_str(&be_local_const_str_SYMBOL_TRASH) }, + { be_const_key(SYMBOL_BACKSPACE, -1), be_const_str(&be_local_const_str_SYMBOL_BACKSPACE) }, + { be_const_key(SYMBOL_DOWN, -1), be_const_str(&be_local_const_str_SYMBOL_DOWN) }, + { be_const_key(member, -1), be_const_func(lv0_member) }, + { be_const_key(SYMBOL_OK, -1), be_const_str(&be_local_const_str_SYMBOL_OK) }, + { be_const_key(SYMBOL_BATTERY_3, -1), be_const_str(&be_local_const_str_SYMBOL_BATTERY_3) }, + { be_const_key(SYMBOL_NEXT, -1), be_const_str(&be_local_const_str_SYMBOL_NEXT) }, + { be_const_key(SYMBOL_BATTERY_1, 14), be_const_str(&be_local_const_str_SYMBOL_BATTERY_1) }, }; static be_define_const_map( m_liblvgl_map, - 463 + 72 ); static be_define_const_module( diff --git a/lib/libesp32/Berry/src/be_vm.c b/lib/libesp32/Berry/src/be_vm.c index 002dbf923..b7ae48b01 100644 --- a/lib/libesp32/Berry/src/be_vm.c +++ b/lib/libesp32/Berry/src/be_vm.c @@ -267,10 +267,26 @@ static void obj_method(bvm *vm, bvalue *o, bstring *attr, bvalue *dst) } } -static int obj_attribute(bvm *vm, bvalue *o, bstring *attr, bvalue *dst) +static int obj_attribute(bvm *vm, bvalue *o, bvalue *c, bvalue *dst) { + bvalue instance = *o; /* save instance to send it later to member */ + bstring *attr = var_tostr(c); binstance *obj = var_toobj(o); int type = be_instance_member(vm, obj, attr, dst); + if (basetype(type) == BE_NIL) { /* if no method found, try virtual */ + /* get method 'member' */ + int type2 = be_instance_member(vm, obj, str_literal(vm, "member"), vm->top); + if (basetype(type2) == BE_FUNCTION) { + bvalue *top = vm->top; + top[1] = instance; /* move instance to argv[0] */ + top[2] = *c; /* move method name to argv[1] */ + vm->top += 3; /* prevent collection results */ + be_dofunc(vm, top, 2); /* call method 'member' */ + vm->top -= 3; + *o = *vm->top; /* copy result to R(A) */ + type = var_type(o); + } + } if (basetype(type) == BE_NIL) { vm_error(vm, "attribute_error", "the '%s' object has no attribute '%s'", @@ -723,7 +739,8 @@ newframe: /* a new call frame */ opcase(GETMBR): { bvalue *a = RA(), *b = RKB(), *c = RKC(); if (var_isinstance(b) && var_isstr(c)) { - obj_attribute(vm, b, var_tostr(c), a); + obj_attribute(vm, b, c, a); + reg = vm->reg; } else if (var_ismodule(b) && var_isstr(c)) { bstring *attr = var_tostr(c); bmodule *module = var_toobj(b); @@ -731,9 +748,22 @@ newframe: /* a new call frame */ if (v) { *a = *v; } else { - vm_error(vm, "attribute_error", - "module '%s' has no attribute '%s'", - be_module_name(module), str(attr)); + bvalue *member = be_module_attr(vm, module, str_literal(vm, "member")); + var_setnil(a); + if (member && var_basetype(member) == BE_FUNCTION) { + bvalue *top = vm->top; + top[0] = *member; + top[1] = *c; /* move name to argv[0] */ + vm->top += 2; /* prevent collection results */ + be_dofunc(vm, top, 1); /* call method 'method' */ + vm->top -= 2; + *a = *vm->top; /* copy result to R(A) */ + } + if (var_basetype(a) == BE_NIL) { + vm_error(vm, "attribute_error", + "module '%s' has no attribute '%s'", + be_module_name(module), str(attr)); + } } } else { attribute_error(vm, "attribute", b, c); @@ -746,12 +776,10 @@ newframe: /* a new call frame */ bvalue self = *b; bstring *attr = var_tostr(c); binstance *obj = var_toobj(b); - int type = obj_attribute(vm, b, var_tostr(c), a); - if (type == MT_METHOD || type == MT_PRIMMETHOD) { + int type = obj_attribute(vm, b, c, a); + reg = vm->reg; + if (var_basetype(a) == BE_FUNCTION) { a[1] = self; - } else if (var_basetype(a) == BE_FUNCTION) { - a[1] = *a; - var_settype(a, NOT_METHOD); } else { vm_error(vm, "attribute_error", "class '%s' has no method '%s'", diff --git a/lib/libesp32/Berry/tests/virtual_methods.be b/lib/libesp32/Berry/tests/virtual_methods.be new file mode 100644 index 000000000..514fb3cc2 --- /dev/null +++ b/lib/libesp32/Berry/tests/virtual_methods.be @@ -0,0 +1,66 @@ +#- basic initialization -# + +def assert_attribute_error(f) + try + f() + assert(false, 'unexpected execution flow') + except .. as e, m + assert(e == 'attribute_error') + end +end + +class T1 + var a, b + def init() + self.a = 1 + self.b = 2 + end + def f() return true end + def g() return false end +end +t = T1() + +#- warm up -# +assert(t.a == 1) +assert(t.b == 2) +assert(t.f() == true) +assert(t.g() == false) + +#- test normal errors when method does not exist -# +assert_attribute_error(/-> t.h()) +assert_attribute_error(/-> t.c) + +class T2 : T1 + def member(n) + if (n == 'f1') return / n -> n end + if (n == 'f2') return /-> 4 end + if (n == 'a1') return 10 end + end +end +t2 = T2() + +#- test non-regression -# +assert(t2.a == 1) +assert(t2.b == 2) +assert(t2.f() == true) +assert(t2.g() == false) +assert_attribute_error(/-> t2.h()) + +#- try virtual methods -# +assert(t2.f1() == t2) +assert(t2.f2() == 4) +assert(t2.a1 == 10) + +#- module -# +m = module("m") + +m.a = 1 +assert(m.a == 1) +assert_attribute_error(/-> m.b) + +m.member = def(n) + if n == "b" return 2 end +end + +assert(m.b == 2) +assert_attribute_error(/-> m.c) diff --git a/tasmota/lvgl_berry/be_lv_c_mapping.h b/tasmota/lvgl_berry/be_lv_c_mapping.h index 6ba736a3c..4c1b81cee 100644 --- a/tasmota/lvgl_berry/be_lv_c_mapping.h +++ b/tasmota/lvgl_berry/be_lv_c_mapping.h @@ -7,1043 +7,1285 @@ extern "C" { #endif +// table of functions per class +// typedef struct lvbe_call_c_t { +// const char * name; +// void * func; +// const char * return_type; +// const char * arg_type; +// } lvbe_call_c_t; + +// list of classes and function tables +// typedef struct lvbe_call_c_classes_t { +// const char * name; +// const lvbe_call_c_t * func_table; +// size_t size; +// } lvbe_call_c_classes_t; + + +/* `lv_img` methods */ +const lvbe_call_c_t lv_img_func[] = { + { "create", (void*) &lv_img_create, "+lv_img", "(lv_obj)(lv_obj)" }, + { "get_angle", (void*) &lv_img_get_angle, "i", "(lv_obj)" }, + { "get_antialias", (void*) &lv_img_get_antialias, "b", "(lv_obj)" }, + { "get_auto_size", (void*) &lv_img_get_auto_size, "b", "(lv_obj)" }, + { "get_file_name", (void*) &lv_img_get_file_name, "s", "(lv_obj)" }, + { "get_offset_x", (void*) &lv_img_get_offset_x, "i", "(lv_obj)" }, + { "get_offset_y", (void*) &lv_img_get_offset_y, "i", "(lv_obj)" }, + { "get_pivot", (void*) &lv_img_get_pivot, "", "(lv_obj)(lv_point)" }, + { "get_src", (void*) &lv_img_get_src, "i", "(lv_obj)" }, + { "get_zoom", (void*) &lv_img_get_zoom, "i", "(lv_obj)" }, + { "set_angle", (void*) &lv_img_set_angle, "", "(lv_obj)i" }, + { "set_antialias", (void*) &lv_img_set_antialias, "", "(lv_obj)b" }, + { "set_auto_size", (void*) &lv_img_set_auto_size, "", "(lv_obj)b" }, + { "set_offset_x", (void*) &lv_img_set_offset_x, "", "(lv_obj)i" }, + { "set_offset_y", (void*) &lv_img_set_offset_y, "", "(lv_obj)i" }, + { "set_pivot", (void*) &lv_img_set_pivot, "", "(lv_obj)ii" }, + { "set_src", (void*) &lv_img_set_src, "", "(lv_obj)i" }, + { "set_tasmota_logo", (void*) &lv_img_set_tasmota_logo, "", "(lv_obj)" }, + { "set_zoom", (void*) &lv_img_set_zoom, "", "(lv_obj)i" }, +}; + +/* `lv_style` methods */ +const lvbe_call_c_t lv_style_func[] = { + { "copy", (void*) &lv_style_copy, "", "(lv_style)(lv_style)" }, + { "list_copy", (void*) &lv_style_list_copy, "", "(lv_style_list)(lv_style_list)" }, + { "list_get_local_style", (void*) &lv_style_list_get_local_style, "lv_style", "(lv_style_list)" }, + { "list_get_style", (void*) &lv_style_list_get_style, "lv_style", "(lv_style_list)i" }, + { "list_init", (void*) &lv_style_list_init, "", "(lv_style_list)" }, + { "remove_prop", (void*) &lv_style_remove_prop, "b", "(lv_style)(lv_style_property)" }, + { "reset", (void*) &lv_style_reset, "", "(lv_style)" }, + { "set_bg_blend_mode", (void*) &lv_style_set_bg_blend_mode, "", "(lv_style)ii" }, + { "set_bg_color", (void*) &lv_style_set_bg_color, "", "(lv_style)i(lv_color)" }, + { "set_bg_grad_color", (void*) &lv_style_set_bg_grad_color, "", "(lv_style)i(lv_color)" }, + { "set_bg_grad_dir", (void*) &lv_style_set_bg_grad_dir, "", "(lv_style)ii" }, + { "set_bg_grad_stop", (void*) &lv_style_set_bg_grad_stop, "", "(lv_style)ii" }, + { "set_bg_main_stop", (void*) &lv_style_set_bg_main_stop, "", "(lv_style)ii" }, + { "set_bg_opa", (void*) &lv_style_set_bg_opa, "", "(lv_style)ii" }, + { "set_border_blend_mode", (void*) &lv_style_set_border_blend_mode, "", "(lv_style)ii" }, + { "set_border_color", (void*) &lv_style_set_border_color, "", "(lv_style)i(lv_color)" }, + { "set_border_opa", (void*) &lv_style_set_border_opa, "", "(lv_style)ii" }, + { "set_border_post", (void*) &lv_style_set_border_post, "", "(lv_style)ib" }, + { "set_border_side", (void*) &lv_style_set_border_side, "", "(lv_style)ii" }, + { "set_border_width", (void*) &lv_style_set_border_width, "", "(lv_style)ii" }, + { "set_clip_corner", (void*) &lv_style_set_clip_corner, "", "(lv_style)ib" }, + { "set_image_blend_mode", (void*) &lv_style_set_image_blend_mode, "", "(lv_style)ii" }, + { "set_image_opa", (void*) &lv_style_set_image_opa, "", "(lv_style)ii" }, + { "set_image_recolor", (void*) &lv_style_set_image_recolor, "", "(lv_style)i(lv_color)" }, + { "set_image_recolor_opa", (void*) &lv_style_set_image_recolor_opa, "", "(lv_style)ii" }, + { "set_line_blend_mode", (void*) &lv_style_set_line_blend_mode, "", "(lv_style)ii" }, + { "set_line_color", (void*) &lv_style_set_line_color, "", "(lv_style)i(lv_color)" }, + { "set_line_dash_gap", (void*) &lv_style_set_line_dash_gap, "", "(lv_style)ii" }, + { "set_line_dash_width", (void*) &lv_style_set_line_dash_width, "", "(lv_style)ii" }, + { "set_line_opa", (void*) &lv_style_set_line_opa, "", "(lv_style)ii" }, + { "set_line_rounded", (void*) &lv_style_set_line_rounded, "", "(lv_style)ib" }, + { "set_line_width", (void*) &lv_style_set_line_width, "", "(lv_style)ii" }, + { "set_margin_bottom", (void*) &lv_style_set_margin_bottom, "", "(lv_style)ii" }, + { "set_margin_left", (void*) &lv_style_set_margin_left, "", "(lv_style)ii" }, + { "set_margin_right", (void*) &lv_style_set_margin_right, "", "(lv_style)ii" }, + { "set_margin_top", (void*) &lv_style_set_margin_top, "", "(lv_style)ii" }, + { "set_opa_scale", (void*) &lv_style_set_opa_scale, "", "(lv_style)ii" }, + { "set_outline_blend_mode", (void*) &lv_style_set_outline_blend_mode, "", "(lv_style)ii" }, + { "set_outline_color", (void*) &lv_style_set_outline_color, "", "(lv_style)i(lv_color)" }, + { "set_outline_opa", (void*) &lv_style_set_outline_opa, "", "(lv_style)ii" }, + { "set_outline_pad", (void*) &lv_style_set_outline_pad, "", "(lv_style)ii" }, + { "set_outline_width", (void*) &lv_style_set_outline_width, "", "(lv_style)ii" }, + { "set_pad_bottom", (void*) &lv_style_set_pad_bottom, "", "(lv_style)ii" }, + { "set_pad_inner", (void*) &lv_style_set_pad_inner, "", "(lv_style)ii" }, + { "set_pad_left", (void*) &lv_style_set_pad_left, "", "(lv_style)ii" }, + { "set_pad_right", (void*) &lv_style_set_pad_right, "", "(lv_style)ii" }, + { "set_pad_top", (void*) &lv_style_set_pad_top, "", "(lv_style)ii" }, + { "set_pattern_blend_mode", (void*) &lv_style_set_pattern_blend_mode, "", "(lv_style)ii" }, + { "set_pattern_image", (void*) &lv_style_set_pattern_image, "", "(lv_style)ii" }, + { "set_pattern_opa", (void*) &lv_style_set_pattern_opa, "", "(lv_style)ii" }, + { "set_pattern_recolor", (void*) &lv_style_set_pattern_recolor, "", "(lv_style)i(lv_color)" }, + { "set_pattern_recolor_opa", (void*) &lv_style_set_pattern_recolor_opa, "", "(lv_style)ii" }, + { "set_pattern_repeat", (void*) &lv_style_set_pattern_repeat, "", "(lv_style)ib" }, + { "set_radius", (void*) &lv_style_set_radius, "", "(lv_style)ii" }, + { "set_scale_border_width", (void*) &lv_style_set_scale_border_width, "", "(lv_style)ii" }, + { "set_scale_end_border_width", (void*) &lv_style_set_scale_end_border_width, "", "(lv_style)ii" }, + { "set_scale_end_color", (void*) &lv_style_set_scale_end_color, "", "(lv_style)i(lv_color)" }, + { "set_scale_end_line_width", (void*) &lv_style_set_scale_end_line_width, "", "(lv_style)ii" }, + { "set_scale_grad_color", (void*) &lv_style_set_scale_grad_color, "", "(lv_style)i(lv_color)" }, + { "set_scale_width", (void*) &lv_style_set_scale_width, "", "(lv_style)ii" }, + { "set_shadow_blend_mode", (void*) &lv_style_set_shadow_blend_mode, "", "(lv_style)ii" }, + { "set_shadow_color", (void*) &lv_style_set_shadow_color, "", "(lv_style)i(lv_color)" }, + { "set_shadow_ofs_x", (void*) &lv_style_set_shadow_ofs_x, "", "(lv_style)ii" }, + { "set_shadow_ofs_y", (void*) &lv_style_set_shadow_ofs_y, "", "(lv_style)ii" }, + { "set_shadow_opa", (void*) &lv_style_set_shadow_opa, "", "(lv_style)ii" }, + { "set_shadow_spread", (void*) &lv_style_set_shadow_spread, "", "(lv_style)ii" }, + { "set_shadow_width", (void*) &lv_style_set_shadow_width, "", "(lv_style)ii" }, + { "set_size", (void*) &lv_style_set_size, "", "(lv_style)ii" }, + { "set_text_blend_mode", (void*) &lv_style_set_text_blend_mode, "", "(lv_style)ii" }, + { "set_text_color", (void*) &lv_style_set_text_color, "", "(lv_style)i(lv_color)" }, + { "set_text_decor", (void*) &lv_style_set_text_decor, "", "(lv_style)i(lv_text_decor)" }, + { "set_text_font", (void*) &lv_style_set_text_font, "", "(lv_style)i(lv_font)" }, + { "set_text_letter_space", (void*) &lv_style_set_text_letter_space, "", "(lv_style)ii" }, + { "set_text_line_space", (void*) &lv_style_set_text_line_space, "", "(lv_style)ii" }, + { "set_text_opa", (void*) &lv_style_set_text_opa, "", "(lv_style)ii" }, + { "set_text_sel_bg_color", (void*) &lv_style_set_text_sel_bg_color, "", "(lv_style)i(lv_color)" }, + { "set_text_sel_color", (void*) &lv_style_set_text_sel_color, "", "(lv_style)i(lv_color)" }, + { "set_transform_angle", (void*) &lv_style_set_transform_angle, "", "(lv_style)ii" }, + { "set_transform_height", (void*) &lv_style_set_transform_height, "", "(lv_style)ii" }, + { "set_transform_width", (void*) &lv_style_set_transform_width, "", "(lv_style)ii" }, + { "set_transform_zoom", (void*) &lv_style_set_transform_zoom, "", "(lv_style)ii" }, + { "set_transition_delay", (void*) &lv_style_set_transition_delay, "", "(lv_style)ii" }, + { "set_transition_path", (void*) &lv_style_set_transition_path, "", "(lv_style)i(lv_anim_path)" }, + { "set_transition_prop_1", (void*) &lv_style_set_transition_prop_1, "", "(lv_style)ii" }, + { "set_transition_prop_2", (void*) &lv_style_set_transition_prop_2, "", "(lv_style)ii" }, + { "set_transition_prop_3", (void*) &lv_style_set_transition_prop_3, "", "(lv_style)ii" }, + { "set_transition_prop_4", (void*) &lv_style_set_transition_prop_4, "", "(lv_style)ii" }, + { "set_transition_prop_5", (void*) &lv_style_set_transition_prop_5, "", "(lv_style)ii" }, + { "set_transition_prop_6", (void*) &lv_style_set_transition_prop_6, "", "(lv_style)ii" }, + { "set_transition_time", (void*) &lv_style_set_transition_time, "", "(lv_style)ii" }, + { "set_value_align", (void*) &lv_style_set_value_align, "", "(lv_style)ii" }, + { "set_value_blend_mode", (void*) &lv_style_set_value_blend_mode, "", "(lv_style)ii" }, + { "set_value_color", (void*) &lv_style_set_value_color, "", "(lv_style)i(lv_color)" }, + { "set_value_font", (void*) &lv_style_set_value_font, "", "(lv_style)i(lv_font)" }, + { "set_value_letter_space", (void*) &lv_style_set_value_letter_space, "", "(lv_style)ii" }, + { "set_value_line_space", (void*) &lv_style_set_value_line_space, "", "(lv_style)ii" }, + { "set_value_ofs_x", (void*) &lv_style_set_value_ofs_x, "", "(lv_style)ii" }, + { "set_value_ofs_y", (void*) &lv_style_set_value_ofs_y, "", "(lv_style)ii" }, + { "set_value_opa", (void*) &lv_style_set_value_opa, "", "(lv_style)ii" }, + { "set_value_str", (void*) &lv_style_set_value_str, "", "(lv_style)is" }, +}; + +/* `lv_group` methods */ +const lvbe_call_c_t lv_group_func[] = { + { "add_obj", (void*) &lv_group_add_obj, "", "(lv_group)(lv_obj)" }, + { "create", (void*) &lv_group_create, "+lv_group", "" }, + { "del", (void*) &lv_group_del, "", "(lv_group)" }, + { "focus_freeze", (void*) &lv_group_focus_freeze, "", "(lv_group)b" }, + { "focus_next", (void*) &lv_group_focus_next, "", "(lv_group)" }, + { "focus_obj", (void*) &lv_group_focus_obj, "", "(lv_obj)" }, + { "focus_prev", (void*) &lv_group_focus_prev, "", "(lv_group)" }, + { "get_click_focus", (void*) &lv_group_get_click_focus, "b", "(lv_group)" }, + { "get_editing", (void*) &lv_group_get_editing, "b", "(lv_group)" }, + { "get_focused", (void*) &lv_group_get_focused, "lv_obj", "(lv_group)" }, + { "get_wrap", (void*) &lv_group_get_wrap, "b", "(lv_group)" }, + { "remove_all_objs", (void*) &lv_group_remove_all_objs, "", "(lv_group)" }, + { "remove_obj", (void*) &lv_group_remove_obj, "", "(lv_obj)" }, + { "send_data", (void*) &lv_group_send_data, "i", "(lv_group)i" }, + { "set_click_focus", (void*) &lv_group_set_click_focus, "", "(lv_group)b" }, + { "set_editing", (void*) &lv_group_set_editing, "", "(lv_group)b" }, + { "set_focus_cb", (void*) &lv_group_set_focus_cb, "", "(lv_group)&0" }, + { "set_refocus_policy", (void*) &lv_group_set_refocus_policy, "", "(lv_group)(lv_group_refocus_policy)" }, + { "set_wrap", (void*) &lv_group_set_wrap, "", "(lv_group)b" }, +}; + +/* `lv_indev` methods */ +const lvbe_call_c_t lv_indev_func[] = { + { "enable", (void*) &lv_indev_enable, "", "(lv_indev)b" }, + { "get_obj_act", (void*) &lv_indev_get_obj_act, "lv_obj", "" }, + { "get_type", (void*) &lv_indev_get_type, "i", "(lv_indev)" }, + { "search_obj", (void*) &lv_indev_search_obj, "lv_obj", "(lv_obj)(lv_point)" }, + { "set_group", (void*) &lv_indev_set_group, "", "(lv_indev)(lv_group)" }, +}; + +/* `lv_obj` methods */ +const lvbe_call_c_t lv_obj_func[] = { + { "add_protect", (void*) &lv_obj_add_protect, "", "(lv_obj)i" }, + { "add_state", (void*) &lv_obj_add_state, "", "(lv_obj)i" }, + { "add_style", (void*) &lv_obj_add_style, "", "(lv_obj)i(lv_style)" }, + { "align", (void*) &lv_obj_align, "", "(lv_obj)(lv_obj)iii" }, + { "align_mid", (void*) &lv_obj_align_mid, "", "(lv_obj)(lv_obj)iii" }, + { "align_mid_x", (void*) &lv_obj_align_mid_x, "", "(lv_obj)(lv_obj)ii" }, + { "align_mid_y", (void*) &lv_obj_align_mid_y, "", "(lv_obj)(lv_obj)ii" }, + { "align_x", (void*) &lv_obj_align_x, "", "(lv_obj)(lv_obj)ii" }, + { "align_y", (void*) &lv_obj_align_y, "", "(lv_obj)(lv_obj)ii" }, + { "allocate_ext_attr", (void*) &lv_obj_allocate_ext_attr, "i", "(lv_obj)i" }, + { "area_is_visible", (void*) &lv_obj_area_is_visible, "b", "(lv_obj)(lv_area)" }, + { "clean", (void*) &lv_obj_clean, "", "(lv_obj)" }, + { "clean_style_list", (void*) &lv_obj_clean_style_list, "", "(lv_obj)i" }, + { "clear_protect", (void*) &lv_obj_clear_protect, "", "(lv_obj)i" }, + { "clear_state", (void*) &lv_obj_clear_state, "", "(lv_obj)i" }, + { "count_children", (void*) &lv_obj_count_children, "i", "(lv_obj)" }, + { "count_children_recursive", (void*) &lv_obj_count_children_recursive, "i", "(lv_obj)" }, + { "create", (void*) &lv_obj_create, "+lv_obj", "(lv_obj)(lv_obj)" }, + { "del", (void*) &lv_obj_del, "i", "(lv_obj)" }, + { "del_anim_ready_cb", (void*) &lv_obj_del_anim_ready_cb, "", "(lv_anim)" }, + { "del_async", (void*) &lv_obj_del_async, "", "(_lv_obj)" }, + { "fade_in", (void*) &lv_obj_fade_in, "", "(lv_obj)ii" }, + { "fade_out", (void*) &lv_obj_fade_out, "", "(lv_obj)ii" }, + { "finish_transitions", (void*) &lv_obj_finish_transitions, "", "(lv_obj)i" }, + { "get_adv_hittest", (void*) &lv_obj_get_adv_hittest, "b", "(lv_obj)" }, + { "get_auto_realign", (void*) &lv_obj_get_auto_realign, "b", "(lv_obj)" }, + { "get_base_dir", (void*) &lv_obj_get_base_dir, "i", "(lv_obj)" }, + { "get_child", (void*) &lv_obj_get_child, "lv_obj", "(lv_obj)(lv_obj)" }, + { "get_child_back", (void*) &lv_obj_get_child_back, "lv_obj", "(lv_obj)(lv_obj)" }, + { "get_click", (void*) &lv_obj_get_click, "b", "(lv_obj)" }, + { "get_coords", (void*) &lv_obj_get_coords, "", "(lv_obj)(lv_area)" }, + { "get_drag", (void*) &lv_obj_get_drag, "b", "(lv_obj)" }, + { "get_drag_dir", (void*) &lv_obj_get_drag_dir, "i", "(lv_obj)" }, + { "get_drag_parent", (void*) &lv_obj_get_drag_parent, "b", "(lv_obj)" }, + { "get_drag_throw", (void*) &lv_obj_get_drag_throw, "b", "(lv_obj)" }, + { "get_draw_rect_ext_pad_size", (void*) &lv_obj_get_draw_rect_ext_pad_size, "i", "(lv_obj)i" }, + { "get_ext_attr", (void*) &lv_obj_get_ext_attr, "i", "(lv_obj)" }, + { "get_ext_click_pad_bottom", (void*) &lv_obj_get_ext_click_pad_bottom, "i", "(lv_obj)" }, + { "get_ext_click_pad_left", (void*) &lv_obj_get_ext_click_pad_left, "i", "(lv_obj)" }, + { "get_ext_click_pad_right", (void*) &lv_obj_get_ext_click_pad_right, "i", "(lv_obj)" }, + { "get_ext_click_pad_top", (void*) &lv_obj_get_ext_click_pad_top, "i", "(lv_obj)" }, + { "get_ext_draw_pad", (void*) &lv_obj_get_ext_draw_pad, "i", "(lv_obj)" }, + { "get_focus_parent", (void*) &lv_obj_get_focus_parent, "b", "(lv_obj)" }, + { "get_focused_obj", (void*) &lv_obj_get_focused_obj, "lv_obj", "(lv_obj)" }, + { "get_gesture_parent", (void*) &lv_obj_get_gesture_parent, "b", "(lv_obj)" }, + { "get_group", (void*) &lv_obj_get_group, "i", "(lv_obj)" }, + { "get_height", (void*) &lv_obj_get_height, "i", "(lv_obj)" }, + { "get_height_fit", (void*) &lv_obj_get_height_fit, "i", "(lv_obj)" }, + { "get_height_grid", (void*) &lv_obj_get_height_grid, "i", "(lv_obj)ii" }, + { "get_height_margin", (void*) &lv_obj_get_height_margin, "i", "(lv_obj)" }, + { "get_hidden", (void*) &lv_obj_get_hidden, "b", "(lv_obj)" }, + { "get_inner_coords", (void*) &lv_obj_get_inner_coords, "", "(lv_obj)(lv_area)" }, + { "get_local_style", (void*) &lv_obj_get_local_style, "lv_style", "(lv_obj)i" }, + { "get_parent", (void*) &lv_obj_get_parent, "lv_obj", "(lv_obj)" }, + { "get_parent_event", (void*) &lv_obj_get_parent_event, "b", "(lv_obj)" }, + { "get_protect", (void*) &lv_obj_get_protect, "i", "(lv_obj)" }, + { "get_screen", (void*) &lv_obj_get_screen, "lv_obj", "(lv_obj)" }, + { "get_state", (void*) &lv_obj_get_state, "i", "(lv_obj)i" }, + { "get_style_bg_blend_mode", (void*) &lv_obj_get_style_bg_blend_mode, "i", "(lv_obj)i" }, + { "get_style_bg_color", (void*) &lv_obj_get_style_bg_color, "lv_color", "(lv_obj)i" }, + { "get_style_bg_grad_color", (void*) &lv_obj_get_style_bg_grad_color, "lv_color", "(lv_obj)i" }, + { "get_style_bg_grad_dir", (void*) &lv_obj_get_style_bg_grad_dir, "i", "(lv_obj)i" }, + { "get_style_bg_grad_stop", (void*) &lv_obj_get_style_bg_grad_stop, "i", "(lv_obj)i" }, + { "get_style_bg_main_stop", (void*) &lv_obj_get_style_bg_main_stop, "i", "(lv_obj)i" }, + { "get_style_bg_opa", (void*) &lv_obj_get_style_bg_opa, "i", "(lv_obj)i" }, + { "get_style_border_blend_mode", (void*) &lv_obj_get_style_border_blend_mode, "i", "(lv_obj)i" }, + { "get_style_border_color", (void*) &lv_obj_get_style_border_color, "lv_color", "(lv_obj)i" }, + { "get_style_border_opa", (void*) &lv_obj_get_style_border_opa, "i", "(lv_obj)i" }, + { "get_style_border_post", (void*) &lv_obj_get_style_border_post, "b", "(lv_obj)i" }, + { "get_style_border_side", (void*) &lv_obj_get_style_border_side, "i", "(lv_obj)i" }, + { "get_style_border_width", (void*) &lv_obj_get_style_border_width, "i", "(lv_obj)i" }, + { "get_style_clip_corner", (void*) &lv_obj_get_style_clip_corner, "b", "(lv_obj)i" }, + { "get_style_image_blend_mode", (void*) &lv_obj_get_style_image_blend_mode, "i", "(lv_obj)i" }, + { "get_style_image_opa", (void*) &lv_obj_get_style_image_opa, "i", "(lv_obj)i" }, + { "get_style_image_recolor", (void*) &lv_obj_get_style_image_recolor, "lv_color", "(lv_obj)i" }, + { "get_style_image_recolor_opa", (void*) &lv_obj_get_style_image_recolor_opa, "i", "(lv_obj)i" }, + { "get_style_line_blend_mode", (void*) &lv_obj_get_style_line_blend_mode, "i", "(lv_obj)i" }, + { "get_style_line_color", (void*) &lv_obj_get_style_line_color, "lv_color", "(lv_obj)i" }, + { "get_style_line_dash_gap", (void*) &lv_obj_get_style_line_dash_gap, "i", "(lv_obj)i" }, + { "get_style_line_dash_width", (void*) &lv_obj_get_style_line_dash_width, "i", "(lv_obj)i" }, + { "get_style_line_opa", (void*) &lv_obj_get_style_line_opa, "i", "(lv_obj)i" }, + { "get_style_line_rounded", (void*) &lv_obj_get_style_line_rounded, "b", "(lv_obj)i" }, + { "get_style_line_width", (void*) &lv_obj_get_style_line_width, "i", "(lv_obj)i" }, + { "get_style_margin_bottom", (void*) &lv_obj_get_style_margin_bottom, "i", "(lv_obj)i" }, + { "get_style_margin_left", (void*) &lv_obj_get_style_margin_left, "i", "(lv_obj)i" }, + { "get_style_margin_right", (void*) &lv_obj_get_style_margin_right, "i", "(lv_obj)i" }, + { "get_style_margin_top", (void*) &lv_obj_get_style_margin_top, "i", "(lv_obj)i" }, + { "get_style_opa_scale", (void*) &lv_obj_get_style_opa_scale, "i", "(lv_obj)i" }, + { "get_style_outline_blend_mode", (void*) &lv_obj_get_style_outline_blend_mode, "i", "(lv_obj)i" }, + { "get_style_outline_color", (void*) &lv_obj_get_style_outline_color, "lv_color", "(lv_obj)i" }, + { "get_style_outline_opa", (void*) &lv_obj_get_style_outline_opa, "i", "(lv_obj)i" }, + { "get_style_outline_pad", (void*) &lv_obj_get_style_outline_pad, "i", "(lv_obj)i" }, + { "get_style_outline_width", (void*) &lv_obj_get_style_outline_width, "i", "(lv_obj)i" }, + { "get_style_pad_bottom", (void*) &lv_obj_get_style_pad_bottom, "i", "(lv_obj)i" }, + { "get_style_pad_inner", (void*) &lv_obj_get_style_pad_inner, "i", "(lv_obj)i" }, + { "get_style_pad_left", (void*) &lv_obj_get_style_pad_left, "i", "(lv_obj)i" }, + { "get_style_pad_right", (void*) &lv_obj_get_style_pad_right, "i", "(lv_obj)i" }, + { "get_style_pad_top", (void*) &lv_obj_get_style_pad_top, "i", "(lv_obj)i" }, + { "get_style_pattern_blend_mode", (void*) &lv_obj_get_style_pattern_blend_mode, "i", "(lv_obj)i" }, + { "get_style_pattern_image", (void*) &lv_obj_get_style_pattern_image, "i", "(lv_obj)i" }, + { "get_style_pattern_opa", (void*) &lv_obj_get_style_pattern_opa, "i", "(lv_obj)i" }, + { "get_style_pattern_recolor", (void*) &lv_obj_get_style_pattern_recolor, "lv_color", "(lv_obj)i" }, + { "get_style_pattern_recolor_opa", (void*) &lv_obj_get_style_pattern_recolor_opa, "i", "(lv_obj)i" }, + { "get_style_pattern_repeat", (void*) &lv_obj_get_style_pattern_repeat, "b", "(lv_obj)i" }, + { "get_style_radius", (void*) &lv_obj_get_style_radius, "i", "(lv_obj)i" }, + { "get_style_scale_border_width", (void*) &lv_obj_get_style_scale_border_width, "i", "(lv_obj)i" }, + { "get_style_scale_end_border_width", (void*) &lv_obj_get_style_scale_end_border_width, "i", "(lv_obj)i" }, + { "get_style_scale_end_color", (void*) &lv_obj_get_style_scale_end_color, "lv_color", "(lv_obj)i" }, + { "get_style_scale_end_line_width", (void*) &lv_obj_get_style_scale_end_line_width, "i", "(lv_obj)i" }, + { "get_style_scale_grad_color", (void*) &lv_obj_get_style_scale_grad_color, "lv_color", "(lv_obj)i" }, + { "get_style_scale_width", (void*) &lv_obj_get_style_scale_width, "i", "(lv_obj)i" }, + { "get_style_shadow_blend_mode", (void*) &lv_obj_get_style_shadow_blend_mode, "i", "(lv_obj)i" }, + { "get_style_shadow_color", (void*) &lv_obj_get_style_shadow_color, "lv_color", "(lv_obj)i" }, + { "get_style_shadow_ofs_x", (void*) &lv_obj_get_style_shadow_ofs_x, "i", "(lv_obj)i" }, + { "get_style_shadow_ofs_y", (void*) &lv_obj_get_style_shadow_ofs_y, "i", "(lv_obj)i" }, + { "get_style_shadow_opa", (void*) &lv_obj_get_style_shadow_opa, "i", "(lv_obj)i" }, + { "get_style_shadow_spread", (void*) &lv_obj_get_style_shadow_spread, "i", "(lv_obj)i" }, + { "get_style_shadow_width", (void*) &lv_obj_get_style_shadow_width, "i", "(lv_obj)i" }, + { "get_style_size", (void*) &lv_obj_get_style_size, "i", "(lv_obj)i" }, + { "get_style_text_blend_mode", (void*) &lv_obj_get_style_text_blend_mode, "i", "(lv_obj)i" }, + { "get_style_text_color", (void*) &lv_obj_get_style_text_color, "lv_color", "(lv_obj)i" }, + { "get_style_text_letter_space", (void*) &lv_obj_get_style_text_letter_space, "i", "(lv_obj)i" }, + { "get_style_text_line_space", (void*) &lv_obj_get_style_text_line_space, "i", "(lv_obj)i" }, + { "get_style_text_opa", (void*) &lv_obj_get_style_text_opa, "i", "(lv_obj)i" }, + { "get_style_text_sel_bg_color", (void*) &lv_obj_get_style_text_sel_bg_color, "lv_color", "(lv_obj)i" }, + { "get_style_text_sel_color", (void*) &lv_obj_get_style_text_sel_color, "lv_color", "(lv_obj)i" }, + { "get_style_transform_angle", (void*) &lv_obj_get_style_transform_angle, "i", "(lv_obj)i" }, + { "get_style_transform_height", (void*) &lv_obj_get_style_transform_height, "i", "(lv_obj)i" }, + { "get_style_transform_width", (void*) &lv_obj_get_style_transform_width, "i", "(lv_obj)i" }, + { "get_style_transform_zoom", (void*) &lv_obj_get_style_transform_zoom, "i", "(lv_obj)i" }, + { "get_style_transition_delay", (void*) &lv_obj_get_style_transition_delay, "i", "(lv_obj)i" }, + { "get_style_transition_prop_1", (void*) &lv_obj_get_style_transition_prop_1, "i", "(lv_obj)i" }, + { "get_style_transition_prop_2", (void*) &lv_obj_get_style_transition_prop_2, "i", "(lv_obj)i" }, + { "get_style_transition_prop_3", (void*) &lv_obj_get_style_transition_prop_3, "i", "(lv_obj)i" }, + { "get_style_transition_prop_4", (void*) &lv_obj_get_style_transition_prop_4, "i", "(lv_obj)i" }, + { "get_style_transition_prop_5", (void*) &lv_obj_get_style_transition_prop_5, "i", "(lv_obj)i" }, + { "get_style_transition_prop_6", (void*) &lv_obj_get_style_transition_prop_6, "i", "(lv_obj)i" }, + { "get_style_transition_time", (void*) &lv_obj_get_style_transition_time, "i", "(lv_obj)i" }, + { "get_style_value_align", (void*) &lv_obj_get_style_value_align, "i", "(lv_obj)i" }, + { "get_style_value_blend_mode", (void*) &lv_obj_get_style_value_blend_mode, "i", "(lv_obj)i" }, + { "get_style_value_color", (void*) &lv_obj_get_style_value_color, "lv_color", "(lv_obj)i" }, + { "get_style_value_letter_space", (void*) &lv_obj_get_style_value_letter_space, "i", "(lv_obj)i" }, + { "get_style_value_line_space", (void*) &lv_obj_get_style_value_line_space, "i", "(lv_obj)i" }, + { "get_style_value_ofs_x", (void*) &lv_obj_get_style_value_ofs_x, "i", "(lv_obj)i" }, + { "get_style_value_ofs_y", (void*) &lv_obj_get_style_value_ofs_y, "i", "(lv_obj)i" }, + { "get_style_value_opa", (void*) &lv_obj_get_style_value_opa, "i", "(lv_obj)i" }, + { "get_style_value_str", (void*) &lv_obj_get_style_value_str, "s", "(lv_obj)i" }, + { "get_top", (void*) &lv_obj_get_top, "b", "(lv_obj)" }, + { "get_type", (void*) &lv_obj_get_type, "", "(lv_obj)(lv_obj_type)" }, + { "get_user_data", (void*) &lv_obj_get_user_data, "i", "(lv_obj)" }, + { "get_width", (void*) &lv_obj_get_width, "i", "(lv_obj)" }, + { "get_width_fit", (void*) &lv_obj_get_width_fit, "i", "(lv_obj)" }, + { "get_width_grid", (void*) &lv_obj_get_width_grid, "i", "(lv_obj)ii" }, + { "get_width_margin", (void*) &lv_obj_get_width_margin, "i", "(lv_obj)" }, + { "get_x", (void*) &lv_obj_get_x, "i", "(lv_obj)" }, + { "get_y", (void*) &lv_obj_get_y, "i", "(lv_obj)" }, + { "handle_get_type_signal", (void*) &lv_obj_handle_get_type_signal, "i", "(lv_obj_type)s" }, + { "hittest", (void*) &lv_obj_hittest, "b", "(lv_obj)(lv_point)" }, + { "init_draw_img_dsc", (void*) &lv_obj_init_draw_img_dsc, "", "(lv_obj)i(lv_draw_img_dsc)" }, + { "init_draw_label_dsc", (void*) &lv_obj_init_draw_label_dsc, "", "(lv_obj)i(lv_draw_label_dsc)" }, + { "init_draw_line_dsc", (void*) &lv_obj_init_draw_line_dsc, "", "(lv_obj)i(lv_draw_line_dsc)" }, + { "init_draw_rect_dsc", (void*) &lv_obj_init_draw_rect_dsc, "", "(lv_obj)i(lv_draw_rect_dsc)" }, + { "invalidate", (void*) &lv_obj_invalidate, "", "(lv_obj)" }, + { "invalidate_area", (void*) &lv_obj_invalidate_area, "", "(lv_obj)(lv_area)" }, + { "is_focused", (void*) &lv_obj_is_focused, "b", "(lv_obj)" }, + { "is_point_on_coords", (void*) &lv_obj_is_point_on_coords, "b", "(lv_obj)(lv_point)" }, + { "is_protected", (void*) &lv_obj_is_protected, "b", "(lv_obj)i" }, + { "is_visible", (void*) &lv_obj_is_visible, "b", "(lv_obj)" }, + { "move_background", (void*) &lv_obj_move_background, "", "(lv_obj)" }, + { "move_foreground", (void*) &lv_obj_move_foreground, "", "(lv_obj)" }, + { "realign", (void*) &lv_obj_realign, "", "(lv_obj)" }, + { "refresh_ext_draw_pad", (void*) &lv_obj_refresh_ext_draw_pad, "", "(lv_obj)" }, + { "refresh_style", (void*) &lv_obj_refresh_style, "", "(lv_obj)i(lv_style_property)" }, + { "remove_style", (void*) &lv_obj_remove_style, "", "(lv_obj)i(lv_style)" }, + { "remove_style_local_prop", (void*) &lv_obj_remove_style_local_prop, "b", "(lv_obj)i(lv_style_property)" }, + { "report_style_mod", (void*) &lv_obj_report_style_mod, "", "(lv_style)" }, + { "reset_style_list", (void*) &lv_obj_reset_style_list, "", "(lv_obj)i" }, + { "set_adv_hittest", (void*) &lv_obj_set_adv_hittest, "", "(lv_obj)b" }, + { "set_auto_realign", (void*) &lv_obj_set_auto_realign, "", "(lv_obj)b" }, + { "set_base_dir", (void*) &lv_obj_set_base_dir, "", "(lv_obj)i" }, + { "set_click", (void*) &lv_obj_set_click, "", "(lv_obj)b" }, + { "set_design_cb", (void*) &lv_obj_set_design_cb, "", "(lv_obj)&3" }, + { "set_drag", (void*) &lv_obj_set_drag, "", "(lv_obj)b" }, + { "set_drag_dir", (void*) &lv_obj_set_drag_dir, "", "(lv_obj)i" }, + { "set_drag_parent", (void*) &lv_obj_set_drag_parent, "", "(lv_obj)b" }, + { "set_drag_throw", (void*) &lv_obj_set_drag_throw, "", "(lv_obj)b" }, + { "set_event_cb", (void*) &lv_obj_set_event_cb, "", "(lv_obj)&1" }, + { "set_ext_click_area", (void*) &lv_obj_set_ext_click_area, "", "(lv_obj)iiii" }, + { "set_focus_parent", (void*) &lv_obj_set_focus_parent, "", "(lv_obj)b" }, + { "set_gesture_parent", (void*) &lv_obj_set_gesture_parent, "", "(lv_obj)b" }, + { "set_height", (void*) &lv_obj_set_height, "", "(lv_obj)i" }, + { "set_height_fit", (void*) &lv_obj_set_height_fit, "", "(lv_obj)i" }, + { "set_height_margin", (void*) &lv_obj_set_height_margin, "", "(lv_obj)i" }, + { "set_hidden", (void*) &lv_obj_set_hidden, "", "(lv_obj)b" }, + { "set_parent", (void*) &lv_obj_set_parent, "", "(lv_obj)(lv_obj)" }, + { "set_parent_event", (void*) &lv_obj_set_parent_event, "", "(lv_obj)b" }, + { "set_pos", (void*) &lv_obj_set_pos, "", "(lv_obj)ii" }, + { "set_signal_cb", (void*) &lv_obj_set_signal_cb, "", "(lv_obj)&2" }, + { "set_size", (void*) &lv_obj_set_size, "", "(lv_obj)ii" }, + { "set_state", (void*) &lv_obj_set_state, "", "(lv_obj)i" }, + { "set_style_local_bg_blend_mode", (void*) &lv_obj_set_style_local_bg_blend_mode, "", "(lv_obj)iii" }, + { "set_style_local_bg_color", (void*) &lv_obj_set_style_local_bg_color, "", "(lv_obj)ii(lv_color)" }, + { "set_style_local_bg_grad_color", (void*) &lv_obj_set_style_local_bg_grad_color, "", "(lv_obj)ii(lv_color)" }, + { "set_style_local_bg_grad_dir", (void*) &lv_obj_set_style_local_bg_grad_dir, "", "(lv_obj)iii" }, + { "set_style_local_bg_grad_stop", (void*) &lv_obj_set_style_local_bg_grad_stop, "", "(lv_obj)iii" }, + { "set_style_local_bg_main_stop", (void*) &lv_obj_set_style_local_bg_main_stop, "", "(lv_obj)iii" }, + { "set_style_local_bg_opa", (void*) &lv_obj_set_style_local_bg_opa, "", "(lv_obj)iii" }, + { "set_style_local_border_blend_mode", (void*) &lv_obj_set_style_local_border_blend_mode, "", "(lv_obj)iii" }, + { "set_style_local_border_color", (void*) &lv_obj_set_style_local_border_color, "", "(lv_obj)ii(lv_color)" }, + { "set_style_local_border_opa", (void*) &lv_obj_set_style_local_border_opa, "", "(lv_obj)iii" }, + { "set_style_local_border_post", (void*) &lv_obj_set_style_local_border_post, "", "(lv_obj)iib" }, + { "set_style_local_border_side", (void*) &lv_obj_set_style_local_border_side, "", "(lv_obj)iii" }, + { "set_style_local_border_width", (void*) &lv_obj_set_style_local_border_width, "", "(lv_obj)iii" }, + { "set_style_local_clip_corner", (void*) &lv_obj_set_style_local_clip_corner, "", "(lv_obj)iib" }, + { "set_style_local_image_blend_mode", (void*) &lv_obj_set_style_local_image_blend_mode, "", "(lv_obj)iii" }, + { "set_style_local_image_opa", (void*) &lv_obj_set_style_local_image_opa, "", "(lv_obj)iii" }, + { "set_style_local_image_recolor", (void*) &lv_obj_set_style_local_image_recolor, "", "(lv_obj)ii(lv_color)" }, + { "set_style_local_image_recolor_opa", (void*) &lv_obj_set_style_local_image_recolor_opa, "", "(lv_obj)iii" }, + { "set_style_local_line_blend_mode", (void*) &lv_obj_set_style_local_line_blend_mode, "", "(lv_obj)iii" }, + { "set_style_local_line_color", (void*) &lv_obj_set_style_local_line_color, "", "(lv_obj)ii(lv_color)" }, + { "set_style_local_line_dash_gap", (void*) &lv_obj_set_style_local_line_dash_gap, "", "(lv_obj)iii" }, + { "set_style_local_line_dash_width", (void*) &lv_obj_set_style_local_line_dash_width, "", "(lv_obj)iii" }, + { "set_style_local_line_opa", (void*) &lv_obj_set_style_local_line_opa, "", "(lv_obj)iii" }, + { "set_style_local_line_rounded", (void*) &lv_obj_set_style_local_line_rounded, "", "(lv_obj)iib" }, + { "set_style_local_line_width", (void*) &lv_obj_set_style_local_line_width, "", "(lv_obj)iii" }, + { "set_style_local_margin_bottom", (void*) &lv_obj_set_style_local_margin_bottom, "", "(lv_obj)iii" }, + { "set_style_local_margin_left", (void*) &lv_obj_set_style_local_margin_left, "", "(lv_obj)iii" }, + { "set_style_local_margin_right", (void*) &lv_obj_set_style_local_margin_right, "", "(lv_obj)iii" }, + { "set_style_local_margin_top", (void*) &lv_obj_set_style_local_margin_top, "", "(lv_obj)iii" }, + { "set_style_local_opa_scale", (void*) &lv_obj_set_style_local_opa_scale, "", "(lv_obj)iii" }, + { "set_style_local_outline_blend_mode", (void*) &lv_obj_set_style_local_outline_blend_mode, "", "(lv_obj)iii" }, + { "set_style_local_outline_color", (void*) &lv_obj_set_style_local_outline_color, "", "(lv_obj)ii(lv_color)" }, + { "set_style_local_outline_opa", (void*) &lv_obj_set_style_local_outline_opa, "", "(lv_obj)iii" }, + { "set_style_local_outline_pad", (void*) &lv_obj_set_style_local_outline_pad, "", "(lv_obj)iii" }, + { "set_style_local_outline_width", (void*) &lv_obj_set_style_local_outline_width, "", "(lv_obj)iii" }, + { "set_style_local_pad_bottom", (void*) &lv_obj_set_style_local_pad_bottom, "", "(lv_obj)iii" }, + { "set_style_local_pad_inner", (void*) &lv_obj_set_style_local_pad_inner, "", "(lv_obj)iii" }, + { "set_style_local_pad_left", (void*) &lv_obj_set_style_local_pad_left, "", "(lv_obj)iii" }, + { "set_style_local_pad_right", (void*) &lv_obj_set_style_local_pad_right, "", "(lv_obj)iii" }, + { "set_style_local_pad_top", (void*) &lv_obj_set_style_local_pad_top, "", "(lv_obj)iii" }, + { "set_style_local_pattern_blend_mode", (void*) &lv_obj_set_style_local_pattern_blend_mode, "", "(lv_obj)iii" }, + { "set_style_local_pattern_image", (void*) &lv_obj_set_style_local_pattern_image, "", "(lv_obj)iii" }, + { "set_style_local_pattern_opa", (void*) &lv_obj_set_style_local_pattern_opa, "", "(lv_obj)iii" }, + { "set_style_local_pattern_recolor", (void*) &lv_obj_set_style_local_pattern_recolor, "", "(lv_obj)ii(lv_color)" }, + { "set_style_local_pattern_recolor_opa", (void*) &lv_obj_set_style_local_pattern_recolor_opa, "", "(lv_obj)iii" }, + { "set_style_local_pattern_repeat", (void*) &lv_obj_set_style_local_pattern_repeat, "", "(lv_obj)iib" }, + { "set_style_local_radius", (void*) &lv_obj_set_style_local_radius, "", "(lv_obj)iii" }, + { "set_style_local_scale_border_width", (void*) &lv_obj_set_style_local_scale_border_width, "", "(lv_obj)iii" }, + { "set_style_local_scale_end_border_width", (void*) &lv_obj_set_style_local_scale_end_border_width, "", "(lv_obj)iii" }, + { "set_style_local_scale_end_color", (void*) &lv_obj_set_style_local_scale_end_color, "", "(lv_obj)ii(lv_color)" }, + { "set_style_local_scale_end_line_width", (void*) &lv_obj_set_style_local_scale_end_line_width, "", "(lv_obj)iii" }, + { "set_style_local_scale_grad_color", (void*) &lv_obj_set_style_local_scale_grad_color, "", "(lv_obj)ii(lv_color)" }, + { "set_style_local_scale_width", (void*) &lv_obj_set_style_local_scale_width, "", "(lv_obj)iii" }, + { "set_style_local_shadow_blend_mode", (void*) &lv_obj_set_style_local_shadow_blend_mode, "", "(lv_obj)iii" }, + { "set_style_local_shadow_color", (void*) &lv_obj_set_style_local_shadow_color, "", "(lv_obj)ii(lv_color)" }, + { "set_style_local_shadow_ofs_x", (void*) &lv_obj_set_style_local_shadow_ofs_x, "", "(lv_obj)iii" }, + { "set_style_local_shadow_ofs_y", (void*) &lv_obj_set_style_local_shadow_ofs_y, "", "(lv_obj)iii" }, + { "set_style_local_shadow_opa", (void*) &lv_obj_set_style_local_shadow_opa, "", "(lv_obj)iii" }, + { "set_style_local_shadow_spread", (void*) &lv_obj_set_style_local_shadow_spread, "", "(lv_obj)iii" }, + { "set_style_local_shadow_width", (void*) &lv_obj_set_style_local_shadow_width, "", "(lv_obj)iii" }, + { "set_style_local_size", (void*) &lv_obj_set_style_local_size, "", "(lv_obj)iii" }, + { "set_style_local_text_blend_mode", (void*) &lv_obj_set_style_local_text_blend_mode, "", "(lv_obj)iii" }, + { "set_style_local_text_color", (void*) &lv_obj_set_style_local_text_color, "", "(lv_obj)ii(lv_color)" }, + { "set_style_local_text_decor", (void*) &lv_obj_set_style_local_text_decor, "", "(lv_obj)ii(lv_text_decor)" }, + { "set_style_local_text_font", (void*) &lv_obj_set_style_local_text_font, "", "(lv_obj)ii(lv_font)" }, + { "set_style_local_text_letter_space", (void*) &lv_obj_set_style_local_text_letter_space, "", "(lv_obj)iii" }, + { "set_style_local_text_line_space", (void*) &lv_obj_set_style_local_text_line_space, "", "(lv_obj)iii" }, + { "set_style_local_text_opa", (void*) &lv_obj_set_style_local_text_opa, "", "(lv_obj)iii" }, + { "set_style_local_text_sel_bg_color", (void*) &lv_obj_set_style_local_text_sel_bg_color, "", "(lv_obj)ii(lv_color)" }, + { "set_style_local_text_sel_color", (void*) &lv_obj_set_style_local_text_sel_color, "", "(lv_obj)ii(lv_color)" }, + { "set_style_local_transform_angle", (void*) &lv_obj_set_style_local_transform_angle, "", "(lv_obj)iii" }, + { "set_style_local_transform_height", (void*) &lv_obj_set_style_local_transform_height, "", "(lv_obj)iii" }, + { "set_style_local_transform_width", (void*) &lv_obj_set_style_local_transform_width, "", "(lv_obj)iii" }, + { "set_style_local_transform_zoom", (void*) &lv_obj_set_style_local_transform_zoom, "", "(lv_obj)iii" }, + { "set_style_local_transition_delay", (void*) &lv_obj_set_style_local_transition_delay, "", "(lv_obj)iii" }, + { "set_style_local_transition_path", (void*) &lv_obj_set_style_local_transition_path, "", "(lv_obj)ii(lv_anim_path)" }, + { "set_style_local_transition_prop_1", (void*) &lv_obj_set_style_local_transition_prop_1, "", "(lv_obj)iii" }, + { "set_style_local_transition_prop_2", (void*) &lv_obj_set_style_local_transition_prop_2, "", "(lv_obj)iii" }, + { "set_style_local_transition_prop_3", (void*) &lv_obj_set_style_local_transition_prop_3, "", "(lv_obj)iii" }, + { "set_style_local_transition_prop_4", (void*) &lv_obj_set_style_local_transition_prop_4, "", "(lv_obj)iii" }, + { "set_style_local_transition_prop_5", (void*) &lv_obj_set_style_local_transition_prop_5, "", "(lv_obj)iii" }, + { "set_style_local_transition_prop_6", (void*) &lv_obj_set_style_local_transition_prop_6, "", "(lv_obj)iii" }, + { "set_style_local_transition_time", (void*) &lv_obj_set_style_local_transition_time, "", "(lv_obj)iii" }, + { "set_style_local_value_align", (void*) &lv_obj_set_style_local_value_align, "", "(lv_obj)iii" }, + { "set_style_local_value_blend_mode", (void*) &lv_obj_set_style_local_value_blend_mode, "", "(lv_obj)iii" }, + { "set_style_local_value_color", (void*) &lv_obj_set_style_local_value_color, "", "(lv_obj)ii(lv_color)" }, + { "set_style_local_value_font", (void*) &lv_obj_set_style_local_value_font, "", "(lv_obj)ii(lv_font)" }, + { "set_style_local_value_letter_space", (void*) &lv_obj_set_style_local_value_letter_space, "", "(lv_obj)iii" }, + { "set_style_local_value_line_space", (void*) &lv_obj_set_style_local_value_line_space, "", "(lv_obj)iii" }, + { "set_style_local_value_ofs_x", (void*) &lv_obj_set_style_local_value_ofs_x, "", "(lv_obj)iii" }, + { "set_style_local_value_ofs_y", (void*) &lv_obj_set_style_local_value_ofs_y, "", "(lv_obj)iii" }, + { "set_style_local_value_opa", (void*) &lv_obj_set_style_local_value_opa, "", "(lv_obj)iii" }, + { "set_style_local_value_str", (void*) &lv_obj_set_style_local_value_str, "", "(lv_obj)iis" }, + { "set_top", (void*) &lv_obj_set_top, "", "(lv_obj)b" }, + { "set_user_data", (void*) &lv_obj_set_user_data, "", "(lv_obj)i" }, + { "set_width", (void*) &lv_obj_set_width, "", "(lv_obj)i" }, + { "set_width_fit", (void*) &lv_obj_set_width_fit, "", "(lv_obj)i" }, + { "set_width_margin", (void*) &lv_obj_set_width_margin, "", "(lv_obj)i" }, + { "set_x", (void*) &lv_obj_set_x, "", "(lv_obj)i" }, + { "set_y", (void*) &lv_obj_set_y, "", "(lv_obj)i" }, +}; + +/* `lv_arc` methods */ +const lvbe_call_c_t lv_arc_func[] = { + { "create", (void*) &lv_arc_create, "+lv_arc", "(lv_obj)(lv_obj)" }, + { "get_adjustable", (void*) &lv_arc_get_adjustable, "b", "(lv_obj)" }, + { "get_angle_end", (void*) &lv_arc_get_angle_end, "i", "(lv_obj)" }, + { "get_angle_start", (void*) &lv_arc_get_angle_start, "i", "(lv_obj)" }, + { "get_bg_angle_end", (void*) &lv_arc_get_bg_angle_end, "i", "(lv_obj)" }, + { "get_bg_angle_start", (void*) &lv_arc_get_bg_angle_start, "i", "(lv_obj)" }, + { "get_max_value", (void*) &lv_arc_get_max_value, "i", "(lv_obj)" }, + { "get_min_value", (void*) &lv_arc_get_min_value, "i", "(lv_obj)" }, + { "get_type", (void*) &lv_arc_get_type, "i", "(lv_obj)" }, + { "get_value", (void*) &lv_arc_get_value, "i", "(lv_obj)" }, + { "is_dragged", (void*) &lv_arc_is_dragged, "b", "(lv_obj)" }, + { "set_adjustable", (void*) &lv_arc_set_adjustable, "", "(lv_obj)b" }, + { "set_angles", (void*) &lv_arc_set_angles, "", "(lv_obj)ii" }, + { "set_bg_angles", (void*) &lv_arc_set_bg_angles, "", "(lv_obj)ii" }, + { "set_bg_end_angle", (void*) &lv_arc_set_bg_end_angle, "", "(lv_obj)i" }, + { "set_bg_start_angle", (void*) &lv_arc_set_bg_start_angle, "", "(lv_obj)i" }, + { "set_chg_rate", (void*) &lv_arc_set_chg_rate, "", "(lv_obj)i" }, + { "set_end_angle", (void*) &lv_arc_set_end_angle, "", "(lv_obj)i" }, + { "set_range", (void*) &lv_arc_set_range, "", "(lv_obj)ii" }, + { "set_rotation", (void*) &lv_arc_set_rotation, "", "(lv_obj)i" }, + { "set_start_angle", (void*) &lv_arc_set_start_angle, "", "(lv_obj)i" }, + { "set_type", (void*) &lv_arc_set_type, "", "(lv_obj)i" }, + { "set_value", (void*) &lv_arc_set_value, "", "(lv_obj)i" }, +}; + +/* `lv_bar` methods */ +const lvbe_call_c_t lv_bar_func[] = { + { "create", (void*) &lv_bar_create, "+lv_bar", "(lv_obj)(lv_obj)" }, + { "get_anim_time", (void*) &lv_bar_get_anim_time, "i", "(lv_obj)" }, + { "get_max_value", (void*) &lv_bar_get_max_value, "i", "(lv_obj)" }, + { "get_min_value", (void*) &lv_bar_get_min_value, "i", "(lv_obj)" }, + { "get_start_value", (void*) &lv_bar_get_start_value, "i", "(lv_obj)" }, + { "get_type", (void*) &lv_bar_get_type, "i", "(lv_obj)" }, + { "get_value", (void*) &lv_bar_get_value, "i", "(lv_obj)" }, + { "set_anim_time", (void*) &lv_bar_set_anim_time, "", "(lv_obj)i" }, + { "set_range", (void*) &lv_bar_set_range, "", "(lv_obj)ii" }, + { "set_start_value", (void*) &lv_bar_set_start_value, "", "(lv_obj)i(lv_anim_enable)" }, + { "set_type", (void*) &lv_bar_set_type, "", "(lv_obj)i" }, + { "set_value", (void*) &lv_bar_set_value, "", "(lv_obj)i(lv_anim_enable)" }, +}; + +/* `lv_btn` methods */ +const lvbe_call_c_t lv_btn_func[] = { + { "create", (void*) &lv_btn_create, "+lv_btn", "(lv_obj)(lv_obj)" }, + { "get_checkable", (void*) &lv_btn_get_checkable, "b", "(lv_obj)" }, + { "get_fit_bottom", (void*) &lv_btn_get_fit_bottom, "i", "(lv_obj)" }, + { "get_fit_left", (void*) &lv_btn_get_fit_left, "i", "(lv_obj)" }, + { "get_fit_right", (void*) &lv_btn_get_fit_right, "i", "(lv_obj)" }, + { "get_fit_top", (void*) &lv_btn_get_fit_top, "i", "(lv_obj)" }, + { "get_layout", (void*) &lv_btn_get_layout, "i", "(lv_obj)" }, + { "get_state", (void*) &lv_btn_get_state, "i", "(lv_obj)" }, + { "set_checkable", (void*) &lv_btn_set_checkable, "", "(lv_obj)b" }, + { "set_fit", (void*) &lv_btn_set_fit, "", "(lv_obj)i" }, + { "set_fit2", (void*) &lv_btn_set_fit2, "", "(lv_obj)ii" }, + { "set_fit4", (void*) &lv_btn_set_fit4, "", "(lv_obj)iiii" }, + { "set_layout", (void*) &lv_btn_set_layout, "", "(lv_obj)i" }, + { "set_state", (void*) &lv_btn_set_state, "", "(lv_obj)i" }, + { "toggle", (void*) &lv_btn_toggle, "", "(lv_obj)" }, +}; + +/* `lv_btnmatrix` methods */ +const lvbe_call_c_t lv_btnmatrix_func[] = { + { "clear_btn_ctrl", (void*) &lv_btnmatrix_clear_btn_ctrl, "", "(lv_obj)i(lv_btnmatrix_ctrl)" }, + { "clear_btn_ctrl_all", (void*) &lv_btnmatrix_clear_btn_ctrl_all, "", "(lv_obj)(lv_btnmatrix_ctrl)" }, + { "create", (void*) &lv_btnmatrix_create, "+lv_btnmatrix", "(lv_obj)(lv_obj)" }, + { "get_active_btn", (void*) &lv_btnmatrix_get_active_btn, "i", "(lv_obj)" }, + { "get_active_btn_text", (void*) &lv_btnmatrix_get_active_btn_text, "s", "(lv_obj)" }, + { "get_align", (void*) &lv_btnmatrix_get_align, "i", "(lv_obj)" }, + { "get_btn_ctrl", (void*) &lv_btnmatrix_get_btn_ctrl, "b", "(lv_obj)i(lv_btnmatrix_ctrl)" }, + { "get_btn_text", (void*) &lv_btnmatrix_get_btn_text, "s", "(lv_obj)i" }, + { "get_focused_btn", (void*) &lv_btnmatrix_get_focused_btn, "i", "(lv_obj)" }, + { "get_one_check", (void*) &lv_btnmatrix_get_one_check, "b", "(lv_obj)" }, + { "get_recolor", (void*) &lv_btnmatrix_get_recolor, "b", "(lv_obj)" }, + { "set_align", (void*) &lv_btnmatrix_set_align, "", "(lv_obj)i" }, + { "set_btn_ctrl", (void*) &lv_btnmatrix_set_btn_ctrl, "", "(lv_obj)i(lv_btnmatrix_ctrl)" }, + { "set_btn_ctrl_all", (void*) &lv_btnmatrix_set_btn_ctrl_all, "", "(lv_obj)(lv_btnmatrix_ctrl)" }, + { "set_btn_width", (void*) &lv_btnmatrix_set_btn_width, "", "(lv_obj)ii" }, + { "set_ctrl_map", (void*) &lv_btnmatrix_set_ctrl_map, "", "(lv_obj)(lv_btnmatrix_ctrl)" }, + { "set_focused_btn", (void*) &lv_btnmatrix_set_focused_btn, "", "(lv_obj)i" }, + { "set_map", (void*) &lv_btnmatrix_set_map, "", "(lv_obj)s" }, + { "set_one_check", (void*) &lv_btnmatrix_set_one_check, "", "(lv_obj)b" }, + { "set_recolor", (void*) &lv_btnmatrix_set_recolor, "", "(lv_obj)b" }, +}; + +/* `lv_calendar` methods */ +const lvbe_call_c_t lv_calendar_func[] = { + { "create", (void*) &lv_calendar_create, "+lv_calendar", "(lv_obj)(lv_obj)" }, + { "get_day_of_week", (void*) &lv_calendar_get_day_of_week, "i", "iii" }, + { "get_highlighted_dates_num", (void*) &lv_calendar_get_highlighted_dates_num, "i", "(lv_obj)" }, + { "set_day_names", (void*) &lv_calendar_set_day_names, "", "(lv_obj)(char)" }, + { "set_highlighted_dates", (void*) &lv_calendar_set_highlighted_dates, "", "(lv_obj)(lv_calendar_date)i" }, + { "set_month_names", (void*) &lv_calendar_set_month_names, "", "(lv_obj)(char)" }, + { "set_showed_date", (void*) &lv_calendar_set_showed_date, "", "(lv_obj)(lv_calendar_date)" }, + { "set_today_date", (void*) &lv_calendar_set_today_date, "", "(lv_obj)(lv_calendar_date)" }, +}; + +/* `lv_canvas` methods */ +const lvbe_call_c_t lv_canvas_func[] = { + { "blur_hor", (void*) &lv_canvas_blur_hor, "", "(lv_obj)(lv_area)i" }, + { "blur_ver", (void*) &lv_canvas_blur_ver, "", "(lv_obj)(lv_area)i" }, + { "copy_buf", (void*) &lv_canvas_copy_buf, "", "(lv_obj)iiiii" }, + { "create", (void*) &lv_canvas_create, "+lv_canvas", "(lv_obj)(lv_obj)" }, + { "draw_arc", (void*) &lv_canvas_draw_arc, "", "(lv_obj)iiiii(lv_draw_line_dsc)" }, + { "draw_img", (void*) &lv_canvas_draw_img, "", "(lv_obj)iii(lv_draw_img_dsc)" }, + { "draw_line", (void*) &lv_canvas_draw_line, "", "(lv_obj)ii(lv_draw_line_dsc)" }, + { "draw_polygon", (void*) &lv_canvas_draw_polygon, "", "(lv_obj)ii(lv_draw_rect_dsc)" }, + { "draw_rect", (void*) &lv_canvas_draw_rect, "", "(lv_obj)iiii(lv_draw_rect_dsc)" }, + { "draw_text", (void*) &lv_canvas_draw_text, "", "(lv_obj)iii(lv_draw_label_dsc)si" }, + { "fill_bg", (void*) &lv_canvas_fill_bg, "", "(lv_obj)(lv_color)i" }, + { "get_px", (void*) &lv_canvas_get_px, "lv_color", "(lv_obj)ii" }, + { "set_buffer", (void*) &lv_canvas_set_buffer, "", "(lv_obj)iii(lv_img_cf)" }, + { "set_palette", (void*) &lv_canvas_set_palette, "", "(lv_obj)i(lv_color)" }, + { "set_px", (void*) &lv_canvas_set_px, "", "(lv_obj)ii(lv_color)" }, + { "transform", (void*) &lv_canvas_transform, "", "(lv_obj)(lv_img_dsc)iiiiiib" }, +}; + +/* `lv_chart` methods */ +const lvbe_call_c_t lv_chart_func[] = { + { "clear_series", (void*) &lv_chart_clear_series, "", "(lv_obj)(lv_chart_series)" }, + { "create", (void*) &lv_chart_create, "+lv_chart", "(lv_obj)(lv_obj)" }, + { "get_cursor_point", (void*) &lv_chart_get_cursor_point, "i", "(lv_obj)(lv_chart_cursor)" }, + { "get_nearest_index_from_coord", (void*) &lv_chart_get_nearest_index_from_coord, "i", "(lv_obj)i" }, + { "get_point_count", (void*) &lv_chart_get_point_count, "i", "(lv_obj)" }, + { "get_point_id", (void*) &lv_chart_get_point_id, "i", "(lv_obj)(lv_chart_series)i" }, + { "get_series_area", (void*) &lv_chart_get_series_area, "", "(lv_obj)(lv_area)" }, + { "get_series_axis", (void*) &lv_chart_get_series_axis, "i", "(lv_obj)(lv_chart_series)" }, + { "get_type", (void*) &lv_chart_get_type, "i", "(lv_obj)" }, + { "get_x_from_index", (void*) &lv_chart_get_x_from_index, "i", "(lv_obj)(lv_chart_series)i" }, + { "get_x_start_point", (void*) &lv_chart_get_x_start_point, "i", "(lv_chart_series)" }, + { "get_y_from_index", (void*) &lv_chart_get_y_from_index, "i", "(lv_obj)(lv_chart_series)i" }, + { "hide_series", (void*) &lv_chart_hide_series, "", "(lv_obj)(lv_chart_series)b" }, + { "init_points", (void*) &lv_chart_init_points, "", "(lv_obj)(lv_chart_series)i" }, + { "refresh", (void*) &lv_chart_refresh, "", "(lv_obj)" }, + { "remove_series", (void*) &lv_chart_remove_series, "", "(lv_obj)(lv_chart_series)" }, + { "set_cursor_point", (void*) &lv_chart_set_cursor_point, "", "(lv_obj)(lv_chart_cursor)(lv_point)" }, + { "set_div_line_count", (void*) &lv_chart_set_div_line_count, "", "(lv_obj)ii" }, + { "set_ext_array", (void*) &lv_chart_set_ext_array, "", "(lv_obj)(lv_chart_series)ii" }, + { "set_next", (void*) &lv_chart_set_next, "", "(lv_obj)(lv_chart_series)i" }, + { "set_point_count", (void*) &lv_chart_set_point_count, "", "(lv_obj)i" }, + { "set_point_id", (void*) &lv_chart_set_point_id, "", "(lv_obj)(lv_chart_series)ii" }, + { "set_points", (void*) &lv_chart_set_points, "", "(lv_obj)(lv_chart_series)i" }, + { "set_secondary_y_tick_length", (void*) &lv_chart_set_secondary_y_tick_length, "", "(lv_obj)ii" }, + { "set_secondary_y_tick_texts", (void*) &lv_chart_set_secondary_y_tick_texts, "", "(lv_obj)si(lv_chart_axis_options)" }, + { "set_series_axis", (void*) &lv_chart_set_series_axis, "", "(lv_obj)(lv_chart_series)i" }, + { "set_type", (void*) &lv_chart_set_type, "", "(lv_obj)i" }, + { "set_update_mode", (void*) &lv_chart_set_update_mode, "", "(lv_obj)(lv_chart_update_mode)" }, + { "set_x_start_point", (void*) &lv_chart_set_x_start_point, "", "(lv_obj)(lv_chart_series)i" }, + { "set_x_tick_length", (void*) &lv_chart_set_x_tick_length, "", "(lv_obj)ii" }, + { "set_x_tick_texts", (void*) &lv_chart_set_x_tick_texts, "", "(lv_obj)si(lv_chart_axis_options)" }, + { "set_y_range", (void*) &lv_chart_set_y_range, "", "(lv_obj)iii" }, + { "set_y_tick_length", (void*) &lv_chart_set_y_tick_length, "", "(lv_obj)ii" }, + { "set_y_tick_texts", (void*) &lv_chart_set_y_tick_texts, "", "(lv_obj)si(lv_chart_axis_options)" }, +}; + +/* `lv_checkbox` methods */ +const lvbe_call_c_t lv_checkbox_func[] = { + { "create", (void*) &lv_checkbox_create, "+lv_checkbox", "(lv_obj)(lv_obj)" }, + { "get_state", (void*) &lv_checkbox_get_state, "i", "(lv_obj)" }, + { "get_text", (void*) &lv_checkbox_get_text, "s", "(lv_obj)" }, + { "is_checked", (void*) &lv_checkbox_is_checked, "b", "(lv_obj)" }, + { "is_inactive", (void*) &lv_checkbox_is_inactive, "b", "(lv_obj)" }, + { "set_checked", (void*) &lv_checkbox_set_checked, "", "(lv_obj)b" }, + { "set_disabled", (void*) &lv_checkbox_set_disabled, "", "(lv_obj)" }, + { "set_state", (void*) &lv_checkbox_set_state, "", "(lv_obj)i" }, + { "set_text", (void*) &lv_checkbox_set_text, "", "(lv_obj)s" }, + { "set_text_static", (void*) &lv_checkbox_set_text_static, "", "(lv_obj)s" }, +}; + +/* `lv_cont` methods */ +const lvbe_call_c_t lv_cont_func[] = { + { "create", (void*) &lv_cont_create, "+lv_cont", "(lv_obj)(lv_obj)" }, + { "get_fit_bottom", (void*) &lv_cont_get_fit_bottom, "i", "(lv_obj)" }, + { "get_fit_left", (void*) &lv_cont_get_fit_left, "i", "(lv_obj)" }, + { "get_fit_right", (void*) &lv_cont_get_fit_right, "i", "(lv_obj)" }, + { "get_fit_top", (void*) &lv_cont_get_fit_top, "i", "(lv_obj)" }, + { "get_layout", (void*) &lv_cont_get_layout, "i", "(lv_obj)" }, + { "set_fit", (void*) &lv_cont_set_fit, "", "(lv_obj)i" }, + { "set_fit2", (void*) &lv_cont_set_fit2, "", "(lv_obj)ii" }, + { "set_fit4", (void*) &lv_cont_set_fit4, "", "(lv_obj)iiii" }, + { "set_layout", (void*) &lv_cont_set_layout, "", "(lv_obj)i" }, +}; + +/* `lv_cpicker` methods */ +const lvbe_call_c_t lv_cpicker_func[] = { + { "create", (void*) &lv_cpicker_create, "+lv_cpicker", "(lv_obj)(lv_obj)" }, + { "get_color", (void*) &lv_cpicker_get_color, "lv_color", "(lv_obj)" }, + { "get_color_mode", (void*) &lv_cpicker_get_color_mode, "i", "(lv_obj)" }, + { "get_color_mode_fixed", (void*) &lv_cpicker_get_color_mode_fixed, "b", "(lv_obj)" }, + { "get_hsv", (void*) &lv_cpicker_get_hsv, "i", "(lv_obj)" }, + { "get_hue", (void*) &lv_cpicker_get_hue, "i", "(lv_obj)" }, + { "get_knob_colored", (void*) &lv_cpicker_get_knob_colored, "b", "(lv_obj)" }, + { "get_saturation", (void*) &lv_cpicker_get_saturation, "i", "(lv_obj)" }, + { "get_value", (void*) &lv_cpicker_get_value, "i", "(lv_obj)" }, + { "set_color", (void*) &lv_cpicker_set_color, "b", "(lv_obj)(lv_color)" }, + { "set_color_mode", (void*) &lv_cpicker_set_color_mode, "", "(lv_obj)i" }, + { "set_color_mode_fixed", (void*) &lv_cpicker_set_color_mode_fixed, "", "(lv_obj)b" }, + { "set_hsv", (void*) &lv_cpicker_set_hsv, "b", "(lv_obj)i" }, + { "set_hue", (void*) &lv_cpicker_set_hue, "b", "(lv_obj)i" }, + { "set_knob_colored", (void*) &lv_cpicker_set_knob_colored, "", "(lv_obj)b" }, + { "set_saturation", (void*) &lv_cpicker_set_saturation, "b", "(lv_obj)i" }, + { "set_type", (void*) &lv_cpicker_set_type, "", "(lv_obj)(lv_cpicker_type)" }, + { "set_value", (void*) &lv_cpicker_set_value, "b", "(lv_obj)i" }, +}; + +/* `lv_dropdown` methods */ +const lvbe_call_c_t lv_dropdown_func[] = { + { "add_option", (void*) &lv_dropdown_add_option, "", "(lv_obj)si" }, + { "clear_options", (void*) &lv_dropdown_clear_options, "", "(lv_obj)" }, + { "close", (void*) &lv_dropdown_close, "", "(lv_obj)" }, + { "create", (void*) &lv_dropdown_create, "+lv_dropdown", "(lv_obj)(lv_obj)" }, + { "get_dir", (void*) &lv_dropdown_get_dir, "i", "(lv_obj)" }, + { "get_max_height", (void*) &lv_dropdown_get_max_height, "i", "(lv_obj)" }, + { "get_option_cnt", (void*) &lv_dropdown_get_option_cnt, "i", "(lv_obj)" }, + { "get_options", (void*) &lv_dropdown_get_options, "s", "(lv_obj)" }, + { "get_selected", (void*) &lv_dropdown_get_selected, "i", "(lv_obj)" }, + { "get_selected_str", (void*) &lv_dropdown_get_selected_str, "", "(lv_obj)si" }, + { "get_show_selected", (void*) &lv_dropdown_get_show_selected, "b", "(lv_obj)" }, + { "get_symbol", (void*) &lv_dropdown_get_symbol, "s", "(lv_obj)" }, + { "get_text", (void*) &lv_dropdown_get_text, "s", "(lv_obj)" }, + { "open", (void*) &lv_dropdown_open, "", "(lv_obj)" }, + { "set_dir", (void*) &lv_dropdown_set_dir, "", "(lv_obj)i" }, + { "set_max_height", (void*) &lv_dropdown_set_max_height, "", "(lv_obj)i" }, + { "set_options", (void*) &lv_dropdown_set_options, "", "(lv_obj)s" }, + { "set_options_static", (void*) &lv_dropdown_set_options_static, "", "(lv_obj)s" }, + { "set_selected", (void*) &lv_dropdown_set_selected, "", "(lv_obj)i" }, + { "set_show_selected", (void*) &lv_dropdown_set_show_selected, "", "(lv_obj)b" }, + { "set_symbol", (void*) &lv_dropdown_set_symbol, "", "(lv_obj)s" }, + { "set_text", (void*) &lv_dropdown_set_text, "", "(lv_obj)s" }, +}; + +/* `lv_gauge` methods */ +const lvbe_call_c_t lv_gauge_func[] = { + { "create", (void*) &lv_gauge_create, "+lv_gauge", "(lv_obj)(lv_obj)" }, + { "get_angle_offset", (void*) &lv_gauge_get_angle_offset, "i", "(lv_obj)" }, + { "get_critical_value", (void*) &lv_gauge_get_critical_value, "i", "(lv_obj)" }, + { "get_label_count", (void*) &lv_gauge_get_label_count, "i", "(lv_obj)" }, + { "get_line_count", (void*) &lv_gauge_get_line_count, "i", "(lv_obj)" }, + { "get_max_value", (void*) &lv_gauge_get_max_value, "i", "(lv_obj)" }, + { "get_min_value", (void*) &lv_gauge_get_min_value, "i", "(lv_obj)" }, + { "get_needle_count", (void*) &lv_gauge_get_needle_count, "i", "(lv_obj)" }, + { "get_needle_img", (void*) &lv_gauge_get_needle_img, "i", "(lv_obj)" }, + { "get_needle_img_pivot_x", (void*) &lv_gauge_get_needle_img_pivot_x, "i", "(lv_obj)" }, + { "get_needle_img_pivot_y", (void*) &lv_gauge_get_needle_img_pivot_y, "i", "(lv_obj)" }, + { "get_scale_angle", (void*) &lv_gauge_get_scale_angle, "i", "(lv_obj)" }, + { "get_value", (void*) &lv_gauge_get_value, "i", "(lv_obj)i" }, + { "set_angle_offset", (void*) &lv_gauge_set_angle_offset, "", "(lv_obj)i" }, + { "set_critical_value", (void*) &lv_gauge_set_critical_value, "", "(lv_obj)i" }, + { "set_formatter_cb", (void*) &lv_gauge_set_formatter_cb, "", "(lv_obj)&4" }, + { "set_needle_count", (void*) &lv_gauge_set_needle_count, "", "(lv_obj)i(lv_color)" }, + { "set_needle_img", (void*) &lv_gauge_set_needle_img, "", "(lv_obj)iii" }, + { "set_range", (void*) &lv_gauge_set_range, "", "(lv_obj)ii" }, + { "set_scale", (void*) &lv_gauge_set_scale, "", "(lv_obj)iii" }, + { "set_value", (void*) &lv_gauge_set_value, "", "(lv_obj)ii" }, +}; + +/* `lv_imgbtn` methods */ +const lvbe_call_c_t lv_imgbtn_func[] = { + { "create", (void*) &lv_imgbtn_create, "+lv_imgbtn", "(lv_obj)(lv_obj)" }, + { "get_src", (void*) &lv_imgbtn_get_src, "i", "(lv_obj)i" }, + { "get_state", (void*) &lv_imgbtn_get_state, "i", "(lv_obj)" }, + { "set_checkable", (void*) &lv_imgbtn_set_checkable, "", "(lv_obj)b" }, + { "set_src", (void*) &lv_imgbtn_set_src, "", "(lv_obj)ii" }, + { "set_state", (void*) &lv_imgbtn_set_state, "", "(lv_obj)i" }, + { "toggle", (void*) &lv_imgbtn_toggle, "", "(lv_obj)" }, +}; + +/* `lv_keyboard` methods */ +const lvbe_call_c_t lv_keyboard_func[] = { + { "create", (void*) &lv_keyboard_create, "+lv_keyboard", "(lv_obj)(lv_obj)" }, + { "def_event_cb", (void*) &lv_keyboard_def_event_cb, "", "(lv_obj)(lv_event)" }, + { "get_cursor_manage", (void*) &lv_keyboard_get_cursor_manage, "b", "(lv_obj)" }, + { "get_mode", (void*) &lv_keyboard_get_mode, "i", "(lv_obj)" }, + { "get_textarea", (void*) &lv_keyboard_get_textarea, "lv_obj", "(lv_obj)" }, + { "set_ctrl_map", (void*) &lv_keyboard_set_ctrl_map, "", "(lv_obj)i(lv_btnmatrix_ctrl)" }, + { "set_cursor_manage", (void*) &lv_keyboard_set_cursor_manage, "", "(lv_obj)b" }, + { "set_map", (void*) &lv_keyboard_set_map, "", "(lv_obj)is" }, + { "set_mode", (void*) &lv_keyboard_set_mode, "", "(lv_obj)i" }, + { "set_textarea", (void*) &lv_keyboard_set_textarea, "", "(lv_obj)(lv_obj)" }, +}; + +/* `lv_label` methods */ +const lvbe_call_c_t lv_label_func[] = { + { "create", (void*) &lv_label_create, "+lv_label", "(lv_obj)(lv_obj)" }, + { "cut_text", (void*) &lv_label_cut_text, "", "(lv_obj)ii" }, + { "get_align", (void*) &lv_label_get_align, "i", "(lv_obj)" }, + { "get_anim_speed", (void*) &lv_label_get_anim_speed, "i", "(lv_obj)" }, + { "get_letter_on", (void*) &lv_label_get_letter_on, "i", "(lv_obj)(lv_point)" }, + { "get_letter_pos", (void*) &lv_label_get_letter_pos, "", "(lv_obj)i(lv_point)" }, + { "get_long_mode", (void*) &lv_label_get_long_mode, "i", "(lv_obj)" }, + { "get_recolor", (void*) &lv_label_get_recolor, "b", "(lv_obj)" }, + { "get_text", (void*) &lv_label_get_text, "s", "(lv_obj)" }, + { "get_text_sel_end", (void*) &lv_label_get_text_sel_end, "i", "(lv_obj)" }, + { "get_text_sel_start", (void*) &lv_label_get_text_sel_start, "i", "(lv_obj)" }, + { "ins_text", (void*) &lv_label_ins_text, "", "(lv_obj)is" }, + { "is_char_under_pos", (void*) &lv_label_is_char_under_pos, "b", "(lv_obj)(lv_point)" }, + { "refr_text", (void*) &lv_label_refr_text, "", "(lv_obj)" }, + { "set_align", (void*) &lv_label_set_align, "", "(lv_obj)i" }, + { "set_anim_speed", (void*) &lv_label_set_anim_speed, "", "(lv_obj)i" }, + { "set_long_mode", (void*) &lv_label_set_long_mode, "", "(lv_obj)i" }, + { "set_recolor", (void*) &lv_label_set_recolor, "", "(lv_obj)b" }, + { "set_text", (void*) &lv_label_set_text, "", "(lv_obj)s" }, + { "set_text_fmt", (void*) &lv_label_set_text_fmt, "", "(lv_obj)s" }, + { "set_text_sel_end", (void*) &lv_label_set_text_sel_end, "", "(lv_obj)i" }, + { "set_text_sel_start", (void*) &lv_label_set_text_sel_start, "", "(lv_obj)i" }, + { "set_text_static", (void*) &lv_label_set_text_static, "", "(lv_obj)s" }, +}; + +/* `lv_led` methods */ +const lvbe_call_c_t lv_led_func[] = { + { "create", (void*) &lv_led_create, "+lv_led", "(lv_obj)(lv_obj)" }, + { "get_bright", (void*) &lv_led_get_bright, "i", "(lv_obj)" }, + { "off", (void*) &lv_led_off, "", "(lv_obj)" }, + { "on", (void*) &lv_led_on, "", "(lv_obj)" }, + { "set_bright", (void*) &lv_led_set_bright, "", "(lv_obj)i" }, + { "toggle", (void*) &lv_led_toggle, "", "(lv_obj)" }, +}; + +/* `lv_line` methods */ +const lvbe_call_c_t lv_line_func[] = { + { "create", (void*) &lv_line_create, "+lv_line", "(lv_obj)(lv_obj)" }, + { "get_auto_size", (void*) &lv_line_get_auto_size, "b", "(lv_obj)" }, + { "get_y_invert", (void*) &lv_line_get_y_invert, "b", "(lv_obj)" }, + { "set_auto_size", (void*) &lv_line_set_auto_size, "", "(lv_obj)b" }, + { "set_points", (void*) &lv_line_set_points, "", "(lv_obj)ii" }, + { "set_y_invert", (void*) &lv_line_set_y_invert, "", "(lv_obj)b" }, +}; + +/* `lv_linemeter` methods */ +const lvbe_call_c_t lv_linemeter_func[] = { + { "create", (void*) &lv_linemeter_create, "+lv_linemeter", "(lv_obj)(lv_obj)" }, + { "draw_scale", (void*) &lv_linemeter_draw_scale, "", "(lv_obj)(lv_area)i" }, + { "get_angle_offset", (void*) &lv_linemeter_get_angle_offset, "i", "(lv_obj)" }, + { "get_line_count", (void*) &lv_linemeter_get_line_count, "i", "(lv_obj)" }, + { "get_max_value", (void*) &lv_linemeter_get_max_value, "i", "(lv_obj)" }, + { "get_min_value", (void*) &lv_linemeter_get_min_value, "i", "(lv_obj)" }, + { "get_mirror", (void*) &lv_linemeter_get_mirror, "b", "(lv_obj)" }, + { "get_scale_angle", (void*) &lv_linemeter_get_scale_angle, "i", "(lv_obj)" }, + { "get_value", (void*) &lv_linemeter_get_value, "i", "(lv_obj)" }, + { "set_angle_offset", (void*) &lv_linemeter_set_angle_offset, "", "(lv_obj)i" }, + { "set_mirror", (void*) &lv_linemeter_set_mirror, "", "(lv_obj)b" }, + { "set_range", (void*) &lv_linemeter_set_range, "", "(lv_obj)ii" }, + { "set_scale", (void*) &lv_linemeter_set_scale, "", "(lv_obj)ii" }, + { "set_value", (void*) &lv_linemeter_set_value, "", "(lv_obj)i" }, +}; + +/* `lv_list` methods */ +const lvbe_call_c_t lv_list_func[] = { + { "add_btn", (void*) &lv_list_add_btn, "lv_obj", "(lv_obj)is" }, + { "clean", (void*) &lv_list_clean, "", "(lv_obj)" }, + { "create", (void*) &lv_list_create, "+lv_list", "(lv_obj)(lv_obj)" }, + { "down", (void*) &lv_list_down, "", "(lv_obj)" }, + { "focus", (void*) &lv_list_focus, "", "(lv_obj)(lv_anim_enable)" }, + { "focus_btn", (void*) &lv_list_focus_btn, "", "(lv_obj)(lv_obj)" }, + { "get_anim_time", (void*) &lv_list_get_anim_time, "i", "(lv_obj)" }, + { "get_btn_img", (void*) &lv_list_get_btn_img, "lv_obj", "(lv_obj)" }, + { "get_btn_index", (void*) &lv_list_get_btn_index, "i", "(lv_obj)(lv_obj)" }, + { "get_btn_label", (void*) &lv_list_get_btn_label, "lv_obj", "(lv_obj)" }, + { "get_btn_selected", (void*) &lv_list_get_btn_selected, "lv_obj", "(lv_obj)" }, + { "get_btn_text", (void*) &lv_list_get_btn_text, "s", "(lv_obj)" }, + { "get_edge_flash", (void*) &lv_list_get_edge_flash, "b", "(lv_obj)" }, + { "get_layout", (void*) &lv_list_get_layout, "i", "(lv_obj)" }, + { "get_next_btn", (void*) &lv_list_get_next_btn, "lv_obj", "(lv_obj)(lv_obj)" }, + { "get_prev_btn", (void*) &lv_list_get_prev_btn, "lv_obj", "(lv_obj)(lv_obj)" }, + { "get_scroll_propagation", (void*) &lv_list_get_scroll_propagation, "b", "(lv_obj)" }, + { "get_scrollbar_mode", (void*) &lv_list_get_scrollbar_mode, "i", "(lv_obj)" }, + { "get_size", (void*) &lv_list_get_size, "i", "(lv_obj)" }, + { "remove", (void*) &lv_list_remove, "b", "(lv_obj)i" }, + { "set_anim_time", (void*) &lv_list_set_anim_time, "", "(lv_obj)i" }, + { "set_edge_flash", (void*) &lv_list_set_edge_flash, "", "(lv_obj)b" }, + { "set_layout", (void*) &lv_list_set_layout, "", "(lv_obj)i" }, + { "set_scroll_propagation", (void*) &lv_list_set_scroll_propagation, "", "(lv_obj)b" }, + { "set_scrollbar_mode", (void*) &lv_list_set_scrollbar_mode, "", "(lv_obj)i" }, + { "up", (void*) &lv_list_up, "", "(lv_obj)" }, +}; + +/* `lv_msgbox` methods */ +const lvbe_call_c_t lv_msgbox_func[] = { + { "add_btns", (void*) &lv_msgbox_add_btns, "", "(lv_obj)s" }, + { "create", (void*) &lv_msgbox_create, "+lv_msgbox", "(lv_obj)(lv_obj)" }, + { "get_active_btn", (void*) &lv_msgbox_get_active_btn, "i", "(lv_obj)" }, + { "get_active_btn_text", (void*) &lv_msgbox_get_active_btn_text, "s", "(lv_obj)" }, + { "get_anim_time", (void*) &lv_msgbox_get_anim_time, "i", "(lv_obj)" }, + { "get_btnmatrix", (void*) &lv_msgbox_get_btnmatrix, "lv_obj", "(lv_obj)" }, + { "get_recolor", (void*) &lv_msgbox_get_recolor, "b", "(lv_obj)" }, + { "get_text", (void*) &lv_msgbox_get_text, "s", "(lv_obj)" }, + { "set_anim_time", (void*) &lv_msgbox_set_anim_time, "", "(lv_obj)i" }, + { "set_recolor", (void*) &lv_msgbox_set_recolor, "", "(lv_obj)b" }, + { "set_text", (void*) &lv_msgbox_set_text, "", "(lv_obj)s" }, + { "set_text_fmt", (void*) &lv_msgbox_set_text_fmt, "", "(lv_obj)s" }, + { "start_auto_close", (void*) &lv_msgbox_start_auto_close, "", "(lv_obj)i" }, + { "stop_auto_close", (void*) &lv_msgbox_stop_auto_close, "", "(lv_obj)" }, +}; + +/* `lv_objmask` methods */ +const lvbe_call_c_t lv_objmask_func[] = { + { "create", (void*) &lv_objmask_create, "+lv_objmask", "(lv_obj)(lv_obj)" }, + { "remove_mask", (void*) &lv_objmask_remove_mask, "", "(lv_obj)(lv_objmask_mask)" }, + { "update_mask", (void*) &lv_objmask_update_mask, "", "(lv_obj)(lv_objmask_mask)i" }, +}; + +/* `lv_page` methods */ +const lvbe_call_c_t lv_page_func[] = { + { "clean", (void*) &lv_page_clean, "", "(lv_obj)" }, + { "create", (void*) &lv_page_create, "+lv_page", "(lv_obj)(lv_obj)" }, + { "focus", (void*) &lv_page_focus, "", "(lv_obj)(lv_obj)(lv_anim_enable)" }, + { "get_anim_time", (void*) &lv_page_get_anim_time, "i", "(lv_obj)" }, + { "get_edge_flash", (void*) &lv_page_get_edge_flash, "b", "(lv_obj)" }, + { "get_height_fit", (void*) &lv_page_get_height_fit, "i", "(lv_obj)" }, + { "get_height_grid", (void*) &lv_page_get_height_grid, "i", "(lv_obj)ii" }, + { "get_scrl_fit_bottom", (void*) &lv_page_get_scrl_fit_bottom, "i", "(lv_obj)" }, + { "get_scrl_fit_left", (void*) &lv_page_get_scrl_fit_left, "i", "(lv_obj)" }, + { "get_scrl_fit_right", (void*) &lv_page_get_scrl_fit_right, "i", "(lv_obj)" }, + { "get_scrl_fit_top", (void*) &lv_page_get_scrl_fit_top, "i", "(lv_obj)" }, + { "get_scrl_height", (void*) &lv_page_get_scrl_height, "i", "(lv_obj)" }, + { "get_scrl_layout", (void*) &lv_page_get_scrl_layout, "i", "(lv_obj)" }, + { "get_scrl_width", (void*) &lv_page_get_scrl_width, "i", "(lv_obj)" }, + { "get_scroll_propagation", (void*) &lv_page_get_scroll_propagation, "b", "(lv_obj)" }, + { "get_scrollable", (void*) &lv_page_get_scrollable, "lv_obj", "(lv_obj)" }, + { "get_scrollbar_mode", (void*) &lv_page_get_scrollbar_mode, "i", "(lv_obj)" }, + { "get_width_fit", (void*) &lv_page_get_width_fit, "i", "(lv_obj)" }, + { "get_width_grid", (void*) &lv_page_get_width_grid, "i", "(lv_obj)ii" }, + { "glue_obj", (void*) &lv_page_glue_obj, "", "(lv_obj)b" }, + { "on_edge", (void*) &lv_page_on_edge, "b", "(lv_obj)(lv_page_edge)" }, + { "scroll_hor", (void*) &lv_page_scroll_hor, "", "(lv_obj)i" }, + { "scroll_ver", (void*) &lv_page_scroll_ver, "", "(lv_obj)i" }, + { "set_anim_time", (void*) &lv_page_set_anim_time, "", "(lv_obj)i" }, + { "set_edge_flash", (void*) &lv_page_set_edge_flash, "", "(lv_obj)b" }, + { "set_scrl_height", (void*) &lv_page_set_scrl_height, "", "(lv_obj)i" }, + { "set_scrl_layout", (void*) &lv_page_set_scrl_layout, "", "(lv_obj)i" }, + { "set_scrl_width", (void*) &lv_page_set_scrl_width, "", "(lv_obj)i" }, + { "set_scroll_propagation", (void*) &lv_page_set_scroll_propagation, "", "(lv_obj)b" }, + { "set_scrollable_fit", (void*) &lv_page_set_scrollable_fit, "", "(lv_obj)i" }, + { "set_scrollable_fit2", (void*) &lv_page_set_scrollable_fit2, "", "(lv_obj)ii" }, + { "set_scrollbar_mode", (void*) &lv_page_set_scrollbar_mode, "", "(lv_obj)i" }, + { "start_edge_flash", (void*) &lv_page_start_edge_flash, "", "(lv_obj)(lv_page_edge)" }, +}; + +/* `lv_roller` methods */ +const lvbe_call_c_t lv_roller_func[] = { + { "create", (void*) &lv_roller_create, "+lv_roller", "(lv_obj)(lv_obj)" }, + { "get_align", (void*) &lv_roller_get_align, "i", "(lv_obj)" }, + { "get_anim_time", (void*) &lv_roller_get_anim_time, "i", "(lv_obj)" }, + { "get_auto_fit", (void*) &lv_roller_get_auto_fit, "b", "(lv_obj)" }, + { "get_option_cnt", (void*) &lv_roller_get_option_cnt, "i", "(lv_obj)" }, + { "get_options", (void*) &lv_roller_get_options, "s", "(lv_obj)" }, + { "get_selected", (void*) &lv_roller_get_selected, "i", "(lv_obj)" }, + { "get_selected_str", (void*) &lv_roller_get_selected_str, "", "(lv_obj)si" }, + { "set_align", (void*) &lv_roller_set_align, "", "(lv_obj)i" }, + { "set_anim_time", (void*) &lv_roller_set_anim_time, "", "(lv_obj)i" }, + { "set_auto_fit", (void*) &lv_roller_set_auto_fit, "", "(lv_obj)b" }, + { "set_options", (void*) &lv_roller_set_options, "", "(lv_obj)s(lv_roller_mode)" }, + { "set_selected", (void*) &lv_roller_set_selected, "", "(lv_obj)i(lv_anim_enable)" }, + { "set_visible_row_count", (void*) &lv_roller_set_visible_row_count, "", "(lv_obj)i" }, +}; + +/* `lv_slider` methods */ +const lvbe_call_c_t lv_slider_func[] = { + { "create", (void*) &lv_slider_create, "+lv_slider", "(lv_obj)(lv_obj)" }, + { "get_anim_time", (void*) &lv_slider_get_anim_time, "i", "(lv_obj)" }, + { "get_left_value", (void*) &lv_slider_get_left_value, "i", "(lv_obj)" }, + { "get_max_value", (void*) &lv_slider_get_max_value, "i", "(lv_obj)" }, + { "get_min_value", (void*) &lv_slider_get_min_value, "i", "(lv_obj)" }, + { "get_type", (void*) &lv_slider_get_type, "i", "(lv_obj)" }, + { "get_value", (void*) &lv_slider_get_value, "i", "(lv_obj)" }, + { "is_dragged", (void*) &lv_slider_is_dragged, "b", "(lv_obj)" }, + { "set_anim_time", (void*) &lv_slider_set_anim_time, "", "(lv_obj)i" }, + { "set_left_value", (void*) &lv_slider_set_left_value, "", "(lv_obj)i(lv_anim_enable)" }, + { "set_range", (void*) &lv_slider_set_range, "", "(lv_obj)ii" }, + { "set_type", (void*) &lv_slider_set_type, "", "(lv_obj)i" }, + { "set_value", (void*) &lv_slider_set_value, "", "(lv_obj)i(lv_anim_enable)" }, +}; + +/* `lv_spinbox` methods */ +const lvbe_call_c_t lv_spinbox_func[] = { + { "create", (void*) &lv_spinbox_create, "+lv_spinbox", "(lv_obj)(lv_obj)" }, + { "decrement", (void*) &lv_spinbox_decrement, "", "(lv_obj)" }, + { "get_rollover", (void*) &lv_spinbox_get_rollover, "b", "(lv_obj)" }, + { "get_step", (void*) &lv_spinbox_get_step, "i", "(lv_obj)" }, + { "get_value", (void*) &lv_spinbox_get_value, "i", "(lv_obj)" }, + { "increment", (void*) &lv_spinbox_increment, "", "(lv_obj)" }, + { "set_digit_format", (void*) &lv_spinbox_set_digit_format, "", "(lv_obj)ii" }, + { "set_padding_left", (void*) &lv_spinbox_set_padding_left, "", "(lv_obj)i" }, + { "set_range", (void*) &lv_spinbox_set_range, "", "(lv_obj)ii" }, + { "set_rollover", (void*) &lv_spinbox_set_rollover, "", "(lv_obj)b" }, + { "set_step", (void*) &lv_spinbox_set_step, "", "(lv_obj)i" }, + { "set_value", (void*) &lv_spinbox_set_value, "", "(lv_obj)i" }, + { "step_next", (void*) &lv_spinbox_step_next, "", "(lv_obj)" }, + { "step_prev", (void*) &lv_spinbox_step_prev, "", "(lv_obj)" }, +}; + +/* `lv_spinner` methods */ +const lvbe_call_c_t lv_spinner_func[] = { + { "anim_cb", (void*) &lv_spinner_anim_cb, "", "ii" }, + { "create", (void*) &lv_spinner_create, "+lv_spinner", "(lv_obj)(lv_obj)" }, + { "get_arc_length", (void*) &lv_spinner_get_arc_length, "i", "(lv_obj)" }, + { "get_dir", (void*) &lv_spinner_get_dir, "i", "(lv_obj)" }, + { "get_spin_time", (void*) &lv_spinner_get_spin_time, "i", "(lv_obj)" }, + { "get_type", (void*) &lv_spinner_get_type, "i", "(lv_obj)" }, + { "set_arc_length", (void*) &lv_spinner_set_arc_length, "", "(lv_obj)i" }, + { "set_dir", (void*) &lv_spinner_set_dir, "", "(lv_obj)i" }, + { "set_spin_time", (void*) &lv_spinner_set_spin_time, "", "(lv_obj)i" }, + { "set_type", (void*) &lv_spinner_set_type, "", "(lv_obj)i" }, +}; + +/* `lv_switch` methods */ +const lvbe_call_c_t lv_switch_func[] = { + { "create", (void*) &lv_switch_create, "+lv_switch", "(lv_obj)(lv_obj)" }, + { "get_anim_time", (void*) &lv_switch_get_anim_time, "i", "(lv_obj)" }, + { "get_state", (void*) &lv_switch_get_state, "b", "(lv_obj)" }, + { "off", (void*) &lv_switch_off, "", "(lv_obj)(lv_anim_enable)" }, + { "on", (void*) &lv_switch_on, "", "(lv_obj)(lv_anim_enable)" }, + { "set_anim_time", (void*) &lv_switch_set_anim_time, "", "(lv_obj)i" }, + { "toggle", (void*) &lv_switch_toggle, "b", "(lv_obj)(lv_anim_enable)" }, +}; + +/* `lv_table` methods */ +const lvbe_call_c_t lv_table_func[] = { + { "create", (void*) &lv_table_create, "+lv_table", "(lv_obj)(lv_obj)" }, + { "get_cell_align", (void*) &lv_table_get_cell_align, "i", "(lv_obj)ii" }, + { "get_cell_crop", (void*) &lv_table_get_cell_crop, "i", "(lv_obj)ii" }, + { "get_cell_merge_right", (void*) &lv_table_get_cell_merge_right, "b", "(lv_obj)ii" }, + { "get_cell_type", (void*) &lv_table_get_cell_type, "i", "(lv_obj)ii" }, + { "get_cell_value", (void*) &lv_table_get_cell_value, "s", "(lv_obj)ii" }, + { "get_col_cnt", (void*) &lv_table_get_col_cnt, "i", "(lv_obj)" }, + { "get_col_width", (void*) &lv_table_get_col_width, "i", "(lv_obj)i" }, + { "get_pressed_cell", (void*) &lv_table_get_pressed_cell, "i", "(lv_obj)(uint16)(uint16)" }, + { "get_row_cnt", (void*) &lv_table_get_row_cnt, "i", "(lv_obj)" }, + { "set_cell_align", (void*) &lv_table_set_cell_align, "", "(lv_obj)iii" }, + { "set_cell_crop", (void*) &lv_table_set_cell_crop, "", "(lv_obj)iib" }, + { "set_cell_merge_right", (void*) &lv_table_set_cell_merge_right, "", "(lv_obj)iib" }, + { "set_cell_type", (void*) &lv_table_set_cell_type, "", "(lv_obj)iii" }, + { "set_cell_value", (void*) &lv_table_set_cell_value, "", "(lv_obj)iis" }, + { "set_cell_value_fmt", (void*) &lv_table_set_cell_value_fmt, "", "(lv_obj)iis" }, + { "set_col_cnt", (void*) &lv_table_set_col_cnt, "", "(lv_obj)i" }, + { "set_col_width", (void*) &lv_table_set_col_width, "", "(lv_obj)ii" }, + { "set_row_cnt", (void*) &lv_table_set_row_cnt, "", "(lv_obj)i" }, +}; + +/* `lv_tabview` methods */ +const lvbe_call_c_t lv_tabview_func[] = { + { "add_tab", (void*) &lv_tabview_add_tab, "lv_obj", "(lv_obj)s" }, + { "clean_tab", (void*) &lv_tabview_clean_tab, "", "(lv_obj)" }, + { "create", (void*) &lv_tabview_create, "+lv_tabview", "(lv_obj)(lv_obj)" }, + { "get_anim_time", (void*) &lv_tabview_get_anim_time, "i", "(lv_obj)" }, + { "get_btns_pos", (void*) &lv_tabview_get_btns_pos, "i", "(lv_obj)" }, + { "get_tab", (void*) &lv_tabview_get_tab, "lv_obj", "(lv_obj)i" }, + { "get_tab_act", (void*) &lv_tabview_get_tab_act, "i", "(lv_obj)" }, + { "get_tab_count", (void*) &lv_tabview_get_tab_count, "i", "(lv_obj)" }, + { "set_anim_time", (void*) &lv_tabview_set_anim_time, "", "(lv_obj)i" }, + { "set_btns_pos", (void*) &lv_tabview_set_btns_pos, "", "(lv_obj)i" }, + { "set_tab_act", (void*) &lv_tabview_set_tab_act, "", "(lv_obj)i(lv_anim_enable)" }, + { "set_tab_name", (void*) &lv_tabview_set_tab_name, "", "(lv_obj)is" }, +}; + +/* `lv_textarea` methods */ +const lvbe_call_c_t lv_textarea_func[] = { + { "add_char", (void*) &lv_textarea_add_char, "", "(lv_obj)i" }, + { "add_text", (void*) &lv_textarea_add_text, "", "(lv_obj)s" }, + { "clear_selection", (void*) &lv_textarea_clear_selection, "", "(lv_obj)" }, + { "create", (void*) &lv_textarea_create, "+lv_textarea", "(lv_obj)(lv_obj)" }, + { "cursor_down", (void*) &lv_textarea_cursor_down, "", "(lv_obj)" }, + { "cursor_left", (void*) &lv_textarea_cursor_left, "", "(lv_obj)" }, + { "cursor_right", (void*) &lv_textarea_cursor_right, "", "(lv_obj)" }, + { "cursor_up", (void*) &lv_textarea_cursor_up, "", "(lv_obj)" }, + { "del_char", (void*) &lv_textarea_del_char, "", "(lv_obj)" }, + { "del_char_forward", (void*) &lv_textarea_del_char_forward, "", "(lv_obj)" }, + { "get_accepted_chars", (void*) &lv_textarea_get_accepted_chars, "s", "(lv_obj)" }, + { "get_cursor_blink_time", (void*) &lv_textarea_get_cursor_blink_time, "i", "(lv_obj)" }, + { "get_cursor_click_pos", (void*) &lv_textarea_get_cursor_click_pos, "b", "(lv_obj)" }, + { "get_cursor_hidden", (void*) &lv_textarea_get_cursor_hidden, "b", "(lv_obj)" }, + { "get_cursor_pos", (void*) &lv_textarea_get_cursor_pos, "i", "(lv_obj)" }, + { "get_edge_flash", (void*) &lv_textarea_get_edge_flash, "b", "(lv_obj)" }, + { "get_label", (void*) &lv_textarea_get_label, "lv_obj", "(lv_obj)" }, + { "get_max_length", (void*) &lv_textarea_get_max_length, "i", "(lv_obj)" }, + { "get_one_line", (void*) &lv_textarea_get_one_line, "b", "(lv_obj)" }, + { "get_placeholder_text", (void*) &lv_textarea_get_placeholder_text, "s", "(lv_obj)" }, + { "get_pwd_mode", (void*) &lv_textarea_get_pwd_mode, "b", "(lv_obj)" }, + { "get_pwd_show_time", (void*) &lv_textarea_get_pwd_show_time, "i", "(lv_obj)" }, + { "get_scroll_propagation", (void*) &lv_textarea_get_scroll_propagation, "b", "(lv_obj)" }, + { "get_scrollbar_mode", (void*) &lv_textarea_get_scrollbar_mode, "i", "(lv_obj)" }, + { "get_text", (void*) &lv_textarea_get_text, "s", "(lv_obj)" }, + { "get_text_sel_en", (void*) &lv_textarea_get_text_sel_en, "b", "(lv_obj)" }, + { "set_accepted_chars", (void*) &lv_textarea_set_accepted_chars, "", "(lv_obj)s" }, + { "set_cursor_blink_time", (void*) &lv_textarea_set_cursor_blink_time, "", "(lv_obj)i" }, + { "set_cursor_click_pos", (void*) &lv_textarea_set_cursor_click_pos, "", "(lv_obj)b" }, + { "set_cursor_hidden", (void*) &lv_textarea_set_cursor_hidden, "", "(lv_obj)b" }, + { "set_cursor_pos", (void*) &lv_textarea_set_cursor_pos, "", "(lv_obj)i" }, + { "set_edge_flash", (void*) &lv_textarea_set_edge_flash, "", "(lv_obj)b" }, + { "set_insert_replace", (void*) &lv_textarea_set_insert_replace, "", "(lv_obj)s" }, + { "set_max_length", (void*) &lv_textarea_set_max_length, "", "(lv_obj)i" }, + { "set_one_line", (void*) &lv_textarea_set_one_line, "", "(lv_obj)b" }, + { "set_placeholder_text", (void*) &lv_textarea_set_placeholder_text, "", "(lv_obj)s" }, + { "set_pwd_mode", (void*) &lv_textarea_set_pwd_mode, "", "(lv_obj)b" }, + { "set_pwd_show_time", (void*) &lv_textarea_set_pwd_show_time, "", "(lv_obj)i" }, + { "set_scroll_propagation", (void*) &lv_textarea_set_scroll_propagation, "", "(lv_obj)b" }, + { "set_scrollbar_mode", (void*) &lv_textarea_set_scrollbar_mode, "", "(lv_obj)i" }, + { "set_text", (void*) &lv_textarea_set_text, "", "(lv_obj)s" }, + { "set_text_align", (void*) &lv_textarea_set_text_align, "", "(lv_obj)i" }, + { "set_text_sel", (void*) &lv_textarea_set_text_sel, "", "(lv_obj)b" }, + { "text_is_selected", (void*) &lv_textarea_text_is_selected, "b", "(lv_obj)" }, +}; + +/* `lv_tileview` methods */ +const lvbe_call_c_t lv_tileview_func[] = { + { "add_element", (void*) &lv_tileview_add_element, "", "(lv_obj)(lv_obj)" }, + { "create", (void*) &lv_tileview_create, "+lv_tileview", "(lv_obj)(lv_obj)" }, + { "get_anim_time", (void*) &lv_tileview_get_anim_time, "i", "(lv_obj)" }, + { "get_edge_flash", (void*) &lv_tileview_get_edge_flash, "b", "(lv_obj)" }, + { "get_tile_act", (void*) &lv_tileview_get_tile_act, "", "(lv_obj)(lv_coord)(lv_coord)" }, + { "set_anim_time", (void*) &lv_tileview_set_anim_time, "", "(lv_obj)i" }, + { "set_edge_flash", (void*) &lv_tileview_set_edge_flash, "", "(lv_obj)b" }, + { "set_tile_act", (void*) &lv_tileview_set_tile_act, "", "(lv_obj)ii(lv_anim_enable)" }, + { "set_valid_positions", (void*) &lv_tileview_set_valid_positions, "", "(lv_obj)ii" }, +}; + +/* `lv_win` methods */ +const lvbe_call_c_t lv_win_func[] = { + { "add_btn_left", (void*) &lv_win_add_btn_left, "lv_obj", "(lv_obj)i" }, + { "add_btn_right", (void*) &lv_win_add_btn_right, "lv_obj", "(lv_obj)i" }, + { "clean", (void*) &lv_win_clean, "", "(lv_obj)" }, + { "close_event_cb", (void*) &lv_win_close_event_cb, "", "(lv_obj)(lv_event)" }, + { "create", (void*) &lv_win_create, "+lv_win", "(lv_obj)(lv_obj)" }, + { "focus", (void*) &lv_win_focus, "", "(lv_obj)(lv_obj)(lv_anim_enable)" }, + { "get_anim_time", (void*) &lv_win_get_anim_time, "i", "(lv_obj)" }, + { "get_btn_width", (void*) &lv_win_get_btn_width, "i", "(lv_obj)" }, + { "get_content", (void*) &lv_win_get_content, "lv_obj", "(lv_obj)" }, + { "get_drag", (void*) &lv_win_get_drag, "b", "(lv_obj)" }, + { "get_from_btn", (void*) &lv_win_get_from_btn, "lv_obj", "(lv_obj)" }, + { "get_header_height", (void*) &lv_win_get_header_height, "i", "(lv_obj)" }, + { "get_layout", (void*) &lv_win_get_layout, "i", "(lv_obj)" }, + { "get_sb_mode", (void*) &lv_win_get_sb_mode, "i", "(lv_obj)" }, + { "get_title", (void*) &lv_win_get_title, "s", "(lv_obj)" }, + { "get_width", (void*) &lv_win_get_width, "i", "(lv_obj)" }, + { "scroll_hor", (void*) &lv_win_scroll_hor, "", "(lv_obj)i" }, + { "scroll_ver", (void*) &lv_win_scroll_ver, "", "(lv_obj)i" }, + { "set_anim_time", (void*) &lv_win_set_anim_time, "", "(lv_obj)i" }, + { "set_btn_width", (void*) &lv_win_set_btn_width, "", "(lv_obj)i" }, + { "set_content_size", (void*) &lv_win_set_content_size, "", "(lv_obj)ii" }, + { "set_drag", (void*) &lv_win_set_drag, "", "(lv_obj)b" }, + { "set_header_height", (void*) &lv_win_set_header_height, "", "(lv_obj)i" }, + { "set_layout", (void*) &lv_win_set_layout, "", "(lv_obj)i" }, + { "set_scrollbar_mode", (void*) &lv_win_set_scrollbar_mode, "", "(lv_obj)i" }, + { "set_title", (void*) &lv_win_set_title, "", "(lv_obj)s" }, + { "title_get_alignment", (void*) &lv_win_title_get_alignment, "i", "(lv_obj)" }, + { "title_set_alignment", (void*) &lv_win_title_set_alignment, "", "(lv_obj)i" }, +}; + + +// map of clases +const lvbe_call_c_classes_t lv_classes[] = { + { "lv_arc", lv_arc_func, sizeof(lv_arc_func) / sizeof(lv_arc_func[0]) }, + { "lv_bar", lv_bar_func, sizeof(lv_bar_func) / sizeof(lv_bar_func[0]) }, + { "lv_btn", lv_btn_func, sizeof(lv_btn_func) / sizeof(lv_btn_func[0]) }, + { "lv_btnmatrix", lv_btnmatrix_func, sizeof(lv_btnmatrix_func) / sizeof(lv_btnmatrix_func[0]) }, + { "lv_calendar", lv_calendar_func, sizeof(lv_calendar_func) / sizeof(lv_calendar_func[0]) }, + { "lv_canvas", lv_canvas_func, sizeof(lv_canvas_func) / sizeof(lv_canvas_func[0]) }, + { "lv_chart", lv_chart_func, sizeof(lv_chart_func) / sizeof(lv_chart_func[0]) }, + { "lv_checkbox", lv_checkbox_func, sizeof(lv_checkbox_func) / sizeof(lv_checkbox_func[0]) }, + { "lv_cont", lv_cont_func, sizeof(lv_cont_func) / sizeof(lv_cont_func[0]) }, + { "lv_cpicker", lv_cpicker_func, sizeof(lv_cpicker_func) / sizeof(lv_cpicker_func[0]) }, + { "lv_dropdown", lv_dropdown_func, sizeof(lv_dropdown_func) / sizeof(lv_dropdown_func[0]) }, + { "lv_gauge", lv_gauge_func, sizeof(lv_gauge_func) / sizeof(lv_gauge_func[0]) }, + { "lv_group", lv_group_func, sizeof(lv_group_func) / sizeof(lv_group_func[0]) }, + { "lv_img", lv_img_func, sizeof(lv_img_func) / sizeof(lv_img_func[0]) }, + { "lv_imgbtn", lv_imgbtn_func, sizeof(lv_imgbtn_func) / sizeof(lv_imgbtn_func[0]) }, + { "lv_indev", lv_indev_func, sizeof(lv_indev_func) / sizeof(lv_indev_func[0]) }, + { "lv_keyboard", lv_keyboard_func, sizeof(lv_keyboard_func) / sizeof(lv_keyboard_func[0]) }, + { "lv_label", lv_label_func, sizeof(lv_label_func) / sizeof(lv_label_func[0]) }, + { "lv_led", lv_led_func, sizeof(lv_led_func) / sizeof(lv_led_func[0]) }, + { "lv_line", lv_line_func, sizeof(lv_line_func) / sizeof(lv_line_func[0]) }, + { "lv_linemeter", lv_linemeter_func, sizeof(lv_linemeter_func) / sizeof(lv_linemeter_func[0]) }, + { "lv_list", lv_list_func, sizeof(lv_list_func) / sizeof(lv_list_func[0]) }, + { "lv_msgbox", lv_msgbox_func, sizeof(lv_msgbox_func) / sizeof(lv_msgbox_func[0]) }, + { "lv_obj", lv_obj_func, sizeof(lv_obj_func) / sizeof(lv_obj_func[0]) }, + { "lv_objmask", lv_objmask_func, sizeof(lv_objmask_func) / sizeof(lv_objmask_func[0]) }, + { "lv_page", lv_page_func, sizeof(lv_page_func) / sizeof(lv_page_func[0]) }, + { "lv_roller", lv_roller_func, sizeof(lv_roller_func) / sizeof(lv_roller_func[0]) }, + { "lv_slider", lv_slider_func, sizeof(lv_slider_func) / sizeof(lv_slider_func[0]) }, + { "lv_spinbox", lv_spinbox_func, sizeof(lv_spinbox_func) / sizeof(lv_spinbox_func[0]) }, + { "lv_spinner", lv_spinner_func, sizeof(lv_spinner_func) / sizeof(lv_spinner_func[0]) }, + { "lv_style", lv_style_func, sizeof(lv_style_func) / sizeof(lv_style_func[0]) }, + { "lv_switch", lv_switch_func, sizeof(lv_switch_func) / sizeof(lv_switch_func[0]) }, + { "lv_table", lv_table_func, sizeof(lv_table_func) / sizeof(lv_table_func[0]) }, + { "lv_tabview", lv_tabview_func, sizeof(lv_tabview_func) / sizeof(lv_tabview_func[0]) }, + { "lv_textarea", lv_textarea_func, sizeof(lv_textarea_func) / sizeof(lv_textarea_func[0]) }, + { "lv_tileview", lv_tileview_func, sizeof(lv_tileview_func) / sizeof(lv_tileview_func[0]) }, + { "lv_win", lv_win_func, sizeof(lv_win_func) / sizeof(lv_win_func[0]) }, +}; +const size_t lv_classes_size = sizeof(lv_classes) / sizeof(lv_classes[0]); + /* `lv_img` methods */ - int lvbe_img_set_tasmota_logo(bvm *vm) { return be_call_c_func(vm, (void*) &lv_img_set_tasmota_logo, "", "(lv_obj)"); } - int lvbe_img_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_img_create, "lv_img", "(lv_obj)(lv_obj)"); } - int lvbe_img_set_src(bvm *vm) { return be_call_c_func(vm, (void*) &lv_img_set_src, "", "(lv_obj)i"); } - int lvbe_img_set_auto_size(bvm *vm) { return be_call_c_func(vm, (void*) &lv_img_set_auto_size, "", "(lv_obj)b"); } - int lvbe_img_set_offset_x(bvm *vm) { return be_call_c_func(vm, (void*) &lv_img_set_offset_x, "", "(lv_obj)i"); } - int lvbe_img_set_offset_y(bvm *vm) { return be_call_c_func(vm, (void*) &lv_img_set_offset_y, "", "(lv_obj)i"); } - int lvbe_img_set_pivot(bvm *vm) { return be_call_c_func(vm, (void*) &lv_img_set_pivot, "", "(lv_obj)ii"); } - int lvbe_img_set_angle(bvm *vm) { return be_call_c_func(vm, (void*) &lv_img_set_angle, "", "(lv_obj)i"); } - int lvbe_img_set_zoom(bvm *vm) { return be_call_c_func(vm, (void*) &lv_img_set_zoom, "", "(lv_obj)i"); } - int lvbe_img_set_antialias(bvm *vm) { return be_call_c_func(vm, (void*) &lv_img_set_antialias, "", "(lv_obj)b"); } - int lvbe_img_get_src(bvm *vm) { return be_call_c_func(vm, (void*) &lv_img_get_src, "i", "(lv_obj)"); } - int lvbe_img_get_file_name(bvm *vm) { return be_call_c_func(vm, (void*) &lv_img_get_file_name, "s", "(lv_obj)"); } - int lvbe_img_get_auto_size(bvm *vm) { return be_call_c_func(vm, (void*) &lv_img_get_auto_size, "b", "(lv_obj)"); } - int lvbe_img_get_offset_x(bvm *vm) { return be_call_c_func(vm, (void*) &lv_img_get_offset_x, "i", "(lv_obj)"); } - int lvbe_img_get_offset_y(bvm *vm) { return be_call_c_func(vm, (void*) &lv_img_get_offset_y, "i", "(lv_obj)"); } - int lvbe_img_get_angle(bvm *vm) { return be_call_c_func(vm, (void*) &lv_img_get_angle, "i", "(lv_obj)"); } - int lvbe_img_get_pivot(bvm *vm) { return be_call_c_func(vm, (void*) &lv_img_get_pivot, "", "(lv_obj)(lv_point)"); } - int lvbe_img_get_zoom(bvm *vm) { return be_call_c_func(vm, (void*) &lv_img_get_zoom, "i", "(lv_obj)"); } - int lvbe_img_get_antialias(bvm *vm) { return be_call_c_func(vm, (void*) &lv_img_get_antialias, "b", "(lv_obj)"); } + int lvbe_img_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_img_create, "+lv_img", "(lv_obj)(lv_obj)"); } /* `lv_style` methods */ - int lvbe_style_copy(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_copy, "", "(lv_style)(lv_style)"); } - int lvbe_style_list_init(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_list_init, "", "(lv_style_list)"); } - int lvbe_style_list_copy(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_list_copy, "", "(lv_style_list)(lv_style_list)"); } - int lvbe_style_list_get_style(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_list_get_style, "lv_style", "(lv_style_list)i"); } - int lvbe_style_reset(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_reset, "", "(lv_style)"); } - int lvbe_style_remove_prop(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_remove_prop, "b", "(lv_style)(lv_style_property)"); } - int lvbe_style_list_get_local_style(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_list_get_local_style, "lv_style", "(lv_style_list)"); } - int lvbe_style_set_radius(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_radius, "", "(lv_style)ii"); } - int lvbe_style_set_clip_corner(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_clip_corner, "", "(lv_style)ib"); } - int lvbe_style_set_size(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_size, "", "(lv_style)ii"); } - int lvbe_style_set_transform_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_transform_width, "", "(lv_style)ii"); } - int lvbe_style_set_transform_height(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_transform_height, "", "(lv_style)ii"); } - int lvbe_style_set_transform_angle(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_transform_angle, "", "(lv_style)ii"); } - int lvbe_style_set_transform_zoom(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_transform_zoom, "", "(lv_style)ii"); } - int lvbe_style_set_opa_scale(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_opa_scale, "", "(lv_style)ii"); } - int lvbe_style_set_pad_top(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_pad_top, "", "(lv_style)ii"); } - int lvbe_style_set_pad_bottom(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_pad_bottom, "", "(lv_style)ii"); } - int lvbe_style_set_pad_left(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_pad_left, "", "(lv_style)ii"); } - int lvbe_style_set_pad_right(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_pad_right, "", "(lv_style)ii"); } - int lvbe_style_set_pad_inner(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_pad_inner, "", "(lv_style)ii"); } - int lvbe_style_set_margin_top(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_margin_top, "", "(lv_style)ii"); } - int lvbe_style_set_margin_bottom(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_margin_bottom, "", "(lv_style)ii"); } - int lvbe_style_set_margin_left(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_margin_left, "", "(lv_style)ii"); } - int lvbe_style_set_margin_right(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_margin_right, "", "(lv_style)ii"); } - int lvbe_style_set_bg_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_bg_blend_mode, "", "(lv_style)ii"); } - int lvbe_style_set_bg_main_stop(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_bg_main_stop, "", "(lv_style)ii"); } - int lvbe_style_set_bg_grad_stop(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_bg_grad_stop, "", "(lv_style)ii"); } - int lvbe_style_set_bg_grad_dir(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_bg_grad_dir, "", "(lv_style)ii"); } - int lvbe_style_set_bg_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_bg_color, "", "(lv_style)i(lv_color)"); } - int lvbe_style_set_bg_grad_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_bg_grad_color, "", "(lv_style)i(lv_color)"); } - int lvbe_style_set_bg_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_bg_opa, "", "(lv_style)ii"); } - int lvbe_style_set_border_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_border_width, "", "(lv_style)ii"); } - int lvbe_style_set_border_side(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_border_side, "", "(lv_style)ii"); } - int lvbe_style_set_border_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_border_blend_mode, "", "(lv_style)ii"); } - int lvbe_style_set_border_post(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_border_post, "", "(lv_style)ib"); } - int lvbe_style_set_border_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_border_color, "", "(lv_style)i(lv_color)"); } - int lvbe_style_set_border_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_border_opa, "", "(lv_style)ii"); } - int lvbe_style_set_outline_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_outline_width, "", "(lv_style)ii"); } - int lvbe_style_set_outline_pad(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_outline_pad, "", "(lv_style)ii"); } - int lvbe_style_set_outline_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_outline_blend_mode, "", "(lv_style)ii"); } - int lvbe_style_set_outline_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_outline_color, "", "(lv_style)i(lv_color)"); } - int lvbe_style_set_outline_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_outline_opa, "", "(lv_style)ii"); } - int lvbe_style_set_shadow_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_shadow_width, "", "(lv_style)ii"); } - int lvbe_style_set_shadow_ofs_x(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_shadow_ofs_x, "", "(lv_style)ii"); } - int lvbe_style_set_shadow_ofs_y(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_shadow_ofs_y, "", "(lv_style)ii"); } - int lvbe_style_set_shadow_spread(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_shadow_spread, "", "(lv_style)ii"); } - int lvbe_style_set_shadow_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_shadow_blend_mode, "", "(lv_style)ii"); } - int lvbe_style_set_shadow_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_shadow_color, "", "(lv_style)i(lv_color)"); } - int lvbe_style_set_shadow_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_shadow_opa, "", "(lv_style)ii"); } - int lvbe_style_set_pattern_repeat(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_pattern_repeat, "", "(lv_style)ib"); } - int lvbe_style_set_pattern_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_pattern_blend_mode, "", "(lv_style)ii"); } - int lvbe_style_set_pattern_recolor(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_pattern_recolor, "", "(lv_style)i(lv_color)"); } - int lvbe_style_set_pattern_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_pattern_opa, "", "(lv_style)ii"); } - int lvbe_style_set_pattern_recolor_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_pattern_recolor_opa, "", "(lv_style)ii"); } - int lvbe_style_set_pattern_image(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_pattern_image, "", "(lv_style)ii"); } - int lvbe_style_set_value_letter_space(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_value_letter_space, "", "(lv_style)ii"); } - int lvbe_style_set_value_line_space(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_value_line_space, "", "(lv_style)ii"); } - int lvbe_style_set_value_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_value_blend_mode, "", "(lv_style)ii"); } - int lvbe_style_set_value_ofs_x(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_value_ofs_x, "", "(lv_style)ii"); } - int lvbe_style_set_value_ofs_y(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_value_ofs_y, "", "(lv_style)ii"); } - int lvbe_style_set_value_align(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_value_align, "", "(lv_style)ii"); } - int lvbe_style_set_value_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_value_color, "", "(lv_style)i(lv_color)"); } - int lvbe_style_set_value_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_value_opa, "", "(lv_style)ii"); } - int lvbe_style_set_value_font(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_value_font, "", "(lv_style)i(lv_font)"); } - int lvbe_style_set_value_str(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_value_str, "", "(lv_style)is"); } - int lvbe_style_set_text_letter_space(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_text_letter_space, "", "(lv_style)ii"); } - int lvbe_style_set_text_line_space(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_text_line_space, "", "(lv_style)ii"); } - int lvbe_style_set_text_decor(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_text_decor, "", "(lv_style)i(lv_text_decor)"); } - int lvbe_style_set_text_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_text_blend_mode, "", "(lv_style)ii"); } - int lvbe_style_set_text_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_text_color, "", "(lv_style)i(lv_color)"); } - int lvbe_style_set_text_sel_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_text_sel_color, "", "(lv_style)i(lv_color)"); } - int lvbe_style_set_text_sel_bg_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_text_sel_bg_color, "", "(lv_style)i(lv_color)"); } - int lvbe_style_set_text_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_text_opa, "", "(lv_style)ii"); } - int lvbe_style_set_text_font(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_text_font, "", "(lv_style)i(lv_font)"); } - int lvbe_style_set_line_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_line_width, "", "(lv_style)ii"); } - int lvbe_style_set_line_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_line_blend_mode, "", "(lv_style)ii"); } - int lvbe_style_set_line_dash_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_line_dash_width, "", "(lv_style)ii"); } - int lvbe_style_set_line_dash_gap(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_line_dash_gap, "", "(lv_style)ii"); } - int lvbe_style_set_line_rounded(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_line_rounded, "", "(lv_style)ib"); } - int lvbe_style_set_line_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_line_color, "", "(lv_style)i(lv_color)"); } - int lvbe_style_set_line_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_line_opa, "", "(lv_style)ii"); } - int lvbe_style_set_image_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_image_blend_mode, "", "(lv_style)ii"); } - int lvbe_style_set_image_recolor(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_image_recolor, "", "(lv_style)i(lv_color)"); } - int lvbe_style_set_image_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_image_opa, "", "(lv_style)ii"); } - int lvbe_style_set_image_recolor_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_image_recolor_opa, "", "(lv_style)ii"); } - int lvbe_style_set_transition_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_transition_time, "", "(lv_style)ii"); } - int lvbe_style_set_transition_delay(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_transition_delay, "", "(lv_style)ii"); } - int lvbe_style_set_transition_prop_1(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_transition_prop_1, "", "(lv_style)ii"); } - int lvbe_style_set_transition_prop_2(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_transition_prop_2, "", "(lv_style)ii"); } - int lvbe_style_set_transition_prop_3(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_transition_prop_3, "", "(lv_style)ii"); } - int lvbe_style_set_transition_prop_4(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_transition_prop_4, "", "(lv_style)ii"); } - int lvbe_style_set_transition_prop_5(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_transition_prop_5, "", "(lv_style)ii"); } - int lvbe_style_set_transition_prop_6(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_transition_prop_6, "", "(lv_style)ii"); } - int lvbe_style_set_transition_path(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_transition_path, "", "(lv_style)i(lv_anim_path)"); } - int lvbe_style_set_scale_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_scale_width, "", "(lv_style)ii"); } - int lvbe_style_set_scale_border_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_scale_border_width, "", "(lv_style)ii"); } - int lvbe_style_set_scale_end_border_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_scale_end_border_width, "", "(lv_style)ii"); } - int lvbe_style_set_scale_end_line_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_scale_end_line_width, "", "(lv_style)ii"); } - int lvbe_style_set_scale_grad_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_scale_grad_color, "", "(lv_style)i(lv_color)"); } - int lvbe_style_set_scale_end_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_style_set_scale_end_color, "", "(lv_style)i(lv_color)"); } /* `lv_group` methods */ - int lvbe_group_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_group_create, "lv_group", ""); } - int lvbe_group_del(bvm *vm) { return be_call_c_func(vm, (void*) &lv_group_del, "", "(lv_group)"); } - int lvbe_group_add_obj(bvm *vm) { return be_call_c_func(vm, (void*) &lv_group_add_obj, "", "(lv_group)(lv_obj)"); } - int lvbe_group_remove_obj(bvm *vm) { return be_call_c_func(vm, (void*) &lv_group_remove_obj, "", "(lv_obj)"); } - int lvbe_group_remove_all_objs(bvm *vm) { return be_call_c_func(vm, (void*) &lv_group_remove_all_objs, "", "(lv_group)"); } - int lvbe_group_focus_obj(bvm *vm) { return be_call_c_func(vm, (void*) &lv_group_focus_obj, "", "(lv_obj)"); } - int lvbe_group_focus_next(bvm *vm) { return be_call_c_func(vm, (void*) &lv_group_focus_next, "", "(lv_group)"); } - int lvbe_group_focus_prev(bvm *vm) { return be_call_c_func(vm, (void*) &lv_group_focus_prev, "", "(lv_group)"); } - int lvbe_group_focus_freeze(bvm *vm) { return be_call_c_func(vm, (void*) &lv_group_focus_freeze, "", "(lv_group)b"); } - int lvbe_group_send_data(bvm *vm) { return be_call_c_func(vm, (void*) &lv_group_send_data, "i", "(lv_group)i"); } - int lvbe_group_set_focus_cb(bvm *vm) { return be_call_c_func(vm, (void*) &lv_group_set_focus_cb, "", "(lv_group)&0"); } - int lvbe_group_set_refocus_policy(bvm *vm) { return be_call_c_func(vm, (void*) &lv_group_set_refocus_policy, "", "(lv_group)(lv_group_refocus_policy)"); } - int lvbe_group_set_editing(bvm *vm) { return be_call_c_func(vm, (void*) &lv_group_set_editing, "", "(lv_group)b"); } - int lvbe_group_set_click_focus(bvm *vm) { return be_call_c_func(vm, (void*) &lv_group_set_click_focus, "", "(lv_group)b"); } - int lvbe_group_set_wrap(bvm *vm) { return be_call_c_func(vm, (void*) &lv_group_set_wrap, "", "(lv_group)b"); } - int lvbe_group_get_focused(bvm *vm) { return be_call_c_func(vm, (void*) &lv_group_get_focused, "lv_obj", "(lv_group)"); } - int lvbe_group_get_editing(bvm *vm) { return be_call_c_func(vm, (void*) &lv_group_get_editing, "b", "(lv_group)"); } - int lvbe_group_get_click_focus(bvm *vm) { return be_call_c_func(vm, (void*) &lv_group_get_click_focus, "b", "(lv_group)"); } - int lvbe_group_get_wrap(bvm *vm) { return be_call_c_func(vm, (void*) &lv_group_get_wrap, "b", "(lv_group)"); } + int lvbe_group_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_group_create, "+lv_group", ""); } /* `lv_indev` methods */ - int lvbe_indev_get_type(bvm *vm) { return be_call_c_func(vm, (void*) &lv_indev_get_type, "i", "(lv_indev)"); } - int lvbe_indev_enable(bvm *vm) { return be_call_c_func(vm, (void*) &lv_indev_enable, "", "(lv_indev)b"); } - int lvbe_indev_set_group(bvm *vm) { return be_call_c_func(vm, (void*) &lv_indev_set_group, "", "(lv_indev)(lv_group)"); } - int lvbe_indev_get_obj_act(bvm *vm) { return be_call_c_func(vm, (void*) &lv_indev_get_obj_act, "lv_obj", ""); } - int lvbe_indev_search_obj(bvm *vm) { return be_call_c_func(vm, (void*) &lv_indev_search_obj, "lv_obj", "(lv_obj)(lv_point)"); } /* `lv_obj` methods */ - int lvbe_obj_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_obj_create, "lv_obj", "(lv_obj)(lv_obj)"); } - int lvbe_obj_del(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_del, "i", "(lv_obj)"); } - int lvbe_obj_del_anim_ready_cb(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_del_anim_ready_cb, "", "(lv_anim)"); } - int lvbe_obj_del_async(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_del_async, "", "(_lv_obj)"); } - int lvbe_obj_clean(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_clean, "", "(lv_obj)"); } - int lvbe_obj_invalidate_area(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_invalidate_area, "", "(lv_obj)(lv_area)"); } - int lvbe_obj_invalidate(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_invalidate, "", "(lv_obj)"); } - int lvbe_obj_area_is_visible(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_area_is_visible, "b", "(lv_obj)(lv_area)"); } - int lvbe_obj_is_visible(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_is_visible, "b", "(lv_obj)"); } - int lvbe_obj_set_parent(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_parent, "", "(lv_obj)(lv_obj)"); } - int lvbe_obj_move_foreground(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_move_foreground, "", "(lv_obj)"); } - int lvbe_obj_move_background(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_move_background, "", "(lv_obj)"); } - int lvbe_obj_set_pos(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_pos, "", "(lv_obj)ii"); } - int lvbe_obj_set_x(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_x, "", "(lv_obj)i"); } - int lvbe_obj_set_y(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_y, "", "(lv_obj)i"); } - int lvbe_obj_set_size(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_size, "", "(lv_obj)ii"); } - int lvbe_obj_set_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_width, "", "(lv_obj)i"); } - int lvbe_obj_set_height(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_height, "", "(lv_obj)i"); } - int lvbe_obj_set_width_fit(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_width_fit, "", "(lv_obj)i"); } - int lvbe_obj_set_height_fit(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_height_fit, "", "(lv_obj)i"); } - int lvbe_obj_set_width_margin(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_width_margin, "", "(lv_obj)i"); } - int lvbe_obj_set_height_margin(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_height_margin, "", "(lv_obj)i"); } - int lvbe_obj_align(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_align, "", "(lv_obj)(lv_obj)iii"); } - int lvbe_obj_align_x(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_align_x, "", "(lv_obj)(lv_obj)ii"); } - int lvbe_obj_align_y(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_align_y, "", "(lv_obj)(lv_obj)ii"); } - int lvbe_obj_align_mid(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_align_mid, "", "(lv_obj)(lv_obj)iii"); } - int lvbe_obj_align_mid_x(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_align_mid_x, "", "(lv_obj)(lv_obj)ii"); } - int lvbe_obj_align_mid_y(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_align_mid_y, "", "(lv_obj)(lv_obj)ii"); } - int lvbe_obj_realign(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_realign, "", "(lv_obj)"); } - int lvbe_obj_set_auto_realign(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_auto_realign, "", "(lv_obj)b"); } - int lvbe_obj_set_ext_click_area(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_ext_click_area, "", "(lv_obj)iiii"); } - int lvbe_obj_add_style(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_add_style, "", "(lv_obj)i(lv_style)"); } - int lvbe_obj_remove_style(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_remove_style, "", "(lv_obj)i(lv_style)"); } - int lvbe_obj_clean_style_list(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_clean_style_list, "", "(lv_obj)i"); } - int lvbe_obj_reset_style_list(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_reset_style_list, "", "(lv_obj)i"); } - int lvbe_obj_refresh_style(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_refresh_style, "", "(lv_obj)i(lv_style_property)"); } - int lvbe_obj_report_style_mod(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_report_style_mod, "", "(lv_style)"); } - int lvbe_obj_remove_style_local_prop(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_remove_style_local_prop, "b", "(lv_obj)i(lv_style_property)"); } - int lvbe_obj_set_hidden(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_hidden, "", "(lv_obj)b"); } - int lvbe_obj_set_adv_hittest(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_adv_hittest, "", "(lv_obj)b"); } - int lvbe_obj_set_click(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_click, "", "(lv_obj)b"); } - int lvbe_obj_set_top(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_top, "", "(lv_obj)b"); } - int lvbe_obj_set_drag(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_drag, "", "(lv_obj)b"); } - int lvbe_obj_set_drag_dir(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_drag_dir, "", "(lv_obj)i"); } - int lvbe_obj_set_drag_throw(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_drag_throw, "", "(lv_obj)b"); } - int lvbe_obj_set_drag_parent(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_drag_parent, "", "(lv_obj)b"); } - int lvbe_obj_set_focus_parent(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_focus_parent, "", "(lv_obj)b"); } - int lvbe_obj_set_gesture_parent(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_gesture_parent, "", "(lv_obj)b"); } - int lvbe_obj_set_parent_event(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_parent_event, "", "(lv_obj)b"); } - int lvbe_obj_set_base_dir(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_base_dir, "", "(lv_obj)i"); } - int lvbe_obj_add_protect(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_add_protect, "", "(lv_obj)i"); } - int lvbe_obj_clear_protect(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_clear_protect, "", "(lv_obj)i"); } - int lvbe_obj_set_state(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_state, "", "(lv_obj)i"); } - int lvbe_obj_add_state(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_add_state, "", "(lv_obj)i"); } - int lvbe_obj_clear_state(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_clear_state, "", "(lv_obj)i"); } - int lvbe_obj_finish_transitions(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_finish_transitions, "", "(lv_obj)i"); } - int lvbe_obj_set_event_cb(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_event_cb, "", "(lv_obj)&1"); } - int lvbe_obj_set_signal_cb(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_signal_cb, "", "(lv_obj)&2"); } - int lvbe_obj_set_design_cb(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_design_cb, "", "(lv_obj)&3"); } - int lvbe_obj_allocate_ext_attr(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_allocate_ext_attr, "i", "(lv_obj)i"); } - int lvbe_obj_refresh_ext_draw_pad(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_refresh_ext_draw_pad, "", "(lv_obj)"); } - int lvbe_obj_get_screen(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_screen, "lv_obj", "(lv_obj)"); } - int lvbe_obj_get_parent(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_parent, "lv_obj", "(lv_obj)"); } - int lvbe_obj_get_child(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_child, "lv_obj", "(lv_obj)(lv_obj)"); } - int lvbe_obj_get_child_back(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_child_back, "lv_obj", "(lv_obj)(lv_obj)"); } - int lvbe_obj_count_children(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_count_children, "i", "(lv_obj)"); } - int lvbe_obj_count_children_recursive(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_count_children_recursive, "i", "(lv_obj)"); } - int lvbe_obj_get_coords(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_coords, "", "(lv_obj)(lv_area)"); } - int lvbe_obj_get_inner_coords(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_inner_coords, "", "(lv_obj)(lv_area)"); } - int lvbe_obj_get_x(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_x, "i", "(lv_obj)"); } - int lvbe_obj_get_y(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_y, "i", "(lv_obj)"); } - int lvbe_obj_get_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_width, "i", "(lv_obj)"); } - int lvbe_obj_get_height(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_height, "i", "(lv_obj)"); } - int lvbe_obj_get_width_fit(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_width_fit, "i", "(lv_obj)"); } - int lvbe_obj_get_height_fit(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_height_fit, "i", "(lv_obj)"); } - int lvbe_obj_get_height_margin(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_height_margin, "i", "(lv_obj)"); } - int lvbe_obj_get_width_margin(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_width_margin, "i", "(lv_obj)"); } - int lvbe_obj_get_width_grid(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_width_grid, "i", "(lv_obj)ii"); } - int lvbe_obj_get_height_grid(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_height_grid, "i", "(lv_obj)ii"); } - int lvbe_obj_get_auto_realign(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_auto_realign, "b", "(lv_obj)"); } - int lvbe_obj_get_ext_click_pad_left(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_ext_click_pad_left, "i", "(lv_obj)"); } - int lvbe_obj_get_ext_click_pad_right(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_ext_click_pad_right, "i", "(lv_obj)"); } - int lvbe_obj_get_ext_click_pad_top(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_ext_click_pad_top, "i", "(lv_obj)"); } - int lvbe_obj_get_ext_click_pad_bottom(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_ext_click_pad_bottom, "i", "(lv_obj)"); } - int lvbe_obj_get_ext_draw_pad(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_ext_draw_pad, "i", "(lv_obj)"); } - int lvbe_obj_get_local_style(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_local_style, "lv_style", "(lv_obj)i"); } - int lvbe_obj_get_hidden(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_hidden, "b", "(lv_obj)"); } - int lvbe_obj_get_adv_hittest(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_adv_hittest, "b", "(lv_obj)"); } - int lvbe_obj_get_click(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_click, "b", "(lv_obj)"); } - int lvbe_obj_get_top(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_top, "b", "(lv_obj)"); } - int lvbe_obj_get_drag(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_drag, "b", "(lv_obj)"); } - int lvbe_obj_get_drag_dir(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_drag_dir, "i", "(lv_obj)"); } - int lvbe_obj_get_drag_throw(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_drag_throw, "b", "(lv_obj)"); } - int lvbe_obj_get_drag_parent(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_drag_parent, "b", "(lv_obj)"); } - int lvbe_obj_get_focus_parent(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_focus_parent, "b", "(lv_obj)"); } - int lvbe_obj_get_parent_event(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_parent_event, "b", "(lv_obj)"); } - int lvbe_obj_get_gesture_parent(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_gesture_parent, "b", "(lv_obj)"); } - int lvbe_obj_get_base_dir(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_base_dir, "i", "(lv_obj)"); } - int lvbe_obj_get_protect(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_protect, "i", "(lv_obj)"); } - int lvbe_obj_is_protected(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_is_protected, "b", "(lv_obj)i"); } - int lvbe_obj_get_state(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_state, "i", "(lv_obj)i"); } - int lvbe_obj_is_point_on_coords(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_is_point_on_coords, "b", "(lv_obj)(lv_point)"); } - int lvbe_obj_hittest(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_hittest, "b", "(lv_obj)(lv_point)"); } - int lvbe_obj_get_ext_attr(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_ext_attr, "i", "(lv_obj)"); } - int lvbe_obj_get_type(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_type, "", "(lv_obj)(lv_obj_type)"); } - int lvbe_obj_get_user_data(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_user_data, "i", "(lv_obj)"); } - int lvbe_obj_set_user_data(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_user_data, "", "(lv_obj)i"); } - int lvbe_obj_get_group(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_group, "i", "(lv_obj)"); } - int lvbe_obj_is_focused(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_is_focused, "b", "(lv_obj)"); } - int lvbe_obj_get_focused_obj(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_focused_obj, "lv_obj", "(lv_obj)"); } - int lvbe_obj_handle_get_type_signal(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_handle_get_type_signal, "i", "(lv_obj_type)s"); } - int lvbe_obj_init_draw_rect_dsc(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_init_draw_rect_dsc, "", "(lv_obj)i(lv_draw_rect_dsc)"); } - int lvbe_obj_init_draw_label_dsc(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_init_draw_label_dsc, "", "(lv_obj)i(lv_draw_label_dsc)"); } - int lvbe_obj_init_draw_img_dsc(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_init_draw_img_dsc, "", "(lv_obj)i(lv_draw_img_dsc)"); } - int lvbe_obj_init_draw_line_dsc(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_init_draw_line_dsc, "", "(lv_obj)i(lv_draw_line_dsc)"); } - int lvbe_obj_get_draw_rect_ext_pad_size(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_draw_rect_ext_pad_size, "i", "(lv_obj)i"); } - int lvbe_obj_fade_in(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_fade_in, "", "(lv_obj)ii"); } - int lvbe_obj_fade_out(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_fade_out, "", "(lv_obj)ii"); } - int lvbe_obj_get_style_radius(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_radius, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_radius(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_radius, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_clip_corner(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_clip_corner, "b", "(lv_obj)i"); } - int lvbe_obj_set_style_local_clip_corner(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_clip_corner, "", "(lv_obj)iib"); } - int lvbe_obj_get_style_size(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_size, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_size(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_size, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_transform_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_transform_width, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_transform_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_transform_width, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_transform_height(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_transform_height, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_transform_height(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_transform_height, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_transform_angle(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_transform_angle, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_transform_angle(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_transform_angle, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_transform_zoom(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_transform_zoom, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_transform_zoom(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_transform_zoom, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_opa_scale(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_opa_scale, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_opa_scale(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_opa_scale, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_pad_top(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_pad_top, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_pad_top(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_pad_top, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_pad_bottom(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_pad_bottom, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_pad_bottom(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_pad_bottom, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_pad_left(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_pad_left, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_pad_left(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_pad_left, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_pad_right(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_pad_right, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_pad_right(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_pad_right, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_pad_inner(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_pad_inner, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_pad_inner(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_pad_inner, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_margin_top(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_margin_top, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_margin_top(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_margin_top, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_margin_bottom(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_margin_bottom, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_margin_bottom(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_margin_bottom, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_margin_left(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_margin_left, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_margin_left(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_margin_left, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_margin_right(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_margin_right, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_margin_right(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_margin_right, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_bg_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_bg_blend_mode, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_bg_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_bg_blend_mode, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_bg_main_stop(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_bg_main_stop, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_bg_main_stop(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_bg_main_stop, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_bg_grad_stop(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_bg_grad_stop, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_bg_grad_stop(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_bg_grad_stop, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_bg_grad_dir(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_bg_grad_dir, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_bg_grad_dir(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_bg_grad_dir, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_bg_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_bg_color, "lv_color", "(lv_obj)i"); } - int lvbe_obj_set_style_local_bg_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_bg_color, "", "(lv_obj)ii(lv_color)"); } - int lvbe_obj_get_style_bg_grad_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_bg_grad_color, "lv_color", "(lv_obj)i"); } - int lvbe_obj_set_style_local_bg_grad_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_bg_grad_color, "", "(lv_obj)ii(lv_color)"); } - int lvbe_obj_get_style_bg_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_bg_opa, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_bg_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_bg_opa, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_border_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_border_width, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_border_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_border_width, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_border_side(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_border_side, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_border_side(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_border_side, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_border_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_border_blend_mode, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_border_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_border_blend_mode, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_border_post(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_border_post, "b", "(lv_obj)i"); } - int lvbe_obj_set_style_local_border_post(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_border_post, "", "(lv_obj)iib"); } - int lvbe_obj_get_style_border_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_border_color, "lv_color", "(lv_obj)i"); } - int lvbe_obj_set_style_local_border_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_border_color, "", "(lv_obj)ii(lv_color)"); } - int lvbe_obj_get_style_border_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_border_opa, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_border_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_border_opa, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_outline_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_outline_width, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_outline_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_outline_width, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_outline_pad(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_outline_pad, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_outline_pad(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_outline_pad, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_outline_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_outline_blend_mode, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_outline_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_outline_blend_mode, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_outline_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_outline_color, "lv_color", "(lv_obj)i"); } - int lvbe_obj_set_style_local_outline_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_outline_color, "", "(lv_obj)ii(lv_color)"); } - int lvbe_obj_get_style_outline_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_outline_opa, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_outline_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_outline_opa, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_shadow_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_shadow_width, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_shadow_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_shadow_width, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_shadow_ofs_x(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_shadow_ofs_x, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_shadow_ofs_x(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_shadow_ofs_x, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_shadow_ofs_y(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_shadow_ofs_y, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_shadow_ofs_y(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_shadow_ofs_y, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_shadow_spread(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_shadow_spread, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_shadow_spread(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_shadow_spread, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_shadow_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_shadow_blend_mode, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_shadow_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_shadow_blend_mode, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_shadow_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_shadow_color, "lv_color", "(lv_obj)i"); } - int lvbe_obj_set_style_local_shadow_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_shadow_color, "", "(lv_obj)ii(lv_color)"); } - int lvbe_obj_get_style_shadow_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_shadow_opa, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_shadow_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_shadow_opa, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_pattern_repeat(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_pattern_repeat, "b", "(lv_obj)i"); } - int lvbe_obj_set_style_local_pattern_repeat(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_pattern_repeat, "", "(lv_obj)iib"); } - int lvbe_obj_get_style_pattern_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_pattern_blend_mode, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_pattern_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_pattern_blend_mode, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_pattern_recolor(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_pattern_recolor, "lv_color", "(lv_obj)i"); } - int lvbe_obj_set_style_local_pattern_recolor(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_pattern_recolor, "", "(lv_obj)ii(lv_color)"); } - int lvbe_obj_get_style_pattern_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_pattern_opa, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_pattern_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_pattern_opa, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_pattern_recolor_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_pattern_recolor_opa, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_pattern_recolor_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_pattern_recolor_opa, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_pattern_image(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_pattern_image, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_pattern_image(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_pattern_image, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_value_letter_space(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_value_letter_space, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_value_letter_space(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_value_letter_space, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_value_line_space(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_value_line_space, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_value_line_space(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_value_line_space, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_value_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_value_blend_mode, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_value_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_value_blend_mode, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_value_ofs_x(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_value_ofs_x, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_value_ofs_x(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_value_ofs_x, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_value_ofs_y(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_value_ofs_y, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_value_ofs_y(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_value_ofs_y, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_value_align(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_value_align, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_value_align(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_value_align, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_value_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_value_color, "lv_color", "(lv_obj)i"); } - int lvbe_obj_set_style_local_value_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_value_color, "", "(lv_obj)ii(lv_color)"); } - int lvbe_obj_get_style_value_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_value_opa, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_value_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_value_opa, "", "(lv_obj)iii"); } - int lvbe_obj_set_style_local_value_font(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_value_font, "", "(lv_obj)ii(lv_font)"); } - int lvbe_obj_get_style_value_str(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_value_str, "s", "(lv_obj)i"); } - int lvbe_obj_set_style_local_value_str(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_value_str, "", "(lv_obj)iis"); } - int lvbe_obj_get_style_text_letter_space(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_text_letter_space, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_text_letter_space(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_text_letter_space, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_text_line_space(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_text_line_space, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_text_line_space(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_text_line_space, "", "(lv_obj)iii"); } - int lvbe_obj_set_style_local_text_decor(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_text_decor, "", "(lv_obj)ii(lv_text_decor)"); } - int lvbe_obj_get_style_text_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_text_blend_mode, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_text_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_text_blend_mode, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_text_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_text_color, "lv_color", "(lv_obj)i"); } - int lvbe_obj_set_style_local_text_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_text_color, "", "(lv_obj)ii(lv_color)"); } - int lvbe_obj_get_style_text_sel_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_text_sel_color, "lv_color", "(lv_obj)i"); } - int lvbe_obj_set_style_local_text_sel_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_text_sel_color, "", "(lv_obj)ii(lv_color)"); } - int lvbe_obj_get_style_text_sel_bg_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_text_sel_bg_color, "lv_color", "(lv_obj)i"); } - int lvbe_obj_set_style_local_text_sel_bg_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_text_sel_bg_color, "", "(lv_obj)ii(lv_color)"); } - int lvbe_obj_get_style_text_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_text_opa, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_text_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_text_opa, "", "(lv_obj)iii"); } - int lvbe_obj_set_style_local_text_font(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_text_font, "", "(lv_obj)ii(lv_font)"); } - int lvbe_obj_get_style_line_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_line_width, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_line_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_line_width, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_line_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_line_blend_mode, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_line_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_line_blend_mode, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_line_dash_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_line_dash_width, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_line_dash_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_line_dash_width, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_line_dash_gap(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_line_dash_gap, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_line_dash_gap(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_line_dash_gap, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_line_rounded(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_line_rounded, "b", "(lv_obj)i"); } - int lvbe_obj_set_style_local_line_rounded(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_line_rounded, "", "(lv_obj)iib"); } - int lvbe_obj_get_style_line_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_line_color, "lv_color", "(lv_obj)i"); } - int lvbe_obj_set_style_local_line_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_line_color, "", "(lv_obj)ii(lv_color)"); } - int lvbe_obj_get_style_line_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_line_opa, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_line_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_line_opa, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_image_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_image_blend_mode, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_image_blend_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_image_blend_mode, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_image_recolor(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_image_recolor, "lv_color", "(lv_obj)i"); } - int lvbe_obj_set_style_local_image_recolor(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_image_recolor, "", "(lv_obj)ii(lv_color)"); } - int lvbe_obj_get_style_image_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_image_opa, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_image_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_image_opa, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_image_recolor_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_image_recolor_opa, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_image_recolor_opa(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_image_recolor_opa, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_transition_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_transition_time, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_transition_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_transition_time, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_transition_delay(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_transition_delay, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_transition_delay(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_transition_delay, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_transition_prop_1(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_transition_prop_1, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_transition_prop_1(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_transition_prop_1, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_transition_prop_2(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_transition_prop_2, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_transition_prop_2(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_transition_prop_2, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_transition_prop_3(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_transition_prop_3, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_transition_prop_3(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_transition_prop_3, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_transition_prop_4(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_transition_prop_4, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_transition_prop_4(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_transition_prop_4, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_transition_prop_5(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_transition_prop_5, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_transition_prop_5(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_transition_prop_5, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_transition_prop_6(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_transition_prop_6, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_transition_prop_6(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_transition_prop_6, "", "(lv_obj)iii"); } - int lvbe_obj_set_style_local_transition_path(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_transition_path, "", "(lv_obj)ii(lv_anim_path)"); } - int lvbe_obj_get_style_scale_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_scale_width, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_scale_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_scale_width, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_scale_border_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_scale_border_width, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_scale_border_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_scale_border_width, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_scale_end_border_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_scale_end_border_width, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_scale_end_border_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_scale_end_border_width, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_scale_end_line_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_scale_end_line_width, "i", "(lv_obj)i"); } - int lvbe_obj_set_style_local_scale_end_line_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_scale_end_line_width, "", "(lv_obj)iii"); } - int lvbe_obj_get_style_scale_grad_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_scale_grad_color, "lv_color", "(lv_obj)i"); } - int lvbe_obj_set_style_local_scale_grad_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_scale_grad_color, "", "(lv_obj)ii(lv_color)"); } - int lvbe_obj_get_style_scale_end_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_get_style_scale_end_color, "lv_color", "(lv_obj)i"); } - int lvbe_obj_set_style_local_scale_end_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_set_style_local_scale_end_color, "", "(lv_obj)ii(lv_color)"); } + int lvbe_obj_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_create, "+lv_obj", "(lv_obj)(lv_obj)"); } /* `lv_arc` methods */ - int lvbe_arc_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_arc_create, "lv_arc", "(lv_obj)(lv_obj)"); } - int lvbe_arc_set_start_angle(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_set_start_angle, "", "(lv_obj)i"); } - int lvbe_arc_set_end_angle(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_set_end_angle, "", "(lv_obj)i"); } - int lvbe_arc_set_angles(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_set_angles, "", "(lv_obj)ii"); } - int lvbe_arc_set_bg_start_angle(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_set_bg_start_angle, "", "(lv_obj)i"); } - int lvbe_arc_set_bg_end_angle(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_set_bg_end_angle, "", "(lv_obj)i"); } - int lvbe_arc_set_bg_angles(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_set_bg_angles, "", "(lv_obj)ii"); } - int lvbe_arc_set_rotation(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_set_rotation, "", "(lv_obj)i"); } - int lvbe_arc_set_type(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_set_type, "", "(lv_obj)i"); } - int lvbe_arc_set_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_set_value, "", "(lv_obj)i"); } - int lvbe_arc_set_range(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_set_range, "", "(lv_obj)ii"); } - int lvbe_arc_set_chg_rate(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_set_chg_rate, "", "(lv_obj)i"); } - int lvbe_arc_set_adjustable(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_set_adjustable, "", "(lv_obj)b"); } - int lvbe_arc_get_angle_start(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_get_angle_start, "i", "(lv_obj)"); } - int lvbe_arc_get_angle_end(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_get_angle_end, "i", "(lv_obj)"); } - int lvbe_arc_get_bg_angle_start(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_get_bg_angle_start, "i", "(lv_obj)"); } - int lvbe_arc_get_bg_angle_end(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_get_bg_angle_end, "i", "(lv_obj)"); } - int lvbe_arc_get_type(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_get_type, "i", "(lv_obj)"); } - int lvbe_arc_get_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_get_value, "i", "(lv_obj)"); } - int lvbe_arc_get_min_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_get_min_value, "i", "(lv_obj)"); } - int lvbe_arc_get_max_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_get_max_value, "i", "(lv_obj)"); } - int lvbe_arc_is_dragged(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_is_dragged, "b", "(lv_obj)"); } - int lvbe_arc_get_adjustable(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_get_adjustable, "b", "(lv_obj)"); } + int lvbe_arc_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_create, "+lv_arc", "(lv_obj)(lv_obj)"); } /* `lv_bar` methods */ - int lvbe_bar_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_bar_create, "lv_bar", "(lv_obj)(lv_obj)"); } - int lvbe_bar_set_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_bar_set_value, "", "(lv_obj)i(lv_anim_enable)"); } - int lvbe_bar_set_start_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_bar_set_start_value, "", "(lv_obj)i(lv_anim_enable)"); } - int lvbe_bar_set_range(bvm *vm) { return be_call_c_func(vm, (void*) &lv_bar_set_range, "", "(lv_obj)ii"); } - int lvbe_bar_set_type(bvm *vm) { return be_call_c_func(vm, (void*) &lv_bar_set_type, "", "(lv_obj)i"); } - int lvbe_bar_set_anim_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_bar_set_anim_time, "", "(lv_obj)i"); } - int lvbe_bar_get_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_bar_get_value, "i", "(lv_obj)"); } - int lvbe_bar_get_start_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_bar_get_start_value, "i", "(lv_obj)"); } - int lvbe_bar_get_min_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_bar_get_min_value, "i", "(lv_obj)"); } - int lvbe_bar_get_max_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_bar_get_max_value, "i", "(lv_obj)"); } - int lvbe_bar_get_type(bvm *vm) { return be_call_c_func(vm, (void*) &lv_bar_get_type, "i", "(lv_obj)"); } - int lvbe_bar_get_anim_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_bar_get_anim_time, "i", "(lv_obj)"); } + int lvbe_bar_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_bar_create, "+lv_bar", "(lv_obj)(lv_obj)"); } /* `lv_btn` methods */ - int lvbe_btn_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_btn_create, "lv_btn", "(lv_obj)(lv_obj)"); } - int lvbe_btn_set_checkable(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btn_set_checkable, "", "(lv_obj)b"); } - int lvbe_btn_set_state(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btn_set_state, "", "(lv_obj)i"); } - int lvbe_btn_toggle(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btn_toggle, "", "(lv_obj)"); } - int lvbe_btn_set_layout(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btn_set_layout, "", "(lv_obj)i"); } - int lvbe_btn_set_fit4(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btn_set_fit4, "", "(lv_obj)iiii"); } - int lvbe_btn_set_fit2(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btn_set_fit2, "", "(lv_obj)ii"); } - int lvbe_btn_set_fit(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btn_set_fit, "", "(lv_obj)i"); } - int lvbe_btn_get_state(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btn_get_state, "i", "(lv_obj)"); } - int lvbe_btn_get_checkable(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btn_get_checkable, "b", "(lv_obj)"); } - int lvbe_btn_get_layout(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btn_get_layout, "i", "(lv_obj)"); } - int lvbe_btn_get_fit_left(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btn_get_fit_left, "i", "(lv_obj)"); } - int lvbe_btn_get_fit_right(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btn_get_fit_right, "i", "(lv_obj)"); } - int lvbe_btn_get_fit_top(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btn_get_fit_top, "i", "(lv_obj)"); } - int lvbe_btn_get_fit_bottom(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btn_get_fit_bottom, "i", "(lv_obj)"); } + int lvbe_btn_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btn_create, "+lv_btn", "(lv_obj)(lv_obj)"); } /* `lv_btnmatrix` methods */ - int lvbe_btnmatrix_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_btnmatrix_create, "lv_btnmatrix", "(lv_obj)(lv_obj)"); } - int lvbe_btnmatrix_set_map(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btnmatrix_set_map, "", "(lv_obj)s"); } - int lvbe_btnmatrix_set_ctrl_map(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btnmatrix_set_ctrl_map, "", "(lv_obj)(lv_btnmatrix_ctrl)"); } - int lvbe_btnmatrix_set_focused_btn(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btnmatrix_set_focused_btn, "", "(lv_obj)i"); } - int lvbe_btnmatrix_set_recolor(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btnmatrix_set_recolor, "", "(lv_obj)b"); } - int lvbe_btnmatrix_set_btn_ctrl(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btnmatrix_set_btn_ctrl, "", "(lv_obj)i(lv_btnmatrix_ctrl)"); } - int lvbe_btnmatrix_clear_btn_ctrl(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btnmatrix_clear_btn_ctrl, "", "(lv_obj)i(lv_btnmatrix_ctrl)"); } - int lvbe_btnmatrix_set_btn_ctrl_all(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btnmatrix_set_btn_ctrl_all, "", "(lv_obj)(lv_btnmatrix_ctrl)"); } - int lvbe_btnmatrix_clear_btn_ctrl_all(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btnmatrix_clear_btn_ctrl_all, "", "(lv_obj)(lv_btnmatrix_ctrl)"); } - int lvbe_btnmatrix_set_btn_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btnmatrix_set_btn_width, "", "(lv_obj)ii"); } - int lvbe_btnmatrix_set_one_check(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btnmatrix_set_one_check, "", "(lv_obj)b"); } - int lvbe_btnmatrix_set_align(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btnmatrix_set_align, "", "(lv_obj)i"); } - int lvbe_btnmatrix_get_recolor(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btnmatrix_get_recolor, "b", "(lv_obj)"); } - int lvbe_btnmatrix_get_active_btn(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btnmatrix_get_active_btn, "i", "(lv_obj)"); } - int lvbe_btnmatrix_get_active_btn_text(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btnmatrix_get_active_btn_text, "s", "(lv_obj)"); } - int lvbe_btnmatrix_get_focused_btn(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btnmatrix_get_focused_btn, "i", "(lv_obj)"); } - int lvbe_btnmatrix_get_btn_text(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btnmatrix_get_btn_text, "s", "(lv_obj)i"); } - int lvbe_btnmatrix_get_btn_ctrl(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btnmatrix_get_btn_ctrl, "b", "(lv_obj)i(lv_btnmatrix_ctrl)"); } - int lvbe_btnmatrix_get_one_check(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btnmatrix_get_one_check, "b", "(lv_obj)"); } - int lvbe_btnmatrix_get_align(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btnmatrix_get_align, "i", "(lv_obj)"); } + int lvbe_btnmatrix_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btnmatrix_create, "+lv_btnmatrix", "(lv_obj)(lv_obj)"); } /* `lv_calendar` methods */ - int lvbe_calendar_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_calendar_create, "lv_calendar", "(lv_obj)(lv_obj)"); } - int lvbe_calendar_set_today_date(bvm *vm) { return be_call_c_func(vm, (void*) &lv_calendar_set_today_date, "", "(lv_obj)(lv_calendar_date)"); } - int lvbe_calendar_set_showed_date(bvm *vm) { return be_call_c_func(vm, (void*) &lv_calendar_set_showed_date, "", "(lv_obj)(lv_calendar_date)"); } - int lvbe_calendar_set_highlighted_dates(bvm *vm) { return be_call_c_func(vm, (void*) &lv_calendar_set_highlighted_dates, "", "(lv_obj)(lv_calendar_date)i"); } - int lvbe_calendar_set_day_names(bvm *vm) { return be_call_c_func(vm, (void*) &lv_calendar_set_day_names, "", "(lv_obj)(char)"); } - int lvbe_calendar_set_month_names(bvm *vm) { return be_call_c_func(vm, (void*) &lv_calendar_set_month_names, "", "(lv_obj)(char)"); } - int lvbe_calendar_get_highlighted_dates_num(bvm *vm) { return be_call_c_func(vm, (void*) &lv_calendar_get_highlighted_dates_num, "i", "(lv_obj)"); } - int lvbe_calendar_get_day_of_week(bvm *vm) { return be_call_c_func(vm, (void*) &lv_calendar_get_day_of_week, "i", "iii"); } + int lvbe_calendar_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_calendar_create, "+lv_calendar", "(lv_obj)(lv_obj)"); } /* `lv_canvas` methods */ - int lvbe_canvas_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_canvas_create, "lv_canvas", "(lv_obj)(lv_obj)"); } - int lvbe_canvas_set_buffer(bvm *vm) { return be_call_c_func(vm, (void*) &lv_canvas_set_buffer, "", "(lv_obj)iii(lv_img_cf)"); } - int lvbe_canvas_set_px(bvm *vm) { return be_call_c_func(vm, (void*) &lv_canvas_set_px, "", "(lv_obj)ii(lv_color)"); } - int lvbe_canvas_set_palette(bvm *vm) { return be_call_c_func(vm, (void*) &lv_canvas_set_palette, "", "(lv_obj)i(lv_color)"); } - int lvbe_canvas_get_px(bvm *vm) { return be_call_c_func(vm, (void*) &lv_canvas_get_px, "lv_color", "(lv_obj)ii"); } - int lvbe_canvas_copy_buf(bvm *vm) { return be_call_c_func(vm, (void*) &lv_canvas_copy_buf, "", "(lv_obj)iiiii"); } - int lvbe_canvas_transform(bvm *vm) { return be_call_c_func(vm, (void*) &lv_canvas_transform, "", "(lv_obj)(lv_img_dsc)iiiiiib"); } - int lvbe_canvas_blur_hor(bvm *vm) { return be_call_c_func(vm, (void*) &lv_canvas_blur_hor, "", "(lv_obj)(lv_area)i"); } - int lvbe_canvas_blur_ver(bvm *vm) { return be_call_c_func(vm, (void*) &lv_canvas_blur_ver, "", "(lv_obj)(lv_area)i"); } - int lvbe_canvas_fill_bg(bvm *vm) { return be_call_c_func(vm, (void*) &lv_canvas_fill_bg, "", "(lv_obj)(lv_color)i"); } - int lvbe_canvas_draw_rect(bvm *vm) { return be_call_c_func(vm, (void*) &lv_canvas_draw_rect, "", "(lv_obj)iiii(lv_draw_rect_dsc)"); } - int lvbe_canvas_draw_text(bvm *vm) { return be_call_c_func(vm, (void*) &lv_canvas_draw_text, "", "(lv_obj)iii(lv_draw_label_dsc)si"); } - int lvbe_canvas_draw_img(bvm *vm) { return be_call_c_func(vm, (void*) &lv_canvas_draw_img, "", "(lv_obj)iii(lv_draw_img_dsc)"); } - int lvbe_canvas_draw_line(bvm *vm) { return be_call_c_func(vm, (void*) &lv_canvas_draw_line, "", "(lv_obj)ii(lv_draw_line_dsc)"); } - int lvbe_canvas_draw_polygon(bvm *vm) { return be_call_c_func(vm, (void*) &lv_canvas_draw_polygon, "", "(lv_obj)ii(lv_draw_rect_dsc)"); } - int lvbe_canvas_draw_arc(bvm *vm) { return be_call_c_func(vm, (void*) &lv_canvas_draw_arc, "", "(lv_obj)iiiii(lv_draw_line_dsc)"); } + int lvbe_canvas_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_canvas_create, "+lv_canvas", "(lv_obj)(lv_obj)"); } /* `lv_chart` methods */ - int lvbe_chart_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_chart_create, "lv_chart", "(lv_obj)(lv_obj)"); } - int lvbe_chart_remove_series(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_remove_series, "", "(lv_obj)(lv_chart_series)"); } - int lvbe_chart_clear_series(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_clear_series, "", "(lv_obj)(lv_chart_series)"); } - int lvbe_chart_hide_series(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_hide_series, "", "(lv_obj)(lv_chart_series)b"); } - int lvbe_chart_set_div_line_count(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_set_div_line_count, "", "(lv_obj)ii"); } - int lvbe_chart_set_y_range(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_set_y_range, "", "(lv_obj)iii"); } - int lvbe_chart_set_type(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_set_type, "", "(lv_obj)i"); } - int lvbe_chart_set_point_count(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_set_point_count, "", "(lv_obj)i"); } - int lvbe_chart_init_points(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_init_points, "", "(lv_obj)(lv_chart_series)i"); } - int lvbe_chart_set_points(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_set_points, "", "(lv_obj)(lv_chart_series)i"); } - int lvbe_chart_set_next(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_set_next, "", "(lv_obj)(lv_chart_series)i"); } - int lvbe_chart_set_update_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_set_update_mode, "", "(lv_obj)(lv_chart_update_mode)"); } - int lvbe_chart_set_x_tick_length(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_set_x_tick_length, "", "(lv_obj)ii"); } - int lvbe_chart_set_y_tick_length(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_set_y_tick_length, "", "(lv_obj)ii"); } - int lvbe_chart_set_secondary_y_tick_length(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_set_secondary_y_tick_length, "", "(lv_obj)ii"); } - int lvbe_chart_set_x_tick_texts(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_set_x_tick_texts, "", "(lv_obj)si(lv_chart_axis_options)"); } - int lvbe_chart_set_secondary_y_tick_texts(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_set_secondary_y_tick_texts, "", "(lv_obj)si(lv_chart_axis_options)"); } - int lvbe_chart_set_y_tick_texts(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_set_y_tick_texts, "", "(lv_obj)si(lv_chart_axis_options)"); } - int lvbe_chart_set_x_start_point(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_set_x_start_point, "", "(lv_obj)(lv_chart_series)i"); } - int lvbe_chart_set_ext_array(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_set_ext_array, "", "(lv_obj)(lv_chart_series)ii"); } - int lvbe_chart_set_point_id(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_set_point_id, "", "(lv_obj)(lv_chart_series)ii"); } - int lvbe_chart_set_series_axis(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_set_series_axis, "", "(lv_obj)(lv_chart_series)i"); } - int lvbe_chart_set_cursor_point(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_set_cursor_point, "", "(lv_obj)(lv_chart_cursor)(lv_point)"); } - int lvbe_chart_get_type(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_get_type, "i", "(lv_obj)"); } - int lvbe_chart_get_point_count(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_get_point_count, "i", "(lv_obj)"); } - int lvbe_chart_get_x_start_point(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_get_x_start_point, "i", "(lv_chart_series)"); } - int lvbe_chart_get_point_id(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_get_point_id, "i", "(lv_obj)(lv_chart_series)i"); } - int lvbe_chart_get_series_axis(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_get_series_axis, "i", "(lv_obj)(lv_chart_series)"); } - int lvbe_chart_get_series_area(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_get_series_area, "", "(lv_obj)(lv_area)"); } - int lvbe_chart_get_cursor_point(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_get_cursor_point, "i", "(lv_obj)(lv_chart_cursor)"); } - int lvbe_chart_get_nearest_index_from_coord(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_get_nearest_index_from_coord, "i", "(lv_obj)i"); } - int lvbe_chart_get_x_from_index(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_get_x_from_index, "i", "(lv_obj)(lv_chart_series)i"); } - int lvbe_chart_get_y_from_index(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_get_y_from_index, "i", "(lv_obj)(lv_chart_series)i"); } - int lvbe_chart_refresh(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_refresh, "", "(lv_obj)"); } + int lvbe_chart_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_create, "+lv_chart", "(lv_obj)(lv_obj)"); } /* `lv_checkbox` methods */ - int lvbe_checkbox_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_checkbox_create, "lv_checkbox", "(lv_obj)(lv_obj)"); } - int lvbe_checkbox_set_text(bvm *vm) { return be_call_c_func(vm, (void*) &lv_checkbox_set_text, "", "(lv_obj)s"); } - int lvbe_checkbox_set_text_static(bvm *vm) { return be_call_c_func(vm, (void*) &lv_checkbox_set_text_static, "", "(lv_obj)s"); } - int lvbe_checkbox_set_checked(bvm *vm) { return be_call_c_func(vm, (void*) &lv_checkbox_set_checked, "", "(lv_obj)b"); } - int lvbe_checkbox_set_disabled(bvm *vm) { return be_call_c_func(vm, (void*) &lv_checkbox_set_disabled, "", "(lv_obj)"); } - int lvbe_checkbox_set_state(bvm *vm) { return be_call_c_func(vm, (void*) &lv_checkbox_set_state, "", "(lv_obj)i"); } - int lvbe_checkbox_get_text(bvm *vm) { return be_call_c_func(vm, (void*) &lv_checkbox_get_text, "s", "(lv_obj)"); } - int lvbe_checkbox_is_checked(bvm *vm) { return be_call_c_func(vm, (void*) &lv_checkbox_is_checked, "b", "(lv_obj)"); } - int lvbe_checkbox_is_inactive(bvm *vm) { return be_call_c_func(vm, (void*) &lv_checkbox_is_inactive, "b", "(lv_obj)"); } - int lvbe_checkbox_get_state(bvm *vm) { return be_call_c_func(vm, (void*) &lv_checkbox_get_state, "i", "(lv_obj)"); } + int lvbe_checkbox_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_checkbox_create, "+lv_checkbox", "(lv_obj)(lv_obj)"); } /* `lv_cont` methods */ - int lvbe_cont_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_cont_create, "lv_cont", "(lv_obj)(lv_obj)"); } - int lvbe_cont_set_layout(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cont_set_layout, "", "(lv_obj)i"); } - int lvbe_cont_set_fit4(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cont_set_fit4, "", "(lv_obj)iiii"); } - int lvbe_cont_set_fit2(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cont_set_fit2, "", "(lv_obj)ii"); } - int lvbe_cont_set_fit(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cont_set_fit, "", "(lv_obj)i"); } - int lvbe_cont_get_layout(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cont_get_layout, "i", "(lv_obj)"); } - int lvbe_cont_get_fit_left(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cont_get_fit_left, "i", "(lv_obj)"); } - int lvbe_cont_get_fit_right(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cont_get_fit_right, "i", "(lv_obj)"); } - int lvbe_cont_get_fit_top(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cont_get_fit_top, "i", "(lv_obj)"); } - int lvbe_cont_get_fit_bottom(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cont_get_fit_bottom, "i", "(lv_obj)"); } + int lvbe_cont_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cont_create, "+lv_cont", "(lv_obj)(lv_obj)"); } /* `lv_cpicker` methods */ - int lvbe_cpicker_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_cpicker_create, "lv_cpicker", "(lv_obj)(lv_obj)"); } - int lvbe_cpicker_set_type(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cpicker_set_type, "", "(lv_obj)(lv_cpicker_type)"); } - int lvbe_cpicker_set_hue(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cpicker_set_hue, "b", "(lv_obj)i"); } - int lvbe_cpicker_set_saturation(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cpicker_set_saturation, "b", "(lv_obj)i"); } - int lvbe_cpicker_set_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cpicker_set_value, "b", "(lv_obj)i"); } - int lvbe_cpicker_set_hsv(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cpicker_set_hsv, "b", "(lv_obj)i"); } - int lvbe_cpicker_set_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cpicker_set_color, "b", "(lv_obj)(lv_color)"); } - int lvbe_cpicker_set_color_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cpicker_set_color_mode, "", "(lv_obj)i"); } - int lvbe_cpicker_set_color_mode_fixed(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cpicker_set_color_mode_fixed, "", "(lv_obj)b"); } - int lvbe_cpicker_set_knob_colored(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cpicker_set_knob_colored, "", "(lv_obj)b"); } - int lvbe_cpicker_get_color_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cpicker_get_color_mode, "i", "(lv_obj)"); } - int lvbe_cpicker_get_color_mode_fixed(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cpicker_get_color_mode_fixed, "b", "(lv_obj)"); } - int lvbe_cpicker_get_hue(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cpicker_get_hue, "i", "(lv_obj)"); } - int lvbe_cpicker_get_saturation(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cpicker_get_saturation, "i", "(lv_obj)"); } - int lvbe_cpicker_get_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cpicker_get_value, "i", "(lv_obj)"); } - int lvbe_cpicker_get_hsv(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cpicker_get_hsv, "i", "(lv_obj)"); } - int lvbe_cpicker_get_color(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cpicker_get_color, "lv_color", "(lv_obj)"); } - int lvbe_cpicker_get_knob_colored(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cpicker_get_knob_colored, "b", "(lv_obj)"); } + int lvbe_cpicker_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cpicker_create, "+lv_cpicker", "(lv_obj)(lv_obj)"); } /* `lv_dropdown` methods */ - int lvbe_dropdown_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_dropdown_create, "lv_dropdown", "(lv_obj)(lv_obj)"); } - int lvbe_dropdown_set_text(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_set_text, "", "(lv_obj)s"); } - int lvbe_dropdown_clear_options(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_clear_options, "", "(lv_obj)"); } - int lvbe_dropdown_set_options(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_set_options, "", "(lv_obj)s"); } - int lvbe_dropdown_set_options_static(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_set_options_static, "", "(lv_obj)s"); } - int lvbe_dropdown_add_option(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_add_option, "", "(lv_obj)si"); } - int lvbe_dropdown_set_selected(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_set_selected, "", "(lv_obj)i"); } - int lvbe_dropdown_set_dir(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_set_dir, "", "(lv_obj)i"); } - int lvbe_dropdown_set_max_height(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_set_max_height, "", "(lv_obj)i"); } - int lvbe_dropdown_set_symbol(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_set_symbol, "", "(lv_obj)s"); } - int lvbe_dropdown_set_show_selected(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_set_show_selected, "", "(lv_obj)b"); } - int lvbe_dropdown_get_text(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_get_text, "s", "(lv_obj)"); } - int lvbe_dropdown_get_options(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_get_options, "s", "(lv_obj)"); } - int lvbe_dropdown_get_selected(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_get_selected, "i", "(lv_obj)"); } - int lvbe_dropdown_get_option_cnt(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_get_option_cnt, "i", "(lv_obj)"); } - int lvbe_dropdown_get_selected_str(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_get_selected_str, "", "(lv_obj)si"); } - int lvbe_dropdown_get_max_height(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_get_max_height, "i", "(lv_obj)"); } - int lvbe_dropdown_get_symbol(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_get_symbol, "s", "(lv_obj)"); } - int lvbe_dropdown_get_dir(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_get_dir, "i", "(lv_obj)"); } - int lvbe_dropdown_get_show_selected(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_get_show_selected, "b", "(lv_obj)"); } - int lvbe_dropdown_open(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_open, "", "(lv_obj)"); } - int lvbe_dropdown_close(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_close, "", "(lv_obj)"); } + int lvbe_dropdown_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_create, "+lv_dropdown", "(lv_obj)(lv_obj)"); } /* `lv_gauge` methods */ - int lvbe_gauge_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_gauge_create, "lv_gauge", "(lv_obj)(lv_obj)"); } - int lvbe_gauge_set_needle_count(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_set_needle_count, "", "(lv_obj)i(lv_color)"); } - int lvbe_gauge_set_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_set_value, "", "(lv_obj)ii"); } - int lvbe_gauge_set_range(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_set_range, "", "(lv_obj)ii"); } - int lvbe_gauge_set_critical_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_set_critical_value, "", "(lv_obj)i"); } - int lvbe_gauge_set_scale(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_set_scale, "", "(lv_obj)iii"); } - int lvbe_gauge_set_angle_offset(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_set_angle_offset, "", "(lv_obj)i"); } - int lvbe_gauge_set_needle_img(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_set_needle_img, "", "(lv_obj)iii"); } - int lvbe_gauge_set_formatter_cb(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_set_formatter_cb, "", "(lv_obj)&4"); } - int lvbe_gauge_get_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_get_value, "i", "(lv_obj)i"); } - int lvbe_gauge_get_needle_count(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_get_needle_count, "i", "(lv_obj)"); } - int lvbe_gauge_get_min_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_get_min_value, "i", "(lv_obj)"); } - int lvbe_gauge_get_max_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_get_max_value, "i", "(lv_obj)"); } - int lvbe_gauge_get_critical_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_get_critical_value, "i", "(lv_obj)"); } - int lvbe_gauge_get_label_count(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_get_label_count, "i", "(lv_obj)"); } - int lvbe_gauge_get_line_count(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_get_line_count, "i", "(lv_obj)"); } - int lvbe_gauge_get_scale_angle(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_get_scale_angle, "i", "(lv_obj)"); } - int lvbe_gauge_get_angle_offset(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_get_angle_offset, "i", "(lv_obj)"); } - int lvbe_gauge_get_needle_img(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_get_needle_img, "i", "(lv_obj)"); } - int lvbe_gauge_get_needle_img_pivot_x(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_get_needle_img_pivot_x, "i", "(lv_obj)"); } - int lvbe_gauge_get_needle_img_pivot_y(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_get_needle_img_pivot_y, "i", "(lv_obj)"); } + int lvbe_gauge_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_create, "+lv_gauge", "(lv_obj)(lv_obj)"); } /* `lv_imgbtn` methods */ - int lvbe_imgbtn_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_imgbtn_create, "lv_imgbtn", "(lv_obj)(lv_obj)"); } - int lvbe_imgbtn_set_src(bvm *vm) { return be_call_c_func(vm, (void*) &lv_imgbtn_set_src, "", "(lv_obj)ii"); } - int lvbe_imgbtn_set_state(bvm *vm) { return be_call_c_func(vm, (void*) &lv_imgbtn_set_state, "", "(lv_obj)i"); } - int lvbe_imgbtn_toggle(bvm *vm) { return be_call_c_func(vm, (void*) &lv_imgbtn_toggle, "", "(lv_obj)"); } - int lvbe_imgbtn_set_checkable(bvm *vm) { return be_call_c_func(vm, (void*) &lv_imgbtn_set_checkable, "", "(lv_obj)b"); } - int lvbe_imgbtn_get_src(bvm *vm) { return be_call_c_func(vm, (void*) &lv_imgbtn_get_src, "i", "(lv_obj)i"); } - int lvbe_imgbtn_get_state(bvm *vm) { return be_call_c_func(vm, (void*) &lv_imgbtn_get_state, "i", "(lv_obj)"); } + int lvbe_imgbtn_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_imgbtn_create, "+lv_imgbtn", "(lv_obj)(lv_obj)"); } /* `lv_keyboard` methods */ - int lvbe_keyboard_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_keyboard_create, "lv_keyboard", "(lv_obj)(lv_obj)"); } - int lvbe_keyboard_set_textarea(bvm *vm) { return be_call_c_func(vm, (void*) &lv_keyboard_set_textarea, "", "(lv_obj)(lv_obj)"); } - int lvbe_keyboard_set_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_keyboard_set_mode, "", "(lv_obj)i"); } - int lvbe_keyboard_set_cursor_manage(bvm *vm) { return be_call_c_func(vm, (void*) &lv_keyboard_set_cursor_manage, "", "(lv_obj)b"); } - int lvbe_keyboard_set_map(bvm *vm) { return be_call_c_func(vm, (void*) &lv_keyboard_set_map, "", "(lv_obj)is"); } - int lvbe_keyboard_set_ctrl_map(bvm *vm) { return be_call_c_func(vm, (void*) &lv_keyboard_set_ctrl_map, "", "(lv_obj)i(lv_btnmatrix_ctrl)"); } - int lvbe_keyboard_get_textarea(bvm *vm) { return be_call_c_func(vm, (void*) &lv_keyboard_get_textarea, "lv_obj", "(lv_obj)"); } - int lvbe_keyboard_get_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_keyboard_get_mode, "i", "(lv_obj)"); } - int lvbe_keyboard_get_cursor_manage(bvm *vm) { return be_call_c_func(vm, (void*) &lv_keyboard_get_cursor_manage, "b", "(lv_obj)"); } - int lvbe_keyboard_def_event_cb(bvm *vm) { return be_call_c_func(vm, (void*) &lv_keyboard_def_event_cb, "", "(lv_obj)(lv_event)"); } + int lvbe_keyboard_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_keyboard_create, "+lv_keyboard", "(lv_obj)(lv_obj)"); } /* `lv_label` methods */ - int lvbe_label_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_label_create, "lv_label", "(lv_obj)(lv_obj)"); } - int lvbe_label_set_text(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_set_text, "", "(lv_obj)s"); } - int lvbe_label_set_text_fmt(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_set_text_fmt, "", "(lv_obj)s"); } - int lvbe_label_set_text_static(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_set_text_static, "", "(lv_obj)s"); } - int lvbe_label_set_long_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_set_long_mode, "", "(lv_obj)i"); } - int lvbe_label_set_align(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_set_align, "", "(lv_obj)i"); } - int lvbe_label_set_recolor(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_set_recolor, "", "(lv_obj)b"); } - int lvbe_label_set_anim_speed(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_set_anim_speed, "", "(lv_obj)i"); } - int lvbe_label_set_text_sel_start(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_set_text_sel_start, "", "(lv_obj)i"); } - int lvbe_label_set_text_sel_end(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_set_text_sel_end, "", "(lv_obj)i"); } - int lvbe_label_get_text(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_get_text, "s", "(lv_obj)"); } - int lvbe_label_get_long_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_get_long_mode, "i", "(lv_obj)"); } - int lvbe_label_get_align(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_get_align, "i", "(lv_obj)"); } - int lvbe_label_get_recolor(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_get_recolor, "b", "(lv_obj)"); } - int lvbe_label_get_anim_speed(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_get_anim_speed, "i", "(lv_obj)"); } - int lvbe_label_get_letter_pos(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_get_letter_pos, "", "(lv_obj)i(lv_point)"); } - int lvbe_label_get_letter_on(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_get_letter_on, "i", "(lv_obj)(lv_point)"); } - int lvbe_label_is_char_under_pos(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_is_char_under_pos, "b", "(lv_obj)(lv_point)"); } - int lvbe_label_get_text_sel_start(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_get_text_sel_start, "i", "(lv_obj)"); } - int lvbe_label_get_text_sel_end(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_get_text_sel_end, "i", "(lv_obj)"); } - int lvbe_label_ins_text(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_ins_text, "", "(lv_obj)is"); } - int lvbe_label_cut_text(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_cut_text, "", "(lv_obj)ii"); } - int lvbe_label_refr_text(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_refr_text, "", "(lv_obj)"); } + int lvbe_label_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_create, "+lv_label", "(lv_obj)(lv_obj)"); } /* `lv_led` methods */ - int lvbe_led_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_led_create, "lv_led", "(lv_obj)(lv_obj)"); } - int lvbe_led_set_bright(bvm *vm) { return be_call_c_func(vm, (void*) &lv_led_set_bright, "", "(lv_obj)i"); } - int lvbe_led_on(bvm *vm) { return be_call_c_func(vm, (void*) &lv_led_on, "", "(lv_obj)"); } - int lvbe_led_off(bvm *vm) { return be_call_c_func(vm, (void*) &lv_led_off, "", "(lv_obj)"); } - int lvbe_led_toggle(bvm *vm) { return be_call_c_func(vm, (void*) &lv_led_toggle, "", "(lv_obj)"); } - int lvbe_led_get_bright(bvm *vm) { return be_call_c_func(vm, (void*) &lv_led_get_bright, "i", "(lv_obj)"); } + int lvbe_led_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_led_create, "+lv_led", "(lv_obj)(lv_obj)"); } /* `lv_line` methods */ - int lvbe_line_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_line_create, "lv_line", "(lv_obj)(lv_obj)"); } - int lvbe_line_set_points(bvm *vm) { return be_call_c_func(vm, (void*) &lv_line_set_points, "", "(lv_obj)ii"); } - int lvbe_line_set_auto_size(bvm *vm) { return be_call_c_func(vm, (void*) &lv_line_set_auto_size, "", "(lv_obj)b"); } - int lvbe_line_set_y_invert(bvm *vm) { return be_call_c_func(vm, (void*) &lv_line_set_y_invert, "", "(lv_obj)b"); } - int lvbe_line_get_auto_size(bvm *vm) { return be_call_c_func(vm, (void*) &lv_line_get_auto_size, "b", "(lv_obj)"); } - int lvbe_line_get_y_invert(bvm *vm) { return be_call_c_func(vm, (void*) &lv_line_get_y_invert, "b", "(lv_obj)"); } + int lvbe_line_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_line_create, "+lv_line", "(lv_obj)(lv_obj)"); } /* `lv_linemeter` methods */ - int lvbe_linemeter_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_linemeter_create, "lv_linemeter", "(lv_obj)(lv_obj)"); } - int lvbe_linemeter_set_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_linemeter_set_value, "", "(lv_obj)i"); } - int lvbe_linemeter_set_range(bvm *vm) { return be_call_c_func(vm, (void*) &lv_linemeter_set_range, "", "(lv_obj)ii"); } - int lvbe_linemeter_set_scale(bvm *vm) { return be_call_c_func(vm, (void*) &lv_linemeter_set_scale, "", "(lv_obj)ii"); } - int lvbe_linemeter_set_angle_offset(bvm *vm) { return be_call_c_func(vm, (void*) &lv_linemeter_set_angle_offset, "", "(lv_obj)i"); } - int lvbe_linemeter_set_mirror(bvm *vm) { return be_call_c_func(vm, (void*) &lv_linemeter_set_mirror, "", "(lv_obj)b"); } - int lvbe_linemeter_get_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_linemeter_get_value, "i", "(lv_obj)"); } - int lvbe_linemeter_get_min_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_linemeter_get_min_value, "i", "(lv_obj)"); } - int lvbe_linemeter_get_max_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_linemeter_get_max_value, "i", "(lv_obj)"); } - int lvbe_linemeter_get_line_count(bvm *vm) { return be_call_c_func(vm, (void*) &lv_linemeter_get_line_count, "i", "(lv_obj)"); } - int lvbe_linemeter_get_scale_angle(bvm *vm) { return be_call_c_func(vm, (void*) &lv_linemeter_get_scale_angle, "i", "(lv_obj)"); } - int lvbe_linemeter_get_angle_offset(bvm *vm) { return be_call_c_func(vm, (void*) &lv_linemeter_get_angle_offset, "i", "(lv_obj)"); } - int lvbe_linemeter_draw_scale(bvm *vm) { return be_call_c_func(vm, (void*) &lv_linemeter_draw_scale, "", "(lv_obj)(lv_area)i"); } - int lvbe_linemeter_get_mirror(bvm *vm) { return be_call_c_func(vm, (void*) &lv_linemeter_get_mirror, "b", "(lv_obj)"); } + int lvbe_linemeter_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_linemeter_create, "+lv_linemeter", "(lv_obj)(lv_obj)"); } /* `lv_list` methods */ - int lvbe_list_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_list_create, "lv_list", "(lv_obj)(lv_obj)"); } - int lvbe_list_clean(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_clean, "", "(lv_obj)"); } - int lvbe_list_add_btn(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_add_btn, "lv_obj", "(lv_obj)is"); } - int lvbe_list_remove(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_remove, "b", "(lv_obj)i"); } - int lvbe_list_focus_btn(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_focus_btn, "", "(lv_obj)(lv_obj)"); } - int lvbe_list_set_scrollbar_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_set_scrollbar_mode, "", "(lv_obj)i"); } - int lvbe_list_set_scroll_propagation(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_set_scroll_propagation, "", "(lv_obj)b"); } - int lvbe_list_set_edge_flash(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_set_edge_flash, "", "(lv_obj)b"); } - int lvbe_list_set_anim_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_set_anim_time, "", "(lv_obj)i"); } - int lvbe_list_set_layout(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_set_layout, "", "(lv_obj)i"); } - int lvbe_list_get_btn_text(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_get_btn_text, "s", "(lv_obj)"); } - int lvbe_list_get_btn_label(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_get_btn_label, "lv_obj", "(lv_obj)"); } - int lvbe_list_get_btn_img(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_get_btn_img, "lv_obj", "(lv_obj)"); } - int lvbe_list_get_prev_btn(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_get_prev_btn, "lv_obj", "(lv_obj)(lv_obj)"); } - int lvbe_list_get_next_btn(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_get_next_btn, "lv_obj", "(lv_obj)(lv_obj)"); } - int lvbe_list_get_btn_index(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_get_btn_index, "i", "(lv_obj)(lv_obj)"); } - int lvbe_list_get_size(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_get_size, "i", "(lv_obj)"); } - int lvbe_list_get_btn_selected(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_get_btn_selected, "lv_obj", "(lv_obj)"); } - int lvbe_list_get_layout(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_get_layout, "i", "(lv_obj)"); } - int lvbe_list_get_scrollbar_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_get_scrollbar_mode, "i", "(lv_obj)"); } - int lvbe_list_get_scroll_propagation(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_get_scroll_propagation, "b", "(lv_obj)"); } - int lvbe_list_get_edge_flash(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_get_edge_flash, "b", "(lv_obj)"); } - int lvbe_list_get_anim_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_get_anim_time, "i", "(lv_obj)"); } - int lvbe_list_up(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_up, "", "(lv_obj)"); } - int lvbe_list_down(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_down, "", "(lv_obj)"); } - int lvbe_list_focus(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_focus, "", "(lv_obj)(lv_anim_enable)"); } + int lvbe_list_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_create, "+lv_list", "(lv_obj)(lv_obj)"); } /* `lv_msgbox` methods */ - int lvbe_msgbox_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_msgbox_create, "lv_msgbox", "(lv_obj)(lv_obj)"); } - int lvbe_msgbox_add_btns(bvm *vm) { return be_call_c_func(vm, (void*) &lv_msgbox_add_btns, "", "(lv_obj)s"); } - int lvbe_msgbox_set_text(bvm *vm) { return be_call_c_func(vm, (void*) &lv_msgbox_set_text, "", "(lv_obj)s"); } - int lvbe_msgbox_set_text_fmt(bvm *vm) { return be_call_c_func(vm, (void*) &lv_msgbox_set_text_fmt, "", "(lv_obj)s"); } - int lvbe_msgbox_set_anim_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_msgbox_set_anim_time, "", "(lv_obj)i"); } - int lvbe_msgbox_start_auto_close(bvm *vm) { return be_call_c_func(vm, (void*) &lv_msgbox_start_auto_close, "", "(lv_obj)i"); } - int lvbe_msgbox_stop_auto_close(bvm *vm) { return be_call_c_func(vm, (void*) &lv_msgbox_stop_auto_close, "", "(lv_obj)"); } - int lvbe_msgbox_set_recolor(bvm *vm) { return be_call_c_func(vm, (void*) &lv_msgbox_set_recolor, "", "(lv_obj)b"); } - int lvbe_msgbox_get_text(bvm *vm) { return be_call_c_func(vm, (void*) &lv_msgbox_get_text, "s", "(lv_obj)"); } - int lvbe_msgbox_get_active_btn(bvm *vm) { return be_call_c_func(vm, (void*) &lv_msgbox_get_active_btn, "i", "(lv_obj)"); } - int lvbe_msgbox_get_active_btn_text(bvm *vm) { return be_call_c_func(vm, (void*) &lv_msgbox_get_active_btn_text, "s", "(lv_obj)"); } - int lvbe_msgbox_get_anim_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_msgbox_get_anim_time, "i", "(lv_obj)"); } - int lvbe_msgbox_get_recolor(bvm *vm) { return be_call_c_func(vm, (void*) &lv_msgbox_get_recolor, "b", "(lv_obj)"); } - int lvbe_msgbox_get_btnmatrix(bvm *vm) { return be_call_c_func(vm, (void*) &lv_msgbox_get_btnmatrix, "lv_obj", "(lv_obj)"); } + int lvbe_msgbox_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_msgbox_create, "+lv_msgbox", "(lv_obj)(lv_obj)"); } /* `lv_objmask` methods */ - int lvbe_objmask_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_objmask_create, "lv_objmask", "(lv_obj)(lv_obj)"); } - int lvbe_objmask_update_mask(bvm *vm) { return be_call_c_func(vm, (void*) &lv_objmask_update_mask, "", "(lv_obj)(lv_objmask_mask)i"); } - int lvbe_objmask_remove_mask(bvm *vm) { return be_call_c_func(vm, (void*) &lv_objmask_remove_mask, "", "(lv_obj)(lv_objmask_mask)"); } + int lvbe_objmask_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_objmask_create, "+lv_objmask", "(lv_obj)(lv_obj)"); } /* `lv_page` methods */ - int lvbe_page_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_page_create, "lv_page", "(lv_obj)(lv_obj)"); } - int lvbe_page_clean(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_clean, "", "(lv_obj)"); } - int lvbe_page_get_scrollable(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_get_scrollable, "lv_obj", "(lv_obj)"); } - int lvbe_page_get_anim_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_get_anim_time, "i", "(lv_obj)"); } - int lvbe_page_set_scrollbar_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_set_scrollbar_mode, "", "(lv_obj)i"); } - int lvbe_page_set_anim_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_set_anim_time, "", "(lv_obj)i"); } - int lvbe_page_set_scroll_propagation(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_set_scroll_propagation, "", "(lv_obj)b"); } - int lvbe_page_set_edge_flash(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_set_edge_flash, "", "(lv_obj)b"); } - int lvbe_page_set_scrollable_fit2(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_set_scrollable_fit2, "", "(lv_obj)ii"); } - int lvbe_page_set_scrollable_fit(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_set_scrollable_fit, "", "(lv_obj)i"); } - int lvbe_page_set_scrl_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_set_scrl_width, "", "(lv_obj)i"); } - int lvbe_page_set_scrl_height(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_set_scrl_height, "", "(lv_obj)i"); } - int lvbe_page_set_scrl_layout(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_set_scrl_layout, "", "(lv_obj)i"); } - int lvbe_page_get_scrollbar_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_get_scrollbar_mode, "i", "(lv_obj)"); } - int lvbe_page_get_scroll_propagation(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_get_scroll_propagation, "b", "(lv_obj)"); } - int lvbe_page_get_edge_flash(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_get_edge_flash, "b", "(lv_obj)"); } - int lvbe_page_get_width_fit(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_get_width_fit, "i", "(lv_obj)"); } - int lvbe_page_get_height_fit(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_get_height_fit, "i", "(lv_obj)"); } - int lvbe_page_get_width_grid(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_get_width_grid, "i", "(lv_obj)ii"); } - int lvbe_page_get_height_grid(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_get_height_grid, "i", "(lv_obj)ii"); } - int lvbe_page_get_scrl_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_get_scrl_width, "i", "(lv_obj)"); } - int lvbe_page_get_scrl_height(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_get_scrl_height, "i", "(lv_obj)"); } - int lvbe_page_get_scrl_layout(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_get_scrl_layout, "i", "(lv_obj)"); } - int lvbe_page_get_scrl_fit_left(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_get_scrl_fit_left, "i", "(lv_obj)"); } - int lvbe_page_get_scrl_fit_right(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_get_scrl_fit_right, "i", "(lv_obj)"); } - int lvbe_page_get_scrl_fit_top(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_get_scrl_fit_top, "i", "(lv_obj)"); } - int lvbe_page_get_scrl_fit_bottom(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_get_scrl_fit_bottom, "i", "(lv_obj)"); } - int lvbe_page_on_edge(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_on_edge, "b", "(lv_obj)(lv_page_edge)"); } - int lvbe_page_glue_obj(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_glue_obj, "", "(lv_obj)b"); } - int lvbe_page_focus(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_focus, "", "(lv_obj)(lv_obj)(lv_anim_enable)"); } - int lvbe_page_scroll_hor(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_scroll_hor, "", "(lv_obj)i"); } - int lvbe_page_scroll_ver(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_scroll_ver, "", "(lv_obj)i"); } - int lvbe_page_start_edge_flash(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_start_edge_flash, "", "(lv_obj)(lv_page_edge)"); } + int lvbe_page_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_create, "+lv_page", "(lv_obj)(lv_obj)"); } /* `lv_roller` methods */ - int lvbe_roller_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_roller_create, "lv_roller", "(lv_obj)(lv_obj)"); } - int lvbe_roller_set_options(bvm *vm) { return be_call_c_func(vm, (void*) &lv_roller_set_options, "", "(lv_obj)s(lv_roller_mode)"); } - int lvbe_roller_set_align(bvm *vm) { return be_call_c_func(vm, (void*) &lv_roller_set_align, "", "(lv_obj)i"); } - int lvbe_roller_set_selected(bvm *vm) { return be_call_c_func(vm, (void*) &lv_roller_set_selected, "", "(lv_obj)i(lv_anim_enable)"); } - int lvbe_roller_set_visible_row_count(bvm *vm) { return be_call_c_func(vm, (void*) &lv_roller_set_visible_row_count, "", "(lv_obj)i"); } - int lvbe_roller_set_auto_fit(bvm *vm) { return be_call_c_func(vm, (void*) &lv_roller_set_auto_fit, "", "(lv_obj)b"); } - int lvbe_roller_set_anim_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_roller_set_anim_time, "", "(lv_obj)i"); } - int lvbe_roller_get_selected(bvm *vm) { return be_call_c_func(vm, (void*) &lv_roller_get_selected, "i", "(lv_obj)"); } - int lvbe_roller_get_option_cnt(bvm *vm) { return be_call_c_func(vm, (void*) &lv_roller_get_option_cnt, "i", "(lv_obj)"); } - int lvbe_roller_get_selected_str(bvm *vm) { return be_call_c_func(vm, (void*) &lv_roller_get_selected_str, "", "(lv_obj)si"); } - int lvbe_roller_get_align(bvm *vm) { return be_call_c_func(vm, (void*) &lv_roller_get_align, "i", "(lv_obj)"); } - int lvbe_roller_get_auto_fit(bvm *vm) { return be_call_c_func(vm, (void*) &lv_roller_get_auto_fit, "b", "(lv_obj)"); } - int lvbe_roller_get_options(bvm *vm) { return be_call_c_func(vm, (void*) &lv_roller_get_options, "s", "(lv_obj)"); } - int lvbe_roller_get_anim_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_roller_get_anim_time, "i", "(lv_obj)"); } + int lvbe_roller_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_roller_create, "+lv_roller", "(lv_obj)(lv_obj)"); } /* `lv_slider` methods */ - int lvbe_slider_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_slider_create, "lv_slider", "(lv_obj)(lv_obj)"); } - int lvbe_slider_set_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_slider_set_value, "", "(lv_obj)i(lv_anim_enable)"); } - int lvbe_slider_set_left_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_slider_set_left_value, "", "(lv_obj)i(lv_anim_enable)"); } - int lvbe_slider_set_range(bvm *vm) { return be_call_c_func(vm, (void*) &lv_slider_set_range, "", "(lv_obj)ii"); } - int lvbe_slider_set_anim_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_slider_set_anim_time, "", "(lv_obj)i"); } - int lvbe_slider_set_type(bvm *vm) { return be_call_c_func(vm, (void*) &lv_slider_set_type, "", "(lv_obj)i"); } - int lvbe_slider_get_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_slider_get_value, "i", "(lv_obj)"); } - int lvbe_slider_get_left_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_slider_get_left_value, "i", "(lv_obj)"); } - int lvbe_slider_get_min_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_slider_get_min_value, "i", "(lv_obj)"); } - int lvbe_slider_get_max_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_slider_get_max_value, "i", "(lv_obj)"); } - int lvbe_slider_is_dragged(bvm *vm) { return be_call_c_func(vm, (void*) &lv_slider_is_dragged, "b", "(lv_obj)"); } - int lvbe_slider_get_anim_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_slider_get_anim_time, "i", "(lv_obj)"); } - int lvbe_slider_get_type(bvm *vm) { return be_call_c_func(vm, (void*) &lv_slider_get_type, "i", "(lv_obj)"); } + int lvbe_slider_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_slider_create, "+lv_slider", "(lv_obj)(lv_obj)"); } /* `lv_spinbox` methods */ - int lvbe_spinbox_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_spinbox_create, "lv_spinbox", "(lv_obj)(lv_obj)"); } - int lvbe_spinbox_set_rollover(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinbox_set_rollover, "", "(lv_obj)b"); } - int lvbe_spinbox_set_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinbox_set_value, "", "(lv_obj)i"); } - int lvbe_spinbox_set_digit_format(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinbox_set_digit_format, "", "(lv_obj)ii"); } - int lvbe_spinbox_set_step(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinbox_set_step, "", "(lv_obj)i"); } - int lvbe_spinbox_set_range(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinbox_set_range, "", "(lv_obj)ii"); } - int lvbe_spinbox_set_padding_left(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinbox_set_padding_left, "", "(lv_obj)i"); } - int lvbe_spinbox_get_rollover(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinbox_get_rollover, "b", "(lv_obj)"); } - int lvbe_spinbox_get_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinbox_get_value, "i", "(lv_obj)"); } - int lvbe_spinbox_get_step(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinbox_get_step, "i", "(lv_obj)"); } - int lvbe_spinbox_step_next(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinbox_step_next, "", "(lv_obj)"); } - int lvbe_spinbox_step_prev(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinbox_step_prev, "", "(lv_obj)"); } - int lvbe_spinbox_increment(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinbox_increment, "", "(lv_obj)"); } - int lvbe_spinbox_decrement(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinbox_decrement, "", "(lv_obj)"); } + int lvbe_spinbox_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinbox_create, "+lv_spinbox", "(lv_obj)(lv_obj)"); } /* `lv_spinner` methods */ - int lvbe_spinner_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_spinner_create, "lv_spinner", "(lv_obj)(lv_obj)"); } - int lvbe_spinner_set_arc_length(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinner_set_arc_length, "", "(lv_obj)i"); } - int lvbe_spinner_set_spin_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinner_set_spin_time, "", "(lv_obj)i"); } - int lvbe_spinner_set_type(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinner_set_type, "", "(lv_obj)i"); } - int lvbe_spinner_set_dir(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinner_set_dir, "", "(lv_obj)i"); } - int lvbe_spinner_get_arc_length(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinner_get_arc_length, "i", "(lv_obj)"); } - int lvbe_spinner_get_spin_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinner_get_spin_time, "i", "(lv_obj)"); } - int lvbe_spinner_get_type(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinner_get_type, "i", "(lv_obj)"); } - int lvbe_spinner_get_dir(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinner_get_dir, "i", "(lv_obj)"); } - int lvbe_spinner_anim_cb(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinner_anim_cb, "", "ii"); } + int lvbe_spinner_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinner_create, "+lv_spinner", "(lv_obj)(lv_obj)"); } /* `lv_switch` methods */ - int lvbe_switch_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_switch_create, "lv_switch", "(lv_obj)(lv_obj)"); } - int lvbe_switch_on(bvm *vm) { return be_call_c_func(vm, (void*) &lv_switch_on, "", "(lv_obj)(lv_anim_enable)"); } - int lvbe_switch_off(bvm *vm) { return be_call_c_func(vm, (void*) &lv_switch_off, "", "(lv_obj)(lv_anim_enable)"); } - int lvbe_switch_toggle(bvm *vm) { return be_call_c_func(vm, (void*) &lv_switch_toggle, "b", "(lv_obj)(lv_anim_enable)"); } - int lvbe_switch_set_anim_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_switch_set_anim_time, "", "(lv_obj)i"); } - int lvbe_switch_get_state(bvm *vm) { return be_call_c_func(vm, (void*) &lv_switch_get_state, "b", "(lv_obj)"); } - int lvbe_switch_get_anim_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_switch_get_anim_time, "i", "(lv_obj)"); } + int lvbe_switch_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_switch_create, "+lv_switch", "(lv_obj)(lv_obj)"); } /* `lv_table` methods */ - int lvbe_table_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_table_create, "lv_table", "(lv_obj)(lv_obj)"); } - int lvbe_table_set_cell_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_table_set_cell_value, "", "(lv_obj)iis"); } - int lvbe_table_set_cell_value_fmt(bvm *vm) { return be_call_c_func(vm, (void*) &lv_table_set_cell_value_fmt, "", "(lv_obj)iis"); } - int lvbe_table_set_row_cnt(bvm *vm) { return be_call_c_func(vm, (void*) &lv_table_set_row_cnt, "", "(lv_obj)i"); } - int lvbe_table_set_col_cnt(bvm *vm) { return be_call_c_func(vm, (void*) &lv_table_set_col_cnt, "", "(lv_obj)i"); } - int lvbe_table_set_col_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_table_set_col_width, "", "(lv_obj)ii"); } - int lvbe_table_set_cell_align(bvm *vm) { return be_call_c_func(vm, (void*) &lv_table_set_cell_align, "", "(lv_obj)iii"); } - int lvbe_table_set_cell_type(bvm *vm) { return be_call_c_func(vm, (void*) &lv_table_set_cell_type, "", "(lv_obj)iii"); } - int lvbe_table_set_cell_crop(bvm *vm) { return be_call_c_func(vm, (void*) &lv_table_set_cell_crop, "", "(lv_obj)iib"); } - int lvbe_table_set_cell_merge_right(bvm *vm) { return be_call_c_func(vm, (void*) &lv_table_set_cell_merge_right, "", "(lv_obj)iib"); } - int lvbe_table_get_cell_value(bvm *vm) { return be_call_c_func(vm, (void*) &lv_table_get_cell_value, "s", "(lv_obj)ii"); } - int lvbe_table_get_row_cnt(bvm *vm) { return be_call_c_func(vm, (void*) &lv_table_get_row_cnt, "i", "(lv_obj)"); } - int lvbe_table_get_col_cnt(bvm *vm) { return be_call_c_func(vm, (void*) &lv_table_get_col_cnt, "i", "(lv_obj)"); } - int lvbe_table_get_col_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_table_get_col_width, "i", "(lv_obj)i"); } - int lvbe_table_get_cell_align(bvm *vm) { return be_call_c_func(vm, (void*) &lv_table_get_cell_align, "i", "(lv_obj)ii"); } - int lvbe_table_get_cell_type(bvm *vm) { return be_call_c_func(vm, (void*) &lv_table_get_cell_type, "i", "(lv_obj)ii"); } - int lvbe_table_get_cell_crop(bvm *vm) { return be_call_c_func(vm, (void*) &lv_table_get_cell_crop, "i", "(lv_obj)ii"); } - int lvbe_table_get_cell_merge_right(bvm *vm) { return be_call_c_func(vm, (void*) &lv_table_get_cell_merge_right, "b", "(lv_obj)ii"); } - int lvbe_table_get_pressed_cell(bvm *vm) { return be_call_c_func(vm, (void*) &lv_table_get_pressed_cell, "i", "(lv_obj)(uint16)(uint16)"); } + int lvbe_table_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_table_create, "+lv_table", "(lv_obj)(lv_obj)"); } /* `lv_tabview` methods */ - int lvbe_tabview_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_tabview_create, "lv_tabview", "(lv_obj)(lv_obj)"); } - int lvbe_tabview_add_tab(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tabview_add_tab, "lv_obj", "(lv_obj)s"); } - int lvbe_tabview_clean_tab(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tabview_clean_tab, "", "(lv_obj)"); } - int lvbe_tabview_set_tab_act(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tabview_set_tab_act, "", "(lv_obj)i(lv_anim_enable)"); } - int lvbe_tabview_set_tab_name(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tabview_set_tab_name, "", "(lv_obj)is"); } - int lvbe_tabview_set_anim_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tabview_set_anim_time, "", "(lv_obj)i"); } - int lvbe_tabview_set_btns_pos(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tabview_set_btns_pos, "", "(lv_obj)i"); } - int lvbe_tabview_get_tab_act(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tabview_get_tab_act, "i", "(lv_obj)"); } - int lvbe_tabview_get_tab_count(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tabview_get_tab_count, "i", "(lv_obj)"); } - int lvbe_tabview_get_tab(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tabview_get_tab, "lv_obj", "(lv_obj)i"); } - int lvbe_tabview_get_anim_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tabview_get_anim_time, "i", "(lv_obj)"); } - int lvbe_tabview_get_btns_pos(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tabview_get_btns_pos, "i", "(lv_obj)"); } + int lvbe_tabview_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tabview_create, "+lv_tabview", "(lv_obj)(lv_obj)"); } /* `lv_textarea` methods */ - int lvbe_textarea_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_textarea_create, "lv_textarea", "(lv_obj)(lv_obj)"); } - int lvbe_textarea_add_char(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_add_char, "", "(lv_obj)i"); } - int lvbe_textarea_add_text(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_add_text, "", "(lv_obj)s"); } - int lvbe_textarea_del_char(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_del_char, "", "(lv_obj)"); } - int lvbe_textarea_del_char_forward(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_del_char_forward, "", "(lv_obj)"); } - int lvbe_textarea_set_text(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_set_text, "", "(lv_obj)s"); } - int lvbe_textarea_set_placeholder_text(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_set_placeholder_text, "", "(lv_obj)s"); } - int lvbe_textarea_set_cursor_pos(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_set_cursor_pos, "", "(lv_obj)i"); } - int lvbe_textarea_set_cursor_hidden(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_set_cursor_hidden, "", "(lv_obj)b"); } - int lvbe_textarea_set_cursor_click_pos(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_set_cursor_click_pos, "", "(lv_obj)b"); } - int lvbe_textarea_set_pwd_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_set_pwd_mode, "", "(lv_obj)b"); } - int lvbe_textarea_set_one_line(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_set_one_line, "", "(lv_obj)b"); } - int lvbe_textarea_set_text_align(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_set_text_align, "", "(lv_obj)i"); } - int lvbe_textarea_set_accepted_chars(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_set_accepted_chars, "", "(lv_obj)s"); } - int lvbe_textarea_set_max_length(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_set_max_length, "", "(lv_obj)i"); } - int lvbe_textarea_set_insert_replace(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_set_insert_replace, "", "(lv_obj)s"); } - int lvbe_textarea_set_scrollbar_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_set_scrollbar_mode, "", "(lv_obj)i"); } - int lvbe_textarea_set_scroll_propagation(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_set_scroll_propagation, "", "(lv_obj)b"); } - int lvbe_textarea_set_edge_flash(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_set_edge_flash, "", "(lv_obj)b"); } - int lvbe_textarea_set_text_sel(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_set_text_sel, "", "(lv_obj)b"); } - int lvbe_textarea_set_pwd_show_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_set_pwd_show_time, "", "(lv_obj)i"); } - int lvbe_textarea_set_cursor_blink_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_set_cursor_blink_time, "", "(lv_obj)i"); } - int lvbe_textarea_get_text(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_get_text, "s", "(lv_obj)"); } - int lvbe_textarea_get_placeholder_text(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_get_placeholder_text, "s", "(lv_obj)"); } - int lvbe_textarea_get_label(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_get_label, "lv_obj", "(lv_obj)"); } - int lvbe_textarea_get_cursor_pos(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_get_cursor_pos, "i", "(lv_obj)"); } - int lvbe_textarea_get_cursor_hidden(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_get_cursor_hidden, "b", "(lv_obj)"); } - int lvbe_textarea_get_cursor_click_pos(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_get_cursor_click_pos, "b", "(lv_obj)"); } - int lvbe_textarea_get_pwd_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_get_pwd_mode, "b", "(lv_obj)"); } - int lvbe_textarea_get_one_line(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_get_one_line, "b", "(lv_obj)"); } - int lvbe_textarea_get_accepted_chars(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_get_accepted_chars, "s", "(lv_obj)"); } - int lvbe_textarea_get_max_length(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_get_max_length, "i", "(lv_obj)"); } - int lvbe_textarea_get_scrollbar_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_get_scrollbar_mode, "i", "(lv_obj)"); } - int lvbe_textarea_get_scroll_propagation(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_get_scroll_propagation, "b", "(lv_obj)"); } - int lvbe_textarea_get_edge_flash(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_get_edge_flash, "b", "(lv_obj)"); } - int lvbe_textarea_text_is_selected(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_text_is_selected, "b", "(lv_obj)"); } - int lvbe_textarea_get_text_sel_en(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_get_text_sel_en, "b", "(lv_obj)"); } - int lvbe_textarea_get_pwd_show_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_get_pwd_show_time, "i", "(lv_obj)"); } - int lvbe_textarea_get_cursor_blink_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_get_cursor_blink_time, "i", "(lv_obj)"); } - int lvbe_textarea_clear_selection(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_clear_selection, "", "(lv_obj)"); } - int lvbe_textarea_cursor_right(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_cursor_right, "", "(lv_obj)"); } - int lvbe_textarea_cursor_left(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_cursor_left, "", "(lv_obj)"); } - int lvbe_textarea_cursor_down(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_cursor_down, "", "(lv_obj)"); } - int lvbe_textarea_cursor_up(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_cursor_up, "", "(lv_obj)"); } + int lvbe_textarea_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_create, "+lv_textarea", "(lv_obj)(lv_obj)"); } /* `lv_tileview` methods */ - int lvbe_tileview_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_tileview_create, "lv_tileview", "(lv_obj)(lv_obj)"); } - int lvbe_tileview_add_element(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tileview_add_element, "", "(lv_obj)(lv_obj)"); } - int lvbe_tileview_set_valid_positions(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tileview_set_valid_positions, "", "(lv_obj)ii"); } - int lvbe_tileview_set_tile_act(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tileview_set_tile_act, "", "(lv_obj)ii(lv_anim_enable)"); } - int lvbe_tileview_set_edge_flash(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tileview_set_edge_flash, "", "(lv_obj)b"); } - int lvbe_tileview_set_anim_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tileview_set_anim_time, "", "(lv_obj)i"); } - int lvbe_tileview_get_tile_act(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tileview_get_tile_act, "", "(lv_obj)(lv_coord)(lv_coord)"); } - int lvbe_tileview_get_edge_flash(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tileview_get_edge_flash, "b", "(lv_obj)"); } - int lvbe_tileview_get_anim_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tileview_get_anim_time, "i", "(lv_obj)"); } + int lvbe_tileview_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tileview_create, "+lv_tileview", "(lv_obj)(lv_obj)"); } /* `lv_win` methods */ - int lvbe_win_create(bvm *vm) { return lvx_init_2(vm, (void*) &lv_win_create, "lv_win", "(lv_obj)(lv_obj)"); } - int lvbe_win_clean(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_clean, "", "(lv_obj)"); } - int lvbe_win_add_btn_right(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_add_btn_right, "lv_obj", "(lv_obj)i"); } - int lvbe_win_add_btn_left(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_add_btn_left, "lv_obj", "(lv_obj)i"); } - int lvbe_win_close_event_cb(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_close_event_cb, "", "(lv_obj)(lv_event)"); } - int lvbe_win_set_title(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_set_title, "", "(lv_obj)s"); } - int lvbe_win_set_header_height(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_set_header_height, "", "(lv_obj)i"); } - int lvbe_win_set_btn_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_set_btn_width, "", "(lv_obj)i"); } - int lvbe_win_set_content_size(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_set_content_size, "", "(lv_obj)ii"); } - int lvbe_win_set_layout(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_set_layout, "", "(lv_obj)i"); } - int lvbe_win_set_scrollbar_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_set_scrollbar_mode, "", "(lv_obj)i"); } - int lvbe_win_set_anim_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_set_anim_time, "", "(lv_obj)i"); } - int lvbe_win_set_drag(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_set_drag, "", "(lv_obj)b"); } - int lvbe_win_title_set_alignment(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_title_set_alignment, "", "(lv_obj)i"); } - int lvbe_win_get_title(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_get_title, "s", "(lv_obj)"); } - int lvbe_win_get_content(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_get_content, "lv_obj", "(lv_obj)"); } - int lvbe_win_get_header_height(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_get_header_height, "i", "(lv_obj)"); } - int lvbe_win_get_btn_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_get_btn_width, "i", "(lv_obj)"); } - int lvbe_win_get_from_btn(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_get_from_btn, "lv_obj", "(lv_obj)"); } - int lvbe_win_get_layout(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_get_layout, "i", "(lv_obj)"); } - int lvbe_win_get_sb_mode(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_get_sb_mode, "i", "(lv_obj)"); } - int lvbe_win_get_anim_time(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_get_anim_time, "i", "(lv_obj)"); } - int lvbe_win_get_width(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_get_width, "i", "(lv_obj)"); } - int lvbe_win_get_drag(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_get_drag, "b", "(lv_obj)"); } - int lvbe_win_title_get_alignment(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_title_get_alignment, "i", "(lv_obj)"); } - int lvbe_win_focus(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_focus, "", "(lv_obj)(lv_obj)(lv_anim_enable)"); } - int lvbe_win_scroll_hor(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_scroll_hor, "", "(lv_obj)i"); } - int lvbe_win_scroll_ver(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_scroll_ver, "", "(lv_obj)i"); } + int lvbe_win_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_create, "+lv_win", "(lv_obj)(lv_obj)"); } extern void be_load_lv_img_lib(bvm *vm); diff --git a/tasmota/xdrv_10_scripter.ino b/tasmota/xdrv_10_scripter.ino index b773a264d..8cfde19f1 100755 --- a/tasmota/xdrv_10_scripter.ino +++ b/tasmota/xdrv_10_scripter.ino @@ -8386,11 +8386,6 @@ bool Xdrv10(uint8_t function) case FUNC_EVERY_100_MSECOND: ScripterEvery100ms(); break; -#ifdef USE_LVGL - case FUNC_EVERY_50_MSECOND: - lv_task_handler(); - break; -#endif // USE_LVGL case FUNC_EVERY_SECOND: ScriptEverySecond(); diff --git a/tasmota/xdrv_52_3_berry_lvgl.ino b/tasmota/xdrv_52_3_berry_lvgl.ino index 9d291a05a..5fb4fa5ff 100644 --- a/tasmota/xdrv_52_3_berry_lvgl.ino +++ b/tasmota/xdrv_52_3_berry_lvgl.ino @@ -30,6 +30,11 @@ #include "lv_freetype.h" #endif +// Berry easy logging +extern "C" { + extern void berry_log_C(const char * berry_buf, ...); +} + extern Adafruit_LvGL_Glue * glue; /******************************************************************** @@ -273,32 +278,185 @@ void be_check_arg_type(bvm *vm, int32_t argc, const char * arg_type, int32_t p[5 } typedef int32_t (*fn_any_callable)(int32_t p0, int32_t p1, int32_t p2, int32_t p3, int32_t p4); -int be_call_c_func(bvm *vm, void * func, const char * return_type = nullptr, const char * arg_type = nullptr) { - int32_t p[5] = {0,0,0,0,0}; - int32_t argc = be_top(vm); // Get the number of arguments +extern "C" { - fn_any_callable f = (fn_any_callable) func; - be_check_arg_type(vm, argc, arg_type, p); - // AddLog(LOG_LEVEL_INFO, ">> be_call_c_func(%p) - %p,%p,%p,%p,%p - %s", f, p[0], p[1], p[2], p[3], p[4], return_type); - int32_t ret = (*f)(p[0], p[1], p[2], p[3], p[4]); - // AddLog(LOG_LEVEL_INFO, ">> be_call_c_func, ret = %p", ret); - if ((return_type == nullptr) || (strlen(return_type) == 0)) { be_return_nil(vm); } // does not return - else if (strlen(return_type) == 1) { - switch (return_type[0]) { - case 'i': be_pushint(vm, ret); break; - case 'b': be_pushbool(vm, ret); break; - case 's': be_pushstring(vm, (const char*) ret); break; - default: be_raise(vm, "internal_error", "Unsupported return type"); break; + void lv_init_set_member(bvm *vm, int index, void * ptr); + + // called programmatically + int lvx_init_2(bvm *vm, void * func, const char * return_type, const char * arg_type = nullptr); + int lvx_init_2(bvm *vm, void * func, const char * return_type, const char * arg_type) { + int argc = be_top(vm); + lv_obj_t * obj1 = nullptr; + lv_obj_t * obj2 = nullptr; + + if (argc > 1) { + obj1 = (lv_obj_t*) be_convert_single_elt(vm, 2); + } + if (argc > 2) { + obj2 = (lv_obj_t*) be_convert_single_elt(vm, 3); + } + // AddLog(LOG_LEVEL_INFO, "argc %d lv_obj %p", argc, obj); + fn_any_callable f = (fn_any_callable) func; + // AddLog(LOG_LEVEL_INFO, ">> be_call_c_func(%p) - %p,%p,%p,%p,%p", f, p[0], p[1], p[2], p[3], p[4]); + lv_obj_t * obj; + if ((int32_t)obj1 == -1) { // special semantics of first ptr is -1, then just encapsulate + obj = obj2; + } else { // otherwise call the LVGL creator + obj = (lv_obj_t*) (*f)((int32_t)obj1, (int32_t)obj2, 0, 0, 0); + } + lv_init_set_member(vm, 1, obj); + be_return_nil(vm); + } + + // binary search within an array of sorted strings + // the first 4 bytes are a pointer to a string + // returns 0..total_elements-1 or -1 if not found + int32_t bin_search(const char * needle, const void * table, size_t elt_size, size_t total_elements) { + int32_t low = 0; + int32_t high = total_elements - 1; + int32_t mid = (low + high) / 2; + // start a dissect + while (low <= high) { + const char * elt = *(const char **) ( ((uint8_t*)table) + mid * elt_size ); + int32_t comp = strcmp(needle, elt); + if (comp < 0) { + high = mid - 1; + } else if (comp > 0) { + low = mid + 1; + } else { + break; + } + mid = (low + high) / 2; + } + if (low <= high) { + return mid; + } else { + return -1; + } + } + + int be_call_c_func(bvm *vm, void * func, const char * return_type, const char * arg_type); + + // native closure to call `be_call_c_func` + int lvx_call_c(bvm *vm) { + // keep parameters unchanged + be_getupval(vm, 0, 0); // if index is zero, it's the current native closure + void * func = be_tocomptr(vm, -1); + be_getupval(vm, 0, 1); // if index is zero, it's the current native closure + const char * return_type = be_tostring(vm, -1); + be_getupval(vm, 0, 2); // if index is zero, it's the current native closure + const char * arg_type = be_tostring(vm, -1); + be_pop(vm, 3); // remove 3 upvals + + // berry_log_C("lvx_call_c %p '%s' <- (%s)", func, return_type, arg_type); + return be_call_c_func(vm, func, return_type, arg_type); + } + + // table of functions per class + typedef struct lvbe_call_c_t { + const char * name; + void * func; + const char * return_type; + const char * arg_type; + } lvbe_call_c_t; + + // list of classes and function tables + typedef struct lvbe_call_c_classes_t { + const char * name; + const lvbe_call_c_t * func_table; + size_t size; + } lvbe_call_c_classes_t; + extern const lvbe_call_c_classes_t lv_classes[]; + extern const size_t lv_classes_size; + + // virtual method, arg1: instance, arg2: name of method + int lvx_member(bvm *vm) { + int32_t argc = be_top(vm); // Get the number of arguments + if (argc == 2 && be_isinstance(vm, 1) && be_isstring(vm, 2)) { + const char * method_name = be_tostring(vm, 2); // the method we are looking for + while (be_isinstance(vm, 1)) { + const char * class_name = be_classname(vm, 1); + // berry_log_C("lvx_member looking for method '%s' of class '%s'", method_name, class_name); + + // look for class descriptor + int32_t class_idx = bin_search(class_name, &lv_classes[0].name, sizeof(lv_classes[0]), lv_classes_size); + if (class_idx < 0) { + // class not found, abort + // berry_log_C("lvx_member class not found"); + be_return_nil(vm); + } + const lvbe_call_c_t * methods_calls = lv_classes[class_idx].func_table; + size_t methods_size = lv_classes[class_idx].size; + + int32_t method_idx = bin_search(method_name, methods_calls, sizeof(lvbe_call_c_t), methods_size); + if (method_idx >= 0) { + // method found + // berry_log_C("lvx_member method found"); + + const lvbe_call_c_t * method = &methods_calls[method_idx]; + // push native closure + be_pushntvclosure(vm, &lvx_call_c, 3); // 3 upvals + + be_pushcomptr(vm, method->func); + be_setupval(vm, -2, 0); + be_pop(vm, 1); + + be_pushstring(vm, method->return_type); + be_setupval(vm, -2, 1); + be_pop(vm, 1); + + be_pushstring(vm, method->arg_type); + be_setupval(vm, -2, 2); + be_pop(vm, 1); + + // all good + be_return(vm); + } + + // get super if any, or nil if none + be_getsuper(vm, 1); + be_moveto(vm, -1, 1); + be_pop(vm, 1); + } + // berry_log_C("lvx_member method not found"); + be_return_nil(vm); + } + be_raise(vm, kTypeError, nullptr); + } + + int be_call_c_func(bvm *vm, void * func, const char * return_type, const char * arg_type) { + int32_t p[5] = {0,0,0,0,0}; + int32_t argc = be_top(vm); // Get the number of arguments + + // check if we call a constructor + if (return_type && return_type[0] == '+') { + return_type++; // skip the leading '+' + return lvx_init_2(vm, func, return_type); + } + + fn_any_callable f = (fn_any_callable) func; + be_check_arg_type(vm, argc, arg_type, p); + // AddLog(LOG_LEVEL_INFO, ">> be_call_c_func(%p) - %p,%p,%p,%p,%p - %s", f, p[0], p[1], p[2], p[3], p[4], return_type); + int32_t ret = (*f)(p[0], p[1], p[2], p[3], p[4]); + // AddLog(LOG_LEVEL_INFO, ">> be_call_c_func, ret = %p", ret); + if ((return_type == nullptr) || (strlen(return_type) == 0)) { be_return_nil(vm); } // does not return + else if (strlen(return_type) == 1) { + switch (return_type[0]) { + case 'i': be_pushint(vm, ret); break; + case 'b': be_pushbool(vm, ret); break; + case 's': be_pushstring(vm, (const char*) ret); break; + default: be_raise(vm, "internal_error", "Unsupported return type"); break; + } + be_return(vm); + } else { // class name + // AddLog(LOG_LEVEL_INFO, ">> be_call_c_func, create_obj", ret); + be_getglobal(vm, return_type); // stack = class + be_pushcomptr(vm, (void*) -1); // stack = class, -1 + be_pushcomptr(vm, (void*) ret); // stack = class, -1, ptr + be_call(vm, 2); // instanciate with 2 arguments, stack = instance, -1, ptr + be_pop(vm, 2); // stack = instance + be_return(vm); } - be_return(vm); - } else { // class name - // AddLog(LOG_LEVEL_INFO, ">> be_call_c_func, create_obj", ret); - be_getglobal(vm, return_type); // stack = class - be_pushcomptr(vm, (void*) -1); // stack = class, -1 - be_pushcomptr(vm, (void*) ret); // stack = class, -1, ptr - be_call(vm, 2); // instanciate with 2 arguments, stack = instance, -1, ptr - be_pop(vm, 2); // stack = instance - be_return(vm); } } @@ -631,6 +789,51 @@ extern "C" { lv_img_set_src(img, &tasmota_logo_64_truecolor); } + /*********************************************************************************************\ + * LVGL top level virtual members + * + * Responds to virtual constants + \*********************************************************************************************/ + + typedef struct lvbe_constant_t { + const char * name; + int32_t value; + } lvbe_constant_t; + + extern const lvbe_constant_t lv0_constants[]; + extern const size_t lv0_constants_size; + + int lv0_member(bvm *vm); + int lv0_member(bvm *vm) { + int32_t argc = be_top(vm); // Get the number of arguments + if (argc == 1 && be_isstring(vm, 1)) { + const char * needle = be_tostring(vm, 1); + int32_t low = 0; + int32_t high = lv0_constants_size - 1; + int32_t mid = (low + high) / 2; + // start a dissect + while (low <= high) { + int32_t comp = strcmp(needle, lv0_constants[mid].name); + if (comp < 0) { + high = mid - 1; + } else if (comp > 0) { + low = mid + 1; + } else { + break; + } + mid = (low + high) / 2; + } + if (low <= high) { + // we did have a match, low == high + be_pushint(vm, lv0_constants[mid].value); + be_return(vm); + } else { + be_return_nil(vm); + } + } + be_raise(vm, kTypeError, nullptr); + } + /*********************************************************************************************\ * LVGL Start * @@ -790,32 +993,6 @@ extern "C" { be_return_nil(vm); } - // called programmatically - int lvx_init_2(bvm *vm, void * func, const char * return_type, const char * arg_type = nullptr); - int lvx_init_2(bvm *vm, void * func, const char * return_type, const char * arg_type) { - int argc = be_top(vm); - lv_obj_t * obj1 = nullptr; - lv_obj_t * obj2 = nullptr; - - if (argc > 1) { - obj1 = (lv_obj_t*) be_convert_single_elt(vm, 2); - } - if (argc > 2) { - obj2 = (lv_obj_t*) be_convert_single_elt(vm, 3); - } - // AddLog(LOG_LEVEL_INFO, "argc %d lv_obj %p", argc, obj); - fn_any_callable f = (fn_any_callable) func; - // AddLog(LOG_LEVEL_INFO, ">> be_call_c_func(%p) - %p,%p,%p,%p,%p", f, p[0], p[1], p[2], p[3], p[4]); - lv_obj_t * obj; - if ((int32_t)obj1 == -1) { // special semantics of first ptr is -1, then just encapsulate - obj = obj2; - } else { // otherwise call the LVGL creator - obj = (lv_obj_t*) (*f)((int32_t)obj1, (int32_t)obj2, 0, 0, 0); - } - lv_init_set_member(vm, 1, obj); - be_return_nil(vm); - } - int lvx_tostring(bvm *vm) { lv_obj_t * obj = (lv_obj_t*) lv_get_arg(vm, 1); const char * classname = be_classname(vm, 1); diff --git a/tools/lv_berry/convert.py b/tools/lv_berry/convert.py index c67711c8f..ee17241ae 100644 --- a/tools/lv_berry/convert.py +++ b/tools/lv_berry/convert.py @@ -221,7 +221,7 @@ with open(lv_module_file) as f: if v_num is not None: lv_module.append( [k, v_num] ) else: - lv_modile.append( [k, v] ) # keep as string + lv_module.append( [k, v] ) # keep as string # recursively try to match value # TODO @@ -262,8 +262,62 @@ print(""" #ifdef __cplusplus extern "C" { #endif + +// table of functions per class +// typedef struct lvbe_call_c_t { +// const char * name; +// void * func; +// const char * return_type; +// const char * arg_type; +// } lvbe_call_c_t; + +// list of classes and function tables +// typedef struct lvbe_call_c_classes_t { +// const char * name; +// const lvbe_call_c_t * func_table; +// size_t size; +// } lvbe_call_c_classes_t; + """) +for subtype, flv in lv.items(): + print(f"""/* `lv_{subtype}` methods */ +const lvbe_call_c_t lv_{subtype}_func[] = {{""") + + func_out = {} # used to sort output + for f in flv: + c_func_name = f[0] + c_ret_type = f[1] + c_argc = f[2] + if c_argc is not None: c_argc = "\"" + c_argc + "\"" + orig_func_name = f[3] + be_name = f[4] + if c_func_name.endswith("_create"): + c_ret_type = f"+lv_{subtype}" + func_out[be_name] = f" {{ \"{be_name}\", (void*) &{orig_func_name}, \"{c_ret_type}\", { c_argc if c_argc else 'nullptr'} }}," + + for be_name in sorted(func_out): + print(func_out[be_name]) + + print(f"""}}; +""") + +# print the global map of classes +print(f""" +// map of clases +const lvbe_call_c_classes_t lv_classes[] = {{""") + +for subtype in sorted(lv): +# for subtype, flv in lv.items(): + print(f" {{ \"lv_{subtype}\", lv_{subtype}_func, sizeof(lv_{subtype}_func) / sizeof(lv_{subtype}_func[0]) }},") + +print(f"""}}; +const size_t lv_classes_size = sizeof(lv_classes) / sizeof(lv_classes[0]); +""") + +# previous generation calls + +# keep only create for subtype, flv in lv.items(): print(f" /* `lv_{subtype}` methods */") for f in flv: @@ -272,10 +326,8 @@ for subtype, flv in lv.items(): c_argc = f[2] if c_argc is not None: c_argc = "\"" + c_argc + "\"" orig_func_name = f[3] - #print(f" int {c_func_name}(bvm *vm) \{ return (vm, be_call_c_func(void*) &") if c_func_name.endswith("_create"): - print(f" int {c_func_name}(bvm *vm) {{ return lvx_init_2(vm, (void*) &{orig_func_name}, \"lv_{subtype}\", { c_argc if c_argc else 'nullptr'}); }}") - else: + c_ret_type = f"+lv_{subtype}" print(f" int {c_func_name}(bvm *vm) {{ return be_call_c_func(vm, (void*) &{orig_func_name}, \"{c_ret_type}\", { c_argc if c_argc else 'nullptr'}); }}") print() @@ -317,23 +369,13 @@ print(""" #include "lvgl.h" -extern int lv0_start(bvm *vm); - extern int lv0_init(bvm *vm); -extern int lv0_register_button_encoder(bvm *vm); // add buttons with encoder logic - -extern int lv0_scr_act(bvm *vm); -extern int lv0_layer_top(bvm *vm); -extern int lv0_layer_sys(bvm *vm); -extern int lv0_get_hor_res(bvm *vm); -extern int lv0_get_ver_res(bvm *vm); -extern int lv0_screenshot(bvm *vm); - extern int lco_init(bvm *vm); extern int lco_tostring(bvm *vm); extern int lvx_init_2(bvm *vm); // generic function +extern int lvx_member(bvm *vm); extern int lvx_tostring(bvm *vm); // generic function extern int lvs_init(bvm *vm); @@ -379,13 +421,14 @@ for subtype, flv in lv.items(): else: print(f" {{ \"init\", lv0_init }},") print(f" {{ \"tostring\", lvx_tostring }},") + print(f" {{ \"member\", lvx_member }},") print() - for f in flv: + # for f in flv: - c_func_name = f[0] - be_name = f[4] - print(f" {{ \"{be_name}\", {c_func_name} }},") + # c_func_name = f[0] + # be_name = f[4] + # print(f" {{ \"{be_name}\", {c_func_name} }},") print() print(f" // {{ NULL, (bntvfunc) BE_CLOSURE }}, /* mark section for berry closures */") @@ -424,11 +467,13 @@ for subtype, flv in lv.items(): else: print(f" init, func(lv0_init)") print(f" tostring, func(lvx_tostring)") + print(f" member, func(lvx_member)") + print() - for f in flv: - c_func_name = f[0] - be_name = f[4] - print(f" {be_name}, func({c_func_name})") + # for f in flv: + # c_func_name = f[0] + # be_name = f[4] + # print(f" {be_name}, func({c_func_name})") print(f"}}") print(f"@const_object_info_end */") @@ -454,6 +499,8 @@ print("""/******************************************************************** #include "lvgl.h" +extern int lv0_member(bvm *vm); // resolve virtual members + extern int lv0_start(bvm *vm); extern int lv0_register_button_encoder(bvm *vm); // add buttons with encoder logic @@ -471,6 +518,32 @@ extern int lv0_get_ver_res(bvm *vm); extern int lv0_screenshot(bvm *vm); """) +print(""" + +typedef struct lvbe_constant_t { + const char * name; + int32_t value; +} lvbe_constant_t; + +const lvbe_constant_t lv0_constants[] = { +""") + +lv_module2 = {} +for k_v in lv_module: + (k,v) = k_v + if k is not None: + lv_module2[k] = v + +for k in sorted(lv_module2): + v = lv_module2[k] + print(f" {{ \"{k}\", {v} }},") + +print(""" +}; + +const size_t lv0_constants_size = sizeof(lv0_constants)/sizeof(lv0_constants[0]); +""") + for f in lv0: c_func_name = f[0] print(f"extern int {c_func_name}(bvm *vm);") @@ -545,13 +618,6 @@ be_native_module_attr_table(lvgl) { be_native_module_str("SYMBOL_BULLET", "\\xE2\\x80\\xA2"), - // connection type - be_native_module_int("SPI", 0), - be_native_module_int("I2C", 1), - // connection sub_type - be_native_module_int("HSPI", 0), - be_native_module_int("VSPI", 1), - be_native_module_int("SSPI", 2), """) print("/* `lvgl` module functions */") @@ -567,16 +633,17 @@ print() # print() -for k_v in lv_module: - (k,v) = k_v - if k is None: - print(v) # comment line - continue +# for k_v in lv_module: +# (k,v) = k_v +# if k is None: +# print(v) # comment line +# continue - print(f" be_native_module_int(\"{k}\", {v}),") +# print(f" be_native_module_int(\"{k}\", {v}),") print(""" + be_native_module_function("member", lv0_member), be_native_module_function("start", lv0_start), be_native_module_function("register_button_encoder", lv0_register_button_encoder), @@ -735,23 +802,18 @@ module lvgl (scope: global) { SYMBOL_DUMMY, str(&be_local_const_str_SYMBOL_DUMMY) SYMBOL_BULLET, str(&be_local_const_str_SYMBOL_BULLET) - - SPI, int(0) - I2C, int(1) - HSPI, int(0) - VSPI, int(1) - SSPI, int(2) """) -for k_v in lv_module: - (k,v) = k_v - if k is None: - continue +# for k_v in lv_module: +# (k,v) = k_v +# if k is None: +# continue - print(f" {k}, int({v})") +# print(f" {k}, int({v})") print(""" + member, func(lv0_member) start, func(lv0_start) register_button_encoder, func(lv0_register_button_encoder) From b284caa1fa7f0a05737584661edfcd10e5ef85e9 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Wed, 19 May 2021 16:39:56 +0200 Subject: [PATCH 02/11] Fix StrCaseStr result --- tasmota/support.ino | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tasmota/support.ino b/tasmota/support.ino index a65392ca9..25dfa833d 100644 --- a/tasmota/support.ino +++ b/tasmota/support.ino @@ -515,12 +515,12 @@ char* UpperCase_P(char* dest, const char* source) return dest; } -char* StrCaseStr_P(const char* source, const char* search) { +bool StrCaseStr_P(const char* source, const char* search) { char case_source[strlen_P(source) +1]; UpperCase_P(case_source, source); char case_search[strlen_P(search) +1]; UpperCase_P(case_search, search); - return strstr(case_source, case_search); + return (strstr(case_source, case_search) != nullptr); } char* Trim(char* p) @@ -1411,7 +1411,7 @@ bool ValidTemplate(const char *search) { return (strstr(template_name, search_name) != nullptr); */ - return (StrCaseStr_P(SettingsText(SET_TEMPLATE_NAME), search) != nullptr); + return StrCaseStr_P(SettingsText(SET_TEMPLATE_NAME), search); } String AnyModuleName(uint32_t index) @@ -1657,7 +1657,7 @@ bool JsonTemplate(char* dataBuf) val = root[PSTR(D_JSON_CMND)]; if (val) { - if ((USER_MODULE == Settings.module) || (StrCaseStr_P(val.getStr(), PSTR(D_CMND_MODULE " 0")))) { // Only execute if current module = USER_MODULE = this template + if ((USER_MODULE == Settings.module) || StrCaseStr_P(val.getStr(), PSTR(D_CMND_MODULE " 0"))) { // Only execute if current module = USER_MODULE = this template char* backup_data = XdrvMailbox.data; XdrvMailbox.data = (char*)val.getStr(); // Backlog commands ReplaceChar(XdrvMailbox.data, '|', ';'); // Support '|' as command separator for JSON backwards compatibility From be92738c57a527b094df2ba15d667d3c40eb0b19 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Wed, 19 May 2021 17:21:50 +0200 Subject: [PATCH 03/11] Add MQTT binary file transfer --- tasmota/xdrv_02_mqtt_1_file.ino | 260 ++++++++++++++++----------- tasmota/xdrv_02_mqtt_9_impl.ino | 126 ++++++++----- tasmota/xdrv_07_domoticz.ino | 11 +- tools/mqtt-file/download-settings.py | 106 ++++++----- tools/mqtt-file/upload-ota.py | 48 ++--- tools/mqtt-file/upload-settings.py | 48 ++--- 6 files changed, 363 insertions(+), 236 deletions(-) diff --git a/tasmota/xdrv_02_mqtt_1_file.ino b/tasmota/xdrv_02_mqtt_1_file.ino index ec1a9e698..035dd6ef6 100644 --- a/tasmota/xdrv_02_mqtt_1_file.ino +++ b/tasmota/xdrv_02_mqtt_1_file.ino @@ -24,6 +24,8 @@ * MQTT file transfer * * Supports both binary and base64 encoded binary data transfer + * + * See tools/mqtt-file for python ota-upload and settings-upload and download examples \*********************************************************************************************/ #include @@ -41,32 +43,13 @@ struct FMQTT { String file_md5; // MQTT received file md5 (32 chars) uint16_t topic_size; // MQTT topic length with terminating uint8_t file_id = 0; // MQTT unique file id during upload/download + bool file_binary = false; // MQTT binary file transfer } FMqtt; -/* - The download chunk size is the data size before it is encoded to base64. - It is smaller than the upload chunksize as it is bound by MESSZ - The download buffer with length MESSZ (1042) contains - - Payload ({"Id":117,"Data":""}) -*/ const uint32_t FileTransferHeaderSize = 21; // {"Id":116,"Data":""} -const uint32_t mqtt_file_chuck_size = (((MESSZ - FileTransferHeaderSize) / 4) * 3) -2; - -uint32_t FileUploadChunckSize(void) { -/* - The upload chunk size is the data size of the payload. - It can be larger than the download chunksize which is bound by MESSZ - The PubSubClient upload buffer with length MQTT_MAX_PACKET_SIZE (1200) contains - - Header of 5 bytes (MQTT_MAX_HEADER_SIZE) - - Topic string terminated with a zero (stat/demo/FILEUPLOAD) - - Payload ({"Id":116,"Data":""}) or () -*/ - const uint32_t PubSubClientHeaderSize = 5; // MQTT_MAX_HEADER_SIZE - return MqttClient.getBufferSize() - PubSubClientHeaderSize - FMqtt.topic_size -1; -} uint32_t MqttFileUploadValidate(uint32_t rcv_id) { - if (XdrvMailbox.grpflg) { return 5; } + if (XdrvMailbox.grpflg) { return 5; } // No grouptopic supported if ((0 == FMqtt.file_id) && (rcv_id > 0) && (FMqtt.file_size > 0) && (FMqtt.file_type > 0)) { FMqtt.file_buffer = nullptr; // Init upload buffer @@ -92,7 +75,8 @@ uint32_t MqttFileUploadValidate(uint32_t rcv_id) { if (UPL_TASMOTA == FMqtt.file_type) { if (Update.begin(FMqtt.file_size)) { FMqtt.file_buffer = &FMqtt.file_id; // Dummy buffer -// TasmotaGlobal.blinkstate = true; // Stay lit + TasmotaGlobal.blinks = 201; + TasmotaGlobal.blinkstate = true; // Stay lit SettingsSave(1); // Free flash for OTA update } } @@ -114,11 +98,12 @@ uint32_t MqttFileUploadValidate(uint32_t rcv_id) { ResponseCmndChar(PSTR(D_JSON_STARTED)); MqttPublishPrefixTopic_P(STAT, XdrvMailbox.command); // Enforce stat/wemos10/FILEUPLOAD } - else if ((FMqtt.file_id > 0) && (FMqtt.file_id != rcv_id)) { + else if (((FMqtt.file_id > 0) && (FMqtt.file_id != rcv_id)) || (0 == XdrvMailbox.payload)) { // Error receiving data if (UPL_TASMOTA == FMqtt.file_type) { Update.end(true); + TasmotaGlobal.blinkstate = false; // Turn led off } else if (UPL_SETTINGS == FMqtt.file_type) { SettingsBufferFree(); @@ -128,6 +113,36 @@ uint32_t MqttFileUploadValidate(uint32_t rcv_id) { return 0; // No error } +void MqttFileValidate(uint32_t error) { + if (error) { + FMqtt.file_buffer = nullptr; + + TasmotaGlobal.masterlog_level = LOG_LEVEL_NONE; // Enable logging + + if (4 == error) { + ResponseCmndChar(PSTR(D_JSON_ABORTED)); + } else { + char error_txt[20]; + snprintf_P(error_txt, sizeof(error_txt), PSTR(D_JSON_ERROR " %d"), error); + ResponseCmndChar(error_txt); + } + } +} + +void MqttFilePublish(void) { + if (!FMqtt.file_buffer) { + TasmotaGlobal.masterlog_level = LOG_LEVEL_NONE; // Enable logging + FMqtt.file_id = 0; + FMqtt.file_size = 0; + FMqtt.file_type = 0; + FMqtt.file_binary = false; + FMqtt.file_md5 = (const char*) nullptr; // Force deallocation of the String internal memory + FMqtt.file_password = nullptr; + } + MqttPublishPrefixTopic_P(STAT, XdrvMailbox.command); + ResponseClear(); +} + void CmndFileUpload(void) { /* Upload bytes chunks of data either base64 encoded or binary with MD5 hash @@ -152,13 +167,12 @@ void CmndFileUpload(void) { */ const char* base64_data = nullptr; uint32_t rcv_id = 0; - char* dataBuf = (char*)XdrvMailbox.data; bool binary_data = (XdrvMailbox.index > 199); // Check for raw data if (!binary_data) { - if (strlen(dataBuf) > 8) { // Workaround exception if empty JSON like {} - Needs checks - JsonParser parser((char*) dataBuf); + if (strlen(XdrvMailbox.data) > 8) { // Workaround exception if empty JSON like {} - Needs checks + JsonParser parser((char*) XdrvMailbox.data); JsonParserObject root = parser.getRootObject(); if (root) { JsonParserToken val = root[PSTR("ID")]; @@ -178,17 +192,7 @@ void CmndFileUpload(void) { } else { rcv_id = FMqtt.file_id; } - - uint32_t error = MqttFileUploadValidate(rcv_id); - if (error) { - FMqtt.file_buffer = nullptr; - - TasmotaGlobal.masterlog_level = LOG_LEVEL_NONE; // Enable logging - - char error_txt[20]; - snprintf_P(error_txt, sizeof(error_txt), PSTR(D_JSON_ERROR " %d"), error); - ResponseCmndChar(error_txt); - } + MqttFileValidate(MqttFileUploadValidate(rcv_id)); if (FMqtt.file_buffer) { if ((FMqtt.file_pos < FMqtt.file_size) && (binary_data || base64_data)) { @@ -232,7 +236,16 @@ void CmndFileUpload(void) { if ((FMqtt.file_pos < FMqtt.file_size) || (FMqtt.file_md5.length() != 32)) { TasmotaGlobal.masterlog_level = LOG_LEVEL_DEBUG_MORE; // Hide upload data logging - uint32_t chunk_size = FileUploadChunckSize(); + /* + The upload chunk size is the data size of the payload. + It can be larger than the download chunksize which is bound by MESSZ + The PubSubClient upload buffer with length MQTT_MAX_PACKET_SIZE (1200) contains + - Header of 5 bytes (MQTT_MAX_HEADER_SIZE) + - Topic string terminated with a zero (stat/demo/FILEUPLOAD) + - Payload ({"Id":116,"Data":""}) or () + */ + const uint32_t PubSubClientHeaderSize = 5; // MQTT_MAX_HEADER_SIZE + uint32_t chunk_size = MqttClient.getBufferSize() - PubSubClientHeaderSize - FMqtt.topic_size -1; if (!binary_data) { chunk_size = (((chunk_size - FileTransferHeaderSize) / 4) * 3) -2; // Calculate base64 chunk size } @@ -248,16 +261,17 @@ void CmndFileUpload(void) { if (UPL_TASMOTA == FMqtt.file_type) { if (!Update.end(true)) { + TasmotaGlobal.blinkstate = false; // Turn led off ResponseCmndFailed(); } else { - TasmotaGlobal.restart_flag = 2; // Always restart to re-enable disabled features during update + TasmotaGlobal.restart_flag = 2; // Restart to load new firmware } } else if (UPL_SETTINGS == FMqtt.file_type) { if (!SettingsConfigRestore()) { ResponseCmndFailed(); } else { - TasmotaGlobal.restart_flag = 2; // Always restart to re-enable disabled features during update + TasmotaGlobal.restart_flag = 2; // Restart to load new settings } } @@ -266,95 +280,137 @@ void CmndFileUpload(void) { } } - if (!FMqtt.file_buffer) { - TasmotaGlobal.masterlog_level = LOG_LEVEL_NONE; // Enable logging - FMqtt.file_id = 0; - FMqtt.file_size = 0; - FMqtt.file_type = 0; - FMqtt.file_md5 = (const char*) nullptr; // Force deallocation of the String internal memory - FMqtt.file_password = nullptr; + MqttFilePublish(); +} + +uint32_t MqttFileDownloadValidate(void) { + if (XdrvMailbox.grpflg) { return 5; } // No grouptopic supported + + if ((0 == FMqtt.file_id) && (FMqtt.file_type > 0)) { + FMqtt.file_buffer = nullptr; // Init upload buffer + + if (!FMqtt.file_password || (strcmp(FMqtt.file_password, SettingsText(SET_MQTT_PWD)) != 0)) { + return 1; // Invalid password + } + + FMqtt.file_id = (UtcTime() & 0xFE) +1; // Odd id between 1 and 255 + + // Init file_buffer + if (UPL_SETTINGS == FMqtt.file_type) { + uint32_t len = SettingsConfigBackup(); + if (!len) { return 2; } + + FMqtt.file_type = UPL_SETTINGS; + FMqtt.file_buffer = settings_buffer; + FMqtt.file_size = len; + + // {"File":"Config_wemos10_9.4.0.3.dmp","Id":117,"Type":2,"Size":4096} + Response_P(PSTR("{\"File\":\"%s\",\"Id\":%d,\"Type\":%d,\"Size\":%d}"), + SettingsConfigFilename().c_str(), FMqtt.file_id, FMqtt.file_type, len); + } + else { + return 3; // Invalid file type + } + + FMqtt.file_pos = 0; + + FMqtt.md5 = MD5Builder(); + FMqtt.md5.begin(); + + char payload[50]; + snprintf_P(payload, sizeof(payload), S_JSON_COMMAND_SVALUE, XdrvMailbox.command, PSTR(D_JSON_STARTED)); + MqttPublishPayloadPrefixTopic_P(STAT, XdrvMailbox.command, payload); // Enforce stat/wemos10/FILEUPLOAD + + TasmotaGlobal.masterlog_level = LOG_LEVEL_DEBUG_MORE; // Hide upload data logging } - MqttPublishPrefixTopic_P(STAT, XdrvMailbox.command); // Enforce stat/wemos10/FILEUPLOAD - ResponseClear(); + else if (0 == XdrvMailbox.payload) { + + if (UPL_SETTINGS == FMqtt.file_type) { + SettingsBufferFree(); + } + return 4; // Upload aborted + } + return 0; // No error } void CmndFileDownload(void) { /* - Download (binary) max 700 bytes chunks of data base64 encoded with MD5 hash over base64 decoded data - Currently supports Settings (file type 2) - Filedownload 0 - Abort current download - FileDownload 2 - Start download of settings file - FileDownload - Continue downloading data until reception of MD5 hash + Download chunks of data base64 encoded with MD5 hash + + Supported Type: + 2 - Settings + + FileDownload 0 - Abort current download + + Start a download session: + FileDownload {"Password":"","Type":2} + + Download data using base64 until reception of MD5 hash: + FileDownload */ - if (XdrvMailbox.grpflg) { return; } - - if (FMqtt.file_id && FMqtt.file_buffer) { - bool finished = false; - - if (0 == XdrvMailbox.payload) { // Abort file download - ResponseCmndChar(PSTR(D_JSON_ABORTED)); - finished = true; - } - else if (FMqtt.file_pos < FMqtt.file_size) { + if (FMqtt.file_buffer) { + if (FMqtt.file_pos < FMqtt.file_size) { uint32_t bytes_left = FMqtt.file_size - FMqtt.file_pos; - uint32_t write_bytes = (bytes_left < mqtt_file_chuck_size) ? bytes_left : mqtt_file_chuck_size; + + /* + The download chunk size is the data size before it is encoded to base64. + It is smaller than the upload chunksize as it is bound by MESSZ + The download buffer with length MESSZ (1042) contains + - Payload ({"Id":117,"Data":""}) + */ + const uint32_t mqtt_file_chunk_size = (((MESSZ - FileTransferHeaderSize) / 4) * 3) -2; + uint32_t chunk_size = (FMqtt.file_binary) ? 4096 : mqtt_file_chunk_size; + uint32_t write_bytes = (bytes_left < chunk_size) ? bytes_left : chunk_size; uint8_t* buffer = FMqtt.file_buffer + FMqtt.file_pos; FMqtt.md5.add(buffer, write_bytes); - // {"Id":117,"Data":"CRJcTQ9fYGF ... OT1BRUlNUVVZXWFk="} - Response_P(PSTR("{\"Id\":%d,\"Data\":\""), FMqtt.file_id); // FileTransferHeaderSize - char base64_data[encode_base64_length(write_bytes)]; - encode_base64((unsigned char*)buffer, write_bytes, (unsigned char*)base64_data); - ResponseAppend_P(base64_data); - ResponseAppend_P("\"}"); - FMqtt.file_pos += write_bytes; + + if (FMqtt.file_binary) { + MqttPublishPayloadPrefixTopic_P(STAT, XdrvMailbox.command, (const char*)buffer, write_bytes); + } else { + // {"Id":117,"Data":"CRJcTQ9fYGF ... OT1BRUlNUVVZXWFk="} + Response_P(PSTR("{\"Id\":%d,\"Data\":\""), FMqtt.file_id); // FileTransferHeaderSize + char base64_data[encode_base64_length(write_bytes)]; + encode_base64((unsigned char*)buffer, write_bytes, (unsigned char*)base64_data); + ResponseAppend_P(base64_data); + ResponseAppend_P("\"}"); + MqttPublishPrefixTopic_P(STAT, XdrvMailbox.command); + } + ResponseClear(); + return; } else { FMqtt.md5.calculate(); // {"Id":117,"Md5":"496fcbb433bbca89833063174d2c5747"} Response_P(PSTR("{\"Id\":%d,\"Md5\":\"%s\"}"), FMqtt.file_id, FMqtt.md5.toString().c_str()); - finished = true; - } + MqttPublishPrefixTopic_P(STAT, XdrvMailbox.command); // Enforce stat/wemos10/FILEUPLOAD + ResponseCmndDone(); - if (finished) { if (UPL_SETTINGS == FMqtt.file_type) { SettingsBufferFree(); } - FMqtt.file_id = 0; + FMqtt.file_buffer = nullptr; } } - else if (XdrvMailbox.data_len) { - FMqtt.file_buffer = nullptr; - FMqtt.file_id = (UtcTime() & 0xFE) +1; // Odd id between 1 and 255 - if (UPL_SETTINGS == XdrvMailbox.payload) { - uint32_t len = SettingsConfigBackup(); - if (len) { - FMqtt.file_type = UPL_SETTINGS; - FMqtt.file_buffer = settings_buffer; - FMqtt.file_size = len; - - // {"File":"Config_wemos10_9.4.0.3.dmp","Id":117,"Type":2,"Size":4096} - Response_P(PSTR("{\"File\":\"%s\",\"Id\":%d,\"Type\":%d,\"Size\":%d}"), - SettingsConfigFilename().c_str(), FMqtt.file_id, FMqtt.file_type, len); - } - } - - if (FMqtt.file_buffer) { - FMqtt.file_pos = 0; - - FMqtt.md5 = MD5Builder(); - FMqtt.md5.begin(); - } else { - FMqtt.file_id = 0; - ResponseCmndFailed(); + if (strlen(XdrvMailbox.data) > 8) { // Workaround exception if empty JSON like {} - Needs checks + JsonParser parser((char*) XdrvMailbox.data); + JsonParserObject root = parser.getRootObject(); + if (root) { + JsonParserToken val = root[PSTR("TYPE")]; + if (val) { FMqtt.file_type = val.getUInt(); } + val = root[PSTR("BINARY")]; + if (val) { FMqtt.file_binary = val.getUInt(); } + val = root[PSTR("PASSWORD")]; + if (val) { FMqtt.file_password = val.getStr(); } } } - MqttPublishPrefixTopic_P(STAT, XdrvMailbox.command); - ResponseClear(); + MqttFileValidate(MqttFileDownloadValidate()); + + MqttFilePublish(); } #endif // USE_MQTT_FILE diff --git a/tasmota/xdrv_02_mqtt_9_impl.ino b/tasmota/xdrv_02_mqtt_9_impl.ino index beca7778d..3a7ed3d63 100644 --- a/tasmota/xdrv_02_mqtt_9_impl.ino +++ b/tasmota/xdrv_02_mqtt_9_impl.ino @@ -179,7 +179,7 @@ void MakeValidMqtt(uint32_t option, char* str) { * bool MqttIsConnected() * void MqttDisconnect() * void MqttSubscribeLib(char *topic) - * bool MqttPublishLib(const char* topic, bool retained) + * bool MqttPublishLib(const char* topic, const uint8_t* payload, unsigned int plength, bool retained) \*********************************************************************************************/ #include @@ -465,7 +465,7 @@ void MqttUnsubscribeLib(const char *topic) { MqttClient.loop(); // Solve LmacRxBlk:1 messages } -bool MqttPublishLib(const char* topic, bool retained) { +bool MqttPublishLib(const char* topic, const uint8_t* payload, unsigned int plength, bool retained) { // If Prefix1 equals Prefix2 disable next MQTT subscription to prevent loop if (!strcmp(SettingsText(SET_MQTTPREFIX1), SettingsText(SET_MQTTPREFIX2))) { char *str = strstr(topic, SettingsText(SET_MQTTPREFIX1)); @@ -475,35 +475,34 @@ bool MqttPublishLib(const char* topic, bool retained) { } } - bool result; #ifdef USE_MQTT_AZURE_IOT String sourceTopicString = urlEncodeBase64(String(topic)); String topicString = "devices/" + String(SettingsText(SET_MQTT_CLIENT)); - topicString+= "/messages/events/topic=" + sourceTopicString; + topicString += "/messages/events/topic=" + sourceTopicString; - JsonParser mqtt_message((char*) String(TasmotaGlobal.mqtt_data).c_str()); + JsonParser mqtt_message((char*) String((const char*)payload).c_str()); JsonParserObject message_object = mqtt_message.getRootObject(); - if (message_object.isValid()) { // only sending valid JSON, yet this is optional - result = MqttClient.publish(topicString.c_str(), TasmotaGlobal.mqtt_data, retained); - AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_MQTT "Sending '%s'"), TasmotaGlobal.mqtt_data); - } else { - AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_MQTT "Invalid JSON, '%s' for topic '%s', not sending to Azure IoT Hub"), TasmotaGlobal.mqtt_data, topic); - result = true; + if (!message_object.isValid()) { // only sending valid JSON, yet this is optional + AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_MQTT "Invalid JSON for topic '%s', not sending to Azure IoT Hub"), topic); + return true; } -#else - result = MqttClient.publish(topic, TasmotaGlobal.mqtt_data, retained); + topic = topicString.c_str(); #endif // USE_MQTT_AZURE_IOT - yield(); // #3313 - return result; -} -#ifdef DEBUG_TASMOTA_CORE -void MqttDumpData(char* topic, char* data, uint32_t data_len) { - char dump_data[data_len +1]; - memcpy(dump_data, data, sizeof(dump_data)); // Make another copy for removing optional control characters - DEBUG_CORE_LOG(PSTR(D_LOG_MQTT "Size %d, \"%s %s\""), data_len, topic, RemoveControlCharacter(dump_data)); + if (!MqttClient.beginPublish(topic, plength, retained)) { +// AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_MQTT "Connection lost or message too large")); + return false; + } + uint32_t written = MqttClient.write(payload, plength); + if (written != plength) { + AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_MQTT "Message too large")); + return false; + } + MqttClient.endPublish(); + + yield(); // #3313 + return true; } -#endif void MqttDataHandler(char* mqtt_topic, uint8_t* mqtt_data, unsigned int data_len) { #ifdef USE_DEBUG_DRIVER @@ -554,10 +553,6 @@ void MqttDataHandler(char* mqtt_topic, uint8_t* mqtt_data, unsigned int data_len char data[data_len +1]; memcpy(data, mqtt_data, sizeof(data)); -#ifdef DEBUG_TASMOTA_CORE - MqttDumpData(topic, data, data_len); // Use a function to save stack space used by dump_data -#endif - // MQTT pre-processing XdrvMailbox.index = strlen(topic); XdrvMailbox.data_len = data_len; @@ -598,21 +593,28 @@ void MqttPublishLoggingAsync(bool refresh) { strlcpy(TasmotaGlobal.mqtt_data, line, len); // No JSON and ugly!! char stopic[TOPSZ]; GetTopic_P(stopic, STAT, TasmotaGlobal.mqtt_topic, PSTR("LOGGING")); - MqttPublishLib(stopic, false); + MqttPublishLib(stopic, (const uint8_t*)TasmotaGlobal.mqtt_data, strlen(TasmotaGlobal.mqtt_data), false); } } -void MqttPublish(const char* topic, bool retained) { +void MqttPublishPayload(const char* topic, const char* payload, uint32_t binary_length, bool retained) { + // Publish payload string or binary when binary_length set with optional retained + #ifdef USE_DEBUG_DRIVER ShowFreeMem(PSTR("MqttPublish")); #endif + bool binary_data = (binary_length > 0); + if (!binary_data) { + binary_length = strlen(payload); + } + if (Settings.flag4.mqtt_no_retain) { // SetOption104 - Disable all MQTT retained messages, some brokers don't support it: AWS IoT, Losant retained = false; // Some brokers don't support retained, they will disconnect if received } String log_data; // 20210420 Moved to heap to solve tight stack resulting in exception 2 - if (Settings.flag.mqtt_enabled && MqttPublishLib(topic, retained)) { // SetOption3 - Enable MQTT + if (Settings.flag.mqtt_enabled && MqttPublishLib(topic, (const uint8_t*)payload, binary_length, retained)) { // SetOption3 - Enable MQTT log_data = F(D_LOG_MQTT); // MQT: log_data += topic; // stat/tasmota/STATUS2 } else { @@ -621,7 +623,7 @@ void MqttPublish(const char* topic, bool retained) { retained = false; // Without MQTT enabled there is no retained message } log_data += F(" = "); // = - log_data += TasmotaGlobal.mqtt_data; // {"StatusFWR":{"Version":... + log_data += (binary_data) ? HexToString((uint8_t*)payload, binary_length) : payload; if (retained) { log_data += F(" (" D_RETAINED ")"); } // (retained) AddLogData(LOG_LEVEL_INFO, log_data.c_str()); // MQT: stat/tasmota/STATUS2 = {"StatusFWR":{"Version":... @@ -630,18 +632,32 @@ void MqttPublish(const char* topic, bool retained) { } } +void MqttPublishPayload(const char* topic, const char* payload) { + // Publish payload string no retained + MqttPublishPayload(topic, payload, 0, false); +} + +void MqttPublish(const char* topic, bool retained) { + // Publish default TasmotaGlobal.mqtt_data string with optional retained + MqttPublishPayload(topic, TasmotaGlobal.mqtt_data, 0, retained); +} + void MqttPublish(const char* topic) { + // Publish default TasmotaGlobal.mqtt_data string no retained MqttPublish(topic, false); } -void MqttPublishPrefixTopic_P(uint32_t prefix, const char* subtopic, bool retained) { -/* prefix 0 = cmnd using subtopic - * prefix 1 = stat using subtopic - * prefix 2 = tele using subtopic - * prefix 4 = cmnd using subtopic or RESULT - * prefix 5 = stat using subtopic or RESULT - * prefix 6 = tele using subtopic or RESULT - */ +void MqttPublishPayloadPrefixTopic_P(uint32_t prefix, const char* subtopic, const char* payload, uint32_t binary_length, bool retained) { +/* + Publish //> payload string or binary when binary_length set with optional retained + + prefix 0 = cmnd using subtopic + prefix 1 = stat using subtopic + prefix 2 = tele using subtopic + prefix 4 = cmnd using subtopic or RESULT + prefix 5 = stat using subtopic or RESULT + prefix 6 = tele using subtopic or RESULT +*/ char romram[64]; snprintf_P(romram, sizeof(romram), ((prefix > 3) && !Settings.flag.mqtt_response) ? S_RSLT_RESULT : subtopic); // SetOption4 - Switch between MQTT RESULT or COMMAND UpperCase(romram, romram); @@ -649,7 +665,7 @@ void MqttPublishPrefixTopic_P(uint32_t prefix, const char* subtopic, bool retain prefix &= 3; char stopic[TOPSZ]; GetTopic_P(stopic, prefix, TasmotaGlobal.mqtt_topic, romram); - MqttPublish(stopic, retained); + MqttPublishPayload(stopic, payload, binary_length, retained); #if defined(USE_MQTT_AWS_IOT) || defined(USE_MQTT_AWS_IOT_LIGHT) if ((prefix > 0) && (Settings.flag4.awsiot_shadow) && (Mqtt.connected)) { // placeholder for SetOptionXX @@ -669,33 +685,53 @@ void MqttPublishPrefixTopic_P(uint32_t prefix, const char* subtopic, bool retain snprintf_P(romram, sizeof(romram), PSTR("$aws/things/%s/shadow/update"), topic2); // copy buffer - char *mqtt_save = (char*) malloc(strlen(TasmotaGlobal.mqtt_data)+1); - if (!mqtt_save) { return; } // abort - strcpy(mqtt_save, TasmotaGlobal.mqtt_data); - snprintf_P(TasmotaGlobal.mqtt_data, sizeof(TasmotaGlobal.mqtt_data), PSTR("{\"state\":{\"reported\":%s}}"), mqtt_save); - free(mqtt_save); + String aws_payload = F("{\"state\":{\"reported\":%s}}"); + aws_payload += payload; + + MqttClient.publish(romram, aws_payload.c_str(), false); - bool result = MqttClient.publish(romram, TasmotaGlobal.mqtt_data, false); AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_MQTT "Updated shadow: %s"), romram); yield(); // #3313 } #endif // USE_MQTT_AWS_IOT } +void MqttPublishPayloadPrefixTopic_P(uint32_t prefix, const char* subtopic, const char* payload, uint32_t binary_length) { + // Publish //> payload string or binary when binary_length set no retained + MqttPublishPayloadPrefixTopic_P(prefix, subtopic, payload, binary_length, false); +} + +void MqttPublishPayloadPrefixTopic_P(uint32_t prefix, const char* subtopic, const char* payload) { + // Publish //> payload string no retained + MqttPublishPayloadPrefixTopic_P(prefix, subtopic, payload, 0, false); +} + +void MqttPublishPrefixTopic_P(uint32_t prefix, const char* subtopic, bool retained) { + // Publish //> default TasmotaGlobal.mqtt_data string with optional retained + MqttPublishPayloadPrefixTopic_P(prefix, subtopic, TasmotaGlobal.mqtt_data, 0, retained); +} + void MqttPublishPrefixTopic_P(uint32_t prefix, const char* subtopic) { + // Publish //> default TasmotaGlobal.mqtt_data string no retained MqttPublishPrefixTopic_P(prefix, subtopic, false); } void MqttPublishPrefixTopicRulesProcess_P(uint32_t prefix, const char* subtopic, bool retained) { + // Publish //> default TasmotaGlobal.mqtt_data string with optional retained + // then process rules MqttPublishPrefixTopic_P(prefix, subtopic, retained); XdrvRulesProcess(0); } void MqttPublishPrefixTopicRulesProcess_P(uint32_t prefix, const char* subtopic) { + // Publish //> default TasmotaGlobal.mqtt_data string no retained + // then process rules MqttPublishPrefixTopicRulesProcess_P(prefix, subtopic, false); } void MqttPublishTeleSensor(void) { + // Publish tele//SENSOR default TasmotaGlobal.mqtt_data string with optional retained + // then process rules MqttPublishPrefixTopicRulesProcess_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain); // CMND_SENSORRETAIN } diff --git a/tasmota/xdrv_07_domoticz.ino b/tasmota/xdrv_07_domoticz.ino index b7ae440cc..473dab297 100644 --- a/tasmota/xdrv_07_domoticz.ino +++ b/tasmota/xdrv_07_domoticz.ino @@ -360,8 +360,9 @@ bool DomoticzSendKey(uint8_t key, uint8_t device, uint8_t state, uint8_t svalflg \*********************************************************************************************/ void DomoticzSendData(uint32_t sensor_idx, uint32_t idx, char *data) { + char payload[128]; if (DZ_AIRQUALITY == sensor_idx) { - Response_P(PSTR("{\"idx\":%d,\"nvalue\":%s,\"Battery\":%d,\"RSSI\":%d}"), + snprintf_P(payload, sizeof(payload), PSTR("{\"idx\":%d,\"nvalue\":%s,\"Battery\":%d,\"RSSI\":%d}"), idx, data, DomoticzBatteryQuality(), DomoticzRssiQuality()); } else { uint8_t nvalue = 0; @@ -371,19 +372,15 @@ void DomoticzSendData(uint32_t sensor_idx, uint32_t idx, char *data) { nvalue = position < 2 ? 0 : (position == 100 ? 1 : 2); } #endif // USE_SHUTTER - Response_P(DOMOTICZ_MESSAGE, // "{\"idx\":%d,\"nvalue\":%d,\"svalue\":\"%s\",\"Battery\":%d,\"RSSI\":%d}" + snprintf_P(payload, sizeof(payload), DOMOTICZ_MESSAGE, // "{\"idx\":%d,\"nvalue\":%d,\"svalue\":\"%s\",\"Battery\":%d,\"RSSI\":%d}" idx, nvalue, data, DomoticzBatteryQuality(), DomoticzRssiQuality()); } - MqttPublish(domoticz_in_topic); + MqttPublishPayload(domoticz_in_topic, payload); } void DomoticzSensor(uint8_t idx, char *data) { if (Settings.domoticz_sensor_idx[idx]) { - char dmess[128]; // {"idx":26700,"nvalue":0,"svalue":"22330.1;10234.4;22000.5;10243.4;1006;3000","Battery":100,"RSSI":10} - - memcpy(dmess, TasmotaGlobal.mqtt_data, sizeof(dmess)); DomoticzSendData(idx, Settings.domoticz_sensor_idx[idx], data); - memcpy(TasmotaGlobal.mqtt_data, dmess, sizeof(dmess)); } } diff --git a/tools/mqtt-file/download-settings.py b/tools/mqtt-file/download-settings.py index 046a35997..0f990ee5d 100644 --- a/tools/mqtt-file/download-settings.py +++ b/tools/mqtt-file/download-settings.py @@ -42,16 +42,20 @@ import json broker = "domus1" # MQTT broker ip address or name broker_port = 1883 # MQTT broker port +mypassword = "" # Tasmota MQTT password mytopic = "demo" # Tasmota MQTT topic myfiletype = 2 # Tasmota Settings file type # **** End of User Configuration Section +use_base64 = True + # Derive fulltopic from broker LWT message mypublish = "cmnd/"+mytopic+"/filedownload" mysubscribe = "stat/"+mytopic+"/FILEDOWNLOAD" # Case sensitive Ack_flag = False +Err_flag = False file_name = "" file_id = 0 @@ -62,6 +66,7 @@ file_md5 = "" # The callback for when mysubscribe message is received def on_message(client, userdata, msg): global Ack_flag + global Err_flag global Run_flag global file_name global file_id @@ -73,56 +78,76 @@ def on_message(client, userdata, msg): base64_data = "" rcv_id = 0 -# print("Received message =",str(msg.payload.decode("utf-8"))) +# try: +# print("Received message =",str(msg.payload.decode("utf-8"))) +# except: +# print("Received message = binary data") - root = json.loads(msg.payload.decode("utf-8")) - if "File" in root: file_name = root["File"] - if "Id" in root: rcv_id = root["Id"] - if "Type" in root: file_type = root["Type"] - if "Size" in root: file_size = root["Size"] - if "Data" in root: base64_data = root["Data"] - if "Md5" in root: file_md5 = root["Md5"] + try: + root = json.loads(msg.payload.decode("utf-8")) + if root: + if "FileDownload" in root: + rcv_code = root["FileDownload"] + if "Started" in rcv_code: + return + if "Error" in rcv_code: + print("Error: "+rcv_code) + Err_flag = True + return + if "Command" in root: + rcv_code = root["Command"] + if rcv_code == "Error": + print("Error: Command error") + Err_flag = True + return + if "File" in root: file_name = root["File"] + if "Id" in root: rcv_id = root["Id"] + if "Type" in root: file_type = root["Type"] + if "Size" in root: file_size = root["Size"] + if "Data" in root: base64_data = root["Data"] + if "Md5" in root: file_md5 = root["Md5"] + except: + pass if file_id == 0 and rcv_id > 0 and file_size > 0 and file_type > 0 and file_name: file_id = rcv_id fi = open(file_name,"wb") fi.close() - else: - if file_id > 0 and file_id != rcv_id: - Run_flag = False + if use_base64 and file_id > 0 and file_id != rcv_id: + Err_flag = True return - if file_md5 == "" and base64_data: - base64_decoded_data = base64_data.encode('utf-8') - chunk = base64.decodebytes(base64_decoded_data) - in_hash_md5.update(chunk) # Update hash - - fi = open(file_name,"ab") - fi.write(chunk) - fi.close() + if file_md5 == "" and file_name: + if use_base64 and base64_data: + base64_decoded_data = base64_data.encode('utf-8') + chunk = base64.decodebytes(base64_decoded_data) + in_hash_md5.update(chunk) # Update hash + fi = open(file_name,"ab") + fi.write(chunk) + fi.close() + if use_base64 == False and 0 == rcv_id: + chunk = msg.payload + in_hash_md5.update(chunk) # Update hash + fi = open(file_name,"ab") + fi.write(chunk) + fi.close() if file_md5 != "": md5_hash = in_hash_md5.hexdigest() if md5_hash != file_md5: print("Error: MD5 mismatch") - Run_flag = False + Err_flag = True Ack_flag = False def wait_for_ack(): - global Ack_flag - global Run_flag - if Run_flag == False: - print("Error: Transmission") - return True - timeout = 100 - while Ack_flag and timeout > 0: + while Ack_flag and Err_flag == False and timeout > 0: time.sleep(0.01) timeout = timeout -1 - if Ack_flag: + if 0 == timeout: print("Error: Timeout") return Ack_flag @@ -138,35 +163,32 @@ print("Downloading file from "+mytopic+" ...") in_hash_md5 = hashlib.md5() -Err_flag = False - -client.publish(mypublish, str(myfiletype)) +if use_base64: + client.publish(mypublish, "{\"Password\":\""+mypassword+"\",\"Type\":"+str(myfiletype)+"}") +else: + client.publish(mypublish, "{\"Password\":\""+mypassword+"\",\"Type\":"+str(myfiletype)+",\"Binary\":1}") Ack_flag = True Run_flag = True while Run_flag: if wait_for_ack(): # We use Ack here - Err_flag = True + client.publish(mypublish, "0") # Abort any failed download Run_flag = False else: - if file_md5 == "": + if file_md5 == "": # Request chunk client.publish(mypublish, "?") Ack_flag = True - else: Run_flag = False -if Err_flag: - client.publish(mypublish, "0") # Abort any failed download +if Err_flag == False: + file_type_name = "Data" + if file_type == 2: + file_type_name = "Settings" + print("Downloaded "+file_type_name+" saved as "+file_name) time_taken = time.time() - time_start - -file_type_name = " Data" -if file_type == 2: - file_type_name = " Settings" - -print("Downloaded"+file_type_name+" saved as "+file_name) print("Done in "+str("%.2f"%time_taken)+" seconds") client.disconnect() # Disconnect diff --git a/tools/mqtt-file/upload-ota.py b/tools/mqtt-file/upload-ota.py index 791c9b1ae..22ea721f9 100644 --- a/tools/mqtt-file/upload-ota.py +++ b/tools/mqtt-file/upload-ota.py @@ -50,19 +50,22 @@ myfiletype = 1 # Tasmota firmware file type # **** End of User Configuration Section +use_base64 = False + # Derive fulltopic from broker LWT message mypublish = "cmnd/"+mytopic+"/fileupload" mysubscribe = "stat/"+mytopic+"/FILEUPLOAD" # Case sensitive Ack_flag = False +Err_flag = False -use_base64 = False file_id = 114 # Even id between 2 and 254 file_chunk_size = 700 # Default Tasmota MQTT max message size # The callback for when mysubscribe message is received def on_message(client, userdata, msg): global Ack_flag + global Err_flag global file_chunk_size rcv_code = "" @@ -71,31 +74,35 @@ def on_message(client, userdata, msg): # print("Received message =",str(msg.payload.decode("utf-8"))) root = json.loads(msg.payload.decode("utf-8")) - if "FileUpload" in root: rcv_code = root["FileUpload"] - if "Error" in rcv_code: - print("Error: "+rcv_code) - return - - if "Command" in root: rcv_code = root["Command"] - if rcv_code == "Error": - print("Error: Command error") - return - - if "Id" in root: rcv_id = root["Id"] - if rcv_id == file_id: - if "MaxSize" in root: file_chunk_size = root["MaxSize"] + if "FileUpload" in root: + rcv_code = root["FileUpload"] + if "Started" in rcv_code: + return + if "Error" in rcv_code: + print("Error: "+rcv_code) + Err_flag = True + return + if "Command" in root: + rcv_code = root["Command"] + if rcv_code == "Error": + print("Error: Command error") + Err_flag = True + return + if "Id" in root: + rcv_id = root["Id"] + if rcv_id == file_id: + if "MaxSize" in root: file_chunk_size = root["MaxSize"] Ack_flag = False def wait_for_ack(): - global Ack_flag timeout = 100 - while Ack_flag and timeout > 0: + while Ack_flag and Err_flag == False and timeout > 0: time.sleep(0.01) timeout = timeout -1 - if Ack_flag: - print("Error: Ack timeout") + if 0 == timeout: + print("Error: Timeout") return Ack_flag @@ -120,13 +127,14 @@ out_hash_md5 = hashlib.md5() Run_flag = True while Run_flag: - if wait_for_ack(): # We use Ack here + if wait_for_ack(): # We use Ack here + client.publish(mypublish, "0") # Abort any failed upload Run_flag = False else: chunk = fo.read(file_chunk_size) if chunk: - out_hash_md5.update(chunk) # Update hash + out_hash_md5.update(chunk) # Update hash if use_base64: base64_encoded_data = base64.b64encode(chunk) base64_data = base64_encoded_data.decode('utf-8') diff --git a/tools/mqtt-file/upload-settings.py b/tools/mqtt-file/upload-settings.py index e5cb717cc..a128b8924 100644 --- a/tools/mqtt-file/upload-settings.py +++ b/tools/mqtt-file/upload-settings.py @@ -44,24 +44,27 @@ broker_port = 1883 # MQTT broker port mypassword = "" # Tasmota MQTT password mytopic = "demo" # Tasmota MQTT topic -myfile = "Config_demo_9.4.0.3.dmp" # Tasmota Settings file name +myfile = "Config_demo_9.4.0.4.dmp" # Tasmota Settings file name myfiletype = 2 # Tasmota Settings file type # **** End of User Configuration Section +use_base64 = True + # Derive fulltopic from broker LWT message mypublish = "cmnd/"+mytopic+"/fileupload" mysubscribe = "stat/"+mytopic+"/FILEUPLOAD" # Case sensitive Ack_flag = False +Err_flag = False -use_base64 = True file_id = 116 # Even id between 2 and 254 file_chunk_size = 700 # Default Tasmota MQTT max message size # The callback for when mysubscribe message is received def on_message(client, userdata, msg): global Ack_flag + global Err_flag global file_chunk_size rcv_code = "" @@ -70,31 +73,35 @@ def on_message(client, userdata, msg): # print("Received message =",str(msg.payload.decode("utf-8"))) root = json.loads(msg.payload.decode("utf-8")) - if "FileUpload" in root: rcv_code = root["FileUpload"] - if "Error" in rcv_code: - print("Error: "+rcv_code) - return - - if "Command" in root: rcv_code = root["Command"] - if rcv_code == "Error": - print("Error: Command error") - return - - if "Id" in root: rcv_id = root["Id"] - if rcv_id == file_id: - if "MaxSize" in root: file_chunk_size = root["MaxSize"] + if "FileUpload" in root: + rcv_code = root["FileUpload"] + if "Started" in rcv_code: + return + if "Error" in rcv_code: + print("Error: "+rcv_code) + Err_flag = True + return + if "Command" in root: + rcv_code = root["Command"] + if rcv_code == "Error": + print("Error: Command error") + Err_flag = True + return + if "Id" in root: + rcv_id = root["Id"] + if rcv_id == file_id: + if "MaxSize" in root: file_chunk_size = root["MaxSize"] Ack_flag = False def wait_for_ack(): - global Ack_flag timeout = 100 - while Ack_flag and timeout > 0: + while Ack_flag and Err_flag == False and timeout > 0: time.sleep(0.01) timeout = timeout -1 - if Ack_flag: - print("Error: Ack timeout") + if 0 == timeout: + print("Error: Timeout") return Ack_flag @@ -119,7 +126,8 @@ out_hash_md5 = hashlib.md5() Run_flag = True while Run_flag: - if wait_for_ack(): # We use Ack here + if wait_for_ack(): # We use Ack here + client.publish(mypublish, "0") # Abort any failed upload Run_flag = False else: From 85a6ab797a83df95410ef00a540b0de4fcfac5e1 Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Thu, 20 May 2021 19:34:51 +0200 Subject: [PATCH 04/11] LVGL add screen support --- .../Berry/default/be_lv_lvgl_module.c | 830 +++++---- .../Berry/default/be_lvgl_widgets_lib.c | 1 + lib/libesp32/Berry/default/berry_conf.h | 2 +- lib/libesp32/Berry/generate/be_const_strtab.h | 1093 ++++++----- .../Berry/generate/be_const_strtab_def.h | 1616 ++++++++--------- lib/libesp32/Berry/generate/be_fixed_lvgl.h | 139 +- lib/libesp32/Berry/include/be_lvgl.h | 39 + lib/libesp32/Berry/src/be_class.c | 20 +- lib/libesp32/Berry/src/be_vm.c | 22 +- tasmota/lvgl_berry/be_lv_c_mapping.h | 14 - tasmota/lvgl_berry/tasmota_lv_conf.h | 8 +- tasmota/my_user_config.h | 1 + tasmota/xdrv_52_3_berry_lvgl.ino | 90 +- tasmota/xdrv_54_lvgl.ino | 2 +- tools/lv_berry/convert.py | 82 +- tools/lv_berry/lv_module.h | 908 ++++----- 16 files changed, 2484 insertions(+), 2383 deletions(-) create mode 100644 lib/libesp32/Berry/include/be_lvgl.h diff --git a/lib/libesp32/Berry/default/be_lv_lvgl_module.c b/lib/libesp32/Berry/default/be_lv_lvgl_module.c index c166c095c..48c936609 100644 --- a/lib/libesp32/Berry/default/be_lv_lvgl_module.c +++ b/lib/libesp32/Berry/default/be_lv_lvgl_module.c @@ -9,6 +9,7 @@ #ifdef USE_LVGL #include "lvgl.h" +#include "be_lvgl.h" extern int lv0_member(bvm *vm); // resolve virtual members @@ -21,13 +22,33 @@ extern int lv0_load_seg7_font(bvm *vm); extern int lv0_load_font(bvm *vm); extern int lv0_load_freetype_font(bvm *vm); -extern int lv0_scr_act(bvm *vm); -extern int lv0_layer_top(bvm *vm); -extern int lv0_layer_sys(bvm *vm); -extern int lv0_get_hor_res(bvm *vm); -extern int lv0_get_ver_res(bvm *vm); extern int lv0_screenshot(bvm *vm); +static int lv_get_hor_res(void) { + return lv_disp_get_hor_res(lv_disp_get_default()); +} +static int lv_get_ver_res(bvm *vm) { + return lv_disp_get_ver_res(lv_disp_get_default()); +} + +/* `lv` methods */ +const lvbe_call_c_t lv_func[] = { + // resolution + { "get_hor_res", (void*) &lv_get_hor_res, "i", "" }, + { "get_ver_res", (void*) &lv_get_ver_res, "i", "" }, + + // layers + { "layer_sys", (void*) &lv_layer_sys, "lv_obj", "" }, + { "layer_top", (void*) &lv_layer_top, "lv_obj", "" }, + + // screens + { "scr_act", (void*) &lv_scr_act, "lv_obj", "" }, + { "scr_load", (void*) &lv_scr_load, "", "(lv_obj)" }, + { "scr_load_anim", (void*) &lv_scr_load_anim, "", "(lv_obj)iiib" }, +}; +const size_t lv_func_size = sizeof(lv_func) / sizeof(lv_func[0]); + + typedef struct lvbe_constant_t { @@ -37,392 +58,439 @@ typedef struct lvbe_constant_t { const lvbe_constant_t lv0_constants[] = { - { "ALIGN_CENTER", 0 }, - { "ALIGN_IN_BOTTOM_LEFT", 4 }, - { "ALIGN_IN_BOTTOM_MID", 5 }, - { "ALIGN_IN_BOTTOM_RIGHT", 6 }, - { "ALIGN_IN_LEFT_MID", 7 }, - { "ALIGN_IN_RIGHT_MID", 8 }, - { "ALIGN_IN_TOP_LEFT", 1 }, - { "ALIGN_IN_TOP_MID", 2 }, - { "ALIGN_IN_TOP_RIGHT", 3 }, - { "ALIGN_OUT_BOTTOM_LEFT", 12 }, - { "ALIGN_OUT_BOTTOM_MID", 13 }, - { "ALIGN_OUT_BOTTOM_RIGHT", 14 }, - { "ALIGN_OUT_LEFT_BOTTOM", 17 }, - { "ALIGN_OUT_LEFT_MID", 16 }, - { "ALIGN_OUT_LEFT_TOP", 15 }, - { "ALIGN_OUT_RIGHT_BOTTOM", 20 }, - { "ALIGN_OUT_RIGHT_MID", 19 }, - { "ALIGN_OUT_RIGHT_TOP", 18 }, - { "ALIGN_OUT_TOP_LEFT", 9 }, - { "ALIGN_OUT_TOP_MID", 10 }, - { "ALIGN_OUT_TOP_RIGHT", 11 }, - { "ANIM_OFF", 0 }, - { "ANIM_ON", 1 }, + { "ALIGN_CENTER", LV_ALIGN_CENTER }, + { "ALIGN_IN_BOTTOM_LEFT", LV_ALIGN_IN_BOTTOM_LEFT }, + { "ALIGN_IN_BOTTOM_MID", LV_ALIGN_IN_BOTTOM_MID }, + { "ALIGN_IN_BOTTOM_RIGHT", LV_ALIGN_IN_BOTTOM_RIGHT }, + { "ALIGN_IN_LEFT_MID", LV_ALIGN_IN_LEFT_MID }, + { "ALIGN_IN_RIGHT_MID", LV_ALIGN_IN_RIGHT_MID }, + { "ALIGN_IN_TOP_LEFT", LV_ALIGN_IN_TOP_LEFT }, + { "ALIGN_IN_TOP_MID", LV_ALIGN_IN_TOP_MID }, + { "ALIGN_IN_TOP_RIGHT", LV_ALIGN_IN_TOP_RIGHT }, + { "ALIGN_OUT_BOTTOM_LEFT", LV_ALIGN_OUT_BOTTOM_LEFT }, + { "ALIGN_OUT_BOTTOM_MID", LV_ALIGN_OUT_BOTTOM_MID }, + { "ALIGN_OUT_BOTTOM_RIGHT", LV_ALIGN_OUT_BOTTOM_RIGHT }, + { "ALIGN_OUT_LEFT_BOTTOM", LV_ALIGN_OUT_LEFT_BOTTOM }, + { "ALIGN_OUT_LEFT_MID", LV_ALIGN_OUT_LEFT_MID }, + { "ALIGN_OUT_LEFT_TOP", LV_ALIGN_OUT_LEFT_TOP }, + { "ALIGN_OUT_RIGHT_BOTTOM", LV_ALIGN_OUT_RIGHT_BOTTOM }, + { "ALIGN_OUT_RIGHT_MID", LV_ALIGN_OUT_RIGHT_MID }, + { "ALIGN_OUT_RIGHT_TOP", LV_ALIGN_OUT_RIGHT_TOP }, + { "ALIGN_OUT_TOP_LEFT", LV_ALIGN_OUT_TOP_LEFT }, + { "ALIGN_OUT_TOP_MID", LV_ALIGN_OUT_TOP_MID }, + { "ALIGN_OUT_TOP_RIGHT", LV_ALIGN_OUT_TOP_RIGHT }, + { "ANIM_OFF", LV_ANIM_OFF }, + { "ANIM_ON", LV_ANIM_ON }, { "AQUA", 65535 }, - { "ARC_PART_BG", 0 }, - { "ARC_PART_INDIC", 1 }, - { "ARC_PART_KNOB", 2 }, - { "ARC_TYPE_NORMAL", 0 }, - { "ARC_TYPE_REVERSE", 2 }, - { "ARC_TYPE_SYMMETRIC", 1 }, - { "BAR_TYPE_CUSTOM", 2 }, - { "BAR_TYPE_NORMAL", 0 }, - { "BAR_TYPE_SYMMETRICAL", 1 }, + { "ARC_PART_BG", LV_ARC_PART_BG }, + { "ARC_PART_INDIC", LV_ARC_PART_INDIC }, + { "ARC_PART_KNOB", LV_ARC_PART_KNOB }, + { "ARC_TYPE_NORMAL", LV_ARC_TYPE_NORMAL }, + { "ARC_TYPE_REVERSE", LV_ARC_TYPE_REVERSE }, + { "ARC_TYPE_SYMMETRIC", LV_ARC_TYPE_SYMMETRIC }, + { "BAR_TYPE_CUSTOM", LV_BAR_TYPE_CUSTOM }, + { "BAR_TYPE_NORMAL", LV_BAR_TYPE_NORMAL }, + { "BAR_TYPE_SYMMETRICAL", LV_BAR_TYPE_SYMMETRICAL }, { "BLACK", 0 }, - { "BLEND_MODE_ADDITIVE", 1 }, - { "BLEND_MODE_NORMAL", 0 }, - { "BLEND_MODE_SUBTRACTIVE", 2 }, + { "BLEND_MODE_ADDITIVE", LV_BLEND_MODE_ADDITIVE }, + { "BLEND_MODE_NORMAL", LV_BLEND_MODE_NORMAL }, + { "BLEND_MODE_SUBTRACTIVE", LV_BLEND_MODE_SUBTRACTIVE }, { "BLUE", 255 }, - { "BORDER_SIDE_BOTTOM", 1 }, - { "BORDER_SIDE_FULL", 15 }, - { "BORDER_SIDE_INTERNAL", 16 }, - { "BORDER_SIDE_LEFT", 4 }, - { "BORDER_SIDE_NONE", 0 }, - { "BORDER_SIDE_RIGHT", 8 }, - { "BORDER_SIDE_TOP", 2 }, - { "BTNMATRIX_CTRL_CHECKABLE", 64 }, - { "BTNMATRIX_CTRL_CHECK_STATE", 128 }, - { "BTNMATRIX_CTRL_CLICK_TRIG", 256 }, - { "BTNMATRIX_CTRL_DISABLED", 32 }, - { "BTNMATRIX_CTRL_HIDDEN", 8 }, - { "BTNMATRIX_CTRL_NO_REPEAT", 16 }, - { "BTN_STATE_CHECKED_DISABLED", 5 }, - { "BTN_STATE_CHECKED_PRESSED", 4 }, - { "BTN_STATE_CHECKED_RELEASED", 3 }, - { "BTN_STATE_DISABLED", 2 }, - { "BTN_STATE_PRESSED", 1 }, - { "BTN_STATE_RELEASED", 0 }, - { "CALENDAR_PART_BG", 0 }, - { "CALENDAR_PART_DATE", 3 }, - { "CALENDAR_PART_DAY_NAMES", 2 }, - { "CALENDAR_PART_HEADER", 1 }, - { "CHART_AXIS_DRAW_LAST_TICK", 1 }, - { "CHART_AXIS_INVERSE_LABELS_ORDER", 2 }, - { "CHART_AXIS_PRIMARY_Y", 0 }, - { "CHART_AXIS_SECONDARY_Y", 1 }, - { "CHART_AXIS_SKIP_LAST_TICK", 0 }, - { "CHART_CURSOR_DOWN", 8 }, - { "CHART_CURSOR_LEFT", 4 }, - { "CHART_CURSOR_NONE", 0 }, - { "CHART_CURSOR_RIGHT", 1 }, - { "CHART_CURSOR_UP", 2 }, - { "CHART_PART_BG", 0 }, - { "CHART_PART_CURSOR", 3 }, - { "CHART_PART_SERIES", 2 }, - { "CHART_PART_SERIES_BG", 1 }, - { "CHART_TYPE_COLUMN", 2 }, - { "CHART_TYPE_LINE", 1 }, - { "CHART_TYPE_NONE", 0 }, - { "CHART_UPDATE_MODE_CIRCULAR", 1 }, - { "CHART_UPDATE_MODE_SHIFT", 0 }, - { "CHECKBOX_PART_BG", 0 }, - { "CHECKBOX_PART_BULLET", 64 }, - { "CPICKER_COLOR_MODE_HUE", 0 }, - { "CPICKER_COLOR_MODE_SATURATION", 1 }, - { "CPICKER_COLOR_MODE_VALUE", 2 }, - { "CPICKER_PART_KNOB", 1 }, - { "CPICKER_PART_MAIN", 0 }, - { "CPICKER_TYPE_DISC", 1 }, - { "CPICKER_TYPE_RECT", 0 }, + { "BORDER_SIDE_BOTTOM", LV_BORDER_SIDE_BOTTOM }, + { "BORDER_SIDE_FULL", LV_BORDER_SIDE_FULL }, + { "BORDER_SIDE_INTERNAL", LV_BORDER_SIDE_INTERNAL }, + { "BORDER_SIDE_LEFT", LV_BORDER_SIDE_LEFT }, + { "BORDER_SIDE_NONE", LV_BORDER_SIDE_NONE }, + { "BORDER_SIDE_RIGHT", LV_BORDER_SIDE_RIGHT }, + { "BORDER_SIDE_TOP", LV_BORDER_SIDE_TOP }, + { "BTNMATRIX_CTRL_CHECKABLE", LV_BTNMATRIX_CTRL_CHECKABLE }, + { "BTNMATRIX_CTRL_CHECK_STATE", LV_BTNMATRIX_CTRL_CHECK_STATE }, + { "BTNMATRIX_CTRL_CLICK_TRIG", LV_BTNMATRIX_CTRL_CLICK_TRIG }, + { "BTNMATRIX_CTRL_DISABLED", LV_BTNMATRIX_CTRL_DISABLED }, + { "BTNMATRIX_CTRL_HIDDEN", LV_BTNMATRIX_CTRL_HIDDEN }, + { "BTNMATRIX_CTRL_NO_REPEAT", LV_BTNMATRIX_CTRL_NO_REPEAT }, + { "BTN_STATE_CHECKED_DISABLED", LV_BTN_STATE_CHECKED_DISABLED }, + { "BTN_STATE_CHECKED_PRESSED", LV_BTN_STATE_CHECKED_PRESSED }, + { "BTN_STATE_CHECKED_RELEASED", LV_BTN_STATE_CHECKED_RELEASED }, + { "BTN_STATE_DISABLED", LV_BTN_STATE_DISABLED }, + { "BTN_STATE_PRESSED", LV_BTN_STATE_PRESSED }, + { "BTN_STATE_RELEASED", LV_BTN_STATE_RELEASED }, + { "CALENDAR_PART_BG", LV_CALENDAR_PART_BG }, + { "CALENDAR_PART_DATE", LV_CALENDAR_PART_DATE }, + { "CALENDAR_PART_DAY_NAMES", LV_CALENDAR_PART_DAY_NAMES }, + { "CALENDAR_PART_HEADER", LV_CALENDAR_PART_HEADER }, + { "CHART_AXIS_DRAW_LAST_TICK", LV_CHART_AXIS_DRAW_LAST_TICK }, + { "CHART_AXIS_INVERSE_LABELS_ORDER", LV_CHART_AXIS_INVERSE_LABELS_ORDER }, + { "CHART_AXIS_PRIMARY_Y", LV_CHART_AXIS_PRIMARY_Y }, + { "CHART_AXIS_SECONDARY_Y", LV_CHART_AXIS_SECONDARY_Y }, + { "CHART_AXIS_SKIP_LAST_TICK", LV_CHART_AXIS_SKIP_LAST_TICK }, + { "CHART_CURSOR_DOWN", LV_CHART_CURSOR_DOWN }, + { "CHART_CURSOR_LEFT", LV_CHART_CURSOR_LEFT }, + { "CHART_CURSOR_NONE", LV_CHART_CURSOR_NONE }, + { "CHART_CURSOR_RIGHT", LV_CHART_CURSOR_RIGHT }, + { "CHART_CURSOR_UP", LV_CHART_CURSOR_UP }, + { "CHART_PART_BG", LV_CHART_PART_BG }, + { "CHART_PART_CURSOR", LV_CHART_PART_CURSOR }, + { "CHART_PART_SERIES", LV_CHART_PART_SERIES }, + { "CHART_PART_SERIES_BG", LV_CHART_PART_SERIES_BG }, + { "CHART_TYPE_COLUMN", LV_CHART_TYPE_COLUMN }, + { "CHART_TYPE_LINE", LV_CHART_TYPE_LINE }, + { "CHART_TYPE_NONE", LV_CHART_TYPE_NONE }, + { "CHART_UPDATE_MODE_CIRCULAR", LV_CHART_UPDATE_MODE_CIRCULAR }, + { "CHART_UPDATE_MODE_SHIFT", LV_CHART_UPDATE_MODE_SHIFT }, + { "CHECKBOX_PART_BG", LV_CHECKBOX_PART_BG }, + { "CHECKBOX_PART_BULLET", LV_CHECKBOX_PART_BULLET }, + { "CPICKER_COLOR_MODE_HUE", LV_CPICKER_COLOR_MODE_HUE }, + { "CPICKER_COLOR_MODE_SATURATION", LV_CPICKER_COLOR_MODE_SATURATION }, + { "CPICKER_COLOR_MODE_VALUE", LV_CPICKER_COLOR_MODE_VALUE }, + { "CPICKER_PART_KNOB", LV_CPICKER_PART_KNOB }, + { "CPICKER_PART_MAIN", LV_CPICKER_PART_MAIN }, + { "CPICKER_TYPE_DISC", LV_CPICKER_TYPE_DISC }, + { "CPICKER_TYPE_RECT", LV_CPICKER_TYPE_RECT }, { "CYAN", 65535 }, - { "DISP_ROT_180", 2 }, - { "DISP_ROT_270", 3 }, - { "DISP_ROT_90", 1 }, - { "DISP_ROT_NONE", 0 }, - { "DISP_SIZE_EXTRA_LARGE", 3 }, - { "DISP_SIZE_LARGE", 2 }, - { "DISP_SIZE_MEDIUM", 1 }, - { "DISP_SIZE_SMALL", 0 }, - { "DRAG_DIR_BOTH", 3 }, - { "DRAG_DIR_HOR", 1 }, - { "DRAG_DIR_ONE", 4 }, - { "DRAG_DIR_VER", 2 }, - { "DROPDOWN_DIR_DOWN", 0 }, - { "DROPDOWN_DIR_LEFT", 2 }, - { "DROPDOWN_DIR_RIGHT", 3 }, - { "DROPDOWN_DIR_UP", 1 }, - { "DROPDOWN_PART_LIST", 64 }, - { "DROPDOWN_PART_MAIN", 0 }, - { "DROPDOWN_PART_SCROLLBAR", 65 }, - { "DROPDOWN_PART_SELECTED", 66 }, - { "EVENT_APPLY", 19 }, - { "EVENT_CANCEL", 20 }, - { "EVENT_CLICKED", 6 }, - { "EVENT_DEFOCUSED", 14 }, - { "EVENT_DELETE", 21 }, - { "EVENT_DRAG_BEGIN", 8 }, - { "EVENT_DRAG_END", 9 }, - { "EVENT_DRAG_THROW_BEGIN", 10 }, - { "EVENT_FOCUSED", 13 }, - { "EVENT_GESTURE", 11 }, - { "EVENT_INSERT", 17 }, - { "EVENT_KEY", 12 }, - { "EVENT_LEAVE", 15 }, - { "EVENT_LONG_PRESSED", 4 }, - { "EVENT_LONG_PRESSED_REPEAT", 5 }, - { "EVENT_PRESSED", 0 }, - { "EVENT_PRESSING", 1 }, - { "EVENT_PRESS_LOST", 2 }, - { "EVENT_REFRESH", 18 }, - { "EVENT_RELEASED", 7 }, - { "EVENT_SHORT_CLICKED", 3 }, - { "EVENT_VALUE_CHANGED", 16 }, - { "FIT_MAX", 3 }, - { "FIT_NONE", 0 }, - { "FIT_PARENT", 2 }, - { "FIT_TIGHT", 1 }, - { "FS_MODE_RD", 2 }, - { "FS_MODE_WR", 1 }, - { "FS_RES_BUSY", 7 }, - { "FS_RES_DENIED", 6 }, - { "FS_RES_FS_ERR", 2 }, - { "FS_RES_FULL", 4 }, - { "FS_RES_HW_ERR", 1 }, - { "FS_RES_INV_PARAM", 11 }, - { "FS_RES_LOCKED", 5 }, - { "FS_RES_NOT_EX", 3 }, - { "FS_RES_NOT_IMP", 9 }, - { "FS_RES_OK", 0 }, - { "FS_RES_OUT_OF_MEM", 10 }, - { "FS_RES_TOUT", 8 }, - { "FS_RES_UNKNOWN", 12 }, - { "GAUGE_PART_MAIN", 0 }, - { "GAUGE_PART_MAJOR", 1 }, - { "GAUGE_PART_NEEDLE", 2 }, - { "GESTURE_DIR_BOTTOM", 1 }, - { "GESTURE_DIR_LEFT", 2 }, - { "GESTURE_DIR_RIGHT", 3 }, - { "GESTURE_DIR_TOP", 0 }, - { "GRAD_DIR_HOR", 2 }, - { "GRAD_DIR_NONE", 0 }, - { "GRAD_DIR_VER", 1 }, + { "DISP_ROT_180", LV_DISP_ROT_180 }, + { "DISP_ROT_270", LV_DISP_ROT_270 }, + { "DISP_ROT_90", LV_DISP_ROT_90 }, + { "DISP_ROT_NONE", LV_DISP_ROT_NONE }, + { "DISP_SIZE_EXTRA_LARGE", LV_DISP_SIZE_EXTRA_LARGE }, + { "DISP_SIZE_LARGE", LV_DISP_SIZE_LARGE }, + { "DISP_SIZE_MEDIUM", LV_DISP_SIZE_MEDIUM }, + { "DISP_SIZE_SMALL", LV_DISP_SIZE_SMALL }, + { "DRAG_DIR_BOTH", LV_DRAG_DIR_BOTH }, + { "DRAG_DIR_HOR", LV_DRAG_DIR_HOR }, + { "DRAG_DIR_ONE", LV_DRAG_DIR_ONE }, + { "DRAG_DIR_VER", LV_DRAG_DIR_VER }, + { "DROPDOWN_DIR_DOWN", LV_DROPDOWN_DIR_DOWN }, + { "DROPDOWN_DIR_LEFT", LV_DROPDOWN_DIR_LEFT }, + { "DROPDOWN_DIR_RIGHT", LV_DROPDOWN_DIR_RIGHT }, + { "DROPDOWN_DIR_UP", LV_DROPDOWN_DIR_UP }, + { "DROPDOWN_PART_LIST", LV_DROPDOWN_PART_LIST }, + { "DROPDOWN_PART_MAIN", LV_DROPDOWN_PART_MAIN }, + { "DROPDOWN_PART_SCROLLBAR", LV_DROPDOWN_PART_SCROLLBAR }, + { "DROPDOWN_PART_SELECTED", LV_DROPDOWN_PART_SELECTED }, + { "EVENT_APPLY", LV_EVENT_APPLY }, + { "EVENT_CANCEL", LV_EVENT_CANCEL }, + { "EVENT_CLICKED", LV_EVENT_CLICKED }, + { "EVENT_DEFOCUSED", LV_EVENT_DEFOCUSED }, + { "EVENT_DELETE", LV_EVENT_DELETE }, + { "EVENT_DRAG_BEGIN", LV_EVENT_DRAG_BEGIN }, + { "EVENT_DRAG_END", LV_EVENT_DRAG_END }, + { "EVENT_DRAG_THROW_BEGIN", LV_EVENT_DRAG_THROW_BEGIN }, + { "EVENT_FOCUSED", LV_EVENT_FOCUSED }, + { "EVENT_GESTURE", LV_EVENT_GESTURE }, + { "EVENT_INSERT", LV_EVENT_INSERT }, + { "EVENT_KEY", LV_EVENT_KEY }, + { "EVENT_LEAVE", LV_EVENT_LEAVE }, + { "EVENT_LONG_PRESSED", LV_EVENT_LONG_PRESSED }, + { "EVENT_LONG_PRESSED_REPEAT", LV_EVENT_LONG_PRESSED_REPEAT }, + { "EVENT_PRESSED", LV_EVENT_PRESSED }, + { "EVENT_PRESSING", LV_EVENT_PRESSING }, + { "EVENT_PRESS_LOST", LV_EVENT_PRESS_LOST }, + { "EVENT_REFRESH", LV_EVENT_REFRESH }, + { "EVENT_RELEASED", LV_EVENT_RELEASED }, + { "EVENT_SHORT_CLICKED", LV_EVENT_SHORT_CLICKED }, + { "EVENT_VALUE_CHANGED", LV_EVENT_VALUE_CHANGED }, + { "FIT_MAX", LV_FIT_MAX }, + { "FIT_NONE", LV_FIT_NONE }, + { "FIT_PARENT", LV_FIT_PARENT }, + { "FIT_TIGHT", LV_FIT_TIGHT }, + { "FS_MODE_RD", LV_FS_MODE_RD }, + { "FS_MODE_WR", LV_FS_MODE_WR }, + { "FS_RES_BUSY", LV_FS_RES_BUSY }, + { "FS_RES_DENIED", LV_FS_RES_DENIED }, + { "FS_RES_FS_ERR", LV_FS_RES_FS_ERR }, + { "FS_RES_FULL", LV_FS_RES_FULL }, + { "FS_RES_HW_ERR", LV_FS_RES_HW_ERR }, + { "FS_RES_INV_PARAM", LV_FS_RES_INV_PARAM }, + { "FS_RES_LOCKED", LV_FS_RES_LOCKED }, + { "FS_RES_NOT_EX", LV_FS_RES_NOT_EX }, + { "FS_RES_NOT_IMP", LV_FS_RES_NOT_IMP }, + { "FS_RES_OK", LV_FS_RES_OK }, + { "FS_RES_OUT_OF_MEM", LV_FS_RES_OUT_OF_MEM }, + { "FS_RES_TOUT", LV_FS_RES_TOUT }, + { "FS_RES_UNKNOWN", LV_FS_RES_UNKNOWN }, + { "GAUGE_PART_MAIN", LV_GAUGE_PART_MAIN }, + { "GAUGE_PART_MAJOR", LV_GAUGE_PART_MAJOR }, + { "GAUGE_PART_NEEDLE", LV_GAUGE_PART_NEEDLE }, + { "GESTURE_DIR_BOTTOM", LV_GESTURE_DIR_BOTTOM }, + { "GESTURE_DIR_LEFT", LV_GESTURE_DIR_LEFT }, + { "GESTURE_DIR_RIGHT", LV_GESTURE_DIR_RIGHT }, + { "GESTURE_DIR_TOP", LV_GESTURE_DIR_TOP }, + { "GRAD_DIR_HOR", LV_GRAD_DIR_HOR }, + { "GRAD_DIR_NONE", LV_GRAD_DIR_NONE }, + { "GRAD_DIR_VER", LV_GRAD_DIR_VER }, { "GRAY", 8421504 }, { "GREEN", 32768 }, - { "INDEV_STATE_PR", 1 }, - { "INDEV_STATE_REL", 0 }, - { "KEYBOARD_MODE_NUM", 3 }, - { "KEYBOARD_MODE_SPECIAL", 2 }, - { "KEYBOARD_MODE_TEXT_LOWER", 0 }, - { "KEYBOARD_MODE_TEXT_UPPER", 1 }, - { "KEYBOARD_PART_BG", 0 }, - { "KEYBOARD_PART_BTN", 1 }, - { "KEY_BACKSPACE", 8 }, - { "KEY_DEL", 127 }, - { "KEY_DOWN", 18 }, - { "KEY_END", 3 }, - { "KEY_ENTER", 10 }, - { "KEY_ESC", 27 }, - { "KEY_HOME", 2 }, - { "KEY_LEFT", 20 }, - { "KEY_NEXT", 9 }, - { "KEY_PREV", 11 }, - { "KEY_RIGHT", 19 }, - { "KEY_UP", 17 }, - { "LABEL_ALIGN_AUTO", 3 }, - { "LABEL_ALIGN_CENTER", 1 }, - { "LABEL_ALIGN_LEFT", 0 }, - { "LABEL_ALIGN_RIGHT", 2 }, - { "LABEL_LONG_BREAK", 1 }, - { "LABEL_LONG_CROP", 5 }, - { "LABEL_LONG_DOT", 2 }, - { "LABEL_LONG_EXPAND", 0 }, - { "LABEL_LONG_SROLL", 3 }, - { "LABEL_LONG_SROLL_CIRC", 4 }, - { "LAYOUT_CENTER", 1 }, - { "LAYOUT_COLUMN_LEFT", 2 }, - { "LAYOUT_COLUMN_MID", 3 }, - { "LAYOUT_COLUMN_RIGHT", 4 }, - { "LAYOUT_GRID", 11 }, - { "LAYOUT_OFF", 0 }, - { "LAYOUT_PRETTY_BOTTOM", 10 }, - { "LAYOUT_PRETTY_MID", 9 }, - { "LAYOUT_PRETTY_TOP", 8 }, - { "LAYOUT_ROW_BOTTOM", 7 }, - { "LAYOUT_ROW_MID", 6 }, - { "LAYOUT_ROW_TOP", 5 }, - { "LED_PART_MAIN", 0 }, + { "INDEV_STATE_PR", LV_INDEV_STATE_PR }, + { "INDEV_STATE_REL", LV_INDEV_STATE_REL }, + { "KEYBOARD_MODE_NUM", LV_KEYBOARD_MODE_NUM }, + { "KEYBOARD_MODE_SPECIAL", LV_KEYBOARD_MODE_SPECIAL }, + { "KEYBOARD_MODE_TEXT_LOWER", LV_KEYBOARD_MODE_TEXT_LOWER }, + { "KEYBOARD_MODE_TEXT_UPPER", LV_KEYBOARD_MODE_TEXT_UPPER }, + { "KEYBOARD_PART_BG", LV_KEYBOARD_PART_BG }, + { "KEYBOARD_PART_BTN", LV_KEYBOARD_PART_BTN }, + { "KEY_BACKSPACE", LV_KEY_BACKSPACE }, + { "KEY_DEL", LV_KEY_DEL }, + { "KEY_DOWN", LV_KEY_DOWN }, + { "KEY_END", LV_KEY_END }, + { "KEY_ENTER", LV_KEY_ENTER }, + { "KEY_ESC", LV_KEY_ESC }, + { "KEY_HOME", LV_KEY_HOME }, + { "KEY_LEFT", LV_KEY_LEFT }, + { "KEY_NEXT", LV_KEY_NEXT }, + { "KEY_PREV", LV_KEY_PREV }, + { "KEY_RIGHT", LV_KEY_RIGHT }, + { "KEY_UP", LV_KEY_UP }, + { "LABEL_ALIGN_AUTO", LV_LABEL_ALIGN_AUTO }, + { "LABEL_ALIGN_CENTER", LV_LABEL_ALIGN_CENTER }, + { "LABEL_ALIGN_LEFT", LV_LABEL_ALIGN_LEFT }, + { "LABEL_ALIGN_RIGHT", LV_LABEL_ALIGN_RIGHT }, + { "LABEL_LONG_BREAK", LV_LABEL_LONG_BREAK }, + { "LABEL_LONG_CROP", LV_LABEL_LONG_CROP }, + { "LABEL_LONG_DOT", LV_LABEL_LONG_DOT }, + { "LABEL_LONG_EXPAND", LV_LABEL_LONG_EXPAND }, + { "LABEL_LONG_SROLL", LV_LABEL_LONG_SROLL }, + { "LABEL_LONG_SROLL_CIRC", LV_LABEL_LONG_SROLL_CIRC }, + { "LAYOUT_CENTER", LV_LAYOUT_CENTER }, + { "LAYOUT_COLUMN_LEFT", LV_LAYOUT_COLUMN_LEFT }, + { "LAYOUT_COLUMN_MID", LV_LAYOUT_COLUMN_MID }, + { "LAYOUT_COLUMN_RIGHT", LV_LAYOUT_COLUMN_RIGHT }, + { "LAYOUT_GRID", LV_LAYOUT_GRID }, + { "LAYOUT_OFF", LV_LAYOUT_OFF }, + { "LAYOUT_PRETTY_BOTTOM", LV_LAYOUT_PRETTY_BOTTOM }, + { "LAYOUT_PRETTY_MID", LV_LAYOUT_PRETTY_MID }, + { "LAYOUT_PRETTY_TOP", LV_LAYOUT_PRETTY_TOP }, + { "LAYOUT_ROW_BOTTOM", LV_LAYOUT_ROW_BOTTOM }, + { "LAYOUT_ROW_MID", LV_LAYOUT_ROW_MID }, + { "LAYOUT_ROW_TOP", LV_LAYOUT_ROW_TOP }, + { "LED_PART_MAIN", LV_LED_PART_MAIN }, { "LIME", 65280 }, - { "LINEMETER_PART_MAIN", 0 }, - { "LIST_PART_BG", 0 }, - { "LIST_PART_EDGE_FLASH", 2 }, - { "LIST_PART_SCROLLBAR", 1 }, + { "LINEMETER_PART_MAIN", LV_LINEMETER_PART_MAIN }, + { "LIST_PART_BG", LV_LIST_PART_BG }, + { "LIST_PART_EDGE_FLASH", LV_LIST_PART_EDGE_FLASH }, + { "LIST_PART_SCROLLBAR", LV_LIST_PART_SCROLLBAR }, { "MAGENTA", 16711935 }, { "MAROON", 8388608 }, + { "MSGBOX_PART_BG", LV_MSGBOX_PART_BG }, + { "MSGBOX_PART_BTN", LV_MSGBOX_PART_BTN }, + { "MSGBOX_PART_BTN_BG", LV_MSGBOX_PART_BTN_BG }, { "NAVY", 128 }, - { "OBJMASK_PART_MAIN", 0 }, - { "OBJ_PART_ALL", 255 }, - { "OBJ_PART_MAIN", 0 }, - { "OBJ_PART_REAL_FIRST", 64 }, - { "OBJ_PART_VIRTUAL_FIRST", 1 }, + { "OBJMASK_PART_MAIN", LV_OBJMASK_PART_MAIN }, + { "OBJ_PART_ALL", LV_OBJ_PART_ALL }, + { "OBJ_PART_MAIN", LV_OBJ_PART_MAIN }, { "OLIVE", 8421376 }, - { "OPA_0", 0 }, - { "OPA_10", 25 }, - { "OPA_100", 255 }, - { "OPA_20", 51 }, - { "OPA_30", 76 }, - { "OPA_40", 102 }, - { "OPA_50", 127 }, - { "OPA_60", 153 }, - { "OPA_70", 178 }, - { "OPA_80", 204 }, - { "OPA_90", 229 }, - { "OPA_COVER", 255 }, - { "OPA_TRANSP", 0 }, - { "PAGE_EDGE_BOTTOM", 8 }, - { "PAGE_EDGE_LEFT", 1 }, - { "PAGE_EDGE_RIGHT", 4 }, - { "PAGE_EDGE_TOP", 2 }, - { "PROTECT_CHILD_CHG", 1 }, - { "PROTECT_CLICK_FOCUS", 32 }, - { "PROTECT_EVENT_TO_DISABLED", 64 }, - { "PROTECT_FOLLOW", 8 }, - { "PROTECT_NONE", 0 }, - { "PROTECT_PARENT", 2 }, - { "PROTECT_POS", 4 }, - { "PROTECT_PRESS_LOST", 16 }, + { "OPA_0", LV_OPA_0 }, + { "OPA_10", LV_OPA_10 }, + { "OPA_100", LV_OPA_100 }, + { "OPA_20", LV_OPA_20 }, + { "OPA_30", LV_OPA_30 }, + { "OPA_40", LV_OPA_40 }, + { "OPA_50", LV_OPA_50 }, + { "OPA_60", LV_OPA_60 }, + { "OPA_70", LV_OPA_70 }, + { "OPA_80", LV_OPA_80 }, + { "OPA_90", LV_OPA_90 }, + { "OPA_COVER", LV_OPA_COVER }, + { "OPA_TRANSP", LV_OPA_TRANSP }, + { "PAGE_EDGE_BOTTOM", LV_PAGE_EDGE_BOTTOM }, + { "PAGE_EDGE_LEFT", LV_PAGE_EDGE_LEFT }, + { "PAGE_EDGE_RIGHT", LV_PAGE_EDGE_RIGHT }, + { "PAGE_EDGE_TOP", LV_PAGE_EDGE_TOP }, + { "PAGE_PART_BG", LV_PAGE_PART_BG }, + { "PAGE_PART_EDGE_FLASH", LV_PAGE_PART_EDGE_FLASH }, + { "PAGE_PART_SCROLLABLE", LV_PAGE_PART_SCROLLABLE }, + { "PAGE_PART_SCROLLBAR", LV_PAGE_PART_SCROLLBAR }, + { "PROTECT_CHILD_CHG", LV_PROTECT_CHILD_CHG }, + { "PROTECT_CLICK_FOCUS", LV_PROTECT_CLICK_FOCUS }, + { "PROTECT_EVENT_TO_DISABLED", LV_PROTECT_EVENT_TO_DISABLED }, + { "PROTECT_FOLLOW", LV_PROTECT_FOLLOW }, + { "PROTECT_NONE", LV_PROTECT_NONE }, + { "PROTECT_PARENT", LV_PROTECT_PARENT }, + { "PROTECT_POS", LV_PROTECT_POS }, + { "PROTECT_PRESS_LOST", LV_PROTECT_PRESS_LOST }, { "PURPLE", 8388736 }, { "RED", 16711680 }, - { "ROLLER_MODE_INFINITE", 1 }, - { "ROLLER_MODE_NORMAL", 0 }, - { "SCROLLBAR_MODE_AUTO", 3 }, - { "SCROLLBAR_MODE_DRAG", 2 }, - { "SCROLLBAR_MODE_HIDE", 4 }, - { "SCROLLBAR_MODE_OFF", 0 }, - { "SCROLLBAR_MODE_ON", 1 }, - { "SCROLLBAR_MODE_UNHIDE", 8 }, + { "ROLLER_MODE_INFINITE", LV_ROLLER_MODE_INFINITE }, + { "ROLLER_MODE_NORMAL", LV_ROLLER_MODE_NORMAL }, + { "ROLLER_PART_BG", LV_ROLLER_PART_BG }, + { "ROLLER_PART_SELECTED", LV_ROLLER_PART_SELECTED }, + { "SCROLLBAR_MODE_AUTO", LV_SCROLLBAR_MODE_AUTO }, + { "SCROLLBAR_MODE_DRAG", LV_SCROLLBAR_MODE_DRAG }, + { "SCROLLBAR_MODE_HIDE", LV_SCROLLBAR_MODE_HIDE }, + { "SCROLLBAR_MODE_OFF", LV_SCROLLBAR_MODE_OFF }, + { "SCROLLBAR_MODE_ON", LV_SCROLLBAR_MODE_ON }, + { "SCROLLBAR_MODE_UNHIDE", LV_SCROLLBAR_MODE_UNHIDE }, + { "SCR_LOAD_ANIM_FADE_ON", LV_SCR_LOAD_ANIM_FADE_ON }, + { "SCR_LOAD_ANIM_MOVE_BOTTOM", LV_SCR_LOAD_ANIM_MOVE_BOTTOM }, + { "SCR_LOAD_ANIM_MOVE_LEFT", LV_SCR_LOAD_ANIM_MOVE_LEFT }, + { "SCR_LOAD_ANIM_MOVE_RIGHT", LV_SCR_LOAD_ANIM_MOVE_RIGHT }, + { "SCR_LOAD_ANIM_MOVE_TOP", LV_SCR_LOAD_ANIM_MOVE_TOP }, + { "SCR_LOAD_ANIM_NONE", LV_SCR_LOAD_ANIM_NONE }, + { "SCR_LOAD_ANIM_OVER_BOTTOM", LV_SCR_LOAD_ANIM_OVER_BOTTOM }, + { "SCR_LOAD_ANIM_OVER_LEFT", LV_SCR_LOAD_ANIM_OVER_LEFT }, + { "SCR_LOAD_ANIM_OVER_RIGHT", LV_SCR_LOAD_ANIM_OVER_RIGHT }, + { "SCR_LOAD_ANIM_OVER_TOP", LV_SCR_LOAD_ANIM_OVER_TOP }, { "SILVER", 12632256 }, - { "SLIDER_TYPE_NORMAL", 0 }, - { "SLIDER_TYPE_RANGE", 2 }, - { "SLIDER_TYPE_SYMMETRICAL", 1 }, - { "SPINNER_DIR_BACKWARD", 1 }, - { "SPINNER_DIR_FORWARD", 0 }, - { "SPINNER_TYPE_CONSTANT_ARC", 2 }, - { "SPINNER_TYPE_FILLSPIN_ARC", 1 }, - { "SPINNER_TYPE_SPINNING_ARC", 0 }, - { "STATE_CHECKED", 1 }, - { "STATE_DEFAULT", 0 }, - { "STATE_DISABLED", 32 }, - { "STATE_EDITED", 4 }, - { "STATE_FOCUSED", 2 }, - { "STATE_HOVERED", 8 }, - { "STATE_PRESSED", 16 }, - { "STYLE_BG_BLEND_MODE", 32 }, - { "STYLE_BG_COLOR", 41 }, - { "STYLE_BG_GRAD_COLOR", 42 }, - { "STYLE_BG_GRAD_DIR", 35 }, - { "STYLE_BG_GRAD_STOP", 34 }, - { "STYLE_BG_MAIN_STOP", 33 }, - { "STYLE_BG_OPA", 44 }, - { "STYLE_BORDER_BLEND_MODE", 50 }, - { "STYLE_BORDER_COLOR", 57 }, - { "STYLE_BORDER_OPA", 60 }, - { "STYLE_BORDER_POST", 51 }, - { "STYLE_BORDER_SIDE", 49 }, - { "STYLE_BORDER_WIDTH", 48 }, - { "STYLE_CLIP_CORNER", 2 }, - { "STYLE_IMAGE_BLEND_MODE", 32928 }, - { "STYLE_IMAGE_OPA", 32940 }, - { "STYLE_IMAGE_RECOLOR", 32937 }, - { "STYLE_IMAGE_RECOLOR_OPA", 32941 }, - { "STYLE_LINE_BLEND_MODE", 145 }, - { "STYLE_LINE_COLOR", 153 }, - { "STYLE_LINE_DASH_GAP", 147 }, - { "STYLE_LINE_DASH_WIDTH", 146 }, - { "STYLE_LINE_OPA", 156 }, - { "STYLE_LINE_ROUNDED", 148 }, - { "STYLE_LINE_WIDTH", 144 }, - { "STYLE_MARGIN_BOTTOM", 22 }, - { "STYLE_MARGIN_LEFT", 23 }, - { "STYLE_MARGIN_RIGHT", 24 }, - { "STYLE_MARGIN_TOP", 21 }, - { "STYLE_OPA_SCALE", 32780 }, - { "STYLE_OUTLINE_BLEND_MODE", 66 }, - { "STYLE_OUTLINE_COLOR", 73 }, - { "STYLE_OUTLINE_OPA", 76 }, - { "STYLE_OUTLINE_PAD", 65 }, - { "STYLE_OUTLINE_WIDTH", 64 }, - { "STYLE_PAD_BOTTOM", 17 }, - { "STYLE_PAD_INNER", 20 }, - { "STYLE_PAD_LEFT", 18 }, - { "STYLE_PAD_RIGHT", 19 }, - { "STYLE_PAD_TOP", 16 }, - { "STYLE_PATTERN_BLEND_MODE", 96 }, - { "STYLE_PATTERN_IMAGE", 110 }, - { "STYLE_PATTERN_OPA", 108 }, - { "STYLE_PATTERN_RECOLOR", 105 }, - { "STYLE_PATTERN_RECOLOR_OPA", 109 }, - { "STYLE_PATTERN_REPEAT", 97 }, - { "STYLE_RADIUS", 1 }, - { "STYLE_SCALE_BORDER_WIDTH", 193 }, - { "STYLE_SCALE_END_BORDER_WIDTH", 194 }, - { "STYLE_SCALE_END_COLOR", 202 }, - { "STYLE_SCALE_END_LINE_WIDTH", 195 }, - { "STYLE_SCALE_GRAD_COLOR", 201 }, - { "STYLE_SCALE_WIDTH", 192 }, - { "STYLE_SHADOW_BLEND_MODE", 84 }, - { "STYLE_SHADOW_COLOR", 89 }, - { "STYLE_SHADOW_OFS_X", 81 }, - { "STYLE_SHADOW_OFS_Y", 82 }, - { "STYLE_SHADOW_OPA", 92 }, - { "STYLE_SHADOW_SPREAD", 83 }, - { "STYLE_SHADOW_WIDTH", 80 }, - { "STYLE_SIZE", 3 }, - { "STYLE_TEXT_BLEND_MODE", 32899 }, - { "STYLE_TEXT_COLOR", 32905 }, - { "STYLE_TEXT_DECOR", 32898 }, - { "STYLE_TEXT_FONT", 32910 }, - { "STYLE_TEXT_LETTER_SPACE", 32896 }, - { "STYLE_TEXT_LINE_SPACE", 32897 }, - { "STYLE_TEXT_OPA", 32908 }, - { "STYLE_TEXT_SEL_BG_COLOR", 32907 }, - { "STYLE_TEXT_SEL_COLOR", 32906 }, - { "STYLE_TRANSFORM_ANGLE", 6 }, - { "STYLE_TRANSFORM_HEIGHT", 5 }, - { "STYLE_TRANSFORM_WIDTH", 4 }, - { "STYLE_TRANSFORM_ZOOM", 7 }, - { "STYLE_TRANSITION_DELAY", 177 }, - { "STYLE_TRANSITION_PATH", 190 }, - { "STYLE_TRANSITION_PROP_1", 178 }, - { "STYLE_TRANSITION_PROP_2", 179 }, - { "STYLE_TRANSITION_PROP_3", 180 }, - { "STYLE_TRANSITION_PROP_4", 181 }, - { "STYLE_TRANSITION_PROP_5", 182 }, - { "STYLE_TRANSITION_PROP_6", 183 }, - { "STYLE_TRANSITION_TIME", 176 }, - { "STYLE_VALUE_ALIGN", 117 }, - { "STYLE_VALUE_BLEND_MODE", 114 }, - { "STYLE_VALUE_COLOR", 121 }, - { "STYLE_VALUE_FONT", 126 }, - { "STYLE_VALUE_LETTER_SPACE", 112 }, - { "STYLE_VALUE_LINE_SPACE", 113 }, - { "STYLE_VALUE_OFS_X", 115 }, - { "STYLE_VALUE_OFS_Y", 116 }, - { "STYLE_VALUE_OPA", 124 }, - { "STYLE_VALUE_STR", 127 }, - { "TABVIEW_TAB_POS_BOTTOM", 2 }, - { "TABVIEW_TAB_POS_LEFT", 3 }, - { "TABVIEW_TAB_POS_NONE", 0 }, - { "TABVIEW_TAB_POS_RIGHT", 4 }, - { "TABVIEW_TAB_POS_TOP", 1 }, + { "SLIDER_PART_BG", LV_SLIDER_PART_BG }, + { "SLIDER_PART_INDIC", LV_SLIDER_PART_INDIC }, + { "SLIDER_PART_KNOB", LV_SLIDER_PART_KNOB }, + { "SLIDER_TYPE_NORMAL", LV_SLIDER_TYPE_NORMAL }, + { "SLIDER_TYPE_RANGE", LV_SLIDER_TYPE_RANGE }, + { "SLIDER_TYPE_SYMMETRICAL", LV_SLIDER_TYPE_SYMMETRICAL }, + { "SPINBOX_PART_BG", LV_SPINBOX_PART_BG }, + { "SPINBOX_PART_CURSOR", LV_SPINBOX_PART_CURSOR }, + { "SPINNER_DIR_BACKWARD", LV_SPINNER_DIR_BACKWARD }, + { "SPINNER_DIR_FORWARD", LV_SPINNER_DIR_FORWARD }, + { "SPINNER_PART_BG", LV_SPINNER_PART_BG }, + { "SPINNER_PART_INDIC", LV_SPINNER_PART_INDIC }, + { "SPINNER_TYPE_CONSTANT_ARC", LV_SPINNER_TYPE_CONSTANT_ARC }, + { "SPINNER_TYPE_FILLSPIN_ARC", LV_SPINNER_TYPE_FILLSPIN_ARC }, + { "SPINNER_TYPE_SPINNING_ARC", LV_SPINNER_TYPE_SPINNING_ARC }, + { "STATE_CHECKED", LV_STATE_CHECKED }, + { "STATE_DEFAULT", LV_STATE_DEFAULT }, + { "STATE_DISABLED", LV_STATE_DISABLED }, + { "STATE_EDITED", LV_STATE_EDITED }, + { "STATE_FOCUSED", LV_STATE_FOCUSED }, + { "STATE_HOVERED", LV_STATE_HOVERED }, + { "STATE_PRESSED", LV_STATE_PRESSED }, + { "STYLE_BG_BLEND_MODE", LV_STYLE_BG_BLEND_MODE }, + { "STYLE_BG_COLOR", LV_STYLE_BG_COLOR }, + { "STYLE_BG_GRAD_COLOR", LV_STYLE_BG_GRAD_COLOR }, + { "STYLE_BG_GRAD_DIR", LV_STYLE_BG_GRAD_DIR }, + { "STYLE_BG_GRAD_STOP", LV_STYLE_BG_GRAD_STOP }, + { "STYLE_BG_MAIN_STOP", LV_STYLE_BG_MAIN_STOP }, + { "STYLE_BG_OPA", LV_STYLE_BG_OPA }, + { "STYLE_BORDER_BLEND_MODE", LV_STYLE_BORDER_BLEND_MODE }, + { "STYLE_BORDER_COLOR", LV_STYLE_BORDER_COLOR }, + { "STYLE_BORDER_OPA", LV_STYLE_BORDER_OPA }, + { "STYLE_BORDER_POST", LV_STYLE_BORDER_POST }, + { "STYLE_BORDER_SIDE", LV_STYLE_BORDER_SIDE }, + { "STYLE_BORDER_WIDTH", LV_STYLE_BORDER_WIDTH }, + { "STYLE_CLIP_CORNER", LV_STYLE_CLIP_CORNER }, + { "STYLE_IMAGE_BLEND_MODE", LV_STYLE_IMAGE_BLEND_MODE }, + { "STYLE_IMAGE_OPA", LV_STYLE_IMAGE_OPA }, + { "STYLE_IMAGE_RECOLOR", LV_STYLE_IMAGE_RECOLOR }, + { "STYLE_IMAGE_RECOLOR_OPA", LV_STYLE_IMAGE_RECOLOR_OPA }, + { "STYLE_LINE_BLEND_MODE", LV_STYLE_LINE_BLEND_MODE }, + { "STYLE_LINE_COLOR", LV_STYLE_LINE_COLOR }, + { "STYLE_LINE_DASH_GAP", LV_STYLE_LINE_DASH_GAP }, + { "STYLE_LINE_DASH_WIDTH", LV_STYLE_LINE_DASH_WIDTH }, + { "STYLE_LINE_OPA", LV_STYLE_LINE_OPA }, + { "STYLE_LINE_ROUNDED", LV_STYLE_LINE_ROUNDED }, + { "STYLE_LINE_WIDTH", LV_STYLE_LINE_WIDTH }, + { "STYLE_MARGIN_BOTTOM", LV_STYLE_MARGIN_BOTTOM }, + { "STYLE_MARGIN_LEFT", LV_STYLE_MARGIN_LEFT }, + { "STYLE_MARGIN_RIGHT", LV_STYLE_MARGIN_RIGHT }, + { "STYLE_MARGIN_TOP", LV_STYLE_MARGIN_TOP }, + { "STYLE_OPA_SCALE", LV_STYLE_OPA_SCALE }, + { "STYLE_OUTLINE_BLEND_MODE", LV_STYLE_OUTLINE_BLEND_MODE }, + { "STYLE_OUTLINE_COLOR", LV_STYLE_OUTLINE_COLOR }, + { "STYLE_OUTLINE_OPA", LV_STYLE_OUTLINE_OPA }, + { "STYLE_OUTLINE_PAD", LV_STYLE_OUTLINE_PAD }, + { "STYLE_OUTLINE_WIDTH", LV_STYLE_OUTLINE_WIDTH }, + { "STYLE_PAD_BOTTOM", LV_STYLE_PAD_BOTTOM }, + { "STYLE_PAD_INNER", LV_STYLE_PAD_INNER }, + { "STYLE_PAD_LEFT", LV_STYLE_PAD_LEFT }, + { "STYLE_PAD_RIGHT", LV_STYLE_PAD_RIGHT }, + { "STYLE_PAD_TOP", LV_STYLE_PAD_TOP }, + { "STYLE_PATTERN_BLEND_MODE", LV_STYLE_PATTERN_BLEND_MODE }, + { "STYLE_PATTERN_IMAGE", LV_STYLE_PATTERN_IMAGE }, + { "STYLE_PATTERN_OPA", LV_STYLE_PATTERN_OPA }, + { "STYLE_PATTERN_RECOLOR", LV_STYLE_PATTERN_RECOLOR }, + { "STYLE_PATTERN_RECOLOR_OPA", LV_STYLE_PATTERN_RECOLOR_OPA }, + { "STYLE_PATTERN_REPEAT", LV_STYLE_PATTERN_REPEAT }, + { "STYLE_RADIUS", LV_STYLE_RADIUS }, + { "STYLE_SCALE_BORDER_WIDTH", LV_STYLE_SCALE_BORDER_WIDTH }, + { "STYLE_SCALE_END_BORDER_WIDTH", LV_STYLE_SCALE_END_BORDER_WIDTH }, + { "STYLE_SCALE_END_COLOR", LV_STYLE_SCALE_END_COLOR }, + { "STYLE_SCALE_END_LINE_WIDTH", LV_STYLE_SCALE_END_LINE_WIDTH }, + { "STYLE_SCALE_GRAD_COLOR", LV_STYLE_SCALE_GRAD_COLOR }, + { "STYLE_SCALE_WIDTH", LV_STYLE_SCALE_WIDTH }, + { "STYLE_SHADOW_BLEND_MODE", LV_STYLE_SHADOW_BLEND_MODE }, + { "STYLE_SHADOW_COLOR", LV_STYLE_SHADOW_COLOR }, + { "STYLE_SHADOW_OFS_X", LV_STYLE_SHADOW_OFS_X }, + { "STYLE_SHADOW_OFS_Y", LV_STYLE_SHADOW_OFS_Y }, + { "STYLE_SHADOW_OPA", LV_STYLE_SHADOW_OPA }, + { "STYLE_SHADOW_SPREAD", LV_STYLE_SHADOW_SPREAD }, + { "STYLE_SHADOW_WIDTH", LV_STYLE_SHADOW_WIDTH }, + { "STYLE_SIZE", LV_STYLE_SIZE }, + { "STYLE_TEXT_BLEND_MODE", LV_STYLE_TEXT_BLEND_MODE }, + { "STYLE_TEXT_COLOR", LV_STYLE_TEXT_COLOR }, + { "STYLE_TEXT_DECOR", LV_STYLE_TEXT_DECOR }, + { "STYLE_TEXT_FONT", LV_STYLE_TEXT_FONT }, + { "STYLE_TEXT_LETTER_SPACE", LV_STYLE_TEXT_LETTER_SPACE }, + { "STYLE_TEXT_LINE_SPACE", LV_STYLE_TEXT_LINE_SPACE }, + { "STYLE_TEXT_OPA", LV_STYLE_TEXT_OPA }, + { "STYLE_TEXT_SEL_BG_COLOR", LV_STYLE_TEXT_SEL_BG_COLOR }, + { "STYLE_TEXT_SEL_COLOR", LV_STYLE_TEXT_SEL_COLOR }, + { "STYLE_TRANSFORM_ANGLE", LV_STYLE_TRANSFORM_ANGLE }, + { "STYLE_TRANSFORM_HEIGHT", LV_STYLE_TRANSFORM_HEIGHT }, + { "STYLE_TRANSFORM_WIDTH", LV_STYLE_TRANSFORM_WIDTH }, + { "STYLE_TRANSFORM_ZOOM", LV_STYLE_TRANSFORM_ZOOM }, + { "STYLE_TRANSITION_DELAY", LV_STYLE_TRANSITION_DELAY }, + { "STYLE_TRANSITION_PATH", LV_STYLE_TRANSITION_PATH }, + { "STYLE_TRANSITION_PROP_1", LV_STYLE_TRANSITION_PROP_1 }, + { "STYLE_TRANSITION_PROP_2", LV_STYLE_TRANSITION_PROP_2 }, + { "STYLE_TRANSITION_PROP_3", LV_STYLE_TRANSITION_PROP_3 }, + { "STYLE_TRANSITION_PROP_4", LV_STYLE_TRANSITION_PROP_4 }, + { "STYLE_TRANSITION_PROP_5", LV_STYLE_TRANSITION_PROP_5 }, + { "STYLE_TRANSITION_PROP_6", LV_STYLE_TRANSITION_PROP_6 }, + { "STYLE_TRANSITION_TIME", LV_STYLE_TRANSITION_TIME }, + { "STYLE_VALUE_ALIGN", LV_STYLE_VALUE_ALIGN }, + { "STYLE_VALUE_BLEND_MODE", LV_STYLE_VALUE_BLEND_MODE }, + { "STYLE_VALUE_COLOR", LV_STYLE_VALUE_COLOR }, + { "STYLE_VALUE_FONT", LV_STYLE_VALUE_FONT }, + { "STYLE_VALUE_LETTER_SPACE", LV_STYLE_VALUE_LETTER_SPACE }, + { "STYLE_VALUE_LINE_SPACE", LV_STYLE_VALUE_LINE_SPACE }, + { "STYLE_VALUE_OFS_X", LV_STYLE_VALUE_OFS_X }, + { "STYLE_VALUE_OFS_Y", LV_STYLE_VALUE_OFS_Y }, + { "STYLE_VALUE_OPA", LV_STYLE_VALUE_OPA }, + { "STYLE_VALUE_STR", LV_STYLE_VALUE_STR }, + { "SWITCH_PART_BG", LV_SWITCH_PART_BG }, + { "SWITCH_PART_INDIC", LV_SWITCH_PART_INDIC }, + { "SWITCH_PART_KNOB", LV_SWITCH_PART_KNOB }, + { "TABLE_PART_BG", LV_TABLE_PART_BG }, + { "TABLE_PART_CELL1", LV_TABLE_PART_CELL1 }, + { "TABLE_PART_CELL2", LV_TABLE_PART_CELL2 }, + { "TABLE_PART_CELL3", LV_TABLE_PART_CELL3 }, + { "TABLE_PART_CELL4", LV_TABLE_PART_CELL4 }, + { "TABVIEW_PART_BG", LV_TABVIEW_PART_BG }, + { "TABVIEW_PART_BG_SCROLLABLE", LV_TABVIEW_PART_BG_SCROLLABLE }, + { "TABVIEW_PART_INDIC", LV_TABVIEW_PART_INDIC }, + { "TABVIEW_PART_TAB_BG", LV_TABVIEW_PART_TAB_BG }, + { "TABVIEW_PART_TAB_BTN", LV_TABVIEW_PART_TAB_BTN }, + { "TABVIEW_TAB_POS_BOTTOM", LV_TABVIEW_TAB_POS_BOTTOM }, + { "TABVIEW_TAB_POS_LEFT", LV_TABVIEW_TAB_POS_LEFT }, + { "TABVIEW_TAB_POS_NONE", LV_TABVIEW_TAB_POS_NONE }, + { "TABVIEW_TAB_POS_RIGHT", LV_TABVIEW_TAB_POS_RIGHT }, + { "TABVIEW_TAB_POS_TOP", LV_TABVIEW_TAB_POS_TOP }, { "TEAL", 32896 }, - { "TEMPL_STYLE_X", 0 }, - { "TEMPL_STYLE_Y", 1 }, - { "TEXTAREA_CURSOR_LAST", 32767 }, - { "TEXT_DECOR_NONE", 0 }, - { "TEXT_DECOR_STRIKETHROUGH", 2 }, - { "TEXT_DECOR_UNDERLINE", 1 }, - { "TXT_CMD_STATE_IN", 2 }, - { "TXT_CMD_STATE_PAR", 1 }, - { "TXT_CMD_STATE_WAIT", 0 }, - { "TXT_FLAG_CENTER", 4 }, - { "TXT_FLAG_EXPAND", 2 }, - { "TXT_FLAG_FIT", 16 }, - { "TXT_FLAG_NONE", 0 }, - { "TXT_FLAG_RECOLOR", 1 }, - { "TXT_FLAG_RIGHT", 8 }, + { "TEXTAREA_CURSOR_LAST", LV_TEXTAREA_CURSOR_LAST }, + { "TEXTAREA_PART_BG", LV_TEXTAREA_PART_BG }, + { "TEXTAREA_PART_CURSOR", LV_TEXTAREA_PART_CURSOR }, + { "TEXTAREA_PART_EDGE_FLASH", LV_TEXTAREA_PART_EDGE_FLASH }, + { "TEXTAREA_PART_PLACEHOLDER", LV_TEXTAREA_PART_PLACEHOLDER }, + { "TEXTAREA_PART_SCROLLBAR", LV_TEXTAREA_PART_SCROLLBAR }, + { "TEXT_DECOR_NONE", LV_TEXT_DECOR_NONE }, + { "TEXT_DECOR_STRIKETHROUGH", LV_TEXT_DECOR_STRIKETHROUGH }, + { "TEXT_DECOR_UNDERLINE", LV_TEXT_DECOR_UNDERLINE }, + { "TILEVIEW_PART_BG", LV_TILEVIEW_PART_BG }, + { "TILEVIEW_PART_EDGE_FLASH", LV_TILEVIEW_PART_EDGE_FLASH }, + { "TILEVIEW_PART_SCROLLBAR", LV_TILEVIEW_PART_SCROLLBAR }, + { "TXT_CMD_STATE_IN", LV_TXT_CMD_STATE_IN }, + { "TXT_CMD_STATE_PAR", LV_TXT_CMD_STATE_PAR }, + { "TXT_CMD_STATE_WAIT", LV_TXT_CMD_STATE_WAIT }, + { "TXT_FLAG_CENTER", LV_TXT_FLAG_CENTER }, + { "TXT_FLAG_EXPAND", LV_TXT_FLAG_EXPAND }, + { "TXT_FLAG_FIT", LV_TXT_FLAG_FIT }, + { "TXT_FLAG_NONE", LV_TXT_FLAG_NONE }, + { "TXT_FLAG_RECOLOR", LV_TXT_FLAG_RECOLOR }, + { "TXT_FLAG_RIGHT", LV_TXT_FLAG_RIGHT }, { "WHITE", 16777215 }, + { "WIN_PART_BG", LV_WIN_PART_BG }, + { "WIN_PART_CONTENT_SCROLLABLE", LV_WIN_PART_CONTENT_SCROLLABLE }, + { "WIN_PART_HEADER", LV_WIN_PART_HEADER }, + { "WIN_PART_SCROLLBAR", LV_WIN_PART_SCROLLBAR }, { "YELLOW", 16776960 }, }; @@ -513,13 +581,6 @@ be_native_module_attr_table(lvgl) { be_native_module_function("load_font", lv0_load_font), be_native_module_function("load_freetype_font", lv0_load_freetype_font), - - // screen and layers - be_native_module_function("scr_act", lv0_scr_act), - be_native_module_function("layer_top", lv0_layer_top), - be_native_module_function("layer_sys", lv0_layer_sys), - be_native_module_function("get_hor_res", lv0_get_hor_res), - be_native_module_function("get_ver_res", lv0_get_ver_res), be_native_module_function("screenshot", lv0_screenshot), @@ -667,11 +728,6 @@ module lvgl (scope: global) { load_font, func(lv0_load_font) load_freetype_font, func(lv0_load_freetype_font) - scr_act, func(lv0_scr_act) - layer_top, func(lv0_layer_top) - layer_sys, func(lv0_layer_sys) - get_hor_res, func(lv0_get_hor_res) - get_ver_res, func(lv0_get_ver_res) screenshot, func(lv0_screenshot) diff --git a/lib/libesp32/Berry/default/be_lvgl_widgets_lib.c b/lib/libesp32/Berry/default/be_lvgl_widgets_lib.c index 715d3f4ab..c1b7bd816 100644 --- a/lib/libesp32/Berry/default/be_lvgl_widgets_lib.c +++ b/lib/libesp32/Berry/default/be_lvgl_widgets_lib.c @@ -11,6 +11,7 @@ #ifdef USE_LVGL #include "lvgl.h" +#include "be_lvgl.h" extern int lv0_init(bvm *vm); diff --git a/lib/libesp32/Berry/default/berry_conf.h b/lib/libesp32/Berry/default/berry_conf.h index 05c799c6e..d98f2d958 100644 --- a/lib/libesp32/Berry/default/berry_conf.h +++ b/lib/libesp32/Berry/default/berry_conf.h @@ -75,7 +75,7 @@ * Set the maximum total stack size. * Default: 20000 **/ -#define BE_STACK_TOTAL_MAX 4000 +#define BE_STACK_TOTAL_MAX 8000 /* Macro: BE_STACK_FREE_MIN * Set the minimum free count of the stack. The stack idles will diff --git a/lib/libesp32/Berry/generate/be_const_strtab.h b/lib/libesp32/Berry/generate/be_const_strtab.h index 52d95792d..2e349c132 100644 --- a/lib/libesp32/Berry/generate/be_const_strtab.h +++ b/lib/libesp32/Berry/generate/be_const_strtab.h @@ -1,563 +1,558 @@ -extern const bcstring be_const_str_ADE7953_IRQ; -extern const bcstring be_const_str_KEY1_TC; -extern const bcstring be_const_str_button_pressed; -extern const bcstring be_const_str_lv_slider; -extern const bcstring be_const_str_var; -extern const bcstring be_const_str_TASMOTACLIENT_RST_INV; -extern const bcstring be_const_str_isinstance; -extern const bcstring be_const_str_pin_mode; -extern const bcstring be_const_str_SYMBOL_CHARGE; -extern const bcstring be_const_str_WEBCAM_VSYNC; -extern const bcstring be_const_str_opt_neq; -extern const bcstring be_const_str_BS814_CLK; +extern const bcstring be_const_str_Tasmota; +extern const bcstring be_const_str_ZIGBEE_RST; +extern const bcstring be_const_str_open; +extern const bcstring be_const_str_HRXL_RX; +extern const bcstring be_const_str_SPI_CLK; +extern const bcstring be_const_str_Driver; +extern const bcstring be_const_str_MHZ_RXD; +extern const bcstring be_const_str_abs; +extern const bcstring be_const_str_dump; +extern const bcstring be_const_str_exec_rules; extern const bcstring be_const_str_load_freetype_font; -extern const bcstring be_const_str_LOW; -extern const bcstring be_const_str_MP3_DFR562; -extern const bcstring be_const_str_SDM72_TX; -extern const bcstring be_const_str_SENSOR_END; -extern const bcstring be_const_str_opt_add; +extern const bcstring be_const_str_read; extern const bcstring be_const_str_DEEPSLEEP; -extern const bcstring be_const_str_SPI_MISO; -extern const bcstring be_const_str_def; -extern const bcstring be_const_str_ADC_BUTTON; -extern const bcstring be_const_str_MHZ_TXD; -extern const bcstring be_const_str_RFRECV; -extern const bcstring be_const_str_WINDMETER_SPEED; -extern const bcstring be_const_str_SYMBOL_EJECT; -extern const bcstring be_const_str_SDM630_RX; -extern const bcstring be_const_str_SYMBOL_POWER; -extern const bcstring be_const_str_lv_btnmatrix; -extern const bcstring be_const_str_scr_act; -extern const bcstring be_const_str_setitem; -extern const bcstring be_const_str_ARIRFRCV; -extern const bcstring be_const_str_lv_label; -extern const bcstring be_const_str_module; -extern const bcstring be_const_str_traceback; -extern const bcstring be_const_str_while; -extern const bcstring be_const_str_SYMBOL_SD_CARD; -extern const bcstring be_const_str_lv_roller; -extern const bcstring be_const_str_HRE_CLOCK; -extern const bcstring be_const_str_LEDLNK_INV; -extern const bcstring be_const_str_P9813_DAT; -extern const bcstring be_const_str_rtc; -extern const bcstring be_const_str_deg; -extern const bcstring be_const_str_lv_spinner; -extern const bcstring be_const_str_HM10_RX; -extern const bcstring be_const_str_MIEL_HVAC_TX; -extern const bcstring be_const_str_gamma8; -extern const bcstring be_const_str_SYMBOL_MINUS; -extern const bcstring be_const_str_NRF24_DC; +extern const bcstring be_const_str_WEBCAM_HSD; +extern const bcstring be_const_str_deinit; +extern const bcstring be_const_str_print; +extern const bcstring be_const_str_list; extern const bcstring be_const_str_IBEACON_RX; +extern const bcstring be_const_str_sqrt; +extern const bcstring be_const_str_ADC_JOY; +extern const bcstring be_const_str_OUTPUT_LO; +extern const bcstring be_const_str_pow; +extern const bcstring be_const_str_KEY1_INV_NP; +extern const bcstring be_const_str_WEBCAM_PWDN; +extern const bcstring be_const_str_XPT2046_CS; +extern const bcstring be_const_str_lower; +extern const bcstring be_const_str_yield; +extern const bcstring be_const_str_BOILER_OT_TX; +extern const bcstring be_const_str_SR04_TRIG; +extern const bcstring be_const_str_input; +extern const bcstring be_const_str_load_font; +extern const bcstring be_const_str_CNTR1_NP; +extern const bcstring be_const_str_log10; +extern const bcstring be_const_str_MAX7219DIN; +extern const bcstring be_const_str_lv_led; +extern const bcstring be_const_str_I2C_SDA; +extern const bcstring be_const_str_TM1638CLK; +extern const bcstring be_const_str_calldepth; +extern const bcstring be_const_str_CHANGE; +extern const bcstring be_const_str_SYMBOL_CLOSE; +extern const bcstring be_const_str_HALLEFFECT; +extern const bcstring be_const_str_SYMBOL_RIGHT; +extern const bcstring be_const_str__timers; +extern const bcstring be_const_str_LEDLNK_INV; +extern const bcstring be_const_str_SSPI_MOSI; +extern const bcstring be_const_str_SYMBOL_BATTERY_EMPTY; +extern const bcstring be_const_str_lv_btnmatrix; +extern const bcstring be_const_str_lv_keyboard; +extern const bcstring be_const_str_SYMBOL_BULLET; +extern const bcstring be_const_str_SYMBOL_BELL; +extern const bcstring be_const_str_ROT1B_NP; +extern const bcstring be_const_str_WEBCAM_HREF; +extern const bcstring be_const_str_tan; +extern const bcstring be_const_str_time_str; +extern const bcstring be_const_str_MAX7219CLK; +extern const bcstring be_const_str_SSD1331_DC; +extern const bcstring be_const_str_toupper; +extern const bcstring be_const_str_SYMBOL_VOLUME_MID; +extern const bcstring be_const_str_lv_bar; +extern const bcstring be_const_str_lv_obj; +extern const bcstring be_const_str_lv_spinbox; +extern const bcstring be_const_str_PZEM017_RX; +extern const bcstring be_const_str_SM16716_DAT; +extern const bcstring be_const_str_add_driver; +extern const bcstring be_const_str_RDM6300_RX; +extern const bcstring be_const_str_Wire; +extern const bcstring be_const_str_LOW; +extern const bcstring be_const_str_ADC_BUTTON_INV; +extern const bcstring be_const_str_PN532_RXD; +extern const bcstring be_const_str_ELECTRIQ_MOODL_TX; +extern const bcstring be_const_str_SM16716_CLK; +extern const bcstring be_const_str_SSPI_DC; +extern const bcstring be_const_str_cosh; +extern const bcstring be_const_str_collect; +extern const bcstring be_const_str_lv_objmask; +extern const bcstring be_const_str_map; +extern const bcstring be_const_str_register_button_encoder; +extern const bcstring be_const_str_BL0940_RX; +extern const bcstring be_const_str_WEBCAM_PSCLK; +extern const bcstring be_const_str_RFRECV; +extern const bcstring be_const_str_GPS_RX; +extern const bcstring be_const_str_NEOPOOL_RX; +extern const bcstring be_const_str_pin_mode; +extern const bcstring be_const_str_SYMBOL_UP; +extern const bcstring be_const_str_HPMA_TX; +extern const bcstring be_const_str_classname; +extern const bcstring be_const_str_lv_list; +extern const bcstring be_const_str_SHELLY_DIMMER_RST_INV; +extern const bcstring be_const_str_lv_slider; +extern const bcstring be_const_str_tolower; +extern const bcstring be_const_str_type; +extern const bcstring be_const_str_int; +extern const bcstring be_const_str_resp_cmnd_str; +extern const bcstring be_const_str_save_before_restart; +extern const bcstring be_const_str_HJL_CF; +extern const bcstring be_const_str_lv_page; +extern const bcstring be_const_str_top; +extern const bcstring be_const_str_DDS2382_RX; +extern const bcstring be_const_str_INPUT_PULLDOWN; +extern const bcstring be_const_str_class; +extern const bcstring be_const_str_SYMBOL_BLUETOOTH; +extern const bcstring be_const_str_lv_chart; +extern const bcstring be_const_str_SYMBOL_VIDEO; +extern const bcstring be_const_str_pi; +extern const bcstring be_const_str_scale_uint; extern const bcstring be_const_str_REL1_INV; -extern const bcstring be_const_str_SYMBOL_OK; -extern const bcstring be_const_str_EPAPER29_CS; -extern const bcstring be_const_str_ROT1B; +extern const bcstring be_const_str_SDS0X1_TX; +extern const bcstring be_const_str_TUYA_RX; +extern const bcstring be_const_str_digital_write; extern const bcstring be_const_str_raise; -extern const bcstring be_const_str_IRRECV; -extern const bcstring be_const_str_lv_indev; -extern const bcstring be_const_str_pop; -extern const bcstring be_const_str_lv_linemeter; +extern const bcstring be_const_str_for; +extern const bcstring be_const_str_DYP_RX; +extern const bcstring be_const_str_SYMBOL_DOWNLOAD; +extern const bcstring be_const_str_clear; +extern const bcstring be_const_str_hex; +extern const bcstring be_const_str_montserrat_font; +extern const bcstring be_const_str_end; +extern const bcstring be_const_str_dot_p; +extern const bcstring be_const_str_SYMBOL_PREV; +extern const bcstring be_const_str_init; +extern const bcstring be_const_str_BS814_CLK; +extern const bcstring be_const_str_MCP39F5_RST; +extern const bcstring be_const_str_NRG_SEL; +extern const bcstring be_const_str_ADE7953_IRQ; +extern const bcstring be_const_str_REL1; +extern const bcstring be_const_str_SYMBOL_NEXT; +extern const bcstring be_const_str_split; +extern const bcstring be_const_str_NEOPOOL_TX; +extern const bcstring be_const_str_OPTION_A; +extern const bcstring be_const_str_P9813_DAT; +extern const bcstring be_const_str_SOLAXX1_TX; +extern const bcstring be_const_str_chars_in_string; +extern const bcstring be_const_str_exp; +extern const bcstring be_const_str_true; +extern const bcstring be_const_str_DI; +extern const bcstring be_const_str_PROJECTOR_CTRL_TX; +extern const bcstring be_const_str_SSD1351_CS; +extern const bcstring be_const_str_SYMBOL_WARNING; +extern const bcstring be_const_str__read; +extern const bcstring be_const_str_PULLUP; +extern const bcstring be_const_str_SYMBOL_MUTE; extern const bcstring be_const_str_upper; extern const bcstring be_const_str_lv_btn; -extern const bcstring be_const_str_SYMBOL_USB; -extern const bcstring be_const_str_break; -extern const bcstring be_const_str_SYMBOL_BELL; -extern const bcstring be_const_str_SYMBOL_DOWNLOAD; -extern const bcstring be_const_str_TCP_RX; -extern const bcstring be_const_str_CHANGE; -extern const bcstring be_const_str_RISING; -extern const bcstring be_const_str_RA8876_CS; -extern const bcstring be_const_str_lv_page; -extern const bcstring be_const_str_lv_group; -extern const bcstring be_const_str_LEDLNK; -extern const bcstring be_const_str_RFSEND; -extern const bcstring be_const_str_ROT1B_NP; -extern const bcstring be_const_str_SYMBOL_BACKSPACE; -extern const bcstring be_const_str_TCP_TX; -extern const bcstring be_const_str_lv_textarea; -extern const bcstring be_const_str_SYMBOL_EDIT; -extern const bcstring be_const_str_WEBCAM_SIOD; -extern const bcstring be_const_str_set; -extern const bcstring be_const_str__end_transmission; -extern const bcstring be_const_str_run_deferred; -extern const bcstring be_const_str_ADC_JOY; -extern const bcstring be_const_str_sin; -extern const bcstring be_const_str_NEOPOOL_TX; -extern const bcstring be_const_str_DCKI; -extern const bcstring be_const_str_I2C_SCL; -extern const bcstring be_const_str_i2c_enabled; -extern const bcstring be_const_str_FALLING; -extern const bcstring be_const_str_PZEM004_RX; -extern const bcstring be_const_str_REL1; -extern const bcstring be_const_str_exec_rules; -extern const bcstring be_const_str_SM16716_CLK; -extern const bcstring be_const_str_DDSU666_RX; -extern const bcstring be_const_str_TELEINFO_RX; -extern const bcstring be_const_str_fromstring; -extern const bcstring be_const_str_gc; -extern const bcstring be_const_str_open; -extern const bcstring be_const_str_BL0940_RX; -extern const bcstring be_const_str_OUTPUT_HI; -extern const bcstring be_const_str_RF_SENSOR; -extern const bcstring be_const_str_lv_dropdown; -extern const bcstring be_const_str_IRSEND; -extern const bcstring be_const_str_ROT1A_NP; -extern const bcstring be_const_str_str; -extern const bcstring be_const_str_WEBCAM_XCLK; -extern const bcstring be_const_str_RC522_CS; -extern const bcstring be_const_str_get_option; -extern const bcstring be_const_str_tanh; -extern const bcstring be_const_str_IEM3000_RX; -extern const bcstring be_const_str_KEY1; -extern const bcstring be_const_str_compile; -extern const bcstring be_const_str_int; -extern const bcstring be_const_str_class; -extern const bcstring be_const_str_CSE7761_RX; -extern const bcstring be_const_str_montserrat_font; -extern const bcstring be_const_str_set_light; -extern const bcstring be_const_str_AS608_RX; -extern const bcstring be_const_str_SDM120_TX; -extern const bcstring be_const_str_MAX7219CS; -extern const bcstring be_const_str_PZEM0XX_TX; -extern const bcstring be_const_str_cos; -extern const bcstring be_const_str_BOILER_OT_RX; -extern const bcstring be_const_str_SWT1_NP; -extern const bcstring be_const_str_SYMBOL_VOLUME_MID; -extern const bcstring be_const_str_TM1637DIO; -extern const bcstring be_const_str_BUZZER_INV; -extern const bcstring be_const_str_SYMBOL_CUT; -extern const bcstring be_const_str_setrange; -extern const bcstring be_const_str_EPAPER42_CS; -extern const bcstring be_const_str_LE01MR_RX; -extern const bcstring be_const_str_MAX31855CLK; -extern const bcstring be_const_str_SDM120_RX; -extern const bcstring be_const_str_SYMBOL_DUMMY; -extern const bcstring be_const_str_super; -extern const bcstring be_const_str_classof; -extern const bcstring be_const_str_PMS5003_RX; -extern const bcstring be_const_str_iter; -extern const bcstring be_const_str_lv_list; -extern const bcstring be_const_str_MAX7219DIN; -extern const bcstring be_const_str_SYMBOL_LOOP; -extern const bcstring be_const_str_attrdump; -extern const bcstring be_const_str_ADC_PH; -extern const bcstring be_const_str__drivers; -extern const bcstring be_const_str_layer_top; -extern const bcstring be_const_str_scan; -extern const bcstring be_const_str_screenshot; -extern const bcstring be_const_str_DYP_RX; -extern const bcstring be_const_str_ELECTRIQ_MOODL_TX; -extern const bcstring be_const_str_time_reached; -extern const bcstring be_const_str_LED1; -extern const bcstring be_const_str_lv_chart; -extern const bcstring be_const_str_ADC_BUTTON_INV; -extern const bcstring be_const_str_TFMINIPLUS_TX; -extern const bcstring be_const_str_SPI_CLK; -extern const bcstring be_const_str_TUYA_TX; -extern const bcstring be_const_str_NRG_SEL_INV; -extern const bcstring be_const_str_SSPI_SCLK; -extern const bcstring be_const_str_SYMBOL_BATTERY_1; -extern const bcstring be_const_str_SYMBOL_GPS; -extern const bcstring be_const_str_SYMBOL_VOLUME_MAX; -extern const bcstring be_const_str_lv_tabview; -extern const bcstring be_const_str_size; -extern const bcstring be_const_str_I2C_SDA; -extern const bcstring be_const_str_INPUT_PULLUP; -extern const bcstring be_const_str_SOLAXX1_RX; -extern const bcstring be_const_str_get_hor_res; -extern const bcstring be_const_str_KEY1_NP; -extern const bcstring be_const_str_SYMBOL_TRASH; -extern const bcstring be_const_str_range; -extern const bcstring be_const_str_resp_cmnd_done; -extern const bcstring be_const_str_SYMBOL_CLOSE; -extern const bcstring be_const_str__begin_transmission; -extern const bcstring be_const_str_publish; -extern const bcstring be_const_str_lv_gauge; -extern const bcstring be_const_str_insert; -extern const bcstring be_const_str_lv_spinbox; -extern const bcstring be_const_str_WEBCAM_DATA; -extern const bcstring be_const_str_SYMBOL_BATTERY_2; -extern const bcstring be_const_str_pow; -extern const bcstring be_const_str_try; -extern const bcstring be_const_str_ARIRFSEL; -extern const bcstring be_const_str__timers; -extern const bcstring be_const_str_format; -extern const bcstring be_const_str_assert; -extern const bcstring be_const_str_chars_in_string; -extern const bcstring be_const_str_lv_objmask; -extern const bcstring be_const_str_member; -extern const bcstring be_const_str_remove_rule; -extern const bcstring be_const_str_ADC_INPUT; -extern const bcstring be_const_str_byte; -extern const bcstring be_const_str_ceil; -extern const bcstring be_const_str_log10; -extern const bcstring be_const_str_time_str; -extern const bcstring be_const_str_LED1_INV; -extern const bcstring be_const_str_SYMBOL_IMAGE; -extern const bcstring be_const_str_lv_cpicker; -extern const bcstring be_const_str_ADC_TEMP; -extern const bcstring be_const_str_SYMBOL_EYE_CLOSE; -extern const bcstring be_const_str_SAIR_RX; -extern const bcstring be_const_str_SDS0X1_RX; -extern const bcstring be_const_str_SYMBOL_BATTERY_3; -extern const bcstring be_const_str_find_op; -extern const bcstring be_const_str_add_rule; -extern const bcstring be_const_str_item; -extern const bcstring be_const_str_load; -extern const bcstring be_const_str_read; -extern const bcstring be_const_str_remove_cmd; -extern const bcstring be_const_str_SYMBOL_FILE; -extern const bcstring be_const_str_SYMBOL_PLAY; -extern const bcstring be_const_str_BUZZER; -extern const bcstring be_const_str_MGC3130_RESET; -extern const bcstring be_const_str_SYMBOL_EYE_OPEN; -extern const bcstring be_const_str_sqrt; -extern const bcstring be_const_str_acos; -extern const bcstring be_const_str_pin_used; -extern const bcstring be_const_str_concat; -extern const bcstring be_const_str_lv_img; -extern const bcstring be_const_str_TM1637CLK; -extern const bcstring be_const_str_set_power; -extern const bcstring be_const_str_SI7021; -extern const bcstring be_const_str_SYMBOL_PREV; -extern const bcstring be_const_str_PULLUP; -extern const bcstring be_const_str_PWM1; -extern const bcstring be_const_str_WEBCAM_PSRCS; -extern const bcstring be_const_str_lower; -extern const bcstring be_const_str_read_bytes; -extern const bcstring be_const_str_CC1101_GDO0; -extern const bcstring be_const_str_P9813_CLK; -extern const bcstring be_const_str_DDS2382_RX; -extern const bcstring be_const_str_SYMBOL_RIGHT; -extern const bcstring be_const_str_save_before_restart; -extern const bcstring be_const_str_PROJECTOR_CTRL_RX; -extern const bcstring be_const_str_SYMBOL_SETTINGS; -extern const bcstring be_const_str_SYMBOL_CALL; -extern const bcstring be_const_str_save; -extern const bcstring be_const_str_DHT11_OUT; -extern const bcstring be_const_str_CSE7761_TX; -extern const bcstring be_const_str_ILI9341_CS; -extern const bcstring be_const_str_WEBCAM_PCLK; -extern const bcstring be_const_str_set_timer; -extern const bcstring be_const_str_Driver; -extern const bcstring be_const_str_atan; -extern const bcstring be_const_str_SYMBOL_LIST; -extern const bcstring be_const_str_SYMBOL_UPLOAD; -extern const bcstring be_const_str_lv_obj; -extern const bcstring be_const_str_ST7789_CS; -extern const bcstring be_const_str_add_driver; -extern const bcstring be_const_str_ST7789_DC; -extern const bcstring be_const_str_deinit; -extern const bcstring be_const_str_resize; -extern const bcstring be_const_str_ETH_PHY_MDIO; -extern const bcstring be_const_str_OUTPUT_LO; -extern const bcstring be_const_str_SYMBOL_VIDEO; -extern const bcstring be_const_str_TXD; -extern const bcstring be_const_str_find; -extern const bcstring be_const_str_tolower; -extern const bcstring be_const_str_MAX31855DO; -extern const bcstring be_const_str_resp_cmnd_str; -extern const bcstring be_const_str_sinh; -extern const bcstring be_const_str_lv_led; -extern const bcstring be_const_str_register_button_encoder; -extern const bcstring be_const_str_SBR_TX; -extern const bcstring be_const_str_start; -extern const bcstring be_const_str_CC1101_GDO2; -extern const bcstring be_const_str_SDCARD_CS; -extern const bcstring be_const_str_get_free_heap; -extern const bcstring be_const_str_log; -extern const bcstring be_const_str_asstring; -extern const bcstring be_const_str_CSE7766_TX; -extern const bcstring be_const_str_GPS_RX; -extern const bcstring be_const_str_reverse; -extern const bcstring be_const_str_DSB_OUT; -extern const bcstring be_const_str_calldepth; -extern const bcstring be_const_str_every_second; -extern const bcstring be_const_str_MAX31855CS; -extern const bcstring be_const_str_SR04_TRIG; -extern const bcstring be_const_str_elif; -extern const bcstring be_const_str_SSD1331_CS; -extern const bcstring be_const_str_lv_win; -extern const bcstring be_const_str_WEBCAM_PWDN; -extern const bcstring be_const_str_AS3935; -extern const bcstring be_const_str_web_add_button; -extern const bcstring be_const_str_INPUT_PULLDOWN; -extern const bcstring be_const_str_MCP39F5_TX; -extern const bcstring be_const_str_reverse_gamma10; -extern const bcstring be_const_str_CNTR1_NP; -extern const bcstring be_const_str_VL53L0X_XSHUT1; -extern const bcstring be_const_str_ZIGBEE_RX; -extern const bcstring be_const_str_SYMBOL_WARNING; -extern const bcstring be_const_str_WEBCAM_RESET; -extern const bcstring be_const_str_collect; -extern const bcstring be_const_str_digital_write; -extern const bcstring be_const_str_A4988_MS1; -extern const bcstring be_const_str_PZEM016_RX; -extern const bcstring be_const_str_top; -extern const bcstring be_const_str_SSD1331_DC; -extern const bcstring be_const_str_resolvecmnd; -extern const bcstring be_const_str_SYMBOL_BATTERY_FULL; -extern const bcstring be_const_str_WE517_RX; -extern const bcstring be_const_str_RDM6300_RX; -extern const bcstring be_const_str_SYMBOL_REFRESH; -extern const bcstring be_const_str__rules; -extern const bcstring be_const_str_print; -extern const bcstring be_const_str_HPMA_TX; -extern const bcstring be_const_str_SYMBOL_LEFT; -extern const bcstring be_const_str_lv_arc; -extern const bcstring be_const_str_get_light; -extern const bcstring be_const_str_time_dump; -extern const bcstring be_const_str_Tasmota; -extern const bcstring be_const_str_list; -extern const bcstring be_const_str_AZ_RXD; -extern const bcstring be_const_str_SYMBOL_KEYBOARD; -extern const bcstring be_const_str_if; -extern const bcstring be_const_str_type; -extern const bcstring be_const_str_WE517_TX; -extern const bcstring be_const_str_millis; -extern const bcstring be_const_str_MAX7219CLK; -extern const bcstring be_const_str_allocated; -extern const bcstring be_const_str_wire_scan; -extern const bcstring be_const_str_SYMBOL_SAVE; -extern const bcstring be_const_str__write; -extern const bcstring be_const_str_nil; -extern const bcstring be_const_str_SYMBOL_WIFI; -extern const bcstring be_const_str_delay; -extern const bcstring be_const_str_web_send_decimal; -extern const bcstring be_const_str_NEOPOOL_RX; -extern const bcstring be_const_str_SHELLY_DIMMER_BOOT0; -extern const bcstring be_const_str__available; -extern const bcstring be_const_str_ILI9341_DC; -extern const bcstring be_const_str_push; -extern const bcstring be_const_str_wire1; -extern const bcstring be_const_str_lv_switch; -extern const bcstring be_const_str_remove; -extern const bcstring be_const_str_continue; -extern const bcstring be_const_str_TM1638CLK; -extern const bcstring be_const_str_MCP39F5_RST; -extern const bcstring be_const_str_try_rule; -extern const bcstring be_const_str_lv_imgbtn; -extern const bcstring be_const_str_bus; -extern const bcstring be_const_str_WIEGAND_D1; -extern const bcstring be_const_str_bytes; -extern const bcstring be_const_str_cmd; -extern const bcstring be_const_str_lv_bar; -extern const bcstring be_const_str_resp_cmnd_error; -extern const bcstring be_const_str_SYMBOL_BLUETOOTH; -extern const bcstring be_const_str_real; -extern const bcstring be_const_str_wire2; -extern const bcstring be_const_str_GPS_TX; -extern const bcstring be_const_str_HM10_TX; -extern const bcstring be_const_str_ZEROCROSS; -extern const bcstring be_const_str_get_ver_res; -extern const bcstring be_const_str_input; -extern const bcstring be_const_str_rad; -extern const bcstring be_const_str_toupper; -extern const bcstring be_const_str_SPI_DC; -extern const bcstring be_const_str__read; -extern const bcstring be_const_str_CSE7766_RX; -extern const bcstring be_const_str_lv_checkbox; -extern const bcstring be_const_str_TM1638STB; -extern const bcstring be_const_str_event; -extern const bcstring be_const_str_lv_canvas; -extern const bcstring be_const_str_SYMBOL_COPY; -extern const bcstring be_const_str_else; -extern const bcstring be_const_str_HX711_DAT; -extern const bcstring be_const_str_WIEGAND_D0; -extern const bcstring be_const_str_OUTPUT_OPEN_DRAIN; -extern const bcstring be_const_str_detect; -extern const bcstring be_const_str_IBEACON_TX; -extern const bcstring be_const_str_classname; -extern const bcstring be_const_str_rand; -extern const bcstring be_const_str_BACKLIGHT; -extern const bcstring be_const_str__request_from; -extern const bcstring be_const_str_lv_color; -extern const bcstring be_const_str_ETH_PHY_POWER; -extern const bcstring be_const_str_HRE_DATA; -extern const bcstring be_const_str_SYMBOL_PLUS; -extern const bcstring be_const_str_dump; -extern const bcstring be_const_str_imax; -extern const bcstring be_const_str_SWT1; -extern const bcstring be_const_str_PMS5003_TX; -extern const bcstring be_const_str_TFMINIPLUS_RX; -extern const bcstring be_const_str___lower__; -extern const bcstring be_const_str_lv_table; -extern const bcstring be_const_str_clear; -extern const bcstring be_const_str_HX711_SCK; -extern const bcstring be_const_str_DDSU666_TX; -extern const bcstring be_const_str_A4988_DIR; -extern const bcstring be_const_str_WS2812; -extern const bcstring be_const_str_map; -extern const bcstring be_const_str_dot_p; -extern const bcstring be_const_str_FTC532; -extern const bcstring be_const_str_LMT01; -extern const bcstring be_const_str_init; -extern const bcstring be_const_str_A4988_STP; -extern const bcstring be_const_str_ETH_PHY_MDC; -extern const bcstring be_const_str_floor; -extern const bcstring be_const_str_SPI_MOSI; -extern const bcstring be_const_str_copy; -extern const bcstring be_const_str_response_append; extern const bcstring be_const_str_lv_cont; -extern const bcstring be_const_str_; +extern const bcstring be_const_str_IBEACON_TX; extern const bcstring be_const_str_IEM3000_TX; -extern const bcstring be_const_str_SYMBOL_NEXT; -extern const bcstring be_const_str_lv_calendar; -extern const bcstring be_const_str_SYMBOL_BULLET; -extern const bcstring be_const_str_keys; -extern const bcstring be_const_str_true; -extern const bcstring be_const_str_hex; -extern const bcstring be_const_str_ILI9488_CS; -extern const bcstring be_const_str_NRG_CF1; -extern const bcstring be_const_str_SOLAXX1_TX; -extern const bcstring be_const_str_WEBCAM_PSCLK; -extern const bcstring be_const_str_BS814_DAT; -extern const bcstring be_const_str_OPTION_A; -extern const bcstring be_const_str_count; -extern const bcstring be_const_str_BOILER_OT_TX; -extern const bcstring be_const_str_PULLDOWN; -extern const bcstring be_const_str_SYMBOL_BATTERY_EMPTY; -extern const bcstring be_const_str_exp; -extern const bcstring be_const_str_SR04_ECHO; -extern const bcstring be_const_str_tostring; -extern const bcstring be_const_str_TASMOTACLIENT_RST; -extern const bcstring be_const_str_get_power; -extern const bcstring be_const_str_SAIR_TX; -extern const bcstring be_const_str_SDS0X1_TX; -extern const bcstring be_const_str_yield; -extern const bcstring be_const_str_HPMA_RX; -extern const bcstring be_const_str_MGC3130_XFER; -extern const bcstring be_const_str_TM1638DIO; -extern const bcstring be_const_str_LE01MR_TX; -extern const bcstring be_const_str_SSPI_MISO; -extern const bcstring be_const_str_KEY1_INV; -extern const bcstring be_const_str_SM16716_DAT; -extern const bcstring be_const_str_SM16716_SEL; -extern const bcstring be_const_str_TASMOTACLIENT_RXD; -extern const bcstring be_const_str_gamma10; -extern const bcstring be_const_str_ZIGBEE_RST; -extern const bcstring be_const_str_SM2135_DAT; -extern const bcstring be_const_str_SSPI_MOSI; -extern const bcstring be_const_str_TASMOTACLIENT_TXD; -extern const bcstring be_const_str_char; -extern const bcstring be_const_str_codedump; -extern const bcstring be_const_str_resp_cmnd_failed; -extern const bcstring be_const_str_pin; -extern const bcstring be_const_str_as; -extern const bcstring be_const_str_KEY1_INV_NP; -extern const bcstring be_const_str_opt_eq; -extern const bcstring be_const_str_EXS_ENABLE; -extern const bcstring be_const_str_RC522_RST; -extern const bcstring be_const_str_lv_style; -extern const bcstring be_const_str_number; -extern const bcstring be_const_str_lv_line; -extern const bcstring be_const_str_asin; +extern const bcstring be_const_str_PMS5003_RX; +extern const bcstring be_const_str_cmd; extern const bcstring be_const_str_web_add_main_button; -extern const bcstring be_const_str_HRXL_RX; -extern const bcstring be_const_str_OUTPUT; -extern const bcstring be_const_str_SYMBOL_DIRECTORY; -extern const bcstring be_const_str_TUYA_RX; -extern const bcstring be_const_str_abs; -extern const bcstring be_const_str_pi; -extern const bcstring be_const_str_HJL_CF; -extern const bcstring be_const_str_INPUT; -extern const bcstring be_const_str___iterator__; -extern const bcstring be_const_str_DHT22; -extern const bcstring be_const_str_DI; -extern const bcstring be_const_str_CNTR1; -extern const bcstring be_const_str_lv_keyboard; -extern const bcstring be_const_str_opt_connect; -extern const bcstring be_const_str_EPD_DATA; -extern const bcstring be_const_str_lv_msgbox; -extern const bcstring be_const_str_PROJECTOR_CTRL_TX; -extern const bcstring be_const_str_split; -extern const bcstring be_const_str_web_sensor; -extern const bcstring be_const_str_NRG_SEL; -extern const bcstring be_const_str_SYMBOL_AUDIO; -extern const bcstring be_const_str__ccmd; -extern const bcstring be_const_str_false; -extern const bcstring be_const_str_MCP39F5_RX; -extern const bcstring be_const_str_SYMBOL_DRIVE; -extern const bcstring be_const_str_get_tasmota; -extern const bcstring be_const_str_write; -extern const bcstring be_const_str_OLED_RESET; -extern const bcstring be_const_str_SSPI_MAX31865_CS1; -extern const bcstring be_const_str_every_100ms; -extern const bcstring be_const_str_HLW_CF; -extern const bcstring be_const_str_SYMBOL_STOP; -extern const bcstring be_const_str_WEBCAM_HREF; -extern const bcstring be_const_str_cosh; -extern const bcstring be_const_str_except; -extern const bcstring be_const_str_layer_sys; -extern const bcstring be_const_str_SYMBOL_PASTE; -extern const bcstring be_const_str_TX2X_TXD_BLACK; -extern const bcstring be_const_str_do; -extern const bcstring be_const_str_SM2135_CLK; -extern const bcstring be_const_str_find_key_i; -extern const bcstring be_const_str_load_font; extern const bcstring be_const_str_write_bytes; -extern const bcstring be_const_str_A4988_ENA; -extern const bcstring be_const_str_MIEL_HVAC_RX; -extern const bcstring be_const_str_SYMBOL_SHUFFLE; -extern const bcstring be_const_str_ADC_LIGHT; -extern const bcstring be_const_str_SHELLY_DIMMER_RST_INV; -extern const bcstring be_const_str__cmd; -extern const bcstring be_const_str_return; -extern const bcstring be_const_str_resp_cmnd; -extern const bcstring be_const_str_AZ_TXD; -extern const bcstring be_const_str_DHT11; -extern const bcstring be_const_str_exec_cmd; -extern const bcstring be_const_str_get; -extern const bcstring be_const_str_lv_tileview; -extern const bcstring be_const_str_MHZ_RXD; -extern const bcstring be_const_str_SBR_RX; -extern const bcstring be_const_str_SDM72_RX; -extern const bcstring be_const_str_lv_font; -extern const bcstring be_const_str_seg7_font; -extern const bcstring be_const_str_DSB; -extern const bcstring be_const_str_SSD1351_CS; -extern const bcstring be_const_str___upper__; -extern const bcstring be_const_str_json_append; -extern const bcstring be_const_str_srand; -extern const bcstring be_const_str_OPEN_DRAIN; -extern const bcstring be_const_str_PN532_RXD; -extern const bcstring be_const_str_SDM630_TX; -extern const bcstring be_const_str_SSD1351_DC; -extern const bcstring be_const_str_end; -extern const bcstring be_const_str_AS608_TX; -extern const bcstring be_const_str_SYMBOL_DOWN; -extern const bcstring be_const_str_Wire; -extern const bcstring be_const_str_NONE; -extern const bcstring be_const_str_PN532_TXD; -extern const bcstring be_const_str_PZEM017_RX; -extern const bcstring be_const_str_SSPI_DC; -extern const bcstring be_const_str_SYMBOL_PAUSE; -extern const bcstring be_const_str_PWM1_INV; -extern const bcstring be_const_str_SYMBOL_NEW_LINE; -extern const bcstring be_const_str_tan; -extern const bcstring be_const_str_HIGH; -extern const bcstring be_const_str_SYMBOL_HOME; -extern const bcstring be_const_str_ADC_RANGE; -extern const bcstring be_const_str_issubclass; -extern const bcstring be_const_str_XPT2046_CS; -extern const bcstring be_const_str_WEBCAM_SIOC; -extern const bcstring be_const_str_for; -extern const bcstring be_const_str_import; -extern const bcstring be_const_str_WEBCAM_HSD; -extern const bcstring be_const_str_digital_read; -extern const bcstring be_const_str_imin; -extern const bcstring be_const_str_SSPI_CS; -extern const bcstring be_const_str_ADC_CT_POWER; -extern const bcstring be_const_str_SYMBOL_MUTE; -extern const bcstring be_const_str_add; +extern const bcstring be_const_str_LED1_INV; +extern const bcstring be_const_str_lv_calendar; +extern const bcstring be_const_str_add_rule; extern const bcstring be_const_str_ROT1A; -extern const bcstring be_const_str_ZIGBEE_TX; -extern const bcstring be_const_str_DDS2382_TX; -extern const bcstring be_const_str_SYMBOL_UP; -extern const bcstring be_const_str_TELEINFO_ENABLE; -extern const bcstring be_const_str_HALLEFFECT; -extern const bcstring be_const_str_RXD; -extern const bcstring be_const_str_add_cmd; -extern const bcstring be_const_str_scale_uint; +extern const bcstring be_const_str_SR04_ECHO; +extern const bcstring be_const_str_save; +extern const bcstring be_const_str_import; +extern const bcstring be_const_str_floor; +extern const bcstring be_const_str_module; +extern const bcstring be_const_str_read_bytes; +extern const bcstring be_const_str_EPAPER29_CS; +extern const bcstring be_const_str_VL53L0X_XSHUT1; +extern const bcstring be_const_str_DDSU666_RX; +extern const bcstring be_const_str_pin_used; +extern const bcstring be_const_str_wire_scan; +extern const bcstring be_const_str_seg7_font; +extern const bcstring be_const_str_BACKLIGHT; +extern const bcstring be_const_str_HPMA_RX; +extern const bcstring be_const_str_SYMBOL_DOWN; +extern const bcstring be_const_str_MP3_DFR562; +extern const bcstring be_const_str__write; +extern const bcstring be_const_str_SYMBOL_MINUS; +extern const bcstring be_const_str_web_add_button; +extern const bcstring be_const_str_event; +extern const bcstring be_const_str_resp_cmnd_done; +extern const bcstring be_const_str_PROJECTOR_CTRL_RX; +extern const bcstring be_const_str_RC522_CS; +extern const bcstring be_const_str_SYMBOL_USB; +extern const bcstring be_const_str_lv_arc; +extern const bcstring be_const_str_scan; +extern const bcstring be_const_str_web_send_decimal; +extern const bcstring be_const_str_TASMOTACLIENT_RST_INV; +extern const bcstring be_const_str_WE517_RX; +extern const bcstring be_const_str_insert; +extern const bcstring be_const_str_web_sensor; +extern const bcstring be_const_str_ILI9488_CS; +extern const bcstring be_const_str_resize; +extern const bcstring be_const_str_ADC_BUTTON; +extern const bcstring be_const_str_I2C_SCL; +extern const bcstring be_const_str_classof; +extern const bcstring be_const_str_SYMBOL_WIFI; +extern const bcstring be_const_str_gc; +extern const bcstring be_const_str_SYMBOL_AUDIO; +extern const bcstring be_const_str_SYMBOL_TRASH; +extern const bcstring be_const_str_every_100ms; +extern const bcstring be_const_str_run_deferred; +extern const bcstring be_const_str_LMT01; +extern const bcstring be_const_str_WE517_TX; +extern const bcstring be_const_str__cmd; +extern const bcstring be_const_str_SYMBOL_SETTINGS; extern const bcstring be_const_str_SPI_CS; +extern const bcstring be_const_str_delay; +extern const bcstring be_const_str_remove; +extern const bcstring be_const_str_reverse; +extern const bcstring be_const_str_HM10_RX; +extern const bcstring be_const_str_SYMBOL_EDIT; +extern const bcstring be_const_str_exec_cmd; +extern const bcstring be_const_str_OPEN_DRAIN; +extern const bcstring be_const_str_publish; +extern const bcstring be_const_str_break; +extern const bcstring be_const_str_lv_font; +extern const bcstring be_const_str_tostring; +extern const bcstring be_const_str_SSPI_SCLK; +extern const bcstring be_const_str_A4988_DIR; +extern const bcstring be_const_str_SYMBOL_SD_CARD; +extern const bcstring be_const_str_set_light; +extern const bcstring be_const_str_SYMBOL_BATTERY_FULL; +extern const bcstring be_const_str_lv_imgbtn; +extern const bcstring be_const_str_MIEL_HVAC_TX; +extern const bcstring be_const_str_SYMBOL_CUT; +extern const bcstring be_const_str_SYMBOL_UPLOAD; +extern const bcstring be_const_str_TFMINIPLUS_RX; +extern const bcstring be_const_str_WEBCAM_SIOC; +extern const bcstring be_const_str_DDS2382_TX; +extern const bcstring be_const_str_RF_SENSOR; +extern const bcstring be_const_str_lv_table; +extern const bcstring be_const_str_setrange; +extern const bcstring be_const_str_tanh; +extern const bcstring be_const_str_AZ_TXD; +extern const bcstring be_const_str_SYMBOL_VOLUME_MAX; +extern const bcstring be_const_str_A4988_ENA; +extern const bcstring be_const_str_SYMBOL_CHARGE; +extern const bcstring be_const_str_opt_neq; +extern const bcstring be_const_str_DHT22; +extern const bcstring be_const_str_SYMBOL_OK; +extern const bcstring be_const_str_TASMOTACLIENT_TXD; +extern const bcstring be_const_str_NRG_CF1; +extern const bcstring be_const_str_SDS0X1_RX; +extern const bcstring be_const_str_SENSOR_END; +extern const bcstring be_const_str_TELEINFO_ENABLE; +extern const bcstring be_const_str_opt_add; extern const bcstring be_const_str_NRF24_CS; +extern const bcstring be_const_str_lv_msgbox; +extern const bcstring be_const_str_remove_cmd; +extern const bcstring be_const_str_var; +extern const bcstring be_const_str_HRE_CLOCK; +extern const bcstring be_const_str___iterator__; +extern const bcstring be_const_str_atan; +extern const bcstring be_const_str_elif; +extern const bcstring be_const_str_asstring; +extern const bcstring be_const_str_HIGH; +extern const bcstring be_const_str_ROT1B; +extern const bcstring be_const_str_real; +extern const bcstring be_const_str_HLW_CF; +extern const bcstring be_const_str_KEY1_NP; +extern const bcstring be_const_str_item; +extern const bcstring be_const_str_lv_tabview; +extern const bcstring be_const_str_AZ_RXD; +extern const bcstring be_const_str_SYMBOL_COPY; +extern const bcstring be_const_str_HM10_TX; +extern const bcstring be_const_str_PZEM0XX_TX; +extern const bcstring be_const_str_number; +extern const bcstring be_const_str_EXS_ENABLE; +extern const bcstring be_const_str_LEDLNK; +extern const bcstring be_const_str_SSPI_MISO; +extern const bcstring be_const_str_PWM1; +extern const bcstring be_const_str_SYMBOL_BATTERY_1; +extern const bcstring be_const_str_wire1; +extern const bcstring be_const_str_SYMBOL_FILE; +extern const bcstring be_const_str_json_append; +extern const bcstring be_const_str_def; +extern const bcstring be_const_str_opt_connect; +extern const bcstring be_const_str_WEBCAM_PCLK; +extern const bcstring be_const_str_set_power; +extern const bcstring be_const_str_NONE; +extern const bcstring be_const_str_DCKI; +extern const bcstring be_const_str_pin; +extern const bcstring be_const_str_range; +extern const bcstring be_const_str_TX2X_TXD_BLACK; +extern const bcstring be_const_str_lv_switch; +extern const bcstring be_const_str_ZEROCROSS; +extern const bcstring be_const_str_ADC_INPUT; +extern const bcstring be_const_str_compile; +extern const bcstring be_const_str_RC522_RST; +extern const bcstring be_const_str_lv_cpicker; +extern const bcstring be_const_str_lv_img; +extern const bcstring be_const_str_start; +extern const bcstring be_const_str_SSD1331_CS; +extern const bcstring be_const_str_ceil; +extern const bcstring be_const_str_nil; +extern const bcstring be_const_str_BS814_DAT; +extern const bcstring be_const_str_SYMBOL_HOME; +extern const bcstring be_const_str__rules; +extern const bcstring be_const_str_lv_spinner; +extern const bcstring be_const_str_PULLDOWN; +extern const bcstring be_const_str_SYMBOL_BATTERY_2; +extern const bcstring be_const_str_wire2; +extern const bcstring be_const_str_while; +extern const bcstring be_const_str_opt_eq; +extern const bcstring be_const_str_deg; +extern const bcstring be_const_str_lv_color; +extern const bcstring be_const_str_fromstring; +extern const bcstring be_const_str_PZEM004_RX; +extern const bcstring be_const_str_SDCARD_CS; +extern const bcstring be_const_str_SYMBOL_KEYBOARD; +extern const bcstring be_const_str_millis; +extern const bcstring be_const_str_ETH_PHY_MDIO; +extern const bcstring be_const_str_SYMBOL_PAUSE; +extern const bcstring be_const_str_ZIGBEE_TX; +extern const bcstring be_const_str_write; +extern const bcstring be_const_str_do; +extern const bcstring be_const_str_SDM72_TX; +extern const bcstring be_const_str_ST7789_DC; +extern const bcstring be_const_str_lv_checkbox; +extern const bcstring be_const_str_reverse_gamma10; +extern const bcstring be_const_str_return; +extern const bcstring be_const_str_SSPI_MAX31865_CS1; +extern const bcstring be_const_str_SWT1; +extern const bcstring be_const_str_bytes; +extern const bcstring be_const_str_SYMBOL_PASTE; +extern const bcstring be_const_str_char; +extern const bcstring be_const_str_SAIR_TX; +extern const bcstring be_const_str_SDM72_RX; +extern const bcstring be_const_str_CSE7761_RX; +extern const bcstring be_const_str_IRSEND; +extern const bcstring be_const_str_count; +extern const bcstring be_const_str_DSB_OUT; +extern const bcstring be_const_str_SBR_RX; +extern const bcstring be_const_str_SYMBOL_BATTERY_3; +extern const bcstring be_const_str_push; +extern const bcstring be_const_str_SOLAXX1_RX; +extern const bcstring be_const_str_A4988_MS1; +extern const bcstring be_const_str_KEY1; +extern const bcstring be_const_str_byte; +extern const bcstring be_const_str_FALLING; +extern const bcstring be_const_str_GPS_TX; +extern const bcstring be_const_str__request_from; +extern const bcstring be_const_str_str; +extern const bcstring be_const_str_continue; +extern const bcstring be_const_str_EPD_DATA; +extern const bcstring be_const_str_WS2812; +extern const bcstring be_const_str_WINDMETER_SPEED; +extern const bcstring be_const_str_setitem; +extern const bcstring be_const_str_SYMBOL_STOP; +extern const bcstring be_const_str_detect; +extern const bcstring be_const_str_BUZZER_INV; +extern const bcstring be_const_str_CC1101_GDO0; +extern const bcstring be_const_str_PZEM016_RX; +extern const bcstring be_const_str_RISING; +extern const bcstring be_const_str_rtc; +extern const bcstring be_const_str_LE01MR_RX; +extern const bcstring be_const_str_try_rule; +extern const bcstring be_const_str_ADC_PH; +extern const bcstring be_const_str_SDM120_TX; +extern const bcstring be_const_str_find_op; +extern const bcstring be_const_str_pop; +extern const bcstring be_const_str_CNTR1; +extern const bcstring be_const_str_TFMINIPLUS_TX; +extern const bcstring be_const_str_TM1638STB; +extern const bcstring be_const_str__drivers; +extern const bcstring be_const_str_load; +extern const bcstring be_const_str_time_reached; +extern const bcstring be_const_str_DDSU666_TX; +extern const bcstring be_const_str_PWM1_INV; +extern const bcstring be_const_str_SYMBOL_CALL; +extern const bcstring be_const_str_if; +extern const bcstring be_const_str_RFSEND; +extern const bcstring be_const_str_SWT1_NP; +extern const bcstring be_const_str_button_pressed; +extern const bcstring be_const_str_SDM120_RX; +extern const bcstring be_const_str_keys; +extern const bcstring be_const_str_set_timer; +extern const bcstring be_const_str_SYMBOL_LIST; +extern const bcstring be_const_str_MAX31855CLK; +extern const bcstring be_const_str_get; +extern const bcstring be_const_str_SYMBOL_LOOP; +extern const bcstring be_const_str_except; +extern const bcstring be_const_str_MHZ_TXD; +extern const bcstring be_const_str_get_power; +extern const bcstring be_const_str_OUTPUT_HI; +extern const bcstring be_const_str_isinstance; +extern const bcstring be_const_str_BOILER_OT_RX; +extern const bcstring be_const_str_TM1637DIO; +extern const bcstring be_const_str_resolvecmnd; +extern const bcstring be_const_str_AS608_TX; +extern const bcstring be_const_str_TASMOTACLIENT_RXD; +extern const bcstring be_const_str_WEBCAM_SIOD; +extern const bcstring be_const_str_find; +extern const bcstring be_const_str_SI7021; +extern const bcstring be_const_str_gamma10; +extern const bcstring be_const_str_get_light; +extern const bcstring be_const_str_P9813_CLK; +extern const bcstring be_const_str_concat; +extern const bcstring be_const_str___lower__; +extern const bcstring be_const_str_rand; +extern const bcstring be_const_str_INPUT; +extern const bcstring be_const_str_SSPI_CS; +extern const bcstring be_const_str_assert; +extern const bcstring be_const_str_issubclass; +extern const bcstring be_const_str_AS608_RX; +extern const bcstring be_const_str_lv_tileview; +extern const bcstring be_const_str_CSE7761_TX; +extern const bcstring be_const_str_allocated; +extern const bcstring be_const_str_asin; +extern const bcstring be_const_str_try; +extern const bcstring be_const_str_MAX31855DO; +extern const bcstring be_const_str__end_transmission; +extern const bcstring be_const_str_CC1101_GDO2; +extern const bcstring be_const_str_ETH_PHY_POWER; +extern const bcstring be_const_str_SYMBOL_GPS; +extern const bcstring be_const_str_ILI9341_CS; +extern const bcstring be_const_str_SYMBOL_POWER; +extern const bcstring be_const_str_SYMBOL_SAVE; +extern const bcstring be_const_str_OUTPUT_OPEN_DRAIN; +extern const bcstring be_const_str_TM1637CLK; +extern const bcstring be_const_str_HX711_DAT; +extern const bcstring be_const_str_SPI_MISO; +extern const bcstring be_const_str_KEY1_INV; +extern const bcstring be_const_str_SYMBOL_SHUFFLE; +extern const bcstring be_const_str_time_dump; +extern const bcstring be_const_str_PMS5003_TX; +extern const bcstring be_const_str_WEBCAM_PSRCS; +extern const bcstring be_const_str_imin; +extern const bcstring be_const_str_false; +extern const bcstring be_const_str_A4988_STP; +extern const bcstring be_const_str_SYMBOL_PLUS; +extern const bcstring be_const_str_WEBCAM_VSYNC; +extern const bcstring be_const_str_gamma8; +extern const bcstring be_const_str_SYMBOL_PLAY; +extern const bcstring be_const_str__begin_transmission; +extern const bcstring be_const_str_CSE7766_TX; +extern const bcstring be_const_str_ETH_PHY_MDC; +extern const bcstring be_const_str_get_option; +extern const bcstring be_const_str_screenshot; +extern const bcstring be_const_str_lv_win; +extern const bcstring be_const_str_ADC_RANGE; +extern const bcstring be_const_str_ROT1A_NP; +extern const bcstring be_const_str_SPI_DC; +extern const bcstring be_const_str_SYMBOL_LEFT; +extern const bcstring be_const_str_acos; +extern const bcstring be_const_str_add_cmd; +extern const bcstring be_const_str_lv_gauge; +extern const bcstring be_const_str_ILI9341_DC; +extern const bcstring be_const_str_DHT11; +extern const bcstring be_const_str_FTC532; +extern const bcstring be_const_str_SM2135_DAT; +extern const bcstring be_const_str_SYMBOL_NEW_LINE; +extern const bcstring be_const_str_HX711_SCK; +extern const bcstring be_const_str_MIEL_HVAC_RX; +extern const bcstring be_const_str_WIEGAND_D1; +extern const bcstring be_const_str_lv_roller; +extern const bcstring be_const_str_else; +extern const bcstring be_const_str_SAIR_RX; +extern const bcstring be_const_str_srand; +extern const bcstring be_const_str_ARIRFSEL; +extern const bcstring be_const_str_MAX31855CS; +extern const bcstring be_const_str_resp_cmnd_error; +extern const bcstring be_const_str_WEBCAM_RESET; +extern const bcstring be_const_str_add; +extern const bcstring be_const_str_cos; +extern const bcstring be_const_str_rad; +extern const bcstring be_const_str__available; +extern const bcstring be_const_str_get_free_heap; +extern const bcstring be_const_str_DHT11_OUT; +extern const bcstring be_const_str_lv_textarea; +extern const bcstring be_const_str_MAX7219CS; +extern const bcstring be_const_str_super; +extern const bcstring be_const_str_imax; +extern const bcstring be_const_str_resp_cmnd_failed; +extern const bcstring be_const_str_attrdump; +extern const bcstring be_const_str_SYMBOL_DIRECTORY; +extern const bcstring be_const_str_TUYA_TX; +extern const bcstring be_const_str_lv_style; +extern const bcstring be_const_str_SPI_MOSI; +extern const bcstring be_const_str_format; +extern const bcstring be_const_str_lv_line; +extern const bcstring be_const_str_SM16716_SEL; +extern const bcstring be_const_str_SYMBOL_IMAGE; +extern const bcstring be_const_str_TCP_RX; +extern const bcstring be_const_str_WIEGAND_D0; +extern const bcstring be_const_str_lv_linemeter; +extern const bcstring be_const_str_PN532_TXD; +extern const bcstring be_const_str_digital_read; +extern const bcstring be_const_str_every_second; +extern const bcstring be_const_str_as; +extern const bcstring be_const_str_SYMBOL_DUMMY; +extern const bcstring be_const_str_BUZZER; +extern const bcstring be_const_str_HRE_DATA; +extern const bcstring be_const_str_MGC3130_XFER; +extern const bcstring be_const_str_OLED_RESET; +extern const bcstring be_const_str_member; +extern const bcstring be_const_str_copy; +extern const bcstring be_const_str_lv_canvas; +extern const bcstring be_const_str_TASMOTACLIENT_RST; +extern const bcstring be_const_str_TCP_TX; +extern const bcstring be_const_str_sin; +extern const bcstring be_const_str_ST7789_CS; +extern const bcstring be_const_str_lv_indev; +extern const bcstring be_const_str_resp_cmnd; +extern const bcstring be_const_str_response_append; +extern const bcstring be_const_str_ARIRFRCV; +extern const bcstring be_const_str_OUTPUT; +extern const bcstring be_const_str_NRF24_DC; +extern const bcstring be_const_str_SYMBOL_REFRESH; +extern const bcstring be_const_str_traceback; +extern const bcstring be_const_str_IRRECV; +extern const bcstring be_const_str_ZIGBEE_RX; +extern const bcstring be_const_str_ADC_CT_POWER; +extern const bcstring be_const_str_MCP39F5_TX; +extern const bcstring be_const_str_SYMBOL_EJECT; +extern const bcstring be_const_str_get_tasmota; +extern const bcstring be_const_str_lv_group; +extern const bcstring be_const_str_ADC_TEMP; +extern const bcstring be_const_str_IEM3000_RX; +extern const bcstring be_const_str_SHELLY_DIMMER_BOOT0; +extern const bcstring be_const_str_TELEINFO_RX; +extern const bcstring be_const_str_remove_rule; +extern const bcstring be_const_str_size; +extern const bcstring be_const_str_SSD1351_DC; +extern const bcstring be_const_str_TM1638DIO; +extern const bcstring be_const_str_SM2135_CLK; +extern const bcstring be_const_str_TXD; +extern const bcstring be_const_str_SYMBOL_EYE_CLOSE; +extern const bcstring be_const_str_AS3935; +extern const bcstring be_const_str_LED1; +extern const bcstring be_const_str_SYMBOL_BACKSPACE; +extern const bcstring be_const_str_codedump; +extern const bcstring be_const_str_SBR_TX; +extern const bcstring be_const_str_RA8876_CS; +extern const bcstring be_const_str_SYMBOL_EYE_OPEN; +extern const bcstring be_const_str_KEY1_TC; +extern const bcstring be_const_str_NRG_SEL_INV; +extern const bcstring be_const_str_RXD; +extern const bcstring be_const_str_SDM630_RX; +extern const bcstring be_const_str_WEBCAM_DATA; +extern const bcstring be_const_str__ccmd; +extern const bcstring be_const_str_bus; +extern const bcstring be_const_str_lv_dropdown; +extern const bcstring be_const_str_INPUT_PULLUP; +extern const bcstring be_const_str_find_key_i; +extern const bcstring be_const_str_EPAPER42_CS; +extern const bcstring be_const_str___upper__; +extern const bcstring be_const_str_sinh; +extern const bcstring be_const_str_WEBCAM_XCLK; +extern const bcstring be_const_str_i2c_enabled; +extern const bcstring be_const_str_ADC_LIGHT; +extern const bcstring be_const_str_DSB; +extern const bcstring be_const_str_SYMBOL_DRIVE; +extern const bcstring be_const_str_lv_label; +extern const bcstring be_const_str_CSE7766_RX; +extern const bcstring be_const_str_SDM630_TX; +extern const bcstring be_const_str_iter; +extern const bcstring be_const_str_; +extern const bcstring be_const_str_MCP39F5_RX; +extern const bcstring be_const_str_MGC3130_RESET; +extern const bcstring be_const_str_log; +extern const bcstring be_const_str_LE01MR_TX; +extern const bcstring be_const_str_set; diff --git a/lib/libesp32/Berry/generate/be_const_strtab_def.h b/lib/libesp32/Berry/generate/be_const_strtab_def.h index 6720eb97d..fb304e845 100644 --- a/lib/libesp32/Berry/generate/be_const_strtab_def.h +++ b/lib/libesp32/Berry/generate/be_const_strtab_def.h @@ -1,843 +1,835 @@ -be_define_const_str(ADE7953_IRQ, "ADE7953_IRQ", 2329185922u, 0, 11, &be_const_str_KEY1_TC); -be_define_const_str(KEY1_TC, "KEY1_TC", 25685109u, 0, 7, &be_const_str_button_pressed); -be_define_const_str(button_pressed, "button_pressed", 1694209616u, 0, 14, &be_const_str_lv_slider); -be_define_const_str(lv_slider, "lv_slider", 2274180781u, 0, 9, &be_const_str_var); -be_define_const_str(var, "var", 2317739966u, 64, 3, NULL); -be_define_const_str(TASMOTACLIENT_RST_INV, "TASMOTACLIENT_RST_INV", 2601785365u, 0, 21, &be_const_str_isinstance); -be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, &be_const_str_pin_mode); -be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, NULL); -be_define_const_str(SYMBOL_CHARGE, "SYMBOL_CHARGE", 2106391946u, 0, 13, &be_const_str_WEBCAM_VSYNC); -be_define_const_str(WEBCAM_VSYNC, "WEBCAM_VSYNC", 4032882166u, 0, 12, NULL); -be_define_const_str(opt_neq, "!=", 2428715011u, 0, 2, &be_const_str_BS814_CLK); -be_define_const_str(BS814_CLK, "BS814_CLK", 3002713336u, 0, 9, &be_const_str_load_freetype_font); -be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, NULL); -be_define_const_str(LOW, "LOW", 3526092385u, 0, 3, NULL); -be_define_const_str(MP3_DFR562, "MP3_DFR562", 2859952977u, 0, 10, &be_const_str_SDM72_TX); -be_define_const_str(SDM72_TX, "SDM72_TX", 2042143269u, 0, 8, &be_const_str_SENSOR_END); -be_define_const_str(SENSOR_END, "SENSOR_END", 3512542657u, 0, 10, NULL); -be_define_const_str(opt_add, "+", 772578730u, 0, 1, &be_const_str_DEEPSLEEP); -be_define_const_str(DEEPSLEEP, "DEEPSLEEP", 189922226u, 0, 9, &be_const_str_SPI_MISO); -be_define_const_str(SPI_MISO, "SPI_MISO", 150818010u, 0, 8, &be_const_str_def); -be_define_const_str(def, "def", 3310976652u, 55, 3, NULL); -be_define_const_str(ADC_BUTTON, "ADC_BUTTON", 3393454690u, 0, 10, &be_const_str_MHZ_TXD); -be_define_const_str(MHZ_TXD, "MHZ_TXD", 3310158233u, 0, 7, &be_const_str_RFRECV); -be_define_const_str(RFRECV, "RFRECV", 354742801u, 0, 6, &be_const_str_WINDMETER_SPEED); -be_define_const_str(WINDMETER_SPEED, "WINDMETER_SPEED", 1980822204u, 0, 15, NULL); -be_define_const_str(SYMBOL_EJECT, "SYMBOL_EJECT", 873760647u, 0, 12, NULL); -be_define_const_str(SDM630_RX, "SDM630_RX", 1971606309u, 0, 9, &be_const_str_SYMBOL_POWER); -be_define_const_str(SYMBOL_POWER, "SYMBOL_POWER", 1125993627u, 0, 12, &be_const_str_lv_btnmatrix); -be_define_const_str(lv_btnmatrix, "lv_btnmatrix", 626248489u, 0, 12, &be_const_str_scr_act); -be_define_const_str(scr_act, "scr_act", 2080211456u, 0, 7, &be_const_str_setitem); -be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, NULL); -be_define_const_str(ARIRFRCV, "ARIRFRCV", 1120816444u, 0, 8, &be_const_str_lv_label); -be_define_const_str(lv_label, "lv_label", 4199664246u, 0, 8, &be_const_str_module); -be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_traceback); -be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, &be_const_str_while); -be_define_const_str(while, "while", 231090382u, 53, 5, NULL); -be_define_const_str(SYMBOL_SD_CARD, "SYMBOL_SD_CARD", 2542376484u, 0, 14, &be_const_str_lv_roller); -be_define_const_str(lv_roller, "lv_roller", 661902064u, 0, 9, NULL); -be_define_const_str(HRE_CLOCK, "HRE_CLOCK", 2870559111u, 0, 9, NULL); -be_define_const_str(LEDLNK_INV, "LEDLNK_INV", 3559015101u, 0, 10, &be_const_str_P9813_DAT); -be_define_const_str(P9813_DAT, "P9813_DAT", 778577052u, 0, 9, &be_const_str_rtc); -be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, NULL); -be_define_const_str(deg, "deg", 3327754271u, 0, 3, &be_const_str_lv_spinner); -be_define_const_str(lv_spinner, "lv_spinner", 3361501901u, 0, 10, NULL); -be_define_const_str(HM10_RX, "HM10_RX", 515085922u, 0, 7, &be_const_str_MIEL_HVAC_TX); -be_define_const_str(MIEL_HVAC_TX, "MIEL_HVAC_TX", 567403014u, 0, 12, &be_const_str_gamma8); -be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, NULL); -be_define_const_str(SYMBOL_MINUS, "SYMBOL_MINUS", 1806749158u, 0, 12, NULL); -be_define_const_str(NRF24_DC, "NRF24_DC", 688921313u, 0, 8, NULL); -be_define_const_str(IBEACON_RX, "IBEACON_RX", 2466155575u, 0, 10, &be_const_str_REL1_INV); -be_define_const_str(REL1_INV, "REL1_INV", 3733155371u, 0, 8, &be_const_str_SYMBOL_OK); -be_define_const_str(SYMBOL_OK, "SYMBOL_OK", 4033162940u, 0, 9, NULL); -be_define_const_str(EPAPER29_CS, "EPAPER29_CS", 3916373594u, 0, 11, NULL); -be_define_const_str(ROT1B, "ROT1B", 809932573u, 0, 5, &be_const_str_raise); -be_define_const_str(raise, "raise", 1593437475u, 70, 5, NULL); -be_define_const_str(IRRECV, "IRRECV", 1743648982u, 0, 6, &be_const_str_lv_indev); -be_define_const_str(lv_indev, "lv_indev", 225602374u, 0, 8, NULL); -be_define_const_str(pop, "pop", 1362321360u, 0, 3, NULL); -be_define_const_str(lv_linemeter, "lv_linemeter", 1413069363u, 0, 12, &be_const_str_upper); -be_define_const_str(upper, "upper", 176974407u, 0, 5, NULL); -be_define_const_str(lv_btn, "lv_btn", 1612829968u, 0, 6, NULL); -be_define_const_str(SYMBOL_USB, "SYMBOL_USB", 1962656552u, 0, 10, &be_const_str_break); -be_define_const_str(break, "break", 3378807160u, 58, 5, NULL); -be_define_const_str(SYMBOL_BELL, "SYMBOL_BELL", 1736196487u, 0, 11, &be_const_str_SYMBOL_DOWNLOAD); -be_define_const_str(SYMBOL_DOWNLOAD, "SYMBOL_DOWNLOAD", 2607324090u, 0, 15, &be_const_str_TCP_RX); -be_define_const_str(TCP_RX, "TCP_RX", 3904354751u, 0, 6, NULL); -be_define_const_str(CHANGE, "CHANGE", 4280911421u, 0, 6, &be_const_str_RISING); -be_define_const_str(RISING, "RISING", 1256404539u, 0, 6, NULL); -be_define_const_str(RA8876_CS, "RA8876_CS", 2529944108u, 0, 9, NULL); -be_define_const_str(lv_page, "lv_page", 2373170067u, 0, 7, NULL); -be_define_const_str(lv_group, "lv_group", 3852039019u, 0, 8, NULL); -be_define_const_str(LEDLNK, "LEDLNK", 2862810701u, 0, 6, NULL); -be_define_const_str(RFSEND, "RFSEND", 1862630731u, 0, 6, &be_const_str_ROT1B_NP); -be_define_const_str(ROT1B_NP, "ROT1B_NP", 3710079736u, 0, 8, &be_const_str_SYMBOL_BACKSPACE); -be_define_const_str(SYMBOL_BACKSPACE, "SYMBOL_BACKSPACE", 1997168681u, 0, 16, &be_const_str_TCP_TX); -be_define_const_str(TCP_TX, "TCP_TX", 2762594089u, 0, 6, &be_const_str_lv_textarea); -be_define_const_str(lv_textarea, "lv_textarea", 2864635074u, 0, 11, NULL); -be_define_const_str(SYMBOL_EDIT, "SYMBOL_EDIT", 1396182822u, 0, 11, &be_const_str_WEBCAM_SIOD); -be_define_const_str(WEBCAM_SIOD, "WEBCAM_SIOD", 302703242u, 0, 11, NULL); -be_define_const_str(set, "set", 3324446467u, 0, 3, NULL); -be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, &be_const_str_run_deferred); -be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, NULL); -be_define_const_str(ADC_JOY, "ADC_JOY", 1116943612u, 0, 7, &be_const_str_sin); -be_define_const_str(sin, "sin", 3761252941u, 0, 3, NULL); -be_define_const_str(NEOPOOL_TX, "NEOPOOL_TX", 2924925804u, 0, 10, NULL); -be_define_const_str(DCKI, "DCKI", 3846847480u, 0, 4, &be_const_str_I2C_SCL); -be_define_const_str(I2C_SCL, "I2C_SCL", 164217098u, 0, 7, &be_const_str_i2c_enabled); -be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, NULL); -be_define_const_str(FALLING, "FALLING", 2851701064u, 0, 7, NULL); -be_define_const_str(PZEM004_RX, "PZEM004_RX", 3411153194u, 0, 10, &be_const_str_REL1); -be_define_const_str(REL1, "REL1", 3142397887u, 0, 4, &be_const_str_exec_rules); -be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, NULL); -be_define_const_str(SM16716_CLK, "SM16716_CLK", 3037641483u, 0, 11, NULL); -be_define_const_str(DDSU666_RX, "DDSU666_RX", 1812507936u, 0, 10, &be_const_str_TELEINFO_RX); -be_define_const_str(TELEINFO_RX, "TELEINFO_RX", 1195717356u, 0, 11, NULL); -be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, &be_const_str_gc); -be_define_const_str(gc, "gc", 1042313471u, 0, 2, &be_const_str_open); +be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, NULL); +be_define_const_str(ZIGBEE_RST, "ZIGBEE_RST", 721588661u, 0, 10, &be_const_str_open); be_define_const_str(open, "open", 3546203337u, 0, 4, NULL); -be_define_const_str(BL0940_RX, "BL0940_RX", 2908993179u, 0, 9, NULL); -be_define_const_str(OUTPUT_HI, "OUTPUT_HI", 3153592902u, 0, 9, &be_const_str_RF_SENSOR); -be_define_const_str(RF_SENSOR, "RF_SENSOR", 2289628100u, 0, 9, &be_const_str_lv_dropdown); -be_define_const_str(lv_dropdown, "lv_dropdown", 2797165301u, 0, 11, NULL); -be_define_const_str(IRSEND, "IRSEND", 184848336u, 0, 6, &be_const_str_ROT1A_NP); -be_define_const_str(ROT1A_NP, "ROT1A_NP", 2322706903u, 0, 8, &be_const_str_str); -be_define_const_str(str, "str", 3259748752u, 0, 3, NULL); -be_define_const_str(WEBCAM_XCLK, "WEBCAM_XCLK", 536207425u, 0, 11, NULL); -be_define_const_str(RC522_CS, "RC522_CS", 2639619996u, 0, 8, &be_const_str_get_option); -be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, &be_const_str_tanh); -be_define_const_str(tanh, "tanh", 153638352u, 0, 4, NULL); -be_define_const_str(IEM3000_RX, "IEM3000_RX", 1117811096u, 0, 10, NULL); -be_define_const_str(KEY1, "KEY1", 6715975u, 0, 4, &be_const_str_compile); -be_define_const_str(compile, "compile", 1000265118u, 0, 7, &be_const_str_int); -be_define_const_str(int, "int", 2515107422u, 0, 3, &be_const_str_class); -be_define_const_str(class, "class", 2872970239u, 57, 5, NULL); -be_define_const_str(CSE7761_RX, "CSE7761_RX", 65423248u, 0, 10, &be_const_str_montserrat_font); -be_define_const_str(montserrat_font, "montserrat_font", 1819065874u, 0, 15, &be_const_str_set_light); -be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, NULL); -be_define_const_str(AS608_RX, "AS608_RX", 4275502016u, 0, 8, &be_const_str_SDM120_TX); -be_define_const_str(SDM120_TX, "SDM120_TX", 2509332415u, 0, 9, NULL); -be_define_const_str(MAX7219CS, "MAX7219CS", 2593198244u, 0, 9, &be_const_str_PZEM0XX_TX); -be_define_const_str(PZEM0XX_TX, "PZEM0XX_TX", 944775704u, 0, 10, &be_const_str_cos); -be_define_const_str(cos, "cos", 4220379804u, 0, 3, NULL); -be_define_const_str(BOILER_OT_RX, "BOILER_OT_RX", 603647409u, 0, 12, NULL); -be_define_const_str(SWT1_NP, "SWT1_NP", 4033043739u, 0, 7, NULL); -be_define_const_str(SYMBOL_VOLUME_MID, "SYMBOL_VOLUME_MID", 158835057u, 0, 17, &be_const_str_TM1637DIO); -be_define_const_str(TM1637DIO, "TM1637DIO", 1574659381u, 0, 9, NULL); -be_define_const_str(BUZZER_INV, "BUZZER_INV", 3274564335u, 0, 10, &be_const_str_SYMBOL_CUT); -be_define_const_str(SYMBOL_CUT, "SYMBOL_CUT", 3455112394u, 0, 10, &be_const_str_setrange); -be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, NULL); -be_define_const_str(EPAPER42_CS, "EPAPER42_CS", 3274717451u, 0, 11, &be_const_str_LE01MR_RX); -be_define_const_str(LE01MR_RX, "LE01MR_RX", 1521590809u, 0, 9, &be_const_str_MAX31855CLK); -be_define_const_str(MAX31855CLK, "MAX31855CLK", 715977727u, 0, 11, &be_const_str_SDM120_RX); -be_define_const_str(SDM120_RX, "SDM120_RX", 1367571753u, 0, 9, &be_const_str_SYMBOL_DUMMY); -be_define_const_str(SYMBOL_DUMMY, "SYMBOL_DUMMY", 3621732138u, 0, 12, &be_const_str_super); -be_define_const_str(super, "super", 4152230356u, 0, 5, NULL); -be_define_const_str(classof, "classof", 1796577762u, 0, 7, NULL); -be_define_const_str(PMS5003_RX, "PMS5003_RX", 3934985650u, 0, 10, &be_const_str_iter); -be_define_const_str(iter, "iter", 3124256359u, 0, 4, &be_const_str_lv_list); -be_define_const_str(lv_list, "lv_list", 2876551248u, 0, 7, NULL); -be_define_const_str(MAX7219DIN, "MAX7219DIN", 380687049u, 0, 10, &be_const_str_SYMBOL_LOOP); -be_define_const_str(SYMBOL_LOOP, "SYMBOL_LOOP", 2762053208u, 0, 11, &be_const_str_attrdump); -be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, NULL); -be_define_const_str(ADC_PH, "ADC_PH", 3820290594u, 0, 6, &be_const_str__drivers); -be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, &be_const_str_layer_top); -be_define_const_str(layer_top, "layer_top", 645939682u, 0, 9, &be_const_str_scan); -be_define_const_str(scan, "scan", 3974641896u, 0, 4, &be_const_str_screenshot); -be_define_const_str(screenshot, "screenshot", 3894592561u, 0, 10, NULL); -be_define_const_str(DYP_RX, "DYP_RX", 2122310285u, 0, 6, &be_const_str_ELECTRIQ_MOODL_TX); -be_define_const_str(ELECTRIQ_MOODL_TX, "ELECTRIQ_MOODL_TX", 31009247u, 0, 17, &be_const_str_time_reached); -be_define_const_str(time_reached, "time_reached", 2075136773u, 0, 12, NULL); -be_define_const_str(LED1, "LED1", 21005825u, 0, 4, &be_const_str_lv_chart); -be_define_const_str(lv_chart, "lv_chart", 2652494144u, 0, 8, NULL); -be_define_const_str(ADC_BUTTON_INV, "ADC_BUTTON_INV", 2027625326u, 0, 14, &be_const_str_TFMINIPLUS_TX); -be_define_const_str(TFMINIPLUS_TX, "TFMINIPLUS_TX", 2527875337u, 0, 13, NULL); -be_define_const_str(SPI_CLK, "SPI_CLK", 3943233814u, 0, 7, &be_const_str_TUYA_TX); -be_define_const_str(TUYA_TX, "TUYA_TX", 1541301465u, 0, 7, NULL); -be_define_const_str(NRG_SEL_INV, "NRG_SEL_INV", 3567431069u, 0, 11, &be_const_str_SSPI_SCLK); -be_define_const_str(SSPI_SCLK, "SSPI_SCLK", 136688954u, 0, 9, &be_const_str_SYMBOL_BATTERY_1); -be_define_const_str(SYMBOL_BATTERY_1, "SYMBOL_BATTERY_1", 629036063u, 0, 16, &be_const_str_SYMBOL_GPS); -be_define_const_str(SYMBOL_GPS, "SYMBOL_GPS", 3044165570u, 0, 10, &be_const_str_SYMBOL_VOLUME_MAX); -be_define_const_str(SYMBOL_VOLUME_MAX, "SYMBOL_VOLUME_MAX", 3582646093u, 0, 17, &be_const_str_lv_tabview); -be_define_const_str(lv_tabview, "lv_tabview", 2109024786u, 0, 10, &be_const_str_size); -be_define_const_str(size, "size", 597743964u, 0, 4, NULL); -be_define_const_str(I2C_SDA, "I2C_SDA", 1052592262u, 0, 7, NULL); -be_define_const_str(INPUT_PULLUP, "INPUT_PULLUP", 2912931654u, 0, 12, &be_const_str_SOLAXX1_RX); -be_define_const_str(SOLAXX1_RX, "SOLAXX1_RX", 971867054u, 0, 10, &be_const_str_get_hor_res); -be_define_const_str(get_hor_res, "get_hor_res", 37131144u, 0, 11, NULL); -be_define_const_str(KEY1_NP, "KEY1_NP", 709918726u, 0, 7, NULL); -be_define_const_str(SYMBOL_TRASH, "SYMBOL_TRASH", 3169100368u, 0, 12, &be_const_str_range); -be_define_const_str(range, "range", 4208725202u, 0, 5, &be_const_str_resp_cmnd_done); -be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, NULL); -be_define_const_str(SYMBOL_CLOSE, "SYMBOL_CLOSE", 2654402806u, 0, 12, &be_const_str__begin_transmission); -be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, &be_const_str_publish); -be_define_const_str(publish, "publish", 264247304u, 0, 7, NULL); -be_define_const_str(lv_gauge, "lv_gauge", 118613531u, 0, 8, NULL); -be_define_const_str(insert, "insert", 3332609576u, 0, 6, &be_const_str_lv_spinbox); -be_define_const_str(lv_spinbox, "lv_spinbox", 2666096729u, 0, 10, NULL); -be_define_const_str(WEBCAM_DATA, "WEBCAM_DATA", 1476954421u, 0, 11, NULL); -be_define_const_str(SYMBOL_BATTERY_2, "SYMBOL_BATTERY_2", 645813682u, 0, 16, NULL); -be_define_const_str(pow, "pow", 1479764693u, 0, 3, &be_const_str_try); -be_define_const_str(try, "try", 2887626766u, 68, 3, NULL); -be_define_const_str(ARIRFSEL, "ARIRFSEL", 233874443u, 0, 8, &be_const_str__timers); -be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, &be_const_str_format); -be_define_const_str(format, "format", 3114108242u, 0, 6, NULL); -be_define_const_str(assert, "assert", 2774883451u, 0, 6, &be_const_str_chars_in_string); -be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, &be_const_str_lv_objmask); -be_define_const_str(lv_objmask, "lv_objmask", 1311221665u, 0, 10, NULL); -be_define_const_str(member, "member", 719708611u, 0, 6, NULL); -be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, NULL); -be_define_const_str(ADC_INPUT, "ADC_INPUT", 2207556878u, 0, 9, &be_const_str_byte); -be_define_const_str(byte, "byte", 1683620383u, 0, 4, &be_const_str_ceil); -be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, &be_const_str_log10); -be_define_const_str(log10, "log10", 2346846000u, 0, 5, &be_const_str_time_str); -be_define_const_str(time_str, "time_str", 2613827612u, 0, 8, NULL); -be_define_const_str(LED1_INV, "LED1_INV", 2112045097u, 0, 8, &be_const_str_SYMBOL_IMAGE); -be_define_const_str(SYMBOL_IMAGE, "SYMBOL_IMAGE", 815601151u, 0, 12, &be_const_str_lv_cpicker); -be_define_const_str(lv_cpicker, "lv_cpicker", 1935129251u, 0, 10, NULL); -be_define_const_str(ADC_TEMP, "ADC_TEMP", 3771053440u, 0, 8, &be_const_str_SYMBOL_EYE_CLOSE); -be_define_const_str(SYMBOL_EYE_CLOSE, "SYMBOL_EYE_CLOSE", 404721792u, 0, 16, NULL); -be_define_const_str(SAIR_RX, "SAIR_RX", 1273688713u, 0, 7, &be_const_str_SDS0X1_RX); -be_define_const_str(SDS0X1_RX, "SDS0X1_RX", 1170717385u, 0, 9, &be_const_str_SYMBOL_BATTERY_3); -be_define_const_str(SYMBOL_BATTERY_3, "SYMBOL_BATTERY_3", 662591301u, 0, 16, &be_const_str_find_op); -be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, NULL); -be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, &be_const_str_item); -be_define_const_str(item, "item", 2671260646u, 0, 4, &be_const_str_load); -be_define_const_str(load, "load", 3859241449u, 0, 4, &be_const_str_read); -be_define_const_str(read, "read", 3470762949u, 0, 4, &be_const_str_remove_cmd); -be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, NULL); -be_define_const_str(SYMBOL_FILE, "SYMBOL_FILE", 237085260u, 0, 11, &be_const_str_SYMBOL_PLAY); -be_define_const_str(SYMBOL_PLAY, "SYMBOL_PLAY", 1750902100u, 0, 11, NULL); -be_define_const_str(BUZZER, "BUZZER", 1550039611u, 0, 6, &be_const_str_MGC3130_RESET); -be_define_const_str(MGC3130_RESET, "MGC3130_RESET", 405013121u, 0, 13, NULL); -be_define_const_str(SYMBOL_EYE_OPEN, "SYMBOL_EYE_OPEN", 3449311676u, 0, 15, &be_const_str_sqrt); -be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, NULL); -be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_pin_used); -be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, NULL); -be_define_const_str(concat, "concat", 4124019837u, 0, 6, NULL); -be_define_const_str(lv_img, "lv_img", 2474052327u, 0, 6, NULL); -be_define_const_str(TM1637CLK, "TM1637CLK", 2797300857u, 0, 9, &be_const_str_set_power); -be_define_const_str(set_power, "set_power", 549820893u, 0, 9, NULL); -be_define_const_str(SI7021, "SI7021", 864377911u, 0, 6, &be_const_str_SYMBOL_PREV); -be_define_const_str(SYMBOL_PREV, "SYMBOL_PREV", 2952615023u, 0, 11, NULL); -be_define_const_str(PULLUP, "PULLUP", 3417628531u, 0, 6, &be_const_str_PWM1); -be_define_const_str(PWM1, "PWM1", 1353352426u, 0, 4, &be_const_str_WEBCAM_PSRCS); -be_define_const_str(WEBCAM_PSRCS, "WEBCAM_PSRCS", 624464864u, 0, 12, &be_const_str_lower); -be_define_const_str(lower, "lower", 3038577850u, 0, 5, &be_const_str_read_bytes); -be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, NULL); -be_define_const_str(CC1101_GDO0, "CC1101_GDO0", 940611027u, 0, 11, &be_const_str_P9813_CLK); -be_define_const_str(P9813_CLK, "P9813_CLK", 2455391001u, 0, 9, NULL); -be_define_const_str(DDS2382_RX, "DDS2382_RX", 432446462u, 0, 10, &be_const_str_SYMBOL_RIGHT); -be_define_const_str(SYMBOL_RIGHT, "SYMBOL_RIGHT", 2984010648u, 0, 12, &be_const_str_save_before_restart); -be_define_const_str(save_before_restart, "save_before_restart", 1253239338u, 0, 19, NULL); -be_define_const_str(PROJECTOR_CTRL_RX, "PROJECTOR_CTRL_RX", 1542762460u, 0, 17, NULL); -be_define_const_str(SYMBOL_SETTINGS, "SYMBOL_SETTINGS", 339656335u, 0, 15, NULL); -be_define_const_str(SYMBOL_CALL, "SYMBOL_CALL", 1444504366u, 0, 11, NULL); -be_define_const_str(save, "save", 3439296072u, 0, 4, NULL); -be_define_const_str(DHT11_OUT, "DHT11_OUT", 1645300734u, 0, 9, NULL); -be_define_const_str(CSE7761_TX, "CSE7761_TX", 3354719142u, 0, 10, &be_const_str_ILI9341_CS); -be_define_const_str(ILI9341_CS, "ILI9341_CS", 3519318851u, 0, 10, &be_const_str_WEBCAM_PCLK); -be_define_const_str(WEBCAM_PCLK, "WEBCAM_PCLK", 3813770649u, 0, 11, &be_const_str_set_timer); -be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, NULL); -be_define_const_str(Driver, "Driver", 3576386303u, 0, 6, NULL); -be_define_const_str(atan, "atan", 108579519u, 0, 4, NULL); -be_define_const_str(SYMBOL_LIST, "SYMBOL_LIST", 70793990u, 0, 11, &be_const_str_SYMBOL_UPLOAD); -be_define_const_str(SYMBOL_UPLOAD, "SYMBOL_UPLOAD", 3293679647u, 0, 13, &be_const_str_lv_obj); -be_define_const_str(lv_obj, "lv_obj", 4257833149u, 0, 6, NULL); -be_define_const_str(ST7789_CS, "ST7789_CS", 2937305434u, 0, 9, &be_const_str_add_driver); -be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, NULL); -be_define_const_str(ST7789_DC, "ST7789_DC", 2533509745u, 0, 9, &be_const_str_deinit); -be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_resize); -be_define_const_str(resize, "resize", 3514612129u, 0, 6, NULL); -be_define_const_str(ETH_PHY_MDIO, "ETH_PHY_MDIO", 3261871568u, 0, 12, &be_const_str_OUTPUT_LO); -be_define_const_str(OUTPUT_LO, "OUTPUT_LO", 3724620328u, 0, 9, &be_const_str_SYMBOL_VIDEO); -be_define_const_str(SYMBOL_VIDEO, "SYMBOL_VIDEO", 789726913u, 0, 12, &be_const_str_TXD); -be_define_const_str(TXD, "TXD", 3614562079u, 0, 3, &be_const_str_find); -be_define_const_str(find, "find", 3186656602u, 0, 4, &be_const_str_tolower); -be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, NULL); -be_define_const_str(MAX31855DO, "MAX31855DO", 552730368u, 0, 10, &be_const_str_resp_cmnd_str); -be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, &be_const_str_sinh); -be_define_const_str(sinh, "sinh", 282220607u, 0, 4, NULL); -be_define_const_str(lv_led, "lv_led", 3192184733u, 0, 6, &be_const_str_register_button_encoder); -be_define_const_str(register_button_encoder, "register_button_encoder", 2811301550u, 0, 23, NULL); -be_define_const_str(SBR_TX, "SBR_TX", 3419096015u, 0, 6, &be_const_str_start); -be_define_const_str(start, "start", 1697318111u, 0, 5, NULL); -be_define_const_str(CC1101_GDO2, "CC1101_GDO2", 974166265u, 0, 11, NULL); -be_define_const_str(SDCARD_CS, "SDCARD_CS", 3348952003u, 0, 9, &be_const_str_get_free_heap); -be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, NULL); -be_define_const_str(log, "log", 1062293841u, 0, 3, NULL); -be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, NULL); -be_define_const_str(CSE7766_TX, "CSE7766_TX", 674624821u, 0, 10, &be_const_str_GPS_RX); -be_define_const_str(GPS_RX, "GPS_RX", 1075637342u, 0, 6, &be_const_str_reverse); -be_define_const_str(reverse, "reverse", 558918661u, 0, 7, NULL); -be_define_const_str(DSB_OUT, "DSB_OUT", 732335085u, 0, 7, NULL); -be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, &be_const_str_every_second); -be_define_const_str(every_second, "every_second", 2075451465u, 0, 12, NULL); -be_define_const_str(MAX31855CS, "MAX31855CS", 753620511u, 0, 10, &be_const_str_SR04_TRIG); -be_define_const_str(SR04_TRIG, "SR04_TRIG", 68671263u, 0, 9, NULL); -be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL); -be_define_const_str(SSD1331_CS, "SSD1331_CS", 4191047928u, 0, 10, &be_const_str_lv_win); -be_define_const_str(lv_win, "lv_win", 780927558u, 0, 6, NULL); -be_define_const_str(WEBCAM_PWDN, "WEBCAM_PWDN", 2219597454u, 0, 11, NULL); -be_define_const_str(AS3935, "AS3935", 603621745u, 0, 6, &be_const_str_web_add_button); -be_define_const_str(web_add_button, "web_add_button", 3537875058u, 0, 14, NULL); -be_define_const_str(INPUT_PULLDOWN, "INPUT_PULLDOWN", 1172232591u, 0, 14, &be_const_str_MCP39F5_TX); -be_define_const_str(MCP39F5_TX, "MCP39F5_TX", 1332322047u, 0, 10, NULL); -be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, NULL); -be_define_const_str(CNTR1_NP, "CNTR1_NP", 4288381648u, 0, 8, &be_const_str_VL53L0X_XSHUT1); -be_define_const_str(VL53L0X_XSHUT1, "VL53L0X_XSHUT1", 2341134183u, 0, 14, &be_const_str_ZIGBEE_RX); -be_define_const_str(ZIGBEE_RX, "ZIGBEE_RX", 93215470u, 0, 9, NULL); -be_define_const_str(SYMBOL_WARNING, "SYMBOL_WARNING", 4119913686u, 0, 14, &be_const_str_WEBCAM_RESET); -be_define_const_str(WEBCAM_RESET, "WEBCAM_RESET", 2171221520u, 0, 12, &be_const_str_collect); -be_define_const_str(collect, "collect", 2399039025u, 0, 7, &be_const_str_digital_write); -be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, NULL); -be_define_const_str(A4988_MS1, "A4988_MS1", 1729976611u, 0, 9, &be_const_str_PZEM016_RX); -be_define_const_str(PZEM016_RX, "PZEM016_RX", 1004012055u, 0, 10, &be_const_str_top); -be_define_const_str(top, "top", 2802900028u, 0, 3, NULL); -be_define_const_str(SSD1331_DC, "SSD1331_DC", 3386560859u, 0, 10, &be_const_str_resolvecmnd); -be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, NULL); -be_define_const_str(SYMBOL_BATTERY_FULL, "SYMBOL_BATTERY_FULL", 2638935545u, 0, 19, &be_const_str_WE517_RX); -be_define_const_str(WE517_RX, "WE517_RX", 4096577879u, 0, 8, NULL); -be_define_const_str(RDM6300_RX, "RDM6300_RX", 1522345628u, 0, 10, &be_const_str_SYMBOL_REFRESH); -be_define_const_str(SYMBOL_REFRESH, "SYMBOL_REFRESH", 1266229761u, 0, 14, &be_const_str__rules); -be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, &be_const_str_print); -be_define_const_str(print, "print", 372738696u, 0, 5, NULL); -be_define_const_str(HPMA_TX, "HPMA_TX", 173233104u, 0, 7, &be_const_str_SYMBOL_LEFT); -be_define_const_str(SYMBOL_LEFT, "SYMBOL_LEFT", 1563517575u, 0, 11, &be_const_str_lv_arc); -be_define_const_str(lv_arc, "lv_arc", 4170125384u, 0, 6, NULL); -be_define_const_str(get_light, "get_light", 381930476u, 0, 9, &be_const_str_time_dump); -be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, NULL); -be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, &be_const_str_list); -be_define_const_str(list, "list", 217798785u, 0, 4, NULL); -be_define_const_str(AZ_RXD, "AZ_RXD", 699914019u, 0, 6, &be_const_str_SYMBOL_KEYBOARD); -be_define_const_str(SYMBOL_KEYBOARD, "SYMBOL_KEYBOARD", 1621492879u, 0, 15, &be_const_str_if); -be_define_const_str(if, "if", 959999494u, 50, 2, NULL); -be_define_const_str(type, "type", 1361572173u, 0, 4, NULL); -be_define_const_str(WE517_TX, "WE517_TX", 2954817217u, 0, 8, &be_const_str_millis); -be_define_const_str(millis, "millis", 1214679063u, 0, 6, NULL); -be_define_const_str(MAX7219CLK, "MAX7219CLK", 963568838u, 0, 10, &be_const_str_allocated); -be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_wire_scan); -be_define_const_str(wire_scan, "wire_scan", 2671275880u, 0, 9, NULL); -be_define_const_str(SYMBOL_SAVE, "SYMBOL_SAVE", 2439821015u, 0, 11, &be_const_str__write); -be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_nil); -be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL); -be_define_const_str(SYMBOL_WIFI, "SYMBOL_WIFI", 682141303u, 0, 11, &be_const_str_delay); -be_define_const_str(delay, "delay", 1322381784u, 0, 5, &be_const_str_web_send_decimal); -be_define_const_str(web_send_decimal, "web_send_decimal", 1407210204u, 0, 16, NULL); -be_define_const_str(NEOPOOL_RX, "NEOPOOL_RX", 1917974474u, 0, 10, &be_const_str_SHELLY_DIMMER_BOOT0); -be_define_const_str(SHELLY_DIMMER_BOOT0, "SHELLY_DIMMER_BOOT0", 2948777716u, 0, 19, &be_const_str__available); -be_define_const_str(_available, "_available", 1306196581u, 0, 10, NULL); -be_define_const_str(ILI9341_DC, "ILI9341_DC", 28838624u, 0, 10, &be_const_str_push); -be_define_const_str(push, "push", 2272264157u, 0, 4, &be_const_str_wire1); -be_define_const_str(wire1, "wire1", 3212721419u, 0, 5, NULL); -be_define_const_str(lv_switch, "lv_switch", 3407171508u, 0, 9, &be_const_str_remove); -be_define_const_str(remove, "remove", 3683784189u, 0, 6, &be_const_str_continue); -be_define_const_str(continue, "continue", 2977070660u, 59, 8, NULL); -be_define_const_str(TM1638CLK, "TM1638CLK", 3045182446u, 0, 9, NULL); -be_define_const_str(MCP39F5_RST, "MCP39F5_RST", 3657125652u, 0, 11, &be_const_str_try_rule); -be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, NULL); -be_define_const_str(lv_imgbtn, "lv_imgbtn", 2402844429u, 0, 9, NULL); -be_define_const_str(bus, "bus", 1607822841u, 0, 3, NULL); -be_define_const_str(WIEGAND_D1, "WIEGAND_D1", 4175558140u, 0, 10, &be_const_str_bytes); -be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, &be_const_str_cmd); -be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, &be_const_str_lv_bar); -be_define_const_str(lv_bar, "lv_bar", 1582673229u, 0, 6, &be_const_str_resp_cmnd_error); -be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, NULL); -be_define_const_str(SYMBOL_BLUETOOTH, "SYMBOL_BLUETOOTH", 679376572u, 0, 16, &be_const_str_real); -be_define_const_str(real, "real", 3604983901u, 0, 4, &be_const_str_wire2); -be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, NULL); -be_define_const_str(GPS_TX, "GPS_TX", 4228740808u, 0, 6, &be_const_str_HM10_TX); -be_define_const_str(HM10_TX, "HM10_TX", 1522037252u, 0, 7, &be_const_str_ZEROCROSS); -be_define_const_str(ZEROCROSS, "ZEROCROSS", 1747596785u, 0, 9, &be_const_str_get_ver_res); -be_define_const_str(get_ver_res, "get_ver_res", 4160557208u, 0, 11, NULL); -be_define_const_str(input, "input", 4191711099u, 0, 5, &be_const_str_rad); -be_define_const_str(rad, "rad", 1358899048u, 0, 3, &be_const_str_toupper); -be_define_const_str(toupper, "toupper", 3691983576u, 0, 7, NULL); -be_define_const_str(SPI_DC, "SPI_DC", 553259951u, 0, 6, &be_const_str__read); -be_define_const_str(_read, "_read", 346717030u, 0, 5, NULL); -be_define_const_str(CSE7766_RX, "CSE7766_RX", 1546766819u, 0, 10, &be_const_str_lv_checkbox); -be_define_const_str(lv_checkbox, "lv_checkbox", 7454841u, 0, 11, NULL); -be_define_const_str(TM1638STB, "TM1638STB", 823674593u, 0, 9, &be_const_str_event); -be_define_const_str(event, "event", 4264611999u, 0, 5, &be_const_str_lv_canvas); -be_define_const_str(lv_canvas, "lv_canvas", 142865412u, 0, 9, NULL); -be_define_const_str(SYMBOL_COPY, "SYMBOL_COPY", 4193681815u, 0, 11, &be_const_str_else); -be_define_const_str(else, "else", 3183434736u, 52, 4, NULL); -be_define_const_str(HX711_DAT, "HX711_DAT", 2935118250u, 0, 9, &be_const_str_WIEGAND_D0); -be_define_const_str(WIEGAND_D0, "WIEGAND_D0", 4192335759u, 0, 10, NULL); -be_define_const_str(OUTPUT_OPEN_DRAIN, "OUTPUT_OPEN_DRAIN", 2147249436u, 0, 17, &be_const_str_detect); -be_define_const_str(detect, "detect", 8884370u, 0, 6, NULL); -be_define_const_str(IBEACON_TX, "IBEACON_TX", 3471826977u, 0, 10, &be_const_str_classname); -be_define_const_str(classname, "classname", 1998589948u, 0, 9, &be_const_str_rand); -be_define_const_str(rand, "rand", 2711325910u, 0, 4, NULL); -be_define_const_str(BACKLIGHT, "BACKLIGHT", 3147761926u, 0, 9, NULL); -be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, &be_const_str_lv_color); -be_define_const_str(lv_color, "lv_color", 1419148319u, 0, 8, NULL); -be_define_const_str(ETH_PHY_POWER, "ETH_PHY_POWER", 487529454u, 0, 13, &be_const_str_HRE_DATA); -be_define_const_str(HRE_DATA, "HRE_DATA", 1820377643u, 0, 8, &be_const_str_SYMBOL_PLUS); -be_define_const_str(SYMBOL_PLUS, "SYMBOL_PLUS", 2860093262u, 0, 11, NULL); +be_define_const_str(HRXL_RX, "HRXL_RX", 92702006u, 0, 7, &be_const_str_SPI_CLK); +be_define_const_str(SPI_CLK, "SPI_CLK", 3943233814u, 0, 7, NULL); +be_define_const_str(Driver, "Driver", 3576386303u, 0, 6, &be_const_str_MHZ_RXD); +be_define_const_str(MHZ_RXD, "MHZ_RXD", 328619727u, 0, 7, &be_const_str_abs); +be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_dump); be_define_const_str(dump, "dump", 3663001223u, 0, 4, NULL); -be_define_const_str(imax, "imax", 3084515410u, 0, 4, NULL); -be_define_const_str(SWT1, "SWT1", 805224112u, 0, 4, NULL); -be_define_const_str(PMS5003_TX, "PMS5003_TX", 3868169364u, 0, 10, &be_const_str_TFMINIPLUS_RX); -be_define_const_str(TFMINIPLUS_RX, "TFMINIPLUS_RX", 1522203935u, 0, 13, NULL); -be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_lv_table); -be_define_const_str(lv_table, "lv_table", 1675691020u, 0, 8, NULL); -be_define_const_str(clear, "clear", 1550717474u, 0, 5, NULL); -be_define_const_str(HX711_SCK, "HX711_SCK", 3785979404u, 0, 9, NULL); -be_define_const_str(DDSU666_TX, "DDSU666_TX", 1880604150u, 0, 10, NULL); -be_define_const_str(A4988_DIR, "A4988_DIR", 2223595843u, 0, 9, &be_const_str_WS2812); -be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, &be_const_str_map); -be_define_const_str(map, "map", 3751997361u, 0, 3, NULL); -be_define_const_str(dot_p, ".p", 1171526419u, 0, 2, &be_const_str_FTC532); -be_define_const_str(FTC532, "FTC532", 3182343438u, 0, 6, &be_const_str_LMT01); -be_define_const_str(LMT01, "LMT01", 2490623797u, 0, 5, &be_const_str_init); -be_define_const_str(init, "init", 380752755u, 0, 4, NULL); -be_define_const_str(A4988_STP, "A4988_STP", 1622172049u, 0, 9, &be_const_str_ETH_PHY_MDC); -be_define_const_str(ETH_PHY_MDC, "ETH_PHY_MDC", 1519379581u, 0, 11, &be_const_str_floor); -be_define_const_str(floor, "floor", 3102149661u, 0, 5, NULL); -be_define_const_str(SPI_MOSI, "SPI_MOSI", 2494218614u, 0, 8, NULL); -be_define_const_str(copy, "copy", 3848464964u, 0, 4, &be_const_str_response_append); -be_define_const_str(response_append, "response_append", 450346371u, 0, 15, NULL); -be_define_const_str(lv_cont, "lv_cont", 1391686552u, 0, 7, NULL); -be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_IEM3000_TX); -be_define_const_str(IEM3000_TX, "IEM3000_TX", 1185907310u, 0, 10, &be_const_str_SYMBOL_NEXT); -be_define_const_str(SYMBOL_NEXT, "SYMBOL_NEXT", 1102844455u, 0, 11, &be_const_str_lv_calendar); -be_define_const_str(lv_calendar, "lv_calendar", 3284396894u, 0, 11, NULL); -be_define_const_str(SYMBOL_BULLET, "SYMBOL_BULLET", 587181862u, 0, 13, &be_const_str_keys); -be_define_const_str(keys, "keys", 4182378701u, 0, 4, NULL); -be_define_const_str(true, "true", 1303515621u, 61, 4, NULL); -be_define_const_str(hex, "hex", 4273249610u, 0, 3, NULL); -be_define_const_str(ILI9488_CS, "ILI9488_CS", 2363112073u, 0, 10, &be_const_str_NRG_CF1); -be_define_const_str(NRG_CF1, "NRG_CF1", 3292534757u, 0, 7, &be_const_str_SOLAXX1_TX); -be_define_const_str(SOLAXX1_TX, "SOLAXX1_TX", 903770840u, 0, 10, &be_const_str_WEBCAM_PSCLK); -be_define_const_str(WEBCAM_PSCLK, "WEBCAM_PSCLK", 3150007456u, 0, 12, NULL); -be_define_const_str(BS814_DAT, "BS814_DAT", 3620403837u, 0, 9, &be_const_str_OPTION_A); -be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, &be_const_str_count); -be_define_const_str(count, "count", 967958004u, 0, 5, NULL); -be_define_const_str(BOILER_OT_TX, "BOILER_OT_TX", 671743623u, 0, 12, &be_const_str_PULLDOWN); -be_define_const_str(PULLDOWN, "PULLDOWN", 1853074086u, 0, 8, &be_const_str_SYMBOL_BATTERY_EMPTY); -be_define_const_str(SYMBOL_BATTERY_EMPTY, "SYMBOL_BATTERY_EMPTY", 3945064277u, 0, 20, &be_const_str_exp); -be_define_const_str(exp, "exp", 1923516200u, 0, 3, NULL); -be_define_const_str(SR04_ECHO, "SR04_ECHO", 1906909592u, 0, 9, &be_const_str_tostring); -be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, NULL); -be_define_const_str(TASMOTACLIENT_RST, "TASMOTACLIENT_RST", 3326196213u, 0, 17, &be_const_str_get_power); -be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, NULL); -be_define_const_str(SAIR_TX, "SAIR_TX", 268017311u, 0, 7, &be_const_str_SDS0X1_TX); -be_define_const_str(SDS0X1_TX, "SDS0X1_TX", 165045983u, 0, 9, &be_const_str_yield); +be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, &be_const_str_load_freetype_font); +be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, NULL); +be_define_const_str(read, "read", 3470762949u, 0, 4, NULL); +be_define_const_str(DEEPSLEEP, "DEEPSLEEP", 189922226u, 0, 9, NULL); +be_define_const_str(WEBCAM_HSD, "WEBCAM_HSD", 2648502504u, 0, 10, &be_const_str_deinit); +be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_print); +be_define_const_str(print, "print", 372738696u, 0, 5, NULL); +be_define_const_str(list, "list", 217798785u, 0, 4, NULL); +be_define_const_str(IBEACON_RX, "IBEACON_RX", 2466155575u, 0, 10, &be_const_str_sqrt); +be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, NULL); +be_define_const_str(ADC_JOY, "ADC_JOY", 1116943612u, 0, 7, &be_const_str_OUTPUT_LO); +be_define_const_str(OUTPUT_LO, "OUTPUT_LO", 3724620328u, 0, 9, NULL); +be_define_const_str(pow, "pow", 1479764693u, 0, 3, NULL); +be_define_const_str(KEY1_INV_NP, "KEY1_INV_NP", 3160558586u, 0, 11, &be_const_str_WEBCAM_PWDN); +be_define_const_str(WEBCAM_PWDN, "WEBCAM_PWDN", 2219597454u, 0, 11, &be_const_str_XPT2046_CS); +be_define_const_str(XPT2046_CS, "XPT2046_CS", 4049231042u, 0, 10, &be_const_str_lower); +be_define_const_str(lower, "lower", 3038577850u, 0, 5, &be_const_str_yield); be_define_const_str(yield, "yield", 1821831854u, 0, 5, NULL); -be_define_const_str(HPMA_RX, "HPMA_RX", 3462528998u, 0, 7, &be_const_str_MGC3130_XFER); -be_define_const_str(MGC3130_XFER, "MGC3130_XFER", 4178219131u, 0, 12, &be_const_str_TM1638DIO); -be_define_const_str(TM1638DIO, "TM1638DIO", 1408212414u, 0, 9, NULL); -be_define_const_str(LE01MR_TX, "LE01MR_TX", 1589687023u, 0, 9, NULL); -be_define_const_str(SSPI_MISO, "SSPI_MISO", 2485347173u, 0, 9, NULL); -be_define_const_str(KEY1_INV, "KEY1_INV", 263542563u, 0, 8, &be_const_str_SM16716_DAT); -be_define_const_str(SM16716_DAT, "SM16716_DAT", 1905621806u, 0, 11, &be_const_str_SM16716_SEL); -be_define_const_str(SM16716_SEL, "SM16716_SEL", 142377379u, 0, 11, &be_const_str_TASMOTACLIENT_RXD); -be_define_const_str(TASMOTACLIENT_RXD, "TASMOTACLIENT_RXD", 72868318u, 0, 17, &be_const_str_gamma10); -be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, NULL); -be_define_const_str(ZIGBEE_RST, "ZIGBEE_RST", 721588661u, 0, 10, NULL); -be_define_const_str(SM2135_DAT, "SM2135_DAT", 2882726942u, 0, 10, &be_const_str_SSPI_MOSI); -be_define_const_str(SSPI_MOSI, "SSPI_MOSI", 3745917497u, 0, 9, &be_const_str_TASMOTACLIENT_TXD); -be_define_const_str(TASMOTACLIENT_TXD, "TASMOTACLIENT_TXD", 1386193940u, 0, 17, &be_const_str_char); -be_define_const_str(char, "char", 2823553821u, 0, 4, &be_const_str_codedump); -be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, NULL); -be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, NULL); -be_define_const_str(pin, "pin", 1866532500u, 0, 3, NULL); -be_define_const_str(as, "as", 1579491469u, 67, 2, NULL); -be_define_const_str(KEY1_INV_NP, "KEY1_INV_NP", 3160558586u, 0, 11, NULL); -be_define_const_str(opt_eq, "==", 2431966415u, 0, 2, &be_const_str_EXS_ENABLE); -be_define_const_str(EXS_ENABLE, "EXS_ENABLE", 1896914313u, 0, 10, &be_const_str_RC522_RST); -be_define_const_str(RC522_RST, "RC522_RST", 720511443u, 0, 9, &be_const_str_lv_style); -be_define_const_str(lv_style, "lv_style", 4151611549u, 0, 8, &be_const_str_number); -be_define_const_str(number, "number", 467038368u, 0, 6, NULL); -be_define_const_str(lv_line, "lv_line", 2692732914u, 0, 7, NULL); -be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_web_add_main_button); -be_define_const_str(web_add_main_button, "web_add_main_button", 3960367664u, 0, 19, NULL); -be_define_const_str(HRXL_RX, "HRXL_RX", 92702006u, 0, 7, &be_const_str_OUTPUT); -be_define_const_str(OUTPUT, "OUTPUT", 1469629700u, 0, 6, &be_const_str_SYMBOL_DIRECTORY); -be_define_const_str(SYMBOL_DIRECTORY, "SYMBOL_DIRECTORY", 1886053449u, 0, 16, &be_const_str_TUYA_RX); -be_define_const_str(TUYA_RX, "TUYA_RX", 1609397679u, 0, 7, &be_const_str_abs); -be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_pi); -be_define_const_str(pi, "pi", 1213090802u, 0, 2, NULL); -be_define_const_str(HJL_CF, "HJL_CF", 786158487u, 0, 6, &be_const_str_INPUT); -be_define_const_str(INPUT, "INPUT", 1638025307u, 0, 5, &be_const_str___iterator__); -be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, NULL); -be_define_const_str(DHT22, "DHT22", 215937903u, 0, 5, &be_const_str_DI); -be_define_const_str(DI, "DI", 1070498734u, 0, 2, NULL); -be_define_const_str(CNTR1, "CNTR1", 510376965u, 0, 5, &be_const_str_lv_keyboard); +be_define_const_str(BOILER_OT_TX, "BOILER_OT_TX", 671743623u, 0, 12, &be_const_str_SR04_TRIG); +be_define_const_str(SR04_TRIG, "SR04_TRIG", 68671263u, 0, 9, &be_const_str_input); +be_define_const_str(input, "input", 4191711099u, 0, 5, &be_const_str_load_font); +be_define_const_str(load_font, "load_font", 1875840019u, 0, 9, NULL); +be_define_const_str(CNTR1_NP, "CNTR1_NP", 4288381648u, 0, 8, &be_const_str_log10); +be_define_const_str(log10, "log10", 2346846000u, 0, 5, NULL); +be_define_const_str(MAX7219DIN, "MAX7219DIN", 380687049u, 0, 10, &be_const_str_lv_led); +be_define_const_str(lv_led, "lv_led", 3192184733u, 0, 6, NULL); +be_define_const_str(I2C_SDA, "I2C_SDA", 1052592262u, 0, 7, &be_const_str_TM1638CLK); +be_define_const_str(TM1638CLK, "TM1638CLK", 3045182446u, 0, 9, &be_const_str_calldepth); +be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, NULL); +be_define_const_str(CHANGE, "CHANGE", 4280911421u, 0, 6, NULL); +be_define_const_str(SYMBOL_CLOSE, "SYMBOL_CLOSE", 2654402806u, 0, 12, NULL); +be_define_const_str(HALLEFFECT, "HALLEFFECT", 3334305407u, 0, 10, NULL); +be_define_const_str(SYMBOL_RIGHT, "SYMBOL_RIGHT", 2984010648u, 0, 12, &be_const_str__timers); +be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, NULL); +be_define_const_str(LEDLNK_INV, "LEDLNK_INV", 3559015101u, 0, 10, &be_const_str_SSPI_MOSI); +be_define_const_str(SSPI_MOSI, "SSPI_MOSI", 3745917497u, 0, 9, &be_const_str_SYMBOL_BATTERY_EMPTY); +be_define_const_str(SYMBOL_BATTERY_EMPTY, "SYMBOL_BATTERY_EMPTY", 3945064277u, 0, 20, &be_const_str_lv_btnmatrix); +be_define_const_str(lv_btnmatrix, "lv_btnmatrix", 626248489u, 0, 12, &be_const_str_lv_keyboard); be_define_const_str(lv_keyboard, "lv_keyboard", 197530229u, 0, 11, NULL); -be_define_const_str(opt_connect, "..", 2748622605u, 0, 2, &be_const_str_EPD_DATA); -be_define_const_str(EPD_DATA, "EPD_DATA", 3799141097u, 0, 8, &be_const_str_lv_msgbox); -be_define_const_str(lv_msgbox, "lv_msgbox", 689085206u, 0, 9, NULL); -be_define_const_str(PROJECTOR_CTRL_TX, "PROJECTOR_CTRL_TX", 535811130u, 0, 17, &be_const_str_split); -be_define_const_str(split, "split", 2276994531u, 0, 5, &be_const_str_web_sensor); -be_define_const_str(web_sensor, "web_sensor", 2900096972u, 0, 10, NULL); -be_define_const_str(NRG_SEL, "NRG_SEL", 1771358125u, 0, 7, &be_const_str_SYMBOL_AUDIO); -be_define_const_str(SYMBOL_AUDIO, "SYMBOL_AUDIO", 3056537956u, 0, 12, &be_const_str__ccmd); -be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_false); -be_define_const_str(false, "false", 184981848u, 62, 5, NULL); -be_define_const_str(MCP39F5_RX, "MCP39F5_RX", 190458217u, 0, 10, NULL); -be_define_const_str(SYMBOL_DRIVE, "SYMBOL_DRIVE", 567203502u, 0, 12, &be_const_str_get_tasmota); -be_define_const_str(get_tasmota, "get_tasmota", 334356779u, 0, 11, &be_const_str_write); -be_define_const_str(write, "write", 3190202204u, 0, 5, NULL); -be_define_const_str(OLED_RESET, "OLED_RESET", 4048987655u, 0, 10, NULL); -be_define_const_str(SSPI_MAX31865_CS1, "SSPI_MAX31865_CS1", 1256578724u, 0, 17, &be_const_str_every_100ms); -be_define_const_str(every_100ms, "every_100ms", 1546407804u, 0, 11, NULL); -be_define_const_str(HLW_CF, "HLW_CF", 3982619486u, 0, 6, &be_const_str_SYMBOL_STOP); -be_define_const_str(SYMBOL_STOP, "SYMBOL_STOP", 2836505202u, 0, 11, &be_const_str_WEBCAM_HREF); -be_define_const_str(WEBCAM_HREF, "WEBCAM_HREF", 3161890024u, 0, 11, NULL); -be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, &be_const_str_except); -be_define_const_str(except, "except", 950914032u, 69, 6, NULL); -be_define_const_str(layer_sys, "layer_sys", 593658256u, 0, 9, NULL); -be_define_const_str(SYMBOL_PASTE, "SYMBOL_PASTE", 2281577421u, 0, 12, NULL); -be_define_const_str(TX2X_TXD_BLACK, "TX2X_TXD_BLACK", 956526176u, 0, 14, &be_const_str_do); -be_define_const_str(do, "do", 1646057492u, 65, 2, NULL); -be_define_const_str(SM2135_CLK, "SM2135_CLK", 2383410011u, 0, 10, &be_const_str_find_key_i); -be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, &be_const_str_load_font); -be_define_const_str(load_font, "load_font", 1875840019u, 0, 9, &be_const_str_write_bytes); -be_define_const_str(write_bytes, "write_bytes", 1227543792u, 0, 11, NULL); -be_define_const_str(A4988_ENA, "A4988_ENA", 1517502682u, 0, 9, &be_const_str_MIEL_HVAC_RX); -be_define_const_str(MIEL_HVAC_RX, "MIEL_HVAC_RX", 3720609648u, 0, 12, &be_const_str_SYMBOL_SHUFFLE); -be_define_const_str(SYMBOL_SHUFFLE, "SYMBOL_SHUFFLE", 1123310147u, 0, 14, NULL); -be_define_const_str(ADC_LIGHT, "ADC_LIGHT", 3982461502u, 0, 9, &be_const_str_SHELLY_DIMMER_RST_INV); -be_define_const_str(SHELLY_DIMMER_RST_INV, "SHELLY_DIMMER_RST_INV", 2366759773u, 0, 21, &be_const_str__cmd); -be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, &be_const_str_return); -be_define_const_str(return, "return", 2246981567u, 60, 6, NULL); -be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, NULL); -be_define_const_str(AZ_TXD, "AZ_TXD", 850268709u, 0, 6, NULL); -be_define_const_str(DHT11, "DHT11", 367083569u, 0, 5, &be_const_str_exec_cmd); -be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, &be_const_str_get); -be_define_const_str(get, "get", 1410115415u, 0, 3, &be_const_str_lv_tileview); -be_define_const_str(lv_tileview, "lv_tileview", 2419887973u, 0, 11, NULL); -be_define_const_str(MHZ_RXD, "MHZ_RXD", 328619727u, 0, 7, &be_const_str_SBR_RX); -be_define_const_str(SBR_RX, "SBR_RX", 3350999801u, 0, 6, NULL); -be_define_const_str(SDM72_RX, "SDM72_RX", 766750035u, 0, 8, &be_const_str_lv_font); -be_define_const_str(lv_font, "lv_font", 1550958453u, 0, 7, &be_const_str_seg7_font); -be_define_const_str(seg7_font, "seg7_font", 4099690689u, 0, 9, NULL); -be_define_const_str(DSB, "DSB", 98073254u, 0, 3, NULL); -be_define_const_str(SSD1351_CS, "SSD1351_CS", 488746042u, 0, 10, &be_const_str___upper__); -be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, NULL); -be_define_const_str(json_append, "json_append", 3002019284u, 0, 11, &be_const_str_srand); -be_define_const_str(srand, "srand", 465518633u, 0, 5, NULL); -be_define_const_str(OPEN_DRAIN, "OPEN_DRAIN", 677872608u, 0, 10, &be_const_str_PN532_RXD); -be_define_const_str(PN532_RXD, "PN532_RXD", 1780093022u, 0, 9, &be_const_str_SDM630_TX); -be_define_const_str(SDM630_TX, "SDM630_TX", 696213075u, 0, 9, &be_const_str_SSD1351_DC); -be_define_const_str(SSD1351_DC, "SSD1351_DC", 84950353u, 0, 10, &be_const_str_end); -be_define_const_str(end, "end", 1787721130u, 56, 3, NULL); -be_define_const_str(AS608_TX, "AS608_TX", 48630934u, 0, 8, &be_const_str_SYMBOL_DOWN); -be_define_const_str(SYMBOL_DOWN, "SYMBOL_DOWN", 1107513570u, 0, 11, &be_const_str_Wire); +be_define_const_str(SYMBOL_BULLET, "SYMBOL_BULLET", 587181862u, 0, 13, NULL); +be_define_const_str(SYMBOL_BELL, "SYMBOL_BELL", 1736196487u, 0, 11, NULL); +be_define_const_str(ROT1B_NP, "ROT1B_NP", 3710079736u, 0, 8, &be_const_str_WEBCAM_HREF); +be_define_const_str(WEBCAM_HREF, "WEBCAM_HREF", 3161890024u, 0, 11, &be_const_str_tan); +be_define_const_str(tan, "tan", 2633446552u, 0, 3, &be_const_str_time_str); +be_define_const_str(time_str, "time_str", 2613827612u, 0, 8, NULL); +be_define_const_str(MAX7219CLK, "MAX7219CLK", 963568838u, 0, 10, NULL); +be_define_const_str(SSD1331_DC, "SSD1331_DC", 3386560859u, 0, 10, NULL); +be_define_const_str(toupper, "toupper", 3691983576u, 0, 7, NULL); +be_define_const_str(SYMBOL_VOLUME_MID, "SYMBOL_VOLUME_MID", 158835057u, 0, 17, &be_const_str_lv_bar); +be_define_const_str(lv_bar, "lv_bar", 1582673229u, 0, 6, &be_const_str_lv_obj); +be_define_const_str(lv_obj, "lv_obj", 4257833149u, 0, 6, &be_const_str_lv_spinbox); +be_define_const_str(lv_spinbox, "lv_spinbox", 2666096729u, 0, 10, NULL); +be_define_const_str(PZEM017_RX, "PZEM017_RX", 3227495894u, 0, 10, &be_const_str_SM16716_DAT); +be_define_const_str(SM16716_DAT, "SM16716_DAT", 1905621806u, 0, 11, NULL); +be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, NULL); +be_define_const_str(RDM6300_RX, "RDM6300_RX", 1522345628u, 0, 10, &be_const_str_Wire); be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, NULL); -be_define_const_str(NONE, "NONE", 1932136219u, 0, 4, &be_const_str_PN532_TXD); -be_define_const_str(PN532_TXD, "PN532_TXD", 3093418644u, 0, 9, &be_const_str_PZEM017_RX); -be_define_const_str(PZEM017_RX, "PZEM017_RX", 3227495894u, 0, 10, &be_const_str_SSPI_DC); -be_define_const_str(SSPI_DC, "SSPI_DC", 1782271864u, 0, 7, &be_const_str_SYMBOL_PAUSE); -be_define_const_str(SYMBOL_PAUSE, "SYMBOL_PAUSE", 641998172u, 0, 12, NULL); -be_define_const_str(PWM1_INV, "PWM1_INV", 3939021030u, 0, 8, &be_const_str_SYMBOL_NEW_LINE); -be_define_const_str(SYMBOL_NEW_LINE, "SYMBOL_NEW_LINE", 2014334315u, 0, 15, &be_const_str_tan); -be_define_const_str(tan, "tan", 2633446552u, 0, 3, NULL); -be_define_const_str(HIGH, "HIGH", 2066738941u, 0, 4, &be_const_str_SYMBOL_HOME); -be_define_const_str(SYMBOL_HOME, "SYMBOL_HOME", 730845525u, 0, 11, NULL); -be_define_const_str(ADC_RANGE, "ADC_RANGE", 3467329543u, 0, 9, &be_const_str_issubclass); -be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, NULL); -be_define_const_str(XPT2046_CS, "XPT2046_CS", 4049231042u, 0, 10, NULL); -be_define_const_str(WEBCAM_SIOC, "WEBCAM_SIOC", 218815147u, 0, 11, &be_const_str_for); -be_define_const_str(for, "for", 2901640080u, 54, 3, &be_const_str_import); -be_define_const_str(import, "import", 288002260u, 66, 6, NULL); -be_define_const_str(WEBCAM_HSD, "WEBCAM_HSD", 2648502504u, 0, 10, &be_const_str_digital_read); -be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, &be_const_str_imin); -be_define_const_str(imin, "imin", 2714127864u, 0, 4, NULL); -be_define_const_str(SSPI_CS, "SSPI_CS", 977784795u, 0, 7, NULL); -be_define_const_str(ADC_CT_POWER, "ADC_CT_POWER", 3382284599u, 0, 12, &be_const_str_SYMBOL_MUTE); -be_define_const_str(SYMBOL_MUTE, "SYMBOL_MUTE", 563116043u, 0, 11, &be_const_str_add); -be_define_const_str(add, "add", 993596020u, 0, 3, NULL); -be_define_const_str(ROT1A, "ROT1A", 759599716u, 0, 5, &be_const_str_ZIGBEE_TX); -be_define_const_str(ZIGBEE_TX, "ZIGBEE_TX", 25119256u, 0, 9, NULL); -be_define_const_str(DDS2382_TX, "DDS2382_TX", 1438117864u, 0, 10, &be_const_str_SYMBOL_UP); -be_define_const_str(SYMBOL_UP, "SYMBOL_UP", 3886401511u, 0, 9, &be_const_str_TELEINFO_ENABLE); -be_define_const_str(TELEINFO_ENABLE, "TELEINFO_ENABLE", 1600974501u, 0, 15, NULL); -be_define_const_str(HALLEFFECT, "HALLEFFECT", 3334305407u, 0, 10, &be_const_str_RXD); -be_define_const_str(RXD, "RXD", 2311579049u, 0, 3, &be_const_str_add_cmd); -be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, &be_const_str_scale_uint); +be_define_const_str(LOW, "LOW", 3526092385u, 0, 3, NULL); +be_define_const_str(ADC_BUTTON_INV, "ADC_BUTTON_INV", 2027625326u, 0, 14, &be_const_str_PN532_RXD); +be_define_const_str(PN532_RXD, "PN532_RXD", 1780093022u, 0, 9, NULL); +be_define_const_str(ELECTRIQ_MOODL_TX, "ELECTRIQ_MOODL_TX", 31009247u, 0, 17, &be_const_str_SM16716_CLK); +be_define_const_str(SM16716_CLK, "SM16716_CLK", 3037641483u, 0, 11, NULL); +be_define_const_str(SSPI_DC, "SSPI_DC", 1782271864u, 0, 7, &be_const_str_cosh); +be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, NULL); +be_define_const_str(collect, "collect", 2399039025u, 0, 7, &be_const_str_lv_objmask); +be_define_const_str(lv_objmask, "lv_objmask", 1311221665u, 0, 10, &be_const_str_map); +be_define_const_str(map, "map", 3751997361u, 0, 3, NULL); +be_define_const_str(register_button_encoder, "register_button_encoder", 2811301550u, 0, 23, NULL); +be_define_const_str(BL0940_RX, "BL0940_RX", 2908993179u, 0, 9, NULL); +be_define_const_str(WEBCAM_PSCLK, "WEBCAM_PSCLK", 3150007456u, 0, 12, NULL); +be_define_const_str(RFRECV, "RFRECV", 354742801u, 0, 6, NULL); +be_define_const_str(GPS_RX, "GPS_RX", 1075637342u, 0, 6, &be_const_str_NEOPOOL_RX); +be_define_const_str(NEOPOOL_RX, "NEOPOOL_RX", 1917974474u, 0, 10, &be_const_str_pin_mode); +be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, NULL); +be_define_const_str(SYMBOL_UP, "SYMBOL_UP", 3886401511u, 0, 9, NULL); +be_define_const_str(HPMA_TX, "HPMA_TX", 173233104u, 0, 7, &be_const_str_classname); +be_define_const_str(classname, "classname", 1998589948u, 0, 9, &be_const_str_lv_list); +be_define_const_str(lv_list, "lv_list", 2876551248u, 0, 7, NULL); +be_define_const_str(SHELLY_DIMMER_RST_INV, "SHELLY_DIMMER_RST_INV", 2366759773u, 0, 21, &be_const_str_lv_slider); +be_define_const_str(lv_slider, "lv_slider", 2274180781u, 0, 9, &be_const_str_tolower); +be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, &be_const_str_type); +be_define_const_str(type, "type", 1361572173u, 0, 4, NULL); +be_define_const_str(int, "int", 2515107422u, 0, 3, &be_const_str_resp_cmnd_str); +be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, &be_const_str_save_before_restart); +be_define_const_str(save_before_restart, "save_before_restart", 1253239338u, 0, 19, NULL); +be_define_const_str(HJL_CF, "HJL_CF", 786158487u, 0, 6, &be_const_str_lv_page); +be_define_const_str(lv_page, "lv_page", 2373170067u, 0, 7, NULL); +be_define_const_str(top, "top", 2802900028u, 0, 3, NULL); +be_define_const_str(DDS2382_RX, "DDS2382_RX", 432446462u, 0, 10, NULL); +be_define_const_str(INPUT_PULLDOWN, "INPUT_PULLDOWN", 1172232591u, 0, 14, &be_const_str_class); +be_define_const_str(class, "class", 2872970239u, 57, 5, NULL); +be_define_const_str(SYMBOL_BLUETOOTH, "SYMBOL_BLUETOOTH", 679376572u, 0, 16, &be_const_str_lv_chart); +be_define_const_str(lv_chart, "lv_chart", 2652494144u, 0, 8, NULL); +be_define_const_str(SYMBOL_VIDEO, "SYMBOL_VIDEO", 789726913u, 0, 12, NULL); +be_define_const_str(pi, "pi", 1213090802u, 0, 2, &be_const_str_scale_uint); be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, NULL); -be_define_const_str(SPI_CS, "SPI_CS", 553701236u, 0, 6, NULL); -be_define_const_str(NRF24_CS, "NRF24_CS", 555833194u, 0, 8, NULL); +be_define_const_str(REL1_INV, "REL1_INV", 3733155371u, 0, 8, &be_const_str_SDS0X1_TX); +be_define_const_str(SDS0X1_TX, "SDS0X1_TX", 165045983u, 0, 9, &be_const_str_TUYA_RX); +be_define_const_str(TUYA_RX, "TUYA_RX", 1609397679u, 0, 7, &be_const_str_digital_write); +be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, &be_const_str_raise); +be_define_const_str(raise, "raise", 1593437475u, 70, 5, NULL); +be_define_const_str(for, "for", 2901640080u, 54, 3, NULL); +be_define_const_str(DYP_RX, "DYP_RX", 2122310285u, 0, 6, NULL); +be_define_const_str(SYMBOL_DOWNLOAD, "SYMBOL_DOWNLOAD", 2607324090u, 0, 15, &be_const_str_clear); +be_define_const_str(clear, "clear", 1550717474u, 0, 5, &be_const_str_hex); +be_define_const_str(hex, "hex", 4273249610u, 0, 3, &be_const_str_montserrat_font); +be_define_const_str(montserrat_font, "montserrat_font", 1819065874u, 0, 15, &be_const_str_end); +be_define_const_str(end, "end", 1787721130u, 56, 3, NULL); +be_define_const_str(dot_p, ".p", 1171526419u, 0, 2, &be_const_str_SYMBOL_PREV); +be_define_const_str(SYMBOL_PREV, "SYMBOL_PREV", 2952615023u, 0, 11, &be_const_str_init); +be_define_const_str(init, "init", 380752755u, 0, 4, NULL); +be_define_const_str(BS814_CLK, "BS814_CLK", 3002713336u, 0, 9, &be_const_str_MCP39F5_RST); +be_define_const_str(MCP39F5_RST, "MCP39F5_RST", 3657125652u, 0, 11, NULL); +be_define_const_str(NRG_SEL, "NRG_SEL", 1771358125u, 0, 7, NULL); +be_define_const_str(ADE7953_IRQ, "ADE7953_IRQ", 2329185922u, 0, 11, NULL); +be_define_const_str(REL1, "REL1", 3142397887u, 0, 4, &be_const_str_SYMBOL_NEXT); +be_define_const_str(SYMBOL_NEXT, "SYMBOL_NEXT", 1102844455u, 0, 11, &be_const_str_split); +be_define_const_str(split, "split", 2276994531u, 0, 5, NULL); +be_define_const_str(NEOPOOL_TX, "NEOPOOL_TX", 2924925804u, 0, 10, &be_const_str_OPTION_A); +be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, &be_const_str_P9813_DAT); +be_define_const_str(P9813_DAT, "P9813_DAT", 778577052u, 0, 9, &be_const_str_SOLAXX1_TX); +be_define_const_str(SOLAXX1_TX, "SOLAXX1_TX", 903770840u, 0, 10, &be_const_str_chars_in_string); +be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, &be_const_str_exp); +be_define_const_str(exp, "exp", 1923516200u, 0, 3, NULL); +be_define_const_str(true, "true", 1303515621u, 61, 4, NULL); +be_define_const_str(DI, "DI", 1070498734u, 0, 2, &be_const_str_PROJECTOR_CTRL_TX); +be_define_const_str(PROJECTOR_CTRL_TX, "PROJECTOR_CTRL_TX", 535811130u, 0, 17, &be_const_str_SSD1351_CS); +be_define_const_str(SSD1351_CS, "SSD1351_CS", 488746042u, 0, 10, &be_const_str_SYMBOL_WARNING); +be_define_const_str(SYMBOL_WARNING, "SYMBOL_WARNING", 4119913686u, 0, 14, &be_const_str__read); +be_define_const_str(_read, "_read", 346717030u, 0, 5, NULL); +be_define_const_str(PULLUP, "PULLUP", 3417628531u, 0, 6, &be_const_str_SYMBOL_MUTE); +be_define_const_str(SYMBOL_MUTE, "SYMBOL_MUTE", 563116043u, 0, 11, &be_const_str_upper); +be_define_const_str(upper, "upper", 176974407u, 0, 5, NULL); +be_define_const_str(lv_btn, "lv_btn", 1612829968u, 0, 6, &be_const_str_lv_cont); +be_define_const_str(lv_cont, "lv_cont", 1391686552u, 0, 7, NULL); +be_define_const_str(IBEACON_TX, "IBEACON_TX", 3471826977u, 0, 10, NULL); +be_define_const_str(IEM3000_TX, "IEM3000_TX", 1185907310u, 0, 10, &be_const_str_PMS5003_RX); +be_define_const_str(PMS5003_RX, "PMS5003_RX", 3934985650u, 0, 10, NULL); +be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, NULL); +be_define_const_str(web_add_main_button, "web_add_main_button", 3960367664u, 0, 19, &be_const_str_write_bytes); +be_define_const_str(write_bytes, "write_bytes", 1227543792u, 0, 11, NULL); +be_define_const_str(LED1_INV, "LED1_INV", 2112045097u, 0, 8, NULL); +be_define_const_str(lv_calendar, "lv_calendar", 3284396894u, 0, 11, NULL); +be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, NULL); +be_define_const_str(ROT1A, "ROT1A", 759599716u, 0, 5, &be_const_str_SR04_ECHO); +be_define_const_str(SR04_ECHO, "SR04_ECHO", 1906909592u, 0, 9, &be_const_str_save); +be_define_const_str(save, "save", 3439296072u, 0, 4, &be_const_str_import); +be_define_const_str(import, "import", 288002260u, 66, 6, NULL); +be_define_const_str(floor, "floor", 3102149661u, 0, 5, &be_const_str_module); +be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_read_bytes); +be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, NULL); +be_define_const_str(EPAPER29_CS, "EPAPER29_CS", 3916373594u, 0, 11, NULL); +be_define_const_str(VL53L0X_XSHUT1, "VL53L0X_XSHUT1", 2341134183u, 0, 14, NULL); +be_define_const_str(DDSU666_RX, "DDSU666_RX", 1812507936u, 0, 10, &be_const_str_pin_used); +be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, &be_const_str_wire_scan); +be_define_const_str(wire_scan, "wire_scan", 2671275880u, 0, 9, NULL); +be_define_const_str(seg7_font, "seg7_font", 4099690689u, 0, 9, NULL); +be_define_const_str(BACKLIGHT, "BACKLIGHT", 3147761926u, 0, 9, &be_const_str_HPMA_RX); +be_define_const_str(HPMA_RX, "HPMA_RX", 3462528998u, 0, 7, &be_const_str_SYMBOL_DOWN); +be_define_const_str(SYMBOL_DOWN, "SYMBOL_DOWN", 1107513570u, 0, 11, NULL); +be_define_const_str(MP3_DFR562, "MP3_DFR562", 2859952977u, 0, 10, &be_const_str__write); +be_define_const_str(_write, "_write", 2215462825u, 0, 6, NULL); +be_define_const_str(SYMBOL_MINUS, "SYMBOL_MINUS", 1806749158u, 0, 12, &be_const_str_web_add_button); +be_define_const_str(web_add_button, "web_add_button", 3537875058u, 0, 14, NULL); +be_define_const_str(event, "event", 4264611999u, 0, 5, &be_const_str_resp_cmnd_done); +be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, NULL); +be_define_const_str(PROJECTOR_CTRL_RX, "PROJECTOR_CTRL_RX", 1542762460u, 0, 17, &be_const_str_RC522_CS); +be_define_const_str(RC522_CS, "RC522_CS", 2639619996u, 0, 8, &be_const_str_SYMBOL_USB); +be_define_const_str(SYMBOL_USB, "SYMBOL_USB", 1962656552u, 0, 10, &be_const_str_lv_arc); +be_define_const_str(lv_arc, "lv_arc", 4170125384u, 0, 6, &be_const_str_scan); +be_define_const_str(scan, "scan", 3974641896u, 0, 4, &be_const_str_web_send_decimal); +be_define_const_str(web_send_decimal, "web_send_decimal", 1407210204u, 0, 16, NULL); +be_define_const_str(TASMOTACLIENT_RST_INV, "TASMOTACLIENT_RST_INV", 2601785365u, 0, 21, NULL); +be_define_const_str(WE517_RX, "WE517_RX", 4096577879u, 0, 8, NULL); +be_define_const_str(insert, "insert", 3332609576u, 0, 6, &be_const_str_web_sensor); +be_define_const_str(web_sensor, "web_sensor", 2900096972u, 0, 10, NULL); +be_define_const_str(ILI9488_CS, "ILI9488_CS", 2363112073u, 0, 10, &be_const_str_resize); +be_define_const_str(resize, "resize", 3514612129u, 0, 6, NULL); +be_define_const_str(ADC_BUTTON, "ADC_BUTTON", 3393454690u, 0, 10, &be_const_str_I2C_SCL); +be_define_const_str(I2C_SCL, "I2C_SCL", 164217098u, 0, 7, &be_const_str_classof); +be_define_const_str(classof, "classof", 1796577762u, 0, 7, NULL); +be_define_const_str(SYMBOL_WIFI, "SYMBOL_WIFI", 682141303u, 0, 11, &be_const_str_gc); +be_define_const_str(gc, "gc", 1042313471u, 0, 2, NULL); +be_define_const_str(SYMBOL_AUDIO, "SYMBOL_AUDIO", 3056537956u, 0, 12, &be_const_str_SYMBOL_TRASH); +be_define_const_str(SYMBOL_TRASH, "SYMBOL_TRASH", 3169100368u, 0, 12, &be_const_str_every_100ms); +be_define_const_str(every_100ms, "every_100ms", 1546407804u, 0, 11, &be_const_str_run_deferred); +be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, NULL); +be_define_const_str(LMT01, "LMT01", 2490623797u, 0, 5, &be_const_str_WE517_TX); +be_define_const_str(WE517_TX, "WE517_TX", 2954817217u, 0, 8, NULL); +be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, NULL); +be_define_const_str(SYMBOL_SETTINGS, "SYMBOL_SETTINGS", 339656335u, 0, 15, NULL); +be_define_const_str(SPI_CS, "SPI_CS", 553701236u, 0, 6, &be_const_str_delay); +be_define_const_str(delay, "delay", 1322381784u, 0, 5, NULL); +be_define_const_str(remove, "remove", 3683784189u, 0, 6, &be_const_str_reverse); +be_define_const_str(reverse, "reverse", 558918661u, 0, 7, NULL); +be_define_const_str(HM10_RX, "HM10_RX", 515085922u, 0, 7, &be_const_str_SYMBOL_EDIT); +be_define_const_str(SYMBOL_EDIT, "SYMBOL_EDIT", 1396182822u, 0, 11, NULL); +be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, NULL); +be_define_const_str(OPEN_DRAIN, "OPEN_DRAIN", 677872608u, 0, 10, &be_const_str_publish); +be_define_const_str(publish, "publish", 264247304u, 0, 7, &be_const_str_break); +be_define_const_str(break, "break", 3378807160u, 58, 5, NULL); +be_define_const_str(lv_font, "lv_font", 1550958453u, 0, 7, &be_const_str_tostring); +be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, NULL); +be_define_const_str(SSPI_SCLK, "SSPI_SCLK", 136688954u, 0, 9, NULL); +be_define_const_str(A4988_DIR, "A4988_DIR", 2223595843u, 0, 9, NULL); +be_define_const_str(SYMBOL_SD_CARD, "SYMBOL_SD_CARD", 2542376484u, 0, 14, &be_const_str_set_light); +be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, NULL); +be_define_const_str(SYMBOL_BATTERY_FULL, "SYMBOL_BATTERY_FULL", 2638935545u, 0, 19, &be_const_str_lv_imgbtn); +be_define_const_str(lv_imgbtn, "lv_imgbtn", 2402844429u, 0, 9, NULL); +be_define_const_str(MIEL_HVAC_TX, "MIEL_HVAC_TX", 567403014u, 0, 12, &be_const_str_SYMBOL_CUT); +be_define_const_str(SYMBOL_CUT, "SYMBOL_CUT", 3455112394u, 0, 10, NULL); +be_define_const_str(SYMBOL_UPLOAD, "SYMBOL_UPLOAD", 3293679647u, 0, 13, &be_const_str_TFMINIPLUS_RX); +be_define_const_str(TFMINIPLUS_RX, "TFMINIPLUS_RX", 1522203935u, 0, 13, &be_const_str_WEBCAM_SIOC); +be_define_const_str(WEBCAM_SIOC, "WEBCAM_SIOC", 218815147u, 0, 11, NULL); +be_define_const_str(DDS2382_TX, "DDS2382_TX", 1438117864u, 0, 10, &be_const_str_RF_SENSOR); +be_define_const_str(RF_SENSOR, "RF_SENSOR", 2289628100u, 0, 9, &be_const_str_lv_table); +be_define_const_str(lv_table, "lv_table", 1675691020u, 0, 8, &be_const_str_setrange); +be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, &be_const_str_tanh); +be_define_const_str(tanh, "tanh", 153638352u, 0, 4, NULL); +be_define_const_str(AZ_TXD, "AZ_TXD", 850268709u, 0, 6, &be_const_str_SYMBOL_VOLUME_MAX); +be_define_const_str(SYMBOL_VOLUME_MAX, "SYMBOL_VOLUME_MAX", 3582646093u, 0, 17, NULL); +be_define_const_str(A4988_ENA, "A4988_ENA", 1517502682u, 0, 9, &be_const_str_SYMBOL_CHARGE); +be_define_const_str(SYMBOL_CHARGE, "SYMBOL_CHARGE", 2106391946u, 0, 13, NULL); +be_define_const_str(opt_neq, "!=", 2428715011u, 0, 2, &be_const_str_DHT22); +be_define_const_str(DHT22, "DHT22", 215937903u, 0, 5, NULL); +be_define_const_str(SYMBOL_OK, "SYMBOL_OK", 4033162940u, 0, 9, &be_const_str_TASMOTACLIENT_TXD); +be_define_const_str(TASMOTACLIENT_TXD, "TASMOTACLIENT_TXD", 1386193940u, 0, 17, NULL); +be_define_const_str(NRG_CF1, "NRG_CF1", 3292534757u, 0, 7, &be_const_str_SDS0X1_RX); +be_define_const_str(SDS0X1_RX, "SDS0X1_RX", 1170717385u, 0, 9, &be_const_str_SENSOR_END); +be_define_const_str(SENSOR_END, "SENSOR_END", 3512542657u, 0, 10, &be_const_str_TELEINFO_ENABLE); +be_define_const_str(TELEINFO_ENABLE, "TELEINFO_ENABLE", 1600974501u, 0, 15, NULL); +be_define_const_str(opt_add, "+", 772578730u, 0, 1, &be_const_str_NRF24_CS); +be_define_const_str(NRF24_CS, "NRF24_CS", 555833194u, 0, 8, &be_const_str_lv_msgbox); +be_define_const_str(lv_msgbox, "lv_msgbox", 689085206u, 0, 9, &be_const_str_remove_cmd); +be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, &be_const_str_var); +be_define_const_str(var, "var", 2317739966u, 64, 3, NULL); +be_define_const_str(HRE_CLOCK, "HRE_CLOCK", 2870559111u, 0, 9, &be_const_str___iterator__); +be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, &be_const_str_atan); +be_define_const_str(atan, "atan", 108579519u, 0, 4, &be_const_str_elif); +be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL); +be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, NULL); +be_define_const_str(HIGH, "HIGH", 2066738941u, 0, 4, &be_const_str_ROT1B); +be_define_const_str(ROT1B, "ROT1B", 809932573u, 0, 5, &be_const_str_real); +be_define_const_str(real, "real", 3604983901u, 0, 4, NULL); +be_define_const_str(HLW_CF, "HLW_CF", 3982619486u, 0, 6, &be_const_str_KEY1_NP); +be_define_const_str(KEY1_NP, "KEY1_NP", 709918726u, 0, 7, &be_const_str_item); +be_define_const_str(item, "item", 2671260646u, 0, 4, &be_const_str_lv_tabview); +be_define_const_str(lv_tabview, "lv_tabview", 2109024786u, 0, 10, NULL); +be_define_const_str(AZ_RXD, "AZ_RXD", 699914019u, 0, 6, &be_const_str_SYMBOL_COPY); +be_define_const_str(SYMBOL_COPY, "SYMBOL_COPY", 4193681815u, 0, 11, NULL); +be_define_const_str(HM10_TX, "HM10_TX", 1522037252u, 0, 7, &be_const_str_PZEM0XX_TX); +be_define_const_str(PZEM0XX_TX, "PZEM0XX_TX", 944775704u, 0, 10, &be_const_str_number); +be_define_const_str(number, "number", 467038368u, 0, 6, NULL); +be_define_const_str(EXS_ENABLE, "EXS_ENABLE", 1896914313u, 0, 10, &be_const_str_LEDLNK); +be_define_const_str(LEDLNK, "LEDLNK", 2862810701u, 0, 6, &be_const_str_SSPI_MISO); +be_define_const_str(SSPI_MISO, "SSPI_MISO", 2485347173u, 0, 9, NULL); +be_define_const_str(PWM1, "PWM1", 1353352426u, 0, 4, NULL); +be_define_const_str(SYMBOL_BATTERY_1, "SYMBOL_BATTERY_1", 629036063u, 0, 16, &be_const_str_wire1); +be_define_const_str(wire1, "wire1", 3212721419u, 0, 5, NULL); +be_define_const_str(SYMBOL_FILE, "SYMBOL_FILE", 237085260u, 0, 11, &be_const_str_json_append); +be_define_const_str(json_append, "json_append", 3002019284u, 0, 11, &be_const_str_def); +be_define_const_str(def, "def", 3310976652u, 55, 3, NULL); +be_define_const_str(opt_connect, "..", 2748622605u, 0, 2, &be_const_str_WEBCAM_PCLK); +be_define_const_str(WEBCAM_PCLK, "WEBCAM_PCLK", 3813770649u, 0, 11, &be_const_str_set_power); +be_define_const_str(set_power, "set_power", 549820893u, 0, 9, NULL); +be_define_const_str(NONE, "NONE", 1932136219u, 0, 4, NULL); +be_define_const_str(DCKI, "DCKI", 3846847480u, 0, 4, &be_const_str_pin); +be_define_const_str(pin, "pin", 1866532500u, 0, 3, NULL); +be_define_const_str(range, "range", 4208725202u, 0, 5, NULL); +be_define_const_str(TX2X_TXD_BLACK, "TX2X_TXD_BLACK", 956526176u, 0, 14, &be_const_str_lv_switch); +be_define_const_str(lv_switch, "lv_switch", 3407171508u, 0, 9, NULL); +be_define_const_str(ZEROCROSS, "ZEROCROSS", 1747596785u, 0, 9, NULL); +be_define_const_str(ADC_INPUT, "ADC_INPUT", 2207556878u, 0, 9, &be_const_str_compile); +be_define_const_str(compile, "compile", 1000265118u, 0, 7, NULL); +be_define_const_str(RC522_RST, "RC522_RST", 720511443u, 0, 9, &be_const_str_lv_cpicker); +be_define_const_str(lv_cpicker, "lv_cpicker", 1935129251u, 0, 10, &be_const_str_lv_img); +be_define_const_str(lv_img, "lv_img", 2474052327u, 0, 6, &be_const_str_start); +be_define_const_str(start, "start", 1697318111u, 0, 5, NULL); +be_define_const_str(SSD1331_CS, "SSD1331_CS", 4191047928u, 0, 10, &be_const_str_ceil); +be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, &be_const_str_nil); +be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL); +be_define_const_str(BS814_DAT, "BS814_DAT", 3620403837u, 0, 9, &be_const_str_SYMBOL_HOME); +be_define_const_str(SYMBOL_HOME, "SYMBOL_HOME", 730845525u, 0, 11, &be_const_str__rules); +be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, &be_const_str_lv_spinner); +be_define_const_str(lv_spinner, "lv_spinner", 3361501901u, 0, 10, NULL); +be_define_const_str(PULLDOWN, "PULLDOWN", 1853074086u, 0, 8, &be_const_str_SYMBOL_BATTERY_2); +be_define_const_str(SYMBOL_BATTERY_2, "SYMBOL_BATTERY_2", 645813682u, 0, 16, &be_const_str_wire2); +be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, &be_const_str_while); +be_define_const_str(while, "while", 231090382u, 53, 5, NULL); +be_define_const_str(opt_eq, "==", 2431966415u, 0, 2, &be_const_str_deg); +be_define_const_str(deg, "deg", 3327754271u, 0, 3, &be_const_str_lv_color); +be_define_const_str(lv_color, "lv_color", 1419148319u, 0, 8, NULL); +be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, NULL); +be_define_const_str(PZEM004_RX, "PZEM004_RX", 3411153194u, 0, 10, NULL); +be_define_const_str(SDCARD_CS, "SDCARD_CS", 3348952003u, 0, 9, &be_const_str_SYMBOL_KEYBOARD); +be_define_const_str(SYMBOL_KEYBOARD, "SYMBOL_KEYBOARD", 1621492879u, 0, 15, &be_const_str_millis); +be_define_const_str(millis, "millis", 1214679063u, 0, 6, NULL); +be_define_const_str(ETH_PHY_MDIO, "ETH_PHY_MDIO", 3261871568u, 0, 12, &be_const_str_SYMBOL_PAUSE); +be_define_const_str(SYMBOL_PAUSE, "SYMBOL_PAUSE", 641998172u, 0, 12, &be_const_str_ZIGBEE_TX); +be_define_const_str(ZIGBEE_TX, "ZIGBEE_TX", 25119256u, 0, 9, &be_const_str_write); +be_define_const_str(write, "write", 3190202204u, 0, 5, &be_const_str_do); +be_define_const_str(do, "do", 1646057492u, 65, 2, NULL); +be_define_const_str(SDM72_TX, "SDM72_TX", 2042143269u, 0, 8, &be_const_str_ST7789_DC); +be_define_const_str(ST7789_DC, "ST7789_DC", 2533509745u, 0, 9, &be_const_str_lv_checkbox); +be_define_const_str(lv_checkbox, "lv_checkbox", 7454841u, 0, 11, NULL); +be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, NULL); +be_define_const_str(return, "return", 2246981567u, 60, 6, NULL); +be_define_const_str(SSPI_MAX31865_CS1, "SSPI_MAX31865_CS1", 1256578724u, 0, 17, &be_const_str_SWT1); +be_define_const_str(SWT1, "SWT1", 805224112u, 0, 4, &be_const_str_bytes); +be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, NULL); +be_define_const_str(SYMBOL_PASTE, "SYMBOL_PASTE", 2281577421u, 0, 12, &be_const_str_char); +be_define_const_str(char, "char", 2823553821u, 0, 4, NULL); +be_define_const_str(SAIR_TX, "SAIR_TX", 268017311u, 0, 7, &be_const_str_SDM72_RX); +be_define_const_str(SDM72_RX, "SDM72_RX", 766750035u, 0, 8, NULL); +be_define_const_str(CSE7761_RX, "CSE7761_RX", 65423248u, 0, 10, &be_const_str_IRSEND); +be_define_const_str(IRSEND, "IRSEND", 184848336u, 0, 6, &be_const_str_count); +be_define_const_str(count, "count", 967958004u, 0, 5, NULL); +be_define_const_str(DSB_OUT, "DSB_OUT", 732335085u, 0, 7, &be_const_str_SBR_RX); +be_define_const_str(SBR_RX, "SBR_RX", 3350999801u, 0, 6, &be_const_str_SYMBOL_BATTERY_3); +be_define_const_str(SYMBOL_BATTERY_3, "SYMBOL_BATTERY_3", 662591301u, 0, 16, &be_const_str_push); +be_define_const_str(push, "push", 2272264157u, 0, 4, NULL); +be_define_const_str(SOLAXX1_RX, "SOLAXX1_RX", 971867054u, 0, 10, NULL); +be_define_const_str(A4988_MS1, "A4988_MS1", 1729976611u, 0, 9, &be_const_str_KEY1); +be_define_const_str(KEY1, "KEY1", 6715975u, 0, 4, &be_const_str_byte); +be_define_const_str(byte, "byte", 1683620383u, 0, 4, NULL); +be_define_const_str(FALLING, "FALLING", 2851701064u, 0, 7, &be_const_str_GPS_TX); +be_define_const_str(GPS_TX, "GPS_TX", 4228740808u, 0, 6, &be_const_str__request_from); +be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, &be_const_str_str); +be_define_const_str(str, "str", 3259748752u, 0, 3, &be_const_str_continue); +be_define_const_str(continue, "continue", 2977070660u, 59, 8, NULL); +be_define_const_str(EPD_DATA, "EPD_DATA", 3799141097u, 0, 8, NULL); +be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, NULL); +be_define_const_str(WINDMETER_SPEED, "WINDMETER_SPEED", 1980822204u, 0, 15, &be_const_str_setitem); +be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, NULL); +be_define_const_str(SYMBOL_STOP, "SYMBOL_STOP", 2836505202u, 0, 11, &be_const_str_detect); +be_define_const_str(detect, "detect", 8884370u, 0, 6, NULL); +be_define_const_str(BUZZER_INV, "BUZZER_INV", 3274564335u, 0, 10, &be_const_str_CC1101_GDO0); +be_define_const_str(CC1101_GDO0, "CC1101_GDO0", 940611027u, 0, 11, &be_const_str_PZEM016_RX); +be_define_const_str(PZEM016_RX, "PZEM016_RX", 1004012055u, 0, 10, &be_const_str_RISING); +be_define_const_str(RISING, "RISING", 1256404539u, 0, 6, NULL); +be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, NULL); +be_define_const_str(LE01MR_RX, "LE01MR_RX", 1521590809u, 0, 9, &be_const_str_try_rule); +be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, NULL); +be_define_const_str(ADC_PH, "ADC_PH", 3820290594u, 0, 6, NULL); +be_define_const_str(SDM120_TX, "SDM120_TX", 2509332415u, 0, 9, NULL); +be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, &be_const_str_pop); +be_define_const_str(pop, "pop", 1362321360u, 0, 3, NULL); +be_define_const_str(CNTR1, "CNTR1", 510376965u, 0, 5, &be_const_str_TFMINIPLUS_TX); +be_define_const_str(TFMINIPLUS_TX, "TFMINIPLUS_TX", 2527875337u, 0, 13, &be_const_str_TM1638STB); +be_define_const_str(TM1638STB, "TM1638STB", 823674593u, 0, 9, &be_const_str__drivers); +be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, &be_const_str_load); +be_define_const_str(load, "load", 3859241449u, 0, 4, &be_const_str_time_reached); +be_define_const_str(time_reached, "time_reached", 2075136773u, 0, 12, NULL); +be_define_const_str(DDSU666_TX, "DDSU666_TX", 1880604150u, 0, 10, &be_const_str_PWM1_INV); +be_define_const_str(PWM1_INV, "PWM1_INV", 3939021030u, 0, 8, &be_const_str_SYMBOL_CALL); +be_define_const_str(SYMBOL_CALL, "SYMBOL_CALL", 1444504366u, 0, 11, &be_const_str_if); +be_define_const_str(if, "if", 959999494u, 50, 2, NULL); +be_define_const_str(RFSEND, "RFSEND", 1862630731u, 0, 6, &be_const_str_SWT1_NP); +be_define_const_str(SWT1_NP, "SWT1_NP", 4033043739u, 0, 7, NULL); +be_define_const_str(button_pressed, "button_pressed", 1694209616u, 0, 14, NULL); +be_define_const_str(SDM120_RX, "SDM120_RX", 1367571753u, 0, 9, &be_const_str_keys); +be_define_const_str(keys, "keys", 4182378701u, 0, 4, &be_const_str_set_timer); +be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, NULL); +be_define_const_str(SYMBOL_LIST, "SYMBOL_LIST", 70793990u, 0, 11, NULL); +be_define_const_str(MAX31855CLK, "MAX31855CLK", 715977727u, 0, 11, &be_const_str_get); +be_define_const_str(get, "get", 1410115415u, 0, 3, NULL); +be_define_const_str(SYMBOL_LOOP, "SYMBOL_LOOP", 2762053208u, 0, 11, &be_const_str_except); +be_define_const_str(except, "except", 950914032u, 69, 6, NULL); +be_define_const_str(MHZ_TXD, "MHZ_TXD", 3310158233u, 0, 7, &be_const_str_get_power); +be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, NULL); +be_define_const_str(OUTPUT_HI, "OUTPUT_HI", 3153592902u, 0, 9, &be_const_str_isinstance); +be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, NULL); +be_define_const_str(BOILER_OT_RX, "BOILER_OT_RX", 603647409u, 0, 12, &be_const_str_TM1637DIO); +be_define_const_str(TM1637DIO, "TM1637DIO", 1574659381u, 0, 9, &be_const_str_resolvecmnd); +be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, NULL); +be_define_const_str(AS608_TX, "AS608_TX", 48630934u, 0, 8, &be_const_str_TASMOTACLIENT_RXD); +be_define_const_str(TASMOTACLIENT_RXD, "TASMOTACLIENT_RXD", 72868318u, 0, 17, &be_const_str_WEBCAM_SIOD); +be_define_const_str(WEBCAM_SIOD, "WEBCAM_SIOD", 302703242u, 0, 11, &be_const_str_find); +be_define_const_str(find, "find", 3186656602u, 0, 4, NULL); +be_define_const_str(SI7021, "SI7021", 864377911u, 0, 6, &be_const_str_gamma10); +be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, NULL); +be_define_const_str(get_light, "get_light", 381930476u, 0, 9, NULL); +be_define_const_str(P9813_CLK, "P9813_CLK", 2455391001u, 0, 9, &be_const_str_concat); +be_define_const_str(concat, "concat", 4124019837u, 0, 6, NULL); +be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_rand); +be_define_const_str(rand, "rand", 2711325910u, 0, 4, NULL); +be_define_const_str(INPUT, "INPUT", 1638025307u, 0, 5, &be_const_str_SSPI_CS); +be_define_const_str(SSPI_CS, "SSPI_CS", 977784795u, 0, 7, &be_const_str_assert); +be_define_const_str(assert, "assert", 2774883451u, 0, 6, &be_const_str_issubclass); +be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, NULL); +be_define_const_str(AS608_RX, "AS608_RX", 4275502016u, 0, 8, NULL); +be_define_const_str(lv_tileview, "lv_tileview", 2419887973u, 0, 11, NULL); +be_define_const_str(CSE7761_TX, "CSE7761_TX", 3354719142u, 0, 10, &be_const_str_allocated); +be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_asin); +be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_try); +be_define_const_str(try, "try", 2887626766u, 68, 3, NULL); +be_define_const_str(MAX31855DO, "MAX31855DO", 552730368u, 0, 10, &be_const_str__end_transmission); +be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, NULL); +be_define_const_str(CC1101_GDO2, "CC1101_GDO2", 974166265u, 0, 11, NULL); +be_define_const_str(ETH_PHY_POWER, "ETH_PHY_POWER", 487529454u, 0, 13, &be_const_str_SYMBOL_GPS); +be_define_const_str(SYMBOL_GPS, "SYMBOL_GPS", 3044165570u, 0, 10, NULL); +be_define_const_str(ILI9341_CS, "ILI9341_CS", 3519318851u, 0, 10, &be_const_str_SYMBOL_POWER); +be_define_const_str(SYMBOL_POWER, "SYMBOL_POWER", 1125993627u, 0, 12, &be_const_str_SYMBOL_SAVE); +be_define_const_str(SYMBOL_SAVE, "SYMBOL_SAVE", 2439821015u, 0, 11, NULL); +be_define_const_str(OUTPUT_OPEN_DRAIN, "OUTPUT_OPEN_DRAIN", 2147249436u, 0, 17, NULL); +be_define_const_str(TM1637CLK, "TM1637CLK", 2797300857u, 0, 9, NULL); +be_define_const_str(HX711_DAT, "HX711_DAT", 2935118250u, 0, 9, &be_const_str_SPI_MISO); +be_define_const_str(SPI_MISO, "SPI_MISO", 150818010u, 0, 8, NULL); +be_define_const_str(KEY1_INV, "KEY1_INV", 263542563u, 0, 8, &be_const_str_SYMBOL_SHUFFLE); +be_define_const_str(SYMBOL_SHUFFLE, "SYMBOL_SHUFFLE", 1123310147u, 0, 14, &be_const_str_time_dump); +be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, NULL); +be_define_const_str(PMS5003_TX, "PMS5003_TX", 3868169364u, 0, 10, &be_const_str_WEBCAM_PSRCS); +be_define_const_str(WEBCAM_PSRCS, "WEBCAM_PSRCS", 624464864u, 0, 12, &be_const_str_imin); +be_define_const_str(imin, "imin", 2714127864u, 0, 4, &be_const_str_false); +be_define_const_str(false, "false", 184981848u, 62, 5, NULL); +be_define_const_str(A4988_STP, "A4988_STP", 1622172049u, 0, 9, NULL); +be_define_const_str(SYMBOL_PLUS, "SYMBOL_PLUS", 2860093262u, 0, 11, &be_const_str_WEBCAM_VSYNC); +be_define_const_str(WEBCAM_VSYNC, "WEBCAM_VSYNC", 4032882166u, 0, 12, &be_const_str_gamma8); +be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, NULL); +be_define_const_str(SYMBOL_PLAY, "SYMBOL_PLAY", 1750902100u, 0, 11, &be_const_str__begin_transmission); +be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, NULL); +be_define_const_str(CSE7766_TX, "CSE7766_TX", 674624821u, 0, 10, &be_const_str_ETH_PHY_MDC); +be_define_const_str(ETH_PHY_MDC, "ETH_PHY_MDC", 1519379581u, 0, 11, &be_const_str_get_option); +be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, &be_const_str_screenshot); +be_define_const_str(screenshot, "screenshot", 3894592561u, 0, 10, NULL); +be_define_const_str(lv_win, "lv_win", 780927558u, 0, 6, NULL); +be_define_const_str(ADC_RANGE, "ADC_RANGE", 3467329543u, 0, 9, &be_const_str_ROT1A_NP); +be_define_const_str(ROT1A_NP, "ROT1A_NP", 2322706903u, 0, 8, &be_const_str_SPI_DC); +be_define_const_str(SPI_DC, "SPI_DC", 553259951u, 0, 6, &be_const_str_SYMBOL_LEFT); +be_define_const_str(SYMBOL_LEFT, "SYMBOL_LEFT", 1563517575u, 0, 11, &be_const_str_acos); +be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_add_cmd); +be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, &be_const_str_lv_gauge); +be_define_const_str(lv_gauge, "lv_gauge", 118613531u, 0, 8, NULL); +be_define_const_str(ILI9341_DC, "ILI9341_DC", 28838624u, 0, 10, NULL); +be_define_const_str(DHT11, "DHT11", 367083569u, 0, 5, NULL); +be_define_const_str(FTC532, "FTC532", 3182343438u, 0, 6, &be_const_str_SM2135_DAT); +be_define_const_str(SM2135_DAT, "SM2135_DAT", 2882726942u, 0, 10, NULL); +be_define_const_str(SYMBOL_NEW_LINE, "SYMBOL_NEW_LINE", 2014334315u, 0, 15, NULL); +be_define_const_str(HX711_SCK, "HX711_SCK", 3785979404u, 0, 9, &be_const_str_MIEL_HVAC_RX); +be_define_const_str(MIEL_HVAC_RX, "MIEL_HVAC_RX", 3720609648u, 0, 12, &be_const_str_WIEGAND_D1); +be_define_const_str(WIEGAND_D1, "WIEGAND_D1", 4175558140u, 0, 10, &be_const_str_lv_roller); +be_define_const_str(lv_roller, "lv_roller", 661902064u, 0, 9, &be_const_str_else); +be_define_const_str(else, "else", 3183434736u, 52, 4, NULL); +be_define_const_str(SAIR_RX, "SAIR_RX", 1273688713u, 0, 7, &be_const_str_srand); +be_define_const_str(srand, "srand", 465518633u, 0, 5, NULL); +be_define_const_str(ARIRFSEL, "ARIRFSEL", 233874443u, 0, 8, &be_const_str_MAX31855CS); +be_define_const_str(MAX31855CS, "MAX31855CS", 753620511u, 0, 10, &be_const_str_resp_cmnd_error); +be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, NULL); +be_define_const_str(WEBCAM_RESET, "WEBCAM_RESET", 2171221520u, 0, 12, &be_const_str_add); +be_define_const_str(add, "add", 993596020u, 0, 3, &be_const_str_cos); +be_define_const_str(cos, "cos", 4220379804u, 0, 3, &be_const_str_rad); +be_define_const_str(rad, "rad", 1358899048u, 0, 3, NULL); +be_define_const_str(_available, "_available", 1306196581u, 0, 10, &be_const_str_get_free_heap); +be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, NULL); +be_define_const_str(DHT11_OUT, "DHT11_OUT", 1645300734u, 0, 9, &be_const_str_lv_textarea); +be_define_const_str(lv_textarea, "lv_textarea", 2864635074u, 0, 11, NULL); +be_define_const_str(MAX7219CS, "MAX7219CS", 2593198244u, 0, 9, &be_const_str_super); +be_define_const_str(super, "super", 4152230356u, 0, 5, NULL); +be_define_const_str(imax, "imax", 3084515410u, 0, 4, &be_const_str_resp_cmnd_failed); +be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, NULL); +be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, NULL); +be_define_const_str(SYMBOL_DIRECTORY, "SYMBOL_DIRECTORY", 1886053449u, 0, 16, &be_const_str_TUYA_TX); +be_define_const_str(TUYA_TX, "TUYA_TX", 1541301465u, 0, 7, &be_const_str_lv_style); +be_define_const_str(lv_style, "lv_style", 4151611549u, 0, 8, NULL); +be_define_const_str(SPI_MOSI, "SPI_MOSI", 2494218614u, 0, 8, &be_const_str_format); +be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_lv_line); +be_define_const_str(lv_line, "lv_line", 2692732914u, 0, 7, NULL); +be_define_const_str(SM16716_SEL, "SM16716_SEL", 142377379u, 0, 11, &be_const_str_SYMBOL_IMAGE); +be_define_const_str(SYMBOL_IMAGE, "SYMBOL_IMAGE", 815601151u, 0, 12, &be_const_str_TCP_RX); +be_define_const_str(TCP_RX, "TCP_RX", 3904354751u, 0, 6, &be_const_str_WIEGAND_D0); +be_define_const_str(WIEGAND_D0, "WIEGAND_D0", 4192335759u, 0, 10, &be_const_str_lv_linemeter); +be_define_const_str(lv_linemeter, "lv_linemeter", 1413069363u, 0, 12, NULL); +be_define_const_str(PN532_TXD, "PN532_TXD", 3093418644u, 0, 9, &be_const_str_digital_read); +be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, NULL); +be_define_const_str(every_second, "every_second", 2075451465u, 0, 12, &be_const_str_as); +be_define_const_str(as, "as", 1579491469u, 67, 2, NULL); +be_define_const_str(SYMBOL_DUMMY, "SYMBOL_DUMMY", 3621732138u, 0, 12, NULL); +be_define_const_str(BUZZER, "BUZZER", 1550039611u, 0, 6, &be_const_str_HRE_DATA); +be_define_const_str(HRE_DATA, "HRE_DATA", 1820377643u, 0, 8, &be_const_str_MGC3130_XFER); +be_define_const_str(MGC3130_XFER, "MGC3130_XFER", 4178219131u, 0, 12, &be_const_str_OLED_RESET); +be_define_const_str(OLED_RESET, "OLED_RESET", 4048987655u, 0, 10, &be_const_str_member); +be_define_const_str(member, "member", 719708611u, 0, 6, NULL); +be_define_const_str(copy, "copy", 3848464964u, 0, 4, &be_const_str_lv_canvas); +be_define_const_str(lv_canvas, "lv_canvas", 142865412u, 0, 9, NULL); +be_define_const_str(TASMOTACLIENT_RST, "TASMOTACLIENT_RST", 3326196213u, 0, 17, &be_const_str_TCP_TX); +be_define_const_str(TCP_TX, "TCP_TX", 2762594089u, 0, 6, &be_const_str_sin); +be_define_const_str(sin, "sin", 3761252941u, 0, 3, NULL); +be_define_const_str(ST7789_CS, "ST7789_CS", 2937305434u, 0, 9, &be_const_str_lv_indev); +be_define_const_str(lv_indev, "lv_indev", 225602374u, 0, 8, &be_const_str_resp_cmnd); +be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, NULL); +be_define_const_str(response_append, "response_append", 450346371u, 0, 15, NULL); +be_define_const_str(ARIRFRCV, "ARIRFRCV", 1120816444u, 0, 8, &be_const_str_OUTPUT); +be_define_const_str(OUTPUT, "OUTPUT", 1469629700u, 0, 6, NULL); +be_define_const_str(NRF24_DC, "NRF24_DC", 688921313u, 0, 8, &be_const_str_SYMBOL_REFRESH); +be_define_const_str(SYMBOL_REFRESH, "SYMBOL_REFRESH", 1266229761u, 0, 14, &be_const_str_traceback); +be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, NULL); +be_define_const_str(IRRECV, "IRRECV", 1743648982u, 0, 6, &be_const_str_ZIGBEE_RX); +be_define_const_str(ZIGBEE_RX, "ZIGBEE_RX", 93215470u, 0, 9, NULL); +be_define_const_str(ADC_CT_POWER, "ADC_CT_POWER", 3382284599u, 0, 12, &be_const_str_MCP39F5_TX); +be_define_const_str(MCP39F5_TX, "MCP39F5_TX", 1332322047u, 0, 10, &be_const_str_SYMBOL_EJECT); +be_define_const_str(SYMBOL_EJECT, "SYMBOL_EJECT", 873760647u, 0, 12, &be_const_str_get_tasmota); +be_define_const_str(get_tasmota, "get_tasmota", 334356779u, 0, 11, &be_const_str_lv_group); +be_define_const_str(lv_group, "lv_group", 3852039019u, 0, 8, NULL); +be_define_const_str(ADC_TEMP, "ADC_TEMP", 3771053440u, 0, 8, &be_const_str_IEM3000_RX); +be_define_const_str(IEM3000_RX, "IEM3000_RX", 1117811096u, 0, 10, &be_const_str_SHELLY_DIMMER_BOOT0); +be_define_const_str(SHELLY_DIMMER_BOOT0, "SHELLY_DIMMER_BOOT0", 2948777716u, 0, 19, &be_const_str_TELEINFO_RX); +be_define_const_str(TELEINFO_RX, "TELEINFO_RX", 1195717356u, 0, 11, &be_const_str_remove_rule); +be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, &be_const_str_size); +be_define_const_str(size, "size", 597743964u, 0, 4, NULL); +be_define_const_str(SSD1351_DC, "SSD1351_DC", 84950353u, 0, 10, NULL); +be_define_const_str(TM1638DIO, "TM1638DIO", 1408212414u, 0, 9, NULL); +be_define_const_str(SM2135_CLK, "SM2135_CLK", 2383410011u, 0, 10, &be_const_str_TXD); +be_define_const_str(TXD, "TXD", 3614562079u, 0, 3, NULL); +be_define_const_str(SYMBOL_EYE_CLOSE, "SYMBOL_EYE_CLOSE", 404721792u, 0, 16, NULL); +be_define_const_str(AS3935, "AS3935", 603621745u, 0, 6, &be_const_str_LED1); +be_define_const_str(LED1, "LED1", 21005825u, 0, 4, &be_const_str_SYMBOL_BACKSPACE); +be_define_const_str(SYMBOL_BACKSPACE, "SYMBOL_BACKSPACE", 1997168681u, 0, 16, NULL); +be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, NULL); +be_define_const_str(SBR_TX, "SBR_TX", 3419096015u, 0, 6, NULL); +be_define_const_str(RA8876_CS, "RA8876_CS", 2529944108u, 0, 9, &be_const_str_SYMBOL_EYE_OPEN); +be_define_const_str(SYMBOL_EYE_OPEN, "SYMBOL_EYE_OPEN", 3449311676u, 0, 15, NULL); +be_define_const_str(KEY1_TC, "KEY1_TC", 25685109u, 0, 7, &be_const_str_NRG_SEL_INV); +be_define_const_str(NRG_SEL_INV, "NRG_SEL_INV", 3567431069u, 0, 11, &be_const_str_RXD); +be_define_const_str(RXD, "RXD", 2311579049u, 0, 3, &be_const_str_SDM630_RX); +be_define_const_str(SDM630_RX, "SDM630_RX", 1971606309u, 0, 9, &be_const_str_WEBCAM_DATA); +be_define_const_str(WEBCAM_DATA, "WEBCAM_DATA", 1476954421u, 0, 11, &be_const_str__ccmd); +be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_bus); +be_define_const_str(bus, "bus", 1607822841u, 0, 3, &be_const_str_lv_dropdown); +be_define_const_str(lv_dropdown, "lv_dropdown", 2797165301u, 0, 11, NULL); +be_define_const_str(INPUT_PULLUP, "INPUT_PULLUP", 2912931654u, 0, 12, &be_const_str_find_key_i); +be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, NULL); +be_define_const_str(EPAPER42_CS, "EPAPER42_CS", 3274717451u, 0, 11, &be_const_str___upper__); +be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, &be_const_str_sinh); +be_define_const_str(sinh, "sinh", 282220607u, 0, 4, NULL); +be_define_const_str(WEBCAM_XCLK, "WEBCAM_XCLK", 536207425u, 0, 11, &be_const_str_i2c_enabled); +be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, NULL); +be_define_const_str(ADC_LIGHT, "ADC_LIGHT", 3982461502u, 0, 9, &be_const_str_DSB); +be_define_const_str(DSB, "DSB", 98073254u, 0, 3, &be_const_str_SYMBOL_DRIVE); +be_define_const_str(SYMBOL_DRIVE, "SYMBOL_DRIVE", 567203502u, 0, 12, &be_const_str_lv_label); +be_define_const_str(lv_label, "lv_label", 4199664246u, 0, 8, NULL); +be_define_const_str(CSE7766_RX, "CSE7766_RX", 1546766819u, 0, 10, &be_const_str_SDM630_TX); +be_define_const_str(SDM630_TX, "SDM630_TX", 696213075u, 0, 9, &be_const_str_iter); +be_define_const_str(iter, "iter", 3124256359u, 0, 4, NULL); +be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_MCP39F5_RX); +be_define_const_str(MCP39F5_RX, "MCP39F5_RX", 190458217u, 0, 10, &be_const_str_MGC3130_RESET); +be_define_const_str(MGC3130_RESET, "MGC3130_RESET", 405013121u, 0, 13, &be_const_str_log); +be_define_const_str(log, "log", 1062293841u, 0, 3, NULL); +be_define_const_str(LE01MR_TX, "LE01MR_TX", 1589687023u, 0, 9, &be_const_str_set); +be_define_const_str(set, "set", 3324446467u, 0, 3, NULL); static const bstring* const m_string_table[] = { - (const bstring *)&be_const_str_ADE7953_IRQ, - (const bstring *)&be_const_str_TASMOTACLIENT_RST_INV, - (const bstring *)&be_const_str_SYMBOL_CHARGE, - (const bstring *)&be_const_str_opt_neq, - (const bstring *)&be_const_str_LOW, - (const bstring *)&be_const_str_MP3_DFR562, - (const bstring *)&be_const_str_opt_add, - (const bstring *)&be_const_str_ADC_BUTTON, - (const bstring *)&be_const_str_SYMBOL_EJECT, - (const bstring *)&be_const_str_SDM630_RX, - (const bstring *)&be_const_str_ARIRFRCV, - (const bstring *)&be_const_str_SYMBOL_SD_CARD, - (const bstring *)&be_const_str_HRE_CLOCK, + (const bstring *)&be_const_str_Tasmota, + (const bstring *)&be_const_str_ZIGBEE_RST, + (const bstring *)&be_const_str_HRXL_RX, + (const bstring *)&be_const_str_Driver, + (const bstring *)&be_const_str_exec_rules, + (const bstring *)&be_const_str_read, + (const bstring *)&be_const_str_DEEPSLEEP, NULL, - (const bstring *)&be_const_str_LEDLNK_INV, - (const bstring *)&be_const_str_deg, - (const bstring *)&be_const_str_HM10_RX, - (const bstring *)&be_const_str_SYMBOL_MINUS, - (const bstring *)&be_const_str_NRF24_DC, + (const bstring *)&be_const_str_WEBCAM_HSD, + (const bstring *)&be_const_str_list, NULL, (const bstring *)&be_const_str_IBEACON_RX, - (const bstring *)&be_const_str_EPAPER29_CS, - (const bstring *)&be_const_str_ROT1B, - (const bstring *)&be_const_str_IRRECV, - (const bstring *)&be_const_str_pop, - (const bstring *)&be_const_str_lv_linemeter, - (const bstring *)&be_const_str_lv_btn, - (const bstring *)&be_const_str_SYMBOL_USB, - (const bstring *)&be_const_str_SYMBOL_BELL, + (const bstring *)&be_const_str_ADC_JOY, + (const bstring *)&be_const_str_pow, + (const bstring *)&be_const_str_KEY1_INV_NP, + (const bstring *)&be_const_str_BOILER_OT_TX, + (const bstring *)&be_const_str_CNTR1_NP, + (const bstring *)&be_const_str_MAX7219DIN, + (const bstring *)&be_const_str_I2C_SDA, + NULL, NULL, (const bstring *)&be_const_str_CHANGE, - (const bstring *)&be_const_str_RA8876_CS, - (const bstring *)&be_const_str_lv_page, - (const bstring *)&be_const_str_lv_group, - (const bstring *)&be_const_str_LEDLNK, - (const bstring *)&be_const_str_RFSEND, - (const bstring *)&be_const_str_SYMBOL_EDIT, - (const bstring *)&be_const_str_set, - (const bstring *)&be_const_str__end_transmission, - (const bstring *)&be_const_str_ADC_JOY, - (const bstring *)&be_const_str_NEOPOOL_TX, - (const bstring *)&be_const_str_DCKI, - (const bstring *)&be_const_str_FALLING, - (const bstring *)&be_const_str_PZEM004_RX, - (const bstring *)&be_const_str_SM16716_CLK, - (const bstring *)&be_const_str_DDSU666_RX, - (const bstring *)&be_const_str_fromstring, - (const bstring *)&be_const_str_BL0940_RX, - (const bstring *)&be_const_str_OUTPUT_HI, - (const bstring *)&be_const_str_IRSEND, - (const bstring *)&be_const_str_WEBCAM_XCLK, - (const bstring *)&be_const_str_RC522_CS, - (const bstring *)&be_const_str_IEM3000_RX, - (const bstring *)&be_const_str_KEY1, - (const bstring *)&be_const_str_CSE7761_RX, - NULL, - (const bstring *)&be_const_str_AS608_RX, - (const bstring *)&be_const_str_MAX7219CS, - (const bstring *)&be_const_str_BOILER_OT_RX, - (const bstring *)&be_const_str_SWT1_NP, - (const bstring *)&be_const_str_SYMBOL_VOLUME_MID, - NULL, - (const bstring *)&be_const_str_BUZZER_INV, - (const bstring *)&be_const_str_EPAPER42_CS, - (const bstring *)&be_const_str_classof, - NULL, - NULL, - NULL, - (const bstring *)&be_const_str_PMS5003_RX, - NULL, - (const bstring *)&be_const_str_MAX7219DIN, - (const bstring *)&be_const_str_ADC_PH, - (const bstring *)&be_const_str_DYP_RX, - (const bstring *)&be_const_str_LED1, - (const bstring *)&be_const_str_ADC_BUTTON_INV, - NULL, - (const bstring *)&be_const_str_SPI_CLK, - (const bstring *)&be_const_str_NRG_SEL_INV, - (const bstring *)&be_const_str_I2C_SDA, - (const bstring *)&be_const_str_INPUT_PULLUP, - (const bstring *)&be_const_str_KEY1_NP, - (const bstring *)&be_const_str_SYMBOL_TRASH, (const bstring *)&be_const_str_SYMBOL_CLOSE, - (const bstring *)&be_const_str_lv_gauge, - (const bstring *)&be_const_str_insert, - (const bstring *)&be_const_str_WEBCAM_DATA, - (const bstring *)&be_const_str_SYMBOL_BATTERY_2, - (const bstring *)&be_const_str_pow, - (const bstring *)&be_const_str_ARIRFSEL, - (const bstring *)&be_const_str_assert, - (const bstring *)&be_const_str_member, - (const bstring *)&be_const_str_remove_rule, - (const bstring *)&be_const_str_ADC_INPUT, - (const bstring *)&be_const_str_LED1_INV, - (const bstring *)&be_const_str_ADC_TEMP, - (const bstring *)&be_const_str_SAIR_RX, - (const bstring *)&be_const_str_add_rule, - (const bstring *)&be_const_str_SYMBOL_FILE, - (const bstring *)&be_const_str_BUZZER, - (const bstring *)&be_const_str_SYMBOL_EYE_OPEN, - (const bstring *)&be_const_str_acos, - NULL, - (const bstring *)&be_const_str_concat, - (const bstring *)&be_const_str_lv_img, - (const bstring *)&be_const_str_TM1637CLK, - (const bstring *)&be_const_str_SI7021, - (const bstring *)&be_const_str_PULLUP, - NULL, - (const bstring *)&be_const_str_CC1101_GDO0, - (const bstring *)&be_const_str_DDS2382_RX, - (const bstring *)&be_const_str_PROJECTOR_CTRL_RX, - (const bstring *)&be_const_str_SYMBOL_SETTINGS, - (const bstring *)&be_const_str_SYMBOL_CALL, - (const bstring *)&be_const_str_save, - (const bstring *)&be_const_str_DHT11_OUT, - (const bstring *)&be_const_str_CSE7761_TX, - (const bstring *)&be_const_str_Driver, - (const bstring *)&be_const_str_atan, - (const bstring *)&be_const_str_SYMBOL_LIST, - (const bstring *)&be_const_str_ST7789_CS, - NULL, - (const bstring *)&be_const_str_ST7789_DC, - (const bstring *)&be_const_str_ETH_PHY_MDIO, - (const bstring *)&be_const_str_MAX31855DO, - (const bstring *)&be_const_str_lv_led, - (const bstring *)&be_const_str_SBR_TX, - (const bstring *)&be_const_str_CC1101_GDO2, - (const bstring *)&be_const_str_SDCARD_CS, - (const bstring *)&be_const_str_log, - NULL, - (const bstring *)&be_const_str_asstring, - (const bstring *)&be_const_str_CSE7766_TX, - (const bstring *)&be_const_str_DSB_OUT, - (const bstring *)&be_const_str_calldepth, - (const bstring *)&be_const_str_MAX31855CS, - (const bstring *)&be_const_str_elif, - NULL, - (const bstring *)&be_const_str_SSD1331_CS, - (const bstring *)&be_const_str_WEBCAM_PWDN, - (const bstring *)&be_const_str_AS3935, - (const bstring *)&be_const_str_INPUT_PULLDOWN, - (const bstring *)&be_const_str_reverse_gamma10, - (const bstring *)&be_const_str_CNTR1_NP, - (const bstring *)&be_const_str_SYMBOL_WARNING, - (const bstring *)&be_const_str_A4988_MS1, - (const bstring *)&be_const_str_SSD1331_DC, - (const bstring *)&be_const_str_SYMBOL_BATTERY_FULL, - (const bstring *)&be_const_str_RDM6300_RX, - (const bstring *)&be_const_str_HPMA_TX, - (const bstring *)&be_const_str_get_light, - (const bstring *)&be_const_str_Tasmota, - (const bstring *)&be_const_str_AZ_RXD, - (const bstring *)&be_const_str_type, - (const bstring *)&be_const_str_WE517_TX, - (const bstring *)&be_const_str_MAX7219CLK, - NULL, - (const bstring *)&be_const_str_SYMBOL_SAVE, - (const bstring *)&be_const_str_SYMBOL_WIFI, - (const bstring *)&be_const_str_NEOPOOL_RX, - (const bstring *)&be_const_str_ILI9341_DC, - (const bstring *)&be_const_str_lv_switch, - (const bstring *)&be_const_str_TM1638CLK, - NULL, - NULL, - (const bstring *)&be_const_str_MCP39F5_RST, - (const bstring *)&be_const_str_lv_imgbtn, - (const bstring *)&be_const_str_bus, - (const bstring *)&be_const_str_WIEGAND_D1, - (const bstring *)&be_const_str_SYMBOL_BLUETOOTH, - (const bstring *)&be_const_str_GPS_TX, - NULL, - (const bstring *)&be_const_str_input, - (const bstring *)&be_const_str_SPI_DC, - (const bstring *)&be_const_str_CSE7766_RX, - (const bstring *)&be_const_str_TM1638STB, - (const bstring *)&be_const_str_SYMBOL_COPY, - (const bstring *)&be_const_str_HX711_DAT, - (const bstring *)&be_const_str_OUTPUT_OPEN_DRAIN, - (const bstring *)&be_const_str_IBEACON_TX, - (const bstring *)&be_const_str_BACKLIGHT, - (const bstring *)&be_const_str__request_from, - NULL, - NULL, - (const bstring *)&be_const_str_ETH_PHY_POWER, - (const bstring *)&be_const_str_dump, - (const bstring *)&be_const_str_imax, - (const bstring *)&be_const_str_SWT1, - (const bstring *)&be_const_str_PMS5003_TX, - NULL, - (const bstring *)&be_const_str___lower__, - (const bstring *)&be_const_str_clear, - (const bstring *)&be_const_str_HX711_SCK, - (const bstring *)&be_const_str_DDSU666_TX, - (const bstring *)&be_const_str_A4988_DIR, - (const bstring *)&be_const_str_dot_p, - (const bstring *)&be_const_str_A4988_STP, - (const bstring *)&be_const_str_SPI_MOSI, - (const bstring *)&be_const_str_copy, - (const bstring *)&be_const_str_lv_cont, - (const bstring *)&be_const_str_, + (const bstring *)&be_const_str_HALLEFFECT, + (const bstring *)&be_const_str_SYMBOL_RIGHT, + (const bstring *)&be_const_str_LEDLNK_INV, (const bstring *)&be_const_str_SYMBOL_BULLET, - (const bstring *)&be_const_str_true, - (const bstring *)&be_const_str_hex, - (const bstring *)&be_const_str_ILI9488_CS, - (const bstring *)&be_const_str_BS814_DAT, - (const bstring *)&be_const_str_BOILER_OT_TX, - (const bstring *)&be_const_str_SR04_ECHO, - (const bstring *)&be_const_str_TASMOTACLIENT_RST, - (const bstring *)&be_const_str_SAIR_TX, - (const bstring *)&be_const_str_HPMA_RX, - (const bstring *)&be_const_str_LE01MR_TX, - (const bstring *)&be_const_str_SSPI_MISO, - (const bstring *)&be_const_str_KEY1_INV, - (const bstring *)&be_const_str_ZIGBEE_RST, - (const bstring *)&be_const_str_SM2135_DAT, - (const bstring *)&be_const_str_resp_cmnd_failed, + (const bstring *)&be_const_str_SYMBOL_BELL, + (const bstring *)&be_const_str_ROT1B_NP, NULL, - (const bstring *)&be_const_str_pin, - (const bstring *)&be_const_str_as, - (const bstring *)&be_const_str_KEY1_INV_NP, - (const bstring *)&be_const_str_opt_eq, - (const bstring *)&be_const_str_lv_line, - (const bstring *)&be_const_str_asin, - (const bstring *)&be_const_str_HRXL_RX, + (const bstring *)&be_const_str_MAX7219CLK, + (const bstring *)&be_const_str_SSD1331_DC, + (const bstring *)&be_const_str_toupper, + (const bstring *)&be_const_str_SYMBOL_VOLUME_MID, + (const bstring *)&be_const_str_PZEM017_RX, + (const bstring *)&be_const_str_add_driver, + (const bstring *)&be_const_str_RDM6300_RX, + (const bstring *)&be_const_str_LOW, + (const bstring *)&be_const_str_ADC_BUTTON_INV, + (const bstring *)&be_const_str_ELECTRIQ_MOODL_TX, + (const bstring *)&be_const_str_SSPI_DC, + (const bstring *)&be_const_str_collect, + (const bstring *)&be_const_str_register_button_encoder, + (const bstring *)&be_const_str_BL0940_RX, + (const bstring *)&be_const_str_WEBCAM_PSCLK, + (const bstring *)&be_const_str_RFRECV, + (const bstring *)&be_const_str_GPS_RX, + (const bstring *)&be_const_str_SYMBOL_UP, + (const bstring *)&be_const_str_HPMA_TX, + (const bstring *)&be_const_str_SHELLY_DIMMER_RST_INV, + (const bstring *)&be_const_str_int, (const bstring *)&be_const_str_HJL_CF, - (const bstring *)&be_const_str_DHT22, - (const bstring *)&be_const_str_CNTR1, - (const bstring *)&be_const_str_opt_connect, - (const bstring *)&be_const_str_PROJECTOR_CTRL_TX, - (const bstring *)&be_const_str_NRG_SEL, - (const bstring *)&be_const_str_MCP39F5_RX, - (const bstring *)&be_const_str_SYMBOL_DRIVE, - (const bstring *)&be_const_str_OLED_RESET, - (const bstring *)&be_const_str_SSPI_MAX31865_CS1, - (const bstring *)&be_const_str_HLW_CF, - (const bstring *)&be_const_str_cosh, - (const bstring *)&be_const_str_layer_sys, - (const bstring *)&be_const_str_SYMBOL_PASTE, + (const bstring *)&be_const_str_top, NULL, + (const bstring *)&be_const_str_DDS2382_RX, + (const bstring *)&be_const_str_INPUT_PULLDOWN, + (const bstring *)&be_const_str_SYMBOL_BLUETOOTH, + (const bstring *)&be_const_str_SYMBOL_VIDEO, + (const bstring *)&be_const_str_pi, + (const bstring *)&be_const_str_REL1_INV, + (const bstring *)&be_const_str_for, + (const bstring *)&be_const_str_DYP_RX, + (const bstring *)&be_const_str_SYMBOL_DOWNLOAD, + (const bstring *)&be_const_str_dot_p, + (const bstring *)&be_const_str_BS814_CLK, + (const bstring *)&be_const_str_NRG_SEL, + (const bstring *)&be_const_str_ADE7953_IRQ, + (const bstring *)&be_const_str_REL1, + (const bstring *)&be_const_str_NEOPOOL_TX, + (const bstring *)&be_const_str_true, + (const bstring *)&be_const_str_DI, + (const bstring *)&be_const_str_PULLUP, + (const bstring *)&be_const_str_lv_btn, + (const bstring *)&be_const_str_IBEACON_TX, + (const bstring *)&be_const_str_IEM3000_TX, + (const bstring *)&be_const_str_cmd, + (const bstring *)&be_const_str_web_add_main_button, + (const bstring *)&be_const_str_LED1_INV, + (const bstring *)&be_const_str_lv_calendar, + (const bstring *)&be_const_str_add_rule, + (const bstring *)&be_const_str_ROT1A, + (const bstring *)&be_const_str_floor, + (const bstring *)&be_const_str_EPAPER29_CS, + (const bstring *)&be_const_str_VL53L0X_XSHUT1, + (const bstring *)&be_const_str_DDSU666_RX, + (const bstring *)&be_const_str_seg7_font, + (const bstring *)&be_const_str_BACKLIGHT, + NULL, + NULL, + (const bstring *)&be_const_str_MP3_DFR562, + (const bstring *)&be_const_str_SYMBOL_MINUS, + (const bstring *)&be_const_str_event, + (const bstring *)&be_const_str_PROJECTOR_CTRL_RX, + (const bstring *)&be_const_str_TASMOTACLIENT_RST_INV, + NULL, + (const bstring *)&be_const_str_WE517_RX, + (const bstring *)&be_const_str_insert, + (const bstring *)&be_const_str_ILI9488_CS, + (const bstring *)&be_const_str_ADC_BUTTON, + (const bstring *)&be_const_str_SYMBOL_WIFI, + (const bstring *)&be_const_str_SYMBOL_AUDIO, + (const bstring *)&be_const_str_LMT01, + (const bstring *)&be_const_str__cmd, + (const bstring *)&be_const_str_SYMBOL_SETTINGS, + (const bstring *)&be_const_str_SPI_CS, + (const bstring *)&be_const_str_remove, + (const bstring *)&be_const_str_HM10_RX, + (const bstring *)&be_const_str_exec_cmd, + (const bstring *)&be_const_str_OPEN_DRAIN, + (const bstring *)&be_const_str_lv_font, + (const bstring *)&be_const_str_SSPI_SCLK, + (const bstring *)&be_const_str_A4988_DIR, + (const bstring *)&be_const_str_SYMBOL_SD_CARD, + (const bstring *)&be_const_str_SYMBOL_BATTERY_FULL, + (const bstring *)&be_const_str_MIEL_HVAC_TX, + (const bstring *)&be_const_str_SYMBOL_UPLOAD, + (const bstring *)&be_const_str_DDS2382_TX, + (const bstring *)&be_const_str_AZ_TXD, + (const bstring *)&be_const_str_A4988_ENA, + (const bstring *)&be_const_str_opt_neq, + (const bstring *)&be_const_str_SYMBOL_OK, + (const bstring *)&be_const_str_NRG_CF1, + (const bstring *)&be_const_str_opt_add, + (const bstring *)&be_const_str_HRE_CLOCK, + (const bstring *)&be_const_str_asstring, + (const bstring *)&be_const_str_HIGH, + (const bstring *)&be_const_str_HLW_CF, + (const bstring *)&be_const_str_AZ_RXD, + (const bstring *)&be_const_str_HM10_TX, + (const bstring *)&be_const_str_EXS_ENABLE, + (const bstring *)&be_const_str_PWM1, + (const bstring *)&be_const_str_SYMBOL_BATTERY_1, + (const bstring *)&be_const_str_SYMBOL_FILE, + (const bstring *)&be_const_str_opt_connect, + NULL, + (const bstring *)&be_const_str_NONE, + (const bstring *)&be_const_str_DCKI, + NULL, + (const bstring *)&be_const_str_range, NULL, (const bstring *)&be_const_str_TX2X_TXD_BLACK, - (const bstring *)&be_const_str_SM2135_CLK, - (const bstring *)&be_const_str_A4988_ENA, - (const bstring *)&be_const_str_ADC_LIGHT, + (const bstring *)&be_const_str_ZEROCROSS, + (const bstring *)&be_const_str_ADC_INPUT, + (const bstring *)&be_const_str_RC522_RST, + (const bstring *)&be_const_str_SSD1331_CS, + (const bstring *)&be_const_str_BS814_DAT, + (const bstring *)&be_const_str_PULLDOWN, + (const bstring *)&be_const_str_opt_eq, + (const bstring *)&be_const_str_fromstring, NULL, - (const bstring *)&be_const_str_resp_cmnd, + (const bstring *)&be_const_str_PZEM004_RX, + (const bstring *)&be_const_str_SDCARD_CS, + (const bstring *)&be_const_str_ETH_PHY_MDIO, + (const bstring *)&be_const_str_SDM72_TX, + (const bstring *)&be_const_str_reverse_gamma10, + (const bstring *)&be_const_str_return, + (const bstring *)&be_const_str_SSPI_MAX31865_CS1, + (const bstring *)&be_const_str_SYMBOL_PASTE, NULL, - (const bstring *)&be_const_str_AZ_TXD, - (const bstring *)&be_const_str_DHT11, - (const bstring *)&be_const_str_MHZ_RXD, - (const bstring *)&be_const_str_SDM72_RX, - (const bstring *)&be_const_str_DSB, - (const bstring *)&be_const_str_SSD1351_CS, - (const bstring *)&be_const_str_json_append, - (const bstring *)&be_const_str_OPEN_DRAIN, + (const bstring *)&be_const_str_SAIR_TX, + (const bstring *)&be_const_str_CSE7761_RX, + (const bstring *)&be_const_str_DSB_OUT, + (const bstring *)&be_const_str_SOLAXX1_RX, + (const bstring *)&be_const_str_A4988_MS1, + (const bstring *)&be_const_str_FALLING, + (const bstring *)&be_const_str_EPD_DATA, + (const bstring *)&be_const_str_WS2812, + NULL, + (const bstring *)&be_const_str_WINDMETER_SPEED, + NULL, + (const bstring *)&be_const_str_SYMBOL_STOP, + (const bstring *)&be_const_str_BUZZER_INV, + (const bstring *)&be_const_str_rtc, + (const bstring *)&be_const_str_LE01MR_RX, + (const bstring *)&be_const_str_ADC_PH, + (const bstring *)&be_const_str_SDM120_TX, + (const bstring *)&be_const_str_find_op, + (const bstring *)&be_const_str_CNTR1, + (const bstring *)&be_const_str_DDSU666_TX, + (const bstring *)&be_const_str_RFSEND, + (const bstring *)&be_const_str_button_pressed, + (const bstring *)&be_const_str_SDM120_RX, + (const bstring *)&be_const_str_SYMBOL_LIST, + (const bstring *)&be_const_str_MAX31855CLK, + (const bstring *)&be_const_str_SYMBOL_LOOP, + (const bstring *)&be_const_str_MHZ_TXD, + (const bstring *)&be_const_str_OUTPUT_HI, + NULL, + NULL, + (const bstring *)&be_const_str_BOILER_OT_RX, (const bstring *)&be_const_str_AS608_TX, - (const bstring *)&be_const_str_NONE, + (const bstring *)&be_const_str_SI7021, + (const bstring *)&be_const_str_get_light, + (const bstring *)&be_const_str_P9813_CLK, + (const bstring *)&be_const_str___lower__, + (const bstring *)&be_const_str_INPUT, + (const bstring *)&be_const_str_AS608_RX, + (const bstring *)&be_const_str_lv_tileview, + (const bstring *)&be_const_str_CSE7761_TX, NULL, - (const bstring *)&be_const_str_PWM1_INV, - (const bstring *)&be_const_str_HIGH, + (const bstring *)&be_const_str_MAX31855DO, + (const bstring *)&be_const_str_CC1101_GDO2, + (const bstring *)&be_const_str_ETH_PHY_POWER, + (const bstring *)&be_const_str_ILI9341_CS, + (const bstring *)&be_const_str_OUTPUT_OPEN_DRAIN, + (const bstring *)&be_const_str_TM1637CLK, + (const bstring *)&be_const_str_HX711_DAT, + (const bstring *)&be_const_str_KEY1_INV, + (const bstring *)&be_const_str_PMS5003_TX, + (const bstring *)&be_const_str_A4988_STP, + (const bstring *)&be_const_str_SYMBOL_PLUS, + NULL, + (const bstring *)&be_const_str_SYMBOL_PLAY, + (const bstring *)&be_const_str_CSE7766_TX, + (const bstring *)&be_const_str_lv_win, (const bstring *)&be_const_str_ADC_RANGE, - (const bstring *)&be_const_str_XPT2046_CS, - (const bstring *)&be_const_str_WEBCAM_SIOC, - (const bstring *)&be_const_str_WEBCAM_HSD, - (const bstring *)&be_const_str_SSPI_CS, + (const bstring *)&be_const_str_ILI9341_DC, + (const bstring *)&be_const_str_DHT11, + (const bstring *)&be_const_str_FTC532, + (const bstring *)&be_const_str_SYMBOL_NEW_LINE, + (const bstring *)&be_const_str_HX711_SCK, + (const bstring *)&be_const_str_SAIR_RX, + NULL, + (const bstring *)&be_const_str_ARIRFSEL, + (const bstring *)&be_const_str_WEBCAM_RESET, + (const bstring *)&be_const_str__available, + (const bstring *)&be_const_str_DHT11_OUT, + NULL, + (const bstring *)&be_const_str_MAX7219CS, + NULL, + (const bstring *)&be_const_str_imax, + NULL, + (const bstring *)&be_const_str_attrdump, + (const bstring *)&be_const_str_SYMBOL_DIRECTORY, + (const bstring *)&be_const_str_SPI_MOSI, + (const bstring *)&be_const_str_SM16716_SEL, + (const bstring *)&be_const_str_PN532_TXD, + (const bstring *)&be_const_str_every_second, + (const bstring *)&be_const_str_SYMBOL_DUMMY, + (const bstring *)&be_const_str_BUZZER, + (const bstring *)&be_const_str_copy, + (const bstring *)&be_const_str_TASMOTACLIENT_RST, + (const bstring *)&be_const_str_ST7789_CS, + (const bstring *)&be_const_str_response_append, + (const bstring *)&be_const_str_ARIRFRCV, + (const bstring *)&be_const_str_NRF24_DC, + (const bstring *)&be_const_str_IRRECV, (const bstring *)&be_const_str_ADC_CT_POWER, - (const bstring *)&be_const_str_ROT1A, - (const bstring *)&be_const_str_DDS2382_TX, - (const bstring *)&be_const_str_HALLEFFECT, - (const bstring *)&be_const_str_SPI_CS, - (const bstring *)&be_const_str_NRF24_CS + (const bstring *)&be_const_str_ADC_TEMP, + (const bstring *)&be_const_str_SSD1351_DC, + (const bstring *)&be_const_str_TM1638DIO, + (const bstring *)&be_const_str_SM2135_CLK, + (const bstring *)&be_const_str_SYMBOL_EYE_CLOSE, + (const bstring *)&be_const_str_AS3935, + (const bstring *)&be_const_str_codedump, + (const bstring *)&be_const_str_SBR_TX, + (const bstring *)&be_const_str_RA8876_CS, + (const bstring *)&be_const_str_KEY1_TC, + (const bstring *)&be_const_str_INPUT_PULLUP, + (const bstring *)&be_const_str_EPAPER42_CS, + NULL, + (const bstring *)&be_const_str_WEBCAM_XCLK, + (const bstring *)&be_const_str_ADC_LIGHT, + (const bstring *)&be_const_str_CSE7766_RX, + NULL, + (const bstring *)&be_const_str_, + NULL, + (const bstring *)&be_const_str_LE01MR_TX }; static const struct bconststrtab m_const_string_table = { - .size = 271, - .count = 542, + .size = 268, + .count = 537, .table = m_string_table }; diff --git a/lib/libesp32/Berry/generate/be_fixed_lvgl.h b/lib/libesp32/Berry/generate/be_fixed_lvgl.h index b284e5ab2..67301520b 100644 --- a/lib/libesp32/Berry/generate/be_fixed_lvgl.h +++ b/lib/libesp32/Berry/generate/be_fixed_lvgl.h @@ -1,83 +1,78 @@ #include "be_constobj.h" static be_define_const_map_slots(m_liblvgl_map) { - { be_const_key(SYMBOL_EYE_CLOSE, -1), be_const_str(&be_local_const_str_SYMBOL_EYE_CLOSE) }, - { be_const_key(SYMBOL_IMAGE, 15), be_const_str(&be_local_const_str_SYMBOL_IMAGE) }, - { be_const_key(SYMBOL_SETTINGS, 70), be_const_str(&be_local_const_str_SYMBOL_SETTINGS) }, - { be_const_key(SYMBOL_UPLOAD, -1), be_const_str(&be_local_const_str_SYMBOL_UPLOAD) }, - { be_const_key(SYMBOL_AUDIO, -1), be_const_str(&be_local_const_str_SYMBOL_AUDIO) }, - { be_const_key(SYMBOL_USB, -1), be_const_str(&be_local_const_str_SYMBOL_USB) }, - { be_const_key(SYMBOL_EDIT, -1), be_const_str(&be_local_const_str_SYMBOL_EDIT) }, - { be_const_key(SYMBOL_BELL, 2), be_const_str(&be_local_const_str_SYMBOL_BELL) }, - { be_const_key(SYMBOL_LOOP, -1), be_const_str(&be_local_const_str_SYMBOL_LOOP) }, - { be_const_key(SYMBOL_CALL, 16), be_const_str(&be_local_const_str_SYMBOL_CALL) }, - { be_const_key(SYMBOL_CUT, -1), be_const_str(&be_local_const_str_SYMBOL_CUT) }, - { be_const_key(SYMBOL_MUTE, -1), be_const_str(&be_local_const_str_SYMBOL_MUTE) }, - { be_const_key(SYMBOL_RIGHT, -1), be_const_str(&be_local_const_str_SYMBOL_RIGHT) }, - { be_const_key(SYMBOL_HOME, -1), be_const_str(&be_local_const_str_SYMBOL_HOME) }, - { be_const_key(SYMBOL_PREV, 54), be_const_str(&be_local_const_str_SYMBOL_PREV) }, - { be_const_key(SYMBOL_WIFI, 49), be_const_str(&be_local_const_str_SYMBOL_WIFI) }, - { be_const_key(SYMBOL_CLOSE, -1), be_const_str(&be_local_const_str_SYMBOL_CLOSE) }, - { be_const_key(SYMBOL_BLUETOOTH, -1), be_const_str(&be_local_const_str_SYMBOL_BLUETOOTH) }, - { be_const_key(SYMBOL_DUMMY, -1), be_const_str(&be_local_const_str_SYMBOL_DUMMY) }, - { be_const_key(SYMBOL_VIDEO, -1), be_const_str(&be_local_const_str_SYMBOL_VIDEO) }, - { be_const_key(SYMBOL_PAUSE, -1), be_const_str(&be_local_const_str_SYMBOL_PAUSE) }, - { be_const_key(SYMBOL_PASTE, 13), be_const_str(&be_local_const_str_SYMBOL_PASTE) }, - { be_const_key(SYMBOL_MINUS, -1), be_const_str(&be_local_const_str_SYMBOL_MINUS) }, - { be_const_key(SYMBOL_STOP, -1), be_const_str(&be_local_const_str_SYMBOL_STOP) }, - { be_const_key(get_hor_res, 12), be_const_func(lv0_get_hor_res) }, - { be_const_key(screenshot, 19), be_const_func(lv0_screenshot) }, - { be_const_key(SYMBOL_GPS, -1), be_const_str(&be_local_const_str_SYMBOL_GPS) }, - { be_const_key(SYMBOL_POWER, -1), be_const_str(&be_local_const_str_SYMBOL_POWER) }, - { be_const_key(SYMBOL_VOLUME_MID, 51), be_const_str(&be_local_const_str_SYMBOL_VOLUME_MID) }, - { be_const_key(SYMBOL_BATTERY_EMPTY, -1), be_const_str(&be_local_const_str_SYMBOL_BATTERY_EMPTY) }, - { be_const_key(SYMBOL_DRIVE, 61), be_const_str(&be_local_const_str_SYMBOL_DRIVE) }, - { be_const_key(SYMBOL_KEYBOARD, -1), be_const_str(&be_local_const_str_SYMBOL_KEYBOARD) }, - { be_const_key(load_freetype_font, -1), be_const_func(lv0_load_freetype_font) }, - { be_const_key(SYMBOL_REFRESH, 28), be_const_str(&be_local_const_str_SYMBOL_REFRESH) }, - { be_const_key(SYMBOL_BATTERY_2, 53), be_const_str(&be_local_const_str_SYMBOL_BATTERY_2) }, - { be_const_key(SYMBOL_NEW_LINE, -1), be_const_str(&be_local_const_str_SYMBOL_NEW_LINE) }, - { be_const_key(SYMBOL_SD_CARD, -1), be_const_str(&be_local_const_str_SYMBOL_SD_CARD) }, - { be_const_key(SYMBOL_VOLUME_MAX, -1), be_const_str(&be_local_const_str_SYMBOL_VOLUME_MAX) }, - { be_const_key(SYMBOL_PLUS, -1), be_const_str(&be_local_const_str_SYMBOL_PLUS) }, - { be_const_key(SYMBOL_EJECT, -1), be_const_str(&be_local_const_str_SYMBOL_EJECT) }, - { be_const_key(layer_sys, -1), be_const_func(lv0_layer_sys) }, - { be_const_key(SYMBOL_BATTERY_FULL, -1), be_const_str(&be_local_const_str_SYMBOL_BATTERY_FULL) }, - { be_const_key(SYMBOL_DOWNLOAD, 23), be_const_str(&be_local_const_str_SYMBOL_DOWNLOAD) }, - { be_const_key(load_font, -1), be_const_func(lv0_load_font) }, - { be_const_key(SYMBOL_EYE_OPEN, -1), be_const_str(&be_local_const_str_SYMBOL_EYE_OPEN) }, - { be_const_key(register_button_encoder, -1), be_const_func(lv0_register_button_encoder) }, - { be_const_key(SYMBOL_BULLET, 9), be_const_str(&be_local_const_str_SYMBOL_BULLET) }, - { be_const_key(start, 3), be_const_func(lv0_start) }, - { be_const_key(scr_act, 5), be_const_func(lv0_scr_act) }, - { be_const_key(SYMBOL_UP, -1), be_const_str(&be_local_const_str_SYMBOL_UP) }, - { be_const_key(SYMBOL_CHARGE, -1), be_const_str(&be_local_const_str_SYMBOL_CHARGE) }, - { be_const_key(seg7_font, -1), be_const_func(lv0_load_seg7_font) }, - { be_const_key(SYMBOL_PLAY, 17), be_const_str(&be_local_const_str_SYMBOL_PLAY) }, - { be_const_key(layer_top, -1), be_const_func(lv0_layer_top) }, - { be_const_key(SYMBOL_SAVE, -1), be_const_str(&be_local_const_str_SYMBOL_SAVE) }, - { be_const_key(SYMBOL_COPY, 1), be_const_str(&be_local_const_str_SYMBOL_COPY) }, - { be_const_key(get_ver_res, 48), be_const_func(lv0_get_ver_res) }, - { be_const_key(SYMBOL_DIRECTORY, -1), be_const_str(&be_local_const_str_SYMBOL_DIRECTORY) }, - { be_const_key(montserrat_font, -1), be_const_func(lv0_load_montserrat_font) }, - { be_const_key(SYMBOL_SHUFFLE, -1), be_const_str(&be_local_const_str_SYMBOL_SHUFFLE) }, - { be_const_key(SYMBOL_FILE, -1), be_const_str(&be_local_const_str_SYMBOL_FILE) }, - { be_const_key(SYMBOL_WARNING, -1), be_const_str(&be_local_const_str_SYMBOL_WARNING) }, - { be_const_key(SYMBOL_LIST, 45), be_const_str(&be_local_const_str_SYMBOL_LIST) }, - { be_const_key(SYMBOL_LEFT, -1), be_const_str(&be_local_const_str_SYMBOL_LEFT) }, - { be_const_key(SYMBOL_TRASH, -1), be_const_str(&be_local_const_str_SYMBOL_TRASH) }, - { be_const_key(SYMBOL_BACKSPACE, -1), be_const_str(&be_local_const_str_SYMBOL_BACKSPACE) }, - { be_const_key(SYMBOL_DOWN, -1), be_const_str(&be_local_const_str_SYMBOL_DOWN) }, - { be_const_key(member, -1), be_const_func(lv0_member) }, - { be_const_key(SYMBOL_OK, -1), be_const_str(&be_local_const_str_SYMBOL_OK) }, - { be_const_key(SYMBOL_BATTERY_3, -1), be_const_str(&be_local_const_str_SYMBOL_BATTERY_3) }, { be_const_key(SYMBOL_NEXT, -1), be_const_str(&be_local_const_str_SYMBOL_NEXT) }, - { be_const_key(SYMBOL_BATTERY_1, 14), be_const_str(&be_local_const_str_SYMBOL_BATTERY_1) }, + { be_const_key(SYMBOL_GPS, -1), be_const_str(&be_local_const_str_SYMBOL_GPS) }, + { be_const_key(SYMBOL_POWER, 29), be_const_str(&be_local_const_str_SYMBOL_POWER) }, + { be_const_key(SYMBOL_WARNING, -1), be_const_str(&be_local_const_str_SYMBOL_WARNING) }, + { be_const_key(SYMBOL_MUTE, 43), be_const_str(&be_local_const_str_SYMBOL_MUTE) }, + { be_const_key(SYMBOL_UP, -1), be_const_str(&be_local_const_str_SYMBOL_UP) }, + { be_const_key(SYMBOL_SHUFFLE, -1), be_const_str(&be_local_const_str_SYMBOL_SHUFFLE) }, + { be_const_key(SYMBOL_BATTERY_3, -1), be_const_str(&be_local_const_str_SYMBOL_BATTERY_3) }, + { be_const_key(SYMBOL_VOLUME_MAX, -1), be_const_str(&be_local_const_str_SYMBOL_VOLUME_MAX) }, + { be_const_key(SYMBOL_PLUS, 31), be_const_str(&be_local_const_str_SYMBOL_PLUS) }, + { be_const_key(SYMBOL_SETTINGS, -1), be_const_str(&be_local_const_str_SYMBOL_SETTINGS) }, + { be_const_key(SYMBOL_PLAY, 58), be_const_str(&be_local_const_str_SYMBOL_PLAY) }, + { be_const_key(screenshot, 59), be_const_func(lv0_screenshot) }, + { be_const_key(SYMBOL_UPLOAD, -1), be_const_str(&be_local_const_str_SYMBOL_UPLOAD) }, + { be_const_key(SYMBOL_LEFT, -1), be_const_str(&be_local_const_str_SYMBOL_LEFT) }, + { be_const_key(load_font, -1), be_const_func(lv0_load_font) }, + { be_const_key(SYMBOL_CALL, -1), be_const_str(&be_local_const_str_SYMBOL_CALL) }, + { be_const_key(SYMBOL_KEYBOARD, -1), be_const_str(&be_local_const_str_SYMBOL_KEYBOARD) }, + { be_const_key(SYMBOL_PAUSE, 40), be_const_str(&be_local_const_str_SYMBOL_PAUSE) }, + { be_const_key(SYMBOL_DOWN, -1), be_const_str(&be_local_const_str_SYMBOL_DOWN) }, + { be_const_key(SYMBOL_BATTERY_FULL, -1), be_const_str(&be_local_const_str_SYMBOL_BATTERY_FULL) }, + { be_const_key(SYMBOL_BATTERY_EMPTY, -1), be_const_str(&be_local_const_str_SYMBOL_BATTERY_EMPTY) }, + { be_const_key(SYMBOL_CLOSE, -1), be_const_str(&be_local_const_str_SYMBOL_CLOSE) }, + { be_const_key(SYMBOL_PASTE, 49), be_const_str(&be_local_const_str_SYMBOL_PASTE) }, + { be_const_key(SYMBOL_RIGHT, -1), be_const_str(&be_local_const_str_SYMBOL_RIGHT) }, + { be_const_key(SYMBOL_USB, 21), be_const_str(&be_local_const_str_SYMBOL_USB) }, + { be_const_key(SYMBOL_BULLET, -1), be_const_str(&be_local_const_str_SYMBOL_BULLET) }, + { be_const_key(SYMBOL_BELL, 7), be_const_str(&be_local_const_str_SYMBOL_BELL) }, + { be_const_key(SYMBOL_WIFI, -1), be_const_str(&be_local_const_str_SYMBOL_WIFI) }, + { be_const_key(SYMBOL_SAVE, -1), be_const_str(&be_local_const_str_SYMBOL_SAVE) }, + { be_const_key(SYMBOL_DOWNLOAD, -1), be_const_str(&be_local_const_str_SYMBOL_DOWNLOAD) }, + { be_const_key(start, -1), be_const_func(lv0_start) }, + { be_const_key(SYMBOL_DIRECTORY, 28), be_const_str(&be_local_const_str_SYMBOL_DIRECTORY) }, + { be_const_key(SYMBOL_TRASH, 35), be_const_str(&be_local_const_str_SYMBOL_TRASH) }, + { be_const_key(SYMBOL_IMAGE, -1), be_const_str(&be_local_const_str_SYMBOL_IMAGE) }, + { be_const_key(SYMBOL_VOLUME_MID, 54), be_const_str(&be_local_const_str_SYMBOL_VOLUME_MID) }, + { be_const_key(SYMBOL_STOP, 10), be_const_str(&be_local_const_str_SYMBOL_STOP) }, + { be_const_key(SYMBOL_DUMMY, -1), be_const_str(&be_local_const_str_SYMBOL_DUMMY) }, + { be_const_key(member, -1), be_const_func(lv0_member) }, + { be_const_key(SYMBOL_EDIT, -1), be_const_str(&be_local_const_str_SYMBOL_EDIT) }, + { be_const_key(seg7_font, 41), be_const_func(lv0_load_seg7_font) }, + { be_const_key(SYMBOL_NEW_LINE, -1), be_const_str(&be_local_const_str_SYMBOL_NEW_LINE) }, + { be_const_key(register_button_encoder, -1), be_const_func(lv0_register_button_encoder) }, + { be_const_key(load_freetype_font, -1), be_const_func(lv0_load_freetype_font) }, + { be_const_key(SYMBOL_REFRESH, 16), be_const_str(&be_local_const_str_SYMBOL_REFRESH) }, + { be_const_key(SYMBOL_SD_CARD, -1), be_const_str(&be_local_const_str_SYMBOL_SD_CARD) }, + { be_const_key(SYMBOL_EJECT, 20), be_const_str(&be_local_const_str_SYMBOL_EJECT) }, + { be_const_key(SYMBOL_CUT, 5), be_const_str(&be_local_const_str_SYMBOL_CUT) }, + { be_const_key(SYMBOL_LIST, 13), be_const_str(&be_local_const_str_SYMBOL_LIST) }, + { be_const_key(SYMBOL_MINUS, -1), be_const_str(&be_local_const_str_SYMBOL_MINUS) }, + { be_const_key(SYMBOL_LOOP, 8), be_const_str(&be_local_const_str_SYMBOL_LOOP) }, + { be_const_key(SYMBOL_EYE_CLOSE, 66), be_const_str(&be_local_const_str_SYMBOL_EYE_CLOSE) }, + { be_const_key(SYMBOL_BACKSPACE, -1), be_const_str(&be_local_const_str_SYMBOL_BACKSPACE) }, + { be_const_key(SYMBOL_OK, -1), be_const_str(&be_local_const_str_SYMBOL_OK) }, + { be_const_key(SYMBOL_AUDIO, -1), be_const_str(&be_local_const_str_SYMBOL_AUDIO) }, + { be_const_key(SYMBOL_EYE_OPEN, -1), be_const_str(&be_local_const_str_SYMBOL_EYE_OPEN) }, + { be_const_key(SYMBOL_BLUETOOTH, -1), be_const_str(&be_local_const_str_SYMBOL_BLUETOOTH) }, + { be_const_key(SYMBOL_VIDEO, -1), be_const_str(&be_local_const_str_SYMBOL_VIDEO) }, + { be_const_key(SYMBOL_HOME, -1), be_const_str(&be_local_const_str_SYMBOL_HOME) }, + { be_const_key(SYMBOL_BATTERY_2, -1), be_const_str(&be_local_const_str_SYMBOL_BATTERY_2) }, + { be_const_key(SYMBOL_COPY, -1), be_const_str(&be_local_const_str_SYMBOL_COPY) }, + { be_const_key(SYMBOL_DRIVE, -1), be_const_str(&be_local_const_str_SYMBOL_DRIVE) }, + { be_const_key(montserrat_font, 30), be_const_func(lv0_load_montserrat_font) }, + { be_const_key(SYMBOL_PREV, -1), be_const_str(&be_local_const_str_SYMBOL_PREV) }, + { be_const_key(SYMBOL_BATTERY_1, -1), be_const_str(&be_local_const_str_SYMBOL_BATTERY_1) }, + { be_const_key(SYMBOL_FILE, -1), be_const_str(&be_local_const_str_SYMBOL_FILE) }, + { be_const_key(SYMBOL_CHARGE, -1), be_const_str(&be_local_const_str_SYMBOL_CHARGE) }, }; static be_define_const_map( m_liblvgl_map, - 72 + 67 ); static be_define_const_module( diff --git a/lib/libesp32/Berry/include/be_lvgl.h b/lib/libesp32/Berry/include/be_lvgl.h new file mode 100644 index 000000000..8809bcf13 --- /dev/null +++ b/lib/libesp32/Berry/include/be_lvgl.h @@ -0,0 +1,39 @@ +/******************************************************************** + * Tasmota LVGL Headers + *******************************************************************/ +#ifndef __BE_LVGL_H__ +#define __BE_LVGL_H__ + +#include "be_constobj.h" + +#ifdef USE_LVGL + +#include "lvgl.h" + +#ifdef __cplusplus +extern "C" { +#endif + // table of functions per class + typedef struct lvbe_call_c_t { + const char * name; + void * func; + const char * return_type; + const char * arg_type; + } lvbe_call_c_t; + + // list of classes and function tables + typedef struct lvbe_call_c_classes_t { + const char * name; + const lvbe_call_c_t * func_table; + size_t size; + } lvbe_call_c_classes_t; + extern const lvbe_call_c_classes_t lv_classes[]; + extern const size_t lv_classes_size; + +#ifdef __cplusplus +} +#endif + +#endif // USE_LVGL + +#endif // __BE_LVGL_H__ \ No newline at end of file diff --git a/lib/libesp32/Berry/src/be_class.c b/lib/libesp32/Berry/src/be_class.c index ed475af7e..68643167a 100644 --- a/lib/libesp32/Berry/src/be_class.c +++ b/lib/libesp32/Berry/src/be_class.c @@ -216,14 +216,30 @@ int be_instance_member(bvm *vm, binstance *obj, bstring *name, bvalue *dst) return type; } -bbool be_instance_setmember(bvm *vm, binstance *obj, bstring *name, bvalue *src) +bbool be_instance_setmember(bvm *vm, binstance *o, bstring *name, bvalue *src) { bvalue v; be_assert(name != NULL); - obj = instance_member(vm, obj, name, &v); + binstance * obj = instance_member(vm, o, name, &v); if (obj && var_istype(&v, MT_VARIABLE)) { obj->members[var_toint(&v)] = *src; return btrue; + } else { + obj = instance_member(vm, o, str_literal(vm, "setmember"), &v); + if (obj && var_type(&v) == MT_VARIABLE) { + v = obj->members[v.v.i]; + } + if (var_basetype(&v) == BE_FUNCTION) { + bvalue *top = vm->top; + var_setval(top, &v); + var_setinstance(top + 1, o); /* move instance to argv[0] */ + var_setstr(top + 2, name); /* move method name to argv[1] */ + var_setval(top + 3, src); /* move method name to argv[1] */ + vm->top += 4; /* prevent collection results */ + be_dofunc(vm, top, 3); /* call method 'member' */ + vm->top -= 4; + return var_tobool(top); + } } return bfalse; } diff --git a/lib/libesp32/Berry/src/be_vm.c b/lib/libesp32/Berry/src/be_vm.c index b7ae48b01..a5ade07ab 100644 --- a/lib/libesp32/Berry/src/be_vm.c +++ b/lib/libesp32/Berry/src/be_vm.c @@ -778,7 +778,7 @@ newframe: /* a new call frame */ binstance *obj = var_toobj(b); int type = obj_attribute(vm, b, c, a); reg = vm->reg; - if (var_basetype(a) == BE_FUNCTION) { + if (basetype(type) == BE_FUNCTION) { a[1] = self; } else { vm_error(vm, "attribute_error", @@ -793,9 +793,23 @@ newframe: /* a new call frame */ var_settype(a, NOT_METHOD); a[1] = *src; } else { - vm_error(vm, "attribute_error", - "module '%s' has no method '%s'", - be_module_name(module), str(attr)); + bvalue *member = be_module_attr(vm, module, str_literal(vm, "member")); + var_setnil(a); + if (member && var_basetype(member) == BE_FUNCTION) { + bvalue *top = vm->top; + top[0] = *member; + top[1] = *c; /* move name to argv[0] */ + vm->top += 2; /* prevent collection results */ + be_dofunc(vm, top, 1); /* call method 'method' */ + vm->top -= 2; + var_settype(a, NOT_METHOD); + a[1] = *vm->top; /* copy result to R(A) */ + } + if (var_basetype(a) == BE_NIL) { + vm_error(vm, "attribute_error", + "module '%s' has no method '%s'", + be_module_name(module), str(attr)); + } } } else { attribute_error(vm, "method", b, c); diff --git a/tasmota/lvgl_berry/be_lv_c_mapping.h b/tasmota/lvgl_berry/be_lv_c_mapping.h index 4c1b81cee..a8beadc43 100644 --- a/tasmota/lvgl_berry/be_lv_c_mapping.h +++ b/tasmota/lvgl_berry/be_lv_c_mapping.h @@ -7,20 +7,6 @@ extern "C" { #endif -// table of functions per class -// typedef struct lvbe_call_c_t { -// const char * name; -// void * func; -// const char * return_type; -// const char * arg_type; -// } lvbe_call_c_t; - -// list of classes and function tables -// typedef struct lvbe_call_c_classes_t { -// const char * name; -// const lvbe_call_c_t * func_table; -// size_t size; -// } lvbe_call_c_classes_t; /* `lv_img` methods */ diff --git a/tasmota/lvgl_berry/tasmota_lv_conf.h b/tasmota/lvgl_berry/tasmota_lv_conf.h index 9aa9e726a..5dbd9ca5d 100644 --- a/tasmota/lvgl_berry/tasmota_lv_conf.h +++ b/tasmota/lvgl_berry/tasmota_lv_conf.h @@ -357,7 +357,7 @@ typedef void * lv_indev_drv_user_data_t; /*Type of user data in the i * The behavior of asserts can be overwritten by redefining them here. * E.g. #define LV_ASSERT_MEM(p) */ -#define LV_USE_DEBUG 1 +#define LV_USE_DEBUG 0 #if LV_USE_DEBUG /*Check if the parameter is NULL. (Quite fast) */ @@ -499,13 +499,15 @@ typedef void * lv_font_user_data_t; * texts and borders will be black and the background will be * white. Else the colors are inverted. * No flags. Set LV_THEME_DEFAULT_FLAG 0 */ -#define LV_USE_THEME_MONO 1 +#define LV_USE_THEME_MONO 0 #define LV_THEME_DEFAULT_INCLUDE /*Include a header for the init. function*/ #define LV_THEME_DEFAULT_INIT lv_theme_material_init +// #define LV_THEME_DEFAULT_INIT lv_theme_empty_init #define LV_THEME_DEFAULT_COLOR_PRIMARY lv_color_hex(0x01a2b1) #define LV_THEME_DEFAULT_COLOR_SECONDARY lv_color_hex(0x44d1b6) -#define LV_THEME_DEFAULT_FLAG LV_THEME_MATERIAL_FLAG_LIGHT +#define LV_THEME_DEFAULT_FLAG LV_THEME_MATERIAL_FLAG_DARK +// #define LV_THEME_DEFAULT_FLAG 0 // #define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_14 #define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_10 #define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_14 diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index a9b853734..cc6d4ef49 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -937,6 +937,7 @@ #define USE_LVGL_FREETYPE_MAX_FACES 64 // max number of FreeType faces in cache #define USE_LVGL_FREETYPE_MAX_SIZES 4 // max number of sizes in cache #define USE_LVGL_FREETYPE_MAX_BYTES 16*1024 // max bytes in cache + #define USE_LVGL_FREETYPE_MAX_BYTES_PSRAM 64*1024 // max bytes in cache when using PSRAM #define USE_LVGL_BG_DEFAULT 0x000000 // Default color for the uninitialized background screen (black) diff --git a/tasmota/xdrv_52_3_berry_lvgl.ino b/tasmota/xdrv_52_3_berry_lvgl.ino index 5fb4fa5ff..180c4fa62 100644 --- a/tasmota/xdrv_52_3_berry_lvgl.ino +++ b/tasmota/xdrv_52_3_berry_lvgl.ino @@ -23,6 +23,7 @@ #include #include "lvgl.h" +#include "be_lvgl.h" #include "Adafruit_LvGL_Glue.h" #ifdef USE_LVGL_FREETYPE @@ -352,23 +353,6 @@ extern "C" { return be_call_c_func(vm, func, return_type, arg_type); } - // table of functions per class - typedef struct lvbe_call_c_t { - const char * name; - void * func; - const char * return_type; - const char * arg_type; - } lvbe_call_c_t; - - // list of classes and function tables - typedef struct lvbe_call_c_classes_t { - const char * name; - const lvbe_call_c_t * func_table; - size_t size; - } lvbe_call_c_classes_t; - extern const lvbe_call_c_classes_t lv_classes[]; - extern const size_t lv_classes_size; - // virtual method, arg1: instance, arg2: name of method int lvx_member(bvm *vm) { int32_t argc = be_top(vm); // Get the number of arguments @@ -449,7 +433,7 @@ extern "C" { } be_return(vm); } else { // class name - // AddLog(LOG_LEVEL_INFO, ">> be_call_c_func, create_obj", ret); + // AddLog(LOG_LEVEL_INFO, ">> be_call_c_func, create_obj", ret); be_getglobal(vm, return_type); // stack = class be_pushcomptr(vm, (void*) -1); // stack = class, -1 be_pushcomptr(vm, (void*) ret); // stack = class, -1, ptr @@ -800,6 +784,10 @@ extern "C" { int32_t value; } lvbe_constant_t; + + extern const lvbe_call_c_t lv_func[]; + extern const size_t lv_func_size; + extern const lvbe_constant_t lv0_constants[]; extern const size_t lv0_constants_size; @@ -808,27 +796,40 @@ extern "C" { int32_t argc = be_top(vm); // Get the number of arguments if (argc == 1 && be_isstring(vm, 1)) { const char * needle = be_tostring(vm, 1); - int32_t low = 0; - int32_t high = lv0_constants_size - 1; - int32_t mid = (low + high) / 2; - // start a dissect - while (low <= high) { - int32_t comp = strcmp(needle, lv0_constants[mid].name); - if (comp < 0) { - high = mid - 1; - } else if (comp > 0) { - low = mid + 1; - } else { - break; - } - mid = (low + high) / 2; - } - if (low <= high) { + + int32_t constant_idx = bin_search(needle, &lv0_constants[0].name, sizeof(lv0_constants[0]), lv0_constants_size); + + if (constant_idx >= 0) { // we did have a match, low == high - be_pushint(vm, lv0_constants[mid].value); + be_pushint(vm, lv0_constants[constant_idx].value); be_return(vm); } else { - be_return_nil(vm); + // search for a method with this name + + int32_t method_idx = bin_search(needle, &lv_func[0].name, sizeof(lv_func[0]), lv_func_size); + + if (method_idx >= 0) { + const lvbe_call_c_t * method = &lv_func[method_idx]; + // push native closure + be_pushntvclosure(vm, &lvx_call_c, 3); // 3 upvals + + be_pushcomptr(vm, method->func); + be_setupval(vm, -2, 0); + be_pop(vm, 1); + + be_pushstring(vm, method->return_type); + be_setupval(vm, -2, 1); + be_pop(vm, 1); + + be_pushstring(vm, method->arg_type); + be_setupval(vm, -2, 2); + be_pop(vm, 1); + + // all good + be_return(vm); + } else { + be_return_nil(vm); + } } } be_raise(vm, kTypeError, nullptr); @@ -942,23 +943,6 @@ extern "C" { return more_to_report; } - /*********************************************************************************************\ - * Methods specific to Tasmota LVGL - \*********************************************************************************************/ - // lv.scr_act() -> lv_obj() instance - int lv0_scr_act(bvm *vm) { return lv0_lvobj__void_call(vm, &lv_scr_act); } - int lv0_layer_top(bvm *vm) { return lv0_lvobj__void_call(vm, &lv_layer_top); } - int lv0_layer_sys(bvm *vm) { return lv0_lvobj__void_call(vm, &lv_layer_sys); } - - int lv0_get_hor_res(bvm *vm) { - be_pushint(vm, lv_disp_get_hor_res(lv_disp_get_default())); - be_return(vm); - } - int lv0_get_ver_res(bvm *vm) { - be_pushint(vm, lv_disp_get_ver_res(lv_disp_get_default())); - be_return(vm); - } - /*********************************************************************************************\ * Support for lv_indev and objects that don't need creator \*********************************************************************************************/ diff --git a/tasmota/xdrv_54_lvgl.ino b/tasmota/xdrv_54_lvgl.ino index 856a55ba0..f52de88fe 100644 --- a/tasmota/xdrv_54_lvgl.ino +++ b/tasmota/xdrv_54_lvgl.ino @@ -428,7 +428,7 @@ void start_lvgl(const char * uconfig) { // initialize the FreeType renderer lv_freetype_init(USE_LVGL_FREETYPE_MAX_FACES, USE_LVGL_FREETYPE_MAX_SIZES, - USE_LVGL_FREETYPE_MAX_BYTES); + psramFound() ? USE_LVGL_FREETYPE_MAX_BYTES_PSRAM : USE_LVGL_FREETYPE_MAX_BYTES); #endif AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_LVGL "LVGL initialized")); diff --git a/tools/lv_berry/convert.py b/tools/lv_berry/convert.py index ee17241ae..424919242 100644 --- a/tools/lv_berry/convert.py +++ b/tools/lv_berry/convert.py @@ -202,17 +202,26 @@ with open(lv_module_file) as f: lv_module.append( [ None, l_raw ] ) # if key in None then add comment line l_raw = re.sub('//.*$', '', l_raw) # remove trailing comments l_raw = re.sub('\s+', '', l_raw) # remove all spaces + l_raw = re.sub(',.*$', '', l_raw) # remove comma and anything after it if (len(l_raw) == 0): continue k_v = l_raw.split("=") - if len(k_v) != 2: + if len(k_v) > 2: print(f"Error: cannot match {l_raw}") continue + # extract the key name k = k_v[0] + if k.startswith("_"): + continue # skip any label starting with '_' k = re.sub('^LV_', '', k) # remove remove any LV_ prefix - v = k_v[1] - if k is None or v is None: continue - v_num = try_int(eval(v)) + if len(k_v) == 2: # value is included + v = k_v[1] + if k is None or v is None: continue + v_num = try_int(eval(v)) + else: # no value, we use the C value instead + v_num = None + v = None + if not k.isidentifier(): print(f"Error: {k} is not an identifier") @@ -221,7 +230,7 @@ with open(lv_module_file) as f: if v_num is not None: lv_module.append( [k, v_num] ) else: - lv_module.append( [k, v] ) # keep as string + lv_module.append( [k, v] ) # keep as string or None # recursively try to match value # TODO @@ -263,20 +272,6 @@ print(""" extern "C" { #endif -// table of functions per class -// typedef struct lvbe_call_c_t { -// const char * name; -// void * func; -// const char * return_type; -// const char * arg_type; -// } lvbe_call_c_t; - -// list of classes and function tables -// typedef struct lvbe_call_c_classes_t { -// const char * name; -// const lvbe_call_c_t * func_table; -// size_t size; -// } lvbe_call_c_classes_t; """) @@ -368,6 +363,7 @@ print(""" #ifdef USE_LVGL #include "lvgl.h" +#include "be_lvgl.h" extern int lv0_init(bvm *vm); @@ -498,6 +494,7 @@ print("""/******************************************************************** #ifdef USE_LVGL #include "lvgl.h" +#include "be_lvgl.h" extern int lv0_member(bvm *vm); // resolve virtual members @@ -510,12 +507,32 @@ extern int lv0_load_seg7_font(bvm *vm); extern int lv0_load_font(bvm *vm); extern int lv0_load_freetype_font(bvm *vm); -extern int lv0_scr_act(bvm *vm); -extern int lv0_layer_top(bvm *vm); -extern int lv0_layer_sys(bvm *vm); -extern int lv0_get_hor_res(bvm *vm); -extern int lv0_get_ver_res(bvm *vm); extern int lv0_screenshot(bvm *vm); + +static int lv_get_hor_res(void) { + return lv_disp_get_hor_res(lv_disp_get_default()); +} +static int lv_get_ver_res(bvm *vm) { + return lv_disp_get_ver_res(lv_disp_get_default()); +} + +/* `lv` methods */ +const lvbe_call_c_t lv_func[] = { + // resolution + { "get_hor_res", (void*) &lv_get_hor_res, "i", "" }, + { "get_ver_res", (void*) &lv_get_ver_res, "i", "" }, + + // layers + { "layer_sys", (void*) &lv_layer_sys, "lv_obj", "" }, + { "layer_top", (void*) &lv_layer_top, "lv_obj", "" }, + + // screens + { "scr_act", (void*) &lv_scr_act, "lv_obj", "" }, + { "scr_load", (void*) &lv_scr_load, "", "(lv_obj)" }, + { "scr_load_anim", (void*) &lv_scr_load_anim, "", "(lv_obj)iiib" }, +}; +const size_t lv_func_size = sizeof(lv_func) / sizeof(lv_func[0]); + """) print(""" @@ -536,7 +553,10 @@ for k_v in lv_module: for k in sorted(lv_module2): v = lv_module2[k] - print(f" {{ \"{k}\", {v} }},") + if v is not None: + print(f" {{ \"{k}\", {v} }},") + else: + print(f" {{ \"{k}\", LV_{k} }},") print(""" }; @@ -653,13 +673,6 @@ print(""" be_native_module_function("load_font", lv0_load_font), be_native_module_function("load_freetype_font", lv0_load_freetype_font), - - // screen and layers - be_native_module_function("scr_act", lv0_scr_act), - be_native_module_function("layer_top", lv0_layer_top), - be_native_module_function("layer_sys", lv0_layer_sys), - be_native_module_function("get_hor_res", lv0_get_hor_res), - be_native_module_function("get_ver_res", lv0_get_ver_res), be_native_module_function("screenshot", lv0_screenshot), """) @@ -823,11 +836,6 @@ print(""" load_font, func(lv0_load_font) load_freetype_font, func(lv0_load_freetype_font) - scr_act, func(lv0_scr_act) - layer_top, func(lv0_layer_top) - layer_sys, func(lv0_layer_sys) - get_hor_res, func(lv0_get_hor_res) - get_ver_res, func(lv0_get_ver_res) screenshot, func(lv0_screenshot) """) diff --git a/tools/lv_berry/lv_module.h b/tools/lv_berry/lv_module.h index 482f3a045..a47312f24 100644 --- a/tools/lv_berry/lv_module.h +++ b/tools/lv_berry/lv_module.h @@ -1,93 +1,5 @@ - - -LV_ALIGN_CENTER = 0 -LV_ALIGN_IN_TOP_LEFT=1 -LV_ALIGN_IN_TOP_MID=2 -LV_ALIGN_IN_TOP_RIGHT=3 -LV_ALIGN_IN_BOTTOM_LEFT=4 -LV_ALIGN_IN_BOTTOM_MID=5 -LV_ALIGN_IN_BOTTOM_RIGHT=6 -LV_ALIGN_IN_LEFT_MID=7 -LV_ALIGN_IN_RIGHT_MID=8 -LV_ALIGN_OUT_TOP_LEFT=9 -LV_ALIGN_OUT_TOP_MID=10 -LV_ALIGN_OUT_TOP_RIGHT=11 -LV_ALIGN_OUT_BOTTOM_LEFT=12 -LV_ALIGN_OUT_BOTTOM_MID=13 -LV_ALIGN_OUT_BOTTOM_RIGHT=14 -LV_ALIGN_OUT_LEFT_TOP=15 -LV_ALIGN_OUT_LEFT_MID=16 -LV_ALIGN_OUT_LEFT_BOTTOM=17 -LV_ALIGN_OUT_RIGHT_TOP=18 -LV_ALIGN_OUT_RIGHT_MID=19 -LV_ALIGN_OUT_RIGHT_BOTTOM=20 - -LV_INDEV_STATE_REL = 0 -LV_INDEV_STATE_PR=1 -LV_DRAG_DIR_HOR = 0x1 -LV_DRAG_DIR_VER = 0x2 -LV_DRAG_DIR_BOTH = 0x3 -LV_DRAG_DIR_ONE = 0x4 -LV_GESTURE_DIR_TOP=5 -LV_GESTURE_DIR_BOTTOM=6 -LV_GESTURE_DIR_LEFT=7 -LV_GESTURE_DIR_RIGHT=8 - -LV_DISP_ROT_NONE = 0 -LV_DISP_ROT_90=1 -LV_DISP_ROT_180=2 -LV_DISP_ROT_270=3 - -LV_DISP_SIZE_SMALL=0 -LV_DISP_SIZE_MEDIUM=1 -LV_DISP_SIZE_LARGE=2 -LV_DISP_SIZE_EXTRA_LARGE=3 - -LV_DRAG_DIR_HOR = 0x1 -LV_DRAG_DIR_VER = 0x2 -LV_DRAG_DIR_BOTH = 0x3 -LV_DRAG_DIR_ONE = 0x4 - -LV_GESTURE_DIR_TOP=0 -LV_GESTURE_DIR_BOTTOM=1 -LV_GESTURE_DIR_LEFT=2 -LV_GESTURE_DIR_RIGHT=3 - -LV_ANIM_OFF=0 -LV_ANIM_ON=1 - -LV_BLEND_MODE_NORMAL=0 -LV_BLEND_MODE_ADDITIVE=1 -LV_BLEND_MODE_SUBTRACTIVE=2 - -// Obj parts -OBJ_PART_MAIN=0 -OBJ_PART_VIRTUAL_FIRST=1 -OBJ_PART_REAL_FIRST=0x40 -OBJ_PART_ALL=0xFF -// LV State -STATE_DEFAULT=0x00 -STATE_CHECKED=0x01 -STATE_FOCUSED=0x02 -STATE_EDITED=0x04 -STATE_HOVERED=0x08 -STATE_PRESSED=0x10 -STATE_DISABLED=0x20 -// OPA opacity -OPA_TRANSP=0 -OPA_0=0 -OPA_10=25 -OPA_20=51 -OPA_30=76 -OPA_40=102 -OPA_50=127 -OPA_60=153 -OPA_70=178 -OPA_80=204 -OPA_90=229 -OPA_100=255 -OPA_COVER=255 // LV Colors - we store in 24 bits format and will convert at runtime +// This is specific treatment because we keep colors in 24 bits format WHITE=0xFFFFFF SILVER=0xC0C0C0 GRAY=0x808080 @@ -106,503 +18,603 @@ NAVY=0x000080 MAGENTA=0xFF00FF PURPLE=0x800080 +// +LV_SCR_LOAD_ANIM_NONE +LV_SCR_LOAD_ANIM_OVER_LEFT +LV_SCR_LOAD_ANIM_OVER_RIGHT +LV_SCR_LOAD_ANIM_OVER_TOP +LV_SCR_LOAD_ANIM_OVER_BOTTOM +LV_SCR_LOAD_ANIM_MOVE_LEFT +LV_SCR_LOAD_ANIM_MOVE_RIGHT +LV_SCR_LOAD_ANIM_MOVE_TOP +LV_SCR_LOAD_ANIM_MOVE_BOTTOM +LV_SCR_LOAD_ANIM_FADE_ON + +LV_ALIGN_CENTER +LV_ALIGN_IN_TOP_LEFT +LV_ALIGN_IN_TOP_MID +LV_ALIGN_IN_TOP_RIGHT +LV_ALIGN_IN_BOTTOM_LEFT +LV_ALIGN_IN_BOTTOM_MID +LV_ALIGN_IN_BOTTOM_RIGHT +LV_ALIGN_IN_LEFT_MID +LV_ALIGN_IN_RIGHT_MID +LV_ALIGN_OUT_TOP_LEFT +LV_ALIGN_OUT_TOP_MID +LV_ALIGN_OUT_TOP_RIGHT +LV_ALIGN_OUT_BOTTOM_LEFT +LV_ALIGN_OUT_BOTTOM_MID +LV_ALIGN_OUT_BOTTOM_RIGHT +LV_ALIGN_OUT_LEFT_TOP +LV_ALIGN_OUT_LEFT_MID +LV_ALIGN_OUT_LEFT_BOTTOM +LV_ALIGN_OUT_RIGHT_TOP +LV_ALIGN_OUT_RIGHT_MID +LV_ALIGN_OUT_RIGHT_BOTTOM + +LV_INDEV_STATE_REL +LV_INDEV_STATE_PR +LV_DRAG_DIR_HOR +LV_DRAG_DIR_VER +LV_DRAG_DIR_BOTH +LV_DRAG_DIR_ONE +LV_GESTURE_DIR_TOP +LV_GESTURE_DIR_BOTTOM +LV_GESTURE_DIR_LEFT +LV_GESTURE_DIR_RIGHT + +LV_DISP_ROT_NONE +LV_DISP_ROT_90 +LV_DISP_ROT_180 +LV_DISP_ROT_270 + +LV_DISP_SIZE_SMALL +LV_DISP_SIZE_MEDIUM +LV_DISP_SIZE_LARGE +LV_DISP_SIZE_EXTRA_LARGE + +LV_DRAG_DIR_HOR +LV_DRAG_DIR_VER +LV_DRAG_DIR_BOTH +LV_DRAG_DIR_ONE + +LV_GESTURE_DIR_TOP +LV_GESTURE_DIR_BOTTOM +LV_GESTURE_DIR_LEFT +LV_GESTURE_DIR_RIGHT + +LV_ANIM_OFF +LV_ANIM_ON + +LV_BLEND_MODE_NORMAL +LV_BLEND_MODE_ADDITIVE +LV_BLEND_MODE_SUBTRACTIVE + +// Obj parts +OBJ_PART_MAIN +// OBJ_PART_VIRTUAL_FIRST +// OBJ_PART_REAL_FIRST +OBJ_PART_ALL +// LV State +STATE_DEFAULT +STATE_CHECKED +STATE_FOCUSED +STATE_EDITED +STATE_HOVERED +STATE_PRESSED +STATE_DISABLED +// OPA opacity +OPA_TRANSP +OPA_0 +OPA_10 +OPA_20 +OPA_30 +OPA_40 +OPA_50 +OPA_60 +OPA_70 +OPA_80 +OPA_90 +OPA_100 +OPA_COVER + // LV Groups -KEY_UP=17 -KEY_DOWN=18 -KEY_RIGHT=19 -KEY_LEFT=20 -KEY_ESC=27 -KEY_DEL=127 -KEY_BACKSPACE=8 -KEY_ENTER=10 -KEY_NEXT=9 -KEY_PREV=11 -KEY_HOME=2 -KEY_END=3 +KEY_UP +KEY_DOWN +KEY_RIGHT +KEY_LEFT +KEY_ESC +KEY_DEL +KEY_BACKSPACE +KEY_ENTER +KEY_NEXT +KEY_PREV +KEY_HOME +KEY_END // LV Style -BORDER_SIDE_NONE=0 -BORDER_SIDE_BOTTOM=1 -BORDER_SIDE_TOP=2 -BORDER_SIDE_LEFT=4 -BORDER_SIDE_RIGHT=8 -BORDER_SIDE_FULL=15 -BORDER_SIDE_INTERNAL=16 +BORDER_SIDE_NONE +BORDER_SIDE_BOTTOM +BORDER_SIDE_TOP +BORDER_SIDE_LEFT +BORDER_SIDE_RIGHT +BORDER_SIDE_FULL +BORDER_SIDE_INTERNAL -GRAD_DIR_NONE=0 -GRAD_DIR_VER=1 -GRAD_DIR_HOR=2 +GRAD_DIR_NONE +GRAD_DIR_VER +GRAD_DIR_HOR -LV_TEXT_DECOR_NONE = 0x00 -LV_TEXT_DECOR_UNDERLINE = 0x01 -LV_TEXT_DECOR_STRIKETHROUGH = 0x02 +LV_TEXT_DECOR_NONE +LV_TEXT_DECOR_UNDERLINE +LV_TEXT_DECOR_STRIKETHROUGH // LV Styles parts -LV_STYLE_RADIUS = (((0x0 << 4) + 0x0 + 1) | ((0) << 8)) -LV_STYLE_CLIP_CORNER = (((0x0 << 4) + 0x0 + 2) | ((0) << 8)) -LV_STYLE_SIZE = (((0x0 << 4) + 0x0 + 3) | ((0) << 8)) -LV_STYLE_TRANSFORM_WIDTH = (((0x0 << 4) + 0x0 + 4) | ((0) << 8)) -LV_STYLE_TRANSFORM_HEIGHT = (((0x0 << 4) + 0x0 + 5) | ((0) << 8)) -LV_STYLE_TRANSFORM_ANGLE = (((0x0 << 4) + 0x0 + 6) | ((0) << 8)) -LV_STYLE_TRANSFORM_ZOOM = (((0x0 << 4) + 0x0 + 7) | ((0) << 8)) -LV_STYLE_OPA_SCALE = (((0x0 << 4) + 0xC + 0) | (((1 << 7)) << 8)) +LV_STYLE_RADIUS +LV_STYLE_CLIP_CORNER +LV_STYLE_SIZE +LV_STYLE_TRANSFORM_WIDTH +LV_STYLE_TRANSFORM_HEIGHT +LV_STYLE_TRANSFORM_ANGLE +LV_STYLE_TRANSFORM_ZOOM +LV_STYLE_OPA_SCALE -LV_STYLE_PAD_TOP = (((0x1 << 4) + 0x0 + 0) | ((0) << 8)) -LV_STYLE_PAD_BOTTOM = (((0x1 << 4) + 0x0 + 1) | ((0) << 8)) -LV_STYLE_PAD_LEFT = (((0x1 << 4) + 0x0 + 2) | ((0) << 8)) -LV_STYLE_PAD_RIGHT = (((0x1 << 4) + 0x0 + 3) | ((0) << 8)) -LV_STYLE_PAD_INNER = (((0x1 << 4) + 0x0 + 4) | ((0) << 8)) -LV_STYLE_MARGIN_TOP = (((0x1 << 4) + 0x0 + 5) | ((0) << 8)) -LV_STYLE_MARGIN_BOTTOM = (((0x1 << 4) + 0x0 + 6) | ((0) << 8)) -LV_STYLE_MARGIN_LEFT = (((0x1 << 4) + 0x0 + 7) | ((0) << 8)) -LV_STYLE_MARGIN_RIGHT = (((0x1 << 4) + 0x0 + 8) | ((0) << 8)) +LV_STYLE_PAD_TOP +LV_STYLE_PAD_BOTTOM +LV_STYLE_PAD_LEFT +LV_STYLE_PAD_RIGHT +LV_STYLE_PAD_INNER +LV_STYLE_MARGIN_TOP +LV_STYLE_MARGIN_BOTTOM +LV_STYLE_MARGIN_LEFT +LV_STYLE_MARGIN_RIGHT -LV_STYLE_BG_BLEND_MODE = (((0x2 << 4) + 0x0 + 0) | ((0) << 8)) -LV_STYLE_BG_MAIN_STOP = (((0x2 << 4) + 0x0 + 1) | ((0) << 8)) -LV_STYLE_BG_GRAD_STOP = (((0x2 << 4) + 0x0 + 2) | ((0) << 8)) -LV_STYLE_BG_GRAD_DIR = (((0x2 << 4) + 0x0 + 3) | ((0) << 8)) -LV_STYLE_BG_COLOR = (((0x2 << 4) + 0x9 + 0) | ((0) << 8)) -LV_STYLE_BG_GRAD_COLOR = (((0x2 << 4) + 0x9 + 1) | ((0) << 8)) -LV_STYLE_BG_OPA = (((0x2 << 4) + 0xC + 0) | ((0) << 8)) +LV_STYLE_BG_BLEND_MODE +LV_STYLE_BG_MAIN_STOP +LV_STYLE_BG_GRAD_STOP +LV_STYLE_BG_GRAD_DIR +LV_STYLE_BG_COLOR +LV_STYLE_BG_GRAD_COLOR +LV_STYLE_BG_OPA -LV_STYLE_BORDER_WIDTH = (((0x3 << 4) + 0x0 + 0) | ((0) << 8)) -LV_STYLE_BORDER_SIDE = (((0x3 << 4) + 0x0 + 1) | ((0) << 8)) -LV_STYLE_BORDER_BLEND_MODE = (((0x3 << 4) + 0x0 + 2) | ((0) << 8)) -LV_STYLE_BORDER_POST = (((0x3 << 4) + 0x0 + 3) | ((0) << 8)) -LV_STYLE_BORDER_COLOR = (((0x3 << 4) + 0x9 + 0) | ((0) << 8)) -LV_STYLE_BORDER_OPA = (((0x3 << 4) + 0xC + 0) | ((0) << 8)) +LV_STYLE_BORDER_WIDTH +LV_STYLE_BORDER_SIDE +LV_STYLE_BORDER_BLEND_MODE +LV_STYLE_BORDER_POST +LV_STYLE_BORDER_COLOR +LV_STYLE_BORDER_OPA -LV_STYLE_OUTLINE_WIDTH = (((0x4 << 4) + 0x0 + 0) | ((0) << 8)) -LV_STYLE_OUTLINE_PAD = (((0x4 << 4) + 0x0 + 1) | ((0) << 8)) -LV_STYLE_OUTLINE_BLEND_MODE = (((0x4 << 4) + 0x0 + 2) | ((0) << 8)) -LV_STYLE_OUTLINE_COLOR = (((0x4 << 4) + 0x9 + 0) | ((0) << 8)) -LV_STYLE_OUTLINE_OPA = (((0x4 << 4) + 0xC + 0) | ((0) << 8)) +LV_STYLE_OUTLINE_WIDTH +LV_STYLE_OUTLINE_PAD +LV_STYLE_OUTLINE_BLEND_MODE +LV_STYLE_OUTLINE_COLOR +LV_STYLE_OUTLINE_OPA -LV_STYLE_SHADOW_WIDTH = (((0x5 << 4) + 0x0 + 0) | ((0) << 8)) -LV_STYLE_SHADOW_OFS_X = (((0x5 << 4) + 0x0 + 1) | ((0) << 8)) -LV_STYLE_SHADOW_OFS_Y = (((0x5 << 4) + 0x0 + 2) | ((0) << 8)) -LV_STYLE_SHADOW_SPREAD = (((0x5 << 4) + 0x0 + 3) | ((0) << 8)) -LV_STYLE_SHADOW_BLEND_MODE = (((0x5 << 4) + 0x0 + 4) | ((0) << 8)) -LV_STYLE_SHADOW_COLOR = (((0x5 << 4) + 0x9 + 0) | ((0) << 8)) -LV_STYLE_SHADOW_OPA = (((0x5 << 4) + 0xC + 0) | ((0) << 8)) +LV_STYLE_SHADOW_WIDTH +LV_STYLE_SHADOW_OFS_X +LV_STYLE_SHADOW_OFS_Y +LV_STYLE_SHADOW_SPREAD +LV_STYLE_SHADOW_BLEND_MODE +LV_STYLE_SHADOW_COLOR +LV_STYLE_SHADOW_OPA -LV_STYLE_PATTERN_BLEND_MODE = (((0x6 << 4) + 0x0 + 0) | ((0) << 8)) -LV_STYLE_PATTERN_REPEAT = (((0x6 << 4) + 0x0 + 1) | ((0) << 8)) -LV_STYLE_PATTERN_RECOLOR = (((0x6 << 4) + 0x9 + 0) | ((0) << 8)) -LV_STYLE_PATTERN_OPA = (((0x6 << 4) + 0xC + 0) | ((0) << 8)) -LV_STYLE_PATTERN_RECOLOR_OPA = (((0x6 << 4) + 0xC + 1) | ((0) << 8)) -LV_STYLE_PATTERN_IMAGE = (((0x6 << 4) + 0xE + 0) | ((0) << 8)) +LV_STYLE_PATTERN_BLEND_MODE +LV_STYLE_PATTERN_REPEAT +LV_STYLE_PATTERN_RECOLOR +LV_STYLE_PATTERN_OPA +LV_STYLE_PATTERN_RECOLOR_OPA +LV_STYLE_PATTERN_IMAGE -LV_STYLE_VALUE_LETTER_SPACE = (((0x7 << 4) + 0x0 + 0) | ((0) << 8)) -LV_STYLE_VALUE_LINE_SPACE = (((0x7 << 4) + 0x0 + 1) | ((0) << 8)) -LV_STYLE_VALUE_BLEND_MODE = (((0x7 << 4) + 0x0 + 2) | ((0) << 8)) -LV_STYLE_VALUE_OFS_X = (((0x7 << 4) + 0x0 + 3) | ((0) << 8)) -LV_STYLE_VALUE_OFS_Y = (((0x7 << 4) + 0x0 + 4) | ((0) << 8)) -LV_STYLE_VALUE_ALIGN = (((0x7 << 4) + 0x0 + 5) | ((0) << 8)) -LV_STYLE_VALUE_COLOR = (((0x7 << 4) + 0x9 + 0) | ((0) << 8)) -LV_STYLE_VALUE_OPA = (((0x7 << 4) + 0xC + 0) | ((0) << 8)) -LV_STYLE_VALUE_FONT = (((0x7 << 4) + 0xE + 0) | ((0) << 8)) -LV_STYLE_VALUE_STR = (((0x7 << 4) + 0xE + 1) | ((0) << 8)) +LV_STYLE_VALUE_LETTER_SPACE +LV_STYLE_VALUE_LINE_SPACE +LV_STYLE_VALUE_BLEND_MODE +LV_STYLE_VALUE_OFS_X +LV_STYLE_VALUE_OFS_Y +LV_STYLE_VALUE_ALIGN +LV_STYLE_VALUE_COLOR +LV_STYLE_VALUE_OPA +LV_STYLE_VALUE_FONT +LV_STYLE_VALUE_STR -LV_STYLE_TEXT_LETTER_SPACE = (((0x8 << 4) + 0x0 + 0) | (((1 << 7)) << 8)) -LV_STYLE_TEXT_LINE_SPACE = (((0x8 << 4) + 0x0 + 1) | (((1 << 7)) << 8)) -LV_STYLE_TEXT_DECOR = (((0x8 << 4) + 0x0 + 2) | (((1 << 7)) << 8)) -LV_STYLE_TEXT_BLEND_MODE = (((0x8 << 4) + 0x0 + 3) | (((1 << 7)) << 8)) -LV_STYLE_TEXT_COLOR = (((0x8 << 4) + 0x9 + 0) | (((1 << 7)) << 8)) -LV_STYLE_TEXT_SEL_COLOR = (((0x8 << 4) + 0x9 + 1) | (((1 << 7)) << 8)) -LV_STYLE_TEXT_SEL_BG_COLOR = (((0x8 << 4) + 0x9 + 2) | (((1 << 7)) << 8)) -LV_STYLE_TEXT_OPA = (((0x8 << 4) + 0xC + 0) | (((1 << 7)) << 8)) -LV_STYLE_TEXT_FONT = (((0x8 << 4) + 0xE + 0) | (((1 << 7)) << 8)) +LV_STYLE_TEXT_LETTER_SPACE +LV_STYLE_TEXT_LINE_SPACE +LV_STYLE_TEXT_DECOR +LV_STYLE_TEXT_BLEND_MODE +LV_STYLE_TEXT_COLOR +LV_STYLE_TEXT_SEL_COLOR +LV_STYLE_TEXT_SEL_BG_COLOR +LV_STYLE_TEXT_OPA +LV_STYLE_TEXT_FONT -LV_STYLE_LINE_WIDTH = (((0x9 << 4) + 0x0 + 0) | ((0) << 8)) -LV_STYLE_LINE_BLEND_MODE = (((0x9 << 4) + 0x0 + 1) | ((0) << 8)) -LV_STYLE_LINE_DASH_WIDTH = (((0x9 << 4) + 0x0 + 2) | ((0) << 8)) -LV_STYLE_LINE_DASH_GAP = (((0x9 << 4) + 0x0 + 3) | ((0) << 8)) -LV_STYLE_LINE_ROUNDED = (((0x9 << 4) + 0x0 + 4) | ((0) << 8)) -LV_STYLE_LINE_COLOR = (((0x9 << 4) + 0x9 + 0) | ((0) << 8)) -LV_STYLE_LINE_OPA = (((0x9 << 4) + 0xC + 0) | ((0) << 8)) +LV_STYLE_LINE_WIDTH +LV_STYLE_LINE_BLEND_MODE +LV_STYLE_LINE_DASH_WIDTH +LV_STYLE_LINE_DASH_GAP +LV_STYLE_LINE_ROUNDED +LV_STYLE_LINE_COLOR +LV_STYLE_LINE_OPA -LV_STYLE_IMAGE_BLEND_MODE = (((0xA << 4) + 0x0 + 0) | (((1 << 7)) << 8)) -LV_STYLE_IMAGE_RECOLOR = (((0xA << 4) + 0x9 + 0) | (((1 << 7)) << 8)) -LV_STYLE_IMAGE_OPA = (((0xA << 4) + 0xC + 0) | (((1 << 7)) << 8)) -LV_STYLE_IMAGE_RECOLOR_OPA = (((0xA << 4) + 0xC + 1) | (((1 << 7)) << 8)) +LV_STYLE_IMAGE_BLEND_MODE +LV_STYLE_IMAGE_RECOLOR +LV_STYLE_IMAGE_OPA +LV_STYLE_IMAGE_RECOLOR_OPA -LV_STYLE_TRANSITION_TIME = (((0xB << 4) + 0x0 + 0) | ((0) << 8)) -LV_STYLE_TRANSITION_DELAY = (((0xB << 4) + 0x0 + 1) | ((0) << 8)) -LV_STYLE_TRANSITION_PROP_1 = (((0xB << 4) + 0x0 + 2) | ((0) << 8)) -LV_STYLE_TRANSITION_PROP_2 = (((0xB << 4) + 0x0 + 3) | ((0) << 8)) -LV_STYLE_TRANSITION_PROP_3 = (((0xB << 4) + 0x0 + 4) | ((0) << 8)) -LV_STYLE_TRANSITION_PROP_4 = (((0xB << 4) + 0x0 + 5) | ((0) << 8)) -LV_STYLE_TRANSITION_PROP_5 = (((0xB << 4) + 0x0 + 6) | ((0) << 8)) -LV_STYLE_TRANSITION_PROP_6 = (((0xB << 4) + 0x0 + 7) | ((0) << 8)) -LV_STYLE_TRANSITION_PATH = (((0xB << 4) + 0xE + 0) | ((0) << 8)) +LV_STYLE_TRANSITION_TIME +LV_STYLE_TRANSITION_DELAY +LV_STYLE_TRANSITION_PROP_1 +LV_STYLE_TRANSITION_PROP_2 +LV_STYLE_TRANSITION_PROP_3 +LV_STYLE_TRANSITION_PROP_4 +LV_STYLE_TRANSITION_PROP_5 +LV_STYLE_TRANSITION_PROP_6 +LV_STYLE_TRANSITION_PATH -LV_STYLE_SCALE_WIDTH = (((0xC << 4) + 0x0 + 0) | ((0) << 8)) -LV_STYLE_SCALE_BORDER_WIDTH = (((0xC << 4) + 0x0 + 1) | ((0) << 8)) -LV_STYLE_SCALE_END_BORDER_WIDTH = (((0xC << 4) + 0x0 + 2) | ((0) << 8)) -LV_STYLE_SCALE_END_LINE_WIDTH = (((0xC << 4) + 0x0 + 3) | ((0) << 8)) -LV_STYLE_SCALE_GRAD_COLOR = (((0xC << 4) + 0x9 + 0) | ((0) << 8)) -LV_STYLE_SCALE_END_COLOR = (((0xC << 4) + 0x9 + 1) | ((0) << 8)) +LV_STYLE_SCALE_WIDTH +LV_STYLE_SCALE_BORDER_WIDTH +LV_STYLE_SCALE_END_BORDER_WIDTH +LV_STYLE_SCALE_END_LINE_WIDTH +LV_STYLE_SCALE_GRAD_COLOR +LV_STYLE_SCALE_END_COLOR -LV_TXT_FLAG_NONE = 0x00 -LV_TXT_FLAG_RECOLOR = 0x01 -LV_TXT_FLAG_EXPAND = 0x02 -LV_TXT_FLAG_CENTER = 0x04 -LV_TXT_FLAG_RIGHT = 0x08 -LV_TXT_FLAG_FIT = 0x10 +LV_TXT_FLAG_NONE +LV_TXT_FLAG_RECOLOR +LV_TXT_FLAG_EXPAND +LV_TXT_FLAG_CENTER +LV_TXT_FLAG_RIGHT +LV_TXT_FLAG_FIT -LV_TXT_CMD_STATE_WAIT=0 -LV_TXT_CMD_STATE_PAR=1 -LV_TXT_CMD_STATE_IN=2 +LV_TXT_CMD_STATE_WAIT +LV_TXT_CMD_STATE_PAR +LV_TXT_CMD_STATE_IN -LV_FS_RES_OK = 0 -LV_FS_RES_HW_ERR=1 -LV_FS_RES_FS_ERR=2 -LV_FS_RES_NOT_EX=3 -LV_FS_RES_FULL=4 -LV_FS_RES_LOCKED=5 -LV_FS_RES_DENIED=6 -LV_FS_RES_BUSY=7 -LV_FS_RES_TOUT=8 -LV_FS_RES_NOT_IMP=9 -LV_FS_RES_OUT_OF_MEM=10 -LV_FS_RES_INV_PARAM=11 -LV_FS_RES_UNKNOWN=12 +LV_FS_RES_OK +LV_FS_RES_HW_ERR +LV_FS_RES_FS_ERR +LV_FS_RES_NOT_EX +LV_FS_RES_FULL +LV_FS_RES_LOCKED +LV_FS_RES_DENIED +LV_FS_RES_BUSY +LV_FS_RES_TOUT +LV_FS_RES_NOT_IMP +LV_FS_RES_OUT_OF_MEM +LV_FS_RES_INV_PARAM +LV_FS_RES_UNKNOWN -LV_FS_MODE_WR = 0x01 -LV_FS_MODE_RD = 0x02 +LV_FS_MODE_WR +LV_FS_MODE_RD -LV_EVENT_PRESSED=0 -LV_EVENT_PRESSING=1 -LV_EVENT_PRESS_LOST=2 -LV_EVENT_SHORT_CLICKED=3 -LV_EVENT_LONG_PRESSED=4 -LV_EVENT_LONG_PRESSED_REPEAT=5 +LV_EVENT_PRESSED +LV_EVENT_PRESSING +LV_EVENT_PRESS_LOST +LV_EVENT_SHORT_CLICKED +LV_EVENT_LONG_PRESSED +LV_EVENT_LONG_PRESSED_REPEAT -LV_EVENT_CLICKED=6 -LV_EVENT_RELEASED=7 -LV_EVENT_DRAG_BEGIN=8 -LV_EVENT_DRAG_END=9 -LV_EVENT_DRAG_THROW_BEGIN=10 -LV_EVENT_GESTURE=11 -LV_EVENT_KEY=12 -LV_EVENT_FOCUSED=13 -LV_EVENT_DEFOCUSED=14 -LV_EVENT_LEAVE=15 -LV_EVENT_VALUE_CHANGED=16 -LV_EVENT_INSERT=17 -LV_EVENT_REFRESH=18 -LV_EVENT_APPLY=19 -LV_EVENT_CANCEL=20 -LV_EVENT_DELETE=21 +LV_EVENT_CLICKED +LV_EVENT_RELEASED +LV_EVENT_DRAG_BEGIN +LV_EVENT_DRAG_END +LV_EVENT_DRAG_THROW_BEGIN +LV_EVENT_GESTURE +LV_EVENT_KEY +LV_EVENT_FOCUSED +LV_EVENT_DEFOCUSED +LV_EVENT_LEAVE +LV_EVENT_VALUE_CHANGED +LV_EVENT_INSERT +LV_EVENT_REFRESH +LV_EVENT_APPLY +LV_EVENT_CANCEL +LV_EVENT_DELETE -LV_PROTECT_NONE = 0x00 -LV_PROTECT_CHILD_CHG = 0x01 -LV_PROTECT_PARENT = 0x02 -LV_PROTECT_POS = 0x04 -LV_PROTECT_FOLLOW = 0x08 +LV_PROTECT_NONE +LV_PROTECT_CHILD_CHG +LV_PROTECT_PARENT +LV_PROTECT_POS +LV_PROTECT_FOLLOW -LV_PROTECT_PRESS_LOST = 0x10 +LV_PROTECT_PRESS_LOST -LV_PROTECT_CLICK_FOCUS = 0x20 -LV_PROTECT_EVENT_TO_DISABLED = 0x40 +LV_PROTECT_CLICK_FOCUS +LV_PROTECT_EVENT_TO_DISABLED // LV Widgets // LV Arc -ARC_TYPE_NORMAL=0 -ARC_TYPE_SYMMETRIC=1 -ARC_TYPE_REVERSE=2 +ARC_TYPE_NORMAL +ARC_TYPE_SYMMETRIC +ARC_TYPE_REVERSE -ARC_PART_BG=0 -ARC_PART_INDIC=1 -ARC_PART_KNOB=2 +ARC_PART_BG +ARC_PART_INDIC +ARC_PART_KNOB // LV Bar -BAR_TYPE_NORMAL=0 -BAR_TYPE_SYMMETRICAL=1 -BAR_TYPE_CUSTOM=2 +BAR_TYPE_NORMAL +BAR_TYPE_SYMMETRICAL +BAR_TYPE_CUSTOM // Lv Btn -BTN_STATE_RELEASED=0 -BTN_STATE_PRESSED=1 -BTN_STATE_DISABLED=2 -BTN_STATE_CHECKED_RELEASED=3 -BTN_STATE_CHECKED_PRESSED=4 -BTN_STATE_CHECKED_DISABLED=5 +BTN_STATE_RELEASED +BTN_STATE_PRESSED +BTN_STATE_DISABLED +BTN_STATE_CHECKED_RELEASED +BTN_STATE_CHECKED_PRESSED +BTN_STATE_CHECKED_DISABLED // Lv BtnMatrix -BTNMATRIX_CTRL_HIDDEN=0x0008 -BTNMATRIX_CTRL_NO_REPEAT=0x0010 -BTNMATRIX_CTRL_DISABLED=0x0020 -BTNMATRIX_CTRL_CHECKABLE=0x0040 -BTNMATRIX_CTRL_CHECK_STATE=0x0080 -BTNMATRIX_CTRL_CLICK_TRIG=0x0100 +BTNMATRIX_CTRL_HIDDEN +BTNMATRIX_CTRL_NO_REPEAT +BTNMATRIX_CTRL_DISABLED +BTNMATRIX_CTRL_CHECKABLE +BTNMATRIX_CTRL_CHECK_STATE +BTNMATRIX_CTRL_CLICK_TRIG // LV Calendar -CALENDAR_PART_BG=0 -CALENDAR_PART_HEADER=1 -CALENDAR_PART_DAY_NAMES=2 -CALENDAR_PART_DATE=3 +CALENDAR_PART_BG +CALENDAR_PART_HEADER +CALENDAR_PART_DAY_NAMES +CALENDAR_PART_DATE // LV Chart -CHART_TYPE_NONE=0 -CHART_TYPE_LINE=1 -CHART_TYPE_COLUMN=2 +CHART_TYPE_NONE +CHART_TYPE_LINE +CHART_TYPE_COLUMN -CHART_UPDATE_MODE_SHIFT=0 -CHART_UPDATE_MODE_CIRCULAR=1 +CHART_UPDATE_MODE_SHIFT +CHART_UPDATE_MODE_CIRCULAR -CHART_AXIS_PRIMARY_Y=0 -CHART_AXIS_SECONDARY_Y=1 +CHART_AXIS_PRIMARY_Y +CHART_AXIS_SECONDARY_Y -CHART_CURSOR_NONE=0 -CHART_CURSOR_RIGHT=1 -CHART_CURSOR_UP=2 -CHART_CURSOR_LEFT=4 -CHART_CURSOR_DOWN=8 +CHART_CURSOR_NONE +CHART_CURSOR_RIGHT +CHART_CURSOR_UP +CHART_CURSOR_LEFT +CHART_CURSOR_DOWN -CHART_AXIS_SKIP_LAST_TICK=0 -CHART_AXIS_DRAW_LAST_TICK=1 -CHART_AXIS_INVERSE_LABELS_ORDER=2 +CHART_AXIS_SKIP_LAST_TICK +CHART_AXIS_DRAW_LAST_TICK +CHART_AXIS_INVERSE_LABELS_ORDER -CHART_PART_BG=0 -CHART_PART_SERIES_BG=1 -CHART_PART_SERIES=2 -CHART_PART_CURSOR=3 +CHART_PART_BG +CHART_PART_SERIES_BG +CHART_PART_SERIES +CHART_PART_CURSOR // LV Checkbox -CHECKBOX_PART_BG=0 -CHECKBOX_PART_BULLET=0x40 +CHECKBOX_PART_BG +CHECKBOX_PART_BULLET // LV Cont -LAYOUT_OFF=0 -LAYOUT_CENTER=1 -LAYOUT_COLUMN_LEFT=2 -LAYOUT_COLUMN_MID=3 -LAYOUT_COLUMN_RIGHT=4 -LAYOUT_ROW_TOP=5 -LAYOUT_ROW_MID=6 -LAYOUT_ROW_BOTTOM=7 -LAYOUT_PRETTY_TOP=8 -LAYOUT_PRETTY_MID=9 -LAYOUT_PRETTY_BOTTOM=10 -LAYOUT_GRID=11 +LAYOUT_OFF +LAYOUT_CENTER +LAYOUT_COLUMN_LEFT +LAYOUT_COLUMN_MID +LAYOUT_COLUMN_RIGHT +LAYOUT_ROW_TOP +LAYOUT_ROW_MID +LAYOUT_ROW_BOTTOM +LAYOUT_PRETTY_TOP +LAYOUT_PRETTY_MID +LAYOUT_PRETTY_BOTTOM +LAYOUT_GRID -FIT_NONE=0 -FIT_TIGHT=1 -FIT_PARENT=2 -FIT_MAX=3 +FIT_NONE +FIT_TIGHT +FIT_PARENT +FIT_MAX // LV Cpicker -CPICKER_TYPE_RECT=0 -CPICKER_TYPE_DISC=1 +CPICKER_TYPE_RECT +CPICKER_TYPE_DISC -CPICKER_COLOR_MODE_HUE=0 -CPICKER_COLOR_MODE_SATURATION=1 -CPICKER_COLOR_MODE_VALUE=2 +CPICKER_COLOR_MODE_HUE +CPICKER_COLOR_MODE_SATURATION +CPICKER_COLOR_MODE_VALUE -CPICKER_PART_MAIN=0 -CPICKER_PART_KNOB=1 // _LV_OBJ_PART_VIRTUAL_LAST +CPICKER_PART_MAIN +CPICKER_PART_KNOB // LV Dropdown -DROPDOWN_DIR_DOWN=0 -DROPDOWN_DIR_UP=1 -DROPDOWN_DIR_LEFT=2 -DROPDOWN_DIR_RIGHT=3 +DROPDOWN_DIR_DOWN +DROPDOWN_DIR_UP +DROPDOWN_DIR_LEFT +DROPDOWN_DIR_RIGHT -DROPDOWN_PART_MAIN=0 -DROPDOWN_PART_LIST=0x40 // _LV_OBJ_PART_REAL_LAST -DROPDOWN_PART_SCROLLBAR=0x41 -DROPDOWN_PART_SELECTED=0x42 +DROPDOWN_PART_MAIN +DROPDOWN_PART_LIST +DROPDOWN_PART_SCROLLBAR +DROPDOWN_PART_SELECTED // LV Gauge -GAUGE_PART_MAIN=0 -GAUGE_PART_MAJOR=1 -GAUGE_PART_NEEDLE=2 +GAUGE_PART_MAIN +GAUGE_PART_MAJOR +GAUGE_PART_NEEDLE // LV Img // LV Imgbtn // LV Keyboard -KEYBOARD_MODE_TEXT_LOWER=0 -KEYBOARD_MODE_TEXT_UPPER=1 -KEYBOARD_MODE_SPECIAL=2 -KEYBOARD_MODE_NUM=3 +KEYBOARD_MODE_TEXT_LOWER +KEYBOARD_MODE_TEXT_UPPER +KEYBOARD_MODE_SPECIAL +KEYBOARD_MODE_NUM -KEYBOARD_PART_BG=0 -KEYBOARD_PART_BTN=1 +KEYBOARD_PART_BG +KEYBOARD_PART_BTN // LV Label -LABEL_LONG_EXPAND=0 -LABEL_LONG_BREAK=1 -LABEL_LONG_DOT=2 -LABEL_LONG_SROLL=3 -LV_LABEL_LONG_SROLL_CIRC=4 -LABEL_LONG_CROP=5 +LABEL_LONG_EXPAND +LABEL_LONG_BREAK +LABEL_LONG_DOT +LABEL_LONG_SROLL +LV_LABEL_LONG_SROLL_CIRC +LABEL_LONG_CROP -LABEL_ALIGN_LEFT=0 -LABEL_ALIGN_CENTER=1 -LABEL_ALIGN_RIGHT=2 -LABEL_ALIGN_AUTO=3 +LABEL_ALIGN_LEFT +LABEL_ALIGN_CENTER +LABEL_ALIGN_RIGHT +LABEL_ALIGN_AUTO // LV Led -LED_PART_MAIN=0 +LED_PART_MAIN // LV Line -LINEMETER_PART_MAIN=0 +LINEMETER_PART_MAIN // LV List -LIST_PART_BG=0 -LIST_PART_SCROLLBAR=1 -LIST_PART_EDGE_FLASH=2 +LIST_PART_BG +LIST_PART_SCROLLBAR +LIST_PART_EDGE_FLASH // LV Msgbox // enum { -// LV_MSGBOX_PART_BG = LV_CONT_PART_MAIN, + LV_MSGBOX_PART_BG -// LV_MSGBOX_PART_BTN_BG = _LV_CONT_PART_REAL_LAST, -// LV_MSGBOX_PART_BTN, + LV_MSGBOX_PART_BTN_BG + LV_MSGBOX_PART_BTN, // }; // LV Objmask -OBJMASK_PART_MAIN=0 +OBJMASK_PART_MAIN -// LV Templ -TEMPL_STYLE_X=0 -TEMPL_STYLE_Y=1 +// // LV Templ +// TEMPL_STYLE_X +// TEMPL_STYLE_Y // LV Page -SCROLLBAR_MODE_OFF=0 -SCROLLBAR_MODE_ON=1 -SCROLLBAR_MODE_DRAG=2 -SCROLLBAR_MODE_AUTO=3 -SCROLLBAR_MODE_HIDE=4 -SCROLLBAR_MODE_UNHIDE=8 +SCROLLBAR_MODE_OFF +SCROLLBAR_MODE_ON +SCROLLBAR_MODE_DRAG +SCROLLBAR_MODE_AUTO +SCROLLBAR_MODE_HIDE +SCROLLBAR_MODE_UNHIDE -PAGE_EDGE_LEFT=1 -PAGE_EDGE_TOP=2 -PAGE_EDGE_RIGHT=4 -PAGE_EDGE_BOTTOM=8 +PAGE_EDGE_LEFT +PAGE_EDGE_TOP +PAGE_EDGE_RIGHT +PAGE_EDGE_BOTTOM // enum { -// LV_PAGE_PART_BG = LV_CONT_PART_MAIN, -// LV_PAGE_PART_SCROLLBAR = _LV_OBJ_PART_VIRTUAL_LAST, -// LV_PAGE_PART_EDGE_FLASH, -// _LV_PAGE_PART_VIRTUAL_LAST, + LV_PAGE_PART_BG + LV_PAGE_PART_SCROLLBAR + LV_PAGE_PART_EDGE_FLASH, + _LV_PAGE_PART_VIRTUAL_LAST, -// LV_PAGE_PART_SCROLLABLE = _LV_OBJ_PART_REAL_LAST, -// _LV_PAGE_PART_REAL_LAST, + LV_PAGE_PART_SCROLLABLE + _LV_PAGE_PART_REAL_LAST, // }; // LV Roller -ROLLER_MODE_NORMAL=0 -ROLLER_MODE_INFINITE=1 +ROLLER_MODE_NORMAL +ROLLER_MODE_INFINITE // enum { -// LV_ROLLER_PART_BG = LV_PAGE_PART_BG, -// LV_ROLLER_PART_SELECTED = _LV_PAGE_PART_VIRTUAL_LAST, + LV_ROLLER_PART_BG + LV_ROLLER_PART_SELECTED // _LV_ROLLER_PART_VIRTUAL_LAST, // }; // LV Slider -SLIDER_TYPE_NORMAL=0 -SLIDER_TYPE_SYMMETRICAL=1 -SLIDER_TYPE_RANGE=2 +SLIDER_TYPE_NORMAL +SLIDER_TYPE_SYMMETRICAL +SLIDER_TYPE_RANGE // enum { -// LV_SLIDER_PART_BG, /** Slider background style. */ -// LV_SLIDER_PART_INDIC, /** Slider indicator (filled area) style. */ -// LV_SLIDER_PART_KNOB, /** Slider knob style. */ + LV_SLIDER_PART_BG, /** Slider background style. */ + LV_SLIDER_PART_INDIC, /** Slider indicator (filled area) style. */ + LV_SLIDER_PART_KNOB, /** Slider knob style. */ // }; // LV Spinbox // enum { -// LV_SPINBOX_PART_BG = LV_TEXTAREA_PART_BG, -// LV_SPINBOX_PART_CURSOR = LV_TEXTAREA_PART_CURSOR, -// _LV_SPINBOX_PART_VIRTUAL_LAST = _LV_TEXTAREA_PART_VIRTUAL_LAST, -// _LV_SPINBOX_PART_REAL_LAST = _LV_TEXTAREA_PART_REAL_LAST, + LV_SPINBOX_PART_BG + LV_SPINBOX_PART_CURSOR + _LV_SPINBOX_PART_VIRTUAL_LAST + _LV_SPINBOX_PART_REAL_LAST // }; // LV Spinner -SPINNER_TYPE_SPINNING_ARC=0 -SPINNER_TYPE_FILLSPIN_ARC=1 -SPINNER_TYPE_CONSTANT_ARC=2 +SPINNER_TYPE_SPINNING_ARC +SPINNER_TYPE_FILLSPIN_ARC +SPINNER_TYPE_CONSTANT_ARC -SPINNER_DIR_FORWARD=0 -SPINNER_DIR_BACKWARD=1 +SPINNER_DIR_FORWARD +SPINNER_DIR_BACKWARD // enum { -// LV_SPINNER_PART_BG = LV_ARC_PART_BG, -// LV_SPINNER_PART_INDIC = LV_ARC_PART_INDIC, -// _LV_SPINNER_PART_VIRTUAL_LAST, + LV_SPINNER_PART_BG + LV_SPINNER_PART_INDIC + _LV_SPINNER_PART_VIRTUAL_LAST, -// _LV_SPINNER_PART_REAL_LAST = _LV_ARC_PART_REAL_LAST, + _LV_SPINNER_PART_REAL_LAST // }; // LV Switch // enum { -// LV_SWITCH_PART_BG = LV_BAR_PART_BG, /**< Switch background. */ -// LV_SWITCH_PART_INDIC = LV_BAR_PART_INDIC, /**< Switch fill area. */ -// LV_SWITCH_PART_KNOB = _LV_BAR_PART_VIRTUAL_LAST, /**< Switch knob. */ -// _LV_SWITCH_PART_VIRTUAL_LAST + LV_SWITCH_PART_BG + LV_SWITCH_PART_INDIC + LV_SWITCH_PART_KNOB + _LV_SWITCH_PART_VIRTUAL_LAST // }; // LV Table // enum { -// LV_TABLE_PART_BG, /* Because of this member, LV_PART.*CELL1 has enum value of 1, */ -// LV_TABLE_PART_CELL1, /* LV_PART.*CELL2 has an enum value of 2 and so on up to the maximum */ -// LV_TABLE_PART_CELL2, /* number of styles specified by LV_TABLE_CELL_STYLE_CNT */ -// LV_TABLE_PART_CELL3, -// LV_TABLE_PART_CELL4, /* CELL 5-16 are not needed to be defined, the values in this enum + LV_TABLE_PART_BG, /* Because of this member, LV_PART.*CELL1 has enum value of 1, */ + LV_TABLE_PART_CELL1, /* LV_PART.*CELL2 has an enum value of 2 and so on up to the maximum */ + LV_TABLE_PART_CELL2, /* number of styles specified by LV_TABLE_CELL_STYLE_CNT */ + LV_TABLE_PART_CELL3, + LV_TABLE_PART_CELL4, /* CELL 5-16 are not needed to be defined, the values in this enum // are there for backward compatibility */ // }; // LV Tabview -TABVIEW_TAB_POS_NONE=0 -TABVIEW_TAB_POS_TOP=1 -TABVIEW_TAB_POS_BOTTOM=2 -TABVIEW_TAB_POS_LEFT=3 -TABVIEW_TAB_POS_RIGHT=4 +TABVIEW_TAB_POS_NONE +TABVIEW_TAB_POS_TOP +TABVIEW_TAB_POS_BOTTOM +TABVIEW_TAB_POS_LEFT +TABVIEW_TAB_POS_RIGHT // enum { -// LV_TABVIEW_PART_BG = LV_OBJ_PART_MAIN, -// _LV_TABVIEW_PART_VIRTUAL_LAST = _LV_OBJ_PART_VIRTUAL_LAST, + LV_TABVIEW_PART_BG + _LV_TABVIEW_PART_VIRTUAL_LAST -// LV_TABVIEW_PART_BG_SCROLLABLE = _LV_OBJ_PART_REAL_LAST, -// LV_TABVIEW_PART_TAB_BG, -// LV_TABVIEW_PART_TAB_BTN, -// LV_TABVIEW_PART_INDIC, -// _LV_TABVIEW_PART_REAL_LAST, + LV_TABVIEW_PART_BG_SCROLLABLE + LV_TABVIEW_PART_TAB_BG, + LV_TABVIEW_PART_TAB_BTN, + LV_TABVIEW_PART_INDIC, + _LV_TABVIEW_PART_REAL_LAST, // }; // LV Textarea -TEXTAREA_CURSOR_LAST=0x7FFF +TEXTAREA_CURSOR_LAST // enum { -// LV_TEXTAREA_PART_BG = LV_PAGE_PART_BG, /**< Text area background style */ -// LV_TEXTAREA_PART_SCROLLBAR = LV_PAGE_PART_SCROLLBAR, /**< Scrollbar style */ -// LV_TEXTAREA_PART_EDGE_FLASH = LV_PAGE_PART_EDGE_FLASH, /**< Edge flash style */ -// LV_TEXTAREA_PART_CURSOR = _LV_PAGE_PART_VIRTUAL_LAST, /**< Cursor style */ -// LV_TEXTAREA_PART_PLACEHOLDER, /**< Placeholder style */ -// _LV_TEXTAREA_PART_VIRTUAL_LAST, + LV_TEXTAREA_PART_BG + LV_TEXTAREA_PART_SCROLLBAR + LV_TEXTAREA_PART_EDGE_FLASH + LV_TEXTAREA_PART_CURSOR + LV_TEXTAREA_PART_PLACEHOLDER, /**< Placeholder style */ + _LV_TEXTAREA_PART_VIRTUAL_LAST, -// _LV_TEXTAREA_PART_REAL_LAST = _LV_PAGE_PART_REAL_LAST, + _LV_TEXTAREA_PART_REAL_LAST // }; // LV Tileview // enum { -// LV_TILEVIEW_PART_BG = LV_PAGE_PART_BG, -// LV_TILEVIEW_PART_SCROLLBAR = LV_PAGE_PART_SCROLLBAR, -// LV_TILEVIEW_PART_EDGE_FLASH = LV_PAGE_PART_EDGE_FLASH, -// _LV_TILEVIEW_PART_VIRTUAL_LAST = _LV_PAGE_PART_VIRTUAL_LAST, -// _LV_TILEVIEW_PART_REAL_LAST = _LV_PAGE_PART_REAL_LAST + LV_TILEVIEW_PART_BG + LV_TILEVIEW_PART_SCROLLBAR + LV_TILEVIEW_PART_EDGE_FLASH + _LV_TILEVIEW_PART_VIRTUAL_LAST + _LV_TILEVIEW_PART_REAL_LAST // }; // LV Win // enum { -// LV_WIN_PART_BG = LV_OBJ_PART_MAIN, /**< Window object background style. */ -// _LV_WIN_PART_VIRTUAL_LAST, -// LV_WIN_PART_HEADER = _LV_OBJ_PART_REAL_LAST, /**< Window titlebar background style. */ -// LV_WIN_PART_CONTENT_SCROLLABLE, /**< Window content style. */ -// LV_WIN_PART_SCROLLBAR, /**< Window scrollbar style. */ -// _LV_WIN_PART_REAL_LAST + LV_WIN_PART_BG + _LV_WIN_PART_VIRTUAL_LAST, + LV_WIN_PART_HEADER + LV_WIN_PART_CONTENT_SCROLLABLE, /**< Window content style. */ + LV_WIN_PART_SCROLLBAR, /**< Window scrollbar style. */ + _LV_WIN_PART_REAL_LAST // }; From 74445c0aaa980f2afa508125d9aa3ab6bb39ef46 Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Fri, 21 May 2021 09:02:24 +0200 Subject: [PATCH 05/11] LVGL fix crash in file system --- lib/libesp32_lvgl/LVGL/src/lv_misc/lv_fs.c | 4 +++- tasmota/xdrv_54_lvgl.ino | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/libesp32_lvgl/LVGL/src/lv_misc/lv_fs.c b/lib/libesp32_lvgl/LVGL/src/lv_misc/lv_fs.c index 6f66c765d..b7809d138 100644 --- a/lib/libesp32_lvgl/LVGL/src/lv_misc/lv_fs.c +++ b/lib/libesp32_lvgl/LVGL/src/lv_misc/lv_fs.c @@ -148,7 +148,9 @@ lv_fs_res_t lv_fs_close(lv_fs_file_t * file_p) lv_fs_res_t res = file_p->drv->close_cb(file_p->drv, file_p->file_d); - lv_mem_free(file_p->file_d); /*Clean up*/ + if(file_p->drv->file_size != 0) { /*Is file_d zero size?*/ + lv_mem_free(file_p->file_d); /*Clean up*/ + } file_p->file_d = NULL; file_p->drv = NULL; diff --git a/tasmota/xdrv_54_lvgl.ino b/tasmota/xdrv_54_lvgl.ino index f52de88fe..24e0321af 100644 --- a/tasmota/xdrv_54_lvgl.ino +++ b/tasmota/xdrv_54_lvgl.ino @@ -219,7 +219,6 @@ static lv_fs_res_t lvbe_fs_open(lv_fs_drv_t * drv, void * file_p, const char * p // AddLog(LOG_LEVEL_INFO, "LVG: F=%*_H", sizeof(f), &f); if (f) { File * f_ptr = new File(f); // copy to dynamic object - *f_ptr = f; // TODO is this necessary? *((File**)file_p) = f_ptr; return LV_FS_RES_OK; } else { From c642e716ce145dd62aa67b48eaeb039aa7b49465 Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Fri, 21 May 2021 13:49:47 +0200 Subject: [PATCH 06/11] LVGL add support for PNG images --- lib/libesp32_lvgl/lv_lib_png/README.md | 50 + lib/libesp32_lvgl/lv_lib_png/library.json | 21 + lib/libesp32_lvgl/lv_lib_png/src/lodepng.c | 6487 ++++++++++++++++++++ lib/libesp32_lvgl/lv_lib_png/src/lodepng.h | 1989 ++++++ lib/libesp32_lvgl/lv_lib_png/src/lv_png.c | 267 + lib/libesp32_lvgl/lv_lib_png/src/lv_png.h | 43 + tasmota/lvgl_berry/be_lv_c_mapping.h | 40 +- tasmota/lvgl_berry/tasmota_lv_conf.h | 5 +- tasmota/lvgl_berry/tasmota_lv_stdlib.h | 3 +- tasmota/my_user_config.h | 1 + tasmota/xdrv_52_3_berry_lvgl.ino | 1 + tasmota/xdrv_54_lvgl.ino | 15 + tools/lv_berry/convert.py | 4 +- 13 files changed, 8901 insertions(+), 25 deletions(-) create mode 100644 lib/libesp32_lvgl/lv_lib_png/README.md create mode 100644 lib/libesp32_lvgl/lv_lib_png/library.json create mode 100644 lib/libesp32_lvgl/lv_lib_png/src/lodepng.c create mode 100644 lib/libesp32_lvgl/lv_lib_png/src/lodepng.h create mode 100644 lib/libesp32_lvgl/lv_lib_png/src/lv_png.c create mode 100644 lib/libesp32_lvgl/lv_lib_png/src/lv_png.h diff --git a/lib/libesp32_lvgl/lv_lib_png/README.md b/lib/libesp32_lvgl/lv_lib_png/README.md new file mode 100644 index 000000000..693de2b51 --- /dev/null +++ b/lib/libesp32_lvgl/lv_lib_png/README.md @@ -0,0 +1,50 @@ +# PNG decoder for LVGL + +Allow the use of PNG images in LVGL. This implementation uses [lodepng](https://github.com/lvandeve/lodepng) library. + +## Get started +- Download or clone this repository + - [Download from GitHub](https://github.com/littlevgl/lv_lib_lodepng/archive/master.zip) + - Clone: `git clone https://github.com/littlevgl/lv_lib_png.git` +- Include the library: `#include "lv_lib_png/lv_png.h"` +- Initalize the decocer with `lv_png_init()` +- Test with the following code: +```c + LV_IMG_DECLARE(png_decoder_test); + lv_obj_t * img = lv_img_create(lv_scr_act(), NULL); + lv_img_set_src(img, &png_decoder_test); +``` + +## Use PNG images from file +By deafult `lodepng` uses C file IO API (e.g. `fopen`) and images can be opened like this: +```c +lv_img_set_src(img, "./lv_lib_lodepng/png_decoder_test.png"); +``` + +If you want to make `lodepng` to use LVGL's file system API add `#define LV_PNG_USE_LV_FILESYSTEM 1` to the end of your`lv_conf.h`. +In this case you need to [register a driver](https://docs.lvgl.io/latest/en/html/overview/file-system.html) fo LVGL. The following functions are required: +- `open_cb()` +- `read_cb()` +- `close_cb()` +- `size_cb()` + +After that fiels can be opened like this: +```c +lv_img_set_src(img, "P:lv_lib_lodepng/png_decoder_test.png"); +``` + + +Note that the path of the file might be different. + +## Use PNG images from flash +To store a PNG image in flash it needs to be converted to C array with [Online Image converter](https://lvgl.io/tools/imageconverter). Choose `Raw with alpha` Color format and `C array` Output format. Copy the result C array to your project and use it like this: +```c + LV_IMG_DECLARE(my_test_img); + lv_obj_t * img = lv_img_create(lv_scr_act(), NULL); + lv_img_set_src(img, &my_test_img); +``` + +## Learn more +To learn more about the PNG decoder itself read [this blog post](https://blog.littlevgl.com/2018-10-05/png_converter) + +To learn more about the Image decoder interface of LittlevGL read the realevant part of the [documentation](https://docs.littlevgl.com/en/html/overview/image.html#image-decoder). diff --git a/lib/libesp32_lvgl/lv_lib_png/library.json b/lib/libesp32_lvgl/lv_lib_png/library.json new file mode 100644 index 000000000..61e9720e3 --- /dev/null +++ b/lib/libesp32_lvgl/lv_lib_png/library.json @@ -0,0 +1,21 @@ +{ + "name":"lv_lib_png", + "description":"Allow the use of PNG images in LVGL. This implementation uses lodepng library.", + "keywords":"lvgl, png", + "license": "MIT License", + "repository": { + "type": "git", + "url": "https://github.com/lvgl/lv_lib_png" + }, + "frameworks": "arduino", + "platforms": "espressif32", + "build": { + "flags": [ "-DLV_PNG_USE_LV_FILESYSTEM=1", + "-DLODEPNG_NO_COMPILE_ALLOCATORS", + "-DLODEPNG_NO_COMPILE_ERROR_TEXT", + "-DLODEPNG_NO_COMPILE_ANCILLARY_CHUNKS", + "-DLV_LVGL_H_INCLUDE_SIMPLE", + "-I$PROJECT_DIR/include", + "-includetasmota_options.h" ] + } +} \ No newline at end of file diff --git a/lib/libesp32_lvgl/lv_lib_png/src/lodepng.c b/lib/libesp32_lvgl/lv_lib_png/src/lodepng.c new file mode 100644 index 000000000..ac8f2fd70 --- /dev/null +++ b/lib/libesp32_lvgl/lv_lib_png/src/lodepng.c @@ -0,0 +1,6487 @@ +/* +LodePNG version 20201017 + +Copyright (c) 2005-2020 Lode Vandevenne + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +/* +The manual and changelog are in the header file "lodepng.h" +Rename this file to lodepng.cpp to use it for C++, or to lodepng.c to use it for C. +*/ + +#include "lodepng.h" + +#ifdef LODEPNG_COMPILE_DISK +#include /* LONG_MAX */ +#include /* file handling */ +#endif /* LODEPNG_COMPILE_DISK */ + +#ifdef LODEPNG_COMPILE_ALLOCATORS +#include /* allocations */ +#endif /* LODEPNG_COMPILE_ALLOCATORS */ + +#if defined(_MSC_VER) && (_MSC_VER >= 1310) /*Visual Studio: A few warning types are not desired here.*/ +#pragma warning( disable : 4244 ) /*implicit conversions: not warned by gcc -Wall -Wextra and requires too much casts*/ +#pragma warning( disable : 4996 ) /*VS does not like fopen, but fopen_s is not standard C so unusable here*/ +#endif /*_MSC_VER */ + +const char* LODEPNG_VERSION_STRING = "20201017"; + +/* +This source file is built up in the following large parts. The code sections +with the "LODEPNG_COMPILE_" #defines divide this up further in an intermixed way. +-Tools for C and common code for PNG and Zlib +-C Code for Zlib (huffman, deflate, ...) +-C Code for PNG (file format chunks, adam7, PNG filters, color conversions, ...) +-The C++ wrapper around all of the above +*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* // Tools for C, and common code for PNG and Zlib. // */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/*The malloc, realloc and free functions defined here with "lodepng_" in front +of the name, so that you can easily change them to others related to your +platform if needed. Everything else in the code calls these. Pass +-DLODEPNG_NO_COMPILE_ALLOCATORS to the compiler, or comment out +#define LODEPNG_COMPILE_ALLOCATORS in the header, to disable the ones here and +define them in your own project's source files without needing to change +lodepng source code. Don't forget to remove "static" if you copypaste them +from here.*/ + +#ifdef LODEPNG_COMPILE_ALLOCATORS +static void* lodepng_malloc(size_t size) { +#ifdef LODEPNG_MAX_ALLOC + if(size > LODEPNG_MAX_ALLOC) return 0; +#endif + return malloc(size); +} + +/* NOTE: when realloc returns NULL, it leaves the original memory untouched */ +static void* lodepng_realloc(void* ptr, size_t new_size) { +#ifdef LODEPNG_MAX_ALLOC + if(new_size > LODEPNG_MAX_ALLOC) return 0; +#endif + return realloc(ptr, new_size); +} + +static void lodepng_free(void* ptr) { + free(ptr); +} +#else /*LODEPNG_COMPILE_ALLOCATORS*/ +/* TODO: support giving additional void* payload to the custom allocators */ +void* lodepng_malloc(size_t size); +void* lodepng_realloc(void* ptr, size_t new_size); +void lodepng_free(void* ptr); +#endif /*LODEPNG_COMPILE_ALLOCATORS*/ + +/* convince the compiler to inline a function, for use when this measurably improves performance */ +/* inline is not available in C90, but use it when supported by the compiler */ +#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || (defined(__cplusplus) && (__cplusplus >= 199711L)) +#define LODEPNG_INLINE inline +#else +#define LODEPNG_INLINE /* not available */ +#endif + +/* restrict is not available in C90, but use it when supported by the compiler */ +#if (defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))) ||\ + (defined(_MSC_VER) && (_MSC_VER >= 1400)) || \ + (defined(__WATCOMC__) && (__WATCOMC__ >= 1250) && !defined(__cplusplus)) +#define LODEPNG_RESTRICT __restrict +#else +#define LODEPNG_RESTRICT /* not available */ +#endif + +/* Replacements for C library functions such as memcpy and strlen, to support platforms +where a full C library is not available. The compiler can recognize them and compile +to something as fast. */ + +static void lodepng_memcpy(void* LODEPNG_RESTRICT dst, + const void* LODEPNG_RESTRICT src, size_t size) { + size_t i; + for(i = 0; i < size; i++) ((char*)dst)[i] = ((const char*)src)[i]; +} + +static void lodepng_memset(void* LODEPNG_RESTRICT dst, + int value, size_t num) { + size_t i; + for(i = 0; i < num; i++) ((char*)dst)[i] = (char)value; +} + +/* does not check memory out of bounds, do not use on untrusted data */ +static size_t lodepng_strlen(const char* a) { + const char* orig = a; + /* avoid warning about unused function in case of disabled COMPILE... macros */ + (void)(&lodepng_strlen); + while(*a) a++; + return (size_t)(a - orig); +} + +#define LODEPNG_MAX(a, b) (((a) > (b)) ? (a) : (b)) +#define LODEPNG_MIN(a, b) (((a) < (b)) ? (a) : (b)) +#define LODEPNG_ABS(x) ((x) < 0 ? -(x) : (x)) + +#if defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_DECODER) +/* Safely check if adding two integers will overflow (no undefined +behavior, compiler removing the code, etc...) and output result. */ +static int lodepng_addofl(size_t a, size_t b, size_t* result) { + *result = a + b; /* Unsigned addition is well defined and safe in C90 */ + return *result < a; +} +#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_DECODER)*/ + +#ifdef LODEPNG_COMPILE_DECODER +/* Safely check if multiplying two integers will overflow (no undefined +behavior, compiler removing the code, etc...) and output result. */ +static int lodepng_mulofl(size_t a, size_t b, size_t* result) { + *result = a * b; /* Unsigned multiplication is well defined and safe in C90 */ + return (a != 0 && *result / a != b); +} + +#ifdef LODEPNG_COMPILE_ZLIB +/* Safely check if a + b > c, even if overflow could happen. */ +static int lodepng_gtofl(size_t a, size_t b, size_t c) { + size_t d; + if(lodepng_addofl(a, b, &d)) return 1; + return d > c; +} +#endif /*LODEPNG_COMPILE_ZLIB*/ +#endif /*LODEPNG_COMPILE_DECODER*/ + + +/* +Often in case of an error a value is assigned to a variable and then it breaks +out of a loop (to go to the cleanup phase of a function). This macro does that. +It makes the error handling code shorter and more readable. + +Example: if(!uivector_resize(&lz77_encoded, datasize)) ERROR_BREAK(83); +*/ +#define CERROR_BREAK(errorvar, code){\ + errorvar = code;\ + break;\ +} + +/*version of CERROR_BREAK that assumes the common case where the error variable is named "error"*/ +#define ERROR_BREAK(code) CERROR_BREAK(error, code) + +/*Set error var to the error code, and return it.*/ +#define CERROR_RETURN_ERROR(errorvar, code){\ + errorvar = code;\ + return code;\ +} + +/*Try the code, if it returns error, also return the error.*/ +#define CERROR_TRY_RETURN(call){\ + unsigned error = call;\ + if(error) return error;\ +} + +/*Set error var to the error code, and return from the void function.*/ +#define CERROR_RETURN(errorvar, code){\ + errorvar = code;\ + return;\ +} + +/* +About uivector, ucvector and string: +-All of them wrap dynamic arrays or text strings in a similar way. +-LodePNG was originally written in C++. The vectors replace the std::vectors that were used in the C++ version. +-The string tools are made to avoid problems with compilers that declare things like strncat as deprecated. +-They're not used in the interface, only internally in this file as static functions. +-As with many other structs in this file, the init and cleanup functions serve as ctor and dtor. +*/ + +#ifdef LODEPNG_COMPILE_ZLIB +#ifdef LODEPNG_COMPILE_ENCODER +/*dynamic vector of unsigned ints*/ +typedef struct uivector { + unsigned* data; + size_t size; /*size in number of unsigned longs*/ + size_t allocsize; /*allocated size in bytes*/ +} uivector; + +static void uivector_cleanup(void* p) { + ((uivector*)p)->size = ((uivector*)p)->allocsize = 0; + lodepng_free(((uivector*)p)->data); + ((uivector*)p)->data = NULL; +} + +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned uivector_resize(uivector* p, size_t size) { + size_t allocsize = size * sizeof(unsigned); + if(allocsize > p->allocsize) { + size_t newsize = allocsize + (p->allocsize >> 1u); + void* data = lodepng_realloc(p->data, newsize); + if(data) { + p->allocsize = newsize; + p->data = (unsigned*)data; + } + else return 0; /*error: not enough memory*/ + } + p->size = size; + return 1; /*success*/ +} + +static void uivector_init(uivector* p) { + p->data = NULL; + p->size = p->allocsize = 0; +} + +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned uivector_push_back(uivector* p, unsigned c) { + if(!uivector_resize(p, p->size + 1)) return 0; + p->data[p->size - 1] = c; + return 1; +} +#endif /*LODEPNG_COMPILE_ENCODER*/ +#endif /*LODEPNG_COMPILE_ZLIB*/ + +/* /////////////////////////////////////////////////////////////////////////// */ + +/*dynamic vector of unsigned chars*/ +typedef struct ucvector { + unsigned char* data; + size_t size; /*used size*/ + size_t allocsize; /*allocated size*/ +} ucvector; + +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned ucvector_resize(ucvector* p, size_t size) { + if(size > p->allocsize) { + size_t newsize = size + (p->allocsize >> 1u); + void* data = lodepng_realloc(p->data, newsize); + if(data) { + p->allocsize = newsize; + p->data = (unsigned char*)data; + } + else return 0; /*error: not enough memory*/ + } + p->size = size; + return 1; /*success*/ +} + +static ucvector ucvector_init(unsigned char* buffer, size_t size) { + ucvector v; + v.data = buffer; + v.allocsize = v.size = size; + return v; +} + +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_PNG +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + +/*free string pointer and set it to NULL*/ +static void string_cleanup(char** out) { + lodepng_free(*out); + *out = NULL; +} + +/*also appends null termination character*/ +static char* alloc_string_sized(const char* in, size_t insize) { + char* out = (char*)lodepng_malloc(insize + 1); + if(out) { + lodepng_memcpy(out, in, insize); + out[insize] = 0; + } + return out; +} + +/* dynamically allocates a new string with a copy of the null terminated input text */ +static char* alloc_string(const char* in) { + return alloc_string_sized(in, lodepng_strlen(in)); +} +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +#endif /*LODEPNG_COMPILE_PNG*/ + +/* ////////////////////////////////////////////////////////////////////////// */ + +#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_PNG) +static unsigned lodepng_read32bitInt(const unsigned char* buffer) { + return (((unsigned)buffer[0] << 24u) | ((unsigned)buffer[1] << 16u) | + ((unsigned)buffer[2] << 8u) | (unsigned)buffer[3]); +} +#endif /*defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_PNG)*/ + +#if defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER) +/*buffer must have at least 4 allocated bytes available*/ +static void lodepng_set32bitInt(unsigned char* buffer, unsigned value) { + buffer[0] = (unsigned char)((value >> 24) & 0xff); + buffer[1] = (unsigned char)((value >> 16) & 0xff); + buffer[2] = (unsigned char)((value >> 8) & 0xff); + buffer[3] = (unsigned char)((value ) & 0xff); +} +#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / File IO / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_DISK + +/* returns negative value on error. This should be pure C compatible, so no fstat. */ +static long lodepng_filesize(const char* filename) { +#if LV_PNG_USE_LV_FILESYSTEM + lv_fs_file_t f; + lv_fs_res_t res = lv_fs_open(&f, filename, LV_FS_MODE_RD); + if(res != LV_FS_RES_OK) return -1; + uint32_t size = 0; + lv_fs_size(&f, &size); + lv_fs_close(&f); + return size; +#else + FILE* file; + long size; + file = fopen(filename, "rb"); + if(!file) return -1; + + if(fseek(file, 0, SEEK_END) != 0) { + fclose(file); + return -1; + } + + size = ftell(file); + /* It may give LONG_MAX as directory size, this is invalid for us. */ + if(size == LONG_MAX) size = -1; + + fclose(file); + return size; +#endif +} + +/* load file into buffer that already has the correct allocated size. Returns error code.*/ +static unsigned lodepng_buffer_file(unsigned char* out, size_t size, const char* filename) { +#if LV_PNG_USE_LV_FILESYSTEM + lv_fs_file_t f; + lv_fs_res_t res = lv_fs_open(&f, filename, LV_FS_MODE_RD); + if(res != LV_FS_RES_OK) return 78; + + uint32_t br; + res = lv_fs_read(&f, out, size, &br); + if(res != LV_FS_RES_OK) return 78; + if (br != size) return 78; + lv_fs_close(&f); + return 0; +#else + FILE* file; + size_t readsize; + file = fopen(filename, "rb"); + if(!file) return 78; + + readsize = fread(out, 1, size, file); + fclose(file); + + if(readsize != size) return 78; + return 0; +#endif +} + +unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename) { + long size = lodepng_filesize(filename); + if(size < 0) return 78; + *outsize = (size_t)size; + + *out = (unsigned char*)lodepng_malloc((size_t)size); + if(!(*out) && size > 0) return 83; /*the above malloc failed*/ + + return lodepng_buffer_file(*out, (size_t)size, filename); +} + +/*write given buffer to the file, overwriting the file, it doesn't append to it.*/ +unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename) { + FILE* file; + file = fopen(filename, "wb" ); + if(!file) return 79; + fwrite(buffer, 1, buffersize, file); + fclose(file); + return 0; +} + +#endif /*LODEPNG_COMPILE_DISK*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* // End of common code and tools. Begin of Zlib related code. // */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_ZLIB +#ifdef LODEPNG_COMPILE_ENCODER + +typedef struct { + ucvector* data; + unsigned char bp; /*ok to overflow, indicates bit pos inside byte*/ +} LodePNGBitWriter; + +static void LodePNGBitWriter_init(LodePNGBitWriter* writer, ucvector* data) { + writer->data = data; + writer->bp = 0; +} + +/*TODO: this ignores potential out of memory errors*/ +#define WRITEBIT(writer, bit){\ + /* append new byte */\ + if(((writer->bp) & 7u) == 0) {\ + if(!ucvector_resize(writer->data, writer->data->size + 1)) return;\ + writer->data->data[writer->data->size - 1] = 0;\ + }\ + (writer->data->data[writer->data->size - 1]) |= (bit << ((writer->bp) & 7u));\ + ++writer->bp;\ +} + +/* LSB of value is written first, and LSB of bytes is used first */ +static void writeBits(LodePNGBitWriter* writer, unsigned value, size_t nbits) { + if(nbits == 1) { /* compiler should statically compile this case if nbits == 1 */ + WRITEBIT(writer, value); + } else { + /* TODO: increase output size only once here rather than in each WRITEBIT */ + size_t i; + for(i = 0; i != nbits; ++i) { + WRITEBIT(writer, (unsigned char)((value >> i) & 1)); + } + } +} + +/* This one is to use for adding huffman symbol, the value bits are written MSB first */ +static void writeBitsReversed(LodePNGBitWriter* writer, unsigned value, size_t nbits) { + size_t i; + for(i = 0; i != nbits; ++i) { + /* TODO: increase output size only once here rather than in each WRITEBIT */ + WRITEBIT(writer, (unsigned char)((value >> (nbits - 1u - i)) & 1u)); + } +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#ifdef LODEPNG_COMPILE_DECODER + +typedef struct { + const unsigned char* data; + size_t size; /*size of data in bytes*/ + size_t bitsize; /*size of data in bits, end of valid bp values, should be 8*size*/ + size_t bp; + unsigned buffer; /*buffer for reading bits. NOTE: 'unsigned' must support at least 32 bits*/ +} LodePNGBitReader; + +/* data size argument is in bytes. Returns error if size too large causing overflow */ +static unsigned LodePNGBitReader_init(LodePNGBitReader* reader, const unsigned char* data, size_t size) { + size_t temp; + reader->data = data; + reader->size = size; + /* size in bits, return error if overflow (if size_t is 32 bit this supports up to 500MB) */ + if(lodepng_mulofl(size, 8u, &reader->bitsize)) return 105; + /*ensure incremented bp can be compared to bitsize without overflow even when it would be incremented 32 too much and + trying to ensure 32 more bits*/ + if(lodepng_addofl(reader->bitsize, 64u, &temp)) return 105; + reader->bp = 0; + reader->buffer = 0; + return 0; /*ok*/ +} + +/* +ensureBits functions: +Ensures the reader can at least read nbits bits in one or more readBits calls, +safely even if not enough bits are available. +Returns 1 if there are enough bits available, 0 if not. +*/ + +/*See ensureBits documentation above. This one ensures exactly 1 bit */ +/*static unsigned ensureBits1(LodePNGBitReader* reader) { + if(reader->bp >= reader->bitsize) return 0; + reader->buffer = (unsigned)reader->data[reader->bp >> 3u] >> (reader->bp & 7u); + return 1; +}*/ + +/*See ensureBits documentation above. This one ensures up to 9 bits */ +static unsigned ensureBits9(LodePNGBitReader* reader, size_t nbits) { + size_t start = reader->bp >> 3u; + size_t size = reader->size; + if(start + 1u < size) { + reader->buffer = (unsigned)reader->data[start + 0] | ((unsigned)reader->data[start + 1] << 8u); + reader->buffer >>= (reader->bp & 7u); + return 1; + } else { + reader->buffer = 0; + if(start + 0u < size) reader->buffer |= reader->data[start + 0]; + reader->buffer >>= (reader->bp & 7u); + return reader->bp + nbits <= reader->bitsize; + } +} + +/*See ensureBits documentation above. This one ensures up to 17 bits */ +static unsigned ensureBits17(LodePNGBitReader* reader, size_t nbits) { + size_t start = reader->bp >> 3u; + size_t size = reader->size; + if(start + 2u < size) { + reader->buffer = (unsigned)reader->data[start + 0] | ((unsigned)reader->data[start + 1] << 8u) | + ((unsigned)reader->data[start + 2] << 16u); + reader->buffer >>= (reader->bp & 7u); + return 1; + } else { + reader->buffer = 0; + if(start + 0u < size) reader->buffer |= reader->data[start + 0]; + if(start + 1u < size) reader->buffer |= ((unsigned)reader->data[start + 1] << 8u); + reader->buffer >>= (reader->bp & 7u); + return reader->bp + nbits <= reader->bitsize; + } +} + +/*See ensureBits documentation above. This one ensures up to 25 bits */ +static LODEPNG_INLINE unsigned ensureBits25(LodePNGBitReader* reader, size_t nbits) { + size_t start = reader->bp >> 3u; + size_t size = reader->size; + if(start + 3u < size) { + reader->buffer = (unsigned)reader->data[start + 0] | ((unsigned)reader->data[start + 1] << 8u) | + ((unsigned)reader->data[start + 2] << 16u) | ((unsigned)reader->data[start + 3] << 24u); + reader->buffer >>= (reader->bp & 7u); + return 1; + } else { + reader->buffer = 0; + if(start + 0u < size) reader->buffer |= reader->data[start + 0]; + if(start + 1u < size) reader->buffer |= ((unsigned)reader->data[start + 1] << 8u); + if(start + 2u < size) reader->buffer |= ((unsigned)reader->data[start + 2] << 16u); + reader->buffer >>= (reader->bp & 7u); + return reader->bp + nbits <= reader->bitsize; + } +} + +/*See ensureBits documentation above. This one ensures up to 32 bits */ +static LODEPNG_INLINE unsigned ensureBits32(LodePNGBitReader* reader, size_t nbits) { + size_t start = reader->bp >> 3u; + size_t size = reader->size; + if(start + 4u < size) { + reader->buffer = (unsigned)reader->data[start + 0] | ((unsigned)reader->data[start + 1] << 8u) | + ((unsigned)reader->data[start + 2] << 16u) | ((unsigned)reader->data[start + 3] << 24u); + reader->buffer >>= (reader->bp & 7u); + reader->buffer |= (((unsigned)reader->data[start + 4] << 24u) << (8u - (reader->bp & 7u))); + return 1; + } else { + reader->buffer = 0; + if(start + 0u < size) reader->buffer |= reader->data[start + 0]; + if(start + 1u < size) reader->buffer |= ((unsigned)reader->data[start + 1] << 8u); + if(start + 2u < size) reader->buffer |= ((unsigned)reader->data[start + 2] << 16u); + if(start + 3u < size) reader->buffer |= ((unsigned)reader->data[start + 3] << 24u); + reader->buffer >>= (reader->bp & 7u); + return reader->bp + nbits <= reader->bitsize; + } +} + +/* Get bits without advancing the bit pointer. Must have enough bits available with ensureBits. Max nbits is 31. */ +static unsigned peekBits(LodePNGBitReader* reader, size_t nbits) { + /* The shift allows nbits to be only up to 31. */ + return reader->buffer & ((1u << nbits) - 1u); +} + +/* Must have enough bits available with ensureBits */ +static void advanceBits(LodePNGBitReader* reader, size_t nbits) { + reader->buffer >>= nbits; + reader->bp += nbits; +} + +/* Must have enough bits available with ensureBits */ +static unsigned readBits(LodePNGBitReader* reader, size_t nbits) { + unsigned result = peekBits(reader, nbits); + advanceBits(reader, nbits); + return result; +} + +/* Public for testing only. steps and result must have numsteps values. */ +unsigned lode_png_test_bitreader(const unsigned char* data, size_t size, + size_t numsteps, const size_t* steps, unsigned* result) { + size_t i; + LodePNGBitReader reader; + unsigned error = LodePNGBitReader_init(&reader, data, size); + if(error) return 0; + for(i = 0; i < numsteps; i++) { + size_t step = steps[i]; + unsigned ok; + if(step > 25) ok = ensureBits32(&reader, step); + else if(step > 17) ok = ensureBits25(&reader, step); + else if(step > 9) ok = ensureBits17(&reader, step); + else ok = ensureBits9(&reader, step); + if(!ok) return 0; + result[i] = readBits(&reader, step); + } + return 1; +} +#endif /*LODEPNG_COMPILE_DECODER*/ + +static unsigned reverseBits(unsigned bits, unsigned num) { + /*TODO: implement faster lookup table based version when needed*/ + unsigned i, result = 0; + for(i = 0; i < num; i++) result |= ((bits >> (num - i - 1u)) & 1u) << i; + return result; +} + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Deflate - Huffman / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#define FIRST_LENGTH_CODE_INDEX 257 +#define LAST_LENGTH_CODE_INDEX 285 +/*256 literals, the end code, some length codes, and 2 unused codes*/ +#define NUM_DEFLATE_CODE_SYMBOLS 288 +/*the distance codes have their own symbols, 30 used, 2 unused*/ +#define NUM_DISTANCE_SYMBOLS 32 +/*the code length codes. 0-15: code lengths, 16: copy previous 3-6 times, 17: 3-10 zeros, 18: 11-138 zeros*/ +#define NUM_CODE_LENGTH_CODES 19 + +/*the base lengths represented by codes 257-285*/ +static const unsigned LENGTHBASE[29] + = {3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, + 67, 83, 99, 115, 131, 163, 195, 227, 258}; + +/*the extra bits used by codes 257-285 (added to base length)*/ +static const unsigned LENGTHEXTRA[29] + = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, + 4, 4, 4, 4, 5, 5, 5, 5, 0}; + +/*the base backwards distances (the bits of distance codes appear after length codes and use their own huffman tree)*/ +static const unsigned DISTANCEBASE[30] + = {1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, + 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577}; + +/*the extra bits of backwards distances (added to base)*/ +static const unsigned DISTANCEEXTRA[30] + = {0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, + 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13}; + +/*the order in which "code length alphabet code lengths" are stored as specified by deflate, out of this the huffman +tree of the dynamic huffman tree lengths is generated*/ +static const unsigned CLCL_ORDER[NUM_CODE_LENGTH_CODES] + = {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + +/* ////////////////////////////////////////////////////////////////////////// */ + +/* +Huffman tree struct, containing multiple representations of the tree +*/ +typedef struct HuffmanTree { + unsigned* codes; /*the huffman codes (bit patterns representing the symbols)*/ + unsigned* lengths; /*the lengths of the huffman codes*/ + unsigned maxbitlen; /*maximum number of bits a single code can get*/ + unsigned numcodes; /*number of symbols in the alphabet = number of codes*/ + /* for reading only */ + unsigned char* table_len; /*length of symbol from lookup table, or max length if secondary lookup needed*/ + unsigned short* table_value; /*value of symbol from lookup table, or pointer to secondary table if needed*/ +} HuffmanTree; + +static void HuffmanTree_init(HuffmanTree* tree) { + tree->codes = 0; + tree->lengths = 0; + tree->table_len = 0; + tree->table_value = 0; +} + +static void HuffmanTree_cleanup(HuffmanTree* tree) { + lodepng_free(tree->codes); + lodepng_free(tree->lengths); + lodepng_free(tree->table_len); + lodepng_free(tree->table_value); +} + +/* amount of bits for first huffman table lookup (aka root bits), see HuffmanTree_makeTable and huffmanDecodeSymbol.*/ +/* values 8u and 9u work the fastest */ +#define FIRSTBITS 9u + +/* a symbol value too big to represent any valid symbol, to indicate reading disallowed huffman bits combination, +which is possible in case of only 0 or 1 present symbols. */ +#define INVALIDSYMBOL 65535u + +/* make table for huffman decoding */ +static unsigned HuffmanTree_makeTable(HuffmanTree* tree) { + static const unsigned headsize = 1u << FIRSTBITS; /*size of the first table*/ + static const unsigned mask = (1u << FIRSTBITS) /*headsize*/ - 1u; + size_t i, numpresent, pointer, size; /*total table size*/ + unsigned* maxlens = (unsigned*)lodepng_malloc(headsize * sizeof(unsigned)); + if(!maxlens) return 83; /*alloc fail*/ + + /* compute maxlens: max total bit length of symbols sharing prefix in the first table*/ + lodepng_memset(maxlens, 0, headsize * sizeof(*maxlens)); + for(i = 0; i < tree->numcodes; i++) { + unsigned symbol = tree->codes[i]; + unsigned l = tree->lengths[i]; + unsigned index; + if(l <= FIRSTBITS) continue; /*symbols that fit in first table don't increase secondary table size*/ + /*get the FIRSTBITS MSBs, the MSBs of the symbol are encoded first. See later comment about the reversing*/ + index = reverseBits(symbol >> (l - FIRSTBITS), FIRSTBITS); + maxlens[index] = LODEPNG_MAX(maxlens[index], l); + } + /* compute total table size: size of first table plus all secondary tables for symbols longer than FIRSTBITS */ + size = headsize; + for(i = 0; i < headsize; ++i) { + unsigned l = maxlens[i]; + if(l > FIRSTBITS) size += (1u << (l - FIRSTBITS)); + } + tree->table_len = (unsigned char*)lodepng_malloc(size * sizeof(*tree->table_len)); + tree->table_value = (unsigned short*)lodepng_malloc(size * sizeof(*tree->table_value)); + if(!tree->table_len || !tree->table_value) { + lodepng_free(maxlens); + /* freeing tree->table values is done at a higher scope */ + return 83; /*alloc fail*/ + } + /*initialize with an invalid length to indicate unused entries*/ + for(i = 0; i < size; ++i) tree->table_len[i] = 16; + + /*fill in the first table for long symbols: max prefix size and pointer to secondary tables*/ + pointer = headsize; + for(i = 0; i < headsize; ++i) { + unsigned l = maxlens[i]; + if(l <= FIRSTBITS) continue; + tree->table_len[i] = l; + tree->table_value[i] = pointer; + pointer += (1u << (l - FIRSTBITS)); + } + lodepng_free(maxlens); + + /*fill in the first table for short symbols, or secondary table for long symbols*/ + numpresent = 0; + for(i = 0; i < tree->numcodes; ++i) { + unsigned l = tree->lengths[i]; + unsigned symbol = tree->codes[i]; /*the huffman bit pattern. i itself is the value.*/ + /*reverse bits, because the huffman bits are given in MSB first order but the bit reader reads LSB first*/ + unsigned reverse = reverseBits(symbol, l); + if(l == 0) continue; + numpresent++; + + if(l <= FIRSTBITS) { + /*short symbol, fully in first table, replicated num times if l < FIRSTBITS*/ + unsigned num = 1u << (FIRSTBITS - l); + unsigned j; + for(j = 0; j < num; ++j) { + /*bit reader will read the l bits of symbol first, the remaining FIRSTBITS - l bits go to the MSB's*/ + unsigned index = reverse | (j << l); + if(tree->table_len[index] != 16) return 55; /*invalid tree: long symbol shares prefix with short symbol*/ + tree->table_len[index] = l; + tree->table_value[index] = i; + } + } else { + /*long symbol, shares prefix with other long symbols in first lookup table, needs second lookup*/ + /*the FIRSTBITS MSBs of the symbol are the first table index*/ + unsigned index = reverse & mask; + unsigned maxlen = tree->table_len[index]; + /*log2 of secondary table length, should be >= l - FIRSTBITS*/ + unsigned tablelen = maxlen - FIRSTBITS; + unsigned start = tree->table_value[index]; /*starting index in secondary table*/ + unsigned num = 1u << (tablelen - (l - FIRSTBITS)); /*amount of entries of this symbol in secondary table*/ + unsigned j; + if(maxlen < l) return 55; /*invalid tree: long symbol shares prefix with short symbol*/ + for(j = 0; j < num; ++j) { + unsigned reverse2 = reverse >> FIRSTBITS; /* l - FIRSTBITS bits */ + unsigned index2 = start + (reverse2 | (j << (l - FIRSTBITS))); + tree->table_len[index2] = l; + tree->table_value[index2] = i; + } + } + } + + if(numpresent < 2) { + /* In case of exactly 1 symbol, in theory the huffman symbol needs 0 bits, + but deflate uses 1 bit instead. In case of 0 symbols, no symbols can + appear at all, but such huffman tree could still exist (e.g. if distance + codes are never used). In both cases, not all symbols of the table will be + filled in. Fill them in with an invalid symbol value so returning them from + huffmanDecodeSymbol will cause error. */ + for(i = 0; i < size; ++i) { + if(tree->table_len[i] == 16) { + /* As length, use a value smaller than FIRSTBITS for the head table, + and a value larger than FIRSTBITS for the secondary table, to ensure + valid behavior for advanceBits when reading this symbol. */ + tree->table_len[i] = (i < headsize) ? 1 : (FIRSTBITS + 1); + tree->table_value[i] = INVALIDSYMBOL; + } + } + } else { + /* A good huffman tree has N * 2 - 1 nodes, of which N - 1 are internal nodes. + If that is not the case (due to too long length codes), the table will not + have been fully used, and this is an error (not all bit combinations can be + decoded): an oversubscribed huffman tree, indicated by error 55. */ + for(i = 0; i < size; ++i) { + if(tree->table_len[i] == 16) return 55; + } + } + + return 0; +} + +/* +Second step for the ...makeFromLengths and ...makeFromFrequencies functions. +numcodes, lengths and maxbitlen must already be filled in correctly. return +value is error. +*/ +static unsigned HuffmanTree_makeFromLengths2(HuffmanTree* tree) { + unsigned* blcount; + unsigned* nextcode; + unsigned error = 0; + unsigned bits, n; + + tree->codes = (unsigned*)lodepng_malloc(tree->numcodes * sizeof(unsigned)); + blcount = (unsigned*)lodepng_malloc((tree->maxbitlen + 1) * sizeof(unsigned)); + nextcode = (unsigned*)lodepng_malloc((tree->maxbitlen + 1) * sizeof(unsigned)); + if(!tree->codes || !blcount || !nextcode) error = 83; /*alloc fail*/ + + if(!error) { + for(n = 0; n != tree->maxbitlen + 1; n++) blcount[n] = nextcode[n] = 0; + /*step 1: count number of instances of each code length*/ + for(bits = 0; bits != tree->numcodes; ++bits) ++blcount[tree->lengths[bits]]; + /*step 2: generate the nextcode values*/ + for(bits = 1; bits <= tree->maxbitlen; ++bits) { + nextcode[bits] = (nextcode[bits - 1] + blcount[bits - 1]) << 1u; + } + /*step 3: generate all the codes*/ + for(n = 0; n != tree->numcodes; ++n) { + if(tree->lengths[n] != 0) { + tree->codes[n] = nextcode[tree->lengths[n]]++; + /*remove superfluous bits from the code*/ + tree->codes[n] &= ((1u << tree->lengths[n]) - 1u); + } + } + } + + lodepng_free(blcount); + lodepng_free(nextcode); + + if(!error) error = HuffmanTree_makeTable(tree); + return error; +} + +/* +given the code lengths (as stored in the PNG file), generate the tree as defined +by Deflate. maxbitlen is the maximum bits that a code in the tree can have. +return value is error. +*/ +static unsigned HuffmanTree_makeFromLengths(HuffmanTree* tree, const unsigned* bitlen, + size_t numcodes, unsigned maxbitlen) { + unsigned i; + tree->lengths = (unsigned*)lodepng_malloc(numcodes * sizeof(unsigned)); + if(!tree->lengths) return 83; /*alloc fail*/ + for(i = 0; i != numcodes; ++i) tree->lengths[i] = bitlen[i]; + tree->numcodes = (unsigned)numcodes; /*number of symbols*/ + tree->maxbitlen = maxbitlen; + return HuffmanTree_makeFromLengths2(tree); +} + +#ifdef LODEPNG_COMPILE_ENCODER + +/*BPM: Boundary Package Merge, see "A Fast and Space-Economical Algorithm for Length-Limited Coding", +Jyrki Katajainen, Alistair Moffat, Andrew Turpin, 1995.*/ + +/*chain node for boundary package merge*/ +typedef struct BPMNode { + int weight; /*the sum of all weights in this chain*/ + unsigned index; /*index of this leaf node (called "count" in the paper)*/ + struct BPMNode* tail; /*the next nodes in this chain (null if last)*/ + int in_use; +} BPMNode; + +/*lists of chains*/ +typedef struct BPMLists { + /*memory pool*/ + unsigned memsize; + BPMNode* memory; + unsigned numfree; + unsigned nextfree; + BPMNode** freelist; + /*two heads of lookahead chains per list*/ + unsigned listsize; + BPMNode** chains0; + BPMNode** chains1; +} BPMLists; + +/*creates a new chain node with the given parameters, from the memory in the lists */ +static BPMNode* bpmnode_create(BPMLists* lists, int weight, unsigned index, BPMNode* tail) { + unsigned i; + BPMNode* result; + + /*memory full, so garbage collect*/ + if(lists->nextfree >= lists->numfree) { + /*mark only those that are in use*/ + for(i = 0; i != lists->memsize; ++i) lists->memory[i].in_use = 0; + for(i = 0; i != lists->listsize; ++i) { + BPMNode* node; + for(node = lists->chains0[i]; node != 0; node = node->tail) node->in_use = 1; + for(node = lists->chains1[i]; node != 0; node = node->tail) node->in_use = 1; + } + /*collect those that are free*/ + lists->numfree = 0; + for(i = 0; i != lists->memsize; ++i) { + if(!lists->memory[i].in_use) lists->freelist[lists->numfree++] = &lists->memory[i]; + } + lists->nextfree = 0; + } + + result = lists->freelist[lists->nextfree++]; + result->weight = weight; + result->index = index; + result->tail = tail; + return result; +} + +/*sort the leaves with stable mergesort*/ +static void bpmnode_sort(BPMNode* leaves, size_t num) { + BPMNode* mem = (BPMNode*)lodepng_malloc(sizeof(*leaves) * num); + size_t width, counter = 0; + for(width = 1; width < num; width *= 2) { + BPMNode* a = (counter & 1) ? mem : leaves; + BPMNode* b = (counter & 1) ? leaves : mem; + size_t p; + for(p = 0; p < num; p += 2 * width) { + size_t q = (p + width > num) ? num : (p + width); + size_t r = (p + 2 * width > num) ? num : (p + 2 * width); + size_t i = p, j = q, k; + for(k = p; k < r; k++) { + if(i < q && (j >= r || a[i].weight <= a[j].weight)) b[k] = a[i++]; + else b[k] = a[j++]; + } + } + counter++; + } + if(counter & 1) lodepng_memcpy(leaves, mem, sizeof(*leaves) * num); + lodepng_free(mem); +} + +/*Boundary Package Merge step, numpresent is the amount of leaves, and c is the current chain.*/ +static void boundaryPM(BPMLists* lists, BPMNode* leaves, size_t numpresent, int c, int num) { + unsigned lastindex = lists->chains1[c]->index; + + if(c == 0) { + if(lastindex >= numpresent) return; + lists->chains0[c] = lists->chains1[c]; + lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, 0); + } else { + /*sum of the weights of the head nodes of the previous lookahead chains.*/ + int sum = lists->chains0[c - 1]->weight + lists->chains1[c - 1]->weight; + lists->chains0[c] = lists->chains1[c]; + if(lastindex < numpresent && sum > leaves[lastindex].weight) { + lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, lists->chains1[c]->tail); + return; + } + lists->chains1[c] = bpmnode_create(lists, sum, lastindex, lists->chains1[c - 1]); + /*in the end we are only interested in the chain of the last list, so no + need to recurse if we're at the last one (this gives measurable speedup)*/ + if(num + 1 < (int)(2 * numpresent - 2)) { + boundaryPM(lists, leaves, numpresent, c - 1, num); + boundaryPM(lists, leaves, numpresent, c - 1, num); + } + } +} + +unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies, + size_t numcodes, unsigned maxbitlen) { + unsigned error = 0; + unsigned i; + size_t numpresent = 0; /*number of symbols with non-zero frequency*/ + BPMNode* leaves; /*the symbols, only those with > 0 frequency*/ + + if(numcodes == 0) return 80; /*error: a tree of 0 symbols is not supposed to be made*/ + if((1u << maxbitlen) < (unsigned)numcodes) return 80; /*error: represent all symbols*/ + + leaves = (BPMNode*)lodepng_malloc(numcodes * sizeof(*leaves)); + if(!leaves) return 83; /*alloc fail*/ + + for(i = 0; i != numcodes; ++i) { + if(frequencies[i] > 0) { + leaves[numpresent].weight = (int)frequencies[i]; + leaves[numpresent].index = i; + ++numpresent; + } + } + + lodepng_memset(lengths, 0, numcodes * sizeof(*lengths)); + + /*ensure at least two present symbols. There should be at least one symbol + according to RFC 1951 section 3.2.7. Some decoders incorrectly require two. To + make these work as well ensure there are at least two symbols. The + Package-Merge code below also doesn't work correctly if there's only one + symbol, it'd give it the theoretical 0 bits but in practice zlib wants 1 bit*/ + if(numpresent == 0) { + lengths[0] = lengths[1] = 1; /*note that for RFC 1951 section 3.2.7, only lengths[0] = 1 is needed*/ + } else if(numpresent == 1) { + lengths[leaves[0].index] = 1; + lengths[leaves[0].index == 0 ? 1 : 0] = 1; + } else { + BPMLists lists; + BPMNode* node; + + bpmnode_sort(leaves, numpresent); + + lists.listsize = maxbitlen; + lists.memsize = 2 * maxbitlen * (maxbitlen + 1); + lists.nextfree = 0; + lists.numfree = lists.memsize; + lists.memory = (BPMNode*)lodepng_malloc(lists.memsize * sizeof(*lists.memory)); + lists.freelist = (BPMNode**)lodepng_malloc(lists.memsize * sizeof(BPMNode*)); + lists.chains0 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*)); + lists.chains1 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*)); + if(!lists.memory || !lists.freelist || !lists.chains0 || !lists.chains1) error = 83; /*alloc fail*/ + + if(!error) { + for(i = 0; i != lists.memsize; ++i) lists.freelist[i] = &lists.memory[i]; + + bpmnode_create(&lists, leaves[0].weight, 1, 0); + bpmnode_create(&lists, leaves[1].weight, 2, 0); + + for(i = 0; i != lists.listsize; ++i) { + lists.chains0[i] = &lists.memory[0]; + lists.chains1[i] = &lists.memory[1]; + } + + /*each boundaryPM call adds one chain to the last list, and we need 2 * numpresent - 2 chains.*/ + for(i = 2; i != 2 * numpresent - 2; ++i) boundaryPM(&lists, leaves, numpresent, (int)maxbitlen - 1, (int)i); + + for(node = lists.chains1[maxbitlen - 1]; node; node = node->tail) { + for(i = 0; i != node->index; ++i) ++lengths[leaves[i].index]; + } + } + + lodepng_free(lists.memory); + lodepng_free(lists.freelist); + lodepng_free(lists.chains0); + lodepng_free(lists.chains1); + } + + lodepng_free(leaves); + return error; +} + +/*Create the Huffman tree given the symbol frequencies*/ +static unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree, const unsigned* frequencies, + size_t mincodes, size_t numcodes, unsigned maxbitlen) { + unsigned error = 0; + while(!frequencies[numcodes - 1] && numcodes > mincodes) --numcodes; /*trim zeroes*/ + tree->lengths = (unsigned*)lodepng_malloc(numcodes * sizeof(unsigned)); + if(!tree->lengths) return 83; /*alloc fail*/ + tree->maxbitlen = maxbitlen; + tree->numcodes = (unsigned)numcodes; /*number of symbols*/ + + error = lodepng_huffman_code_lengths(tree->lengths, frequencies, numcodes, maxbitlen); + if(!error) error = HuffmanTree_makeFromLengths2(tree); + return error; +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +/*get the literal and length code tree of a deflated block with fixed tree, as per the deflate specification*/ +static unsigned generateFixedLitLenTree(HuffmanTree* tree) { + unsigned i, error = 0; + unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned)); + if(!bitlen) return 83; /*alloc fail*/ + + /*288 possible codes: 0-255=literals, 256=endcode, 257-285=lengthcodes, 286-287=unused*/ + for(i = 0; i <= 143; ++i) bitlen[i] = 8; + for(i = 144; i <= 255; ++i) bitlen[i] = 9; + for(i = 256; i <= 279; ++i) bitlen[i] = 7; + for(i = 280; i <= 287; ++i) bitlen[i] = 8; + + error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DEFLATE_CODE_SYMBOLS, 15); + + lodepng_free(bitlen); + return error; +} + +/*get the distance code tree of a deflated block with fixed tree, as specified in the deflate specification*/ +static unsigned generateFixedDistanceTree(HuffmanTree* tree) { + unsigned i, error = 0; + unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned)); + if(!bitlen) return 83; /*alloc fail*/ + + /*there are 32 distance codes, but 30-31 are unused*/ + for(i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen[i] = 5; + error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DISTANCE_SYMBOLS, 15); + + lodepng_free(bitlen); + return error; +} + +#ifdef LODEPNG_COMPILE_DECODER + +/* +returns the code. The bit reader must already have been ensured at least 15 bits +*/ +static unsigned huffmanDecodeSymbol(LodePNGBitReader* reader, const HuffmanTree* codetree) { + unsigned short code = peekBits(reader, FIRSTBITS); + unsigned short l = codetree->table_len[code]; + unsigned short value = codetree->table_value[code]; + if(l <= FIRSTBITS) { + advanceBits(reader, l); + return value; + } else { + unsigned index2; + advanceBits(reader, FIRSTBITS); + index2 = value + peekBits(reader, l - FIRSTBITS); + advanceBits(reader, codetree->table_len[index2] - FIRSTBITS); + return codetree->table_value[index2]; + } +} +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_DECODER + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Inflator (Decompressor) / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/*get the tree of a deflated block with fixed tree, as specified in the deflate specification +Returns error code.*/ +static unsigned getTreeInflateFixed(HuffmanTree* tree_ll, HuffmanTree* tree_d) { + unsigned error = generateFixedLitLenTree(tree_ll); + if(error) return error; + return generateFixedDistanceTree(tree_d); +} + +/*get the tree of a deflated block with dynamic tree, the tree itself is also Huffman compressed with a known tree*/ +static unsigned getTreeInflateDynamic(HuffmanTree* tree_ll, HuffmanTree* tree_d, + LodePNGBitReader* reader) { + /*make sure that length values that aren't filled in will be 0, or a wrong tree will be generated*/ + unsigned error = 0; + unsigned n, HLIT, HDIST, HCLEN, i; + + /*see comments in deflateDynamic for explanation of the context and these variables, it is analogous*/ + unsigned* bitlen_ll = 0; /*lit,len code lengths*/ + unsigned* bitlen_d = 0; /*dist code lengths*/ + /*code length code lengths ("clcl"), the bit lengths of the huffman tree used to compress bitlen_ll and bitlen_d*/ + unsigned* bitlen_cl = 0; + HuffmanTree tree_cl; /*the code tree for code length codes (the huffman tree for compressed huffman trees)*/ + + if(!ensureBits17(reader, 14)) return 49; /*error: the bit pointer is or will go past the memory*/ + + /*number of literal/length codes + 257. Unlike the spec, the value 257 is added to it here already*/ + HLIT = readBits(reader, 5) + 257; + /*number of distance codes. Unlike the spec, the value 1 is added to it here already*/ + HDIST = readBits(reader, 5) + 1; + /*number of code length codes. Unlike the spec, the value 4 is added to it here already*/ + HCLEN = readBits(reader, 4) + 4; + + bitlen_cl = (unsigned*)lodepng_malloc(NUM_CODE_LENGTH_CODES * sizeof(unsigned)); + if(!bitlen_cl) return 83 /*alloc fail*/; + + HuffmanTree_init(&tree_cl); + + while(!error) { + /*read the code length codes out of 3 * (amount of code length codes) bits*/ + if(lodepng_gtofl(reader->bp, HCLEN * 3, reader->bitsize)) { + ERROR_BREAK(50); /*error: the bit pointer is or will go past the memory*/ + } + for(i = 0; i != HCLEN; ++i) { + ensureBits9(reader, 3); /*out of bounds already checked above */ + bitlen_cl[CLCL_ORDER[i]] = readBits(reader, 3); + } + for(i = HCLEN; i != NUM_CODE_LENGTH_CODES; ++i) { + bitlen_cl[CLCL_ORDER[i]] = 0; + } + + error = HuffmanTree_makeFromLengths(&tree_cl, bitlen_cl, NUM_CODE_LENGTH_CODES, 7); + if(error) break; + + /*now we can use this tree to read the lengths for the tree that this function will return*/ + bitlen_ll = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned)); + bitlen_d = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned)); + if(!bitlen_ll || !bitlen_d) ERROR_BREAK(83 /*alloc fail*/); + lodepng_memset(bitlen_ll, 0, NUM_DEFLATE_CODE_SYMBOLS * sizeof(*bitlen_ll)); + lodepng_memset(bitlen_d, 0, NUM_DISTANCE_SYMBOLS * sizeof(*bitlen_d)); + + /*i is the current symbol we're reading in the part that contains the code lengths of lit/len and dist codes*/ + i = 0; + while(i < HLIT + HDIST) { + unsigned code; + ensureBits25(reader, 22); /* up to 15 bits for huffman code, up to 7 extra bits below*/ + code = huffmanDecodeSymbol(reader, &tree_cl); + if(code <= 15) /*a length code*/ { + if(i < HLIT) bitlen_ll[i] = code; + else bitlen_d[i - HLIT] = code; + ++i; + } else if(code == 16) /*repeat previous*/ { + unsigned replength = 3; /*read in the 2 bits that indicate repeat length (3-6)*/ + unsigned value; /*set value to the previous code*/ + + if(i == 0) ERROR_BREAK(54); /*can't repeat previous if i is 0*/ + + replength += readBits(reader, 2); + + if(i < HLIT + 1) value = bitlen_ll[i - 1]; + else value = bitlen_d[i - HLIT - 1]; + /*repeat this value in the next lengths*/ + for(n = 0; n < replength; ++n) { + if(i >= HLIT + HDIST) ERROR_BREAK(13); /*error: i is larger than the amount of codes*/ + if(i < HLIT) bitlen_ll[i] = value; + else bitlen_d[i - HLIT] = value; + ++i; + } + } else if(code == 17) /*repeat "0" 3-10 times*/ { + unsigned replength = 3; /*read in the bits that indicate repeat length*/ + replength += readBits(reader, 3); + + /*repeat this value in the next lengths*/ + for(n = 0; n < replength; ++n) { + if(i >= HLIT + HDIST) ERROR_BREAK(14); /*error: i is larger than the amount of codes*/ + + if(i < HLIT) bitlen_ll[i] = 0; + else bitlen_d[i - HLIT] = 0; + ++i; + } + } else if(code == 18) /*repeat "0" 11-138 times*/ { + unsigned replength = 11; /*read in the bits that indicate repeat length*/ + replength += readBits(reader, 7); + + /*repeat this value in the next lengths*/ + for(n = 0; n < replength; ++n) { + if(i >= HLIT + HDIST) ERROR_BREAK(15); /*error: i is larger than the amount of codes*/ + + if(i < HLIT) bitlen_ll[i] = 0; + else bitlen_d[i - HLIT] = 0; + ++i; + } + } else /*if(code == INVALIDSYMBOL)*/ { + ERROR_BREAK(16); /*error: tried to read disallowed huffman symbol*/ + } + /*check if any of the ensureBits above went out of bounds*/ + if(reader->bp > reader->bitsize) { + /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol + (10=no endcode, 11=wrong jump outside of tree)*/ + /* TODO: revise error codes 10,11,50: the above comment is no longer valid */ + ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ + } + } + if(error) break; + + if(bitlen_ll[256] == 0) ERROR_BREAK(64); /*the length of the end code 256 must be larger than 0*/ + + /*now we've finally got HLIT and HDIST, so generate the code trees, and the function is done*/ + error = HuffmanTree_makeFromLengths(tree_ll, bitlen_ll, NUM_DEFLATE_CODE_SYMBOLS, 15); + if(error) break; + error = HuffmanTree_makeFromLengths(tree_d, bitlen_d, NUM_DISTANCE_SYMBOLS, 15); + + break; /*end of error-while*/ + } + + lodepng_free(bitlen_cl); + lodepng_free(bitlen_ll); + lodepng_free(bitlen_d); + HuffmanTree_cleanup(&tree_cl); + + return error; +} + +/*inflate a block with dynamic of fixed Huffman tree. btype must be 1 or 2.*/ +static unsigned inflateHuffmanBlock(ucvector* out, LodePNGBitReader* reader, + unsigned btype, size_t max_output_size) { + unsigned error = 0; + HuffmanTree tree_ll; /*the huffman tree for literal and length codes*/ + HuffmanTree tree_d; /*the huffman tree for distance codes*/ + + HuffmanTree_init(&tree_ll); + HuffmanTree_init(&tree_d); + + if(btype == 1) error = getTreeInflateFixed(&tree_ll, &tree_d); + else /*if(btype == 2)*/ error = getTreeInflateDynamic(&tree_ll, &tree_d, reader); + + while(!error) /*decode all symbols until end reached, breaks at end code*/ { + /*code_ll is literal, length or end code*/ + unsigned code_ll; + ensureBits25(reader, 20); /* up to 15 for the huffman symbol, up to 5 for the length extra bits */ + code_ll = huffmanDecodeSymbol(reader, &tree_ll); + if(code_ll <= 255) /*literal symbol*/ { + if(!ucvector_resize(out, out->size + 1)) ERROR_BREAK(83 /*alloc fail*/); + out->data[out->size - 1] = (unsigned char)code_ll; + } else if(code_ll >= FIRST_LENGTH_CODE_INDEX && code_ll <= LAST_LENGTH_CODE_INDEX) /*length code*/ { + unsigned code_d, distance; + unsigned numextrabits_l, numextrabits_d; /*extra bits for length and distance*/ + size_t start, backward, length; + + /*part 1: get length base*/ + length = LENGTHBASE[code_ll - FIRST_LENGTH_CODE_INDEX]; + + /*part 2: get extra bits and add the value of that to length*/ + numextrabits_l = LENGTHEXTRA[code_ll - FIRST_LENGTH_CODE_INDEX]; + if(numextrabits_l != 0) { + /* bits already ensured above */ + length += readBits(reader, numextrabits_l); + } + + /*part 3: get distance code*/ + ensureBits32(reader, 28); /* up to 15 for the huffman symbol, up to 13 for the extra bits */ + code_d = huffmanDecodeSymbol(reader, &tree_d); + if(code_d > 29) { + if(code_d <= 31) { + ERROR_BREAK(18); /*error: invalid distance code (30-31 are never used)*/ + } else /* if(code_d == INVALIDSYMBOL) */{ + ERROR_BREAK(16); /*error: tried to read disallowed huffman symbol*/ + } + } + distance = DISTANCEBASE[code_d]; + + /*part 4: get extra bits from distance*/ + numextrabits_d = DISTANCEEXTRA[code_d]; + if(numextrabits_d != 0) { + /* bits already ensured above */ + distance += readBits(reader, numextrabits_d); + } + + /*part 5: fill in all the out[n] values based on the length and dist*/ + start = out->size; + if(distance > start) ERROR_BREAK(52); /*too long backward distance*/ + backward = start - distance; + + if(!ucvector_resize(out, out->size + length)) ERROR_BREAK(83 /*alloc fail*/); + if(distance < length) { + size_t forward; + lodepng_memcpy(out->data + start, out->data + backward, distance); + start += distance; + for(forward = distance; forward < length; ++forward) { + out->data[start++] = out->data[backward++]; + } + } else { + lodepng_memcpy(out->data + start, out->data + backward, length); + } + } else if(code_ll == 256) { + break; /*end code, break the loop*/ + } else /*if(code_ll == INVALIDSYMBOL)*/ { + ERROR_BREAK(16); /*error: tried to read disallowed huffman symbol*/ + } + /*check if any of the ensureBits above went out of bounds*/ + if(reader->bp > reader->bitsize) { + /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol + (10=no endcode, 11=wrong jump outside of tree)*/ + /* TODO: revise error codes 10,11,50: the above comment is no longer valid */ + ERROR_BREAK(51); /*error, bit pointer jumps past memory*/ + } + if(max_output_size && out->size > max_output_size) { + ERROR_BREAK(109); /*error, larger than max size*/ + } + } + + HuffmanTree_cleanup(&tree_ll); + HuffmanTree_cleanup(&tree_d); + + return error; +} + +static unsigned inflateNoCompression(ucvector* out, LodePNGBitReader* reader, + const LodePNGDecompressSettings* settings) { + size_t bytepos; + size_t size = reader->size; + unsigned LEN, NLEN, error = 0; + + /*go to first boundary of byte*/ + bytepos = (reader->bp + 7u) >> 3u; + + /*read LEN (2 bytes) and NLEN (2 bytes)*/ + if(bytepos + 4 >= size) return 52; /*error, bit pointer will jump past memory*/ + LEN = (unsigned)reader->data[bytepos] + ((unsigned)reader->data[bytepos + 1] << 8u); bytepos += 2; + NLEN = (unsigned)reader->data[bytepos] + ((unsigned)reader->data[bytepos + 1] << 8u); bytepos += 2; + + /*check if 16-bit NLEN is really the one's complement of LEN*/ + if(!settings->ignore_nlen && LEN + NLEN != 65535) { + return 21; /*error: NLEN is not one's complement of LEN*/ + } + + if(!ucvector_resize(out, out->size + LEN)) return 83; /*alloc fail*/ + + /*read the literal data: LEN bytes are now stored in the out buffer*/ + if(bytepos + LEN > size) return 23; /*error: reading outside of in buffer*/ + + lodepng_memcpy(out->data + out->size - LEN, reader->data + bytepos, LEN); + bytepos += LEN; + + reader->bp = bytepos << 3u; + + return error; +} + +static unsigned lodepng_inflatev(ucvector* out, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings) { + unsigned BFINAL = 0; + LodePNGBitReader reader; + unsigned error = LodePNGBitReader_init(&reader, in, insize); + + if(error) return error; + + while(!BFINAL) { + unsigned BTYPE; + if(!ensureBits9(&reader, 3)) return 52; /*error, bit pointer will jump past memory*/ + BFINAL = readBits(&reader, 1); + BTYPE = readBits(&reader, 2); + + if(BTYPE == 3) return 20; /*error: invalid BTYPE*/ + else if(BTYPE == 0) error = inflateNoCompression(out, &reader, settings); /*no compression*/ + else error = inflateHuffmanBlock(out, &reader, BTYPE, settings->max_output_size); /*compression, BTYPE 01 or 10*/ + if(!error && settings->max_output_size && out->size > settings->max_output_size) error = 109; + if(error) break; + } + + return error; +} + +unsigned lodepng_inflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings) { + ucvector v = ucvector_init(*out, *outsize); + unsigned error = lodepng_inflatev(&v, in, insize, settings); + *out = v.data; + *outsize = v.size; + return error; +} + +static unsigned inflatev(ucvector* out, const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings) { + if(settings->custom_inflate) { + unsigned error = settings->custom_inflate(&out->data, &out->size, in, insize, settings); + out->allocsize = out->size; + if(error) { + /*the custom inflate is allowed to have its own error codes, however, we translate it to code 110*/ + error = 110; + /*if there's a max output size, and the custom zlib returned error, then indicate that error instead*/ + if(settings->max_output_size && out->size > settings->max_output_size) error = 109; + } + return error; + } else { + return lodepng_inflatev(out, in, insize, settings); + } +} + +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Deflator (Compressor) / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +static const size_t MAX_SUPPORTED_DEFLATE_LENGTH = 258; + +/*search the index in the array, that has the largest value smaller than or equal to the given value, +given array must be sorted (if no value is smaller, it returns the size of the given array)*/ +static size_t searchCodeIndex(const unsigned* array, size_t array_size, size_t value) { + /*binary search (only small gain over linear). TODO: use CPU log2 instruction for getting symbols instead*/ + size_t left = 1; + size_t right = array_size - 1; + + while(left <= right) { + size_t mid = (left + right) >> 1; + if(array[mid] >= value) right = mid - 1; + else left = mid + 1; + } + if(left >= array_size || array[left] > value) left--; + return left; +} + +static void addLengthDistance(uivector* values, size_t length, size_t distance) { + /*values in encoded vector are those used by deflate: + 0-255: literal bytes + 256: end + 257-285: length/distance pair (length code, followed by extra length bits, distance code, extra distance bits) + 286-287: invalid*/ + + unsigned length_code = (unsigned)searchCodeIndex(LENGTHBASE, 29, length); + unsigned extra_length = (unsigned)(length - LENGTHBASE[length_code]); + unsigned dist_code = (unsigned)searchCodeIndex(DISTANCEBASE, 30, distance); + unsigned extra_distance = (unsigned)(distance - DISTANCEBASE[dist_code]); + + size_t pos = values->size; + /*TODO: return error when this fails (out of memory)*/ + unsigned ok = uivector_resize(values, values->size + 4); + if(ok) { + values->data[pos + 0] = length_code + FIRST_LENGTH_CODE_INDEX; + values->data[pos + 1] = extra_length; + values->data[pos + 2] = dist_code; + values->data[pos + 3] = extra_distance; + } +} + +/*3 bytes of data get encoded into two bytes. The hash cannot use more than 3 +bytes as input because 3 is the minimum match length for deflate*/ +static const unsigned HASH_NUM_VALUES = 65536; +static const unsigned HASH_BIT_MASK = 65535; /*HASH_NUM_VALUES - 1, but C90 does not like that as initializer*/ + +typedef struct Hash { + int* head; /*hash value to head circular pos - can be outdated if went around window*/ + /*circular pos to prev circular pos*/ + unsigned short* chain; + int* val; /*circular pos to hash value*/ + + /*TODO: do this not only for zeros but for any repeated byte. However for PNG + it's always going to be the zeros that dominate, so not important for PNG*/ + int* headz; /*similar to head, but for chainz*/ + unsigned short* chainz; /*those with same amount of zeros*/ + unsigned short* zeros; /*length of zeros streak, used as a second hash chain*/ +} Hash; + +static unsigned hash_init(Hash* hash, unsigned windowsize) { + unsigned i; + hash->head = (int*)lodepng_malloc(sizeof(int) * HASH_NUM_VALUES); + hash->val = (int*)lodepng_malloc(sizeof(int) * windowsize); + hash->chain = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); + + hash->zeros = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); + hash->headz = (int*)lodepng_malloc(sizeof(int) * (MAX_SUPPORTED_DEFLATE_LENGTH + 1)); + hash->chainz = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); + + if(!hash->head || !hash->chain || !hash->val || !hash->headz|| !hash->chainz || !hash->zeros) { + return 83; /*alloc fail*/ + } + + /*initialize hash table*/ + for(i = 0; i != HASH_NUM_VALUES; ++i) hash->head[i] = -1; + for(i = 0; i != windowsize; ++i) hash->val[i] = -1; + for(i = 0; i != windowsize; ++i) hash->chain[i] = i; /*same value as index indicates uninitialized*/ + + for(i = 0; i <= MAX_SUPPORTED_DEFLATE_LENGTH; ++i) hash->headz[i] = -1; + for(i = 0; i != windowsize; ++i) hash->chainz[i] = i; /*same value as index indicates uninitialized*/ + + return 0; +} + +static void hash_cleanup(Hash* hash) { + lodepng_free(hash->head); + lodepng_free(hash->val); + lodepng_free(hash->chain); + + lodepng_free(hash->zeros); + lodepng_free(hash->headz); + lodepng_free(hash->chainz); +} + + + +static unsigned getHash(const unsigned char* data, size_t size, size_t pos) { + unsigned result = 0; + if(pos + 2 < size) { + /*A simple shift and xor hash is used. Since the data of PNGs is dominated + by zeroes due to the filters, a better hash does not have a significant + effect on speed in traversing the chain, and causes more time spend on + calculating the hash.*/ + result ^= ((unsigned)data[pos + 0] << 0u); + result ^= ((unsigned)data[pos + 1] << 4u); + result ^= ((unsigned)data[pos + 2] << 8u); + } else { + size_t amount, i; + if(pos >= size) return 0; + amount = size - pos; + for(i = 0; i != amount; ++i) result ^= ((unsigned)data[pos + i] << (i * 8u)); + } + return result & HASH_BIT_MASK; +} + +static unsigned countZeros(const unsigned char* data, size_t size, size_t pos) { + const unsigned char* start = data + pos; + const unsigned char* end = start + MAX_SUPPORTED_DEFLATE_LENGTH; + if(end > data + size) end = data + size; + data = start; + while(data != end && *data == 0) ++data; + /*subtracting two addresses returned as 32-bit number (max value is MAX_SUPPORTED_DEFLATE_LENGTH)*/ + return (unsigned)(data - start); +} + +/*wpos = pos & (windowsize - 1)*/ +static void updateHashChain(Hash* hash, size_t wpos, unsigned hashval, unsigned short numzeros) { + hash->val[wpos] = (int)hashval; + if(hash->head[hashval] != -1) hash->chain[wpos] = hash->head[hashval]; + hash->head[hashval] = (int)wpos; + + hash->zeros[wpos] = numzeros; + if(hash->headz[numzeros] != -1) hash->chainz[wpos] = hash->headz[numzeros]; + hash->headz[numzeros] = (int)wpos; +} + +/* +LZ77-encode the data. Return value is error code. The input are raw bytes, the output +is in the form of unsigned integers with codes representing for example literal bytes, or +length/distance pairs. +It uses a hash table technique to let it encode faster. When doing LZ77 encoding, a +sliding window (of windowsize) is used, and all past bytes in that window can be used as +the "dictionary". A brute force search through all possible distances would be slow, and +this hash technique is one out of several ways to speed this up. +*/ +static unsigned encodeLZ77(uivector* out, Hash* hash, + const unsigned char* in, size_t inpos, size_t insize, unsigned windowsize, + unsigned minmatch, unsigned nicematch, unsigned lazymatching) { + size_t pos; + unsigned i, error = 0; + /*for large window lengths, assume the user wants no compression loss. Otherwise, max hash chain length speedup.*/ + unsigned maxchainlength = windowsize >= 8192 ? windowsize : windowsize / 8u; + unsigned maxlazymatch = windowsize >= 8192 ? MAX_SUPPORTED_DEFLATE_LENGTH : 64; + + unsigned usezeros = 1; /*not sure if setting it to false for windowsize < 8192 is better or worse*/ + unsigned numzeros = 0; + + unsigned offset; /*the offset represents the distance in LZ77 terminology*/ + unsigned length; + unsigned lazy = 0; + unsigned lazylength = 0, lazyoffset = 0; + unsigned hashval; + unsigned current_offset, current_length; + unsigned prev_offset; + const unsigned char *lastptr, *foreptr, *backptr; + unsigned hashpos; + + if(windowsize == 0 || windowsize > 32768) return 60; /*error: windowsize smaller/larger than allowed*/ + if((windowsize & (windowsize - 1)) != 0) return 90; /*error: must be power of two*/ + + if(nicematch > MAX_SUPPORTED_DEFLATE_LENGTH) nicematch = MAX_SUPPORTED_DEFLATE_LENGTH; + + for(pos = inpos; pos < insize; ++pos) { + size_t wpos = pos & (windowsize - 1); /*position for in 'circular' hash buffers*/ + unsigned chainlength = 0; + + hashval = getHash(in, insize, pos); + + if(usezeros && hashval == 0) { + if(numzeros == 0) numzeros = countZeros(in, insize, pos); + else if(pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros; + } else { + numzeros = 0; + } + + updateHashChain(hash, wpos, hashval, numzeros); + + /*the length and offset found for the current position*/ + length = 0; + offset = 0; + + hashpos = hash->chain[wpos]; + + lastptr = &in[insize < pos + MAX_SUPPORTED_DEFLATE_LENGTH ? insize : pos + MAX_SUPPORTED_DEFLATE_LENGTH]; + + /*search for the longest string*/ + prev_offset = 0; + for(;;) { + if(chainlength++ >= maxchainlength) break; + current_offset = (unsigned)(hashpos <= wpos ? wpos - hashpos : wpos - hashpos + windowsize); + + if(current_offset < prev_offset) break; /*stop when went completely around the circular buffer*/ + prev_offset = current_offset; + if(current_offset > 0) { + /*test the next characters*/ + foreptr = &in[pos]; + backptr = &in[pos - current_offset]; + + /*common case in PNGs is lots of zeros. Quickly skip over them as a speedup*/ + if(numzeros >= 3) { + unsigned skip = hash->zeros[hashpos]; + if(skip > numzeros) skip = numzeros; + backptr += skip; + foreptr += skip; + } + + while(foreptr != lastptr && *backptr == *foreptr) /*maximum supported length by deflate is max length*/ { + ++backptr; + ++foreptr; + } + current_length = (unsigned)(foreptr - &in[pos]); + + if(current_length > length) { + length = current_length; /*the longest length*/ + offset = current_offset; /*the offset that is related to this longest length*/ + /*jump out once a length of max length is found (speed gain). This also jumps + out if length is MAX_SUPPORTED_DEFLATE_LENGTH*/ + if(current_length >= nicematch) break; + } + } + + if(hashpos == hash->chain[hashpos]) break; + + if(numzeros >= 3 && length > numzeros) { + hashpos = hash->chainz[hashpos]; + if(hash->zeros[hashpos] != numzeros) break; + } else { + hashpos = hash->chain[hashpos]; + /*outdated hash value, happens if particular value was not encountered in whole last window*/ + if(hash->val[hashpos] != (int)hashval) break; + } + } + + if(lazymatching) { + if(!lazy && length >= 3 && length <= maxlazymatch && length < MAX_SUPPORTED_DEFLATE_LENGTH) { + lazy = 1; + lazylength = length; + lazyoffset = offset; + continue; /*try the next byte*/ + } + if(lazy) { + lazy = 0; + if(pos == 0) ERROR_BREAK(81); + if(length > lazylength + 1) { + /*push the previous character as literal*/ + if(!uivector_push_back(out, in[pos - 1])) ERROR_BREAK(83 /*alloc fail*/); + } else { + length = lazylength; + offset = lazyoffset; + hash->head[hashval] = -1; /*the same hashchain update will be done, this ensures no wrong alteration*/ + hash->headz[numzeros] = -1; /*idem*/ + --pos; + } + } + } + if(length >= 3 && offset > windowsize) ERROR_BREAK(86 /*too big (or overflown negative) offset*/); + + /*encode it as length/distance pair or literal value*/ + if(length < 3) /*only lengths of 3 or higher are supported as length/distance pair*/ { + if(!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/); + } else if(length < minmatch || (length == 3 && offset > 4096)) { + /*compensate for the fact that longer offsets have more extra bits, a + length of only 3 may be not worth it then*/ + if(!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/); + } else { + addLengthDistance(out, length, offset); + for(i = 1; i < length; ++i) { + ++pos; + wpos = pos & (windowsize - 1); + hashval = getHash(in, insize, pos); + if(usezeros && hashval == 0) { + if(numzeros == 0) numzeros = countZeros(in, insize, pos); + else if(pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros; + } else { + numzeros = 0; + } + updateHashChain(hash, wpos, hashval, numzeros); + } + } + } /*end of the loop through each character of input*/ + + return error; +} + +/* /////////////////////////////////////////////////////////////////////////// */ + +static unsigned deflateNoCompression(ucvector* out, const unsigned char* data, size_t datasize) { + /*non compressed deflate block data: 1 bit BFINAL,2 bits BTYPE,(5 bits): it jumps to start of next byte, + 2 bytes LEN, 2 bytes NLEN, LEN bytes literal DATA*/ + + size_t i, numdeflateblocks = (datasize + 65534u) / 65535u; + unsigned datapos = 0; + for(i = 0; i != numdeflateblocks; ++i) { + unsigned BFINAL, BTYPE, LEN, NLEN; + unsigned char firstbyte; + size_t pos = out->size; + + BFINAL = (i == numdeflateblocks - 1); + BTYPE = 0; + + LEN = 65535; + if(datasize - datapos < 65535u) LEN = (unsigned)datasize - datapos; + NLEN = 65535 - LEN; + + if(!ucvector_resize(out, out->size + LEN + 5)) return 83; /*alloc fail*/ + + firstbyte = (unsigned char)(BFINAL + ((BTYPE & 1u) << 1u) + ((BTYPE & 2u) << 1u)); + out->data[pos + 0] = firstbyte; + out->data[pos + 1] = (unsigned char)(LEN & 255); + out->data[pos + 2] = (unsigned char)(LEN >> 8u); + out->data[pos + 3] = (unsigned char)(NLEN & 255); + out->data[pos + 4] = (unsigned char)(NLEN >> 8u); + lodepng_memcpy(out->data + pos + 5, data + datapos, LEN); + datapos += LEN; + } + + return 0; +} + +/* +write the lz77-encoded data, which has lit, len and dist codes, to compressed stream using huffman trees. +tree_ll: the tree for lit and len codes. +tree_d: the tree for distance codes. +*/ +static void writeLZ77data(LodePNGBitWriter* writer, const uivector* lz77_encoded, + const HuffmanTree* tree_ll, const HuffmanTree* tree_d) { + size_t i = 0; + for(i = 0; i != lz77_encoded->size; ++i) { + unsigned val = lz77_encoded->data[i]; + writeBitsReversed(writer, tree_ll->codes[val], tree_ll->lengths[val]); + if(val > 256) /*for a length code, 3 more things have to be added*/ { + unsigned length_index = val - FIRST_LENGTH_CODE_INDEX; + unsigned n_length_extra_bits = LENGTHEXTRA[length_index]; + unsigned length_extra_bits = lz77_encoded->data[++i]; + + unsigned distance_code = lz77_encoded->data[++i]; + + unsigned distance_index = distance_code; + unsigned n_distance_extra_bits = DISTANCEEXTRA[distance_index]; + unsigned distance_extra_bits = lz77_encoded->data[++i]; + + writeBits(writer, length_extra_bits, n_length_extra_bits); + writeBitsReversed(writer, tree_d->codes[distance_code], tree_d->lengths[distance_code]); + writeBits(writer, distance_extra_bits, n_distance_extra_bits); + } + } +} + +/*Deflate for a block of type "dynamic", that is, with freely, optimally, created huffman trees*/ +static unsigned deflateDynamic(LodePNGBitWriter* writer, Hash* hash, + const unsigned char* data, size_t datapos, size_t dataend, + const LodePNGCompressSettings* settings, unsigned final) { + unsigned error = 0; + + /* + A block is compressed as follows: The PNG data is lz77 encoded, resulting in + literal bytes and length/distance pairs. This is then huffman compressed with + two huffman trees. One huffman tree is used for the lit and len values ("ll"), + another huffman tree is used for the dist values ("d"). These two trees are + stored using their code lengths, and to compress even more these code lengths + are also run-length encoded and huffman compressed. This gives a huffman tree + of code lengths "cl". The code lengths used to describe this third tree are + the code length code lengths ("clcl"). + */ + + /*The lz77 encoded data, represented with integers since there will also be length and distance codes in it*/ + uivector lz77_encoded; + HuffmanTree tree_ll; /*tree for lit,len values*/ + HuffmanTree tree_d; /*tree for distance codes*/ + HuffmanTree tree_cl; /*tree for encoding the code lengths representing tree_ll and tree_d*/ + unsigned* frequencies_ll = 0; /*frequency of lit,len codes*/ + unsigned* frequencies_d = 0; /*frequency of dist codes*/ + unsigned* frequencies_cl = 0; /*frequency of code length codes*/ + unsigned* bitlen_lld = 0; /*lit,len,dist code lengths (int bits), literally (without repeat codes).*/ + unsigned* bitlen_lld_e = 0; /*bitlen_lld encoded with repeat codes (this is a rudimentary run length compression)*/ + size_t datasize = dataend - datapos; + + /* + If we could call "bitlen_cl" the the code length code lengths ("clcl"), that is the bit lengths of codes to represent + tree_cl in CLCL_ORDER, then due to the huffman compression of huffman tree representations ("two levels"), there are + some analogies: + bitlen_lld is to tree_cl what data is to tree_ll and tree_d. + bitlen_lld_e is to bitlen_lld what lz77_encoded is to data. + bitlen_cl is to bitlen_lld_e what bitlen_lld is to lz77_encoded. + */ + + unsigned BFINAL = final; + size_t i; + size_t numcodes_ll, numcodes_d, numcodes_lld, numcodes_lld_e, numcodes_cl; + unsigned HLIT, HDIST, HCLEN; + + uivector_init(&lz77_encoded); + HuffmanTree_init(&tree_ll); + HuffmanTree_init(&tree_d); + HuffmanTree_init(&tree_cl); + /* could fit on stack, but >1KB is on the larger side so allocate instead */ + frequencies_ll = (unsigned*)lodepng_malloc(286 * sizeof(*frequencies_ll)); + frequencies_d = (unsigned*)lodepng_malloc(30 * sizeof(*frequencies_d)); + frequencies_cl = (unsigned*)lodepng_malloc(NUM_CODE_LENGTH_CODES * sizeof(*frequencies_cl)); + + if(!frequencies_ll || !frequencies_d || !frequencies_cl) error = 83; /*alloc fail*/ + + /*This while loop never loops due to a break at the end, it is here to + allow breaking out of it to the cleanup phase on error conditions.*/ + while(!error) { + lodepng_memset(frequencies_ll, 0, 286 * sizeof(*frequencies_ll)); + lodepng_memset(frequencies_d, 0, 30 * sizeof(*frequencies_d)); + lodepng_memset(frequencies_cl, 0, NUM_CODE_LENGTH_CODES * sizeof(*frequencies_cl)); + + if(settings->use_lz77) { + error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize, + settings->minmatch, settings->nicematch, settings->lazymatching); + if(error) break; + } else { + if(!uivector_resize(&lz77_encoded, datasize)) ERROR_BREAK(83 /*alloc fail*/); + for(i = datapos; i < dataend; ++i) lz77_encoded.data[i - datapos] = data[i]; /*no LZ77, but still will be Huffman compressed*/ + } + + /*Count the frequencies of lit, len and dist codes*/ + for(i = 0; i != lz77_encoded.size; ++i) { + unsigned symbol = lz77_encoded.data[i]; + ++frequencies_ll[symbol]; + if(symbol > 256) { + unsigned dist = lz77_encoded.data[i + 2]; + ++frequencies_d[dist]; + i += 3; + } + } + frequencies_ll[256] = 1; /*there will be exactly 1 end code, at the end of the block*/ + + /*Make both huffman trees, one for the lit and len codes, one for the dist codes*/ + error = HuffmanTree_makeFromFrequencies(&tree_ll, frequencies_ll, 257, 286, 15); + if(error) break; + /*2, not 1, is chosen for mincodes: some buggy PNG decoders require at least 2 symbols in the dist tree*/ + error = HuffmanTree_makeFromFrequencies(&tree_d, frequencies_d, 2, 30, 15); + if(error) break; + + numcodes_ll = LODEPNG_MIN(tree_ll.numcodes, 286); + numcodes_d = LODEPNG_MIN(tree_d.numcodes, 30); + /*store the code lengths of both generated trees in bitlen_lld*/ + numcodes_lld = numcodes_ll + numcodes_d; + bitlen_lld = (unsigned*)lodepng_malloc(numcodes_lld * sizeof(*bitlen_lld)); + /*numcodes_lld_e never needs more size than bitlen_lld*/ + bitlen_lld_e = (unsigned*)lodepng_malloc(numcodes_lld * sizeof(*bitlen_lld_e)); + if(!bitlen_lld || !bitlen_lld_e) ERROR_BREAK(83); /*alloc fail*/ + numcodes_lld_e = 0; + + for(i = 0; i != numcodes_ll; ++i) bitlen_lld[i] = tree_ll.lengths[i]; + for(i = 0; i != numcodes_d; ++i) bitlen_lld[numcodes_ll + i] = tree_d.lengths[i]; + + /*run-length compress bitlen_ldd into bitlen_lld_e by using repeat codes 16 (copy length 3-6 times), + 17 (3-10 zeroes), 18 (11-138 zeroes)*/ + for(i = 0; i != numcodes_lld; ++i) { + unsigned j = 0; /*amount of repetitions*/ + while(i + j + 1 < numcodes_lld && bitlen_lld[i + j + 1] == bitlen_lld[i]) ++j; + + if(bitlen_lld[i] == 0 && j >= 2) /*repeat code for zeroes*/ { + ++j; /*include the first zero*/ + if(j <= 10) /*repeat code 17 supports max 10 zeroes*/ { + bitlen_lld_e[numcodes_lld_e++] = 17; + bitlen_lld_e[numcodes_lld_e++] = j - 3; + } else /*repeat code 18 supports max 138 zeroes*/ { + if(j > 138) j = 138; + bitlen_lld_e[numcodes_lld_e++] = 18; + bitlen_lld_e[numcodes_lld_e++] = j - 11; + } + i += (j - 1); + } else if(j >= 3) /*repeat code for value other than zero*/ { + size_t k; + unsigned num = j / 6u, rest = j % 6u; + bitlen_lld_e[numcodes_lld_e++] = bitlen_lld[i]; + for(k = 0; k < num; ++k) { + bitlen_lld_e[numcodes_lld_e++] = 16; + bitlen_lld_e[numcodes_lld_e++] = 6 - 3; + } + if(rest >= 3) { + bitlen_lld_e[numcodes_lld_e++] = 16; + bitlen_lld_e[numcodes_lld_e++] = rest - 3; + } + else j -= rest; + i += j; + } else /*too short to benefit from repeat code*/ { + bitlen_lld_e[numcodes_lld_e++] = bitlen_lld[i]; + } + } + + /*generate tree_cl, the huffmantree of huffmantrees*/ + for(i = 0; i != numcodes_lld_e; ++i) { + ++frequencies_cl[bitlen_lld_e[i]]; + /*after a repeat code come the bits that specify the number of repetitions, + those don't need to be in the frequencies_cl calculation*/ + if(bitlen_lld_e[i] >= 16) ++i; + } + + error = HuffmanTree_makeFromFrequencies(&tree_cl, frequencies_cl, + NUM_CODE_LENGTH_CODES, NUM_CODE_LENGTH_CODES, 7); + if(error) break; + + /*compute amount of code-length-code-lengths to output*/ + numcodes_cl = NUM_CODE_LENGTH_CODES; + /*trim zeros at the end (using CLCL_ORDER), but minimum size must be 4 (see HCLEN below)*/ + while(numcodes_cl > 4u && tree_cl.lengths[CLCL_ORDER[numcodes_cl - 1u]] == 0) { + numcodes_cl--; + } + + /* + Write everything into the output + + After the BFINAL and BTYPE, the dynamic block consists out of the following: + - 5 bits HLIT, 5 bits HDIST, 4 bits HCLEN + - (HCLEN+4)*3 bits code lengths of code length alphabet + - HLIT + 257 code lengths of lit/length alphabet (encoded using the code length + alphabet, + possible repetition codes 16, 17, 18) + - HDIST + 1 code lengths of distance alphabet (encoded using the code length + alphabet, + possible repetition codes 16, 17, 18) + - compressed data + - 256 (end code) + */ + + /*Write block type*/ + writeBits(writer, BFINAL, 1); + writeBits(writer, 0, 1); /*first bit of BTYPE "dynamic"*/ + writeBits(writer, 1, 1); /*second bit of BTYPE "dynamic"*/ + + /*write the HLIT, HDIST and HCLEN values*/ + /*all three sizes take trimmed ending zeroes into account, done either by HuffmanTree_makeFromFrequencies + or in the loop for numcodes_cl above, which saves space. */ + HLIT = (unsigned)(numcodes_ll - 257); + HDIST = (unsigned)(numcodes_d - 1); + HCLEN = (unsigned)(numcodes_cl - 4); + writeBits(writer, HLIT, 5); + writeBits(writer, HDIST, 5); + writeBits(writer, HCLEN, 4); + + /*write the code lengths of the code length alphabet ("bitlen_cl")*/ + for(i = 0; i != numcodes_cl; ++i) writeBits(writer, tree_cl.lengths[CLCL_ORDER[i]], 3); + + /*write the lengths of the lit/len AND the dist alphabet*/ + for(i = 0; i != numcodes_lld_e; ++i) { + writeBitsReversed(writer, tree_cl.codes[bitlen_lld_e[i]], tree_cl.lengths[bitlen_lld_e[i]]); + /*extra bits of repeat codes*/ + if(bitlen_lld_e[i] == 16) writeBits(writer, bitlen_lld_e[++i], 2); + else if(bitlen_lld_e[i] == 17) writeBits(writer, bitlen_lld_e[++i], 3); + else if(bitlen_lld_e[i] == 18) writeBits(writer, bitlen_lld_e[++i], 7); + } + + /*write the compressed data symbols*/ + writeLZ77data(writer, &lz77_encoded, &tree_ll, &tree_d); + /*error: the length of the end code 256 must be larger than 0*/ + if(tree_ll.lengths[256] == 0) ERROR_BREAK(64); + + /*write the end code*/ + writeBitsReversed(writer, tree_ll.codes[256], tree_ll.lengths[256]); + + break; /*end of error-while*/ + } + + /*cleanup*/ + uivector_cleanup(&lz77_encoded); + HuffmanTree_cleanup(&tree_ll); + HuffmanTree_cleanup(&tree_d); + HuffmanTree_cleanup(&tree_cl); + lodepng_free(frequencies_ll); + lodepng_free(frequencies_d); + lodepng_free(frequencies_cl); + lodepng_free(bitlen_lld); + lodepng_free(bitlen_lld_e); + + return error; +} + +static unsigned deflateFixed(LodePNGBitWriter* writer, Hash* hash, + const unsigned char* data, + size_t datapos, size_t dataend, + const LodePNGCompressSettings* settings, unsigned final) { + HuffmanTree tree_ll; /*tree for literal values and length codes*/ + HuffmanTree tree_d; /*tree for distance codes*/ + + unsigned BFINAL = final; + unsigned error = 0; + size_t i; + + HuffmanTree_init(&tree_ll); + HuffmanTree_init(&tree_d); + + error = generateFixedLitLenTree(&tree_ll); + if(!error) error = generateFixedDistanceTree(&tree_d); + + if(!error) { + writeBits(writer, BFINAL, 1); + writeBits(writer, 1, 1); /*first bit of BTYPE*/ + writeBits(writer, 0, 1); /*second bit of BTYPE*/ + + if(settings->use_lz77) /*LZ77 encoded*/ { + uivector lz77_encoded; + uivector_init(&lz77_encoded); + error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize, + settings->minmatch, settings->nicematch, settings->lazymatching); + if(!error) writeLZ77data(writer, &lz77_encoded, &tree_ll, &tree_d); + uivector_cleanup(&lz77_encoded); + } else /*no LZ77, but still will be Huffman compressed*/ { + for(i = datapos; i < dataend; ++i) { + writeBitsReversed(writer, tree_ll.codes[data[i]], tree_ll.lengths[data[i]]); + } + } + /*add END code*/ + if(!error) writeBitsReversed(writer,tree_ll.codes[256], tree_ll.lengths[256]); + } + + /*cleanup*/ + HuffmanTree_cleanup(&tree_ll); + HuffmanTree_cleanup(&tree_d); + + return error; +} + +static unsigned lodepng_deflatev(ucvector* out, const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings) { + unsigned error = 0; + size_t i, blocksize, numdeflateblocks; + Hash hash; + LodePNGBitWriter writer; + + LodePNGBitWriter_init(&writer, out); + + if(settings->btype > 2) return 61; + else if(settings->btype == 0) return deflateNoCompression(out, in, insize); + else if(settings->btype == 1) blocksize = insize; + else /*if(settings->btype == 2)*/ { + /*on PNGs, deflate blocks of 65-262k seem to give most dense encoding*/ + blocksize = insize / 8u + 8; + if(blocksize < 65536) blocksize = 65536; + if(blocksize > 262144) blocksize = 262144; + } + + numdeflateblocks = (insize + blocksize - 1) / blocksize; + if(numdeflateblocks == 0) numdeflateblocks = 1; + + error = hash_init(&hash, settings->windowsize); + + if(!error) { + for(i = 0; i != numdeflateblocks && !error; ++i) { + unsigned final = (i == numdeflateblocks - 1); + size_t start = i * blocksize; + size_t end = start + blocksize; + if(end > insize) end = insize; + + if(settings->btype == 1) error = deflateFixed(&writer, &hash, in, start, end, settings, final); + else if(settings->btype == 2) error = deflateDynamic(&writer, &hash, in, start, end, settings, final); + } + } + + hash_cleanup(&hash); + + return error; +} + +unsigned lodepng_deflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings) { + ucvector v = ucvector_init(*out, *outsize); + unsigned error = lodepng_deflatev(&v, in, insize, settings); + *out = v.data; + *outsize = v.size; + return error; +} + +static unsigned deflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings) { + if(settings->custom_deflate) { + unsigned error = settings->custom_deflate(out, outsize, in, insize, settings); + /*the custom deflate is allowed to have its own error codes, however, we translate it to code 111*/ + return error ? 111 : 0; + } else { + return lodepng_deflate(out, outsize, in, insize, settings); + } +} + +#endif /*LODEPNG_COMPILE_DECODER*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Adler32 / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +static unsigned update_adler32(unsigned adler, const unsigned char* data, unsigned len) { + unsigned s1 = adler & 0xffffu; + unsigned s2 = (adler >> 16u) & 0xffffu; + + while(len != 0u) { + unsigned i; + /*at least 5552 sums can be done before the sums overflow, saving a lot of module divisions*/ + unsigned amount = len > 5552u ? 5552u : len; + len -= amount; + for(i = 0; i != amount; ++i) { + s1 += (*data++); + s2 += s1; + } + s1 %= 65521u; + s2 %= 65521u; + } + + return (s2 << 16u) | s1; +} + +/*Return the adler32 of the bytes data[0..len-1]*/ +static unsigned adler32(const unsigned char* data, unsigned len) { + return update_adler32(1u, data, len); +} + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Zlib / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_DECODER + +static unsigned lodepng_zlib_decompressv(ucvector* out, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings) { + unsigned error = 0; + unsigned CM, CINFO, FDICT; + + if(insize < 2) return 53; /*error, size of zlib data too small*/ + /*read information from zlib header*/ + if((in[0] * 256 + in[1]) % 31 != 0) { + /*error: 256 * in[0] + in[1] must be a multiple of 31, the FCHECK value is supposed to be made that way*/ + return 24; + } + + CM = in[0] & 15; + CINFO = (in[0] >> 4) & 15; + /*FCHECK = in[1] & 31;*/ /*FCHECK is already tested above*/ + FDICT = (in[1] >> 5) & 1; + /*FLEVEL = (in[1] >> 6) & 3;*/ /*FLEVEL is not used here*/ + + if(CM != 8 || CINFO > 7) { + /*error: only compression method 8: inflate with sliding window of 32k is supported by the PNG spec*/ + return 25; + } + if(FDICT != 0) { + /*error: the specification of PNG says about the zlib stream: + "The additional flags shall not specify a preset dictionary."*/ + return 26; + } + + error = inflatev(out, in + 2, insize - 2, settings); + if(error) return error; + + if(!settings->ignore_adler32) { + unsigned ADLER32 = lodepng_read32bitInt(&in[insize - 4]); + unsigned checksum = adler32(out->data, (unsigned)(out->size)); + if(checksum != ADLER32) return 58; /*error, adler checksum not correct, data must be corrupted*/ + } + + return 0; /*no error*/ +} + + +unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGDecompressSettings* settings) { + ucvector v = ucvector_init(*out, *outsize); + unsigned error = lodepng_zlib_decompressv(&v, in, insize, settings); + *out = v.data; + *outsize = v.size; + return error; +} + +/*expected_size is expected output size, to avoid intermediate allocations. Set to 0 if not known. */ +static unsigned zlib_decompress(unsigned char** out, size_t* outsize, size_t expected_size, + const unsigned char* in, size_t insize, const LodePNGDecompressSettings* settings) { + unsigned error; + if(settings->custom_zlib) { + error = settings->custom_zlib(out, outsize, in, insize, settings); + if(error) { + /*the custom zlib is allowed to have its own error codes, however, we translate it to code 110*/ + error = 110; + /*if there's a max output size, and the custom zlib returned error, then indicate that error instead*/ + if(settings->max_output_size && *outsize > settings->max_output_size) error = 109; + } + } else { + ucvector v = ucvector_init(*out, *outsize); + if(expected_size) { + /*reserve the memory to avoid intermediate reallocations*/ + ucvector_resize(&v, *outsize + expected_size); + v.size = *outsize; + } + error = lodepng_zlib_decompressv(&v, in, insize, settings); + *out = v.data; + *outsize = v.size; + } + return error; +} + +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER + +unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGCompressSettings* settings) { + size_t i; + unsigned error; + unsigned char* deflatedata = 0; + size_t deflatesize = 0; + + error = deflate(&deflatedata, &deflatesize, in, insize, settings); + + *out = NULL; + *outsize = 0; + if(!error) { + *outsize = deflatesize + 6; + *out = (unsigned char*)lodepng_malloc(*outsize); + if(!*out) error = 83; /*alloc fail*/ + } + + if(!error) { + unsigned ADLER32 = adler32(in, (unsigned)insize); + /*zlib data: 1 byte CMF (CM+CINFO), 1 byte FLG, deflate data, 4 byte ADLER32 checksum of the Decompressed data*/ + unsigned CMF = 120; /*0b01111000: CM 8, CINFO 7. With CINFO 7, any window size up to 32768 can be used.*/ + unsigned FLEVEL = 0; + unsigned FDICT = 0; + unsigned CMFFLG = 256 * CMF + FDICT * 32 + FLEVEL * 64; + unsigned FCHECK = 31 - CMFFLG % 31; + CMFFLG += FCHECK; + + (*out)[0] = (unsigned char)(CMFFLG >> 8); + (*out)[1] = (unsigned char)(CMFFLG & 255); + for(i = 0; i != deflatesize; ++i) (*out)[i + 2] = deflatedata[i]; + lodepng_set32bitInt(&(*out)[*outsize - 4], ADLER32); + } + + lodepng_free(deflatedata); + return error; +} + +/* compress using the default or custom zlib function */ +static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGCompressSettings* settings) { + if(settings->custom_zlib) { + unsigned error = settings->custom_zlib(out, outsize, in, insize, settings); + /*the custom zlib is allowed to have its own error codes, however, we translate it to code 111*/ + return error ? 111 : 0; + } else { + return lodepng_zlib_compress(out, outsize, in, insize, settings); + } +} + +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#else /*no LODEPNG_COMPILE_ZLIB*/ + +#ifdef LODEPNG_COMPILE_DECODER +static unsigned zlib_decompress(unsigned char** out, size_t* outsize, size_t expected_size, + const unsigned char* in, size_t insize, const LodePNGDecompressSettings* settings) { + if(!settings->custom_zlib) return 87; /*no custom zlib function provided */ + (void)expected_size; + return settings->custom_zlib(out, outsize, in, insize, settings); +} +#endif /*LODEPNG_COMPILE_DECODER*/ +#ifdef LODEPNG_COMPILE_ENCODER +static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGCompressSettings* settings) { + if(!settings->custom_zlib) return 87; /*no custom zlib function provided */ + return settings->custom_zlib(out, outsize, in, insize, settings); +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#endif /*LODEPNG_COMPILE_ZLIB*/ + +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_ENCODER + +/*this is a good tradeoff between speed and compression ratio*/ +#define DEFAULT_WINDOWSIZE 2048 + +void lodepng_compress_settings_init(LodePNGCompressSettings* settings) { + /*compress with dynamic huffman tree (not in the mathematical sense, just not the predefined one)*/ + settings->btype = 2; + settings->use_lz77 = 1; + settings->windowsize = DEFAULT_WINDOWSIZE; + settings->minmatch = 3; + settings->nicematch = 128; + settings->lazymatching = 1; + + settings->custom_zlib = 0; + settings->custom_deflate = 0; + settings->custom_context = 0; +} + +const LodePNGCompressSettings lodepng_default_compress_settings = {2, 1, DEFAULT_WINDOWSIZE, 3, 128, 1, 0, 0, 0}; + + +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#ifdef LODEPNG_COMPILE_DECODER + +void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings) { + settings->ignore_adler32 = 0; + settings->ignore_nlen = 0; + settings->max_output_size = 0; + + settings->custom_zlib = 0; + settings->custom_inflate = 0; + settings->custom_context = 0; +} + +const LodePNGDecompressSettings lodepng_default_decompress_settings = {0, 0, 0, 0, 0, 0}; + +#endif /*LODEPNG_COMPILE_DECODER*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* // End of Zlib related code. Begin of PNG related code. // */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_PNG + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / CRC32 / */ +/* ////////////////////////////////////////////////////////////////////////// */ + + +#ifndef LODEPNG_NO_COMPILE_CRC +/* CRC polynomial: 0xedb88320 */ +static unsigned lodepng_crc32_table[256] = { + 0u, 1996959894u, 3993919788u, 2567524794u, 124634137u, 1886057615u, 3915621685u, 2657392035u, + 249268274u, 2044508324u, 3772115230u, 2547177864u, 162941995u, 2125561021u, 3887607047u, 2428444049u, + 498536548u, 1789927666u, 4089016648u, 2227061214u, 450548861u, 1843258603u, 4107580753u, 2211677639u, + 325883990u, 1684777152u, 4251122042u, 2321926636u, 335633487u, 1661365465u, 4195302755u, 2366115317u, + 997073096u, 1281953886u, 3579855332u, 2724688242u, 1006888145u, 1258607687u, 3524101629u, 2768942443u, + 901097722u, 1119000684u, 3686517206u, 2898065728u, 853044451u, 1172266101u, 3705015759u, 2882616665u, + 651767980u, 1373503546u, 3369554304u, 3218104598u, 565507253u, 1454621731u, 3485111705u, 3099436303u, + 671266974u, 1594198024u, 3322730930u, 2970347812u, 795835527u, 1483230225u, 3244367275u, 3060149565u, + 1994146192u, 31158534u, 2563907772u, 4023717930u, 1907459465u, 112637215u, 2680153253u, 3904427059u, + 2013776290u, 251722036u, 2517215374u, 3775830040u, 2137656763u, 141376813u, 2439277719u, 3865271297u, + 1802195444u, 476864866u, 2238001368u, 4066508878u, 1812370925u, 453092731u, 2181625025u, 4111451223u, + 1706088902u, 314042704u, 2344532202u, 4240017532u, 1658658271u, 366619977u, 2362670323u, 4224994405u, + 1303535960u, 984961486u, 2747007092u, 3569037538u, 1256170817u, 1037604311u, 2765210733u, 3554079995u, + 1131014506u, 879679996u, 2909243462u, 3663771856u, 1141124467u, 855842277u, 2852801631u, 3708648649u, + 1342533948u, 654459306u, 3188396048u, 3373015174u, 1466479909u, 544179635u, 3110523913u, 3462522015u, + 1591671054u, 702138776u, 2966460450u, 3352799412u, 1504918807u, 783551873u, 3082640443u, 3233442989u, + 3988292384u, 2596254646u, 62317068u, 1957810842u, 3939845945u, 2647816111u, 81470997u, 1943803523u, + 3814918930u, 2489596804u, 225274430u, 2053790376u, 3826175755u, 2466906013u, 167816743u, 2097651377u, + 4027552580u, 2265490386u, 503444072u, 1762050814u, 4150417245u, 2154129355u, 426522225u, 1852507879u, + 4275313526u, 2312317920u, 282753626u, 1742555852u, 4189708143u, 2394877945u, 397917763u, 1622183637u, + 3604390888u, 2714866558u, 953729732u, 1340076626u, 3518719985u, 2797360999u, 1068828381u, 1219638859u, + 3624741850u, 2936675148u, 906185462u, 1090812512u, 3747672003u, 2825379669u, 829329135u, 1181335161u, + 3412177804u, 3160834842u, 628085408u, 1382605366u, 3423369109u, 3138078467u, 570562233u, 1426400815u, + 3317316542u, 2998733608u, 733239954u, 1555261956u, 3268935591u, 3050360625u, 752459403u, 1541320221u, + 2607071920u, 3965973030u, 1969922972u, 40735498u, 2617837225u, 3943577151u, 1913087877u, 83908371u, + 2512341634u, 3803740692u, 2075208622u, 213261112u, 2463272603u, 3855990285u, 2094854071u, 198958881u, + 2262029012u, 4057260610u, 1759359992u, 534414190u, 2176718541u, 4139329115u, 1873836001u, 414664567u, + 2282248934u, 4279200368u, 1711684554u, 285281116u, 2405801727u, 4167216745u, 1634467795u, 376229701u, + 2685067896u, 3608007406u, 1308918612u, 956543938u, 2808555105u, 3495958263u, 1231636301u, 1047427035u, + 2932959818u, 3654703836u, 1088359270u, 936918000u, 2847714899u, 3736837829u, 1202900863u, 817233897u, + 3183342108u, 3401237130u, 1404277552u, 615818150u, 3134207493u, 3453421203u, 1423857449u, 601450431u, + 3009837614u, 3294710456u, 1567103746u, 711928724u, 3020668471u, 3272380065u, 1510334235u, 755167117u +}; + +/*Return the CRC of the bytes buf[0..len-1].*/ +unsigned lodepng_crc32(const unsigned char* data, size_t length) { + unsigned r = 0xffffffffu; + size_t i; + for(i = 0; i < length; ++i) { + r = lodepng_crc32_table[(r ^ data[i]) & 0xffu] ^ (r >> 8u); + } + return r ^ 0xffffffffu; +} +#else /* !LODEPNG_NO_COMPILE_CRC */ +unsigned lodepng_crc32(const unsigned char* data, size_t length); +#endif /* !LODEPNG_NO_COMPILE_CRC */ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Reading and writing PNG color channel bits / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/* The color channel bits of less-than-8-bit pixels are read with the MSB of bytes first, +so LodePNGBitWriter and LodePNGBitReader can't be used for those. */ + +static unsigned char readBitFromReversedStream(size_t* bitpointer, const unsigned char* bitstream) { + unsigned char result = (unsigned char)((bitstream[(*bitpointer) >> 3] >> (7 - ((*bitpointer) & 0x7))) & 1); + ++(*bitpointer); + return result; +} + +/* TODO: make this faster */ +static unsigned readBitsFromReversedStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits) { + unsigned result = 0; + size_t i; + for(i = 0 ; i < nbits; ++i) { + result <<= 1u; + result |= (unsigned)readBitFromReversedStream(bitpointer, bitstream); + } + return result; +} + +static void setBitOfReversedStream(size_t* bitpointer, unsigned char* bitstream, unsigned char bit) { + /*the current bit in bitstream may be 0 or 1 for this to work*/ + if(bit == 0) bitstream[(*bitpointer) >> 3u] &= (unsigned char)(~(1u << (7u - ((*bitpointer) & 7u)))); + else bitstream[(*bitpointer) >> 3u] |= (1u << (7u - ((*bitpointer) & 7u))); + ++(*bitpointer); +} + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / PNG chunks / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +unsigned lodepng_chunk_length(const unsigned char* chunk) { + return lodepng_read32bitInt(&chunk[0]); +} + +void lodepng_chunk_type(char type[5], const unsigned char* chunk) { + unsigned i; + for(i = 0; i != 4; ++i) type[i] = (char)chunk[4 + i]; + type[4] = 0; /*null termination char*/ +} + +unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type) { + if(lodepng_strlen(type) != 4) return 0; + return (chunk[4] == type[0] && chunk[5] == type[1] && chunk[6] == type[2] && chunk[7] == type[3]); +} + +unsigned char lodepng_chunk_ancillary(const unsigned char* chunk) { + return((chunk[4] & 32) != 0); +} + +unsigned char lodepng_chunk_private(const unsigned char* chunk) { + return((chunk[6] & 32) != 0); +} + +unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk) { + return((chunk[7] & 32) != 0); +} + +unsigned char* lodepng_chunk_data(unsigned char* chunk) { + return &chunk[8]; +} + +const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk) { + return &chunk[8]; +} + +unsigned lodepng_chunk_check_crc(const unsigned char* chunk) { + unsigned length = lodepng_chunk_length(chunk); + unsigned CRC = lodepng_read32bitInt(&chunk[length + 8]); + /*the CRC is taken of the data and the 4 chunk type letters, not the length*/ + unsigned checksum = lodepng_crc32(&chunk[4], length + 4); + if(CRC != checksum) return 1; + else return 0; +} + +void lodepng_chunk_generate_crc(unsigned char* chunk) { + unsigned length = lodepng_chunk_length(chunk); + unsigned CRC = lodepng_crc32(&chunk[4], length + 4); + lodepng_set32bitInt(chunk + 8 + length, CRC); +} + +unsigned char* lodepng_chunk_next(unsigned char* chunk, unsigned char* end) { + if(chunk >= end || end - chunk < 12) return end; /*too small to contain a chunk*/ + if(chunk[0] == 0x89 && chunk[1] == 0x50 && chunk[2] == 0x4e && chunk[3] == 0x47 + && chunk[4] == 0x0d && chunk[5] == 0x0a && chunk[6] == 0x1a && chunk[7] == 0x0a) { + /* Is PNG magic header at start of PNG file. Jump to first actual chunk. */ + return chunk + 8; + } else { + size_t total_chunk_length; + unsigned char* result; + if(lodepng_addofl(lodepng_chunk_length(chunk), 12, &total_chunk_length)) return end; + result = chunk + total_chunk_length; + if(result < chunk) return end; /*pointer overflow*/ + return result; + } +} + +const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk, const unsigned char* end) { + if(chunk >= end || end - chunk < 12) return end; /*too small to contain a chunk*/ + if(chunk[0] == 0x89 && chunk[1] == 0x50 && chunk[2] == 0x4e && chunk[3] == 0x47 + && chunk[4] == 0x0d && chunk[5] == 0x0a && chunk[6] == 0x1a && chunk[7] == 0x0a) { + /* Is PNG magic header at start of PNG file. Jump to first actual chunk. */ + return chunk + 8; + } else { + size_t total_chunk_length; + const unsigned char* result; + if(lodepng_addofl(lodepng_chunk_length(chunk), 12, &total_chunk_length)) return end; + result = chunk + total_chunk_length; + if(result < chunk) return end; /*pointer overflow*/ + return result; + } +} + +unsigned char* lodepng_chunk_find(unsigned char* chunk, unsigned char* end, const char type[5]) { + for(;;) { + if(chunk >= end || end - chunk < 12) return 0; /* past file end: chunk + 12 > end */ + if(lodepng_chunk_type_equals(chunk, type)) return chunk; + chunk = lodepng_chunk_next(chunk, end); + } +} + +const unsigned char* lodepng_chunk_find_const(const unsigned char* chunk, const unsigned char* end, const char type[5]) { + for(;;) { + if(chunk >= end || end - chunk < 12) return 0; /* past file end: chunk + 12 > end */ + if(lodepng_chunk_type_equals(chunk, type)) return chunk; + chunk = lodepng_chunk_next_const(chunk, end); + } +} + +unsigned lodepng_chunk_append(unsigned char** out, size_t* outsize, const unsigned char* chunk) { + unsigned i; + size_t total_chunk_length, new_length; + unsigned char *chunk_start, *new_buffer; + + if(lodepng_addofl(lodepng_chunk_length(chunk), 12, &total_chunk_length)) return 77; + if(lodepng_addofl(*outsize, total_chunk_length, &new_length)) return 77; + + new_buffer = (unsigned char*)lodepng_realloc(*out, new_length); + if(!new_buffer) return 83; /*alloc fail*/ + (*out) = new_buffer; + (*outsize) = new_length; + chunk_start = &(*out)[new_length - total_chunk_length]; + + for(i = 0; i != total_chunk_length; ++i) chunk_start[i] = chunk[i]; + + return 0; +} + +/*Sets length and name and allocates the space for data and crc but does not +set data or crc yet. Returns the start of the chunk in chunk. The start of +the data is at chunk + 8. To finalize chunk, add the data, then use +lodepng_chunk_generate_crc */ +static unsigned lodepng_chunk_init(unsigned char** chunk, + ucvector* out, + unsigned length, const char* type) { + size_t new_length = out->size; + if(lodepng_addofl(new_length, length, &new_length)) return 77; + if(lodepng_addofl(new_length, 12, &new_length)) return 77; + if(!ucvector_resize(out, new_length)) return 83; /*alloc fail*/ + *chunk = out->data + new_length - length - 12u; + + /*1: length*/ + lodepng_set32bitInt(*chunk, length); + + /*2: chunk name (4 letters)*/ + lodepng_memcpy(*chunk + 4, type, 4); + + return 0; +} + +/* like lodepng_chunk_create but with custom allocsize */ +static unsigned lodepng_chunk_createv(ucvector* out, + unsigned length, const char* type, const unsigned char* data) { + unsigned char* chunk; + CERROR_TRY_RETURN(lodepng_chunk_init(&chunk, out, length, type)); + + /*3: the data*/ + lodepng_memcpy(chunk + 8, data, length); + + /*4: CRC (of the chunkname characters and the data)*/ + lodepng_chunk_generate_crc(chunk); + + return 0; +} + +unsigned lodepng_chunk_create(unsigned char** out, size_t* outsize, + unsigned length, const char* type, const unsigned char* data) { + ucvector v = ucvector_init(*out, *outsize); + unsigned error = lodepng_chunk_createv(&v, length, type, data); + *out = v.data; + *outsize = v.size; + return error; +} + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Color types, channels, bits / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/*checks if the colortype is valid and the bitdepth bd is allowed for this colortype. +Return value is a LodePNG error code.*/ +static unsigned checkColorValidity(LodePNGColorType colortype, unsigned bd) { + switch(colortype) { + case LCT_GREY: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8 || bd == 16)) return 37; break; + case LCT_RGB: if(!( bd == 8 || bd == 16)) return 37; break; + case LCT_PALETTE: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8 )) return 37; break; + case LCT_GREY_ALPHA: if(!( bd == 8 || bd == 16)) return 37; break; + case LCT_RGBA: if(!( bd == 8 || bd == 16)) return 37; break; + case LCT_MAX_OCTET_VALUE: return 31; /* invalid color type */ + default: return 31; /* invalid color type */ + } + return 0; /*allowed color type / bits combination*/ +} + +static unsigned getNumColorChannels(LodePNGColorType colortype) { + switch(colortype) { + case LCT_GREY: return 1; + case LCT_RGB: return 3; + case LCT_PALETTE: return 1; + case LCT_GREY_ALPHA: return 2; + case LCT_RGBA: return 4; + case LCT_MAX_OCTET_VALUE: return 0; /* invalid color type */ + default: return 0; /*invalid color type*/ + } +} + +static unsigned lodepng_get_bpp_lct(LodePNGColorType colortype, unsigned bitdepth) { + /*bits per pixel is amount of channels * bits per channel*/ + return getNumColorChannels(colortype) * bitdepth; +} + +/* ////////////////////////////////////////////////////////////////////////// */ + +void lodepng_color_mode_init(LodePNGColorMode* info) { + info->key_defined = 0; + info->key_r = info->key_g = info->key_b = 0; + info->colortype = LCT_RGBA; + info->bitdepth = 8; + info->palette = 0; + info->palettesize = 0; +} + +/*allocates palette memory if needed, and initializes all colors to black*/ +static void lodepng_color_mode_alloc_palette(LodePNGColorMode* info) { + size_t i; + /*if the palette is already allocated, it will have size 1024 so no reallocation needed in that case*/ + /*the palette must have room for up to 256 colors with 4 bytes each.*/ + if(!info->palette) info->palette = (unsigned char*)lodepng_malloc(1024); + if(!info->palette) return; /*alloc fail*/ + for(i = 0; i != 256; ++i) { + /*Initialize all unused colors with black, the value used for invalid palette indices. + This is an error according to the PNG spec, but common PNG decoders make it black instead. + That makes color conversion slightly faster due to no error handling needed.*/ + info->palette[i * 4 + 0] = 0; + info->palette[i * 4 + 1] = 0; + info->palette[i * 4 + 2] = 0; + info->palette[i * 4 + 3] = 255; + } +} + +void lodepng_color_mode_cleanup(LodePNGColorMode* info) { + lodepng_palette_clear(info); +} + +unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source) { + lodepng_color_mode_cleanup(dest); + lodepng_memcpy(dest, source, sizeof(LodePNGColorMode)); + if(source->palette) { + dest->palette = (unsigned char*)lodepng_malloc(1024); + if(!dest->palette && source->palettesize) return 83; /*alloc fail*/ + lodepng_memcpy(dest->palette, source->palette, source->palettesize * 4); + } + return 0; +} + +LodePNGColorMode lodepng_color_mode_make(LodePNGColorType colortype, unsigned bitdepth) { + LodePNGColorMode result; + lodepng_color_mode_init(&result); + result.colortype = colortype; + result.bitdepth = bitdepth; + return result; +} + +static int lodepng_color_mode_equal(const LodePNGColorMode* a, const LodePNGColorMode* b) { + size_t i; + if(a->colortype != b->colortype) return 0; + if(a->bitdepth != b->bitdepth) return 0; + if(a->key_defined != b->key_defined) return 0; + if(a->key_defined) { + if(a->key_r != b->key_r) return 0; + if(a->key_g != b->key_g) return 0; + if(a->key_b != b->key_b) return 0; + } + if(a->palettesize != b->palettesize) return 0; + for(i = 0; i != a->palettesize * 4; ++i) { + if(a->palette[i] != b->palette[i]) return 0; + } + return 1; +} + +void lodepng_palette_clear(LodePNGColorMode* info) { + if(info->palette) lodepng_free(info->palette); + info->palette = 0; + info->palettesize = 0; +} + +unsigned lodepng_palette_add(LodePNGColorMode* info, + unsigned char r, unsigned char g, unsigned char b, unsigned char a) { + if(!info->palette) /*allocate palette if empty*/ { + lodepng_color_mode_alloc_palette(info); + if(!info->palette) return 83; /*alloc fail*/ + } + if(info->palettesize >= 256) { + return 108; /*too many palette values*/ + } + info->palette[4 * info->palettesize + 0] = r; + info->palette[4 * info->palettesize + 1] = g; + info->palette[4 * info->palettesize + 2] = b; + info->palette[4 * info->palettesize + 3] = a; + ++info->palettesize; + return 0; +} + +/*calculate bits per pixel out of colortype and bitdepth*/ +unsigned lodepng_get_bpp(const LodePNGColorMode* info) { + return lodepng_get_bpp_lct(info->colortype, info->bitdepth); +} + +unsigned lodepng_get_channels(const LodePNGColorMode* info) { + return getNumColorChannels(info->colortype); +} + +unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info) { + return info->colortype == LCT_GREY || info->colortype == LCT_GREY_ALPHA; +} + +unsigned lodepng_is_alpha_type(const LodePNGColorMode* info) { + return (info->colortype & 4) != 0; /*4 or 6*/ +} + +unsigned lodepng_is_palette_type(const LodePNGColorMode* info) { + return info->colortype == LCT_PALETTE; +} + +unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info) { + size_t i; + for(i = 0; i != info->palettesize; ++i) { + if(info->palette[i * 4 + 3] < 255) return 1; + } + return 0; +} + +unsigned lodepng_can_have_alpha(const LodePNGColorMode* info) { + return info->key_defined + || lodepng_is_alpha_type(info) + || lodepng_has_palette_alpha(info); +} + +static size_t lodepng_get_raw_size_lct(unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth) { + size_t bpp = lodepng_get_bpp_lct(colortype, bitdepth); + size_t n = (size_t)w * (size_t)h; + return ((n / 8u) * bpp) + ((n & 7u) * bpp + 7u) / 8u; +} + +size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color) { + return lodepng_get_raw_size_lct(w, h, color->colortype, color->bitdepth); +} + + +#ifdef LODEPNG_COMPILE_PNG + +/*in an idat chunk, each scanline is a multiple of 8 bits, unlike the lodepng output buffer, +and in addition has one extra byte per line: the filter byte. So this gives a larger +result than lodepng_get_raw_size. Set h to 1 to get the size of 1 row including filter byte. */ +static size_t lodepng_get_raw_size_idat(unsigned w, unsigned h, unsigned bpp) { + /* + 1 for the filter byte, and possibly plus padding bits per line. */ + /* Ignoring casts, the expression is equal to (w * bpp + 7) / 8 + 1, but avoids overflow of w * bpp */ + size_t line = ((size_t)(w / 8u) * bpp) + 1u + ((w & 7u) * bpp + 7u) / 8u; + return (size_t)h * line; +} + +#ifdef LODEPNG_COMPILE_DECODER +/*Safely checks whether size_t overflow can be caused due to amount of pixels. +This check is overcautious rather than precise. If this check indicates no overflow, +you can safely compute in a size_t (but not an unsigned): +-(size_t)w * (size_t)h * 8 +-amount of bytes in IDAT (including filter, padding and Adam7 bytes) +-amount of bytes in raw color model +Returns 1 if overflow possible, 0 if not. +*/ +static int lodepng_pixel_overflow(unsigned w, unsigned h, + const LodePNGColorMode* pngcolor, const LodePNGColorMode* rawcolor) { + size_t bpp = LODEPNG_MAX(lodepng_get_bpp(pngcolor), lodepng_get_bpp(rawcolor)); + size_t numpixels, total; + size_t line; /* bytes per line in worst case */ + + if(lodepng_mulofl((size_t)w, (size_t)h, &numpixels)) return 1; + if(lodepng_mulofl(numpixels, 8, &total)) return 1; /* bit pointer with 8-bit color, or 8 bytes per channel color */ + + /* Bytes per scanline with the expression "(w / 8u) * bpp) + ((w & 7u) * bpp + 7u) / 8u" */ + if(lodepng_mulofl((size_t)(w / 8u), bpp, &line)) return 1; + if(lodepng_addofl(line, ((w & 7u) * bpp + 7u) / 8u, &line)) return 1; + + if(lodepng_addofl(line, 5, &line)) return 1; /* 5 bytes overhead per line: 1 filterbyte, 4 for Adam7 worst case */ + if(lodepng_mulofl(line, h, &total)) return 1; /* Total bytes in worst case */ + + return 0; /* no overflow */ +} +#endif /*LODEPNG_COMPILE_DECODER*/ +#endif /*LODEPNG_COMPILE_PNG*/ + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + +static void LodePNGUnknownChunks_init(LodePNGInfo* info) { + unsigned i; + for(i = 0; i != 3; ++i) info->unknown_chunks_data[i] = 0; + for(i = 0; i != 3; ++i) info->unknown_chunks_size[i] = 0; +} + +static void LodePNGUnknownChunks_cleanup(LodePNGInfo* info) { + unsigned i; + for(i = 0; i != 3; ++i) lodepng_free(info->unknown_chunks_data[i]); +} + +static unsigned LodePNGUnknownChunks_copy(LodePNGInfo* dest, const LodePNGInfo* src) { + unsigned i; + + LodePNGUnknownChunks_cleanup(dest); + + for(i = 0; i != 3; ++i) { + size_t j; + dest->unknown_chunks_size[i] = src->unknown_chunks_size[i]; + dest->unknown_chunks_data[i] = (unsigned char*)lodepng_malloc(src->unknown_chunks_size[i]); + if(!dest->unknown_chunks_data[i] && dest->unknown_chunks_size[i]) return 83; /*alloc fail*/ + for(j = 0; j < src->unknown_chunks_size[i]; ++j) { + dest->unknown_chunks_data[i][j] = src->unknown_chunks_data[i][j]; + } + } + + return 0; +} + +/******************************************************************************/ + +static void LodePNGText_init(LodePNGInfo* info) { + info->text_num = 0; + info->text_keys = NULL; + info->text_strings = NULL; +} + +static void LodePNGText_cleanup(LodePNGInfo* info) { + size_t i; + for(i = 0; i != info->text_num; ++i) { + string_cleanup(&info->text_keys[i]); + string_cleanup(&info->text_strings[i]); + } + lodepng_free(info->text_keys); + lodepng_free(info->text_strings); +} + +static unsigned LodePNGText_copy(LodePNGInfo* dest, const LodePNGInfo* source) { + size_t i = 0; + dest->text_keys = NULL; + dest->text_strings = NULL; + dest->text_num = 0; + for(i = 0; i != source->text_num; ++i) { + CERROR_TRY_RETURN(lodepng_add_text(dest, source->text_keys[i], source->text_strings[i])); + } + return 0; +} + +static unsigned lodepng_add_text_sized(LodePNGInfo* info, const char* key, const char* str, size_t size) { + char** new_keys = (char**)(lodepng_realloc(info->text_keys, sizeof(char*) * (info->text_num + 1))); + char** new_strings = (char**)(lodepng_realloc(info->text_strings, sizeof(char*) * (info->text_num + 1))); + + if(new_keys) info->text_keys = new_keys; + if(new_strings) info->text_strings = new_strings; + + if(!new_keys || !new_strings) return 83; /*alloc fail*/ + + ++info->text_num; + info->text_keys[info->text_num - 1] = alloc_string(key); + info->text_strings[info->text_num - 1] = alloc_string_sized(str, size); + if(!info->text_keys[info->text_num - 1] || !info->text_strings[info->text_num - 1]) return 83; /*alloc fail*/ + + return 0; +} + +unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str) { + return lodepng_add_text_sized(info, key, str, lodepng_strlen(str)); +} + +void lodepng_clear_text(LodePNGInfo* info) { + LodePNGText_cleanup(info); +} + +/******************************************************************************/ + +static void LodePNGIText_init(LodePNGInfo* info) { + info->itext_num = 0; + info->itext_keys = NULL; + info->itext_langtags = NULL; + info->itext_transkeys = NULL; + info->itext_strings = NULL; +} + +static void LodePNGIText_cleanup(LodePNGInfo* info) { + size_t i; + for(i = 0; i != info->itext_num; ++i) { + string_cleanup(&info->itext_keys[i]); + string_cleanup(&info->itext_langtags[i]); + string_cleanup(&info->itext_transkeys[i]); + string_cleanup(&info->itext_strings[i]); + } + lodepng_free(info->itext_keys); + lodepng_free(info->itext_langtags); + lodepng_free(info->itext_transkeys); + lodepng_free(info->itext_strings); +} + +static unsigned LodePNGIText_copy(LodePNGInfo* dest, const LodePNGInfo* source) { + size_t i = 0; + dest->itext_keys = NULL; + dest->itext_langtags = NULL; + dest->itext_transkeys = NULL; + dest->itext_strings = NULL; + dest->itext_num = 0; + for(i = 0; i != source->itext_num; ++i) { + CERROR_TRY_RETURN(lodepng_add_itext(dest, source->itext_keys[i], source->itext_langtags[i], + source->itext_transkeys[i], source->itext_strings[i])); + } + return 0; +} + +void lodepng_clear_itext(LodePNGInfo* info) { + LodePNGIText_cleanup(info); +} + +static unsigned lodepng_add_itext_sized(LodePNGInfo* info, const char* key, const char* langtag, + const char* transkey, const char* str, size_t size) { + char** new_keys = (char**)(lodepng_realloc(info->itext_keys, sizeof(char*) * (info->itext_num + 1))); + char** new_langtags = (char**)(lodepng_realloc(info->itext_langtags, sizeof(char*) * (info->itext_num + 1))); + char** new_transkeys = (char**)(lodepng_realloc(info->itext_transkeys, sizeof(char*) * (info->itext_num + 1))); + char** new_strings = (char**)(lodepng_realloc(info->itext_strings, sizeof(char*) * (info->itext_num + 1))); + + if(new_keys) info->itext_keys = new_keys; + if(new_langtags) info->itext_langtags = new_langtags; + if(new_transkeys) info->itext_transkeys = new_transkeys; + if(new_strings) info->itext_strings = new_strings; + + if(!new_keys || !new_langtags || !new_transkeys || !new_strings) return 83; /*alloc fail*/ + + ++info->itext_num; + + info->itext_keys[info->itext_num - 1] = alloc_string(key); + info->itext_langtags[info->itext_num - 1] = alloc_string(langtag); + info->itext_transkeys[info->itext_num - 1] = alloc_string(transkey); + info->itext_strings[info->itext_num - 1] = alloc_string_sized(str, size); + + return 0; +} + +unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag, + const char* transkey, const char* str) { + return lodepng_add_itext_sized(info, key, langtag, transkey, str, lodepng_strlen(str)); +} + +/* same as set but does not delete */ +static unsigned lodepng_assign_icc(LodePNGInfo* info, const char* name, const unsigned char* profile, unsigned profile_size) { + if(profile_size == 0) return 100; /*invalid ICC profile size*/ + + info->iccp_name = alloc_string(name); + info->iccp_profile = (unsigned char*)lodepng_malloc(profile_size); + + if(!info->iccp_name || !info->iccp_profile) return 83; /*alloc fail*/ + + lodepng_memcpy(info->iccp_profile, profile, profile_size); + info->iccp_profile_size = profile_size; + + return 0; /*ok*/ +} + +unsigned lodepng_set_icc(LodePNGInfo* info, const char* name, const unsigned char* profile, unsigned profile_size) { + if(info->iccp_name) lodepng_clear_icc(info); + info->iccp_defined = 1; + + return lodepng_assign_icc(info, name, profile, profile_size); +} + +void lodepng_clear_icc(LodePNGInfo* info) { + string_cleanup(&info->iccp_name); + lodepng_free(info->iccp_profile); + info->iccp_profile = NULL; + info->iccp_profile_size = 0; + info->iccp_defined = 0; +} +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +void lodepng_info_init(LodePNGInfo* info) { + lodepng_color_mode_init(&info->color); + info->interlace_method = 0; + info->compression_method = 0; + info->filter_method = 0; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + info->background_defined = 0; + info->background_r = info->background_g = info->background_b = 0; + + LodePNGText_init(info); + LodePNGIText_init(info); + + info->time_defined = 0; + info->phys_defined = 0; + + info->gama_defined = 0; + info->chrm_defined = 0; + info->srgb_defined = 0; + info->iccp_defined = 0; + info->iccp_name = NULL; + info->iccp_profile = NULL; + + LodePNGUnknownChunks_init(info); +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} + +void lodepng_info_cleanup(LodePNGInfo* info) { + lodepng_color_mode_cleanup(&info->color); +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + LodePNGText_cleanup(info); + LodePNGIText_cleanup(info); + + lodepng_clear_icc(info); + + LodePNGUnknownChunks_cleanup(info); +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} + +unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source) { + lodepng_info_cleanup(dest); + lodepng_memcpy(dest, source, sizeof(LodePNGInfo)); + lodepng_color_mode_init(&dest->color); + CERROR_TRY_RETURN(lodepng_color_mode_copy(&dest->color, &source->color)); + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + CERROR_TRY_RETURN(LodePNGText_copy(dest, source)); + CERROR_TRY_RETURN(LodePNGIText_copy(dest, source)); + if(source->iccp_defined) { + CERROR_TRY_RETURN(lodepng_assign_icc(dest, source->iccp_name, source->iccp_profile, source->iccp_profile_size)); + } + + LodePNGUnknownChunks_init(dest); + CERROR_TRY_RETURN(LodePNGUnknownChunks_copy(dest, source)); +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + return 0; +} + +/* ////////////////////////////////////////////////////////////////////////// */ + +/*index: bitgroup index, bits: bitgroup size(1, 2 or 4), in: bitgroup value, out: octet array to add bits to*/ +static void addColorBits(unsigned char* out, size_t index, unsigned bits, unsigned in) { + unsigned m = bits == 1 ? 7 : bits == 2 ? 3 : 1; /*8 / bits - 1*/ + /*p = the partial index in the byte, e.g. with 4 palettebits it is 0 for first half or 1 for second half*/ + unsigned p = index & m; + in &= (1u << bits) - 1u; /*filter out any other bits of the input value*/ + in = in << (bits * (m - p)); + if(p == 0) out[index * bits / 8u] = in; + else out[index * bits / 8u] |= in; +} + +typedef struct ColorTree ColorTree; + +/* +One node of a color tree +This is the data structure used to count the number of unique colors and to get a palette +index for a color. It's like an octree, but because the alpha channel is used too, each +node has 16 instead of 8 children. +*/ +struct ColorTree { + ColorTree* children[16]; /*up to 16 pointers to ColorTree of next level*/ + int index; /*the payload. Only has a meaningful value if this is in the last level*/ +}; + +static void color_tree_init(ColorTree* tree) { + lodepng_memset(tree->children, 0, 16 * sizeof(*tree->children)); + tree->index = -1; +} + +static void color_tree_cleanup(ColorTree* tree) { + int i; + for(i = 0; i != 16; ++i) { + if(tree->children[i]) { + color_tree_cleanup(tree->children[i]); + lodepng_free(tree->children[i]); + } + } +} + +/*returns -1 if color not present, its index otherwise*/ +static int color_tree_get(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a) { + int bit = 0; + for(bit = 0; bit < 8; ++bit) { + int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1); + if(!tree->children[i]) return -1; + else tree = tree->children[i]; + } + return tree ? tree->index : -1; +} + +#ifdef LODEPNG_COMPILE_ENCODER +static int color_tree_has(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a) { + return color_tree_get(tree, r, g, b, a) >= 0; +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +/*color is not allowed to already exist. +Index should be >= 0 (it's signed to be compatible with using -1 for "doesn't exist") +Returns error code, or 0 if ok*/ +static unsigned color_tree_add(ColorTree* tree, + unsigned char r, unsigned char g, unsigned char b, unsigned char a, unsigned index) { + int bit; + for(bit = 0; bit < 8; ++bit) { + int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1); + if(!tree->children[i]) { + tree->children[i] = (ColorTree*)lodepng_malloc(sizeof(ColorTree)); + if(!tree->children[i]) return 83; /*alloc fail*/ + color_tree_init(tree->children[i]); + } + tree = tree->children[i]; + } + tree->index = (int)index; + return 0; +} + +/*put a pixel, given its RGBA color, into image of any color type*/ +static unsigned rgba8ToPixel(unsigned char* out, size_t i, + const LodePNGColorMode* mode, ColorTree* tree /*for palette*/, + unsigned char r, unsigned char g, unsigned char b, unsigned char a) { + if(mode->colortype == LCT_GREY) { + unsigned char gray = r; /*((unsigned short)r + g + b) / 3u;*/ + if(mode->bitdepth == 8) out[i] = gray; + else if(mode->bitdepth == 16) out[i * 2 + 0] = out[i * 2 + 1] = gray; + else { + /*take the most significant bits of gray*/ + gray = ((unsigned)gray >> (8u - mode->bitdepth)) & ((1u << mode->bitdepth) - 1u); + addColorBits(out, i, mode->bitdepth, gray); + } + } else if(mode->colortype == LCT_RGB) { + if(mode->bitdepth == 8) { + out[i * 3 + 0] = r; + out[i * 3 + 1] = g; + out[i * 3 + 2] = b; + } else { + out[i * 6 + 0] = out[i * 6 + 1] = r; + out[i * 6 + 2] = out[i * 6 + 3] = g; + out[i * 6 + 4] = out[i * 6 + 5] = b; + } + } else if(mode->colortype == LCT_PALETTE) { + int index = color_tree_get(tree, r, g, b, a); + if(index < 0) return 82; /*color not in palette*/ + if(mode->bitdepth == 8) out[i] = index; + else addColorBits(out, i, mode->bitdepth, (unsigned)index); + } else if(mode->colortype == LCT_GREY_ALPHA) { + unsigned char gray = r; /*((unsigned short)r + g + b) / 3u;*/ + if(mode->bitdepth == 8) { + out[i * 2 + 0] = gray; + out[i * 2 + 1] = a; + } else if(mode->bitdepth == 16) { + out[i * 4 + 0] = out[i * 4 + 1] = gray; + out[i * 4 + 2] = out[i * 4 + 3] = a; + } + } else if(mode->colortype == LCT_RGBA) { + if(mode->bitdepth == 8) { + out[i * 4 + 0] = r; + out[i * 4 + 1] = g; + out[i * 4 + 2] = b; + out[i * 4 + 3] = a; + } else { + out[i * 8 + 0] = out[i * 8 + 1] = r; + out[i * 8 + 2] = out[i * 8 + 3] = g; + out[i * 8 + 4] = out[i * 8 + 5] = b; + out[i * 8 + 6] = out[i * 8 + 7] = a; + } + } + + return 0; /*no error*/ +} + +/*put a pixel, given its RGBA16 color, into image of any color 16-bitdepth type*/ +static void rgba16ToPixel(unsigned char* out, size_t i, + const LodePNGColorMode* mode, + unsigned short r, unsigned short g, unsigned short b, unsigned short a) { + if(mode->colortype == LCT_GREY) { + unsigned short gray = r; /*((unsigned)r + g + b) / 3u;*/ + out[i * 2 + 0] = (gray >> 8) & 255; + out[i * 2 + 1] = gray & 255; + } else if(mode->colortype == LCT_RGB) { + out[i * 6 + 0] = (r >> 8) & 255; + out[i * 6 + 1] = r & 255; + out[i * 6 + 2] = (g >> 8) & 255; + out[i * 6 + 3] = g & 255; + out[i * 6 + 4] = (b >> 8) & 255; + out[i * 6 + 5] = b & 255; + } else if(mode->colortype == LCT_GREY_ALPHA) { + unsigned short gray = r; /*((unsigned)r + g + b) / 3u;*/ + out[i * 4 + 0] = (gray >> 8) & 255; + out[i * 4 + 1] = gray & 255; + out[i * 4 + 2] = (a >> 8) & 255; + out[i * 4 + 3] = a & 255; + } else if(mode->colortype == LCT_RGBA) { + out[i * 8 + 0] = (r >> 8) & 255; + out[i * 8 + 1] = r & 255; + out[i * 8 + 2] = (g >> 8) & 255; + out[i * 8 + 3] = g & 255; + out[i * 8 + 4] = (b >> 8) & 255; + out[i * 8 + 5] = b & 255; + out[i * 8 + 6] = (a >> 8) & 255; + out[i * 8 + 7] = a & 255; + } +} + +/*Get RGBA8 color of pixel with index i (y * width + x) from the raw image with given color type.*/ +static void getPixelColorRGBA8(unsigned char* r, unsigned char* g, + unsigned char* b, unsigned char* a, + const unsigned char* in, size_t i, + const LodePNGColorMode* mode) { + if(mode->colortype == LCT_GREY) { + if(mode->bitdepth == 8) { + *r = *g = *b = in[i]; + if(mode->key_defined && *r == mode->key_r) *a = 0; + else *a = 255; + } else if(mode->bitdepth == 16) { + *r = *g = *b = in[i * 2 + 0]; + if(mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0; + else *a = 255; + } else { + unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/ + size_t j = i * mode->bitdepth; + unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth); + *r = *g = *b = (value * 255) / highest; + if(mode->key_defined && value == mode->key_r) *a = 0; + else *a = 255; + } + } else if(mode->colortype == LCT_RGB) { + if(mode->bitdepth == 8) { + *r = in[i * 3 + 0]; *g = in[i * 3 + 1]; *b = in[i * 3 + 2]; + if(mode->key_defined && *r == mode->key_r && *g == mode->key_g && *b == mode->key_b) *a = 0; + else *a = 255; + } else { + *r = in[i * 6 + 0]; + *g = in[i * 6 + 2]; + *b = in[i * 6 + 4]; + if(mode->key_defined && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r + && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g + && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0; + else *a = 255; + } + } else if(mode->colortype == LCT_PALETTE) { + unsigned index; + if(mode->bitdepth == 8) index = in[i]; + else { + size_t j = i * mode->bitdepth; + index = readBitsFromReversedStream(&j, in, mode->bitdepth); + } + /*out of bounds of palette not checked: see lodepng_color_mode_alloc_palette.*/ + *r = mode->palette[index * 4 + 0]; + *g = mode->palette[index * 4 + 1]; + *b = mode->palette[index * 4 + 2]; + *a = mode->palette[index * 4 + 3]; + } else if(mode->colortype == LCT_GREY_ALPHA) { + if(mode->bitdepth == 8) { + *r = *g = *b = in[i * 2 + 0]; + *a = in[i * 2 + 1]; + } else { + *r = *g = *b = in[i * 4 + 0]; + *a = in[i * 4 + 2]; + } + } else if(mode->colortype == LCT_RGBA) { + if(mode->bitdepth == 8) { + *r = in[i * 4 + 0]; + *g = in[i * 4 + 1]; + *b = in[i * 4 + 2]; + *a = in[i * 4 + 3]; + } else { + *r = in[i * 8 + 0]; + *g = in[i * 8 + 2]; + *b = in[i * 8 + 4]; + *a = in[i * 8 + 6]; + } + } +} + +/*Similar to getPixelColorRGBA8, but with all the for loops inside of the color +mode test cases, optimized to convert the colors much faster, when converting +to the common case of RGBA with 8 bit per channel. buffer must be RGBA with +enough memory.*/ +static void getPixelColorsRGBA8(unsigned char* LODEPNG_RESTRICT buffer, size_t numpixels, + const unsigned char* LODEPNG_RESTRICT in, + const LodePNGColorMode* mode) { + unsigned num_channels = 4; + size_t i; + if(mode->colortype == LCT_GREY) { + if(mode->bitdepth == 8) { + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + buffer[0] = buffer[1] = buffer[2] = in[i]; + buffer[3] = 255; + } + if(mode->key_defined) { + buffer -= numpixels * num_channels; + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + if(buffer[0] == mode->key_r) buffer[3] = 0; + } + } + } else if(mode->bitdepth == 16) { + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + buffer[0] = buffer[1] = buffer[2] = in[i * 2]; + buffer[3] = mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r ? 0 : 255; + } + } else { + unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/ + size_t j = 0; + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth); + buffer[0] = buffer[1] = buffer[2] = (value * 255) / highest; + buffer[3] = mode->key_defined && value == mode->key_r ? 0 : 255; + } + } + } else if(mode->colortype == LCT_RGB) { + if(mode->bitdepth == 8) { + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + lodepng_memcpy(buffer, &in[i * 3], 3); + buffer[3] = 255; + } + if(mode->key_defined) { + buffer -= numpixels * num_channels; + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + if(buffer[0] == mode->key_r && buffer[1]== mode->key_g && buffer[2] == mode->key_b) buffer[3] = 0; + } + } + } else { + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + buffer[0] = in[i * 6 + 0]; + buffer[1] = in[i * 6 + 2]; + buffer[2] = in[i * 6 + 4]; + buffer[3] = mode->key_defined + && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r + && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g + && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b ? 0 : 255; + } + } + } else if(mode->colortype == LCT_PALETTE) { + if(mode->bitdepth == 8) { + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + unsigned index = in[i]; + /*out of bounds of palette not checked: see lodepng_color_mode_alloc_palette.*/ + lodepng_memcpy(buffer, &mode->palette[index * 4], 4); + } + } else { + size_t j = 0; + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + unsigned index = readBitsFromReversedStream(&j, in, mode->bitdepth); + /*out of bounds of palette not checked: see lodepng_color_mode_alloc_palette.*/ + lodepng_memcpy(buffer, &mode->palette[index * 4], 4); + } + } + } else if(mode->colortype == LCT_GREY_ALPHA) { + if(mode->bitdepth == 8) { + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + buffer[0] = buffer[1] = buffer[2] = in[i * 2 + 0]; + buffer[3] = in[i * 2 + 1]; + } + } else { + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + buffer[0] = buffer[1] = buffer[2] = in[i * 4 + 0]; + buffer[3] = in[i * 4 + 2]; + } + } + } else if(mode->colortype == LCT_RGBA) { + if(mode->bitdepth == 8) { + lodepng_memcpy(buffer, in, numpixels * 4); + } else { + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + buffer[0] = in[i * 8 + 0]; + buffer[1] = in[i * 8 + 2]; + buffer[2] = in[i * 8 + 4]; + buffer[3] = in[i * 8 + 6]; + } + } + } +} + +/*Similar to getPixelColorsRGBA8, but with 3-channel RGB output.*/ +static void getPixelColorsRGB8(unsigned char* LODEPNG_RESTRICT buffer, size_t numpixels, + const unsigned char* LODEPNG_RESTRICT in, + const LodePNGColorMode* mode) { + const unsigned num_channels = 3; + size_t i; + if(mode->colortype == LCT_GREY) { + if(mode->bitdepth == 8) { + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + buffer[0] = buffer[1] = buffer[2] = in[i]; + } + } else if(mode->bitdepth == 16) { + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + buffer[0] = buffer[1] = buffer[2] = in[i * 2]; + } + } else { + unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/ + size_t j = 0; + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth); + buffer[0] = buffer[1] = buffer[2] = (value * 255) / highest; + } + } + } else if(mode->colortype == LCT_RGB) { + if(mode->bitdepth == 8) { + lodepng_memcpy(buffer, in, numpixels * 3); + } else { + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + buffer[0] = in[i * 6 + 0]; + buffer[1] = in[i * 6 + 2]; + buffer[2] = in[i * 6 + 4]; + } + } + } else if(mode->colortype == LCT_PALETTE) { + if(mode->bitdepth == 8) { + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + unsigned index = in[i]; + /*out of bounds of palette not checked: see lodepng_color_mode_alloc_palette.*/ + lodepng_memcpy(buffer, &mode->palette[index * 4], 3); + } + } else { + size_t j = 0; + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + unsigned index = readBitsFromReversedStream(&j, in, mode->bitdepth); + /*out of bounds of palette not checked: see lodepng_color_mode_alloc_palette.*/ + lodepng_memcpy(buffer, &mode->palette[index * 4], 3); + } + } + } else if(mode->colortype == LCT_GREY_ALPHA) { + if(mode->bitdepth == 8) { + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + buffer[0] = buffer[1] = buffer[2] = in[i * 2 + 0]; + } + } else { + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + buffer[0] = buffer[1] = buffer[2] = in[i * 4 + 0]; + } + } + } else if(mode->colortype == LCT_RGBA) { + if(mode->bitdepth == 8) { + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + lodepng_memcpy(buffer, &in[i * 4], 3); + } + } else { + for(i = 0; i != numpixels; ++i, buffer += num_channels) { + buffer[0] = in[i * 8 + 0]; + buffer[1] = in[i * 8 + 2]; + buffer[2] = in[i * 8 + 4]; + } + } + } +} + +/*Get RGBA16 color of pixel with index i (y * width + x) from the raw image with +given color type, but the given color type must be 16-bit itself.*/ +static void getPixelColorRGBA16(unsigned short* r, unsigned short* g, unsigned short* b, unsigned short* a, + const unsigned char* in, size_t i, const LodePNGColorMode* mode) { + if(mode->colortype == LCT_GREY) { + *r = *g = *b = 256 * in[i * 2 + 0] + in[i * 2 + 1]; + if(mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0; + else *a = 65535; + } else if(mode->colortype == LCT_RGB) { + *r = 256u * in[i * 6 + 0] + in[i * 6 + 1]; + *g = 256u * in[i * 6 + 2] + in[i * 6 + 3]; + *b = 256u * in[i * 6 + 4] + in[i * 6 + 5]; + if(mode->key_defined + && 256u * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r + && 256u * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g + && 256u * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0; + else *a = 65535; + } else if(mode->colortype == LCT_GREY_ALPHA) { + *r = *g = *b = 256u * in[i * 4 + 0] + in[i * 4 + 1]; + *a = 256u * in[i * 4 + 2] + in[i * 4 + 3]; + } else if(mode->colortype == LCT_RGBA) { + *r = 256u * in[i * 8 + 0] + in[i * 8 + 1]; + *g = 256u * in[i * 8 + 2] + in[i * 8 + 3]; + *b = 256u * in[i * 8 + 4] + in[i * 8 + 5]; + *a = 256u * in[i * 8 + 6] + in[i * 8 + 7]; + } +} + +unsigned lodepng_convert(unsigned char* out, const unsigned char* in, + const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in, + unsigned w, unsigned h) { + size_t i; + ColorTree tree; + size_t numpixels = (size_t)w * (size_t)h; + unsigned error = 0; + + if(mode_in->colortype == LCT_PALETTE && !mode_in->palette) { + return 107; /* error: must provide palette if input mode is palette */ + } + + if(lodepng_color_mode_equal(mode_out, mode_in)) { + size_t numbytes = lodepng_get_raw_size(w, h, mode_in); + lodepng_memcpy(out, in, numbytes); + return 0; + } + + if(mode_out->colortype == LCT_PALETTE) { + size_t palettesize = mode_out->palettesize; + const unsigned char* palette = mode_out->palette; + size_t palsize = (size_t)1u << mode_out->bitdepth; + /*if the user specified output palette but did not give the values, assume + they want the values of the input color type (assuming that one is palette). + Note that we never create a new palette ourselves.*/ + if(palettesize == 0) { + palettesize = mode_in->palettesize; + palette = mode_in->palette; + /*if the input was also palette with same bitdepth, then the color types are also + equal, so copy literally. This to preserve the exact indices that were in the PNG + even in case there are duplicate colors in the palette.*/ + if(mode_in->colortype == LCT_PALETTE && mode_in->bitdepth == mode_out->bitdepth) { + size_t numbytes = lodepng_get_raw_size(w, h, mode_in); + lodepng_memcpy(out, in, numbytes); + return 0; + } + } + if(palettesize < palsize) palsize = palettesize; + color_tree_init(&tree); + for(i = 0; i != palsize; ++i) { + const unsigned char* p = &palette[i * 4]; + error = color_tree_add(&tree, p[0], p[1], p[2], p[3], (unsigned)i); + if(error) break; + } + } + + if(!error) { + if(mode_in->bitdepth == 16 && mode_out->bitdepth == 16) { + for(i = 0; i != numpixels; ++i) { + unsigned short r = 0, g = 0, b = 0, a = 0; + getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode_in); + rgba16ToPixel(out, i, mode_out, r, g, b, a); + } + } else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGBA) { + getPixelColorsRGBA8(out, numpixels, in, mode_in); + } else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGB) { + getPixelColorsRGB8(out, numpixels, in, mode_in); + } else { + unsigned char r = 0, g = 0, b = 0, a = 0; + for(i = 0; i != numpixels; ++i) { + getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode_in); + error = rgba8ToPixel(out, i, mode_out, &tree, r, g, b, a); + if(error) break; + } + } + } + + if(mode_out->colortype == LCT_PALETTE) { + color_tree_cleanup(&tree); + } + + return error; +} + + +/* Converts a single rgb color without alpha from one type to another, color bits truncated to +their bitdepth. In case of single channel (gray or palette), only the r channel is used. Slow +function, do not use to process all pixels of an image. Alpha channel not supported on purpose: +this is for bKGD, supporting alpha may prevent it from finding a color in the palette, from the +specification it looks like bKGD should ignore the alpha values of the palette since it can use +any palette index but doesn't have an alpha channel. Idem with ignoring color key. */ +unsigned lodepng_convert_rgb( + unsigned* r_out, unsigned* g_out, unsigned* b_out, + unsigned r_in, unsigned g_in, unsigned b_in, + const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in) { + unsigned r = 0, g = 0, b = 0; + unsigned mul = 65535 / ((1u << mode_in->bitdepth) - 1u); /*65535, 21845, 4369, 257, 1*/ + unsigned shift = 16 - mode_out->bitdepth; + + if(mode_in->colortype == LCT_GREY || mode_in->colortype == LCT_GREY_ALPHA) { + r = g = b = r_in * mul; + } else if(mode_in->colortype == LCT_RGB || mode_in->colortype == LCT_RGBA) { + r = r_in * mul; + g = g_in * mul; + b = b_in * mul; + } else if(mode_in->colortype == LCT_PALETTE) { + if(r_in >= mode_in->palettesize) return 82; + r = mode_in->palette[r_in * 4 + 0] * 257u; + g = mode_in->palette[r_in * 4 + 1] * 257u; + b = mode_in->palette[r_in * 4 + 2] * 257u; + } else { + return 31; + } + + /* now convert to output format */ + if(mode_out->colortype == LCT_GREY || mode_out->colortype == LCT_GREY_ALPHA) { + *r_out = r >> shift ; + } else if(mode_out->colortype == LCT_RGB || mode_out->colortype == LCT_RGBA) { + *r_out = r >> shift ; + *g_out = g >> shift ; + *b_out = b >> shift ; + } else if(mode_out->colortype == LCT_PALETTE) { + unsigned i; + /* a 16-bit color cannot be in the palette */ + if((r >> 8) != (r & 255) || (g >> 8) != (g & 255) || (b >> 8) != (b & 255)) return 82; + for(i = 0; i < mode_out->palettesize; i++) { + unsigned j = i * 4; + if((r >> 8) == mode_out->palette[j + 0] && (g >> 8) == mode_out->palette[j + 1] && + (b >> 8) == mode_out->palette[j + 2]) { + *r_out = i; + return 0; + } + } + return 82; + } else { + return 31; + } + + return 0; +} + +#ifdef LODEPNG_COMPILE_ENCODER + +void lodepng_color_stats_init(LodePNGColorStats* stats) { + /*stats*/ + stats->colored = 0; + stats->key = 0; + stats->key_r = stats->key_g = stats->key_b = 0; + stats->alpha = 0; + stats->numcolors = 0; + stats->bits = 1; + stats->numpixels = 0; + /*settings*/ + stats->allow_palette = 1; + stats->allow_greyscale = 1; +} + +/*function used for debug purposes with C++*/ +/*void printColorStats(LodePNGColorStats* p) { + std::cout << "colored: " << (int)p->colored << ", "; + std::cout << "key: " << (int)p->key << ", "; + std::cout << "key_r: " << (int)p->key_r << ", "; + std::cout << "key_g: " << (int)p->key_g << ", "; + std::cout << "key_b: " << (int)p->key_b << ", "; + std::cout << "alpha: " << (int)p->alpha << ", "; + std::cout << "numcolors: " << (int)p->numcolors << ", "; + std::cout << "bits: " << (int)p->bits << std::endl; +}*/ + +/*Returns how many bits needed to represent given value (max 8 bit)*/ +static unsigned getValueRequiredBits(unsigned char value) { + if(value == 0 || value == 255) return 1; + /*The scaling of 2-bit and 4-bit values uses multiples of 85 and 17*/ + if(value % 17 == 0) return value % 85 == 0 ? 2 : 4; + return 8; +} + +/*stats must already have been inited. */ +unsigned lodepng_compute_color_stats(LodePNGColorStats* stats, + const unsigned char* in, unsigned w, unsigned h, + const LodePNGColorMode* mode_in) { + size_t i; + ColorTree tree; + size_t numpixels = (size_t)w * (size_t)h; + unsigned error = 0; + + /* mark things as done already if it would be impossible to have a more expensive case */ + unsigned colored_done = lodepng_is_greyscale_type(mode_in) ? 1 : 0; + unsigned alpha_done = lodepng_can_have_alpha(mode_in) ? 0 : 1; + unsigned numcolors_done = 0; + unsigned bpp = lodepng_get_bpp(mode_in); + unsigned bits_done = (stats->bits == 1 && bpp == 1) ? 1 : 0; + unsigned sixteen = 0; /* whether the input image is 16 bit */ + unsigned maxnumcolors = 257; + if(bpp <= 8) maxnumcolors = LODEPNG_MIN(257, stats->numcolors + (1u << bpp)); + + stats->numpixels += numpixels; + + /*if palette not allowed, no need to compute numcolors*/ + if(!stats->allow_palette) numcolors_done = 1; + + color_tree_init(&tree); + + /*If the stats was already filled in from previous data, fill its palette in tree + and mark things as done already if we know they are the most expensive case already*/ + if(stats->alpha) alpha_done = 1; + if(stats->colored) colored_done = 1; + if(stats->bits == 16) numcolors_done = 1; + if(stats->bits >= bpp) bits_done = 1; + if(stats->numcolors >= maxnumcolors) numcolors_done = 1; + + if(!numcolors_done) { + for(i = 0; i < stats->numcolors; i++) { + const unsigned char* color = &stats->palette[i * 4]; + error = color_tree_add(&tree, color[0], color[1], color[2], color[3], i); + if(error) goto cleanup; + } + } + + /*Check if the 16-bit input is truly 16-bit*/ + if(mode_in->bitdepth == 16 && !sixteen) { + unsigned short r = 0, g = 0, b = 0, a = 0; + for(i = 0; i != numpixels; ++i) { + getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode_in); + if((r & 255) != ((r >> 8) & 255) || (g & 255) != ((g >> 8) & 255) || + (b & 255) != ((b >> 8) & 255) || (a & 255) != ((a >> 8) & 255)) /*first and second byte differ*/ { + stats->bits = 16; + sixteen = 1; + bits_done = 1; + numcolors_done = 1; /*counting colors no longer useful, palette doesn't support 16-bit*/ + break; + } + } + } + + if(sixteen) { + unsigned short r = 0, g = 0, b = 0, a = 0; + + for(i = 0; i != numpixels; ++i) { + getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode_in); + + if(!colored_done && (r != g || r != b)) { + stats->colored = 1; + colored_done = 1; + } + + if(!alpha_done) { + unsigned matchkey = (r == stats->key_r && g == stats->key_g && b == stats->key_b); + if(a != 65535 && (a != 0 || (stats->key && !matchkey))) { + stats->alpha = 1; + stats->key = 0; + alpha_done = 1; + } else if(a == 0 && !stats->alpha && !stats->key) { + stats->key = 1; + stats->key_r = r; + stats->key_g = g; + stats->key_b = b; + } else if(a == 65535 && stats->key && matchkey) { + /* Color key cannot be used if an opaque pixel also has that RGB color. */ + stats->alpha = 1; + stats->key = 0; + alpha_done = 1; + } + } + if(alpha_done && numcolors_done && colored_done && bits_done) break; + } + + if(stats->key && !stats->alpha) { + for(i = 0; i != numpixels; ++i) { + getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode_in); + if(a != 0 && r == stats->key_r && g == stats->key_g && b == stats->key_b) { + /* Color key cannot be used if an opaque pixel also has that RGB color. */ + stats->alpha = 1; + stats->key = 0; + alpha_done = 1; + } + } + } + } else /* < 16-bit */ { + unsigned char r = 0, g = 0, b = 0, a = 0; + for(i = 0; i != numpixels; ++i) { + getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode_in); + + if(!bits_done && stats->bits < 8) { + /*only r is checked, < 8 bits is only relevant for grayscale*/ + unsigned bits = getValueRequiredBits(r); + if(bits > stats->bits) stats->bits = bits; + } + bits_done = (stats->bits >= bpp); + + if(!colored_done && (r != g || r != b)) { + stats->colored = 1; + colored_done = 1; + if(stats->bits < 8) stats->bits = 8; /*PNG has no colored modes with less than 8-bit per channel*/ + } + + if(!alpha_done) { + unsigned matchkey = (r == stats->key_r && g == stats->key_g && b == stats->key_b); + if(a != 255 && (a != 0 || (stats->key && !matchkey))) { + stats->alpha = 1; + stats->key = 0; + alpha_done = 1; + if(stats->bits < 8) stats->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ + } else if(a == 0 && !stats->alpha && !stats->key) { + stats->key = 1; + stats->key_r = r; + stats->key_g = g; + stats->key_b = b; + } else if(a == 255 && stats->key && matchkey) { + /* Color key cannot be used if an opaque pixel also has that RGB color. */ + stats->alpha = 1; + stats->key = 0; + alpha_done = 1; + if(stats->bits < 8) stats->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ + } + } + + if(!numcolors_done) { + if(!color_tree_has(&tree, r, g, b, a)) { + error = color_tree_add(&tree, r, g, b, a, stats->numcolors); + if(error) goto cleanup; + if(stats->numcolors < 256) { + unsigned char* p = stats->palette; + unsigned n = stats->numcolors; + p[n * 4 + 0] = r; + p[n * 4 + 1] = g; + p[n * 4 + 2] = b; + p[n * 4 + 3] = a; + } + ++stats->numcolors; + numcolors_done = stats->numcolors >= maxnumcolors; + } + } + + if(alpha_done && numcolors_done && colored_done && bits_done) break; + } + + if(stats->key && !stats->alpha) { + for(i = 0; i != numpixels; ++i) { + getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode_in); + if(a != 0 && r == stats->key_r && g == stats->key_g && b == stats->key_b) { + /* Color key cannot be used if an opaque pixel also has that RGB color. */ + stats->alpha = 1; + stats->key = 0; + alpha_done = 1; + if(stats->bits < 8) stats->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ + } + } + } + + /*make the stats's key always 16-bit for consistency - repeat each byte twice*/ + stats->key_r += (stats->key_r << 8); + stats->key_g += (stats->key_g << 8); + stats->key_b += (stats->key_b << 8); + } + +cleanup: + color_tree_cleanup(&tree); + return error; +} + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +/*Adds a single color to the color stats. The stats must already have been inited. The color must be given as 16-bit +(with 2 bytes repeating for 8-bit and 65535 for opaque alpha channel). This function is expensive, do not call it for +all pixels of an image but only for a few additional values. */ +static unsigned lodepng_color_stats_add(LodePNGColorStats* stats, + unsigned r, unsigned g, unsigned b, unsigned a) { + unsigned error = 0; + unsigned char image[8]; + LodePNGColorMode mode; + lodepng_color_mode_init(&mode); + image[0] = r >> 8; image[1] = r; image[2] = g >> 8; image[3] = g; + image[4] = b >> 8; image[5] = b; image[6] = a >> 8; image[7] = a; + mode.bitdepth = 16; + mode.colortype = LCT_RGBA; + error = lodepng_compute_color_stats(stats, image, 1, 1, &mode); + lodepng_color_mode_cleanup(&mode); + return error; +} +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +/*Computes a minimal PNG color model that can contain all colors as indicated by the stats. +The stats should be computed with lodepng_compute_color_stats. +mode_in is raw color profile of the image the stats were computed on, to copy palette order from when relevant. +Minimal PNG color model means the color type and bit depth that gives smallest amount of bits in the output image, +e.g. gray if only grayscale pixels, palette if less than 256 colors, color key if only single transparent color, ... +This is used if auto_convert is enabled (it is by default). +*/ +static unsigned auto_choose_color(LodePNGColorMode* mode_out, + const LodePNGColorMode* mode_in, + const LodePNGColorStats* stats) { + unsigned error = 0; + unsigned palettebits; + size_t i, n; + size_t numpixels = stats->numpixels; + unsigned palette_ok, gray_ok; + + unsigned alpha = stats->alpha; + unsigned key = stats->key; + unsigned bits = stats->bits; + + mode_out->key_defined = 0; + + if(key && numpixels <= 16) { + alpha = 1; /*too few pixels to justify tRNS chunk overhead*/ + key = 0; + if(bits < 8) bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ + } + + gray_ok = !stats->colored; + if(!stats->allow_greyscale) gray_ok = 0; + if(!gray_ok && bits < 8) bits = 8; + + n = stats->numcolors; + palettebits = n <= 2 ? 1 : (n <= 4 ? 2 : (n <= 16 ? 4 : 8)); + palette_ok = n <= 256 && bits <= 8 && n != 0; /*n==0 means likely numcolors wasn't computed*/ + if(numpixels < n * 2) palette_ok = 0; /*don't add palette overhead if image has only a few pixels*/ + if(gray_ok && !alpha && bits <= palettebits) palette_ok = 0; /*gray is less overhead*/ + if(!stats->allow_palette) palette_ok = 0; + + if(palette_ok) { + const unsigned char* p = stats->palette; + lodepng_palette_clear(mode_out); /*remove potential earlier palette*/ + for(i = 0; i != stats->numcolors; ++i) { + error = lodepng_palette_add(mode_out, p[i * 4 + 0], p[i * 4 + 1], p[i * 4 + 2], p[i * 4 + 3]); + if(error) break; + } + + mode_out->colortype = LCT_PALETTE; + mode_out->bitdepth = palettebits; + + if(mode_in->colortype == LCT_PALETTE && mode_in->palettesize >= mode_out->palettesize + && mode_in->bitdepth == mode_out->bitdepth) { + /*If input should have same palette colors, keep original to preserve its order and prevent conversion*/ + lodepng_color_mode_cleanup(mode_out); + lodepng_color_mode_copy(mode_out, mode_in); + } + } else /*8-bit or 16-bit per channel*/ { + mode_out->bitdepth = bits; + mode_out->colortype = alpha ? (gray_ok ? LCT_GREY_ALPHA : LCT_RGBA) + : (gray_ok ? LCT_GREY : LCT_RGB); + if(key) { + unsigned mask = (1u << mode_out->bitdepth) - 1u; /*stats always uses 16-bit, mask converts it*/ + mode_out->key_r = stats->key_r & mask; + mode_out->key_g = stats->key_g & mask; + mode_out->key_b = stats->key_b & mask; + mode_out->key_defined = 1; + } + } + + return error; +} + +#endif /* #ifdef LODEPNG_COMPILE_ENCODER */ + +/* +Paeth predictor, used by PNG filter type 4 +The parameters are of type short, but should come from unsigned chars, the shorts +are only needed to make the paeth calculation correct. +*/ +static unsigned char paethPredictor(short a, short b, short c) { + short pa = LODEPNG_ABS(b - c); + short pb = LODEPNG_ABS(a - c); + short pc = LODEPNG_ABS(a + b - c - c); + /* return input value associated with smallest of pa, pb, pc (with certain priority if equal) */ + if(pb < pa) { a = b; pa = pb; } + return (pc < pa) ? c : a; +} + +/*shared values used by multiple Adam7 related functions*/ + +static const unsigned ADAM7_IX[7] = { 0, 4, 0, 2, 0, 1, 0 }; /*x start values*/ +static const unsigned ADAM7_IY[7] = { 0, 0, 4, 0, 2, 0, 1 }; /*y start values*/ +static const unsigned ADAM7_DX[7] = { 8, 8, 4, 4, 2, 2, 1 }; /*x delta values*/ +static const unsigned ADAM7_DY[7] = { 8, 8, 8, 4, 4, 2, 2 }; /*y delta values*/ + +/* +Outputs various dimensions and positions in the image related to the Adam7 reduced images. +passw: output containing the width of the 7 passes +passh: output containing the height of the 7 passes +filter_passstart: output containing the index of the start and end of each + reduced image with filter bytes +padded_passstart output containing the index of the start and end of each + reduced image when without filter bytes but with padded scanlines +passstart: output containing the index of the start and end of each reduced + image without padding between scanlines, but still padding between the images +w, h: width and height of non-interlaced image +bpp: bits per pixel +"padded" is only relevant if bpp is less than 8 and a scanline or image does not + end at a full byte +*/ +static void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7], size_t filter_passstart[8], + size_t padded_passstart[8], size_t passstart[8], unsigned w, unsigned h, unsigned bpp) { + /*the passstart values have 8 values: the 8th one indicates the byte after the end of the 7th (= last) pass*/ + unsigned i; + + /*calculate width and height in pixels of each pass*/ + for(i = 0; i != 7; ++i) { + passw[i] = (w + ADAM7_DX[i] - ADAM7_IX[i] - 1) / ADAM7_DX[i]; + passh[i] = (h + ADAM7_DY[i] - ADAM7_IY[i] - 1) / ADAM7_DY[i]; + if(passw[i] == 0) passh[i] = 0; + if(passh[i] == 0) passw[i] = 0; + } + + filter_passstart[0] = padded_passstart[0] = passstart[0] = 0; + for(i = 0; i != 7; ++i) { + /*if passw[i] is 0, it's 0 bytes, not 1 (no filtertype-byte)*/ + filter_passstart[i + 1] = filter_passstart[i] + + ((passw[i] && passh[i]) ? passh[i] * (1u + (passw[i] * bpp + 7u) / 8u) : 0); + /*bits padded if needed to fill full byte at end of each scanline*/ + padded_passstart[i + 1] = padded_passstart[i] + passh[i] * ((passw[i] * bpp + 7u) / 8u); + /*only padded at end of reduced image*/ + passstart[i + 1] = passstart[i] + (passh[i] * passw[i] * bpp + 7u) / 8u; + } +} + +#ifdef LODEPNG_COMPILE_DECODER + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / PNG Decoder / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/*read the information from the header and store it in the LodePNGInfo. return value is error*/ +unsigned lodepng_inspect(unsigned* w, unsigned* h, LodePNGState* state, + const unsigned char* in, size_t insize) { + unsigned width, height; + LodePNGInfo* info = &state->info_png; + if(insize == 0 || in == 0) { + CERROR_RETURN_ERROR(state->error, 48); /*error: the given data is empty*/ + } + if(insize < 33) { + CERROR_RETURN_ERROR(state->error, 27); /*error: the data length is smaller than the length of a PNG header*/ + } + + /*when decoding a new PNG image, make sure all parameters created after previous decoding are reset*/ + /* TODO: remove this. One should use a new LodePNGState for new sessions */ + lodepng_info_cleanup(info); + lodepng_info_init(info); + + if(in[0] != 137 || in[1] != 80 || in[2] != 78 || in[3] != 71 + || in[4] != 13 || in[5] != 10 || in[6] != 26 || in[7] != 10) { + CERROR_RETURN_ERROR(state->error, 28); /*error: the first 8 bytes are not the correct PNG signature*/ + } + if(lodepng_chunk_length(in + 8) != 13) { + CERROR_RETURN_ERROR(state->error, 94); /*error: header size must be 13 bytes*/ + } + if(!lodepng_chunk_type_equals(in + 8, "IHDR")) { + CERROR_RETURN_ERROR(state->error, 29); /*error: it doesn't start with a IHDR chunk!*/ + } + + /*read the values given in the header*/ + width = lodepng_read32bitInt(&in[16]); + height = lodepng_read32bitInt(&in[20]); + /*TODO: remove the undocumented feature that allows to give null pointers to width or height*/ + if(w) *w = width; + if(h) *h = height; + info->color.bitdepth = in[24]; + info->color.colortype = (LodePNGColorType)in[25]; + info->compression_method = in[26]; + info->filter_method = in[27]; + info->interlace_method = in[28]; + + /*errors returned only after the parsing so other values are still output*/ + + /*error: invalid image size*/ + if(width == 0 || height == 0) CERROR_RETURN_ERROR(state->error, 93); + /*error: invalid colortype or bitdepth combination*/ + state->error = checkColorValidity(info->color.colortype, info->color.bitdepth); + if(state->error) return state->error; + /*error: only compression method 0 is allowed in the specification*/ + if(info->compression_method != 0) CERROR_RETURN_ERROR(state->error, 32); + /*error: only filter method 0 is allowed in the specification*/ + if(info->filter_method != 0) CERROR_RETURN_ERROR(state->error, 33); + /*error: only interlace methods 0 and 1 exist in the specification*/ + if(info->interlace_method > 1) CERROR_RETURN_ERROR(state->error, 34); + + if(!state->decoder.ignore_crc) { + unsigned CRC = lodepng_read32bitInt(&in[29]); + unsigned checksum = lodepng_crc32(&in[12], 17); + if(CRC != checksum) { + CERROR_RETURN_ERROR(state->error, 57); /*invalid CRC*/ + } + } + + return state->error; +} + +static unsigned unfilterScanline(unsigned char* recon, const unsigned char* scanline, const unsigned char* precon, + size_t bytewidth, unsigned char filterType, size_t length) { + /* + For PNG filter method 0 + unfilter a PNG image scanline by scanline. when the pixels are smaller than 1 byte, + the filter works byte per byte (bytewidth = 1) + precon is the previous unfiltered scanline, recon the result, scanline the current one + the incoming scanlines do NOT include the filtertype byte, that one is given in the parameter filterType instead + recon and scanline MAY be the same memory address! precon must be disjoint. + */ + + size_t i; + switch(filterType) { + case 0: + for(i = 0; i != length; ++i) recon[i] = scanline[i]; + break; + case 1: + for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i]; + for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + recon[i - bytewidth]; + break; + case 2: + if(precon) { + for(i = 0; i != length; ++i) recon[i] = scanline[i] + precon[i]; + } else { + for(i = 0; i != length; ++i) recon[i] = scanline[i]; + } + break; + case 3: + if(precon) { + for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i] + (precon[i] >> 1u); + for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + ((recon[i - bytewidth] + precon[i]) >> 1u); + } else { + for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i]; + for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + (recon[i - bytewidth] >> 1u); + } + break; + case 4: + if(precon) { + for(i = 0; i != bytewidth; ++i) { + recon[i] = (scanline[i] + precon[i]); /*paethPredictor(0, precon[i], 0) is always precon[i]*/ + } + + /* Unroll independent paths of the paeth predictor. A 6x and 8x version would also be possible but that + adds too much code. Whether this actually speeds anything up at all depends on compiler and settings. */ + if(bytewidth >= 4) { + for(; i + 3 < length; i += 4) { + size_t j = i - bytewidth; + unsigned char s0 = scanline[i + 0], s1 = scanline[i + 1], s2 = scanline[i + 2], s3 = scanline[i + 3]; + unsigned char r0 = recon[j + 0], r1 = recon[j + 1], r2 = recon[j + 2], r3 = recon[j + 3]; + unsigned char p0 = precon[i + 0], p1 = precon[i + 1], p2 = precon[i + 2], p3 = precon[i + 3]; + unsigned char q0 = precon[j + 0], q1 = precon[j + 1], q2 = precon[j + 2], q3 = precon[j + 3]; + recon[i + 0] = s0 + paethPredictor(r0, p0, q0); + recon[i + 1] = s1 + paethPredictor(r1, p1, q1); + recon[i + 2] = s2 + paethPredictor(r2, p2, q2); + recon[i + 3] = s3 + paethPredictor(r3, p3, q3); + } + } else if(bytewidth >= 3) { + for(; i + 2 < length; i += 3) { + size_t j = i - bytewidth; + unsigned char s0 = scanline[i + 0], s1 = scanline[i + 1], s2 = scanline[i + 2]; + unsigned char r0 = recon[j + 0], r1 = recon[j + 1], r2 = recon[j + 2]; + unsigned char p0 = precon[i + 0], p1 = precon[i + 1], p2 = precon[i + 2]; + unsigned char q0 = precon[j + 0], q1 = precon[j + 1], q2 = precon[j + 2]; + recon[i + 0] = s0 + paethPredictor(r0, p0, q0); + recon[i + 1] = s1 + paethPredictor(r1, p1, q1); + recon[i + 2] = s2 + paethPredictor(r2, p2, q2); + } + } else if(bytewidth >= 2) { + for(; i + 1 < length; i += 2) { + size_t j = i - bytewidth; + unsigned char s0 = scanline[i + 0], s1 = scanline[i + 1]; + unsigned char r0 = recon[j + 0], r1 = recon[j + 1]; + unsigned char p0 = precon[i + 0], p1 = precon[i + 1]; + unsigned char q0 = precon[j + 0], q1 = precon[j + 1]; + recon[i + 0] = s0 + paethPredictor(r0, p0, q0); + recon[i + 1] = s1 + paethPredictor(r1, p1, q1); + } + } + + for(; i != length; ++i) { + recon[i] = (scanline[i] + paethPredictor(recon[i - bytewidth], precon[i], precon[i - bytewidth])); + } + } else { + for(i = 0; i != bytewidth; ++i) { + recon[i] = scanline[i]; + } + for(i = bytewidth; i < length; ++i) { + /*paethPredictor(recon[i - bytewidth], 0, 0) is always recon[i - bytewidth]*/ + recon[i] = (scanline[i] + recon[i - bytewidth]); + } + } + break; + default: return 36; /*error: invalid filter type given*/ + } + return 0; +} + +static unsigned unfilter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) { + /* + For PNG filter method 0 + this function unfilters a single image (e.g. without interlacing this is called once, with Adam7 seven times) + out must have enough bytes allocated already, in must have the scanlines + 1 filtertype byte per scanline + w and h are image dimensions or dimensions of reduced image, bpp is bits per pixel + in and out are allowed to be the same memory address (but aren't the same size since in has the extra filter bytes) + */ + + unsigned y; + unsigned char* prevline = 0; + + /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/ + size_t bytewidth = (bpp + 7u) / 8u; + /*the width of a scanline in bytes, not including the filter type*/ + size_t linebytes = lodepng_get_raw_size_idat(w, 1, bpp) - 1u; + + for(y = 0; y < h; ++y) { + size_t outindex = linebytes * y; + size_t inindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ + unsigned char filterType = in[inindex]; + + CERROR_TRY_RETURN(unfilterScanline(&out[outindex], &in[inindex + 1], prevline, bytewidth, filterType, linebytes)); + + prevline = &out[outindex]; + } + + return 0; +} + +/* +in: Adam7 interlaced image, with no padding bits between scanlines, but between + reduced images so that each reduced image starts at a byte. +out: the same pixels, but re-ordered so that they're now a non-interlaced image with size w*h +bpp: bits per pixel +out has the following size in bits: w * h * bpp. +in is possibly bigger due to padding bits between reduced images. +out must be big enough AND must be 0 everywhere if bpp < 8 in the current implementation +(because that's likely a little bit faster) +NOTE: comments about padding bits are only relevant if bpp < 8 +*/ +static void Adam7_deinterlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) { + unsigned passw[7], passh[7]; + size_t filter_passstart[8], padded_passstart[8], passstart[8]; + unsigned i; + + Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); + + if(bpp >= 8) { + for(i = 0; i != 7; ++i) { + unsigned x, y, b; + size_t bytewidth = bpp / 8u; + for(y = 0; y < passh[i]; ++y) + for(x = 0; x < passw[i]; ++x) { + size_t pixelinstart = passstart[i] + (y * passw[i] + x) * bytewidth; + size_t pixeloutstart = ((ADAM7_IY[i] + (size_t)y * ADAM7_DY[i]) * (size_t)w + + ADAM7_IX[i] + (size_t)x * ADAM7_DX[i]) * bytewidth; + for(b = 0; b < bytewidth; ++b) { + out[pixeloutstart + b] = in[pixelinstart + b]; + } + } + } + } else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/ { + for(i = 0; i != 7; ++i) { + unsigned x, y, b; + unsigned ilinebits = bpp * passw[i]; + unsigned olinebits = bpp * w; + size_t obp, ibp; /*bit pointers (for out and in buffer)*/ + for(y = 0; y < passh[i]; ++y) + for(x = 0; x < passw[i]; ++x) { + ibp = (8 * passstart[i]) + (y * ilinebits + x * bpp); + obp = (ADAM7_IY[i] + (size_t)y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + (size_t)x * ADAM7_DX[i]) * bpp; + for(b = 0; b < bpp; ++b) { + unsigned char bit = readBitFromReversedStream(&ibp, in); + setBitOfReversedStream(&obp, out, bit); + } + } + } + } +} + +static void removePaddingBits(unsigned char* out, const unsigned char* in, + size_t olinebits, size_t ilinebits, unsigned h) { + /* + After filtering there are still padding bits if scanlines have non multiple of 8 bit amounts. They need + to be removed (except at last scanline of (Adam7-reduced) image) before working with pure image buffers + for the Adam7 code, the color convert code and the output to the user. + in and out are allowed to be the same buffer, in may also be higher but still overlapping; in must + have >= ilinebits*h bits, out must have >= olinebits*h bits, olinebits must be <= ilinebits + also used to move bits after earlier such operations happened, e.g. in a sequence of reduced images from Adam7 + only useful if (ilinebits - olinebits) is a value in the range 1..7 + */ + unsigned y; + size_t diff = ilinebits - olinebits; + size_t ibp = 0, obp = 0; /*input and output bit pointers*/ + for(y = 0; y < h; ++y) { + size_t x; + for(x = 0; x < olinebits; ++x) { + unsigned char bit = readBitFromReversedStream(&ibp, in); + setBitOfReversedStream(&obp, out, bit); + } + ibp += diff; + } +} + +/*out must be buffer big enough to contain full image, and in must contain the full decompressed data from +the IDAT chunks (with filter index bytes and possible padding bits) +return value is error*/ +static unsigned postProcessScanlines(unsigned char* out, unsigned char* in, + unsigned w, unsigned h, const LodePNGInfo* info_png) { + /* + This function converts the filtered-padded-interlaced data into pure 2D image buffer with the PNG's colortype. + Steps: + *) if no Adam7: 1) unfilter 2) remove padding bits (= possible extra bits per scanline if bpp < 8) + *) if adam7: 1) 7x unfilter 2) 7x remove padding bits 3) Adam7_deinterlace + NOTE: the in buffer will be overwritten with intermediate data! + */ + unsigned bpp = lodepng_get_bpp(&info_png->color); + if(bpp == 0) return 31; /*error: invalid colortype*/ + + if(info_png->interlace_method == 0) { + if(bpp < 8 && w * bpp != ((w * bpp + 7u) / 8u) * 8u) { + CERROR_TRY_RETURN(unfilter(in, in, w, h, bpp)); + removePaddingBits(out, in, w * bpp, ((w * bpp + 7u) / 8u) * 8u, h); + } + /*we can immediately filter into the out buffer, no other steps needed*/ + else CERROR_TRY_RETURN(unfilter(out, in, w, h, bpp)); + } else /*interlace_method is 1 (Adam7)*/ { + unsigned passw[7], passh[7]; size_t filter_passstart[8], padded_passstart[8], passstart[8]; + unsigned i; + + Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); + + for(i = 0; i != 7; ++i) { + CERROR_TRY_RETURN(unfilter(&in[padded_passstart[i]], &in[filter_passstart[i]], passw[i], passh[i], bpp)); + /*TODO: possible efficiency improvement: if in this reduced image the bits fit nicely in 1 scanline, + move bytes instead of bits or move not at all*/ + if(bpp < 8) { + /*remove padding bits in scanlines; after this there still may be padding + bits between the different reduced images: each reduced image still starts nicely at a byte*/ + removePaddingBits(&in[passstart[i]], &in[padded_passstart[i]], passw[i] * bpp, + ((passw[i] * bpp + 7u) / 8u) * 8u, passh[i]); + } + } + + Adam7_deinterlace(out, in, w, h, bpp); + } + + return 0; +} + +static unsigned readChunk_PLTE(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength) { + unsigned pos = 0, i; + color->palettesize = chunkLength / 3u; + if(color->palettesize == 0 || color->palettesize > 256) return 38; /*error: palette too small or big*/ + lodepng_color_mode_alloc_palette(color); + if(!color->palette && color->palettesize) { + color->palettesize = 0; + return 83; /*alloc fail*/ + } + + for(i = 0; i != color->palettesize; ++i) { + color->palette[4 * i + 0] = data[pos++]; /*R*/ + color->palette[4 * i + 1] = data[pos++]; /*G*/ + color->palette[4 * i + 2] = data[pos++]; /*B*/ + color->palette[4 * i + 3] = 255; /*alpha*/ + } + + return 0; /* OK */ +} + +static unsigned readChunk_tRNS(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength) { + unsigned i; + if(color->colortype == LCT_PALETTE) { + /*error: more alpha values given than there are palette entries*/ + if(chunkLength > color->palettesize) return 39; + + for(i = 0; i != chunkLength; ++i) color->palette[4 * i + 3] = data[i]; + } else if(color->colortype == LCT_GREY) { + /*error: this chunk must be 2 bytes for grayscale image*/ + if(chunkLength != 2) return 30; + + color->key_defined = 1; + color->key_r = color->key_g = color->key_b = 256u * data[0] + data[1]; + } else if(color->colortype == LCT_RGB) { + /*error: this chunk must be 6 bytes for RGB image*/ + if(chunkLength != 6) return 41; + + color->key_defined = 1; + color->key_r = 256u * data[0] + data[1]; + color->key_g = 256u * data[2] + data[3]; + color->key_b = 256u * data[4] + data[5]; + } + else return 42; /*error: tRNS chunk not allowed for other color models*/ + + return 0; /* OK */ +} + + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +/*background color chunk (bKGD)*/ +static unsigned readChunk_bKGD(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) { + if(info->color.colortype == LCT_PALETTE) { + /*error: this chunk must be 1 byte for indexed color image*/ + if(chunkLength != 1) return 43; + + /*error: invalid palette index, or maybe this chunk appeared before PLTE*/ + if(data[0] >= info->color.palettesize) return 103; + + info->background_defined = 1; + info->background_r = info->background_g = info->background_b = data[0]; + } else if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA) { + /*error: this chunk must be 2 bytes for grayscale image*/ + if(chunkLength != 2) return 44; + + /*the values are truncated to bitdepth in the PNG file*/ + info->background_defined = 1; + info->background_r = info->background_g = info->background_b = 256u * data[0] + data[1]; + } else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA) { + /*error: this chunk must be 6 bytes for grayscale image*/ + if(chunkLength != 6) return 45; + + /*the values are truncated to bitdepth in the PNG file*/ + info->background_defined = 1; + info->background_r = 256u * data[0] + data[1]; + info->background_g = 256u * data[2] + data[3]; + info->background_b = 256u * data[4] + data[5]; + } + + return 0; /* OK */ +} + +/*text chunk (tEXt)*/ +static unsigned readChunk_tEXt(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) { + unsigned error = 0; + char *key = 0, *str = 0; + + while(!error) /*not really a while loop, only used to break on error*/ { + unsigned length, string2_begin; + + length = 0; + while(length < chunkLength && data[length] != 0) ++length; + /*even though it's not allowed by the standard, no error is thrown if + there's no null termination char, if the text is empty*/ + if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/ + + key = (char*)lodepng_malloc(length + 1); + if(!key) CERROR_BREAK(error, 83); /*alloc fail*/ + + lodepng_memcpy(key, data, length); + key[length] = 0; + + string2_begin = length + 1; /*skip keyword null terminator*/ + + length = (unsigned)(chunkLength < string2_begin ? 0 : chunkLength - string2_begin); + str = (char*)lodepng_malloc(length + 1); + if(!str) CERROR_BREAK(error, 83); /*alloc fail*/ + + lodepng_memcpy(str, data + string2_begin, length); + str[length] = 0; + + error = lodepng_add_text(info, key, str); + + break; + } + + lodepng_free(key); + lodepng_free(str); + + return error; +} + +/*compressed text chunk (zTXt)*/ +static unsigned readChunk_zTXt(LodePNGInfo* info, const LodePNGDecoderSettings* decoder, + const unsigned char* data, size_t chunkLength) { + unsigned error = 0; + + /*copy the object to change parameters in it*/ + LodePNGDecompressSettings zlibsettings = decoder->zlibsettings; + + unsigned length, string2_begin; + char *key = 0; + unsigned char* str = 0; + size_t size = 0; + + while(!error) /*not really a while loop, only used to break on error*/ { + for(length = 0; length < chunkLength && data[length] != 0; ++length) ; + if(length + 2 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/ + if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/ + + key = (char*)lodepng_malloc(length + 1); + if(!key) CERROR_BREAK(error, 83); /*alloc fail*/ + + lodepng_memcpy(key, data, length); + key[length] = 0; + + if(data[length + 1] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/ + + string2_begin = length + 2; + if(string2_begin > chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/ + + length = (unsigned)chunkLength - string2_begin; + zlibsettings.max_output_size = decoder->max_text_size; + /*will fail if zlib error, e.g. if length is too small*/ + error = zlib_decompress(&str, &size, 0, &data[string2_begin], + length, &zlibsettings); + /*error: compressed text larger than decoder->max_text_size*/ + if(error && size > zlibsettings.max_output_size) error = 112; + if(error) break; + error = lodepng_add_text_sized(info, key, (char*)str, size); + break; + } + + lodepng_free(key); + lodepng_free(str); + + return error; +} + +/*international text chunk (iTXt)*/ +static unsigned readChunk_iTXt(LodePNGInfo* info, const LodePNGDecoderSettings* decoder, + const unsigned char* data, size_t chunkLength) { + unsigned error = 0; + unsigned i; + + /*copy the object to change parameters in it*/ + LodePNGDecompressSettings zlibsettings = decoder->zlibsettings; + + unsigned length, begin, compressed; + char *key = 0, *langtag = 0, *transkey = 0; + + while(!error) /*not really a while loop, only used to break on error*/ { + /*Quick check if the chunk length isn't too small. Even without check + it'd still fail with other error checks below if it's too short. This just gives a different error code.*/ + if(chunkLength < 5) CERROR_BREAK(error, 30); /*iTXt chunk too short*/ + + /*read the key*/ + for(length = 0; length < chunkLength && data[length] != 0; ++length) ; + if(length + 3 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination char, corrupt?*/ + if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/ + + key = (char*)lodepng_malloc(length + 1); + if(!key) CERROR_BREAK(error, 83); /*alloc fail*/ + + lodepng_memcpy(key, data, length); + key[length] = 0; + + /*read the compression method*/ + compressed = data[length + 1]; + if(data[length + 2] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/ + + /*even though it's not allowed by the standard, no error is thrown if + there's no null termination char, if the text is empty for the next 3 texts*/ + + /*read the langtag*/ + begin = length + 3; + length = 0; + for(i = begin; i < chunkLength && data[i] != 0; ++i) ++length; + + langtag = (char*)lodepng_malloc(length + 1); + if(!langtag) CERROR_BREAK(error, 83); /*alloc fail*/ + + lodepng_memcpy(langtag, data + begin, length); + langtag[length] = 0; + + /*read the transkey*/ + begin += length + 1; + length = 0; + for(i = begin; i < chunkLength && data[i] != 0; ++i) ++length; + + transkey = (char*)lodepng_malloc(length + 1); + if(!transkey) CERROR_BREAK(error, 83); /*alloc fail*/ + + lodepng_memcpy(transkey, data + begin, length); + transkey[length] = 0; + + /*read the actual text*/ + begin += length + 1; + + length = (unsigned)chunkLength < begin ? 0 : (unsigned)chunkLength - begin; + + if(compressed) { + unsigned char* str = 0; + size_t size = 0; + zlibsettings.max_output_size = decoder->max_text_size; + /*will fail if zlib error, e.g. if length is too small*/ + error = zlib_decompress(&str, &size, 0, &data[begin], + length, &zlibsettings); + /*error: compressed text larger than decoder->max_text_size*/ + if(error && size > zlibsettings.max_output_size) error = 112; + if(!error) error = lodepng_add_itext_sized(info, key, langtag, transkey, (char*)str, size); + lodepng_free(str); + } else { + error = lodepng_add_itext_sized(info, key, langtag, transkey, (char*)(data + begin), length); + } + + break; + } + + lodepng_free(key); + lodepng_free(langtag); + lodepng_free(transkey); + + return error; +} + +static unsigned readChunk_tIME(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) { + if(chunkLength != 7) return 73; /*invalid tIME chunk size*/ + + info->time_defined = 1; + info->time.year = 256u * data[0] + data[1]; + info->time.month = data[2]; + info->time.day = data[3]; + info->time.hour = data[4]; + info->time.minute = data[5]; + info->time.second = data[6]; + + return 0; /* OK */ +} + +static unsigned readChunk_pHYs(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) { + if(chunkLength != 9) return 74; /*invalid pHYs chunk size*/ + + info->phys_defined = 1; + info->phys_x = 16777216u * data[0] + 65536u * data[1] + 256u * data[2] + data[3]; + info->phys_y = 16777216u * data[4] + 65536u * data[5] + 256u * data[6] + data[7]; + info->phys_unit = data[8]; + + return 0; /* OK */ +} + +static unsigned readChunk_gAMA(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) { + if(chunkLength != 4) return 96; /*invalid gAMA chunk size*/ + + info->gama_defined = 1; + info->gama_gamma = 16777216u * data[0] + 65536u * data[1] + 256u * data[2] + data[3]; + + return 0; /* OK */ +} + +static unsigned readChunk_cHRM(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) { + if(chunkLength != 32) return 97; /*invalid cHRM chunk size*/ + + info->chrm_defined = 1; + info->chrm_white_x = 16777216u * data[ 0] + 65536u * data[ 1] + 256u * data[ 2] + data[ 3]; + info->chrm_white_y = 16777216u * data[ 4] + 65536u * data[ 5] + 256u * data[ 6] + data[ 7]; + info->chrm_red_x = 16777216u * data[ 8] + 65536u * data[ 9] + 256u * data[10] + data[11]; + info->chrm_red_y = 16777216u * data[12] + 65536u * data[13] + 256u * data[14] + data[15]; + info->chrm_green_x = 16777216u * data[16] + 65536u * data[17] + 256u * data[18] + data[19]; + info->chrm_green_y = 16777216u * data[20] + 65536u * data[21] + 256u * data[22] + data[23]; + info->chrm_blue_x = 16777216u * data[24] + 65536u * data[25] + 256u * data[26] + data[27]; + info->chrm_blue_y = 16777216u * data[28] + 65536u * data[29] + 256u * data[30] + data[31]; + + return 0; /* OK */ +} + +static unsigned readChunk_sRGB(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) { + if(chunkLength != 1) return 98; /*invalid sRGB chunk size (this one is never ignored)*/ + + info->srgb_defined = 1; + info->srgb_intent = data[0]; + + return 0; /* OK */ +} + +static unsigned readChunk_iCCP(LodePNGInfo* info, const LodePNGDecoderSettings* decoder, + const unsigned char* data, size_t chunkLength) { + unsigned error = 0; + unsigned i; + size_t size = 0; + /*copy the object to change parameters in it*/ + LodePNGDecompressSettings zlibsettings = decoder->zlibsettings; + + unsigned length, string2_begin; + + info->iccp_defined = 1; + if(info->iccp_name) lodepng_clear_icc(info); + + for(length = 0; length < chunkLength && data[length] != 0; ++length) ; + if(length + 2 >= chunkLength) return 75; /*no null termination, corrupt?*/ + if(length < 1 || length > 79) return 89; /*keyword too short or long*/ + + info->iccp_name = (char*)lodepng_malloc(length + 1); + if(!info->iccp_name) return 83; /*alloc fail*/ + + info->iccp_name[length] = 0; + for(i = 0; i != length; ++i) info->iccp_name[i] = (char)data[i]; + + if(data[length + 1] != 0) return 72; /*the 0 byte indicating compression must be 0*/ + + string2_begin = length + 2; + if(string2_begin > chunkLength) return 75; /*no null termination, corrupt?*/ + + length = (unsigned)chunkLength - string2_begin; + zlibsettings.max_output_size = decoder->max_icc_size; + error = zlib_decompress(&info->iccp_profile, &size, 0, + &data[string2_begin], + length, &zlibsettings); + /*error: ICC profile larger than decoder->max_icc_size*/ + if(error && size > zlibsettings.max_output_size) error = 113; + info->iccp_profile_size = size; + if(!error && !info->iccp_profile_size) error = 100; /*invalid ICC profile size*/ + return error; +} +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +unsigned lodepng_inspect_chunk(LodePNGState* state, size_t pos, + const unsigned char* in, size_t insize) { + const unsigned char* chunk = in + pos; + unsigned chunkLength; + const unsigned char* data; + unsigned unhandled = 0; + unsigned error = 0; + + if(pos + 4 > insize) return 30; + chunkLength = lodepng_chunk_length(chunk); + if(chunkLength > 2147483647) return 63; + data = lodepng_chunk_data_const(chunk); + if(data + chunkLength + 4 > in + insize) return 30; + + if(lodepng_chunk_type_equals(chunk, "PLTE")) { + error = readChunk_PLTE(&state->info_png.color, data, chunkLength); + } else if(lodepng_chunk_type_equals(chunk, "tRNS")) { + error = readChunk_tRNS(&state->info_png.color, data, chunkLength); +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + } else if(lodepng_chunk_type_equals(chunk, "bKGD")) { + error = readChunk_bKGD(&state->info_png, data, chunkLength); + } else if(lodepng_chunk_type_equals(chunk, "tEXt")) { + error = readChunk_tEXt(&state->info_png, data, chunkLength); + } else if(lodepng_chunk_type_equals(chunk, "zTXt")) { + error = readChunk_zTXt(&state->info_png, &state->decoder, data, chunkLength); + } else if(lodepng_chunk_type_equals(chunk, "iTXt")) { + error = readChunk_iTXt(&state->info_png, &state->decoder, data, chunkLength); + } else if(lodepng_chunk_type_equals(chunk, "tIME")) { + error = readChunk_tIME(&state->info_png, data, chunkLength); + } else if(lodepng_chunk_type_equals(chunk, "pHYs")) { + error = readChunk_pHYs(&state->info_png, data, chunkLength); + } else if(lodepng_chunk_type_equals(chunk, "gAMA")) { + error = readChunk_gAMA(&state->info_png, data, chunkLength); + } else if(lodepng_chunk_type_equals(chunk, "cHRM")) { + error = readChunk_cHRM(&state->info_png, data, chunkLength); + } else if(lodepng_chunk_type_equals(chunk, "sRGB")) { + error = readChunk_sRGB(&state->info_png, data, chunkLength); + } else if(lodepng_chunk_type_equals(chunk, "iCCP")) { + error = readChunk_iCCP(&state->info_png, &state->decoder, data, chunkLength); +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + } else { + /* unhandled chunk is ok (is not an error) */ + unhandled = 1; + } + + if(!error && !unhandled && !state->decoder.ignore_crc) { + if(lodepng_chunk_check_crc(chunk)) return 57; /*invalid CRC*/ + } + + return error; +} + +/*read a PNG, the result will be in the same color type as the PNG (hence "generic")*/ +static void decodeGeneric(unsigned char** out, unsigned* w, unsigned* h, + LodePNGState* state, + const unsigned char* in, size_t insize) { + unsigned char IEND = 0; + const unsigned char* chunk; + unsigned char* idat; /*the data from idat chunks, zlib compressed*/ + size_t idatsize = 0; + unsigned char* scanlines = 0; + size_t scanlines_size = 0, expected_size = 0; + size_t outsize = 0; + + /*for unknown chunk order*/ + unsigned unknown = 0; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + unsigned critical_pos = 1; /*1 = after IHDR, 2 = after PLTE, 3 = after IDAT*/ +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + + + /* safe output values in case error happens */ + *out = 0; + *w = *h = 0; + + state->error = lodepng_inspect(w, h, state, in, insize); /*reads header and resets other parameters in state->info_png*/ + if(state->error) return; + + if(lodepng_pixel_overflow(*w, *h, &state->info_png.color, &state->info_raw)) { + CERROR_RETURN(state->error, 92); /*overflow possible due to amount of pixels*/ + } + + /*the input filesize is a safe upper bound for the sum of idat chunks size*/ + idat = (unsigned char*)lodepng_malloc(insize); + if(!idat) CERROR_RETURN(state->error, 83); /*alloc fail*/ + + chunk = &in[33]; /*first byte of the first chunk after the header*/ + + /*loop through the chunks, ignoring unknown chunks and stopping at IEND chunk. + IDAT data is put at the start of the in buffer*/ + while(!IEND && !state->error) { + unsigned chunkLength; + const unsigned char* data; /*the data in the chunk*/ + + /*error: size of the in buffer too small to contain next chunk*/ + if((size_t)((chunk - in) + 12) > insize || chunk < in) { + if(state->decoder.ignore_end) break; /*other errors may still happen though*/ + CERROR_BREAK(state->error, 30); + } + + /*length of the data of the chunk, excluding the length bytes, chunk type and CRC bytes*/ + chunkLength = lodepng_chunk_length(chunk); + /*error: chunk length larger than the max PNG chunk size*/ + if(chunkLength > 2147483647) { + if(state->decoder.ignore_end) break; /*other errors may still happen though*/ + CERROR_BREAK(state->error, 63); + } + + if((size_t)((chunk - in) + chunkLength + 12) > insize || (chunk + chunkLength + 12) < in) { + CERROR_BREAK(state->error, 64); /*error: size of the in buffer too small to contain next chunk*/ + } + + data = lodepng_chunk_data_const(chunk); + + unknown = 0; + + /*IDAT chunk, containing compressed image data*/ + if(lodepng_chunk_type_equals(chunk, "IDAT")) { + size_t newsize; + if(lodepng_addofl(idatsize, chunkLength, &newsize)) CERROR_BREAK(state->error, 95); + if(newsize > insize) CERROR_BREAK(state->error, 95); + lodepng_memcpy(idat + idatsize, data, chunkLength); + idatsize += chunkLength; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + critical_pos = 3; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + } else if(lodepng_chunk_type_equals(chunk, "IEND")) { + /*IEND chunk*/ + IEND = 1; + } else if(lodepng_chunk_type_equals(chunk, "PLTE")) { + /*palette chunk (PLTE)*/ + state->error = readChunk_PLTE(&state->info_png.color, data, chunkLength); + if(state->error) break; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + critical_pos = 2; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + } else if(lodepng_chunk_type_equals(chunk, "tRNS")) { + /*palette transparency chunk (tRNS). Even though this one is an ancillary chunk , it is still compiled + in without 'LODEPNG_COMPILE_ANCILLARY_CHUNKS' because it contains essential color information that + affects the alpha channel of pixels. */ + state->error = readChunk_tRNS(&state->info_png.color, data, chunkLength); + if(state->error) break; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*background color chunk (bKGD)*/ + } else if(lodepng_chunk_type_equals(chunk, "bKGD")) { + state->error = readChunk_bKGD(&state->info_png, data, chunkLength); + if(state->error) break; + } else if(lodepng_chunk_type_equals(chunk, "tEXt")) { + /*text chunk (tEXt)*/ + if(state->decoder.read_text_chunks) { + state->error = readChunk_tEXt(&state->info_png, data, chunkLength); + if(state->error) break; + } + } else if(lodepng_chunk_type_equals(chunk, "zTXt")) { + /*compressed text chunk (zTXt)*/ + if(state->decoder.read_text_chunks) { + state->error = readChunk_zTXt(&state->info_png, &state->decoder, data, chunkLength); + if(state->error) break; + } + } else if(lodepng_chunk_type_equals(chunk, "iTXt")) { + /*international text chunk (iTXt)*/ + if(state->decoder.read_text_chunks) { + state->error = readChunk_iTXt(&state->info_png, &state->decoder, data, chunkLength); + if(state->error) break; + } + } else if(lodepng_chunk_type_equals(chunk, "tIME")) { + state->error = readChunk_tIME(&state->info_png, data, chunkLength); + if(state->error) break; + } else if(lodepng_chunk_type_equals(chunk, "pHYs")) { + state->error = readChunk_pHYs(&state->info_png, data, chunkLength); + if(state->error) break; + } else if(lodepng_chunk_type_equals(chunk, "gAMA")) { + state->error = readChunk_gAMA(&state->info_png, data, chunkLength); + if(state->error) break; + } else if(lodepng_chunk_type_equals(chunk, "cHRM")) { + state->error = readChunk_cHRM(&state->info_png, data, chunkLength); + if(state->error) break; + } else if(lodepng_chunk_type_equals(chunk, "sRGB")) { + state->error = readChunk_sRGB(&state->info_png, data, chunkLength); + if(state->error) break; + } else if(lodepng_chunk_type_equals(chunk, "iCCP")) { + state->error = readChunk_iCCP(&state->info_png, &state->decoder, data, chunkLength); + if(state->error) break; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + } else /*it's not an implemented chunk type, so ignore it: skip over the data*/ { + /*error: unknown critical chunk (5th bit of first byte of chunk type is 0)*/ + if(!state->decoder.ignore_critical && !lodepng_chunk_ancillary(chunk)) { + CERROR_BREAK(state->error, 69); + } + + unknown = 1; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + if(state->decoder.remember_unknown_chunks) { + state->error = lodepng_chunk_append(&state->info_png.unknown_chunks_data[critical_pos - 1], + &state->info_png.unknown_chunks_size[critical_pos - 1], chunk); + if(state->error) break; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + } + + if(!state->decoder.ignore_crc && !unknown) /*check CRC if wanted, only on known chunk types*/ { + if(lodepng_chunk_check_crc(chunk)) CERROR_BREAK(state->error, 57); /*invalid CRC*/ + } + + if(!IEND) chunk = lodepng_chunk_next_const(chunk, in + insize); + } + + if(!state->error && state->info_png.color.colortype == LCT_PALETTE && !state->info_png.color.palette) { + state->error = 106; /* error: PNG file must have PLTE chunk if color type is palette */ + } + + if(!state->error) { + /*predict output size, to allocate exact size for output buffer to avoid more dynamic allocation. + If the decompressed size does not match the prediction, the image must be corrupt.*/ + if(state->info_png.interlace_method == 0) { + size_t bpp = lodepng_get_bpp(&state->info_png.color); + expected_size = lodepng_get_raw_size_idat(*w, *h, bpp); + } else { + size_t bpp = lodepng_get_bpp(&state->info_png.color); + /*Adam-7 interlaced: expected size is the sum of the 7 sub-images sizes*/ + expected_size = 0; + expected_size += lodepng_get_raw_size_idat((*w + 7) >> 3, (*h + 7) >> 3, bpp); + if(*w > 4) expected_size += lodepng_get_raw_size_idat((*w + 3) >> 3, (*h + 7) >> 3, bpp); + expected_size += lodepng_get_raw_size_idat((*w + 3) >> 2, (*h + 3) >> 3, bpp); + if(*w > 2) expected_size += lodepng_get_raw_size_idat((*w + 1) >> 2, (*h + 3) >> 2, bpp); + expected_size += lodepng_get_raw_size_idat((*w + 1) >> 1, (*h + 1) >> 2, bpp); + if(*w > 1) expected_size += lodepng_get_raw_size_idat((*w + 0) >> 1, (*h + 1) >> 1, bpp); + expected_size += lodepng_get_raw_size_idat((*w + 0), (*h + 0) >> 1, bpp); + } + + state->error = zlib_decompress(&scanlines, &scanlines_size, expected_size, idat, idatsize, &state->decoder.zlibsettings); + } + if(!state->error && scanlines_size != expected_size) state->error = 91; /*decompressed size doesn't match prediction*/ + lodepng_free(idat); + + if(!state->error) { + outsize = lodepng_get_raw_size(*w, *h, &state->info_png.color); + *out = (unsigned char*)lodepng_malloc(outsize); + if(!*out) state->error = 83; /*alloc fail*/ + } + if(!state->error) { + lodepng_memset(*out, 0, outsize); + state->error = postProcessScanlines(*out, scanlines, *w, *h, &state->info_png); + } + lodepng_free(scanlines); +} + +unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h, + LodePNGState* state, + const unsigned char* in, size_t insize) { + *out = 0; + decodeGeneric(out, w, h, state, in, insize); + if(state->error) return state->error; + if(!state->decoder.color_convert || lodepng_color_mode_equal(&state->info_raw, &state->info_png.color)) { + /*same color type, no copying or converting of data needed*/ + /*store the info_png color settings on the info_raw so that the info_raw still reflects what colortype + the raw image has to the end user*/ + if(!state->decoder.color_convert) { + state->error = lodepng_color_mode_copy(&state->info_raw, &state->info_png.color); + if(state->error) return state->error; + } + } else { /*color conversion needed*/ + unsigned char* data = *out; + size_t outsize; + + /*TODO: check if this works according to the statement in the documentation: "The converter can convert + from grayscale input color type, to 8-bit grayscale or grayscale with alpha"*/ + if(!(state->info_raw.colortype == LCT_RGB || state->info_raw.colortype == LCT_RGBA) + && !(state->info_raw.bitdepth == 8)) { + return 56; /*unsupported color mode conversion*/ + } + + outsize = lodepng_get_raw_size(*w, *h, &state->info_raw); + *out = (unsigned char*)lodepng_malloc(outsize); + if(!(*out)) { + state->error = 83; /*alloc fail*/ + } + else state->error = lodepng_convert(*out, data, &state->info_raw, + &state->info_png.color, *w, *h); + lodepng_free(data); + } + return state->error; +} + +unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, + size_t insize, LodePNGColorType colortype, unsigned bitdepth) { + unsigned error; + LodePNGState state; + lodepng_state_init(&state); + state.info_raw.colortype = colortype; + state.info_raw.bitdepth = bitdepth; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*disable reading things that this function doesn't output*/ + state.decoder.read_text_chunks = 0; + state.decoder.remember_unknown_chunks = 0; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + error = lodepng_decode(out, w, h, &state, in, insize); + lodepng_state_cleanup(&state); + return error; +} + +unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize) { + return lodepng_decode_memory(out, w, h, in, insize, LCT_RGBA, 8); +} + +unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize) { + return lodepng_decode_memory(out, w, h, in, insize, LCT_RGB, 8); +} + +#ifdef LODEPNG_COMPILE_DISK +unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename, + LodePNGColorType colortype, unsigned bitdepth) { + unsigned char* buffer = 0; + size_t buffersize; + unsigned error; + /* safe output values in case error happens */ + *out = 0; + *w = *h = 0; + error = lodepng_load_file(&buffer, &buffersize, filename); + if(!error) error = lodepng_decode_memory(out, w, h, buffer, buffersize, colortype, bitdepth); + lodepng_free(buffer); + return error; +} + +unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename) { + return lodepng_decode_file(out, w, h, filename, LCT_RGBA, 8); +} + +unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename) { + return lodepng_decode_file(out, w, h, filename, LCT_RGB, 8); +} +#endif /*LODEPNG_COMPILE_DISK*/ + +void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings) { + settings->color_convert = 1; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + settings->read_text_chunks = 1; + settings->remember_unknown_chunks = 0; + settings->max_text_size = 16777216; + settings->max_icc_size = 16777216; /* 16MB is much more than enough for any reasonable ICC profile */ +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + settings->ignore_crc = 0; + settings->ignore_critical = 0; + settings->ignore_end = 0; + lodepng_decompress_settings_init(&settings->zlibsettings); +} + +#endif /*LODEPNG_COMPILE_DECODER*/ + +#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) + +void lodepng_state_init(LodePNGState* state) { +#ifdef LODEPNG_COMPILE_DECODER + lodepng_decoder_settings_init(&state->decoder); +#endif /*LODEPNG_COMPILE_DECODER*/ +#ifdef LODEPNG_COMPILE_ENCODER + lodepng_encoder_settings_init(&state->encoder); +#endif /*LODEPNG_COMPILE_ENCODER*/ + lodepng_color_mode_init(&state->info_raw); + lodepng_info_init(&state->info_png); + state->error = 1; +} + +void lodepng_state_cleanup(LodePNGState* state) { + lodepng_color_mode_cleanup(&state->info_raw); + lodepng_info_cleanup(&state->info_png); +} + +void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source) { + lodepng_state_cleanup(dest); + *dest = *source; + lodepng_color_mode_init(&dest->info_raw); + lodepng_info_init(&dest->info_png); + dest->error = lodepng_color_mode_copy(&dest->info_raw, &source->info_raw); if(dest->error) return; + dest->error = lodepng_info_copy(&dest->info_png, &source->info_png); if(dest->error) return; +} + +#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */ + +#ifdef LODEPNG_COMPILE_ENCODER + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / PNG Encoder / */ +/* ////////////////////////////////////////////////////////////////////////// */ + + +static unsigned writeSignature(ucvector* out) { + size_t pos = out->size; + const unsigned char signature[] = {137, 80, 78, 71, 13, 10, 26, 10}; + /*8 bytes PNG signature, aka the magic bytes*/ + if(!ucvector_resize(out, out->size + 8)) return 83; /*alloc fail*/ + lodepng_memcpy(out->data + pos, signature, 8); + return 0; +} + +static unsigned addChunk_IHDR(ucvector* out, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth, unsigned interlace_method) { + unsigned char *chunk, *data; + CERROR_TRY_RETURN(lodepng_chunk_init(&chunk, out, 13, "IHDR")); + data = chunk + 8; + + lodepng_set32bitInt(data + 0, w); /*width*/ + lodepng_set32bitInt(data + 4, h); /*height*/ + data[8] = (unsigned char)bitdepth; /*bit depth*/ + data[9] = (unsigned char)colortype; /*color type*/ + data[10] = 0; /*compression method*/ + data[11] = 0; /*filter method*/ + data[12] = interlace_method; /*interlace method*/ + + lodepng_chunk_generate_crc(chunk); + return 0; +} + +/* only adds the chunk if needed (there is a key or palette with alpha) */ +static unsigned addChunk_PLTE(ucvector* out, const LodePNGColorMode* info) { + unsigned char* chunk; + size_t i, j = 8; + + CERROR_TRY_RETURN(lodepng_chunk_init(&chunk, out, info->palettesize * 3, "PLTE")); + + for(i = 0; i != info->palettesize; ++i) { + /*add all channels except alpha channel*/ + chunk[j++] = info->palette[i * 4 + 0]; + chunk[j++] = info->palette[i * 4 + 1]; + chunk[j++] = info->palette[i * 4 + 2]; + } + + lodepng_chunk_generate_crc(chunk); + return 0; +} + +static unsigned addChunk_tRNS(ucvector* out, const LodePNGColorMode* info) { + unsigned char* chunk = 0; + + if(info->colortype == LCT_PALETTE) { + size_t i, amount = info->palettesize; + /*the tail of palette values that all have 255 as alpha, does not have to be encoded*/ + for(i = info->palettesize; i != 0; --i) { + if(info->palette[4 * (i - 1) + 3] != 255) break; + --amount; + } + if(amount) { + CERROR_TRY_RETURN(lodepng_chunk_init(&chunk, out, amount, "tRNS")); + /*add the alpha channel values from the palette*/ + for(i = 0; i != amount; ++i) chunk[8 + i] = info->palette[4 * i + 3]; + } + } else if(info->colortype == LCT_GREY) { + if(info->key_defined) { + CERROR_TRY_RETURN(lodepng_chunk_init(&chunk, out, 2, "tRNS")); + chunk[8] = (unsigned char)(info->key_r >> 8); + chunk[9] = (unsigned char)(info->key_r & 255); + } + } else if(info->colortype == LCT_RGB) { + if(info->key_defined) { + CERROR_TRY_RETURN(lodepng_chunk_init(&chunk, out, 6, "tRNS")); + chunk[8] = (unsigned char)(info->key_r >> 8); + chunk[9] = (unsigned char)(info->key_r & 255); + chunk[10] = (unsigned char)(info->key_g >> 8); + chunk[11] = (unsigned char)(info->key_g & 255); + chunk[12] = (unsigned char)(info->key_b >> 8); + chunk[13] = (unsigned char)(info->key_b & 255); + } + } + + if(chunk) lodepng_chunk_generate_crc(chunk); + return 0; +} + +static unsigned addChunk_IDAT(ucvector* out, const unsigned char* data, size_t datasize, + LodePNGCompressSettings* zlibsettings) { + unsigned error = 0; + unsigned char* zlib = 0; + size_t zlibsize = 0; + + error = zlib_compress(&zlib, &zlibsize, data, datasize, zlibsettings); + if(!error) { + error = lodepng_chunk_createv(out, zlibsize, "IDAT", zlib); + } + lodepng_free(zlib); + return error; +} + +static unsigned addChunk_IEND(ucvector* out) { + return lodepng_chunk_createv(out, 0, "IEND", 0); +} + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + +static unsigned addChunk_tEXt(ucvector* out, const char* keyword, const char* textstring) { + unsigned char* chunk = 0; + size_t keysize = lodepng_strlen(keyword), textsize = lodepng_strlen(textstring); + size_t size = keysize + 1 + textsize; + if(keysize < 1 || keysize > 79) return 89; /*error: invalid keyword size*/ + CERROR_TRY_RETURN(lodepng_chunk_init(&chunk, out, size, "tEXt")); + lodepng_memcpy(chunk + 8, keyword, keysize); + chunk[8 + keysize] = 0; /*null termination char*/ + lodepng_memcpy(chunk + 9 + keysize, textstring, textsize); + lodepng_chunk_generate_crc(chunk); + return 0; +} + +static unsigned addChunk_zTXt(ucvector* out, const char* keyword, const char* textstring, + LodePNGCompressSettings* zlibsettings) { + unsigned error = 0; + unsigned char* chunk = 0; + unsigned char* compressed = 0; + size_t compressedsize = 0; + size_t textsize = lodepng_strlen(textstring); + size_t keysize = lodepng_strlen(keyword); + if(keysize < 1 || keysize > 79) return 89; /*error: invalid keyword size*/ + + error = zlib_compress(&compressed, &compressedsize, + (const unsigned char*)textstring, textsize, zlibsettings); + if(!error) { + size_t size = keysize + 2 + compressedsize; + error = lodepng_chunk_init(&chunk, out, size, "zTXt"); + } + if(!error) { + lodepng_memcpy(chunk + 8, keyword, keysize); + chunk[8 + keysize] = 0; /*null termination char*/ + chunk[9 + keysize] = 0; /*compression method: 0*/ + lodepng_memcpy(chunk + 10 + keysize, compressed, compressedsize); + lodepng_chunk_generate_crc(chunk); + } + + lodepng_free(compressed); + return error; +} + +static unsigned addChunk_iTXt(ucvector* out, unsigned compress, const char* keyword, const char* langtag, + const char* transkey, const char* textstring, LodePNGCompressSettings* zlibsettings) { + unsigned error = 0; + unsigned char* chunk = 0; + unsigned char* compressed = 0; + size_t compressedsize = 0; + size_t textsize = lodepng_strlen(textstring); + size_t keysize = lodepng_strlen(keyword), langsize = lodepng_strlen(langtag), transsize = lodepng_strlen(transkey); + + if(keysize < 1 || keysize > 79) return 89; /*error: invalid keyword size*/ + + if(compress) { + error = zlib_compress(&compressed, &compressedsize, + (const unsigned char*)textstring, textsize, zlibsettings); + } + if(!error) { + size_t size = keysize + 3 + langsize + 1 + transsize + 1 + (compress ? compressedsize : textsize); + error = lodepng_chunk_init(&chunk, out, size, "iTXt"); + } + if(!error) { + size_t pos = 8; + lodepng_memcpy(chunk + pos, keyword, keysize); + pos += keysize; + chunk[pos++] = 0; /*null termination char*/ + chunk[pos++] = (compress ? 1 : 0); /*compression flag*/ + chunk[pos++] = 0; /*compression method: 0*/ + lodepng_memcpy(chunk + pos, langtag, langsize); + pos += langsize; + chunk[pos++] = 0; /*null termination char*/ + lodepng_memcpy(chunk + pos, transkey, transsize); + pos += transsize; + chunk[pos++] = 0; /*null termination char*/ + if(compress) { + lodepng_memcpy(chunk + pos, compressed, compressedsize); + } else { + lodepng_memcpy(chunk + pos, textstring, textsize); + } + lodepng_chunk_generate_crc(chunk); + } + + lodepng_free(compressed); + return error; +} + +static unsigned addChunk_bKGD(ucvector* out, const LodePNGInfo* info) { + unsigned char* chunk = 0; + if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA) { + CERROR_TRY_RETURN(lodepng_chunk_init(&chunk, out, 2, "bKGD")); + chunk[8] = (unsigned char)(info->background_r >> 8); + chunk[9] = (unsigned char)(info->background_r & 255); + } else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA) { + CERROR_TRY_RETURN(lodepng_chunk_init(&chunk, out, 6, "bKGD")); + chunk[8] = (unsigned char)(info->background_r >> 8); + chunk[9] = (unsigned char)(info->background_r & 255); + chunk[10] = (unsigned char)(info->background_g >> 8); + chunk[11] = (unsigned char)(info->background_g & 255); + chunk[12] = (unsigned char)(info->background_b >> 8); + chunk[13] = (unsigned char)(info->background_b & 255); + } else if(info->color.colortype == LCT_PALETTE) { + CERROR_TRY_RETURN(lodepng_chunk_init(&chunk, out, 1, "bKGD")); + chunk[8] = (unsigned char)(info->background_r & 255); /*palette index*/ + } + if(chunk) lodepng_chunk_generate_crc(chunk); + return 0; +} + +static unsigned addChunk_tIME(ucvector* out, const LodePNGTime* time) { + unsigned char* chunk; + CERROR_TRY_RETURN(lodepng_chunk_init(&chunk, out, 7, "tIME")); + chunk[8] = (unsigned char)(time->year >> 8); + chunk[9] = (unsigned char)(time->year & 255); + chunk[10] = (unsigned char)time->month; + chunk[11] = (unsigned char)time->day; + chunk[12] = (unsigned char)time->hour; + chunk[13] = (unsigned char)time->minute; + chunk[14] = (unsigned char)time->second; + lodepng_chunk_generate_crc(chunk); + return 0; +} + +static unsigned addChunk_pHYs(ucvector* out, const LodePNGInfo* info) { + unsigned char* chunk; + CERROR_TRY_RETURN(lodepng_chunk_init(&chunk, out, 9, "pHYs")); + lodepng_set32bitInt(chunk + 8, info->phys_x); + lodepng_set32bitInt(chunk + 12, info->phys_y); + chunk[16] = info->phys_unit; + lodepng_chunk_generate_crc(chunk); + return 0; +} + +static unsigned addChunk_gAMA(ucvector* out, const LodePNGInfo* info) { + unsigned char* chunk; + CERROR_TRY_RETURN(lodepng_chunk_init(&chunk, out, 4, "gAMA")); + lodepng_set32bitInt(chunk + 8, info->gama_gamma); + lodepng_chunk_generate_crc(chunk); + return 0; +} + +static unsigned addChunk_cHRM(ucvector* out, const LodePNGInfo* info) { + unsigned char* chunk; + CERROR_TRY_RETURN(lodepng_chunk_init(&chunk, out, 32, "cHRM")); + lodepng_set32bitInt(chunk + 8, info->chrm_white_x); + lodepng_set32bitInt(chunk + 12, info->chrm_white_y); + lodepng_set32bitInt(chunk + 16, info->chrm_red_x); + lodepng_set32bitInt(chunk + 20, info->chrm_red_y); + lodepng_set32bitInt(chunk + 24, info->chrm_green_x); + lodepng_set32bitInt(chunk + 28, info->chrm_green_y); + lodepng_set32bitInt(chunk + 32, info->chrm_blue_x); + lodepng_set32bitInt(chunk + 36, info->chrm_blue_y); + lodepng_chunk_generate_crc(chunk); + return 0; +} + +static unsigned addChunk_sRGB(ucvector* out, const LodePNGInfo* info) { + unsigned char data = info->srgb_intent; + return lodepng_chunk_createv(out, 1, "sRGB", &data); +} + +static unsigned addChunk_iCCP(ucvector* out, const LodePNGInfo* info, LodePNGCompressSettings* zlibsettings) { + unsigned error = 0; + unsigned char* chunk = 0; + unsigned char* compressed = 0; + size_t compressedsize = 0; + size_t keysize = lodepng_strlen(info->iccp_name); + + if(keysize < 1 || keysize > 79) return 89; /*error: invalid keyword size*/ + error = zlib_compress(&compressed, &compressedsize, + info->iccp_profile, info->iccp_profile_size, zlibsettings); + if(!error) { + size_t size = keysize + 2 + compressedsize; + error = lodepng_chunk_init(&chunk, out, size, "iCCP"); + } + if(!error) { + lodepng_memcpy(chunk + 8, info->iccp_name, keysize); + chunk[8 + keysize] = 0; /*null termination char*/ + chunk[9 + keysize] = 0; /*compression method: 0*/ + lodepng_memcpy(chunk + 10 + keysize, compressed, compressedsize); + lodepng_chunk_generate_crc(chunk); + } + + lodepng_free(compressed); + return error; +} + +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +static void filterScanline(unsigned char* out, const unsigned char* scanline, const unsigned char* prevline, + size_t length, size_t bytewidth, unsigned char filterType) { + size_t i; + switch(filterType) { + case 0: /*None*/ + for(i = 0; i != length; ++i) out[i] = scanline[i]; + break; + case 1: /*Sub*/ + for(i = 0; i != bytewidth; ++i) out[i] = scanline[i]; + for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - scanline[i - bytewidth]; + break; + case 2: /*Up*/ + if(prevline) { + for(i = 0; i != length; ++i) out[i] = scanline[i] - prevline[i]; + } else { + for(i = 0; i != length; ++i) out[i] = scanline[i]; + } + break; + case 3: /*Average*/ + if(prevline) { + for(i = 0; i != bytewidth; ++i) out[i] = scanline[i] - (prevline[i] >> 1); + for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - ((scanline[i - bytewidth] + prevline[i]) >> 1); + } else { + for(i = 0; i != bytewidth; ++i) out[i] = scanline[i]; + for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - (scanline[i - bytewidth] >> 1); + } + break; + case 4: /*Paeth*/ + if(prevline) { + /*paethPredictor(0, prevline[i], 0) is always prevline[i]*/ + for(i = 0; i != bytewidth; ++i) out[i] = (scanline[i] - prevline[i]); + for(i = bytewidth; i < length; ++i) { + out[i] = (scanline[i] - paethPredictor(scanline[i - bytewidth], prevline[i], prevline[i - bytewidth])); + } + } else { + for(i = 0; i != bytewidth; ++i) out[i] = scanline[i]; + /*paethPredictor(scanline[i - bytewidth], 0, 0) is always scanline[i - bytewidth]*/ + for(i = bytewidth; i < length; ++i) out[i] = (scanline[i] - scanline[i - bytewidth]); + } + break; + default: return; /*invalid filter type given*/ + } +} + +/* integer binary logarithm, max return value is 31 */ +static size_t ilog2(size_t i) { + size_t result = 0; + if(i >= 65536) { result += 16; i >>= 16; } + if(i >= 256) { result += 8; i >>= 8; } + if(i >= 16) { result += 4; i >>= 4; } + if(i >= 4) { result += 2; i >>= 2; } + if(i >= 2) { result += 1; /*i >>= 1;*/ } + return result; +} + +/* integer approximation for i * log2(i), helper function for LFS_ENTROPY */ +static size_t ilog2i(size_t i) { + size_t l; + if(i == 0) return 0; + l = ilog2(i); + /* approximate i*log2(i): l is integer logarithm, ((i - (1u << l)) << 1u) + linearly approximates the missing fractional part multiplied by i */ + return i * l + ((i - (1u << l)) << 1u); +} + +static unsigned filter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, + const LodePNGColorMode* color, const LodePNGEncoderSettings* settings) { + /* + For PNG filter method 0 + out must be a buffer with as size: h + (w * h * bpp + 7u) / 8u, because there are + the scanlines with 1 extra byte per scanline + */ + + unsigned bpp = lodepng_get_bpp(color); + /*the width of a scanline in bytes, not including the filter type*/ + size_t linebytes = lodepng_get_raw_size_idat(w, 1, bpp) - 1u; + + /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/ + size_t bytewidth = (bpp + 7u) / 8u; + const unsigned char* prevline = 0; + unsigned x, y; + unsigned error = 0; + LodePNGFilterStrategy strategy = settings->filter_strategy; + + /* + There is a heuristic called the minimum sum of absolute differences heuristic, suggested by the PNG standard: + * If the image type is Palette, or the bit depth is smaller than 8, then do not filter the image (i.e. + use fixed filtering, with the filter None). + * (The other case) If the image type is Grayscale or RGB (with or without Alpha), and the bit depth is + not smaller than 8, then use adaptive filtering heuristic as follows: independently for each row, apply + all five filters and select the filter that produces the smallest sum of absolute values per row. + This heuristic is used if filter strategy is LFS_MINSUM and filter_palette_zero is true. + + If filter_palette_zero is true and filter_strategy is not LFS_MINSUM, the above heuristic is followed, + but for "the other case", whatever strategy filter_strategy is set to instead of the minimum sum + heuristic is used. + */ + if(settings->filter_palette_zero && + (color->colortype == LCT_PALETTE || color->bitdepth < 8)) strategy = LFS_ZERO; + + if(bpp == 0) return 31; /*error: invalid color type*/ + + if(strategy >= LFS_ZERO && strategy <= LFS_FOUR) { + unsigned char type = (unsigned char)strategy; + for(y = 0; y != h; ++y) { + size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ + size_t inindex = linebytes * y; + out[outindex] = type; /*filter type byte*/ + filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, type); + prevline = &in[inindex]; + } + } else if(strategy == LFS_MINSUM) { + /*adaptive filtering*/ + unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/ + size_t smallest = 0; + unsigned char type, bestType = 0; + + for(type = 0; type != 5; ++type) { + attempt[type] = (unsigned char*)lodepng_malloc(linebytes); + if(!attempt[type]) error = 83; /*alloc fail*/ + } + + if(!error) { + for(y = 0; y != h; ++y) { + /*try the 5 filter types*/ + for(type = 0; type != 5; ++type) { + size_t sum = 0; + filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type); + + /*calculate the sum of the result*/ + if(type == 0) { + for(x = 0; x != linebytes; ++x) sum += (unsigned char)(attempt[type][x]); + } else { + for(x = 0; x != linebytes; ++x) { + /*For differences, each byte should be treated as signed, values above 127 are negative + (converted to signed char). Filtertype 0 isn't a difference though, so use unsigned there. + This means filtertype 0 is almost never chosen, but that is justified.*/ + unsigned char s = attempt[type][x]; + sum += s < 128 ? s : (255U - s); + } + } + + /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/ + if(type == 0 || sum < smallest) { + bestType = type; + smallest = sum; + } + } + + prevline = &in[y * linebytes]; + + /*now fill the out values*/ + out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ + for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x]; + } + } + + for(type = 0; type != 5; ++type) lodepng_free(attempt[type]); + } else if(strategy == LFS_ENTROPY) { + unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/ + size_t bestSum = 0; + unsigned type, bestType = 0; + unsigned count[256]; + + for(type = 0; type != 5; ++type) { + attempt[type] = (unsigned char*)lodepng_malloc(linebytes); + if(!attempt[type]) error = 83; /*alloc fail*/ + } + + if(!error) { + for(y = 0; y != h; ++y) { + /*try the 5 filter types*/ + for(type = 0; type != 5; ++type) { + size_t sum = 0; + filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type); + lodepng_memset(count, 0, 256 * sizeof(*count)); + for(x = 0; x != linebytes; ++x) ++count[attempt[type][x]]; + ++count[type]; /*the filter type itself is part of the scanline*/ + for(x = 0; x != 256; ++x) { + sum += ilog2i(count[x]); + } + /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/ + if(type == 0 || sum > bestSum) { + bestType = type; + bestSum = sum; + } + } + + prevline = &in[y * linebytes]; + + /*now fill the out values*/ + out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ + for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x]; + } + } + + for(type = 0; type != 5; ++type) lodepng_free(attempt[type]); + } else if(strategy == LFS_PREDEFINED) { + for(y = 0; y != h; ++y) { + size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ + size_t inindex = linebytes * y; + unsigned char type = settings->predefined_filters[y]; + out[outindex] = type; /*filter type byte*/ + filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, type); + prevline = &in[inindex]; + } + } else if(strategy == LFS_BRUTE_FORCE) { + /*brute force filter chooser. + deflate the scanline after every filter attempt to see which one deflates best. + This is very slow and gives only slightly smaller, sometimes even larger, result*/ + size_t size[5]; + unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/ + size_t smallest = 0; + unsigned type = 0, bestType = 0; + unsigned char* dummy; + LodePNGCompressSettings zlibsettings; + lodepng_memcpy(&zlibsettings, &settings->zlibsettings, sizeof(LodePNGCompressSettings)); + /*use fixed tree on the attempts so that the tree is not adapted to the filtertype on purpose, + to simulate the true case where the tree is the same for the whole image. Sometimes it gives + better result with dynamic tree anyway. Using the fixed tree sometimes gives worse, but in rare + cases better compression. It does make this a bit less slow, so it's worth doing this.*/ + zlibsettings.btype = 1; + /*a custom encoder likely doesn't read the btype setting and is optimized for complete PNG + images only, so disable it*/ + zlibsettings.custom_zlib = 0; + zlibsettings.custom_deflate = 0; + for(type = 0; type != 5; ++type) { + attempt[type] = (unsigned char*)lodepng_malloc(linebytes); + if(!attempt[type]) error = 83; /*alloc fail*/ + } + if(!error) { + for(y = 0; y != h; ++y) /*try the 5 filter types*/ { + for(type = 0; type != 5; ++type) { + unsigned testsize = (unsigned)linebytes; + /*if(testsize > 8) testsize /= 8;*/ /*it already works good enough by testing a part of the row*/ + + filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type); + size[type] = 0; + dummy = 0; + zlib_compress(&dummy, &size[type], attempt[type], testsize, &zlibsettings); + lodepng_free(dummy); + /*check if this is smallest size (or if type == 0 it's the first case so always store the values)*/ + if(type == 0 || size[type] < smallest) { + bestType = type; + smallest = size[type]; + } + } + prevline = &in[y * linebytes]; + out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ + for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x]; + } + } + for(type = 0; type != 5; ++type) lodepng_free(attempt[type]); + } + else return 88; /* unknown filter strategy */ + + return error; +} + +static void addPaddingBits(unsigned char* out, const unsigned char* in, + size_t olinebits, size_t ilinebits, unsigned h) { + /*The opposite of the removePaddingBits function + olinebits must be >= ilinebits*/ + unsigned y; + size_t diff = olinebits - ilinebits; + size_t obp = 0, ibp = 0; /*bit pointers*/ + for(y = 0; y != h; ++y) { + size_t x; + for(x = 0; x < ilinebits; ++x) { + unsigned char bit = readBitFromReversedStream(&ibp, in); + setBitOfReversedStream(&obp, out, bit); + } + /*obp += diff; --> no, fill in some value in the padding bits too, to avoid + "Use of uninitialised value of size ###" warning from valgrind*/ + for(x = 0; x != diff; ++x) setBitOfReversedStream(&obp, out, 0); + } +} + +/* +in: non-interlaced image with size w*h +out: the same pixels, but re-ordered according to PNG's Adam7 interlacing, with + no padding bits between scanlines, but between reduced images so that each + reduced image starts at a byte. +bpp: bits per pixel +there are no padding bits, not between scanlines, not between reduced images +in has the following size in bits: w * h * bpp. +out is possibly bigger due to padding bits between reduced images +NOTE: comments about padding bits are only relevant if bpp < 8 +*/ +static void Adam7_interlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) { + unsigned passw[7], passh[7]; + size_t filter_passstart[8], padded_passstart[8], passstart[8]; + unsigned i; + + Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); + + if(bpp >= 8) { + for(i = 0; i != 7; ++i) { + unsigned x, y, b; + size_t bytewidth = bpp / 8u; + for(y = 0; y < passh[i]; ++y) + for(x = 0; x < passw[i]; ++x) { + size_t pixelinstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth; + size_t pixeloutstart = passstart[i] + (y * passw[i] + x) * bytewidth; + for(b = 0; b < bytewidth; ++b) { + out[pixeloutstart + b] = in[pixelinstart + b]; + } + } + } + } else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/ { + for(i = 0; i != 7; ++i) { + unsigned x, y, b; + unsigned ilinebits = bpp * passw[i]; + unsigned olinebits = bpp * w; + size_t obp, ibp; /*bit pointers (for out and in buffer)*/ + for(y = 0; y < passh[i]; ++y) + for(x = 0; x < passw[i]; ++x) { + ibp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp; + obp = (8 * passstart[i]) + (y * ilinebits + x * bpp); + for(b = 0; b < bpp; ++b) { + unsigned char bit = readBitFromReversedStream(&ibp, in); + setBitOfReversedStream(&obp, out, bit); + } + } + } + } +} + +/*out must be buffer big enough to contain uncompressed IDAT chunk data, and in must contain the full image. +return value is error**/ +static unsigned preProcessScanlines(unsigned char** out, size_t* outsize, const unsigned char* in, + unsigned w, unsigned h, + const LodePNGInfo* info_png, const LodePNGEncoderSettings* settings) { + /* + This function converts the pure 2D image with the PNG's colortype, into filtered-padded-interlaced data. Steps: + *) if no Adam7: 1) add padding bits (= possible extra bits per scanline if bpp < 8) 2) filter + *) if adam7: 1) Adam7_interlace 2) 7x add padding bits 3) 7x filter + */ + unsigned bpp = lodepng_get_bpp(&info_png->color); + unsigned error = 0; + + if(info_png->interlace_method == 0) { + *outsize = h + (h * ((w * bpp + 7u) / 8u)); /*image size plus an extra byte per scanline + possible padding bits*/ + *out = (unsigned char*)lodepng_malloc(*outsize); + if(!(*out) && (*outsize)) error = 83; /*alloc fail*/ + + if(!error) { + /*non multiple of 8 bits per scanline, padding bits needed per scanline*/ + if(bpp < 8 && w * bpp != ((w * bpp + 7u) / 8u) * 8u) { + unsigned char* padded = (unsigned char*)lodepng_malloc(h * ((w * bpp + 7u) / 8u)); + if(!padded) error = 83; /*alloc fail*/ + if(!error) { + addPaddingBits(padded, in, ((w * bpp + 7u) / 8u) * 8u, w * bpp, h); + error = filter(*out, padded, w, h, &info_png->color, settings); + } + lodepng_free(padded); + } else { + /*we can immediately filter into the out buffer, no other steps needed*/ + error = filter(*out, in, w, h, &info_png->color, settings); + } + } + } else /*interlace_method is 1 (Adam7)*/ { + unsigned passw[7], passh[7]; + size_t filter_passstart[8], padded_passstart[8], passstart[8]; + unsigned char* adam7; + + Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); + + *outsize = filter_passstart[7]; /*image size plus an extra byte per scanline + possible padding bits*/ + *out = (unsigned char*)lodepng_malloc(*outsize); + if(!(*out)) error = 83; /*alloc fail*/ + + adam7 = (unsigned char*)lodepng_malloc(passstart[7]); + if(!adam7 && passstart[7]) error = 83; /*alloc fail*/ + + if(!error) { + unsigned i; + + Adam7_interlace(adam7, in, w, h, bpp); + for(i = 0; i != 7; ++i) { + if(bpp < 8) { + unsigned char* padded = (unsigned char*)lodepng_malloc(padded_passstart[i + 1] - padded_passstart[i]); + if(!padded) ERROR_BREAK(83); /*alloc fail*/ + addPaddingBits(padded, &adam7[passstart[i]], + ((passw[i] * bpp + 7u) / 8u) * 8u, passw[i] * bpp, passh[i]); + error = filter(&(*out)[filter_passstart[i]], padded, + passw[i], passh[i], &info_png->color, settings); + lodepng_free(padded); + } else { + error = filter(&(*out)[filter_passstart[i]], &adam7[padded_passstart[i]], + passw[i], passh[i], &info_png->color, settings); + } + + if(error) break; + } + } + + lodepng_free(adam7); + } + + return error; +} + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +static unsigned addUnknownChunks(ucvector* out, unsigned char* data, size_t datasize) { + unsigned char* inchunk = data; + while((size_t)(inchunk - data) < datasize) { + CERROR_TRY_RETURN(lodepng_chunk_append(&out->data, &out->size, inchunk)); + out->allocsize = out->size; /*fix the allocsize again*/ + inchunk = lodepng_chunk_next(inchunk, data + datasize); + } + return 0; +} + +static unsigned isGrayICCProfile(const unsigned char* profile, unsigned size) { + /* + It is a gray profile if bytes 16-19 are "GRAY", rgb profile if bytes 16-19 + are "RGB ". We do not perform any full parsing of the ICC profile here, other + than check those 4 bytes to grayscale profile. Other than that, validity of + the profile is not checked. This is needed only because the PNG specification + requires using a non-gray color model if there is an ICC profile with "RGB " + (sadly limiting compression opportunities if the input data is grayscale RGB + data), and requires using a gray color model if it is "GRAY". + */ + if(size < 20) return 0; + return profile[16] == 'G' && profile[17] == 'R' && profile[18] == 'A' && profile[19] == 'Y'; +} + +static unsigned isRGBICCProfile(const unsigned char* profile, unsigned size) { + /* See comment in isGrayICCProfile*/ + if(size < 20) return 0; + return profile[16] == 'R' && profile[17] == 'G' && profile[18] == 'B' && profile[19] == ' '; +} +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +unsigned lodepng_encode(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h, + LodePNGState* state) { + unsigned char* data = 0; /*uncompressed version of the IDAT chunk data*/ + size_t datasize = 0; + ucvector outv = ucvector_init(NULL, 0); + LodePNGInfo info; + const LodePNGInfo* info_png = &state->info_png; + + lodepng_info_init(&info); + + /*provide some proper output values if error will happen*/ + *out = 0; + *outsize = 0; + state->error = 0; + + /*check input values validity*/ + if((info_png->color.colortype == LCT_PALETTE || state->encoder.force_palette) + && (info_png->color.palettesize == 0 || info_png->color.palettesize > 256)) { + state->error = 68; /*invalid palette size, it is only allowed to be 1-256*/ + goto cleanup; + } + if(state->encoder.zlibsettings.btype > 2) { + state->error = 61; /*error: invalid btype*/ + goto cleanup; + } + if(info_png->interlace_method > 1) { + state->error = 71; /*error: invalid interlace mode*/ + goto cleanup; + } + state->error = checkColorValidity(info_png->color.colortype, info_png->color.bitdepth); + if(state->error) goto cleanup; /*error: invalid color type given*/ + state->error = checkColorValidity(state->info_raw.colortype, state->info_raw.bitdepth); + if(state->error) goto cleanup; /*error: invalid color type given*/ + + /* color convert and compute scanline filter types */ + lodepng_info_copy(&info, &state->info_png); + if(state->encoder.auto_convert) { + LodePNGColorStats stats; + lodepng_color_stats_init(&stats); +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + if(info_png->iccp_defined && + isGrayICCProfile(info_png->iccp_profile, info_png->iccp_profile_size)) { + /*the PNG specification does not allow to use palette with a GRAY ICC profile, even + if the palette has only gray colors, so disallow it.*/ + stats.allow_palette = 0; + } + if(info_png->iccp_defined && + isRGBICCProfile(info_png->iccp_profile, info_png->iccp_profile_size)) { + /*the PNG specification does not allow to use grayscale color with RGB ICC profile, so disallow gray.*/ + stats.allow_greyscale = 0; + } +#endif /* LODEPNG_COMPILE_ANCILLARY_CHUNKS */ + state->error = lodepng_compute_color_stats(&stats, image, w, h, &state->info_raw); + if(state->error) goto cleanup; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + if(info_png->background_defined) { + /*the background chunk's color must be taken into account as well*/ + unsigned r = 0, g = 0, b = 0; + LodePNGColorMode mode16 = lodepng_color_mode_make(LCT_RGB, 16); + lodepng_convert_rgb(&r, &g, &b, info_png->background_r, info_png->background_g, info_png->background_b, &mode16, &info_png->color); + state->error = lodepng_color_stats_add(&stats, r, g, b, 65535); + if(state->error) goto cleanup; + } +#endif /* LODEPNG_COMPILE_ANCILLARY_CHUNKS */ + state->error = auto_choose_color(&info.color, &state->info_raw, &stats); + if(state->error) goto cleanup; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*also convert the background chunk*/ + if(info_png->background_defined) { + if(lodepng_convert_rgb(&info.background_r, &info.background_g, &info.background_b, + info_png->background_r, info_png->background_g, info_png->background_b, &info.color, &info_png->color)) { + state->error = 104; + goto cleanup; + } + } +#endif /* LODEPNG_COMPILE_ANCILLARY_CHUNKS */ + } +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + if(info_png->iccp_defined) { + unsigned gray_icc = isGrayICCProfile(info_png->iccp_profile, info_png->iccp_profile_size); + unsigned rgb_icc = isRGBICCProfile(info_png->iccp_profile, info_png->iccp_profile_size); + unsigned gray_png = info.color.colortype == LCT_GREY || info.color.colortype == LCT_GREY_ALPHA; + if(!gray_icc && !rgb_icc) { + state->error = 100; /* Disallowed profile color type for PNG */ + goto cleanup; + } + if(gray_icc != gray_png) { + /*Not allowed to use RGB/RGBA/palette with GRAY ICC profile or vice versa, + or in case of auto_convert, it wasn't possible to find appropriate model*/ + state->error = state->encoder.auto_convert ? 102 : 101; + goto cleanup; + } + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + if(!lodepng_color_mode_equal(&state->info_raw, &info.color)) { + unsigned char* converted; + size_t size = ((size_t)w * (size_t)h * (size_t)lodepng_get_bpp(&info.color) + 7u) / 8u; + + converted = (unsigned char*)lodepng_malloc(size); + if(!converted && size) state->error = 83; /*alloc fail*/ + if(!state->error) { + state->error = lodepng_convert(converted, image, &info.color, &state->info_raw, w, h); + } + if(!state->error) { + state->error = preProcessScanlines(&data, &datasize, converted, w, h, &info, &state->encoder); + } + lodepng_free(converted); + if(state->error) goto cleanup; + } else { + state->error = preProcessScanlines(&data, &datasize, image, w, h, &info, &state->encoder); + if(state->error) goto cleanup; + } + + /* output all PNG chunks */ { +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + size_t i; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + /*write signature and chunks*/ + state->error = writeSignature(&outv); + if(state->error) goto cleanup; + /*IHDR*/ + state->error = addChunk_IHDR(&outv, w, h, info.color.colortype, info.color.bitdepth, info.interlace_method); + if(state->error) goto cleanup; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*unknown chunks between IHDR and PLTE*/ + if(info.unknown_chunks_data[0]) { + state->error = addUnknownChunks(&outv, info.unknown_chunks_data[0], info.unknown_chunks_size[0]); + if(state->error) goto cleanup; + } + /*color profile chunks must come before PLTE */ + if(info.iccp_defined) { + state->error = addChunk_iCCP(&outv, &info, &state->encoder.zlibsettings); + if(state->error) goto cleanup; + } + if(info.srgb_defined) { + state->error = addChunk_sRGB(&outv, &info); + if(state->error) goto cleanup; + } + if(info.gama_defined) { + state->error = addChunk_gAMA(&outv, &info); + if(state->error) goto cleanup; + } + if(info.chrm_defined) { + state->error = addChunk_cHRM(&outv, &info); + if(state->error) goto cleanup; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + /*PLTE*/ + if(info.color.colortype == LCT_PALETTE) { + state->error = addChunk_PLTE(&outv, &info.color); + if(state->error) goto cleanup; + } + if(state->encoder.force_palette && (info.color.colortype == LCT_RGB || info.color.colortype == LCT_RGBA)) { + /*force_palette means: write suggested palette for truecolor in PLTE chunk*/ + state->error = addChunk_PLTE(&outv, &info.color); + if(state->error) goto cleanup; + } + /*tRNS (this will only add if when necessary) */ + state->error = addChunk_tRNS(&outv, &info.color); + if(state->error) goto cleanup; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*bKGD (must come between PLTE and the IDAt chunks*/ + if(info.background_defined) { + state->error = addChunk_bKGD(&outv, &info); + if(state->error) goto cleanup; + } + /*pHYs (must come before the IDAT chunks)*/ + if(info.phys_defined) { + state->error = addChunk_pHYs(&outv, &info); + if(state->error) goto cleanup; + } + + /*unknown chunks between PLTE and IDAT*/ + if(info.unknown_chunks_data[1]) { + state->error = addUnknownChunks(&outv, info.unknown_chunks_data[1], info.unknown_chunks_size[1]); + if(state->error) goto cleanup; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + /*IDAT (multiple IDAT chunks must be consecutive)*/ + state->error = addChunk_IDAT(&outv, data, datasize, &state->encoder.zlibsettings); + if(state->error) goto cleanup; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*tIME*/ + if(info.time_defined) { + state->error = addChunk_tIME(&outv, &info.time); + if(state->error) goto cleanup; + } + /*tEXt and/or zTXt*/ + for(i = 0; i != info.text_num; ++i) { + if(lodepng_strlen(info.text_keys[i]) > 79) { + state->error = 66; /*text chunk too large*/ + goto cleanup; + } + if(lodepng_strlen(info.text_keys[i]) < 1) { + state->error = 67; /*text chunk too small*/ + goto cleanup; + } + if(state->encoder.text_compression) { + state->error = addChunk_zTXt(&outv, info.text_keys[i], info.text_strings[i], &state->encoder.zlibsettings); + if(state->error) goto cleanup; + } else { + state->error = addChunk_tEXt(&outv, info.text_keys[i], info.text_strings[i]); + if(state->error) goto cleanup; + } + } + /*LodePNG version id in text chunk*/ + if(state->encoder.add_id) { + unsigned already_added_id_text = 0; + for(i = 0; i != info.text_num; ++i) { + const char* k = info.text_keys[i]; + /* Could use strcmp, but we're not calling or reimplementing this C library function for this use only */ + if(k[0] == 'L' && k[1] == 'o' && k[2] == 'd' && k[3] == 'e' && + k[4] == 'P' && k[5] == 'N' && k[6] == 'G' && k[7] == '\0') { + already_added_id_text = 1; + break; + } + } + if(already_added_id_text == 0) { + state->error = addChunk_tEXt(&outv, "LodePNG", LODEPNG_VERSION_STRING); /*it's shorter as tEXt than as zTXt chunk*/ + if(state->error) goto cleanup; + } + } + /*iTXt*/ + for(i = 0; i != info.itext_num; ++i) { + if(lodepng_strlen(info.itext_keys[i]) > 79) { + state->error = 66; /*text chunk too large*/ + goto cleanup; + } + if(lodepng_strlen(info.itext_keys[i]) < 1) { + state->error = 67; /*text chunk too small*/ + goto cleanup; + } + state->error = addChunk_iTXt( + &outv, state->encoder.text_compression, + info.itext_keys[i], info.itext_langtags[i], info.itext_transkeys[i], info.itext_strings[i], + &state->encoder.zlibsettings); + if(state->error) goto cleanup; + } + + /*unknown chunks between IDAT and IEND*/ + if(info.unknown_chunks_data[2]) { + state->error = addUnknownChunks(&outv, info.unknown_chunks_data[2], info.unknown_chunks_size[2]); + if(state->error) goto cleanup; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + state->error = addChunk_IEND(&outv); + if(state->error) goto cleanup; + } + +cleanup: + lodepng_info_cleanup(&info); + lodepng_free(data); + + /*instead of cleaning the vector up, give it to the output*/ + *out = outv.data; + *outsize = outv.size; + + return state->error; +} + +unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, const unsigned char* image, + unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth) { + unsigned error; + LodePNGState state; + lodepng_state_init(&state); + state.info_raw.colortype = colortype; + state.info_raw.bitdepth = bitdepth; + state.info_png.color.colortype = colortype; + state.info_png.color.bitdepth = bitdepth; + lodepng_encode(out, outsize, image, w, h, &state); + error = state.error; + lodepng_state_cleanup(&state); + return error; +} + +unsigned lodepng_encode32(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h) { + return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGBA, 8); +} + +unsigned lodepng_encode24(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h) { + return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGB, 8); +} + +#ifdef LODEPNG_COMPILE_DISK +unsigned lodepng_encode_file(const char* filename, const unsigned char* image, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) { + unsigned char* buffer; + size_t buffersize; + unsigned error = lodepng_encode_memory(&buffer, &buffersize, image, w, h, colortype, bitdepth); + if(!error) error = lodepng_save_file(buffer, buffersize, filename); + lodepng_free(buffer); + return error; +} + +unsigned lodepng_encode32_file(const char* filename, const unsigned char* image, unsigned w, unsigned h) { + return lodepng_encode_file(filename, image, w, h, LCT_RGBA, 8); +} + +unsigned lodepng_encode24_file(const char* filename, const unsigned char* image, unsigned w, unsigned h) { + return lodepng_encode_file(filename, image, w, h, LCT_RGB, 8); +} +#endif /*LODEPNG_COMPILE_DISK*/ + +void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings) { + lodepng_compress_settings_init(&settings->zlibsettings); + settings->filter_palette_zero = 1; + settings->filter_strategy = LFS_MINSUM; + settings->auto_convert = 1; + settings->force_palette = 0; + settings->predefined_filters = 0; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + settings->add_id = 0; + settings->text_compression = 1; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} + +#endif /*LODEPNG_COMPILE_ENCODER*/ +#endif /*LODEPNG_COMPILE_PNG*/ + +#ifdef LODEPNG_COMPILE_ERROR_TEXT +/* +This returns the description of a numerical error code in English. This is also +the documentation of all the error codes. +*/ +const char* lodepng_error_text(unsigned code) { + switch(code) { + case 0: return "no error, everything went ok"; + case 1: return "nothing done yet"; /*the Encoder/Decoder has done nothing yet, error checking makes no sense yet*/ + case 10: return "end of input memory reached without huffman end code"; /*while huffman decoding*/ + case 11: return "error in code tree made it jump outside of huffman tree"; /*while huffman decoding*/ + case 13: return "problem while processing dynamic deflate block"; + case 14: return "problem while processing dynamic deflate block"; + case 15: return "problem while processing dynamic deflate block"; + /*this error could happen if there are only 0 or 1 symbols present in the huffman code:*/ + case 16: return "invalid code while processing dynamic deflate block"; + case 17: return "end of out buffer memory reached while inflating"; + case 18: return "invalid distance code while inflating"; + case 19: return "end of out buffer memory reached while inflating"; + case 20: return "invalid deflate block BTYPE encountered while decoding"; + case 21: return "NLEN is not ones complement of LEN in a deflate block"; + + /*end of out buffer memory reached while inflating: + This can happen if the inflated deflate data is longer than the amount of bytes required to fill up + all the pixels of the image, given the color depth and image dimensions. Something that doesn't + happen in a normal, well encoded, PNG image.*/ + case 22: return "end of out buffer memory reached while inflating"; + case 23: return "end of in buffer memory reached while inflating"; + case 24: return "invalid FCHECK in zlib header"; + case 25: return "invalid compression method in zlib header"; + case 26: return "FDICT encountered in zlib header while it's not used for PNG"; + case 27: return "PNG file is smaller than a PNG header"; + /*Checks the magic file header, the first 8 bytes of the PNG file*/ + case 28: return "incorrect PNG signature, it's no PNG or corrupted"; + case 29: return "first chunk is not the header chunk"; + case 30: return "chunk length too large, chunk broken off at end of file"; + case 31: return "illegal PNG color type or bpp"; + case 32: return "illegal PNG compression method"; + case 33: return "illegal PNG filter method"; + case 34: return "illegal PNG interlace method"; + case 35: return "chunk length of a chunk is too large or the chunk too small"; + case 36: return "illegal PNG filter type encountered"; + case 37: return "illegal bit depth for this color type given"; + case 38: return "the palette is too small or too big"; /*0, or more than 256 colors*/ + case 39: return "tRNS chunk before PLTE or has more entries than palette size"; + case 40: return "tRNS chunk has wrong size for grayscale image"; + case 41: return "tRNS chunk has wrong size for RGB image"; + case 42: return "tRNS chunk appeared while it was not allowed for this color type"; + case 43: return "bKGD chunk has wrong size for palette image"; + case 44: return "bKGD chunk has wrong size for grayscale image"; + case 45: return "bKGD chunk has wrong size for RGB image"; + case 48: return "empty input buffer given to decoder. Maybe caused by non-existing file?"; + case 49: return "jumped past memory while generating dynamic huffman tree"; + case 50: return "jumped past memory while generating dynamic huffman tree"; + case 51: return "jumped past memory while inflating huffman block"; + case 52: return "jumped past memory while inflating"; + case 53: return "size of zlib data too small"; + case 54: return "repeat symbol in tree while there was no value symbol yet"; + /*jumped past tree while generating huffman tree, this could be when the + tree will have more leaves than symbols after generating it out of the + given lengths. They call this an oversubscribed dynamic bit lengths tree in zlib.*/ + case 55: return "jumped past tree while generating huffman tree"; + case 56: return "given output image colortype or bitdepth not supported for color conversion"; + case 57: return "invalid CRC encountered (checking CRC can be disabled)"; + case 58: return "invalid ADLER32 encountered (checking ADLER32 can be disabled)"; + case 59: return "requested color conversion not supported"; + case 60: return "invalid window size given in the settings of the encoder (must be 0-32768)"; + case 61: return "invalid BTYPE given in the settings of the encoder (only 0, 1 and 2 are allowed)"; + /*LodePNG leaves the choice of RGB to grayscale conversion formula to the user.*/ + case 62: return "conversion from color to grayscale not supported"; + /*(2^31-1)*/ + case 63: return "length of a chunk too long, max allowed for PNG is 2147483647 bytes per chunk"; + /*this would result in the inability of a deflated block to ever contain an end code. It must be at least 1.*/ + case 64: return "the length of the END symbol 256 in the Huffman tree is 0"; + case 66: return "the length of a text chunk keyword given to the encoder is longer than the maximum of 79 bytes"; + case 67: return "the length of a text chunk keyword given to the encoder is smaller than the minimum of 1 byte"; + case 68: return "tried to encode a PLTE chunk with a palette that has less than 1 or more than 256 colors"; + case 69: return "unknown chunk type with 'critical' flag encountered by the decoder"; + case 71: return "invalid interlace mode given to encoder (must be 0 or 1)"; + case 72: return "while decoding, invalid compression method encountering in zTXt or iTXt chunk (it must be 0)"; + case 73: return "invalid tIME chunk size"; + case 74: return "invalid pHYs chunk size"; + /*length could be wrong, or data chopped off*/ + case 75: return "no null termination char found while decoding text chunk"; + case 76: return "iTXt chunk too short to contain required bytes"; + case 77: return "integer overflow in buffer size"; + case 78: return "failed to open file for reading"; /*file doesn't exist or couldn't be opened for reading*/ + case 79: return "failed to open file for writing"; + case 80: return "tried creating a tree of 0 symbols"; + case 81: return "lazy matching at pos 0 is impossible"; + case 82: return "color conversion to palette requested while a color isn't in palette, or index out of bounds"; + case 83: return "memory allocation failed"; + case 84: return "given image too small to contain all pixels to be encoded"; + case 86: return "impossible offset in lz77 encoding (internal bug)"; + case 87: return "must provide custom zlib function pointer if LODEPNG_COMPILE_ZLIB is not defined"; + case 88: return "invalid filter strategy given for LodePNGEncoderSettings.filter_strategy"; + case 89: return "text chunk keyword too short or long: must have size 1-79"; + /*the windowsize in the LodePNGCompressSettings. Requiring POT(==> & instead of %) makes encoding 12% faster.*/ + case 90: return "windowsize must be a power of two"; + case 91: return "invalid decompressed idat size"; + case 92: return "integer overflow due to too many pixels"; + case 93: return "zero width or height is invalid"; + case 94: return "header chunk must have a size of 13 bytes"; + case 95: return "integer overflow with combined idat chunk size"; + case 96: return "invalid gAMA chunk size"; + case 97: return "invalid cHRM chunk size"; + case 98: return "invalid sRGB chunk size"; + case 99: return "invalid sRGB rendering intent"; + case 100: return "invalid ICC profile color type, the PNG specification only allows RGB or GRAY"; + case 101: return "PNG specification does not allow RGB ICC profile on gray color types and vice versa"; + case 102: return "not allowed to set grayscale ICC profile with colored pixels by PNG specification"; + case 103: return "invalid palette index in bKGD chunk. Maybe it came before PLTE chunk?"; + case 104: return "invalid bKGD color while encoding (e.g. palette index out of range)"; + case 105: return "integer overflow of bitsize"; + case 106: return "PNG file must have PLTE chunk if color type is palette"; + case 107: return "color convert from palette mode requested without setting the palette data in it"; + case 108: return "tried to add more than 256 values to a palette"; + /*this limit can be configured in LodePNGDecompressSettings*/ + case 109: return "tried to decompress zlib or deflate data larger than desired max_output_size"; + case 110: return "custom zlib or inflate decompression failed"; + case 111: return "custom zlib or deflate compression failed"; + /*max text size limit can be configured in LodePNGDecoderSettings. This error prevents + unreasonable memory consumption when decoding due to impossibly large text sizes.*/ + case 112: return "compressed text unreasonably large"; + /*max ICC size limit can be configured in LodePNGDecoderSettings. This error prevents + unreasonable memory consumption when decoding due to impossibly large ICC profile*/ + case 113: return "ICC profile unreasonably large"; + } + return "unknown error code"; +} +#endif /*LODEPNG_COMPILE_ERROR_TEXT*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* // C++ Wrapper // */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_CPP +namespace lodepng { + +#ifdef LODEPNG_COMPILE_DISK +unsigned load_file(std::vector& buffer, const std::string& filename) { + long size = lodepng_filesize(filename.c_str()); + if(size < 0) return 78; + buffer.resize((size_t)size); + return size == 0 ? 0 : lodepng_buffer_file(&buffer[0], (size_t)size, filename.c_str()); +} + +/*write given buffer to the file, overwriting the file, it doesn't append to it.*/ +unsigned save_file(const std::vector& buffer, const std::string& filename) { + return lodepng_save_file(buffer.empty() ? 0 : &buffer[0], buffer.size(), filename.c_str()); +} +#endif /* LODEPNG_COMPILE_DISK */ + +#ifdef LODEPNG_COMPILE_ZLIB +#ifdef LODEPNG_COMPILE_DECODER +unsigned decompress(std::vector& out, const unsigned char* in, size_t insize, + const LodePNGDecompressSettings& settings) { + unsigned char* buffer = 0; + size_t buffersize = 0; + unsigned error = zlib_decompress(&buffer, &buffersize, 0, in, insize, &settings); + if(buffer) { + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; +} + +unsigned decompress(std::vector& out, const std::vector& in, + const LodePNGDecompressSettings& settings) { + return decompress(out, in.empty() ? 0 : &in[0], in.size(), settings); +} +#endif /* LODEPNG_COMPILE_DECODER */ + +#ifdef LODEPNG_COMPILE_ENCODER +unsigned compress(std::vector& out, const unsigned char* in, size_t insize, + const LodePNGCompressSettings& settings) { + unsigned char* buffer = 0; + size_t buffersize = 0; + unsigned error = zlib_compress(&buffer, &buffersize, in, insize, &settings); + if(buffer) { + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; +} + +unsigned compress(std::vector& out, const std::vector& in, + const LodePNGCompressSettings& settings) { + return compress(out, in.empty() ? 0 : &in[0], in.size(), settings); +} +#endif /* LODEPNG_COMPILE_ENCODER */ +#endif /* LODEPNG_COMPILE_ZLIB */ + + +#ifdef LODEPNG_COMPILE_PNG + +State::State() { + lodepng_state_init(this); +} + +State::State(const State& other) { + lodepng_state_init(this); + lodepng_state_copy(this, &other); +} + +State::~State() { + lodepng_state_cleanup(this); +} + +State& State::operator=(const State& other) { + lodepng_state_copy(this, &other); + return *this; +} + +#ifdef LODEPNG_COMPILE_DECODER + +unsigned decode(std::vector& out, unsigned& w, unsigned& h, const unsigned char* in, + size_t insize, LodePNGColorType colortype, unsigned bitdepth) { + unsigned char* buffer = 0; + unsigned error = lodepng_decode_memory(&buffer, &w, &h, in, insize, colortype, bitdepth); + if(buffer && !error) { + State state; + state.info_raw.colortype = colortype; + state.info_raw.bitdepth = bitdepth; + size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw); + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + } + lodepng_free(buffer); + return error; +} + +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + const std::vector& in, LodePNGColorType colortype, unsigned bitdepth) { + return decode(out, w, h, in.empty() ? 0 : &in[0], (unsigned)in.size(), colortype, bitdepth); +} + +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + State& state, + const unsigned char* in, size_t insize) { + unsigned char* buffer = NULL; + unsigned error = lodepng_decode(&buffer, &w, &h, &state, in, insize); + if(buffer && !error) { + size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw); + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + } + lodepng_free(buffer); + return error; +} + +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + State& state, + const std::vector& in) { + return decode(out, w, h, state, in.empty() ? 0 : &in[0], in.size()); +} + +#ifdef LODEPNG_COMPILE_DISK +unsigned decode(std::vector& out, unsigned& w, unsigned& h, const std::string& filename, + LodePNGColorType colortype, unsigned bitdepth) { + std::vector buffer; + /* safe output values in case error happens */ + w = h = 0; + unsigned error = load_file(buffer, filename); + if(error) return error; + return decode(out, w, h, buffer, colortype, bitdepth); +} +#endif /* LODEPNG_COMPILE_DECODER */ +#endif /* LODEPNG_COMPILE_DISK */ + +#ifdef LODEPNG_COMPILE_ENCODER +unsigned encode(std::vector& out, const unsigned char* in, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) { + unsigned char* buffer; + size_t buffersize; + unsigned error = lodepng_encode_memory(&buffer, &buffersize, in, w, h, colortype, bitdepth); + if(buffer) { + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; +} + +unsigned encode(std::vector& out, + const std::vector& in, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) { + if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84; + return encode(out, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth); +} + +unsigned encode(std::vector& out, + const unsigned char* in, unsigned w, unsigned h, + State& state) { + unsigned char* buffer; + size_t buffersize; + unsigned error = lodepng_encode(&buffer, &buffersize, in, w, h, &state); + if(buffer) { + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; +} + +unsigned encode(std::vector& out, + const std::vector& in, unsigned w, unsigned h, + State& state) { + if(lodepng_get_raw_size(w, h, &state.info_raw) > in.size()) return 84; + return encode(out, in.empty() ? 0 : &in[0], w, h, state); +} + +#ifdef LODEPNG_COMPILE_DISK +unsigned encode(const std::string& filename, + const unsigned char* in, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) { + std::vector buffer; + unsigned error = encode(buffer, in, w, h, colortype, bitdepth); + if(!error) error = save_file(buffer, filename); + return error; +} + +unsigned encode(const std::string& filename, + const std::vector& in, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) { + if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84; + return encode(filename, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth); +} +#endif /* LODEPNG_COMPILE_DISK */ +#endif /* LODEPNG_COMPILE_ENCODER */ +#endif /* LODEPNG_COMPILE_PNG */ +} /* namespace lodepng */ +#endif /*LODEPNG_COMPILE_CPP*/ diff --git a/lib/libesp32_lvgl/lv_lib_png/src/lodepng.h b/lib/libesp32_lvgl/lv_lib_png/src/lodepng.h new file mode 100644 index 000000000..1daa65648 --- /dev/null +++ b/lib/libesp32_lvgl/lv_lib_png/src/lodepng.h @@ -0,0 +1,1989 @@ +/* +LodePNG version 20201017 + +Copyright (c) 2005-2020 Lode Vandevenne + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +#ifndef LODEPNG_H +#define LODEPNG_H + +#include /*for size_t*/ + +#ifndef LV_PNG_USE_LV_FILESYSTEM +#define LV_PNG_USE_LV_FILESYSTEM 0 +#endif + +#if LV_PNG_USE_LV_FILESYSTEM +#ifdef LV_LVGL_H_INCLUDE_SIMPLE +#include +#else +#include +#endif +#endif /* LV_PNG_USE_LV_FILESYSTEM */ + +extern const char* LODEPNG_VERSION_STRING; + +/* +The following #defines are used to create code sections. They can be disabled +to disable code sections, which can give faster compile time and smaller binary. +The "NO_COMPILE" defines are designed to be used to pass as defines to the +compiler command to disable them without modifying this header, e.g. +-DLODEPNG_NO_COMPILE_ZLIB for gcc. +In addition to those below, you can also define LODEPNG_NO_COMPILE_CRC to +allow implementing a custom lodepng_crc32. +*/ +/*deflate & zlib. If disabled, you must specify alternative zlib functions in +the custom_zlib field of the compress and decompress settings*/ +#ifndef LODEPNG_NO_COMPILE_ZLIB +#define LODEPNG_COMPILE_ZLIB +#endif + +/*png encoder and png decoder*/ +#ifndef LODEPNG_NO_COMPILE_PNG +#define LODEPNG_COMPILE_PNG +#endif + +/*deflate&zlib decoder and png decoder*/ +#ifndef LODEPNG_NO_COMPILE_DECODER +#define LODEPNG_COMPILE_DECODER +#endif + +/*deflate&zlib encoder and png encoder*/ +#ifndef LODEPNG_NO_COMPILE_ENCODER +#define LODEPNG_COMPILE_ENCODER +#endif + +/*the optional built in harddisk file loading and saving functions*/ +#ifndef LODEPNG_NO_COMPILE_DISK +#define LODEPNG_COMPILE_DISK +#endif + +/*support for chunks other than IHDR, IDAT, PLTE, tRNS, IEND: ancillary and unknown chunks*/ +#ifndef LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS +#define LODEPNG_COMPILE_ANCILLARY_CHUNKS +#endif + +/*ability to convert error numerical codes to English text string*/ +#ifndef LODEPNG_NO_COMPILE_ERROR_TEXT +#define LODEPNG_COMPILE_ERROR_TEXT +#endif + +/*Compile the default allocators (C's free, malloc and realloc). If you disable this, +you can define the functions lodepng_free, lodepng_malloc and lodepng_realloc in your +source files with custom allocators.*/ +#ifndef LODEPNG_NO_COMPILE_ALLOCATORS +#define LODEPNG_COMPILE_ALLOCATORS +#endif + +/*compile the C++ version (you can disable the C++ wrapper here even when compiling for C++)*/ +#ifdef __cplusplus +#ifndef LODEPNG_NO_COMPILE_CPP +#define LODEPNG_COMPILE_CPP +#endif +#endif + +#ifdef LODEPNG_COMPILE_CPP +#include +#include +#endif /*LODEPNG_COMPILE_CPP*/ + +#ifdef LODEPNG_COMPILE_PNG +/*The PNG color types (also used for raw image).*/ +typedef enum LodePNGColorType { + LCT_GREY = 0, /*grayscale: 1,2,4,8,16 bit*/ + LCT_RGB = 2, /*RGB: 8,16 bit*/ + LCT_PALETTE = 3, /*palette: 1,2,4,8 bit*/ + LCT_GREY_ALPHA = 4, /*grayscale with alpha: 8,16 bit*/ + LCT_RGBA = 6, /*RGB with alpha: 8,16 bit*/ + /*LCT_MAX_OCTET_VALUE lets the compiler allow this enum to represent any invalid + byte value from 0 to 255 that could be present in an invalid PNG file header. Do + not use, compare with or set the name LCT_MAX_OCTET_VALUE, instead either use + the valid color type names above, or numeric values like 1 or 7 when checking for + particular disallowed color type byte values, or cast to integer to print it.*/ + LCT_MAX_OCTET_VALUE = 255 +} LodePNGColorType; + +#ifdef LODEPNG_COMPILE_DECODER +/* +Converts PNG data in memory to raw pixel data. +out: Output parameter. Pointer to buffer that will contain the raw pixel data. + After decoding, its size is w * h * (bytes per pixel) bytes larger than + initially. Bytes per pixel depends on colortype and bitdepth. + Must be freed after usage with free(*out). + Note: for 16-bit per channel colors, uses big endian format like PNG does. +w: Output parameter. Pointer to width of pixel data. +h: Output parameter. Pointer to height of pixel data. +in: Memory buffer with the PNG file. +insize: size of the in buffer. +colortype: the desired color type for the raw output image. See explanation on PNG color types. +bitdepth: the desired bit depth for the raw output image. See explanation on PNG color types. +Return value: LodePNG error code (0 means no error). +*/ +unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, + const unsigned char* in, size_t insize, + LodePNGColorType colortype, unsigned bitdepth); + +/*Same as lodepng_decode_memory, but always decodes to 32-bit RGBA raw image*/ +unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h, + const unsigned char* in, size_t insize); + +/*Same as lodepng_decode_memory, but always decodes to 24-bit RGB raw image*/ +unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h, + const unsigned char* in, size_t insize); + +#ifdef LODEPNG_COMPILE_DISK +/* +Load PNG from disk, from file with given name. +Same as the other decode functions, but instead takes a filename as input. +*/ +unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h, + const char* filename, + LodePNGColorType colortype, unsigned bitdepth); + +/*Same as lodepng_decode_file, but always decodes to 32-bit RGBA raw image.*/ +unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h, + const char* filename); + +/*Same as lodepng_decode_file, but always decodes to 24-bit RGB raw image.*/ +unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h, + const char* filename); +#endif /*LODEPNG_COMPILE_DISK*/ +#endif /*LODEPNG_COMPILE_DECODER*/ + + +#ifdef LODEPNG_COMPILE_ENCODER +/* +Converts raw pixel data into a PNG image in memory. The colortype and bitdepth + of the output PNG image cannot be chosen, they are automatically determined + by the colortype, bitdepth and content of the input pixel data. + Note: for 16-bit per channel colors, needs big endian format like PNG does. +out: Output parameter. Pointer to buffer that will contain the PNG image data. + Must be freed after usage with free(*out). +outsize: Output parameter. Pointer to the size in bytes of the out buffer. +image: The raw pixel data to encode. The size of this buffer should be + w * h * (bytes per pixel), bytes per pixel depends on colortype and bitdepth. +w: width of the raw pixel data in pixels. +h: height of the raw pixel data in pixels. +colortype: the color type of the raw input image. See explanation on PNG color types. +bitdepth: the bit depth of the raw input image. See explanation on PNG color types. +Return value: LodePNG error code (0 means no error). +*/ +unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth); + +/*Same as lodepng_encode_memory, but always encodes from 32-bit RGBA raw image.*/ +unsigned lodepng_encode32(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h); + +/*Same as lodepng_encode_memory, but always encodes from 24-bit RGB raw image.*/ +unsigned lodepng_encode24(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h); + +#ifdef LODEPNG_COMPILE_DISK +/* +Converts raw pixel data into a PNG file on disk. +Same as the other encode functions, but instead takes a filename as output. +NOTE: This overwrites existing files without warning! +*/ +unsigned lodepng_encode_file(const char* filename, + const unsigned char* image, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth); + +/*Same as lodepng_encode_file, but always encodes from 32-bit RGBA raw image.*/ +unsigned lodepng_encode32_file(const char* filename, + const unsigned char* image, unsigned w, unsigned h); + +/*Same as lodepng_encode_file, but always encodes from 24-bit RGB raw image.*/ +unsigned lodepng_encode24_file(const char* filename, + const unsigned char* image, unsigned w, unsigned h); +#endif /*LODEPNG_COMPILE_DISK*/ +#endif /*LODEPNG_COMPILE_ENCODER*/ + + +#ifdef LODEPNG_COMPILE_CPP +namespace lodepng { +#ifdef LODEPNG_COMPILE_DECODER +/*Same as lodepng_decode_memory, but decodes to an std::vector. The colortype +is the format to output the pixels to. Default is RGBA 8-bit per channel.*/ +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + const unsigned char* in, size_t insize, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + const std::vector& in, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +#ifdef LODEPNG_COMPILE_DISK +/* +Converts PNG file from disk to raw pixel data in memory. +Same as the other decode functions, but instead takes a filename as input. +*/ +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + const std::string& filename, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +#endif /* LODEPNG_COMPILE_DISK */ +#endif /* LODEPNG_COMPILE_DECODER */ + +#ifdef LODEPNG_COMPILE_ENCODER +/*Same as lodepng_encode_memory, but encodes to an std::vector. colortype +is that of the raw input data. The output PNG color type will be auto chosen.*/ +unsigned encode(std::vector& out, + const unsigned char* in, unsigned w, unsigned h, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +unsigned encode(std::vector& out, + const std::vector& in, unsigned w, unsigned h, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +#ifdef LODEPNG_COMPILE_DISK +/* +Converts 32-bit RGBA raw pixel data into a PNG file on disk. +Same as the other encode functions, but instead takes a filename as output. +NOTE: This overwrites existing files without warning! +*/ +unsigned encode(const std::string& filename, + const unsigned char* in, unsigned w, unsigned h, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +unsigned encode(const std::string& filename, + const std::vector& in, unsigned w, unsigned h, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +#endif /* LODEPNG_COMPILE_DISK */ +#endif /* LODEPNG_COMPILE_ENCODER */ +} /* namespace lodepng */ +#endif /*LODEPNG_COMPILE_CPP*/ +#endif /*LODEPNG_COMPILE_PNG*/ + +#ifdef LODEPNG_COMPILE_ERROR_TEXT +/*Returns an English description of the numerical error code.*/ +const char* lodepng_error_text(unsigned code); +#endif /*LODEPNG_COMPILE_ERROR_TEXT*/ + +#ifdef LODEPNG_COMPILE_DECODER +/*Settings for zlib decompression*/ +typedef struct LodePNGDecompressSettings LodePNGDecompressSettings; +struct LodePNGDecompressSettings { + /* Check LodePNGDecoderSettings for more ignorable errors such as ignore_crc */ + unsigned ignore_adler32; /*if 1, continue and don't give an error message if the Adler32 checksum is corrupted*/ + unsigned ignore_nlen; /*ignore complement of len checksum in uncompressed blocks*/ + + /*Maximum decompressed size, beyond this the decoder may (and is encouraged to) stop decoding, + return an error, output a data size > max_output_size and all the data up to that point. This is + not hard limit nor a guarantee, but can prevent excessive memory usage. This setting is + ignored by the PNG decoder, but is used by the deflate/zlib decoder and can be used by custom ones. + Set to 0 to impose no limit (the default).*/ + size_t max_output_size; + + /*use custom zlib decoder instead of built in one (default: null). + Should return 0 if success, any non-0 if error (numeric value not exposed).*/ + unsigned (*custom_zlib)(unsigned char**, size_t*, + const unsigned char*, size_t, + const LodePNGDecompressSettings*); + /*use custom deflate decoder instead of built in one (default: null) + if custom_zlib is not null, custom_inflate is ignored (the zlib format uses deflate). + Should return 0 if success, any non-0 if error (numeric value not exposed).*/ + unsigned (*custom_inflate)(unsigned char**, size_t*, + const unsigned char*, size_t, + const LodePNGDecompressSettings*); + + const void* custom_context; /*optional custom settings for custom functions*/ +}; + +extern const LodePNGDecompressSettings lodepng_default_decompress_settings; +void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings); +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER +/* +Settings for zlib compression. Tweaking these settings tweaks the balance +between speed and compression ratio. +*/ +typedef struct LodePNGCompressSettings LodePNGCompressSettings; +struct LodePNGCompressSettings /*deflate = compress*/ { + /*LZ77 related settings*/ + unsigned btype; /*the block type for LZ (0, 1, 2 or 3, see zlib standard). Should be 2 for proper compression.*/ + unsigned use_lz77; /*whether or not to use LZ77. Should be 1 for proper compression.*/ + unsigned windowsize; /*must be a power of two <= 32768. higher compresses more but is slower. Default value: 2048.*/ + unsigned minmatch; /*minimum lz77 length. 3 is normally best, 6 can be better for some PNGs. Default: 0*/ + unsigned nicematch; /*stop searching if >= this length found. Set to 258 for best compression. Default: 128*/ + unsigned lazymatching; /*use lazy matching: better compression but a bit slower. Default: true*/ + + /*use custom zlib encoder instead of built in one (default: null)*/ + unsigned (*custom_zlib)(unsigned char**, size_t*, + const unsigned char*, size_t, + const LodePNGCompressSettings*); + /*use custom deflate encoder instead of built in one (default: null) + if custom_zlib is used, custom_deflate is ignored since only the built in + zlib function will call custom_deflate*/ + unsigned (*custom_deflate)(unsigned char**, size_t*, + const unsigned char*, size_t, + const LodePNGCompressSettings*); + + const void* custom_context; /*optional custom settings for custom functions*/ +}; + +extern const LodePNGCompressSettings lodepng_default_compress_settings; +void lodepng_compress_settings_init(LodePNGCompressSettings* settings); +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#ifdef LODEPNG_COMPILE_PNG +/* +Color mode of an image. Contains all information required to decode the pixel +bits to RGBA colors. This information is the same as used in the PNG file +format, and is used both for PNG and raw image data in LodePNG. +*/ +typedef struct LodePNGColorMode { + /*header (IHDR)*/ + LodePNGColorType colortype; /*color type, see PNG standard or documentation further in this header file*/ + unsigned bitdepth; /*bits per sample, see PNG standard or documentation further in this header file*/ + + /* + palette (PLTE and tRNS) + + Dynamically allocated with the colors of the palette, including alpha. + This field may not be allocated directly, use lodepng_color_mode_init first, + then lodepng_palette_add per color to correctly initialize it (to ensure size + of exactly 1024 bytes). + + The alpha channels must be set as well, set them to 255 for opaque images. + + When decoding, by default you can ignore this palette, since LodePNG already + fills the palette colors in the pixels of the raw RGBA output. + + The palette is only supported for color type 3. + */ + unsigned char* palette; /*palette in RGBARGBA... order. Must be either 0, or when allocated must have 1024 bytes*/ + size_t palettesize; /*palette size in number of colors (amount of used bytes is 4 * palettesize)*/ + + /* + transparent color key (tRNS) + + This color uses the same bit depth as the bitdepth value in this struct, which can be 1-bit to 16-bit. + For grayscale PNGs, r, g and b will all 3 be set to the same. + + When decoding, by default you can ignore this information, since LodePNG sets + pixels with this key to transparent already in the raw RGBA output. + + The color key is only supported for color types 0 and 2. + */ + unsigned key_defined; /*is a transparent color key given? 0 = false, 1 = true*/ + unsigned key_r; /*red/grayscale component of color key*/ + unsigned key_g; /*green component of color key*/ + unsigned key_b; /*blue component of color key*/ +} LodePNGColorMode; + +/*init, cleanup and copy functions to use with this struct*/ +void lodepng_color_mode_init(LodePNGColorMode* info); +void lodepng_color_mode_cleanup(LodePNGColorMode* info); +/*return value is error code (0 means no error)*/ +unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source); +/* Makes a temporary LodePNGColorMode that does not need cleanup (no palette) */ +LodePNGColorMode lodepng_color_mode_make(LodePNGColorType colortype, unsigned bitdepth); + +void lodepng_palette_clear(LodePNGColorMode* info); +/*add 1 color to the palette*/ +unsigned lodepng_palette_add(LodePNGColorMode* info, + unsigned char r, unsigned char g, unsigned char b, unsigned char a); + +/*get the total amount of bits per pixel, based on colortype and bitdepth in the struct*/ +unsigned lodepng_get_bpp(const LodePNGColorMode* info); +/*get the amount of color channels used, based on colortype in the struct. +If a palette is used, it counts as 1 channel.*/ +unsigned lodepng_get_channels(const LodePNGColorMode* info); +/*is it a grayscale type? (only colortype 0 or 4)*/ +unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info); +/*has it got an alpha channel? (only colortype 2 or 6)*/ +unsigned lodepng_is_alpha_type(const LodePNGColorMode* info); +/*has it got a palette? (only colortype 3)*/ +unsigned lodepng_is_palette_type(const LodePNGColorMode* info); +/*only returns true if there is a palette and there is a value in the palette with alpha < 255. +Loops through the palette to check this.*/ +unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info); +/* +Check if the given color info indicates the possibility of having non-opaque pixels in the PNG image. +Returns true if the image can have translucent or invisible pixels (it still be opaque if it doesn't use such pixels). +Returns false if the image can only have opaque pixels. +In detail, it returns true only if it's a color type with alpha, or has a palette with non-opaque values, +or if "key_defined" is true. +*/ +unsigned lodepng_can_have_alpha(const LodePNGColorMode* info); +/*Returns the byte size of a raw image buffer with given width, height and color mode*/ +size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color); + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +/*The information of a Time chunk in PNG.*/ +typedef struct LodePNGTime { + unsigned year; /*2 bytes used (0-65535)*/ + unsigned month; /*1-12*/ + unsigned day; /*1-31*/ + unsigned hour; /*0-23*/ + unsigned minute; /*0-59*/ + unsigned second; /*0-60 (to allow for leap seconds)*/ +} LodePNGTime; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +/*Information about the PNG image, except pixels, width and height.*/ +typedef struct LodePNGInfo { + /*header (IHDR), palette (PLTE) and transparency (tRNS) chunks*/ + unsigned compression_method;/*compression method of the original file. Always 0.*/ + unsigned filter_method; /*filter method of the original file*/ + unsigned interlace_method; /*interlace method of the original file: 0=none, 1=Adam7*/ + LodePNGColorMode color; /*color type and bits, palette and transparency of the PNG file*/ + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /* + Suggested background color chunk (bKGD) + + This uses the same color mode and bit depth as the PNG (except no alpha channel), + with values truncated to the bit depth in the unsigned integer. + + For grayscale and palette PNGs, the value is stored in background_r. The values + in background_g and background_b are then unused. + + So when decoding, you may get these in a different color mode than the one you requested + for the raw pixels. + + When encoding with auto_convert, you must use the color model defined in info_png.color for + these values. The encoder normally ignores info_png.color when auto_convert is on, but will + use it to interpret these values (and convert copies of them to its chosen color model). + + When encoding, avoid setting this to an expensive color, such as a non-gray value + when the image is gray, or the compression will be worse since it will be forced to + write the PNG with a more expensive color mode (when auto_convert is on). + + The decoder does not use this background color to edit the color of pixels. This is a + completely optional metadata feature. + */ + unsigned background_defined; /*is a suggested background color given?*/ + unsigned background_r; /*red/gray/palette component of suggested background color*/ + unsigned background_g; /*green component of suggested background color*/ + unsigned background_b; /*blue component of suggested background color*/ + + /* + Non-international text chunks (tEXt and zTXt) + + The char** arrays each contain num strings. The actual messages are in + text_strings, while text_keys are keywords that give a short description what + the actual text represents, e.g. Title, Author, Description, or anything else. + + All the string fields below including strings, keys, names and language tags are null terminated. + The PNG specification uses null characters for the keys, names and tags, and forbids null + characters to appear in the main text which is why we can use null termination everywhere here. + + A keyword is minimum 1 character and maximum 79 characters long (plus the + additional null terminator). It's discouraged to use a single line length + longer than 79 characters for texts. + + Don't allocate these text buffers yourself. Use the init/cleanup functions + correctly and use lodepng_add_text and lodepng_clear_text. + + Standard text chunk keywords and strings are encoded using Latin-1. + */ + size_t text_num; /*the amount of texts in these char** buffers (there may be more texts in itext)*/ + char** text_keys; /*the keyword of a text chunk (e.g. "Comment")*/ + char** text_strings; /*the actual text*/ + + /* + International text chunks (iTXt) + Similar to the non-international text chunks, but with additional strings + "langtags" and "transkeys", and the following text encodings are used: + keys: Latin-1, langtags: ASCII, transkeys and strings: UTF-8. + keys must be 1-79 characters (plus the additional null terminator), the other + strings are any length. + */ + size_t itext_num; /*the amount of international texts in this PNG*/ + char** itext_keys; /*the English keyword of the text chunk (e.g. "Comment")*/ + char** itext_langtags; /*language tag for this text's language, ISO/IEC 646 string, e.g. ISO 639 language tag*/ + char** itext_transkeys; /*keyword translated to the international language - UTF-8 string*/ + char** itext_strings; /*the actual international text - UTF-8 string*/ + + /*time chunk (tIME)*/ + unsigned time_defined; /*set to 1 to make the encoder generate a tIME chunk*/ + LodePNGTime time; + + /*phys chunk (pHYs)*/ + unsigned phys_defined; /*if 0, there is no pHYs chunk and the values below are undefined, if 1 else there is one*/ + unsigned phys_x; /*pixels per unit in x direction*/ + unsigned phys_y; /*pixels per unit in y direction*/ + unsigned phys_unit; /*may be 0 (unknown unit) or 1 (metre)*/ + + /* + Color profile related chunks: gAMA, cHRM, sRGB, iCPP + + LodePNG does not apply any color conversions on pixels in the encoder or decoder and does not interpret these color + profile values. It merely passes on the information. If you wish to use color profiles and convert colors, please + use these values with a color management library. + + See the PNG, ICC and sRGB specifications for more information about the meaning of these values. + */ + + /* gAMA chunk: optional, overridden by sRGB or iCCP if those are present. */ + unsigned gama_defined; /* Whether a gAMA chunk is present (0 = not present, 1 = present). */ + unsigned gama_gamma; /* Gamma exponent times 100000 */ + + /* cHRM chunk: optional, overridden by sRGB or iCCP if those are present. */ + unsigned chrm_defined; /* Whether a cHRM chunk is present (0 = not present, 1 = present). */ + unsigned chrm_white_x; /* White Point x times 100000 */ + unsigned chrm_white_y; /* White Point y times 100000 */ + unsigned chrm_red_x; /* Red x times 100000 */ + unsigned chrm_red_y; /* Red y times 100000 */ + unsigned chrm_green_x; /* Green x times 100000 */ + unsigned chrm_green_y; /* Green y times 100000 */ + unsigned chrm_blue_x; /* Blue x times 100000 */ + unsigned chrm_blue_y; /* Blue y times 100000 */ + + /* + sRGB chunk: optional. May not appear at the same time as iCCP. + If gAMA is also present gAMA must contain value 45455. + If cHRM is also present cHRM must contain respectively 31270,32900,64000,33000,30000,60000,15000,6000. + */ + unsigned srgb_defined; /* Whether an sRGB chunk is present (0 = not present, 1 = present). */ + unsigned srgb_intent; /* Rendering intent: 0=perceptual, 1=rel. colorimetric, 2=saturation, 3=abs. colorimetric */ + + /* + iCCP chunk: optional. May not appear at the same time as sRGB. + + LodePNG does not parse or use the ICC profile (except its color space header field for an edge case), a + separate library to handle the ICC data (not included in LodePNG) format is needed to use it for color + management and conversions. + + For encoding, if iCCP is present, gAMA and cHRM are recommended to be added as well with values that match the ICC + profile as closely as possible, if you wish to do this you should provide the correct values for gAMA and cHRM and + enable their '_defined' flags since LodePNG will not automatically compute them from the ICC profile. + + For encoding, the ICC profile is required by the PNG specification to be an "RGB" profile for non-gray + PNG color types and a "GRAY" profile for gray PNG color types. If you disable auto_convert, you must ensure + the ICC profile type matches your requested color type, else the encoder gives an error. If auto_convert is + enabled (the default), and the ICC profile is not a good match for the pixel data, this will result in an encoder + error if the pixel data has non-gray pixels for a GRAY profile, or a silent less-optimal compression of the pixel + data if the pixels could be encoded as grayscale but the ICC profile is RGB. + + To avoid this do not set an ICC profile in the image unless there is a good reason for it, and when doing so + make sure you compute it carefully to avoid the above problems. + */ + unsigned iccp_defined; /* Whether an iCCP chunk is present (0 = not present, 1 = present). */ + char* iccp_name; /* Null terminated string with profile name, 1-79 bytes */ + /* + The ICC profile in iccp_profile_size bytes. + Don't allocate this buffer yourself. Use the init/cleanup functions + correctly and use lodepng_set_icc and lodepng_clear_icc. + */ + unsigned char* iccp_profile; + unsigned iccp_profile_size; /* The size of iccp_profile in bytes */ + + /* End of color profile related chunks */ + + + /* + unknown chunks: chunks not known by LodePNG, passed on byte for byte. + + There are 3 buffers, one for each position in the PNG where unknown chunks can appear. + Each buffer contains all unknown chunks for that position consecutively. + The 3 positions are: + 0: between IHDR and PLTE, 1: between PLTE and IDAT, 2: between IDAT and IEND. + + For encoding, do not store critical chunks or known chunks that are enabled with a "_defined" flag + above in here, since the encoder will blindly follow this and could then encode an invalid PNG file + (such as one with two IHDR chunks or the disallowed combination of sRGB with iCCP). But do use + this if you wish to store an ancillary chunk that is not supported by LodePNG (such as sPLT or hIST), + or any non-standard PNG chunk. + + Do not allocate or traverse this data yourself. Use the chunk traversing functions declared + later, such as lodepng_chunk_next and lodepng_chunk_append, to read/write this struct. + */ + unsigned char* unknown_chunks_data[3]; + size_t unknown_chunks_size[3]; /*size in bytes of the unknown chunks, given for protection*/ +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} LodePNGInfo; + +/*init, cleanup and copy functions to use with this struct*/ +void lodepng_info_init(LodePNGInfo* info); +void lodepng_info_cleanup(LodePNGInfo* info); +/*return value is error code (0 means no error)*/ +unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source); + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str); /*push back both texts at once*/ +void lodepng_clear_text(LodePNGInfo* info); /*use this to clear the texts again after you filled them in*/ + +unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag, + const char* transkey, const char* str); /*push back the 4 texts of 1 chunk at once*/ +void lodepng_clear_itext(LodePNGInfo* info); /*use this to clear the itexts again after you filled them in*/ + +/*replaces if exists*/ +unsigned lodepng_set_icc(LodePNGInfo* info, const char* name, const unsigned char* profile, unsigned profile_size); +void lodepng_clear_icc(LodePNGInfo* info); /*use this to clear the texts again after you filled them in*/ +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +/* +Converts raw buffer from one color type to another color type, based on +LodePNGColorMode structs to describe the input and output color type. +See the reference manual at the end of this header file to see which color conversions are supported. +return value = LodePNG error code (0 if all went ok, an error if the conversion isn't supported) +The out buffer must have size (w * h * bpp + 7) / 8, where bpp is the bits per pixel +of the output color type (lodepng_get_bpp). +For < 8 bpp images, there should not be padding bits at the end of scanlines. +For 16-bit per channel colors, uses big endian format like PNG does. +Return value is LodePNG error code +*/ +unsigned lodepng_convert(unsigned char* out, const unsigned char* in, + const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in, + unsigned w, unsigned h); + +#ifdef LODEPNG_COMPILE_DECODER +/* +Settings for the decoder. This contains settings for the PNG and the Zlib +decoder, but not the Info settings from the Info structs. +*/ +typedef struct LodePNGDecoderSettings { + LodePNGDecompressSettings zlibsettings; /*in here is the setting to ignore Adler32 checksums*/ + + /* Check LodePNGDecompressSettings for more ignorable errors such as ignore_adler32 */ + unsigned ignore_crc; /*ignore CRC checksums*/ + unsigned ignore_critical; /*ignore unknown critical chunks*/ + unsigned ignore_end; /*ignore issues at end of file if possible (missing IEND chunk, too large chunk, ...)*/ + /* TODO: make a system involving warnings with levels and a strict mode instead. Other potentially recoverable + errors: srgb rendering intent value, size of content of ancillary chunks, more than 79 characters for some + strings, placement/combination rules for ancillary chunks, crc of unknown chunks, allowed characters + in string keys, etc... */ + + unsigned color_convert; /*whether to convert the PNG to the color type you want. Default: yes*/ + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + unsigned read_text_chunks; /*if false but remember_unknown_chunks is true, they're stored in the unknown chunks*/ + + /*store all bytes from unknown chunks in the LodePNGInfo (off by default, useful for a png editor)*/ + unsigned remember_unknown_chunks; + + /* maximum size for decompressed text chunks. If a text chunk's text is larger than this, an error is returned, + unless reading text chunks is disabled or this limit is set higher or disabled. Set to 0 to allow any size. + By default it is a value that prevents unreasonably large strings from hogging memory. */ + size_t max_text_size; + + /* maximum size for compressed ICC chunks. If the ICC profile is larger than this, an error will be returned. Set to + 0 to allow any size. By default this is a value that prevents ICC profiles that would be much larger than any + legitimate profile could be to hog memory. */ + size_t max_icc_size; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} LodePNGDecoderSettings; + +void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings); +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER +/*automatically use color type with less bits per pixel if losslessly possible. Default: AUTO*/ +typedef enum LodePNGFilterStrategy { + /*every filter at zero*/ + LFS_ZERO = 0, + /*every filter at 1, 2, 3 or 4 (paeth), unlike LFS_ZERO not a good choice, but for testing*/ + LFS_ONE = 1, + LFS_TWO = 2, + LFS_THREE = 3, + LFS_FOUR = 4, + /*Use filter that gives minimum sum, as described in the official PNG filter heuristic.*/ + LFS_MINSUM, + /*Use the filter type that gives smallest Shannon entropy for this scanline. Depending + on the image, this is better or worse than minsum.*/ + LFS_ENTROPY, + /* + Brute-force-search PNG filters by compressing each filter for each scanline. + Experimental, very slow, and only rarely gives better compression than MINSUM. + */ + LFS_BRUTE_FORCE, + /*use predefined_filters buffer: you specify the filter type for each scanline*/ + LFS_PREDEFINED +} LodePNGFilterStrategy; + +/*Gives characteristics about the integer RGBA colors of the image (count, alpha channel usage, bit depth, ...), +which helps decide which color model to use for encoding. +Used internally by default if "auto_convert" is enabled. Public because it's useful for custom algorithms.*/ +typedef struct LodePNGColorStats { + unsigned colored; /*not grayscale*/ + unsigned key; /*image is not opaque and color key is possible instead of full alpha*/ + unsigned short key_r; /*key values, always as 16-bit, in 8-bit case the byte is duplicated, e.g. 65535 means 255*/ + unsigned short key_g; + unsigned short key_b; + unsigned alpha; /*image is not opaque and alpha channel or alpha palette required*/ + unsigned numcolors; /*amount of colors, up to 257. Not valid if bits == 16 or allow_palette is disabled.*/ + unsigned char palette[1024]; /*Remembers up to the first 256 RGBA colors, in no particular order, only valid when numcolors is valid*/ + unsigned bits; /*bits per channel (not for palette). 1,2 or 4 for grayscale only. 16 if 16-bit per channel required.*/ + size_t numpixels; + + /*user settings for computing/using the stats*/ + unsigned allow_palette; /*default 1. if 0, disallow choosing palette colortype in auto_choose_color, and don't count numcolors*/ + unsigned allow_greyscale; /*default 1. if 0, choose RGB or RGBA even if the image only has gray colors*/ +} LodePNGColorStats; + +void lodepng_color_stats_init(LodePNGColorStats* stats); + +/*Get a LodePNGColorStats of the image. The stats must already have been inited. +Returns error code (e.g. alloc fail) or 0 if ok.*/ +unsigned lodepng_compute_color_stats(LodePNGColorStats* stats, + const unsigned char* image, unsigned w, unsigned h, + const LodePNGColorMode* mode_in); + +/*Settings for the encoder.*/ +typedef struct LodePNGEncoderSettings { + LodePNGCompressSettings zlibsettings; /*settings for the zlib encoder, such as window size, ...*/ + + unsigned auto_convert; /*automatically choose output PNG color type. Default: true*/ + + /*If true, follows the official PNG heuristic: if the PNG uses a palette or lower than + 8 bit depth, set all filters to zero. Otherwise use the filter_strategy. Note that to + completely follow the official PNG heuristic, filter_palette_zero must be true and + filter_strategy must be LFS_MINSUM*/ + unsigned filter_palette_zero; + /*Which filter strategy to use when not using zeroes due to filter_palette_zero. + Set filter_palette_zero to 0 to ensure always using your chosen strategy. Default: LFS_MINSUM*/ + LodePNGFilterStrategy filter_strategy; + /*used if filter_strategy is LFS_PREDEFINED. In that case, this must point to a buffer with + the same length as the amount of scanlines in the image, and each value must <= 5. You + have to cleanup this buffer, LodePNG will never free it. Don't forget that filter_palette_zero + must be set to 0 to ensure this is also used on palette or low bitdepth images.*/ + const unsigned char* predefined_filters; + + /*force creating a PLTE chunk if colortype is 2 or 6 (= a suggested palette). + If colortype is 3, PLTE is _always_ created.*/ + unsigned force_palette; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*add LodePNG identifier and version as a text chunk, for debugging*/ + unsigned add_id; + /*encode text chunks as zTXt chunks instead of tEXt chunks, and use compression in iTXt chunks*/ + unsigned text_compression; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} LodePNGEncoderSettings; + +void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings); +#endif /*LODEPNG_COMPILE_ENCODER*/ + + +#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) +/*The settings, state and information for extended encoding and decoding.*/ +typedef struct LodePNGState { +#ifdef LODEPNG_COMPILE_DECODER + LodePNGDecoderSettings decoder; /*the decoding settings*/ +#endif /*LODEPNG_COMPILE_DECODER*/ +#ifdef LODEPNG_COMPILE_ENCODER + LodePNGEncoderSettings encoder; /*the encoding settings*/ +#endif /*LODEPNG_COMPILE_ENCODER*/ + LodePNGColorMode info_raw; /*specifies the format in which you would like to get the raw pixel buffer*/ + LodePNGInfo info_png; /*info of the PNG image obtained after decoding*/ + unsigned error; +} LodePNGState; + +/*init, cleanup and copy functions to use with this struct*/ +void lodepng_state_init(LodePNGState* state); +void lodepng_state_cleanup(LodePNGState* state); +void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source); +#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */ + +#ifdef LODEPNG_COMPILE_DECODER +/* +Same as lodepng_decode_memory, but uses a LodePNGState to allow custom settings and +getting much more information about the PNG image and color mode. +*/ +unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h, + LodePNGState* state, + const unsigned char* in, size_t insize); + +/* +Read the PNG header, but not the actual data. This returns only the information +that is in the IHDR chunk of the PNG, such as width, height and color type. The +information is placed in the info_png field of the LodePNGState. +*/ +unsigned lodepng_inspect(unsigned* w, unsigned* h, + LodePNGState* state, + const unsigned char* in, size_t insize); +#endif /*LODEPNG_COMPILE_DECODER*/ + +/* +Reads one metadata chunk (other than IHDR) of the PNG file and outputs what it +read in the state. Returns error code on failure. +Use lodepng_inspect first with a new state, then e.g. lodepng_chunk_find_const +to find the desired chunk type, and if non null use lodepng_inspect_chunk (with +chunk_pointer - start_of_file as pos). +Supports most metadata chunks from the PNG standard (gAMA, bKGD, tEXt, ...). +Ignores unsupported, unknown, non-metadata or IHDR chunks (without error). +Requirements: &in[pos] must point to start of a chunk, must use regular +lodepng_inspect first since format of most other chunks depends on IHDR, and if +there is a PLTE chunk, that one must be inspected before tRNS or bKGD. +*/ +unsigned lodepng_inspect_chunk(LodePNGState* state, size_t pos, + const unsigned char* in, size_t insize); + +#ifdef LODEPNG_COMPILE_ENCODER +/*This function allocates the out buffer with standard malloc and stores the size in *outsize.*/ +unsigned lodepng_encode(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h, + LodePNGState* state); +#endif /*LODEPNG_COMPILE_ENCODER*/ + +/* +The lodepng_chunk functions are normally not needed, except to traverse the +unknown chunks stored in the LodePNGInfo struct, or add new ones to it. +It also allows traversing the chunks of an encoded PNG file yourself. + +The chunk pointer always points to the beginning of the chunk itself, that is +the first byte of the 4 length bytes. + +In the PNG file format, chunks have the following format: +-4 bytes length: length of the data of the chunk in bytes (chunk itself is 12 bytes longer) +-4 bytes chunk type (ASCII a-z,A-Z only, see below) +-length bytes of data (may be 0 bytes if length was 0) +-4 bytes of CRC, computed on chunk name + data + +The first chunk starts at the 8th byte of the PNG file, the entire rest of the file +exists out of concatenated chunks with the above format. + +PNG standard chunk ASCII naming conventions: +-First byte: uppercase = critical, lowercase = ancillary +-Second byte: uppercase = public, lowercase = private +-Third byte: must be uppercase +-Fourth byte: uppercase = unsafe to copy, lowercase = safe to copy +*/ + +/* +Gets the length of the data of the chunk. Total chunk length has 12 bytes more. +There must be at least 4 bytes to read from. If the result value is too large, +it may be corrupt data. +*/ +unsigned lodepng_chunk_length(const unsigned char* chunk); + +/*puts the 4-byte type in null terminated string*/ +void lodepng_chunk_type(char type[5], const unsigned char* chunk); + +/*check if the type is the given type*/ +unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type); + +/*0: it's one of the critical chunk types, 1: it's an ancillary chunk (see PNG standard)*/ +unsigned char lodepng_chunk_ancillary(const unsigned char* chunk); + +/*0: public, 1: private (see PNG standard)*/ +unsigned char lodepng_chunk_private(const unsigned char* chunk); + +/*0: the chunk is unsafe to copy, 1: the chunk is safe to copy (see PNG standard)*/ +unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk); + +/*get pointer to the data of the chunk, where the input points to the header of the chunk*/ +unsigned char* lodepng_chunk_data(unsigned char* chunk); +const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk); + +/*returns 0 if the crc is correct, 1 if it's incorrect (0 for OK as usual!)*/ +unsigned lodepng_chunk_check_crc(const unsigned char* chunk); + +/*generates the correct CRC from the data and puts it in the last 4 bytes of the chunk*/ +void lodepng_chunk_generate_crc(unsigned char* chunk); + +/* +Iterate to next chunks, allows iterating through all chunks of the PNG file. +Input must be at the beginning of a chunk (result of a previous lodepng_chunk_next call, +or the 8th byte of a PNG file which always has the first chunk), or alternatively may +point to the first byte of the PNG file (which is not a chunk but the magic header, the +function will then skip over it and return the first real chunk). +Will output pointer to the start of the next chunk, or at or beyond end of the file if there +is no more chunk after this or possibly if the chunk is corrupt. +Start this process at the 8th byte of the PNG file. +In a non-corrupt PNG file, the last chunk should have name "IEND". +*/ +unsigned char* lodepng_chunk_next(unsigned char* chunk, unsigned char* end); +const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk, const unsigned char* end); + +/*Finds the first chunk with the given type in the range [chunk, end), or returns NULL if not found.*/ +unsigned char* lodepng_chunk_find(unsigned char* chunk, unsigned char* end, const char type[5]); +const unsigned char* lodepng_chunk_find_const(const unsigned char* chunk, const unsigned char* end, const char type[5]); + +/* +Appends chunk to the data in out. The given chunk should already have its chunk header. +The out variable and outsize are updated to reflect the new reallocated buffer. +Returns error code (0 if it went ok) +*/ +unsigned lodepng_chunk_append(unsigned char** out, size_t* outsize, const unsigned char* chunk); + +/* +Appends new chunk to out. The chunk to append is given by giving its length, type +and data separately. The type is a 4-letter string. +The out variable and outsize are updated to reflect the new reallocated buffer. +Returne error code (0 if it went ok) +*/ +unsigned lodepng_chunk_create(unsigned char** out, size_t* outsize, unsigned length, + const char* type, const unsigned char* data); + + +/*Calculate CRC32 of buffer*/ +unsigned lodepng_crc32(const unsigned char* buf, size_t len); +#endif /*LODEPNG_COMPILE_PNG*/ + + +#ifdef LODEPNG_COMPILE_ZLIB +/* +This zlib part can be used independently to zlib compress and decompress a +buffer. It cannot be used to create gzip files however, and it only supports the +part of zlib that is required for PNG, it does not support dictionaries. +*/ + +#ifdef LODEPNG_COMPILE_DECODER +/*Inflate a buffer. Inflate is the decompression step of deflate. Out buffer must be freed after use.*/ +unsigned lodepng_inflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings); + +/* +Decompresses Zlib data. Reallocates the out buffer and appends the data. The +data must be according to the zlib specification. +Either, *out must be NULL and *outsize must be 0, or, *out must be a valid +buffer and *outsize its size in bytes. out must be freed by user after usage. +*/ +unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings); +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER +/* +Compresses data with Zlib. Reallocates the out buffer and appends the data. +Zlib adds a small header and trailer around the deflate data. +The data is output in the format of the zlib specification. +Either, *out must be NULL and *outsize must be 0, or, *out must be a valid +buffer and *outsize its size in bytes. out must be freed by user after usage. +*/ +unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings); + +/* +Find length-limited Huffman code for given frequencies. This function is in the +public interface only for tests, it's used internally by lodepng_deflate. +*/ +unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies, + size_t numcodes, unsigned maxbitlen); + +/*Compress a buffer with deflate. See RFC 1951. Out buffer must be freed after use.*/ +unsigned lodepng_deflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings); + +#endif /*LODEPNG_COMPILE_ENCODER*/ +#endif /*LODEPNG_COMPILE_ZLIB*/ + +#ifdef LODEPNG_COMPILE_DISK +/* +Load a file from disk into buffer. The function allocates the out buffer, and +after usage you should free it. +out: output parameter, contains pointer to loaded buffer. +outsize: output parameter, size of the allocated out buffer +filename: the path to the file to load +return value: error code (0 means ok) +*/ +unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename); + +/* +Save a file from buffer to disk. Warning, if it exists, this function overwrites +the file without warning! +buffer: the buffer to write +buffersize: size of the buffer to write +filename: the path to the file to save to +return value: error code (0 means ok) +*/ +unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename); +#endif /*LODEPNG_COMPILE_DISK*/ + +#ifdef LODEPNG_COMPILE_CPP +/* The LodePNG C++ wrapper uses std::vectors instead of manually allocated memory buffers. */ +namespace lodepng { +#ifdef LODEPNG_COMPILE_PNG +class State : public LodePNGState { + public: + State(); + State(const State& other); + ~State(); + State& operator=(const State& other); +}; + +#ifdef LODEPNG_COMPILE_DECODER +/* Same as other lodepng::decode, but using a State for more settings and information. */ +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + State& state, + const unsigned char* in, size_t insize); +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + State& state, + const std::vector& in); +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER +/* Same as other lodepng::encode, but using a State for more settings and information. */ +unsigned encode(std::vector& out, + const unsigned char* in, unsigned w, unsigned h, + State& state); +unsigned encode(std::vector& out, + const std::vector& in, unsigned w, unsigned h, + State& state); +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#ifdef LODEPNG_COMPILE_DISK +/* +Load a file from disk into an std::vector. +return value: error code (0 means ok) +*/ +unsigned load_file(std::vector& buffer, const std::string& filename); + +/* +Save the binary data in an std::vector to a file on disk. The file is overwritten +without warning. +*/ +unsigned save_file(const std::vector& buffer, const std::string& filename); +#endif /* LODEPNG_COMPILE_DISK */ +#endif /* LODEPNG_COMPILE_PNG */ + +#ifdef LODEPNG_COMPILE_ZLIB +#ifdef LODEPNG_COMPILE_DECODER +/* Zlib-decompress an unsigned char buffer */ +unsigned decompress(std::vector& out, const unsigned char* in, size_t insize, + const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings); + +/* Zlib-decompress an std::vector */ +unsigned decompress(std::vector& out, const std::vector& in, + const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings); +#endif /* LODEPNG_COMPILE_DECODER */ + +#ifdef LODEPNG_COMPILE_ENCODER +/* Zlib-compress an unsigned char buffer */ +unsigned compress(std::vector& out, const unsigned char* in, size_t insize, + const LodePNGCompressSettings& settings = lodepng_default_compress_settings); + +/* Zlib-compress an std::vector */ +unsigned compress(std::vector& out, const std::vector& in, + const LodePNGCompressSettings& settings = lodepng_default_compress_settings); +#endif /* LODEPNG_COMPILE_ENCODER */ +#endif /* LODEPNG_COMPILE_ZLIB */ +} /* namespace lodepng */ +#endif /*LODEPNG_COMPILE_CPP*/ + +/* +TODO: +[.] test if there are no memory leaks or security exploits - done a lot but needs to be checked often +[.] check compatibility with various compilers - done but needs to be redone for every newer version +[X] converting color to 16-bit per channel types +[X] support color profile chunk types (but never let them touch RGB values by default) +[ ] support all public PNG chunk types (almost done except sBIT, sPLT and hIST) +[ ] make sure encoder generates no chunks with size > (2^31)-1 +[ ] partial decoding (stream processing) +[X] let the "isFullyOpaque" function check color keys and transparent palettes too +[X] better name for the variables "codes", "codesD", "codelengthcodes", "clcl" and "lldl" +[ ] allow treating some errors like warnings, when image is recoverable (e.g. 69, 57, 58) +[ ] make warnings like: oob palette, checksum fail, data after iend, wrong/unknown crit chunk, no null terminator in text, ... +[ ] error messages with line numbers (and version) +[ ] errors in state instead of as return code? +[ ] new errors/warnings like suspiciously big decompressed ztxt or iccp chunk +[ ] let the C++ wrapper catch exceptions coming from the standard library and return LodePNG error codes +[ ] allow user to provide custom color conversion functions, e.g. for premultiplied alpha, padding bits or not, ... +[ ] allow user to give data (void*) to custom allocator +[X] provide alternatives for C library functions not present on some platforms (memcpy, ...) +*/ + +#endif /*LODEPNG_H inclusion guard*/ + +/* +LodePNG Documentation +--------------------- + +0. table of contents +-------------------- + + 1. about + 1.1. supported features + 1.2. features not supported + 2. C and C++ version + 3. security + 4. decoding + 5. encoding + 6. color conversions + 6.1. PNG color types + 6.2. color conversions + 6.3. padding bits + 6.4. A note about 16-bits per channel and endianness + 7. error values + 8. chunks and PNG editing + 9. compiler support + 10. examples + 10.1. decoder C++ example + 10.2. decoder C example + 11. state settings reference + 12. changes + 13. contact information + + +1. about +-------- + +PNG is a file format to store raster images losslessly with good compression, +supporting different color types and alpha channel. + +LodePNG is a PNG codec according to the Portable Network Graphics (PNG) +Specification (Second Edition) - W3C Recommendation 10 November 2003. + +The specifications used are: + +*) Portable Network Graphics (PNG) Specification (Second Edition): + http://www.w3.org/TR/2003/REC-PNG-20031110 +*) RFC 1950 ZLIB Compressed Data Format version 3.3: + http://www.gzip.org/zlib/rfc-zlib.html +*) RFC 1951 DEFLATE Compressed Data Format Specification ver 1.3: + http://www.gzip.org/zlib/rfc-deflate.html + +The most recent version of LodePNG can currently be found at +http://lodev.org/lodepng/ + +LodePNG works both in C (ISO C90) and C++, with a C++ wrapper that adds +extra functionality. + +LodePNG exists out of two files: +-lodepng.h: the header file for both C and C++ +-lodepng.c(pp): give it the name lodepng.c or lodepng.cpp (or .cc) depending on your usage + +If you want to start using LodePNG right away without reading this doc, get the +examples from the LodePNG website to see how to use it in code, or check the +smaller examples in chapter 13 here. + +LodePNG is simple but only supports the basic requirements. To achieve +simplicity, the following design choices were made: There are no dependencies +on any external library. There are functions to decode and encode a PNG with +a single function call, and extended versions of these functions taking a +LodePNGState struct allowing to specify or get more information. By default +the colors of the raw image are always RGB or RGBA, no matter what color type +the PNG file uses. To read and write files, there are simple functions to +convert the files to/from buffers in memory. + +This all makes LodePNG suitable for loading textures in games, demos and small +programs, ... It's less suitable for full fledged image editors, loading PNGs +over network (it requires all the image data to be available before decoding can +begin), life-critical systems, ... + +1.1. supported features +----------------------- + +The following features are supported by the decoder: + +*) decoding of PNGs with any color type, bit depth and interlace mode, to a 24- or 32-bit color raw image, + or the same color type as the PNG +*) encoding of PNGs, from any raw image to 24- or 32-bit color, or the same color type as the raw image +*) Adam7 interlace and deinterlace for any color type +*) loading the image from harddisk or decoding it from a buffer from other sources than harddisk +*) support for alpha channels, including RGBA color model, translucent palettes and color keying +*) zlib decompression (inflate) +*) zlib compression (deflate) +*) CRC32 and ADLER32 checksums +*) colorimetric color profile conversions: currently experimentally available in lodepng_util.cpp only, + plus alternatively ability to pass on chroma/gamma/ICC profile information to other color management system. +*) handling of unknown chunks, allowing making a PNG editor that stores custom and unknown chunks. +*) the following chunks are supported by both encoder and decoder: + IHDR: header information + PLTE: color palette + IDAT: pixel data + IEND: the final chunk + tRNS: transparency for palettized images + tEXt: textual information + zTXt: compressed textual information + iTXt: international textual information + bKGD: suggested background color + pHYs: physical dimensions + tIME: modification time + cHRM: RGB chromaticities + gAMA: RGB gamma correction + iCCP: ICC color profile + sRGB: rendering intent + +1.2. features not supported +--------------------------- + +The following features are _not_ supported: + +*) some features needed to make a conformant PNG-Editor might be still missing. +*) partial loading/stream processing. All data must be available and is processed in one call. +*) The following public chunks are not (yet) supported but treated as unknown chunks by LodePNG: + sBIT + hIST + sPLT + + +2. C and C++ version +-------------------- + +The C version uses buffers allocated with alloc that you need to free() +yourself. You need to use init and cleanup functions for each struct whenever +using a struct from the C version to avoid exploits and memory leaks. + +The C++ version has extra functions with std::vectors in the interface and the +lodepng::State class which is a LodePNGState with constructor and destructor. + +These files work without modification for both C and C++ compilers because all +the additional C++ code is in "#ifdef __cplusplus" blocks that make C-compilers +ignore it, and the C code is made to compile both with strict ISO C90 and C++. + +To use the C++ version, you need to rename the source file to lodepng.cpp +(instead of lodepng.c), and compile it with a C++ compiler. + +To use the C version, you need to rename the source file to lodepng.c (instead +of lodepng.cpp), and compile it with a C compiler. + + +3. Security +----------- + +Even if carefully designed, it's always possible that LodePNG contains possible +exploits. If you discover one, please let me know, and it will be fixed. + +When using LodePNG, care has to be taken with the C version of LodePNG, as well +as the C-style structs when working with C++. The following conventions are used +for all C-style structs: + +-if a struct has a corresponding init function, always call the init function when making a new one +-if a struct has a corresponding cleanup function, call it before the struct disappears to avoid memory leaks +-if a struct has a corresponding copy function, use the copy function instead of "=". + The destination must also be inited already. + + +4. Decoding +----------- + +Decoding converts a PNG compressed image to a raw pixel buffer. + +Most documentation on using the decoder is at its declarations in the header +above. For C, simple decoding can be done with functions such as +lodepng_decode32, and more advanced decoding can be done with the struct +LodePNGState and lodepng_decode. For C++, all decoding can be done with the +various lodepng::decode functions, and lodepng::State can be used for advanced +features. + +When using the LodePNGState, it uses the following fields for decoding: +*) LodePNGInfo info_png: it stores extra information about the PNG (the input) in here +*) LodePNGColorMode info_raw: here you can say what color mode of the raw image (the output) you want to get +*) LodePNGDecoderSettings decoder: you can specify a few extra settings for the decoder to use + +LodePNGInfo info_png +-------------------- + +After decoding, this contains extra information of the PNG image, except the actual +pixels, width and height because these are already gotten directly from the decoder +functions. + +It contains for example the original color type of the PNG image, text comments, +suggested background color, etc... More details about the LodePNGInfo struct are +at its declaration documentation. + +LodePNGColorMode info_raw +------------------------- + +When decoding, here you can specify which color type you want +the resulting raw image to be. If this is different from the colortype of the +PNG, then the decoder will automatically convert the result. This conversion +always works, except if you want it to convert a color PNG to grayscale or to +a palette with missing colors. + +By default, 32-bit color is used for the result. + +LodePNGDecoderSettings decoder +------------------------------ + +The settings can be used to ignore the errors created by invalid CRC and Adler32 +chunks, and to disable the decoding of tEXt chunks. + +There's also a setting color_convert, true by default. If false, no conversion +is done, the resulting data will be as it was in the PNG (after decompression) +and you'll have to puzzle the colors of the pixels together yourself using the +color type information in the LodePNGInfo. + + +5. Encoding +----------- + +Encoding converts a raw pixel buffer to a PNG compressed image. + +Most documentation on using the encoder is at its declarations in the header +above. For C, simple encoding can be done with functions such as +lodepng_encode32, and more advanced decoding can be done with the struct +LodePNGState and lodepng_encode. For C++, all encoding can be done with the +various lodepng::encode functions, and lodepng::State can be used for advanced +features. + +Like the decoder, the encoder can also give errors. However it gives less errors +since the encoder input is trusted, the decoder input (a PNG image that could +be forged by anyone) is not trusted. + +When using the LodePNGState, it uses the following fields for encoding: +*) LodePNGInfo info_png: here you specify how you want the PNG (the output) to be. +*) LodePNGColorMode info_raw: here you say what color type of the raw image (the input) has +*) LodePNGEncoderSettings encoder: you can specify a few settings for the encoder to use + +LodePNGInfo info_png +-------------------- + +When encoding, you use this the opposite way as when decoding: for encoding, +you fill in the values you want the PNG to have before encoding. By default it's +not needed to specify a color type for the PNG since it's automatically chosen, +but it's possible to choose it yourself given the right settings. + +The encoder will not always exactly match the LodePNGInfo struct you give, +it tries as close as possible. Some things are ignored by the encoder. The +encoder uses, for example, the following settings from it when applicable: +colortype and bitdepth, text chunks, time chunk, the color key, the palette, the +background color, the interlace method, unknown chunks, ... + +When encoding to a PNG with colortype 3, the encoder will generate a PLTE chunk. +If the palette contains any colors for which the alpha channel is not 255 (so +there are translucent colors in the palette), it'll add a tRNS chunk. + +LodePNGColorMode info_raw +------------------------- + +You specify the color type of the raw image that you give to the input here, +including a possible transparent color key and palette you happen to be using in +your raw image data. + +By default, 32-bit color is assumed, meaning your input has to be in RGBA +format with 4 bytes (unsigned chars) per pixel. + +LodePNGEncoderSettings encoder +------------------------------ + +The following settings are supported (some are in sub-structs): +*) auto_convert: when this option is enabled, the encoder will +automatically choose the smallest possible color mode (including color key) that +can encode the colors of all pixels without information loss. +*) btype: the block type for LZ77. 0 = uncompressed, 1 = fixed huffman tree, + 2 = dynamic huffman tree (best compression). Should be 2 for proper + compression. +*) use_lz77: whether or not to use LZ77 for compressed block types. Should be + true for proper compression. +*) windowsize: the window size used by the LZ77 encoder (1 - 32768). Has value + 2048 by default, but can be set to 32768 for better, but slow, compression. +*) force_palette: if colortype is 2 or 6, you can make the encoder write a PLTE + chunk if force_palette is true. This can used as suggested palette to convert + to by viewers that don't support more than 256 colors (if those still exist) +*) add_id: add text chunk "Encoder: LodePNG " to the image. +*) text_compression: default 1. If 1, it'll store texts as zTXt instead of tEXt chunks. + zTXt chunks use zlib compression on the text. This gives a smaller result on + large texts but a larger result on small texts (such as a single program name). + It's all tEXt or all zTXt though, there's no separate setting per text yet. + + +6. color conversions +-------------------- + +An important thing to note about LodePNG, is that the color type of the PNG, and +the color type of the raw image, are completely independent. By default, when +you decode a PNG, you get the result as a raw image in the color type you want, +no matter whether the PNG was encoded with a palette, grayscale or RGBA color. +And if you encode an image, by default LodePNG will automatically choose the PNG +color type that gives good compression based on the values of colors and amount +of colors in the image. It can be configured to let you control it instead as +well, though. + +To be able to do this, LodePNG does conversions from one color mode to another. +It can convert from almost any color type to any other color type, except the +following conversions: RGB to grayscale is not supported, and converting to a +palette when the palette doesn't have a required color is not supported. This is +not supported on purpose: this is information loss which requires a color +reduction algorithm that is beyond the scope of a PNG encoder (yes, RGB to gray +is easy, but there are multiple ways if you want to give some channels more +weight). + +By default, when decoding, you get the raw image in 32-bit RGBA or 24-bit RGB +color, no matter what color type the PNG has. And by default when encoding, +LodePNG automatically picks the best color model for the output PNG, and expects +the input image to be 32-bit RGBA or 24-bit RGB. So, unless you want to control +the color format of the images yourself, you can skip this chapter. + +6.1. PNG color types +-------------------- + +A PNG image can have many color types, ranging from 1-bit color to 64-bit color, +as well as palettized color modes. After the zlib decompression and unfiltering +in the PNG image is done, the raw pixel data will have that color type and thus +a certain amount of bits per pixel. If you want the output raw image after +decoding to have another color type, a conversion is done by LodePNG. + +The PNG specification gives the following color types: + +0: grayscale, bit depths 1, 2, 4, 8, 16 +2: RGB, bit depths 8 and 16 +3: palette, bit depths 1, 2, 4 and 8 +4: grayscale with alpha, bit depths 8 and 16 +6: RGBA, bit depths 8 and 16 + +Bit depth is the amount of bits per pixel per color channel. So the total amount +of bits per pixel is: amount of channels * bitdepth. + +6.2. color conversions +---------------------- + +As explained in the sections about the encoder and decoder, you can specify +color types and bit depths in info_png and info_raw to change the default +behaviour. + +If, when decoding, you want the raw image to be something else than the default, +you need to set the color type and bit depth you want in the LodePNGColorMode, +or the parameters colortype and bitdepth of the simple decoding function. + +If, when encoding, you use another color type than the default in the raw input +image, you need to specify its color type and bit depth in the LodePNGColorMode +of the raw image, or use the parameters colortype and bitdepth of the simple +encoding function. + +If, when encoding, you don't want LodePNG to choose the output PNG color type +but control it yourself, you need to set auto_convert in the encoder settings +to false, and specify the color type you want in the LodePNGInfo of the +encoder (including palette: it can generate a palette if auto_convert is true, +otherwise not). + +If the input and output color type differ (whether user chosen or auto chosen), +LodePNG will do a color conversion, which follows the rules below, and may +sometimes result in an error. + +To avoid some confusion: +-the decoder converts from PNG to raw image +-the encoder converts from raw image to PNG +-the colortype and bitdepth in LodePNGColorMode info_raw, are those of the raw image +-the colortype and bitdepth in the color field of LodePNGInfo info_png, are those of the PNG +-when encoding, the color type in LodePNGInfo is ignored if auto_convert + is enabled, it is automatically generated instead +-when decoding, the color type in LodePNGInfo is set by the decoder to that of the original + PNG image, but it can be ignored since the raw image has the color type you requested instead +-if the color type of the LodePNGColorMode and PNG image aren't the same, a conversion + between the color types is done if the color types are supported. If it is not + supported, an error is returned. If the types are the same, no conversion is done. +-even though some conversions aren't supported, LodePNG supports loading PNGs from any + colortype and saving PNGs to any colortype, sometimes it just requires preparing + the raw image correctly before encoding. +-both encoder and decoder use the same color converter. + +The function lodepng_convert does the color conversion. It is available in the +interface but normally isn't needed since the encoder and decoder already call +it. + +Non supported color conversions: +-color to grayscale when non-gray pixels are present: no error is thrown, but +the result will look ugly because only the red channel is taken (it assumes all +three channels are the same in this case so ignores green and blue). The reason +no error is given is to allow converting from three-channel grayscale images to +one-channel even if there are numerical imprecisions. +-anything to palette when the palette does not have an exact match for a from-color +in it: in this case an error is thrown + +Supported color conversions: +-anything to 8-bit RGB, 8-bit RGBA, 16-bit RGB, 16-bit RGBA +-any gray or gray+alpha, to gray or gray+alpha +-anything to a palette, as long as the palette has the requested colors in it +-removing alpha channel +-higher to smaller bitdepth, and vice versa + +If you want no color conversion to be done (e.g. for speed or control): +-In the encoder, you can make it save a PNG with any color type by giving the +raw color mode and LodePNGInfo the same color mode, and setting auto_convert to +false. +-In the decoder, you can make it store the pixel data in the same color type +as the PNG has, by setting the color_convert setting to false. Settings in +info_raw are then ignored. + +6.3. padding bits +----------------- + +In the PNG file format, if a less than 8-bit per pixel color type is used and the scanlines +have a bit amount that isn't a multiple of 8, then padding bits are used so that each +scanline starts at a fresh byte. But that is NOT true for the LodePNG raw input and output. +The raw input image you give to the encoder, and the raw output image you get from the decoder +will NOT have these padding bits, e.g. in the case of a 1-bit image with a width +of 7 pixels, the first pixel of the second scanline will the 8th bit of the first byte, +not the first bit of a new byte. + +6.4. A note about 16-bits per channel and endianness +---------------------------------------------------- + +LodePNG uses unsigned char arrays for 16-bit per channel colors too, just like +for any other color format. The 16-bit values are stored in big endian (most +significant byte first) in these arrays. This is the opposite order of the +little endian used by x86 CPU's. + +LodePNG always uses big endian because the PNG file format does so internally. +Conversions to other formats than PNG uses internally are not supported by +LodePNG on purpose, there are myriads of formats, including endianness of 16-bit +colors, the order in which you store R, G, B and A, and so on. Supporting and +converting to/from all that is outside the scope of LodePNG. + +This may mean that, depending on your use case, you may want to convert the big +endian output of LodePNG to little endian with a for loop. This is certainly not +always needed, many applications and libraries support big endian 16-bit colors +anyway, but it means you cannot simply cast the unsigned char* buffer to an +unsigned short* buffer on x86 CPUs. + + +7. error values +--------------- + +All functions in LodePNG that return an error code, return 0 if everything went +OK, or a non-zero code if there was an error. + +The meaning of the LodePNG error values can be retrieved with the function +lodepng_error_text: given the numerical error code, it returns a description +of the error in English as a string. + +Check the implementation of lodepng_error_text to see the meaning of each code. + +It is not recommended to use the numerical values to programmatically make +different decisions based on error types as the numbers are not guaranteed to +stay backwards compatible. They are for human consumption only. Programmatically +only 0 or non-0 matter. + + +8. chunks and PNG editing +------------------------- + +If you want to add extra chunks to a PNG you encode, or use LodePNG for a PNG +editor that should follow the rules about handling of unknown chunks, or if your +program is able to read other types of chunks than the ones handled by LodePNG, +then that's possible with the chunk functions of LodePNG. + +A PNG chunk has the following layout: + +4 bytes length +4 bytes type name +length bytes data +4 bytes CRC + +8.1. iterating through chunks +----------------------------- + +If you have a buffer containing the PNG image data, then the first chunk (the +IHDR chunk) starts at byte number 8 of that buffer. The first 8 bytes are the +signature of the PNG and are not part of a chunk. But if you start at byte 8 +then you have a chunk, and can check the following things of it. + +NOTE: none of these functions check for memory buffer boundaries. To avoid +exploits, always make sure the buffer contains all the data of the chunks. +When using lodepng_chunk_next, make sure the returned value is within the +allocated memory. + +unsigned lodepng_chunk_length(const unsigned char* chunk): + +Get the length of the chunk's data. The total chunk length is this length + 12. + +void lodepng_chunk_type(char type[5], const unsigned char* chunk): +unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type): + +Get the type of the chunk or compare if it's a certain type + +unsigned char lodepng_chunk_critical(const unsigned char* chunk): +unsigned char lodepng_chunk_private(const unsigned char* chunk): +unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk): + +Check if the chunk is critical in the PNG standard (only IHDR, PLTE, IDAT and IEND are). +Check if the chunk is private (public chunks are part of the standard, private ones not). +Check if the chunk is safe to copy. If it's not, then, when modifying data in a critical +chunk, unsafe to copy chunks of the old image may NOT be saved in the new one if your +program doesn't handle that type of unknown chunk. + +unsigned char* lodepng_chunk_data(unsigned char* chunk): +const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk): + +Get a pointer to the start of the data of the chunk. + +unsigned lodepng_chunk_check_crc(const unsigned char* chunk): +void lodepng_chunk_generate_crc(unsigned char* chunk): + +Check if the crc is correct or generate a correct one. + +unsigned char* lodepng_chunk_next(unsigned char* chunk): +const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk): + +Iterate to the next chunk. This works if you have a buffer with consecutive chunks. Note that these +functions do no boundary checking of the allocated data whatsoever, so make sure there is enough +data available in the buffer to be able to go to the next chunk. + +unsigned lodepng_chunk_append(unsigned char** out, size_t* outsize, const unsigned char* chunk): +unsigned lodepng_chunk_create(unsigned char** out, size_t* outsize, unsigned length, + const char* type, const unsigned char* data): + +These functions are used to create new chunks that are appended to the data in *out that has +length *outsize. The append function appends an existing chunk to the new data. The create +function creates a new chunk with the given parameters and appends it. Type is the 4-letter +name of the chunk. + +8.2. chunks in info_png +----------------------- + +The LodePNGInfo struct contains fields with the unknown chunk in it. It has 3 +buffers (each with size) to contain 3 types of unknown chunks: +the ones that come before the PLTE chunk, the ones that come between the PLTE +and the IDAT chunks, and the ones that come after the IDAT chunks. +It's necessary to make the distinction between these 3 cases because the PNG +standard forces to keep the ordering of unknown chunks compared to the critical +chunks, but does not force any other ordering rules. + +info_png.unknown_chunks_data[0] is the chunks before PLTE +info_png.unknown_chunks_data[1] is the chunks after PLTE, before IDAT +info_png.unknown_chunks_data[2] is the chunks after IDAT + +The chunks in these 3 buffers can be iterated through and read by using the same +way described in the previous subchapter. + +When using the decoder to decode a PNG, you can make it store all unknown chunks +if you set the option settings.remember_unknown_chunks to 1. By default, this +option is off (0). + +The encoder will always encode unknown chunks that are stored in the info_png. +If you need it to add a particular chunk that isn't known by LodePNG, you can +use lodepng_chunk_append or lodepng_chunk_create to the chunk data in +info_png.unknown_chunks_data[x]. + +Chunks that are known by LodePNG should not be added in that way. E.g. to make +LodePNG add a bKGD chunk, set background_defined to true and add the correct +parameters there instead. + + +9. compiler support +------------------- + +No libraries other than the current standard C library are needed to compile +LodePNG. For the C++ version, only the standard C++ library is needed on top. +Add the files lodepng.c(pp) and lodepng.h to your project, include +lodepng.h where needed, and your program can read/write PNG files. + +It is compatible with C90 and up, and C++03 and up. + +If performance is important, use optimization when compiling! For both the +encoder and decoder, this makes a large difference. + +Make sure that LodePNG is compiled with the same compiler of the same version +and with the same settings as the rest of the program, or the interfaces with +std::vectors and std::strings in C++ can be incompatible. + +CHAR_BITS must be 8 or higher, because LodePNG uses unsigned chars for octets. + +*) gcc and g++ + +LodePNG is developed in gcc so this compiler is natively supported. It gives no +warnings with compiler options "-Wall -Wextra -pedantic -ansi", with gcc and g++ +version 4.7.1 on Linux, 32-bit and 64-bit. + +*) Clang + +Fully supported and warning-free. + +*) Mingw + +The Mingw compiler (a port of gcc for Windows) should be fully supported by +LodePNG. + +*) Visual Studio and Visual C++ Express Edition + +LodePNG should be warning-free with warning level W4. Two warnings were disabled +with pragmas though: warning 4244 about implicit conversions, and warning 4996 +where it wants to use a non-standard function fopen_s instead of the standard C +fopen. + +Visual Studio may want "stdafx.h" files to be included in each source file and +give an error "unexpected end of file while looking for precompiled header". +This is not standard C++ and will not be added to the stock LodePNG. You can +disable it for lodepng.cpp only by right clicking it, Properties, C/C++, +Precompiled Headers, and set it to Not Using Precompiled Headers there. + +NOTE: Modern versions of VS should be fully supported, but old versions, e.g. +VS6, are not guaranteed to work. + +*) Compilers on Macintosh + +LodePNG has been reported to work both with gcc and LLVM for Macintosh, both for +C and C++. + +*) Other Compilers + +If you encounter problems on any compilers, feel free to let me know and I may +try to fix it if the compiler is modern and standards compliant. + + +10. examples +------------ + +This decoder example shows the most basic usage of LodePNG. More complex +examples can be found on the LodePNG website. + +10.1. decoder C++ example +------------------------- + +#include "lodepng.h" +#include + +int main(int argc, char *argv[]) { + const char* filename = argc > 1 ? argv[1] : "test.png"; + + //load and decode + std::vector image; + unsigned width, height; + unsigned error = lodepng::decode(image, width, height, filename); + + //if there's an error, display it + if(error) std::cout << "decoder error " << error << ": " << lodepng_error_text(error) << std::endl; + + //the pixels are now in the vector "image", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ... +} + +10.2. decoder C example +----------------------- + +#include "lodepng.h" + +int main(int argc, char *argv[]) { + unsigned error; + unsigned char* image; + size_t width, height; + const char* filename = argc > 1 ? argv[1] : "test.png"; + + error = lodepng_decode32_file(&image, &width, &height, filename); + + if(error) printf("decoder error %u: %s\n", error, lodepng_error_text(error)); + + / * use image here * / + + free(image); + return 0; +} + +11. state settings reference +---------------------------- + +A quick reference of some settings to set on the LodePNGState + +For decoding: + +state.decoder.zlibsettings.ignore_adler32: ignore ADLER32 checksums +state.decoder.zlibsettings.custom_...: use custom inflate function +state.decoder.ignore_crc: ignore CRC checksums +state.decoder.ignore_critical: ignore unknown critical chunks +state.decoder.ignore_end: ignore missing IEND chunk. May fail if this corruption causes other errors +state.decoder.color_convert: convert internal PNG color to chosen one +state.decoder.read_text_chunks: whether to read in text metadata chunks +state.decoder.remember_unknown_chunks: whether to read in unknown chunks +state.info_raw.colortype: desired color type for decoded image +state.info_raw.bitdepth: desired bit depth for decoded image +state.info_raw....: more color settings, see struct LodePNGColorMode +state.info_png....: no settings for decoder but ouput, see struct LodePNGInfo + +For encoding: + +state.encoder.zlibsettings.btype: disable compression by setting it to 0 +state.encoder.zlibsettings.use_lz77: use LZ77 in compression +state.encoder.zlibsettings.windowsize: tweak LZ77 windowsize +state.encoder.zlibsettings.minmatch: tweak min LZ77 length to match +state.encoder.zlibsettings.nicematch: tweak LZ77 match where to stop searching +state.encoder.zlibsettings.lazymatching: try one more LZ77 matching +state.encoder.zlibsettings.custom_...: use custom deflate function +state.encoder.auto_convert: choose optimal PNG color type, if 0 uses info_png +state.encoder.filter_palette_zero: PNG filter strategy for palette +state.encoder.filter_strategy: PNG filter strategy to encode with +state.encoder.force_palette: add palette even if not encoding to one +state.encoder.add_id: add LodePNG identifier and version as a text chunk +state.encoder.text_compression: use compressed text chunks for metadata +state.info_raw.colortype: color type of raw input image you provide +state.info_raw.bitdepth: bit depth of raw input image you provide +state.info_raw: more color settings, see struct LodePNGColorMode +state.info_png.color.colortype: desired color type if auto_convert is false +state.info_png.color.bitdepth: desired bit depth if auto_convert is false +state.info_png.color....: more color settings, see struct LodePNGColorMode +state.info_png....: more PNG related settings, see struct LodePNGInfo + + +12. changes +----------- + +The version number of LodePNG is the date of the change given in the format +yyyymmdd. + +Some changes aren't backwards compatible. Those are indicated with a (!) +symbol. + +Not all changes are listed here, the commit history in github lists more: +https://github.com/lvandeve/lodepng + +*) 17 okt 2020: prevent decoding too large text/icc chunks by default. +*) 06 mar 2020: simplified some of the dynamic memory allocations. +*) 12 jan 2020: (!) added 'end' argument to lodepng_chunk_next to allow correct + overflow checks. +*) 14 aug 2019: around 25% faster decoding thanks to huffman lookup tables. +*) 15 jun 2019: (!) auto_choose_color API changed (for bugfix: don't use palette + if gray ICC profile) and non-ICC LodePNGColorProfile renamed to + LodePNGColorStats. +*) 30 dec 2018: code style changes only: removed newlines before opening braces. +*) 10 sep 2018: added way to inspect metadata chunks without full decoding. +*) 19 aug 2018: (!) fixed color mode bKGD is encoded with and made it use + palette index in case of palette. +*) 10 aug 2018: (!) added support for gAMA, cHRM, sRGB and iCCP chunks. This + change is backwards compatible unless you relied on unknown_chunks for those. +*) 11 jun 2018: less restrictive check for pixel size integer overflow +*) 14 jan 2018: allow optionally ignoring a few more recoverable errors +*) 17 sep 2017: fix memory leak for some encoder input error cases +*) 27 nov 2016: grey+alpha auto color model detection bugfix +*) 18 apr 2016: Changed qsort to custom stable sort (for platforms w/o qsort). +*) 09 apr 2016: Fixed colorkey usage detection, and better file loading (within + the limits of pure C90). +*) 08 dec 2015: Made load_file function return error if file can't be opened. +*) 24 okt 2015: Bugfix with decoding to palette output. +*) 18 apr 2015: Boundary PM instead of just package-merge for faster encoding. +*) 24 aug 2014: Moved to github +*) 23 aug 2014: Reduced needless memory usage of decoder. +*) 28 jun 2014: Removed fix_png setting, always support palette OOB for + simplicity. Made ColorProfile public. +*) 09 jun 2014: Faster encoder by fixing hash bug and more zeros optimization. +*) 22 dec 2013: Power of two windowsize required for optimization. +*) 15 apr 2013: Fixed bug with LAC_ALPHA and color key. +*) 25 mar 2013: Added an optional feature to ignore some PNG errors (fix_png). +*) 11 mar 2013: (!) Bugfix with custom free. Changed from "my" to "lodepng_" + prefix for the custom allocators and made it possible with a new #define to + use custom ones in your project without needing to change lodepng's code. +*) 28 jan 2013: Bugfix with color key. +*) 27 okt 2012: Tweaks in text chunk keyword length error handling. +*) 8 okt 2012: (!) Added new filter strategy (entropy) and new auto color mode. + (no palette). Better deflate tree encoding. New compression tweak settings. + Faster color conversions while decoding. Some internal cleanups. +*) 23 sep 2012: Reduced warnings in Visual Studio a little bit. +*) 1 sep 2012: (!) Removed #define's for giving custom (de)compression functions + and made it work with function pointers instead. +*) 23 jun 2012: Added more filter strategies. Made it easier to use custom alloc + and free functions and toggle #defines from compiler flags. Small fixes. +*) 6 may 2012: (!) Made plugging in custom zlib/deflate functions more flexible. +*) 22 apr 2012: (!) Made interface more consistent, renaming a lot. Removed + redundant C++ codec classes. Reduced amount of structs. Everything changed, + but it is cleaner now imho and functionality remains the same. Also fixed + several bugs and shrunk the implementation code. Made new samples. +*) 6 nov 2011: (!) By default, the encoder now automatically chooses the best + PNG color model and bit depth, based on the amount and type of colors of the + raw image. For this, autoLeaveOutAlphaChannel replaced by auto_choose_color. +*) 9 okt 2011: simpler hash chain implementation for the encoder. +*) 8 sep 2011: lz77 encoder lazy matching instead of greedy matching. +*) 23 aug 2011: tweaked the zlib compression parameters after benchmarking. + A bug with the PNG filtertype heuristic was fixed, so that it chooses much + better ones (it's quite significant). A setting to do an experimental, slow, + brute force search for PNG filter types is added. +*) 17 aug 2011: (!) changed some C zlib related function names. +*) 16 aug 2011: made the code less wide (max 120 characters per line). +*) 17 apr 2011: code cleanup. Bugfixes. Convert low to 16-bit per sample colors. +*) 21 feb 2011: fixed compiling for C90. Fixed compiling with sections disabled. +*) 11 dec 2010: encoding is made faster, based on suggestion by Peter Eastman + to optimize long sequences of zeros. +*) 13 nov 2010: added LodePNG_InfoColor_hasPaletteAlpha and + LodePNG_InfoColor_canHaveAlpha functions for convenience. +*) 7 nov 2010: added LodePNG_error_text function to get error code description. +*) 30 okt 2010: made decoding slightly faster +*) 26 okt 2010: (!) changed some C function and struct names (more consistent). + Reorganized the documentation and the declaration order in the header. +*) 08 aug 2010: only changed some comments and external samples. +*) 05 jul 2010: fixed bug thanks to warnings in the new gcc version. +*) 14 mar 2010: fixed bug where too much memory was allocated for char buffers. +*) 02 sep 2008: fixed bug where it could create empty tree that linux apps could + read by ignoring the problem but windows apps couldn't. +*) 06 jun 2008: added more error checks for out of memory cases. +*) 26 apr 2008: added a few more checks here and there to ensure more safety. +*) 06 mar 2008: crash with encoding of strings fixed +*) 02 feb 2008: support for international text chunks added (iTXt) +*) 23 jan 2008: small cleanups, and #defines to divide code in sections +*) 20 jan 2008: support for unknown chunks allowing using LodePNG for an editor. +*) 18 jan 2008: support for tIME and pHYs chunks added to encoder and decoder. +*) 17 jan 2008: ability to encode and decode compressed zTXt chunks added + Also various fixes, such as in the deflate and the padding bits code. +*) 13 jan 2008: Added ability to encode Adam7-interlaced images. Improved + filtering code of encoder. +*) 07 jan 2008: (!) changed LodePNG to use ISO C90 instead of C++. A + C++ wrapper around this provides an interface almost identical to before. + Having LodePNG be pure ISO C90 makes it more portable. The C and C++ code + are together in these files but it works both for C and C++ compilers. +*) 29 dec 2007: (!) changed most integer types to unsigned int + other tweaks +*) 30 aug 2007: bug fixed which makes this Borland C++ compatible +*) 09 aug 2007: some VS2005 warnings removed again +*) 21 jul 2007: deflate code placed in new namespace separate from zlib code +*) 08 jun 2007: fixed bug with 2- and 4-bit color, and small interlaced images +*) 04 jun 2007: improved support for Visual Studio 2005: crash with accessing + invalid std::vector element [0] fixed, and level 3 and 4 warnings removed +*) 02 jun 2007: made the encoder add a tag with version by default +*) 27 may 2007: zlib and png code separated (but still in the same file), + simple encoder/decoder functions added for more simple usage cases +*) 19 may 2007: minor fixes, some code cleaning, new error added (error 69), + moved some examples from here to lodepng_examples.cpp +*) 12 may 2007: palette decoding bug fixed +*) 24 apr 2007: changed the license from BSD to the zlib license +*) 11 mar 2007: very simple addition: ability to encode bKGD chunks. +*) 04 mar 2007: (!) tEXt chunk related fixes, and support for encoding + palettized PNG images. Plus little interface change with palette and texts. +*) 03 mar 2007: Made it encode dynamic Huffman shorter with repeat codes. + Fixed a bug where the end code of a block had length 0 in the Huffman tree. +*) 26 feb 2007: Huffman compression with dynamic trees (BTYPE 2) now implemented + and supported by the encoder, resulting in smaller PNGs at the output. +*) 27 jan 2007: Made the Adler-32 test faster so that a timewaste is gone. +*) 24 jan 2007: gave encoder an error interface. Added color conversion from any + greyscale type to 8-bit greyscale with or without alpha. +*) 21 jan 2007: (!) Totally changed the interface. It allows more color types + to convert to and is more uniform. See the manual for how it works now. +*) 07 jan 2007: Some cleanup & fixes, and a few changes over the last days: + encode/decode custom tEXt chunks, separate classes for zlib & deflate, and + at last made the decoder give errors for incorrect Adler32 or Crc. +*) 01 jan 2007: Fixed bug with encoding PNGs with less than 8 bits per channel. +*) 29 dec 2006: Added support for encoding images without alpha channel, and + cleaned out code as well as making certain parts faster. +*) 28 dec 2006: Added "Settings" to the encoder. +*) 26 dec 2006: The encoder now does LZ77 encoding and produces much smaller files now. + Removed some code duplication in the decoder. Fixed little bug in an example. +*) 09 dec 2006: (!) Placed output parameters of public functions as first parameter. + Fixed a bug of the decoder with 16-bit per color. +*) 15 okt 2006: Changed documentation structure +*) 09 okt 2006: Encoder class added. It encodes a valid PNG image from the + given image buffer, however for now it's not compressed. +*) 08 sep 2006: (!) Changed to interface with a Decoder class +*) 30 jul 2006: (!) LodePNG_InfoPng , width and height are now retrieved in different + way. Renamed decodePNG to decodePNGGeneric. +*) 29 jul 2006: (!) Changed the interface: image info is now returned as a + struct of type LodePNG::LodePNG_Info, instead of a vector, which was a bit clumsy. +*) 28 jul 2006: Cleaned the code and added new error checks. + Corrected terminology "deflate" into "inflate". +*) 23 jun 2006: Added SDL example in the documentation in the header, this + example allows easy debugging by displaying the PNG and its transparency. +*) 22 jun 2006: (!) Changed way to obtain error value. Added + loadFile function for convenience. Made decodePNG32 faster. +*) 21 jun 2006: (!) Changed type of info vector to unsigned. + Changed position of palette in info vector. Fixed an important bug that + happened on PNGs with an uncompressed block. +*) 16 jun 2006: Internally changed unsigned into unsigned where + needed, and performed some optimizations. +*) 07 jun 2006: (!) Renamed functions to decodePNG and placed them + in LodePNG namespace. Changed the order of the parameters. Rewrote the + documentation in the header. Renamed files to lodepng.cpp and lodepng.h +*) 22 apr 2006: Optimized and improved some code +*) 07 sep 2005: (!) Changed to std::vector interface +*) 12 aug 2005: Initial release (C++, decoder only) + + +13. contact information +----------------------- + +Feel free to contact me with suggestions, problems, comments, ... concerning +LodePNG. If you encounter a PNG image that doesn't work properly with this +decoder, feel free to send it and I'll use it to find and fix the problem. + +My email address is (puzzle the account and domain together with an @ symbol): +Domain: gmail dot com. +Account: lode dot vandevenne. + + +Copyright (c) 2005-2020 Lode Vandevenne +*/ diff --git a/lib/libesp32_lvgl/lv_lib_png/src/lv_png.c b/lib/libesp32_lvgl/lv_lib_png/src/lv_png.c new file mode 100644 index 000000000..280dbbcd8 --- /dev/null +++ b/lib/libesp32_lvgl/lv_lib_png/src/lv_png.c @@ -0,0 +1,267 @@ +/** + * @file lv_png.c + * + */ + +/********************* + * INCLUDES + *********************/ +#ifdef LV_LVGL_H_INCLUDE_SIMPLE +#include +#else +#include +#endif + +#include "lv_png.h" +#include "lodepng.h" +#include +#if LV_MEM_CUSTOM != 0 + #include LV_MEM_CUSTOM_INCLUDE +#endif +#include + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * STATIC PROTOTYPES + **********************/ +static lv_res_t decoder_info(struct _lv_img_decoder * decoder, const void * src, lv_img_header_t * header); +static lv_res_t decoder_open(lv_img_decoder_t * dec, lv_img_decoder_dsc_t * dsc); +static void decoder_close(lv_img_decoder_t * dec, lv_img_decoder_dsc_t * dsc); +static void convert_color_depth(uint8_t * img, uint32_t px_cnt); + +/********************** + * STATIC VARIABLES + **********************/ + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +/** + * Register the PNG decoder functions in LittlevGL + */ +void lv_png_init(void) +{ + lv_img_decoder_t * dec = lv_img_decoder_create(); + lv_img_decoder_set_info_cb(dec, decoder_info); + lv_img_decoder_set_open_cb(dec, decoder_open); + lv_img_decoder_set_close_cb(dec, decoder_close); +} + +/********************** + * STATIC FUNCTIONS + **********************/ + +/** + * Get info about a PNG image + * @param src can be file name or pointer to a C array + * @param header store the info here + * @return LV_RES_OK: no error; LV_RES_INV: can't get the info + */ +static lv_res_t decoder_info(struct _lv_img_decoder * decoder, const void * src, lv_img_header_t * header) +{ + (void) decoder; /*Unused*/ + lv_img_src_t src_type = lv_img_src_get_type(src); /*Get the source type*/ + + /*If it's a PNG file...*/ + if(src_type == LV_IMG_SRC_FILE) { + const char * fn = src; + if(!strcmp(&fn[strlen(fn) - 3], "png")) { /*Check the extension*/ + + /* Read the width and height from the file. They have a constant location: + * [16..23]: width + * [24..27]: height + */ + uint32_t size[2]; +#if LV_PNG_USE_LV_FILESYSTEM + lv_fs_file_t f; + lv_fs_res_t res = lv_fs_open(&f, fn, LV_FS_MODE_RD); + if(res != LV_FS_RES_OK) return -1; + lv_fs_seek(&f, 16); + uint32_t rn; + lv_fs_read(&f, &size, 8, &rn); + if(rn != 8) return LV_RES_INV; + lv_fs_close(&f); +#else + FILE* file; + file = fopen(fn, "rb" ); + if(!file) return LV_RES_INV; + fseek(file, 16, SEEK_SET); + size_t rn = fread(size, 1 , 8, file); + fclose(file); + if(rn != 8) return LV_RES_INV; +#endif + /*Save the data in the header*/ + header->always_zero = 0; + header->cf = LV_IMG_CF_RAW_ALPHA; + /*The width and height are stored in Big endian format so convert them to little endian*/ + header->w = (lv_coord_t) ((size[0] & 0xff000000) >> 24) + ((size[0] & 0x00ff0000) >> 8); + header->h = (lv_coord_t) ((size[1] & 0xff000000) >> 24) + ((size[1] & 0x00ff0000) >> 8); + + return LV_RES_OK; + } + } + /*If it's a PNG file in a C array...*/ + else if(src_type == LV_IMG_SRC_VARIABLE) { + const lv_img_dsc_t * img_dsc = src; + header->always_zero = 0; + header->cf = img_dsc->header.cf; /*Save the color format*/ + header->w = img_dsc->header.w; /*Save the color width*/ + header->h = img_dsc->header.h; /*Save the color height*/ + return LV_RES_OK; + } + + return LV_RES_INV; /*If didn't succeeded earlier then it's an error*/ +} + + +/** + * Open a PNG image and return the decided image + * @param src can be file name or pointer to a C array + * @param style style of the image object (unused now but certain formats might use it) + * @return pointer to the decoded image or `LV_IMG_DECODER_OPEN_FAIL` if failed + */ +static lv_res_t decoder_open(lv_img_decoder_t * decoder, lv_img_decoder_dsc_t * dsc) +{ + + (void) decoder; /*Unused*/ + uint32_t error; /*For the return values of PNG decoder functions*/ + + uint8_t * img_data = NULL; + + /*If it's a PNG file...*/ + if(dsc->src_type == LV_IMG_SRC_FILE) { + const char * fn = dsc->src; + + if(!strcmp(&fn[strlen(fn) - 3], "png")) { /*Check the extension*/ + + /*Load the PNG file into buffer. It's still compressed (not decoded)*/ + unsigned char * png_data; /*Pointer to the loaded data. Same as the original file just loaded into the RAM*/ + size_t png_data_size; /*Size of `png_data` in bytes*/ + + error = lodepng_load_file(&png_data, &png_data_size, fn); /*Load the file*/ + if(error) { +#ifdef LODEPNG_COMPILE_ERROR_TEXT + LV_LOG_ERROR("lv_png error %u: %s\n", error, lodepng_error_text(error)); +#else + LV_LOG_ERROR("lv_png error %u\n", error); +#endif + return LV_RES_INV; + } + + /*Decode the PNG image*/ + uint32_t png_width; /*Will be the width of the decoded image*/ + uint32_t png_height; /*Will be the width of the decoded image*/ + + /*Decode the loaded image in ARGB8888 */ + error = lodepng_decode32(&img_data, &png_width, &png_height, png_data, png_data_size); + LV_MEM_CUSTOM_FREE(png_data); /*Free the loaded file*/ + if(error) { +#ifdef LODEPNG_COMPILE_ERROR_TEXT + LV_LOG_ERROR("lv_png error %u: %s\n", error, lodepng_error_text(error)); +#else + LV_LOG_ERROR("lv_png error %u\n", error); +#endif + return LV_RES_INV; + } + + /*Convert the image to the system's color depth*/ + convert_color_depth(img_data, png_width * png_height); + dsc->img_data = img_data; + return LV_RES_OK; /*The image is fully decoded. Return with its pointer*/ + } + } + /*If it's a PNG file in a C array...*/ + else if(dsc->src_type == LV_IMG_SRC_VARIABLE) { + const lv_img_dsc_t * img_dsc = dsc->src; + uint32_t png_width; /*No used, just required by he decoder*/ + uint32_t png_height; /*No used, just required by he decoder*/ + + /*Decode the image in ARGB8888 */ + error = lodepng_decode32(&img_data, &png_width, &png_height, img_dsc->data, img_dsc->data_size); + + if(error) { + return LV_RES_INV; + } + + /*Convert the image to the system's color depth*/ + convert_color_depth(img_data, png_width * png_height); + + dsc->img_data = img_data; + return LV_RES_OK; /*Return with its pointer*/ + } + + return LV_RES_INV; /*If not returned earlier then it failed*/ +} + +/** + * Free the allocated resources + */ +static void decoder_close(lv_img_decoder_t * decoder, lv_img_decoder_dsc_t * dsc) +{ + (void) decoder; /*Unused*/ + if(dsc->img_data) LV_MEM_CUSTOM_FREE((uint8_t *)dsc->img_data); +} + +/** + * If the display is not in 32 bit format (ARGB888) then covert the image to the current color depth + * @param img the ARGB888 image + * @param px_cnt number of pixels in `img` + */ +static void convert_color_depth(uint8_t * img, uint32_t px_cnt) +{ +#if LV_COLOR_DEPTH == 32 + lv_color32_t * img_argb = (lv_color32_t*)img; + lv_color_t c; + lv_color_t * img_c = (lv_color_t *) img; + uint32_t i; + for(i = 0; i < px_cnt; i++) { + c = LV_COLOR_MAKE(img_argb[i].ch.red, img_argb[i].ch.green, img_argb[i].ch.blue); + img_c[i].ch.red = c.ch.blue; + img_c[i].ch.blue = c.ch.red; + } +#elif LV_COLOR_DEPTH == 16 + lv_color32_t * img_argb = (lv_color32_t*)img; + lv_color_t c; + uint32_t i; + for(i = 0; i < px_cnt; i++) { + c = LV_COLOR_MAKE(img_argb[i].ch.blue, img_argb[i].ch.green, img_argb[i].ch.red); + img[i*3 + 2] = img_argb[i].ch.alpha; + img[i*3 + 1] = c.full >> 8; + img[i*3 + 0] = c.full & 0xFF; + } +#ifdef LV_MEM_CUSTOM_REALLOC + LV_MEM_CUSTOM_REALLOC(img, px_cnt * 3); /*Shrink the buffer*/ +#else + realloc(img, px_cnt * 3); /*Shrink the buffer*/ +#endif +#elif LV_COLOR_DEPTH == 8 + lv_color32_t * img_argb = (lv_color32_t*)img; + lv_color_t c; + uint32_t i; + for(i = 0; i < px_cnt; i++) { + c = LV_COLOR_MAKE(img_argb[i].red, img_argb[i].green, img_argb[i].blue); + img[i*3 + 1] = img_argb[i].alpha; + img[i*3 + 0] = c.full + } +#if LV_MEM_CUSTOM_REALLOC + LV_MEM_CUSTOM_REALLOC(img, px_cnt * 2); /*Shrink the buffer*/ +#else + realloc(img, px_cnt * 2); /*Shrink the buffer*/ +#endif +#endif +} + + + diff --git a/lib/libesp32_lvgl/lv_lib_png/src/lv_png.h b/lib/libesp32_lvgl/lv_lib_png/src/lv_png.h new file mode 100644 index 000000000..d47f77fad --- /dev/null +++ b/lib/libesp32_lvgl/lv_lib_png/src/lv_png.h @@ -0,0 +1,43 @@ +/** + * @file lv_png.h + * + */ + +#ifndef LV_PNG_H +#define LV_PNG_H + +#ifdef __cplusplus +extern "C" { +#endif + +/********************* + * INCLUDES + *********************/ + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * GLOBAL PROTOTYPES + **********************/ + +/** + * Register the PNG decoder functions in LittlevGL + */ +void lv_png_init(void); + +/********************** + * MACROS + **********************/ + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /*LV_PNG_H*/ diff --git a/tasmota/lvgl_berry/be_lv_c_mapping.h b/tasmota/lvgl_berry/be_lv_c_mapping.h index a8beadc43..be3f73efe 100644 --- a/tasmota/lvgl_berry/be_lv_c_mapping.h +++ b/tasmota/lvgl_berry/be_lv_c_mapping.h @@ -19,7 +19,7 @@ const lvbe_call_c_t lv_img_func[] = { { "get_offset_x", (void*) &lv_img_get_offset_x, "i", "(lv_obj)" }, { "get_offset_y", (void*) &lv_img_get_offset_y, "i", "(lv_obj)" }, { "get_pivot", (void*) &lv_img_get_pivot, "", "(lv_obj)(lv_point)" }, - { "get_src", (void*) &lv_img_get_src, "i", "(lv_obj)" }, + { "get_src", (void*) &lv_img_get_src, ".", "(lv_obj)" }, { "get_zoom", (void*) &lv_img_get_zoom, "i", "(lv_obj)" }, { "set_angle", (void*) &lv_img_set_angle, "", "(lv_obj)i" }, { "set_antialias", (void*) &lv_img_set_antialias, "", "(lv_obj)b" }, @@ -27,7 +27,7 @@ const lvbe_call_c_t lv_img_func[] = { { "set_offset_x", (void*) &lv_img_set_offset_x, "", "(lv_obj)i" }, { "set_offset_y", (void*) &lv_img_set_offset_y, "", "(lv_obj)i" }, { "set_pivot", (void*) &lv_img_set_pivot, "", "(lv_obj)ii" }, - { "set_src", (void*) &lv_img_set_src, "", "(lv_obj)i" }, + { "set_src", (void*) &lv_img_set_src, "", "(lv_obj)." }, { "set_tasmota_logo", (void*) &lv_img_set_tasmota_logo, "", "(lv_obj)" }, { "set_zoom", (void*) &lv_img_set_zoom, "", "(lv_obj)i" }, }; @@ -82,7 +82,7 @@ const lvbe_call_c_t lv_style_func[] = { { "set_pad_right", (void*) &lv_style_set_pad_right, "", "(lv_style)ii" }, { "set_pad_top", (void*) &lv_style_set_pad_top, "", "(lv_style)ii" }, { "set_pattern_blend_mode", (void*) &lv_style_set_pattern_blend_mode, "", "(lv_style)ii" }, - { "set_pattern_image", (void*) &lv_style_set_pattern_image, "", "(lv_style)ii" }, + { "set_pattern_image", (void*) &lv_style_set_pattern_image, "", "(lv_style)i." }, { "set_pattern_opa", (void*) &lv_style_set_pattern_opa, "", "(lv_style)ii" }, { "set_pattern_recolor", (void*) &lv_style_set_pattern_recolor, "", "(lv_style)i(lv_color)" }, { "set_pattern_recolor_opa", (void*) &lv_style_set_pattern_recolor_opa, "", "(lv_style)ii" }, @@ -179,7 +179,7 @@ const lvbe_call_c_t lv_obj_func[] = { { "align_mid_y", (void*) &lv_obj_align_mid_y, "", "(lv_obj)(lv_obj)ii" }, { "align_x", (void*) &lv_obj_align_x, "", "(lv_obj)(lv_obj)ii" }, { "align_y", (void*) &lv_obj_align_y, "", "(lv_obj)(lv_obj)ii" }, - { "allocate_ext_attr", (void*) &lv_obj_allocate_ext_attr, "i", "(lv_obj)i" }, + { "allocate_ext_attr", (void*) &lv_obj_allocate_ext_attr, ".", "(lv_obj)i" }, { "area_is_visible", (void*) &lv_obj_area_is_visible, "b", "(lv_obj)(lv_area)" }, { "clean", (void*) &lv_obj_clean, "", "(lv_obj)" }, { "clean_style_list", (void*) &lv_obj_clean_style_list, "", "(lv_obj)i" }, @@ -206,7 +206,7 @@ const lvbe_call_c_t lv_obj_func[] = { { "get_drag_parent", (void*) &lv_obj_get_drag_parent, "b", "(lv_obj)" }, { "get_drag_throw", (void*) &lv_obj_get_drag_throw, "b", "(lv_obj)" }, { "get_draw_rect_ext_pad_size", (void*) &lv_obj_get_draw_rect_ext_pad_size, "i", "(lv_obj)i" }, - { "get_ext_attr", (void*) &lv_obj_get_ext_attr, "i", "(lv_obj)" }, + { "get_ext_attr", (void*) &lv_obj_get_ext_attr, ".", "(lv_obj)" }, { "get_ext_click_pad_bottom", (void*) &lv_obj_get_ext_click_pad_bottom, "i", "(lv_obj)" }, { "get_ext_click_pad_left", (void*) &lv_obj_get_ext_click_pad_left, "i", "(lv_obj)" }, { "get_ext_click_pad_right", (void*) &lv_obj_get_ext_click_pad_right, "i", "(lv_obj)" }, @@ -215,7 +215,7 @@ const lvbe_call_c_t lv_obj_func[] = { { "get_focus_parent", (void*) &lv_obj_get_focus_parent, "b", "(lv_obj)" }, { "get_focused_obj", (void*) &lv_obj_get_focused_obj, "lv_obj", "(lv_obj)" }, { "get_gesture_parent", (void*) &lv_obj_get_gesture_parent, "b", "(lv_obj)" }, - { "get_group", (void*) &lv_obj_get_group, "i", "(lv_obj)" }, + { "get_group", (void*) &lv_obj_get_group, ".", "(lv_obj)" }, { "get_height", (void*) &lv_obj_get_height, "i", "(lv_obj)" }, { "get_height_fit", (void*) &lv_obj_get_height_fit, "i", "(lv_obj)" }, { "get_height_grid", (void*) &lv_obj_get_height_grid, "i", "(lv_obj)ii" }, @@ -269,7 +269,7 @@ const lvbe_call_c_t lv_obj_func[] = { { "get_style_pad_right", (void*) &lv_obj_get_style_pad_right, "i", "(lv_obj)i" }, { "get_style_pad_top", (void*) &lv_obj_get_style_pad_top, "i", "(lv_obj)i" }, { "get_style_pattern_blend_mode", (void*) &lv_obj_get_style_pattern_blend_mode, "i", "(lv_obj)i" }, - { "get_style_pattern_image", (void*) &lv_obj_get_style_pattern_image, "i", "(lv_obj)i" }, + { "get_style_pattern_image", (void*) &lv_obj_get_style_pattern_image, ".", "(lv_obj)i" }, { "get_style_pattern_opa", (void*) &lv_obj_get_style_pattern_opa, "i", "(lv_obj)i" }, { "get_style_pattern_recolor", (void*) &lv_obj_get_style_pattern_recolor, "lv_color", "(lv_obj)i" }, { "get_style_pattern_recolor_opa", (void*) &lv_obj_get_style_pattern_recolor_opa, "i", "(lv_obj)i" }, @@ -411,7 +411,7 @@ const lvbe_call_c_t lv_obj_func[] = { { "set_style_local_pad_right", (void*) &lv_obj_set_style_local_pad_right, "", "(lv_obj)iii" }, { "set_style_local_pad_top", (void*) &lv_obj_set_style_local_pad_top, "", "(lv_obj)iii" }, { "set_style_local_pattern_blend_mode", (void*) &lv_obj_set_style_local_pattern_blend_mode, "", "(lv_obj)iii" }, - { "set_style_local_pattern_image", (void*) &lv_obj_set_style_local_pattern_image, "", "(lv_obj)iii" }, + { "set_style_local_pattern_image", (void*) &lv_obj_set_style_local_pattern_image, "", "(lv_obj)ii." }, { "set_style_local_pattern_opa", (void*) &lv_obj_set_style_local_pattern_opa, "", "(lv_obj)iii" }, { "set_style_local_pattern_recolor", (void*) &lv_obj_set_style_local_pattern_recolor, "", "(lv_obj)ii(lv_color)" }, { "set_style_local_pattern_recolor_opa", (void*) &lv_obj_set_style_local_pattern_recolor_opa, "", "(lv_obj)iii" }, @@ -574,17 +574,17 @@ const lvbe_call_c_t lv_calendar_func[] = { const lvbe_call_c_t lv_canvas_func[] = { { "blur_hor", (void*) &lv_canvas_blur_hor, "", "(lv_obj)(lv_area)i" }, { "blur_ver", (void*) &lv_canvas_blur_ver, "", "(lv_obj)(lv_area)i" }, - { "copy_buf", (void*) &lv_canvas_copy_buf, "", "(lv_obj)iiiii" }, + { "copy_buf", (void*) &lv_canvas_copy_buf, "", "(lv_obj).iiii" }, { "create", (void*) &lv_canvas_create, "+lv_canvas", "(lv_obj)(lv_obj)" }, { "draw_arc", (void*) &lv_canvas_draw_arc, "", "(lv_obj)iiiii(lv_draw_line_dsc)" }, - { "draw_img", (void*) &lv_canvas_draw_img, "", "(lv_obj)iii(lv_draw_img_dsc)" }, + { "draw_img", (void*) &lv_canvas_draw_img, "", "(lv_obj)ii.(lv_draw_img_dsc)" }, { "draw_line", (void*) &lv_canvas_draw_line, "", "(lv_obj)ii(lv_draw_line_dsc)" }, { "draw_polygon", (void*) &lv_canvas_draw_polygon, "", "(lv_obj)ii(lv_draw_rect_dsc)" }, { "draw_rect", (void*) &lv_canvas_draw_rect, "", "(lv_obj)iiii(lv_draw_rect_dsc)" }, { "draw_text", (void*) &lv_canvas_draw_text, "", "(lv_obj)iii(lv_draw_label_dsc)si" }, { "fill_bg", (void*) &lv_canvas_fill_bg, "", "(lv_obj)(lv_color)i" }, { "get_px", (void*) &lv_canvas_get_px, "lv_color", "(lv_obj)ii" }, - { "set_buffer", (void*) &lv_canvas_set_buffer, "", "(lv_obj)iii(lv_img_cf)" }, + { "set_buffer", (void*) &lv_canvas_set_buffer, "", "(lv_obj).ii(lv_img_cf)" }, { "set_palette", (void*) &lv_canvas_set_palette, "", "(lv_obj)i(lv_color)" }, { "set_px", (void*) &lv_canvas_set_px, "", "(lv_obj)ii(lv_color)" }, { "transform", (void*) &lv_canvas_transform, "", "(lv_obj)(lv_img_dsc)iiiiiib" }, @@ -714,7 +714,7 @@ const lvbe_call_c_t lv_gauge_func[] = { { "get_max_value", (void*) &lv_gauge_get_max_value, "i", "(lv_obj)" }, { "get_min_value", (void*) &lv_gauge_get_min_value, "i", "(lv_obj)" }, { "get_needle_count", (void*) &lv_gauge_get_needle_count, "i", "(lv_obj)" }, - { "get_needle_img", (void*) &lv_gauge_get_needle_img, "i", "(lv_obj)" }, + { "get_needle_img", (void*) &lv_gauge_get_needle_img, ".", "(lv_obj)" }, { "get_needle_img_pivot_x", (void*) &lv_gauge_get_needle_img_pivot_x, "i", "(lv_obj)" }, { "get_needle_img_pivot_y", (void*) &lv_gauge_get_needle_img_pivot_y, "i", "(lv_obj)" }, { "get_scale_angle", (void*) &lv_gauge_get_scale_angle, "i", "(lv_obj)" }, @@ -723,7 +723,7 @@ const lvbe_call_c_t lv_gauge_func[] = { { "set_critical_value", (void*) &lv_gauge_set_critical_value, "", "(lv_obj)i" }, { "set_formatter_cb", (void*) &lv_gauge_set_formatter_cb, "", "(lv_obj)&4" }, { "set_needle_count", (void*) &lv_gauge_set_needle_count, "", "(lv_obj)i(lv_color)" }, - { "set_needle_img", (void*) &lv_gauge_set_needle_img, "", "(lv_obj)iii" }, + { "set_needle_img", (void*) &lv_gauge_set_needle_img, "", "(lv_obj).ii" }, { "set_range", (void*) &lv_gauge_set_range, "", "(lv_obj)ii" }, { "set_scale", (void*) &lv_gauge_set_scale, "", "(lv_obj)iii" }, { "set_value", (void*) &lv_gauge_set_value, "", "(lv_obj)ii" }, @@ -732,10 +732,10 @@ const lvbe_call_c_t lv_gauge_func[] = { /* `lv_imgbtn` methods */ const lvbe_call_c_t lv_imgbtn_func[] = { { "create", (void*) &lv_imgbtn_create, "+lv_imgbtn", "(lv_obj)(lv_obj)" }, - { "get_src", (void*) &lv_imgbtn_get_src, "i", "(lv_obj)i" }, + { "get_src", (void*) &lv_imgbtn_get_src, ".", "(lv_obj)i" }, { "get_state", (void*) &lv_imgbtn_get_state, "i", "(lv_obj)" }, { "set_checkable", (void*) &lv_imgbtn_set_checkable, "", "(lv_obj)b" }, - { "set_src", (void*) &lv_imgbtn_set_src, "", "(lv_obj)ii" }, + { "set_src", (void*) &lv_imgbtn_set_src, "", "(lv_obj)i." }, { "set_state", (void*) &lv_imgbtn_set_state, "", "(lv_obj)i" }, { "toggle", (void*) &lv_imgbtn_toggle, "", "(lv_obj)" }, }; @@ -821,7 +821,7 @@ const lvbe_call_c_t lv_linemeter_func[] = { /* `lv_list` methods */ const lvbe_call_c_t lv_list_func[] = { - { "add_btn", (void*) &lv_list_add_btn, "lv_obj", "(lv_obj)is" }, + { "add_btn", (void*) &lv_list_add_btn, "lv_obj", "(lv_obj).s" }, { "clean", (void*) &lv_list_clean, "", "(lv_obj)" }, { "create", (void*) &lv_list_create, "+lv_list", "(lv_obj)(lv_obj)" }, { "down", (void*) &lv_list_down, "", "(lv_obj)" }, @@ -871,7 +871,7 @@ const lvbe_call_c_t lv_msgbox_func[] = { const lvbe_call_c_t lv_objmask_func[] = { { "create", (void*) &lv_objmask_create, "+lv_objmask", "(lv_obj)(lv_obj)" }, { "remove_mask", (void*) &lv_objmask_remove_mask, "", "(lv_obj)(lv_objmask_mask)" }, - { "update_mask", (void*) &lv_objmask_update_mask, "", "(lv_obj)(lv_objmask_mask)i" }, + { "update_mask", (void*) &lv_objmask_update_mask, "", "(lv_obj)(lv_objmask_mask)." }, }; /* `lv_page` methods */ @@ -966,7 +966,7 @@ const lvbe_call_c_t lv_spinbox_func[] = { /* `lv_spinner` methods */ const lvbe_call_c_t lv_spinner_func[] = { - { "anim_cb", (void*) &lv_spinner_anim_cb, "", "ii" }, + { "anim_cb", (void*) &lv_spinner_anim_cb, "", ".i" }, { "create", (void*) &lv_spinner_create, "+lv_spinner", "(lv_obj)(lv_obj)" }, { "get_arc_length", (void*) &lv_spinner_get_arc_length, "i", "(lv_obj)" }, { "get_dir", (void*) &lv_spinner_get_dir, "i", "(lv_obj)" }, @@ -1091,8 +1091,8 @@ const lvbe_call_c_t lv_tileview_func[] = { /* `lv_win` methods */ const lvbe_call_c_t lv_win_func[] = { - { "add_btn_left", (void*) &lv_win_add_btn_left, "lv_obj", "(lv_obj)i" }, - { "add_btn_right", (void*) &lv_win_add_btn_right, "lv_obj", "(lv_obj)i" }, + { "add_btn_left", (void*) &lv_win_add_btn_left, "lv_obj", "(lv_obj)." }, + { "add_btn_right", (void*) &lv_win_add_btn_right, "lv_obj", "(lv_obj)." }, { "clean", (void*) &lv_win_clean, "", "(lv_obj)" }, { "close_event_cb", (void*) &lv_win_close_event_cb, "", "(lv_obj)(lv_event)" }, { "create", (void*) &lv_win_create, "+lv_win", "(lv_obj)(lv_obj)" }, diff --git a/tasmota/lvgl_berry/tasmota_lv_conf.h b/tasmota/lvgl_berry/tasmota_lv_conf.h index 5dbd9ca5d..715794347 100644 --- a/tasmota/lvgl_berry/tasmota_lv_conf.h +++ b/tasmota/lvgl_berry/tasmota_lv_conf.h @@ -109,6 +109,7 @@ typedef int16_t lv_coord_t; # define LV_MEM_CUSTOM_INCLUDE /*Header for the dynamic memory function*/ # define LV_MEM_CUSTOM_ALLOC lvbe_malloc /*Wrapper to malloc*/ /* PSRAM support */ # define LV_MEM_CUSTOM_FREE lvbe_free /*Wrapper to free*/ +# define LV_MEM_CUSTOM_REALLOC lvbe_realloc /*Wrapper to realloc*/ #endif /*LV_MEM_CUSTOM*/ /* Use the standard memcpy and memset instead of LVGL's own functions. @@ -328,7 +329,7 @@ typedef void * lv_indev_drv_user_data_t; /*Type of user data in the i *===============*/ /*1: Enable the log module*/ -#define LV_USE_LOG 0 +#define LV_USE_LOG 1 #if LV_USE_LOG /* How important log should be added: * LV_LOG_LEVEL_TRACE A lot of logs to give detailed information @@ -337,7 +338,7 @@ typedef void * lv_indev_drv_user_data_t; /*Type of user data in the i * LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail * LV_LOG_LEVEL_NONE Do not log anything */ -# define LV_LOG_LEVEL LV_LOG_LEVEL_WARN +# define LV_LOG_LEVEL LV_LOG_LEVEL_ERROR /* 1: Print the log with 'printf'; * 0: user need to register a callback with `lv_log_register_print_cb`*/ diff --git a/tasmota/lvgl_berry/tasmota_lv_stdlib.h b/tasmota/lvgl_berry/tasmota_lv_stdlib.h index 67e822eeb..ceea52415 100644 --- a/tasmota/lvgl_berry/tasmota_lv_stdlib.h +++ b/tasmota/lvgl_berry/tasmota_lv_stdlib.h @@ -20,4 +20,5 @@ // replacement for used for PSRAM malloc in LVGL extern void *lvbe_malloc(size_t size); -extern void lvbe_free(void *ptr); \ No newline at end of file +extern void lvbe_free(void *ptr); +extern void *lvbe_realloc(void *ptr, size_t size); \ No newline at end of file diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index cc6d4ef49..1b8f991f7 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -931,6 +931,7 @@ //#define USE_LVGL // LVGL Engine, requires Berry, takes 440k of Flash #define USE_LVGL_PSRAM // Allocate LVGL memory in PSRAM if PSRAM is connected - this might be slightly slower but leaves main memory intact #define USE_LVGL_MAX_SLEEP 10 // max sleep in ms when LVGL is enabled, more than 10ms will make display less responsive + #define USE_LVGL_PNG_DECODER // include a PNG image decoder from file system //#define USE_LVGL_FREETYPE // Use the FreeType renderer to display fonts using native TTF files in file system (+75k flash) // WARNING this feature needs to increase the stack size to 32KB, for which there is no easy way right now #define LV_USE_FT_CACHE_MANAGER 1 // define whether glyphs are cached by FreeType library diff --git a/tasmota/xdrv_52_3_berry_lvgl.ino b/tasmota/xdrv_52_3_berry_lvgl.ino index 180c4fa62..4069136a9 100644 --- a/tasmota/xdrv_52_3_berry_lvgl.ino +++ b/tasmota/xdrv_52_3_berry_lvgl.ino @@ -426,6 +426,7 @@ extern "C" { if ((return_type == nullptr) || (strlen(return_type) == 0)) { be_return_nil(vm); } // does not return else if (strlen(return_type) == 1) { switch (return_type[0]) { + case '.': // fallback next case 'i': be_pushint(vm, ret); break; case 'b': be_pushbool(vm, ret); break; case 's': be_pushstring(vm, (const char*) ret); break; diff --git a/tasmota/xdrv_54_lvgl.ino b/tasmota/xdrv_54_lvgl.ino index 24e0321af..3b83ca199 100644 --- a/tasmota/xdrv_54_lvgl.ino +++ b/tasmota/xdrv_54_lvgl.ino @@ -32,6 +32,10 @@ #include "Adafruit_LvGL_Glue.h" +#ifdef USE_LVGL_PNG_DECODER + #include "lv_png.h" +#endif // USE_LVGL_PNG_DECODER + Adafruit_LvGL_Glue * glue; // ************************************************** @@ -338,6 +342,14 @@ extern "C" { void lvbe_free(void *ptr) { free(ptr); } + +#ifdef USE_LVGL_PNG_DECODER + // for PNG decoder, use same allocators as LVGL + void* lodepng_malloc(size_t size) { return lvbe_malloc(size); } + void* lodepng_realloc(void* ptr, size_t new_size) { return lvbe_realloc(ptr, new_size); } + void lodepng_free(void* ptr) { lvbe_free(ptr); } +#endif // USE_LVGL_PNG_DECODER + } /************************************************************ @@ -429,6 +441,9 @@ void start_lvgl(const char * uconfig) { USE_LVGL_FREETYPE_MAX_SIZES, psramFound() ? USE_LVGL_FREETYPE_MAX_BYTES_PSRAM : USE_LVGL_FREETYPE_MAX_BYTES); #endif +#ifdef USE_LVGL_PNG_DECODER + lv_png_init(); +#endif // USE_LVGL_PNG_DECODER AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_LVGL "LVGL initialized")); } diff --git a/tools/lv_berry/convert.py b/tools/lv_berry/convert.py index 424919242..1be8c73fd 100644 --- a/tools/lv_berry/convert.py +++ b/tools/lv_berry/convert.py @@ -33,8 +33,8 @@ return_types = { "int16_t": "i", "uint32_t": "i", "int32_t": "i", - "void *": "i", - "const void *": "i", + "void *": ".", + "const void *": ".", "char *": "s", "const char *": "s", "lv_obj_user_data_t": "i", From 4d86ee03202723ecd490b6a379ebf0f2df22479f Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Fri, 21 May 2021 14:43:18 +0200 Subject: [PATCH 07/11] Add data len to logging --- tasmota/support_command.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino index c26c6fd3c..d3983f403 100644 --- a/tasmota/support_command.ino +++ b/tasmota/support_command.ino @@ -240,8 +240,8 @@ void CommandHandler(char* topicBuf, char* dataBuf, uint32_t data_len) } } - AddLog_P(LOG_LEVEL_DEBUG, PSTR("CMD: " D_GROUP " %d, " D_INDEX " %d, " D_COMMAND " \"%s\", " D_DATA " \"%s\""), - grpflg, index, type, (binary_data) ? HexToString((uint8_t*)dataBuf, data_len).c_str() : dataBuf); + AddLog_P(LOG_LEVEL_DEBUG, PSTR("CMD: Grp %d, Cmnd '%s', Idx %d, Len %d, Data '%s'"), + grpflg, type, index, data_len, (binary_data) ? HexToString((uint8_t*)dataBuf, data_len).c_str() : dataBuf); if (type != nullptr) { Response_P(PSTR("{\"" D_JSON_COMMAND "\":\"" D_JSON_ERROR "\"}")); From 8650875cebd2141b3019a8563a8fd8121923b178 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Fri, 21 May 2021 16:19:40 +0200 Subject: [PATCH 08/11] Add stability to MQTT file control --- tasmota/xdrv_02_mqtt_1_file.ino | 96 +++++++++++++++--------- tasmota/xdrv_02_mqtt_9_impl.ino | 15 ++++ tools/mqtt-file/Config_demo_9.4.0.4.dmp | Bin 4096 -> 4096 bytes tools/mqtt-file/download-settings.py | 5 +- tools/mqtt-file/upload-ota.py | 14 ++++ tools/mqtt-file/upload-settings.py | 8 ++ 6 files changed, 103 insertions(+), 35 deletions(-) diff --git a/tasmota/xdrv_02_mqtt_1_file.ino b/tasmota/xdrv_02_mqtt_1_file.ino index 035dd6ef6..942576d63 100644 --- a/tasmota/xdrv_02_mqtt_1_file.ino +++ b/tasmota/xdrv_02_mqtt_1_file.ino @@ -60,7 +60,7 @@ uint32_t MqttFileUploadValidate(uint32_t rcv_id) { // Check buffer size if (UPL_SETTINGS == FMqtt.file_type) { - if (FMqtt.file_size > 4096) { + if (FMqtt.file_size > sizeof(Settings)) { return 2; // Settings supports max 4k size } } else { // Check enough flash space for intermediate upload @@ -72,23 +72,31 @@ uint32_t MqttFileUploadValidate(uint32_t rcv_id) { } // Init file_buffer - if (UPL_TASMOTA == FMqtt.file_type) { - if (Update.begin(FMqtt.file_size)) { - FMqtt.file_buffer = &FMqtt.file_id; // Dummy buffer - TasmotaGlobal.blinks = 201; - TasmotaGlobal.blinkstate = true; // Stay lit - SettingsSave(1); // Free flash for OTA update - } - } - else if (UPL_SETTINGS == FMqtt.file_type) { + if (UPL_SETTINGS == FMqtt.file_type) { if (SettingsConfigBackup()) { FMqtt.file_buffer = settings_buffer; } } else { - return 3; // Invalid file type + if (UPL_TASMOTA == FMqtt.file_type) { + if (Update.begin(FMqtt.file_size)) { + FMqtt.file_buffer = &FMqtt.file_id; // Dummy buffer +// FMqtt.file_buffer = (uint8_t*)malloc(SPI_FLASH_SEC_SIZE); +// if (FMqtt.file_buffer) { + SetLedLink(1); + SettingsSave(1); // Free flash for OTA update +// } + } else { + Update.end(true); + } + } + else { + return 3; // Invalid file type + } } + if (!FMqtt.file_buffer) { return 6; } // No buffer + FMqtt.file_id = rcv_id; FMqtt.file_pos = 0; @@ -101,13 +109,22 @@ uint32_t MqttFileUploadValidate(uint32_t rcv_id) { else if (((FMqtt.file_id > 0) && (FMqtt.file_id != rcv_id)) || (0 == XdrvMailbox.payload)) { // Error receiving data - if (UPL_TASMOTA == FMqtt.file_type) { - Update.end(true); - TasmotaGlobal.blinkstate = false; // Turn led off - } - else if (UPL_SETTINGS == FMqtt.file_type) { + if (UPL_SETTINGS == FMqtt.file_type) { SettingsBufferFree(); } + else { + if (UPL_TASMOTA == FMqtt.file_type) { + Update.end(true); + SetLedLink(0); + } +/* + if (FMqtt.file_buffer != nullptr) { + free(FMqtt.file_buffer); + FMqtt.file_buffer = nullptr; + } +*/ + } + return 4; // Upload aborted } return 0; // No error @@ -117,7 +134,7 @@ void MqttFileValidate(uint32_t error) { if (error) { FMqtt.file_buffer = nullptr; - TasmotaGlobal.masterlog_level = LOG_LEVEL_NONE; // Enable logging + MqttDisableLogging(false); if (4 == error) { ResponseCmndChar(PSTR(D_JSON_ABORTED)); @@ -131,7 +148,8 @@ void MqttFileValidate(uint32_t error) { void MqttFilePublish(void) { if (!FMqtt.file_buffer) { - TasmotaGlobal.masterlog_level = LOG_LEVEL_NONE; // Enable logging + MqttDisableLogging(false); + FMqtt.file_id = 0; FMqtt.file_size = 0; FMqtt.file_type = 0; @@ -212,12 +230,15 @@ void CmndFileUpload(void) { uint32_t read_bytes = (bytes_left < rcvd_bytes) ? bytes_left : rcvd_bytes; FMqtt.md5.add(raw_data, read_bytes); - if (UPL_TASMOTA == FMqtt.file_type) { - Update.write(raw_data, read_bytes); - } else { + if (UPL_SETTINGS == FMqtt.file_type) { uint8_t* buffer = FMqtt.file_buffer + FMqtt.file_pos; memcpy(buffer, raw_data, read_bytes); } + else { + if (UPL_TASMOTA == FMqtt.file_type) { + Update.write(raw_data, read_bytes); + } + } if (!binary_data) { free(raw_data); @@ -227,14 +248,14 @@ void CmndFileUpload(void) { } if ((FMqtt.file_pos > rcvd_bytes) && ((FMqtt.file_pos % 102400) <= rcvd_bytes)) { - TasmotaGlobal.masterlog_level = LOG_LEVEL_NONE; // Enable logging + TasmotaGlobal.masterlog_level = LOG_LEVEL_NONE; // Enable logging AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_UPLOAD "Progress %d kB"), (FMqtt.file_pos / 10240) * 10); TasmotaGlobal.masterlog_level = LOG_LEVEL_DEBUG_MORE; // Hide upload data logging } } if ((FMqtt.file_pos < FMqtt.file_size) || (FMqtt.file_md5.length() != 32)) { - TasmotaGlobal.masterlog_level = LOG_LEVEL_DEBUG_MORE; // Hide upload data logging + MqttDisableLogging(true); /* The upload chunk size is the data size of the payload. @@ -259,22 +280,29 @@ void CmndFileUpload(void) { // Process upload data en free buffer ResponseCmndDone(); - if (UPL_TASMOTA == FMqtt.file_type) { - if (!Update.end(true)) { - TasmotaGlobal.blinkstate = false; // Turn led off - ResponseCmndFailed(); - } else { - TasmotaGlobal.restart_flag = 2; // Restart to load new firmware - } - } - else if (UPL_SETTINGS == FMqtt.file_type) { + if (UPL_SETTINGS == FMqtt.file_type) { if (!SettingsConfigRestore()) { ResponseCmndFailed(); } else { TasmotaGlobal.restart_flag = 2; // Restart to load new settings } } - + else { + if (UPL_TASMOTA == FMqtt.file_type) { + if (!Update.end(true)) { + SetLedLink(0); + ResponseCmndFailed(); + } else { + TasmotaGlobal.restart_flag = 2; // Restart to load new firmware + } + } +/* + if (FMqtt.file_buffer != nullptr) { + free(FMqtt.file_buffer); + FMqtt.file_buffer = nullptr; + } +*/ + } } FMqtt.file_buffer = nullptr; } @@ -321,7 +349,7 @@ uint32_t MqttFileDownloadValidate(void) { snprintf_P(payload, sizeof(payload), S_JSON_COMMAND_SVALUE, XdrvMailbox.command, PSTR(D_JSON_STARTED)); MqttPublishPayloadPrefixTopic_P(STAT, XdrvMailbox.command, payload); // Enforce stat/wemos10/FILEUPLOAD - TasmotaGlobal.masterlog_level = LOG_LEVEL_DEBUG_MORE; // Hide upload data logging + MqttDisableLogging(true); } else if (0 == XdrvMailbox.payload) { diff --git a/tasmota/xdrv_02_mqtt_9_impl.ino b/tasmota/xdrv_02_mqtt_9_impl.ino index 3a7ed3d63..2e7364303 100644 --- a/tasmota/xdrv_02_mqtt_9_impl.ino +++ b/tasmota/xdrv_02_mqtt_9_impl.ino @@ -108,6 +108,7 @@ struct MQTT { bool connected = false; // MQTT virtual connection status bool allowed = false; // MQTT enabled and parameters valid bool mqtt_tls = false; // MQTT TLS is enabled + bool disable_logging = false; // Temporarly disable logging on some commands } Mqtt; #ifdef USE_MQTT_TLS @@ -173,6 +174,12 @@ void MakeValidMqtt(uint32_t option, char* str) { } } +void MqttDisableLogging(bool state) { + // Disable logging only on repeating MQTT messages + Mqtt.disable_logging = state; + TasmotaGlobal.masterlog_level = (Mqtt.disable_logging) ? LOG_LEVEL_DEBUG_MORE : LOG_LEVEL_NONE; +} + /*********************************************************************************************\ * MQTT driver specific code need to provide the following functions: * @@ -553,6 +560,10 @@ void MqttDataHandler(char* mqtt_topic, uint8_t* mqtt_data, unsigned int data_len char data[data_len +1]; memcpy(data, mqtt_data, sizeof(data)); + if (Mqtt.disable_logging) { + TasmotaGlobal.masterlog_level = LOG_LEVEL_DEBUG_MORE; // Hide logging + } + // MQTT pre-processing XdrvMailbox.index = strlen(topic); XdrvMailbox.data_len = data_len; @@ -563,6 +574,10 @@ void MqttDataHandler(char* mqtt_topic, uint8_t* mqtt_data, unsigned int data_len ShowSource(SRC_MQTT); CommandHandler(topic, data, data_len); + + if (Mqtt.disable_logging) { + TasmotaGlobal.masterlog_level = LOG_LEVEL_NONE; // Enable logging + } } /*********************************************************************************************/ diff --git a/tools/mqtt-file/Config_demo_9.4.0.4.dmp b/tools/mqtt-file/Config_demo_9.4.0.4.dmp index ea3de4f3f2d4b3fe0d1e9eae11a80ac50ad61906..4456b7b5e8feeaf7b71b676a5c2cbaa45013dd4b 100644 GIT binary patch delta 249 zcmVe(6c5-}fGB-SKbZm5eIu9X6MoCI07bqDj zUrk;^KtxbMGkbGzH+OeBZ*zKia|J;P36BPS$3IDJh$CNw`YAZAr&S6EqETU=dU zUtnQBVq;`wW@kSP2LvBnUT<)5a&vTbc6WGrdV73*et&?0f`f#GhKGoW&FM?n>gMZ(hKGoW-R|My{l1{H oHw{|>vyuYA0S%w7uduPQv$VCgx45~pU<8;82y)8HHTuASM9X7mA^-pY diff --git a/tools/mqtt-file/download-settings.py b/tools/mqtt-file/download-settings.py index 0f990ee5d..0b4f644fc 100644 --- a/tools/mqtt-file/download-settings.py +++ b/tools/mqtt-file/download-settings.py @@ -67,7 +67,6 @@ file_md5 = "" def on_message(client, userdata, msg): global Ack_flag global Err_flag - global Run_flag global file_name global file_id global file_type @@ -88,6 +87,10 @@ def on_message(client, userdata, msg): if root: if "FileDownload" in root: rcv_code = root["FileDownload"] + if "Aborted" in rcv_code: + print("Error: Aborted") + Err_flag = True + return if "Started" in rcv_code: return if "Error" in rcv_code: diff --git a/tools/mqtt-file/upload-ota.py b/tools/mqtt-file/upload-ota.py index 22ea721f9..0300940f5 100644 --- a/tools/mqtt-file/upload-ota.py +++ b/tools/mqtt-file/upload-ota.py @@ -76,6 +76,14 @@ def on_message(client, userdata, msg): root = json.loads(msg.payload.decode("utf-8")) if "FileUpload" in root: rcv_code = root["FileUpload"] + if "Aborted" in rcv_code: + print("Error: Aborted") + Err_flag = True + return + if "MD5 mismatch" in rcv_code: + print("Error: MD5 mismatch") + Err_flag = True + return if "Started" in rcv_code: return if "Error" in rcv_code: @@ -119,6 +127,7 @@ fo = open(myfile,"rb") fo.seek(0, 2) # os.SEEK_END file_size = fo.tell() fo.seek(0, 0) # os.SEEK_SET +file_pos = 0 client.publish(mypublish, "{\"Password\":\""+mypassword+"\",\"File\":\""+myfile+"\",\"Id\":"+str("%3d"%file_id)+",\"Type\":"+str(myfiletype)+",\"Size\":"+str(file_size)+"}") Ack_flag = True @@ -142,6 +151,11 @@ while Run_flag: client.publish(mypublish, "{\"Id\":"+str("%3d"%file_id)+",\"Data\":\""+base64_data+"\"}") else: client.publish(mypublish+"201", chunk) + file_pos = file_pos + file_chunk_size + if file_pos % 102400 < file_chunk_size: + progress = round((file_pos / 10240)) * 10 + print("Progress "+str("%d"%progress)+" kB") + Ack_flag = True else: diff --git a/tools/mqtt-file/upload-settings.py b/tools/mqtt-file/upload-settings.py index a128b8924..facfeb28f 100644 --- a/tools/mqtt-file/upload-settings.py +++ b/tools/mqtt-file/upload-settings.py @@ -75,6 +75,14 @@ def on_message(client, userdata, msg): root = json.loads(msg.payload.decode("utf-8")) if "FileUpload" in root: rcv_code = root["FileUpload"] + if "Aborted" in rcv_code: + print("Error: Aborted") + Err_flag = True + return + if "MD5 mismatch" in rcv_code: + print("Error: MD5 mismatch") + Err_flag = True + return if "Started" in rcv_code: return if "Error" in rcv_code: From 46f89b93b37c4a8d1cc3bf647165021504b3640a Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Fri, 21 May 2021 18:24:41 +0200 Subject: [PATCH 09/11] LVGL increase image cache when PSRAM is present --- tasmota/lvgl_berry/tasmota_lv_conf.h | 1 + tasmota/xdrv_54_lvgl.ino | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/tasmota/lvgl_berry/tasmota_lv_conf.h b/tasmota/lvgl_berry/tasmota_lv_conf.h index 715794347..5d31e8a2e 100644 --- a/tasmota/lvgl_berry/tasmota_lv_conf.h +++ b/tasmota/lvgl_berry/tasmota_lv_conf.h @@ -259,6 +259,7 @@ typedef void * lv_fs_drv_user_data_t; * However the opened images might consume additional RAM. * Set it to 0 to disable caching */ #define LV_IMG_CACHE_DEF_SIZE 1 +#define LV_IMG_CACHE_DEF_SIZE_PSRAM 20 // special Tasmota setting when PSRAM is used /*Declare the type of the user data of image decoder (can be e.g. `void *`, `int`, `struct`)*/ typedef void * lv_img_decoder_user_data_t; diff --git a/tasmota/xdrv_54_lvgl.ino b/tasmota/xdrv_54_lvgl.ino index 3b83ca199..d72bb4cdd 100644 --- a/tasmota/xdrv_54_lvgl.ino +++ b/tasmota/xdrv_54_lvgl.ino @@ -445,6 +445,10 @@ void start_lvgl(const char * uconfig) { lv_png_init(); #endif // USE_LVGL_PNG_DECODER + if (psramFound()) { + lv_img_cache_set_size(LV_IMG_CACHE_DEF_SIZE_PSRAM); + } + AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_LVGL "LVGL initialized")); } From cb50580e660f75255c865dfcccb641300559b587 Mon Sep 17 00:00:00 2001 From: s-hadinger <49731213+s-hadinger@users.noreply.github.com> Date: Fri, 21 May 2021 20:01:13 +0200 Subject: [PATCH 10/11] LVGL Add example Waldhoff Renaissance watch (#12150) * LVGL Add example Waldhoff Renaissance watch * Avoid refreshing day if not useful * Move date to back Co-authored-by: Stephan Hadinger --- tasmota/berry/watch_renaissance/autoexec.be | 61 ++++++++++++++++++ .../watch_renaissance/watch_ren_back_240.png | Bin 0 -> 96985 bytes .../watch_renaissance/watch_ren_hour_240.png | Bin 0 -> 3120 bytes .../watch_renaissance/watch_ren_min_240.png | Bin 0 -> 5466 bytes .../watch_renaissance/watch_ren_sec_240.png | Bin 0 -> 4176 bytes 5 files changed, 61 insertions(+) create mode 100644 tasmota/berry/watch_renaissance/autoexec.be create mode 100644 tasmota/berry/watch_renaissance/watch_ren_back_240.png create mode 100644 tasmota/berry/watch_renaissance/watch_ren_hour_240.png create mode 100644 tasmota/berry/watch_renaissance/watch_ren_min_240.png create mode 100644 tasmota/berry/watch_renaissance/watch_ren_sec_240.png diff --git a/tasmota/berry/watch_renaissance/autoexec.be b/tasmota/berry/watch_renaissance/autoexec.be new file mode 100644 index 000000000..072d5d151 --- /dev/null +++ b/tasmota/berry/watch_renaissance/autoexec.be @@ -0,0 +1,61 @@ +#- + - Example of Smart Watch on a 240x240 screen. + - + - Assets are borrowed from https://www.facer.io/watchface/HC77XaKNNM?watchModel=waldhoffrenaissance + - and simulates The Waldhoff Renaissance + - + - Copy all assets in the file-system, including this file + -# + +lv.start() + +scr = lv.scr_act() + +scr.set_style_local_bg_color(lv.OBJ_PART_MAIN, lv.STATE_DEFAULT, lv_color(lv.BLACK)) +ren_back = lv_img(scr) +ren_back.set_src("A:/watch_ren_back_240.png") +ren_back.align(0, lv.ALIGN_CENTER, 0, 0) + +ren_day = lv_label(ren_back) +ren_day.set_style_local_text_color(lv.OBJ_PART_MAIN, lv.STATE_DEFAULT, lv_color(lv.BLACK)) +ren_day.set_long_mode(lv.LABEL_LONG_CROP) +ren_day.set_align(lv.LABEL_ALIGN_CENTER) +ren_day.set_text("") +ren_day.set_width(18) +ren_day.set_height(16) +ren_day.set_pos(184,112) + +ren_hour = lv_img(ren_back) +ren_hour.set_src("A:/watch_ren_hour_240.png") +ren_hour.set_pos(110,45) + +ren_min = lv_img(ren_back) +ren_min.set_src("A:/watch_ren_min_240.png") + +ren_sec = lv_img(ren_back) +ren_sec.set_src("A:/watch_ren_sec_240.png") +ren_sec.set_pos(110,10) + +prev_day = -1 +def set_watch() + now = tasmota.rtc() + time_raw = now['local'] + now['timezone'] * 60 + time = tasmota.time_dump(time_raw) + # set second + ren_sec.set_angle(60 * time['sec']) + # set minutes + ren_min.set_angle(60 * time['min']) + # set hours + ren_hour.set_angle(300 * (time['hour'] % 12) + time['min'] * 5) + # set day + if time['day'] != prev_day + ren_day.set_text(str(time['day'])) + prev_day = time['day'] + end +end + +def run_watch() + set_watch() + tasmota.set_timer(100, run_watch) +end +run_watch() diff --git a/tasmota/berry/watch_renaissance/watch_ren_back_240.png b/tasmota/berry/watch_renaissance/watch_ren_back_240.png new file mode 100644 index 0000000000000000000000000000000000000000..167ad89e70e805baa3f65f7571f9936d5b90abc4 GIT binary patch literal 96985 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 SoMS)j0l?JA!mwK3Ird-Kh+8lK literal 0 HcmV?d00001 diff --git a/tasmota/berry/watch_renaissance/watch_ren_min_240.png b/tasmota/berry/watch_renaissance/watch_ren_min_240.png new file mode 100644 index 0000000000000000000000000000000000000000..e2e47ab154382913981f20ff00d54735ef20bcd7 GIT binary patch literal 5466 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 literal 0 HcmV?d00001 From 61502741a96287c6e7e5785e0282322033c8523e Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Fri, 21 May 2021 22:31:15 +0200 Subject: [PATCH 11/11] LVGL code size update --- tasmota/lvgl_berry/be_lv_c_mapping.h | 198 +++++++++++++++++++++++++++ tasmota/my_user_config.h | 43 +++++- tools/lv_berry/convert.py | 20 ++- 3 files changed, 252 insertions(+), 9 deletions(-) diff --git a/tasmota/lvgl_berry/be_lv_c_mapping.h b/tasmota/lvgl_berry/be_lv_c_mapping.h index be3f73efe..95eeaeb33 100644 --- a/tasmota/lvgl_berry/be_lv_c_mapping.h +++ b/tasmota/lvgl_berry/be_lv_c_mapping.h @@ -10,6 +10,7 @@ extern "C" { /* `lv_img` methods */ +#if BE_LV_WIDGET_IMG const lvbe_call_c_t lv_img_func[] = { { "create", (void*) &lv_img_create, "+lv_img", "(lv_obj)(lv_obj)" }, { "get_angle", (void*) &lv_img_get_angle, "i", "(lv_obj)" }, @@ -31,6 +32,7 @@ const lvbe_call_c_t lv_img_func[] = { { "set_tasmota_logo", (void*) &lv_img_set_tasmota_logo, "", "(lv_obj)" }, { "set_zoom", (void*) &lv_img_set_zoom, "", "(lv_obj)i" }, }; +#endif // BE_LV_WIDGET_IMG /* `lv_style` methods */ const lvbe_call_c_t lv_style_func[] = { @@ -473,6 +475,7 @@ const lvbe_call_c_t lv_obj_func[] = { }; /* `lv_arc` methods */ +#if BE_LV_WIDGET_ARC const lvbe_call_c_t lv_arc_func[] = { { "create", (void*) &lv_arc_create, "+lv_arc", "(lv_obj)(lv_obj)" }, { "get_adjustable", (void*) &lv_arc_get_adjustable, "b", "(lv_obj)" }, @@ -498,8 +501,10 @@ const lvbe_call_c_t lv_arc_func[] = { { "set_type", (void*) &lv_arc_set_type, "", "(lv_obj)i" }, { "set_value", (void*) &lv_arc_set_value, "", "(lv_obj)i" }, }; +#endif // BE_LV_WIDGET_ARC /* `lv_bar` methods */ +#if BE_LV_WIDGET_BAR const lvbe_call_c_t lv_bar_func[] = { { "create", (void*) &lv_bar_create, "+lv_bar", "(lv_obj)(lv_obj)" }, { "get_anim_time", (void*) &lv_bar_get_anim_time, "i", "(lv_obj)" }, @@ -514,8 +519,10 @@ const lvbe_call_c_t lv_bar_func[] = { { "set_type", (void*) &lv_bar_set_type, "", "(lv_obj)i" }, { "set_value", (void*) &lv_bar_set_value, "", "(lv_obj)i(lv_anim_enable)" }, }; +#endif // BE_LV_WIDGET_BAR /* `lv_btn` methods */ +#if BE_LV_WIDGET_BTN const lvbe_call_c_t lv_btn_func[] = { { "create", (void*) &lv_btn_create, "+lv_btn", "(lv_obj)(lv_obj)" }, { "get_checkable", (void*) &lv_btn_get_checkable, "b", "(lv_obj)" }, @@ -533,8 +540,10 @@ const lvbe_call_c_t lv_btn_func[] = { { "set_state", (void*) &lv_btn_set_state, "", "(lv_obj)i" }, { "toggle", (void*) &lv_btn_toggle, "", "(lv_obj)" }, }; +#endif // BE_LV_WIDGET_BTN /* `lv_btnmatrix` methods */ +#if BE_LV_WIDGET_BTNMATRIX const lvbe_call_c_t lv_btnmatrix_func[] = { { "clear_btn_ctrl", (void*) &lv_btnmatrix_clear_btn_ctrl, "", "(lv_obj)i(lv_btnmatrix_ctrl)" }, { "clear_btn_ctrl_all", (void*) &lv_btnmatrix_clear_btn_ctrl_all, "", "(lv_obj)(lv_btnmatrix_ctrl)" }, @@ -557,8 +566,10 @@ const lvbe_call_c_t lv_btnmatrix_func[] = { { "set_one_check", (void*) &lv_btnmatrix_set_one_check, "", "(lv_obj)b" }, { "set_recolor", (void*) &lv_btnmatrix_set_recolor, "", "(lv_obj)b" }, }; +#endif // BE_LV_WIDGET_BTNMATRIX /* `lv_calendar` methods */ +#if BE_LV_WIDGET_CALENDAR const lvbe_call_c_t lv_calendar_func[] = { { "create", (void*) &lv_calendar_create, "+lv_calendar", "(lv_obj)(lv_obj)" }, { "get_day_of_week", (void*) &lv_calendar_get_day_of_week, "i", "iii" }, @@ -569,8 +580,10 @@ const lvbe_call_c_t lv_calendar_func[] = { { "set_showed_date", (void*) &lv_calendar_set_showed_date, "", "(lv_obj)(lv_calendar_date)" }, { "set_today_date", (void*) &lv_calendar_set_today_date, "", "(lv_obj)(lv_calendar_date)" }, }; +#endif // BE_LV_WIDGET_CALENDAR /* `lv_canvas` methods */ +#if BE_LV_WIDGET_CANVAS const lvbe_call_c_t lv_canvas_func[] = { { "blur_hor", (void*) &lv_canvas_blur_hor, "", "(lv_obj)(lv_area)i" }, { "blur_ver", (void*) &lv_canvas_blur_ver, "", "(lv_obj)(lv_area)i" }, @@ -589,8 +602,10 @@ const lvbe_call_c_t lv_canvas_func[] = { { "set_px", (void*) &lv_canvas_set_px, "", "(lv_obj)ii(lv_color)" }, { "transform", (void*) &lv_canvas_transform, "", "(lv_obj)(lv_img_dsc)iiiiiib" }, }; +#endif // BE_LV_WIDGET_CANVAS /* `lv_chart` methods */ +#if BE_LV_WIDGET_CHART const lvbe_call_c_t lv_chart_func[] = { { "clear_series", (void*) &lv_chart_clear_series, "", "(lv_obj)(lv_chart_series)" }, { "create", (void*) &lv_chart_create, "+lv_chart", "(lv_obj)(lv_obj)" }, @@ -627,8 +642,10 @@ const lvbe_call_c_t lv_chart_func[] = { { "set_y_tick_length", (void*) &lv_chart_set_y_tick_length, "", "(lv_obj)ii" }, { "set_y_tick_texts", (void*) &lv_chart_set_y_tick_texts, "", "(lv_obj)si(lv_chart_axis_options)" }, }; +#endif // BE_LV_WIDGET_CHART /* `lv_checkbox` methods */ +#if BE_LV_WIDGET_CHECKBOX const lvbe_call_c_t lv_checkbox_func[] = { { "create", (void*) &lv_checkbox_create, "+lv_checkbox", "(lv_obj)(lv_obj)" }, { "get_state", (void*) &lv_checkbox_get_state, "i", "(lv_obj)" }, @@ -641,8 +658,10 @@ const lvbe_call_c_t lv_checkbox_func[] = { { "set_text", (void*) &lv_checkbox_set_text, "", "(lv_obj)s" }, { "set_text_static", (void*) &lv_checkbox_set_text_static, "", "(lv_obj)s" }, }; +#endif // BE_LV_WIDGET_CHECKBOX /* `lv_cont` methods */ +#if BE_LV_WIDGET_CONT const lvbe_call_c_t lv_cont_func[] = { { "create", (void*) &lv_cont_create, "+lv_cont", "(lv_obj)(lv_obj)" }, { "get_fit_bottom", (void*) &lv_cont_get_fit_bottom, "i", "(lv_obj)" }, @@ -655,8 +674,10 @@ const lvbe_call_c_t lv_cont_func[] = { { "set_fit4", (void*) &lv_cont_set_fit4, "", "(lv_obj)iiii" }, { "set_layout", (void*) &lv_cont_set_layout, "", "(lv_obj)i" }, }; +#endif // BE_LV_WIDGET_CONT /* `lv_cpicker` methods */ +#if BE_LV_WIDGET_CPICKER const lvbe_call_c_t lv_cpicker_func[] = { { "create", (void*) &lv_cpicker_create, "+lv_cpicker", "(lv_obj)(lv_obj)" }, { "get_color", (void*) &lv_cpicker_get_color, "lv_color", "(lv_obj)" }, @@ -677,8 +698,10 @@ const lvbe_call_c_t lv_cpicker_func[] = { { "set_type", (void*) &lv_cpicker_set_type, "", "(lv_obj)(lv_cpicker_type)" }, { "set_value", (void*) &lv_cpicker_set_value, "b", "(lv_obj)i" }, }; +#endif // BE_LV_WIDGET_CPICKER /* `lv_dropdown` methods */ +#if BE_LV_WIDGET_DROPDOWN const lvbe_call_c_t lv_dropdown_func[] = { { "add_option", (void*) &lv_dropdown_add_option, "", "(lv_obj)si" }, { "clear_options", (void*) &lv_dropdown_clear_options, "", "(lv_obj)" }, @@ -703,8 +726,10 @@ const lvbe_call_c_t lv_dropdown_func[] = { { "set_symbol", (void*) &lv_dropdown_set_symbol, "", "(lv_obj)s" }, { "set_text", (void*) &lv_dropdown_set_text, "", "(lv_obj)s" }, }; +#endif // BE_LV_WIDGET_DROPDOWN /* `lv_gauge` methods */ +#if BE_LV_WIDGET_GAUGE const lvbe_call_c_t lv_gauge_func[] = { { "create", (void*) &lv_gauge_create, "+lv_gauge", "(lv_obj)(lv_obj)" }, { "get_angle_offset", (void*) &lv_gauge_get_angle_offset, "i", "(lv_obj)" }, @@ -728,8 +753,10 @@ const lvbe_call_c_t lv_gauge_func[] = { { "set_scale", (void*) &lv_gauge_set_scale, "", "(lv_obj)iii" }, { "set_value", (void*) &lv_gauge_set_value, "", "(lv_obj)ii" }, }; +#endif // BE_LV_WIDGET_GAUGE /* `lv_imgbtn` methods */ +#if BE_LV_WIDGET_IMGBTN const lvbe_call_c_t lv_imgbtn_func[] = { { "create", (void*) &lv_imgbtn_create, "+lv_imgbtn", "(lv_obj)(lv_obj)" }, { "get_src", (void*) &lv_imgbtn_get_src, ".", "(lv_obj)i" }, @@ -739,8 +766,10 @@ const lvbe_call_c_t lv_imgbtn_func[] = { { "set_state", (void*) &lv_imgbtn_set_state, "", "(lv_obj)i" }, { "toggle", (void*) &lv_imgbtn_toggle, "", "(lv_obj)" }, }; +#endif // BE_LV_WIDGET_IMGBTN /* `lv_keyboard` methods */ +#if BE_LV_WIDGET_KEYBOARD const lvbe_call_c_t lv_keyboard_func[] = { { "create", (void*) &lv_keyboard_create, "+lv_keyboard", "(lv_obj)(lv_obj)" }, { "def_event_cb", (void*) &lv_keyboard_def_event_cb, "", "(lv_obj)(lv_event)" }, @@ -753,8 +782,10 @@ const lvbe_call_c_t lv_keyboard_func[] = { { "set_mode", (void*) &lv_keyboard_set_mode, "", "(lv_obj)i" }, { "set_textarea", (void*) &lv_keyboard_set_textarea, "", "(lv_obj)(lv_obj)" }, }; +#endif // BE_LV_WIDGET_KEYBOARD /* `lv_label` methods */ +#if BE_LV_WIDGET_LABEL const lvbe_call_c_t lv_label_func[] = { { "create", (void*) &lv_label_create, "+lv_label", "(lv_obj)(lv_obj)" }, { "cut_text", (void*) &lv_label_cut_text, "", "(lv_obj)ii" }, @@ -780,8 +811,10 @@ const lvbe_call_c_t lv_label_func[] = { { "set_text_sel_start", (void*) &lv_label_set_text_sel_start, "", "(lv_obj)i" }, { "set_text_static", (void*) &lv_label_set_text_static, "", "(lv_obj)s" }, }; +#endif // BE_LV_WIDGET_LABEL /* `lv_led` methods */ +#if BE_LV_WIDGET_LED const lvbe_call_c_t lv_led_func[] = { { "create", (void*) &lv_led_create, "+lv_led", "(lv_obj)(lv_obj)" }, { "get_bright", (void*) &lv_led_get_bright, "i", "(lv_obj)" }, @@ -790,8 +823,10 @@ const lvbe_call_c_t lv_led_func[] = { { "set_bright", (void*) &lv_led_set_bright, "", "(lv_obj)i" }, { "toggle", (void*) &lv_led_toggle, "", "(lv_obj)" }, }; +#endif // BE_LV_WIDGET_LED /* `lv_line` methods */ +#if BE_LV_WIDGET_LINE const lvbe_call_c_t lv_line_func[] = { { "create", (void*) &lv_line_create, "+lv_line", "(lv_obj)(lv_obj)" }, { "get_auto_size", (void*) &lv_line_get_auto_size, "b", "(lv_obj)" }, @@ -800,8 +835,10 @@ const lvbe_call_c_t lv_line_func[] = { { "set_points", (void*) &lv_line_set_points, "", "(lv_obj)ii" }, { "set_y_invert", (void*) &lv_line_set_y_invert, "", "(lv_obj)b" }, }; +#endif // BE_LV_WIDGET_LINE /* `lv_linemeter` methods */ +#if BE_LV_WIDGET_LINEMETER const lvbe_call_c_t lv_linemeter_func[] = { { "create", (void*) &lv_linemeter_create, "+lv_linemeter", "(lv_obj)(lv_obj)" }, { "draw_scale", (void*) &lv_linemeter_draw_scale, "", "(lv_obj)(lv_area)i" }, @@ -818,8 +855,10 @@ const lvbe_call_c_t lv_linemeter_func[] = { { "set_scale", (void*) &lv_linemeter_set_scale, "", "(lv_obj)ii" }, { "set_value", (void*) &lv_linemeter_set_value, "", "(lv_obj)i" }, }; +#endif // BE_LV_WIDGET_LINEMETER /* `lv_list` methods */ +#if BE_LV_WIDGET_LIST const lvbe_call_c_t lv_list_func[] = { { "add_btn", (void*) &lv_list_add_btn, "lv_obj", "(lv_obj).s" }, { "clean", (void*) &lv_list_clean, "", "(lv_obj)" }, @@ -848,8 +887,10 @@ const lvbe_call_c_t lv_list_func[] = { { "set_scrollbar_mode", (void*) &lv_list_set_scrollbar_mode, "", "(lv_obj)i" }, { "up", (void*) &lv_list_up, "", "(lv_obj)" }, }; +#endif // BE_LV_WIDGET_LIST /* `lv_msgbox` methods */ +#if BE_LV_WIDGET_MSGBOX const lvbe_call_c_t lv_msgbox_func[] = { { "add_btns", (void*) &lv_msgbox_add_btns, "", "(lv_obj)s" }, { "create", (void*) &lv_msgbox_create, "+lv_msgbox", "(lv_obj)(lv_obj)" }, @@ -866,15 +907,19 @@ const lvbe_call_c_t lv_msgbox_func[] = { { "start_auto_close", (void*) &lv_msgbox_start_auto_close, "", "(lv_obj)i" }, { "stop_auto_close", (void*) &lv_msgbox_stop_auto_close, "", "(lv_obj)" }, }; +#endif // BE_LV_WIDGET_MSGBOX /* `lv_objmask` methods */ +#if BE_LV_WIDGET_OBJMASK const lvbe_call_c_t lv_objmask_func[] = { { "create", (void*) &lv_objmask_create, "+lv_objmask", "(lv_obj)(lv_obj)" }, { "remove_mask", (void*) &lv_objmask_remove_mask, "", "(lv_obj)(lv_objmask_mask)" }, { "update_mask", (void*) &lv_objmask_update_mask, "", "(lv_obj)(lv_objmask_mask)." }, }; +#endif // BE_LV_WIDGET_OBJMASK /* `lv_page` methods */ +#if BE_LV_WIDGET_PAGE const lvbe_call_c_t lv_page_func[] = { { "clean", (void*) &lv_page_clean, "", "(lv_obj)" }, { "create", (void*) &lv_page_create, "+lv_page", "(lv_obj)(lv_obj)" }, @@ -910,8 +955,10 @@ const lvbe_call_c_t lv_page_func[] = { { "set_scrollbar_mode", (void*) &lv_page_set_scrollbar_mode, "", "(lv_obj)i" }, { "start_edge_flash", (void*) &lv_page_start_edge_flash, "", "(lv_obj)(lv_page_edge)" }, }; +#endif // BE_LV_WIDGET_PAGE /* `lv_roller` methods */ +#if BE_LV_WIDGET_ROLLER const lvbe_call_c_t lv_roller_func[] = { { "create", (void*) &lv_roller_create, "+lv_roller", "(lv_obj)(lv_obj)" }, { "get_align", (void*) &lv_roller_get_align, "i", "(lv_obj)" }, @@ -928,8 +975,10 @@ const lvbe_call_c_t lv_roller_func[] = { { "set_selected", (void*) &lv_roller_set_selected, "", "(lv_obj)i(lv_anim_enable)" }, { "set_visible_row_count", (void*) &lv_roller_set_visible_row_count, "", "(lv_obj)i" }, }; +#endif // BE_LV_WIDGET_ROLLER /* `lv_slider` methods */ +#if BE_LV_WIDGET_SLIDER const lvbe_call_c_t lv_slider_func[] = { { "create", (void*) &lv_slider_create, "+lv_slider", "(lv_obj)(lv_obj)" }, { "get_anim_time", (void*) &lv_slider_get_anim_time, "i", "(lv_obj)" }, @@ -945,8 +994,10 @@ const lvbe_call_c_t lv_slider_func[] = { { "set_type", (void*) &lv_slider_set_type, "", "(lv_obj)i" }, { "set_value", (void*) &lv_slider_set_value, "", "(lv_obj)i(lv_anim_enable)" }, }; +#endif // BE_LV_WIDGET_SLIDER /* `lv_spinbox` methods */ +#if BE_LV_WIDGET_SPINBOX const lvbe_call_c_t lv_spinbox_func[] = { { "create", (void*) &lv_spinbox_create, "+lv_spinbox", "(lv_obj)(lv_obj)" }, { "decrement", (void*) &lv_spinbox_decrement, "", "(lv_obj)" }, @@ -963,8 +1014,10 @@ const lvbe_call_c_t lv_spinbox_func[] = { { "step_next", (void*) &lv_spinbox_step_next, "", "(lv_obj)" }, { "step_prev", (void*) &lv_spinbox_step_prev, "", "(lv_obj)" }, }; +#endif // BE_LV_WIDGET_SPINBOX /* `lv_spinner` methods */ +#if BE_LV_WIDGET_SPINNER const lvbe_call_c_t lv_spinner_func[] = { { "anim_cb", (void*) &lv_spinner_anim_cb, "", ".i" }, { "create", (void*) &lv_spinner_create, "+lv_spinner", "(lv_obj)(lv_obj)" }, @@ -977,8 +1030,10 @@ const lvbe_call_c_t lv_spinner_func[] = { { "set_spin_time", (void*) &lv_spinner_set_spin_time, "", "(lv_obj)i" }, { "set_type", (void*) &lv_spinner_set_type, "", "(lv_obj)i" }, }; +#endif // BE_LV_WIDGET_SPINNER /* `lv_switch` methods */ +#if BE_LV_WIDGET_SWITCH const lvbe_call_c_t lv_switch_func[] = { { "create", (void*) &lv_switch_create, "+lv_switch", "(lv_obj)(lv_obj)" }, { "get_anim_time", (void*) &lv_switch_get_anim_time, "i", "(lv_obj)" }, @@ -988,8 +1043,10 @@ const lvbe_call_c_t lv_switch_func[] = { { "set_anim_time", (void*) &lv_switch_set_anim_time, "", "(lv_obj)i" }, { "toggle", (void*) &lv_switch_toggle, "b", "(lv_obj)(lv_anim_enable)" }, }; +#endif // BE_LV_WIDGET_SWITCH /* `lv_table` methods */ +#if BE_LV_WIDGET_TABLE const lvbe_call_c_t lv_table_func[] = { { "create", (void*) &lv_table_create, "+lv_table", "(lv_obj)(lv_obj)" }, { "get_cell_align", (void*) &lv_table_get_cell_align, "i", "(lv_obj)ii" }, @@ -1011,8 +1068,10 @@ const lvbe_call_c_t lv_table_func[] = { { "set_col_width", (void*) &lv_table_set_col_width, "", "(lv_obj)ii" }, { "set_row_cnt", (void*) &lv_table_set_row_cnt, "", "(lv_obj)i" }, }; +#endif // BE_LV_WIDGET_TABLE /* `lv_tabview` methods */ +#if BE_LV_WIDGET_TABVIEW const lvbe_call_c_t lv_tabview_func[] = { { "add_tab", (void*) &lv_tabview_add_tab, "lv_obj", "(lv_obj)s" }, { "clean_tab", (void*) &lv_tabview_clean_tab, "", "(lv_obj)" }, @@ -1027,8 +1086,10 @@ const lvbe_call_c_t lv_tabview_func[] = { { "set_tab_act", (void*) &lv_tabview_set_tab_act, "", "(lv_obj)i(lv_anim_enable)" }, { "set_tab_name", (void*) &lv_tabview_set_tab_name, "", "(lv_obj)is" }, }; +#endif // BE_LV_WIDGET_TABVIEW /* `lv_textarea` methods */ +#if BE_LV_WIDGET_TEXTAREA const lvbe_call_c_t lv_textarea_func[] = { { "add_char", (void*) &lv_textarea_add_char, "", "(lv_obj)i" }, { "add_text", (void*) &lv_textarea_add_text, "", "(lv_obj)s" }, @@ -1075,8 +1136,10 @@ const lvbe_call_c_t lv_textarea_func[] = { { "set_text_sel", (void*) &lv_textarea_set_text_sel, "", "(lv_obj)b" }, { "text_is_selected", (void*) &lv_textarea_text_is_selected, "b", "(lv_obj)" }, }; +#endif // BE_LV_WIDGET_TEXTAREA /* `lv_tileview` methods */ +#if BE_LV_WIDGET_TILEVIEW const lvbe_call_c_t lv_tileview_func[] = { { "add_element", (void*) &lv_tileview_add_element, "", "(lv_obj)(lv_obj)" }, { "create", (void*) &lv_tileview_create, "+lv_tileview", "(lv_obj)(lv_obj)" }, @@ -1088,8 +1151,10 @@ const lvbe_call_c_t lv_tileview_func[] = { { "set_tile_act", (void*) &lv_tileview_set_tile_act, "", "(lv_obj)ii(lv_anim_enable)" }, { "set_valid_positions", (void*) &lv_tileview_set_valid_positions, "", "(lv_obj)ii" }, }; +#endif // BE_LV_WIDGET_TILEVIEW /* `lv_win` methods */ +#if BE_LV_WIDGET_WIN const lvbe_call_c_t lv_win_func[] = { { "add_btn_left", (void*) &lv_win_add_btn_left, "lv_obj", "(lv_obj)." }, { "add_btn_right", (void*) &lv_win_add_btn_right, "lv_obj", "(lv_obj)." }, @@ -1120,52 +1185,121 @@ const lvbe_call_c_t lv_win_func[] = { { "title_get_alignment", (void*) &lv_win_title_get_alignment, "i", "(lv_obj)" }, { "title_set_alignment", (void*) &lv_win_title_set_alignment, "", "(lv_obj)i" }, }; +#endif // BE_LV_WIDGET_WIN // map of clases const lvbe_call_c_classes_t lv_classes[] = { +#if BE_LV_WIDGET_ARC { "lv_arc", lv_arc_func, sizeof(lv_arc_func) / sizeof(lv_arc_func[0]) }, +#endif // BE_LV_WIDGET_ARC +#if BE_LV_WIDGET_BAR { "lv_bar", lv_bar_func, sizeof(lv_bar_func) / sizeof(lv_bar_func[0]) }, +#endif // BE_LV_WIDGET_BAR +#if BE_LV_WIDGET_BTN { "lv_btn", lv_btn_func, sizeof(lv_btn_func) / sizeof(lv_btn_func[0]) }, +#endif // BE_LV_WIDGET_BTN +#if BE_LV_WIDGET_BTNMATRIX { "lv_btnmatrix", lv_btnmatrix_func, sizeof(lv_btnmatrix_func) / sizeof(lv_btnmatrix_func[0]) }, +#endif // BE_LV_WIDGET_BTNMATRIX +#if BE_LV_WIDGET_CALENDAR { "lv_calendar", lv_calendar_func, sizeof(lv_calendar_func) / sizeof(lv_calendar_func[0]) }, +#endif // BE_LV_WIDGET_CALENDAR +#if BE_LV_WIDGET_CANVAS { "lv_canvas", lv_canvas_func, sizeof(lv_canvas_func) / sizeof(lv_canvas_func[0]) }, +#endif // BE_LV_WIDGET_CANVAS +#if BE_LV_WIDGET_CHART { "lv_chart", lv_chart_func, sizeof(lv_chart_func) / sizeof(lv_chart_func[0]) }, +#endif // BE_LV_WIDGET_CHART +#if BE_LV_WIDGET_CHECKBOX { "lv_checkbox", lv_checkbox_func, sizeof(lv_checkbox_func) / sizeof(lv_checkbox_func[0]) }, +#endif // BE_LV_WIDGET_CHECKBOX +#if BE_LV_WIDGET_CONT { "lv_cont", lv_cont_func, sizeof(lv_cont_func) / sizeof(lv_cont_func[0]) }, +#endif // BE_LV_WIDGET_CONT +#if BE_LV_WIDGET_CPICKER { "lv_cpicker", lv_cpicker_func, sizeof(lv_cpicker_func) / sizeof(lv_cpicker_func[0]) }, +#endif // BE_LV_WIDGET_CPICKER +#if BE_LV_WIDGET_DROPDOWN { "lv_dropdown", lv_dropdown_func, sizeof(lv_dropdown_func) / sizeof(lv_dropdown_func[0]) }, +#endif // BE_LV_WIDGET_DROPDOWN +#if BE_LV_WIDGET_GAUGE { "lv_gauge", lv_gauge_func, sizeof(lv_gauge_func) / sizeof(lv_gauge_func[0]) }, +#endif // BE_LV_WIDGET_GAUGE { "lv_group", lv_group_func, sizeof(lv_group_func) / sizeof(lv_group_func[0]) }, +#if BE_LV_WIDGET_IMG { "lv_img", lv_img_func, sizeof(lv_img_func) / sizeof(lv_img_func[0]) }, +#endif // BE_LV_WIDGET_IMG +#if BE_LV_WIDGET_IMGBTN { "lv_imgbtn", lv_imgbtn_func, sizeof(lv_imgbtn_func) / sizeof(lv_imgbtn_func[0]) }, +#endif // BE_LV_WIDGET_IMGBTN { "lv_indev", lv_indev_func, sizeof(lv_indev_func) / sizeof(lv_indev_func[0]) }, +#if BE_LV_WIDGET_KEYBOARD { "lv_keyboard", lv_keyboard_func, sizeof(lv_keyboard_func) / sizeof(lv_keyboard_func[0]) }, +#endif // BE_LV_WIDGET_KEYBOARD +#if BE_LV_WIDGET_LABEL { "lv_label", lv_label_func, sizeof(lv_label_func) / sizeof(lv_label_func[0]) }, +#endif // BE_LV_WIDGET_LABEL +#if BE_LV_WIDGET_LED { "lv_led", lv_led_func, sizeof(lv_led_func) / sizeof(lv_led_func[0]) }, +#endif // BE_LV_WIDGET_LED +#if BE_LV_WIDGET_LINE { "lv_line", lv_line_func, sizeof(lv_line_func) / sizeof(lv_line_func[0]) }, +#endif // BE_LV_WIDGET_LINE +#if BE_LV_WIDGET_LINEMETER { "lv_linemeter", lv_linemeter_func, sizeof(lv_linemeter_func) / sizeof(lv_linemeter_func[0]) }, +#endif // BE_LV_WIDGET_LINEMETER +#if BE_LV_WIDGET_LIST { "lv_list", lv_list_func, sizeof(lv_list_func) / sizeof(lv_list_func[0]) }, +#endif // BE_LV_WIDGET_LIST +#if BE_LV_WIDGET_MSGBOX { "lv_msgbox", lv_msgbox_func, sizeof(lv_msgbox_func) / sizeof(lv_msgbox_func[0]) }, +#endif // BE_LV_WIDGET_MSGBOX { "lv_obj", lv_obj_func, sizeof(lv_obj_func) / sizeof(lv_obj_func[0]) }, +#if BE_LV_WIDGET_OBJMASK { "lv_objmask", lv_objmask_func, sizeof(lv_objmask_func) / sizeof(lv_objmask_func[0]) }, +#endif // BE_LV_WIDGET_OBJMASK +#if BE_LV_WIDGET_PAGE { "lv_page", lv_page_func, sizeof(lv_page_func) / sizeof(lv_page_func[0]) }, +#endif // BE_LV_WIDGET_PAGE +#if BE_LV_WIDGET_ROLLER { "lv_roller", lv_roller_func, sizeof(lv_roller_func) / sizeof(lv_roller_func[0]) }, +#endif // BE_LV_WIDGET_ROLLER +#if BE_LV_WIDGET_SLIDER { "lv_slider", lv_slider_func, sizeof(lv_slider_func) / sizeof(lv_slider_func[0]) }, +#endif // BE_LV_WIDGET_SLIDER +#if BE_LV_WIDGET_SPINBOX { "lv_spinbox", lv_spinbox_func, sizeof(lv_spinbox_func) / sizeof(lv_spinbox_func[0]) }, +#endif // BE_LV_WIDGET_SPINBOX +#if BE_LV_WIDGET_SPINNER { "lv_spinner", lv_spinner_func, sizeof(lv_spinner_func) / sizeof(lv_spinner_func[0]) }, +#endif // BE_LV_WIDGET_SPINNER { "lv_style", lv_style_func, sizeof(lv_style_func) / sizeof(lv_style_func[0]) }, +#if BE_LV_WIDGET_SWITCH { "lv_switch", lv_switch_func, sizeof(lv_switch_func) / sizeof(lv_switch_func[0]) }, +#endif // BE_LV_WIDGET_SWITCH +#if BE_LV_WIDGET_TABLE { "lv_table", lv_table_func, sizeof(lv_table_func) / sizeof(lv_table_func[0]) }, +#endif // BE_LV_WIDGET_TABLE +#if BE_LV_WIDGET_TABVIEW { "lv_tabview", lv_tabview_func, sizeof(lv_tabview_func) / sizeof(lv_tabview_func[0]) }, +#endif // BE_LV_WIDGET_TABVIEW +#if BE_LV_WIDGET_TEXTAREA { "lv_textarea", lv_textarea_func, sizeof(lv_textarea_func) / sizeof(lv_textarea_func[0]) }, +#endif // BE_LV_WIDGET_TEXTAREA +#if BE_LV_WIDGET_TILEVIEW { "lv_tileview", lv_tileview_func, sizeof(lv_tileview_func) / sizeof(lv_tileview_func[0]) }, +#endif // BE_LV_WIDGET_TILEVIEW +#if BE_LV_WIDGET_WIN { "lv_win", lv_win_func, sizeof(lv_win_func) / sizeof(lv_win_func[0]) }, +#endif // BE_LV_WIDGET_WIN }; const size_t lv_classes_size = sizeof(lv_classes) / sizeof(lv_classes[0]); /* `lv_img` methods */ +#if BE_LV_WIDGET_IMG int lvbe_img_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_img_create, "+lv_img", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_IMG /* `lv_style` methods */ @@ -1178,100 +1312,164 @@ const size_t lv_classes_size = sizeof(lv_classes) / sizeof(lv_classes[0]); int lvbe_obj_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_obj_create, "+lv_obj", "(lv_obj)(lv_obj)"); } /* `lv_arc` methods */ +#if BE_LV_WIDGET_ARC int lvbe_arc_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_arc_create, "+lv_arc", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_ARC /* `lv_bar` methods */ +#if BE_LV_WIDGET_BAR int lvbe_bar_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_bar_create, "+lv_bar", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_BAR /* `lv_btn` methods */ +#if BE_LV_WIDGET_BTN int lvbe_btn_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btn_create, "+lv_btn", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_BTN /* `lv_btnmatrix` methods */ +#if BE_LV_WIDGET_BTNMATRIX int lvbe_btnmatrix_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_btnmatrix_create, "+lv_btnmatrix", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_BTNMATRIX /* `lv_calendar` methods */ +#if BE_LV_WIDGET_CALENDAR int lvbe_calendar_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_calendar_create, "+lv_calendar", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_CALENDAR /* `lv_canvas` methods */ +#if BE_LV_WIDGET_CANVAS int lvbe_canvas_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_canvas_create, "+lv_canvas", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_CANVAS /* `lv_chart` methods */ +#if BE_LV_WIDGET_CHART int lvbe_chart_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_chart_create, "+lv_chart", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_CHART /* `lv_checkbox` methods */ +#if BE_LV_WIDGET_CHECKBOX int lvbe_checkbox_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_checkbox_create, "+lv_checkbox", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_CHECKBOX /* `lv_cont` methods */ +#if BE_LV_WIDGET_CONT int lvbe_cont_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cont_create, "+lv_cont", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_CONT /* `lv_cpicker` methods */ +#if BE_LV_WIDGET_CPICKER int lvbe_cpicker_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_cpicker_create, "+lv_cpicker", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_CPICKER /* `lv_dropdown` methods */ +#if BE_LV_WIDGET_DROPDOWN int lvbe_dropdown_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_dropdown_create, "+lv_dropdown", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_DROPDOWN /* `lv_gauge` methods */ +#if BE_LV_WIDGET_GAUGE int lvbe_gauge_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_gauge_create, "+lv_gauge", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_GAUGE /* `lv_imgbtn` methods */ +#if BE_LV_WIDGET_IMGBTN int lvbe_imgbtn_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_imgbtn_create, "+lv_imgbtn", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_IMGBTN /* `lv_keyboard` methods */ +#if BE_LV_WIDGET_KEYBOARD int lvbe_keyboard_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_keyboard_create, "+lv_keyboard", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_KEYBOARD /* `lv_label` methods */ +#if BE_LV_WIDGET_LABEL int lvbe_label_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_label_create, "+lv_label", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_LABEL /* `lv_led` methods */ +#if BE_LV_WIDGET_LED int lvbe_led_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_led_create, "+lv_led", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_LED /* `lv_line` methods */ +#if BE_LV_WIDGET_LINE int lvbe_line_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_line_create, "+lv_line", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_LINE /* `lv_linemeter` methods */ +#if BE_LV_WIDGET_LINEMETER int lvbe_linemeter_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_linemeter_create, "+lv_linemeter", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_LINEMETER /* `lv_list` methods */ +#if BE_LV_WIDGET_LIST int lvbe_list_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_list_create, "+lv_list", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_LIST /* `lv_msgbox` methods */ +#if BE_LV_WIDGET_MSGBOX int lvbe_msgbox_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_msgbox_create, "+lv_msgbox", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_MSGBOX /* `lv_objmask` methods */ +#if BE_LV_WIDGET_OBJMASK int lvbe_objmask_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_objmask_create, "+lv_objmask", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_OBJMASK /* `lv_page` methods */ +#if BE_LV_WIDGET_PAGE int lvbe_page_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_page_create, "+lv_page", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_PAGE /* `lv_roller` methods */ +#if BE_LV_WIDGET_ROLLER int lvbe_roller_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_roller_create, "+lv_roller", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_ROLLER /* `lv_slider` methods */ +#if BE_LV_WIDGET_SLIDER int lvbe_slider_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_slider_create, "+lv_slider", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_SLIDER /* `lv_spinbox` methods */ +#if BE_LV_WIDGET_SPINBOX int lvbe_spinbox_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinbox_create, "+lv_spinbox", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_SPINBOX /* `lv_spinner` methods */ +#if BE_LV_WIDGET_SPINNER int lvbe_spinner_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_spinner_create, "+lv_spinner", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_SPINNER /* `lv_switch` methods */ +#if BE_LV_WIDGET_SWITCH int lvbe_switch_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_switch_create, "+lv_switch", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_SWITCH /* `lv_table` methods */ +#if BE_LV_WIDGET_TABLE int lvbe_table_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_table_create, "+lv_table", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_TABLE /* `lv_tabview` methods */ +#if BE_LV_WIDGET_TABVIEW int lvbe_tabview_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tabview_create, "+lv_tabview", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_TABVIEW /* `lv_textarea` methods */ +#if BE_LV_WIDGET_TEXTAREA int lvbe_textarea_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_textarea_create, "+lv_textarea", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_TEXTAREA /* `lv_tileview` methods */ +#if BE_LV_WIDGET_TILEVIEW int lvbe_tileview_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_tileview_create, "+lv_tileview", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_TILEVIEW /* `lv_win` methods */ +#if BE_LV_WIDGET_WIN int lvbe_win_create(bvm *vm) { return be_call_c_func(vm, (void*) &lv_win_create, "+lv_win", "(lv_obj)(lv_obj)"); } +#endif // BE_LV_WIDGET_WIN extern void be_load_lv_img_lib(bvm *vm); diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index 1b8f991f7..cffdfeddc 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -928,19 +928,52 @@ #define USE_CSE7761 // Add support for CSE7761 Energy monitor as used in Sonoff Dual R3 // -- LVGL Graphics Library --------------------------------- -//#define USE_LVGL // LVGL Engine, requires Berry, takes 440k of Flash +//#define USE_LVGL // LVGL Engine, requires Berry (+382KB) #define USE_LVGL_PSRAM // Allocate LVGL memory in PSRAM if PSRAM is connected - this might be slightly slower but leaves main memory intact #define USE_LVGL_MAX_SLEEP 10 // max sleep in ms when LVGL is enabled, more than 10ms will make display less responsive - #define USE_LVGL_PNG_DECODER // include a PNG image decoder from file system - //#define USE_LVGL_FREETYPE // Use the FreeType renderer to display fonts using native TTF files in file system (+75k flash) - // WARNING this feature needs to increase the stack size to 32KB, for which there is no easy way right now + #define USE_LVGL_PNG_DECODER // include a PNG image decoder from file system (+16KB) + //#define USE_LVGL_FREETYPE // Use the FreeType renderer to display fonts using native TTF files in file system (+77KB flash) #define LV_USE_FT_CACHE_MANAGER 1 // define whether glyphs are cached by FreeType library #define USE_LVGL_FREETYPE_MAX_FACES 64 // max number of FreeType faces in cache #define USE_LVGL_FREETYPE_MAX_SIZES 4 // max number of sizes in cache #define USE_LVGL_FREETYPE_MAX_BYTES 16*1024 // max bytes in cache #define USE_LVGL_FREETYPE_MAX_BYTES_PSRAM 64*1024 // max bytes in cache when using PSRAM #define USE_LVGL_BG_DEFAULT 0x000000 // Default color for the uninitialized background screen (black) - + // Disabling select widgets that will be rarely used in Tasmota (-13KB) + #define BE_LV_WIDGET_ARC 1 + #define BE_LV_WIDGET_BAR 1 + #define BE_LV_WIDGET_BTN 1 + #define BE_LV_WIDGET_BTNMATRIX 1 + #define BE_LV_WIDGET_CALENDAR 0 + #define BE_LV_WIDGET_CANVAS 1 + #define BE_LV_WIDGET_CHART 1 + #define BE_LV_WIDGET_CHECKBOX 1 + #define BE_LV_WIDGET_CONT 1 + #define BE_LV_WIDGET_CPICKER 1 + #define BE_LV_WIDGET_DROPDOWN 1 + #define BE_LV_WIDGET_GAUGE 1 + #define BE_LV_WIDGET_IMG 1 + #define BE_LV_WIDGET_IMGBTN 1 + #define BE_LV_WIDGET_KEYBOARD 0 + #define BE_LV_WIDGET_LABEL 1 + #define BE_LV_WIDGET_LED 1 + #define BE_LV_WIDGET_LINE 1 + #define BE_LV_WIDGET_LINEMETER 1 + #define BE_LV_WIDGET_LIST 1 + #define BE_LV_WIDGET_MSGBOX 1 + #define BE_LV_WIDGET_OBJMASK 1 + #define BE_LV_WIDGET_TEMPL 1 + #define BE_LV_WIDGET_PAGE 1 + #define BE_LV_WIDGET_ROLLER 1 + #define BE_LV_WIDGET_SLIDER 1 + #define BE_LV_WIDGET_SPINBOX 1 + #define BE_LV_WIDGET_SPINNER 1 + #define BE_LV_WIDGET_SWITCH 1 + #define BE_LV_WIDGET_TABLE 1 + #define BE_LV_WIDGET_TABVIEW 1 + #define BE_LV_WIDGET_TEXTAREA 1 + #define BE_LV_WIDGET_TILEVIEW 1 + #define BE_LV_WIDGET_WIN 0 #endif // ESP32 diff --git a/tools/lv_berry/convert.py b/tools/lv_berry/convert.py index 1be8c73fd..494fa9ef4 100644 --- a/tools/lv_berry/convert.py +++ b/tools/lv_berry/convert.py @@ -276,8 +276,10 @@ extern "C" { """) for subtype, flv in lv.items(): - print(f"""/* `lv_{subtype}` methods */ -const lvbe_call_c_t lv_{subtype}_func[] = {{""") + print(f"/* `lv_{subtype}` methods */") + if subtype in lv_widgets: + print(f"#if BE_LV_WIDGET_{subtype.upper()}") + print(f"const lvbe_call_c_t lv_{subtype}_func[] = {{") func_out = {} # used to sort output for f in flv: @@ -294,8 +296,10 @@ const lvbe_call_c_t lv_{subtype}_func[] = {{""") for be_name in sorted(func_out): print(func_out[be_name]) - print(f"""}}; -""") + print(f"}};") + if subtype in lv_widgets: + print(f"#endif // BE_LV_WIDGET_{subtype.upper()}") + print(f"") # print the global map of classes print(f""" @@ -304,7 +308,11 @@ const lvbe_call_c_classes_t lv_classes[] = {{""") for subtype in sorted(lv): # for subtype, flv in lv.items(): + if subtype in lv_widgets: + print(f"#if BE_LV_WIDGET_{subtype.upper()}") print(f" {{ \"lv_{subtype}\", lv_{subtype}_func, sizeof(lv_{subtype}_func) / sizeof(lv_{subtype}_func[0]) }},") + if subtype in lv_widgets: + print(f"#endif // BE_LV_WIDGET_{subtype.upper()}") print(f"""}}; const size_t lv_classes_size = sizeof(lv_classes) / sizeof(lv_classes[0]); @@ -323,7 +331,11 @@ for subtype, flv in lv.items(): orig_func_name = f[3] if c_func_name.endswith("_create"): c_ret_type = f"+lv_{subtype}" + if subtype in lv_widgets: + print(f"#if BE_LV_WIDGET_{subtype.upper()}") print(f" int {c_func_name}(bvm *vm) {{ return be_call_c_func(vm, (void*) &{orig_func_name}, \"{c_ret_type}\", { c_argc if c_argc else 'nullptr'}); }}") + if subtype in lv_widgets: + print(f"#endif // BE_LV_WIDGET_{subtype.upper()}") print() print()