From 32c6bc5bd735d4e41fe0877e1ee16ef047eef566 Mon Sep 17 00:00:00 2001 From: Kevin Schlosser Date: Thu, 21 Dec 2023 01:54:15 -0700 Subject: [PATCH] ci: add MicroPython test (#4997) Co-authored-by: Gabor Kiss-Vamosi --- .github/workflows/build_micropython.yml | 13 +- src/libs/bin_decoder/lv_bin_decoder.c | 3 +- tests/micropy_test/__init__.py | 370 ++++++++++++++++++ tests/micropy_test/font_montserrat_24.ttf | Bin 0 -> 197624 bytes tests/micropy_test/image_compare.png | Bin 0 -> 38934 bytes tests/micropy_test/micropy.py | 432 ++++++++++++++++++++++ tests/micropy_test/test_img_lvgl_logo.png | Bin 0 -> 1873 bytes 7 files changed, 814 insertions(+), 4 deletions(-) create mode 100644 tests/micropy_test/__init__.py create mode 100644 tests/micropy_test/font_montserrat_24.ttf create mode 100644 tests/micropy_test/image_compare.png create mode 100644 tests/micropy_test/micropy.py create mode 100644 tests/micropy_test/test_img_lvgl_logo.png diff --git a/.github/workflows/build_micropython.yml b/.github/workflows/build_micropython.yml index 7a861490f..9fc157756 100644 --- a/.github/workflows/build_micropython.yml +++ b/.github/workflows/build_micropython.yml @@ -66,10 +66,19 @@ jobs: # Unix port - name: Build Unix port if: matrix.port == 'unix' - run: make -j $(nproc) -C ports/unix DEBUG=1 + run: make -j $(nproc) -C ports/unix DEBUG=1 LV_CFLAGS="-DMICROPY_LV_USE_LOG=0" + - name: Install requirements for the test + run: | + python3 -m pip install pillow + mkdir lib/lv_bindings/lvgl/tests/micropy_test/artifacts - name: Run tests if: success() && matrix.port == 'unix' run: | export XDG_RUNTIME_DIR=/tmp - lib/lv_bindings/tests/run.sh + python3 lib/lv_bindings/lvgl/tests/micropy_test/__init__.py --artifact-path=lib/lv_bindings/lvgl/tests/micropy_test/artifacts --mpy-path=ports/unix/build-standard/micropython + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: test-artifacts + path: lib/lv_bindings/lvgl/tests/micropy_test/artifacts diff --git a/src/libs/bin_decoder/lv_bin_decoder.c b/src/libs/bin_decoder/lv_bin_decoder.c index 7610fc259..f2db7ff42 100644 --- a/src/libs/bin_decoder/lv_bin_decoder.c +++ b/src/libs/bin_decoder/lv_bin_decoder.c @@ -956,10 +956,9 @@ static lv_result_t decompress_image(lv_image_decoder_dsc_t * dsc, const lv_image } uint8_t * img_data; + uint32_t out_len = compressed->decompressed_size; uint32_t input_len = compressed->compressed_size; LV_UNUSED(input_len); - uint32_t out_len = compressed->decompressed_size; - lv_draw_buf_t * decompressed = lv_draw_buf_create(dsc->header.w, dsc->header.h, dsc->header.cf, dsc->header.stride); if(decompressed == NULL) { diff --git a/tests/micropy_test/__init__.py b/tests/micropy_test/__init__.py new file mode 100644 index 000000000..ef5b6b35c --- /dev/null +++ b/tests/micropy_test/__init__.py @@ -0,0 +1,370 @@ +""" +The test script will only run the one test on microptyhon. It is not a +framework that can be used for other tests. This has a reduced code footprint. +entrypoint API is almost the same as the framework. + + +Requirements +Python >= 3.10 + +pillow library + +add the following to the CI prior to the test running + +python3 -m pip install pillow + +Example command line to run the test. I suggest doing this from the root of the +binding directory. It is just a simple location to do it from. + +Paths that are passed in MUST be relitive to the current working directory. +python3 lib/lv_bindings/lvgl/tests/micropy_test/__init__.py --artifact-path=lib/lv_bindings/lvgl/tests/micropy_test/artifacts --mpy-path=ports/unix/build-standard/micropython + +""" +import os +import time +import signal +import argparse +import binascii +import unittest +import threading +import subprocess + +from PIL import Image as Image + + +DEBUG = 0 + +debug_log = None + + +def log(*args): + args = ' '.join(repr(arg) for arg in args) + debug_log.write(args + '\n') + + if DEBUG: + sys.stdout.write('\033[31;1m' + args + '\033[0m\n') + sys.stdout.flush() + + +BASE_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__))) +TEST_PATH = os.path.join(BASE_PATH, 'micropy.py') +IMG_PATH = os.path.join(BASE_PATH, '../ref_imgs/binding.png') + +CTRL_C = b'\x03' # 2 times to exit any running code +CTRL_D = b'\x04' # exit paste mode committing and running what has been pasted +CTRL_E = b'\x05' # enter paste mode + +PASTE_PROMPT = b'===' +REPL_PROMPT = b'>>>' + +os.environ['MICROPYINSPECT'] = '1' + + +class TestData: + + def __init__(self): + self.watchdog_timer = time.time() + self.result = None + self.error_data = '' + self.event = threading.Event() + + +class MicroPython_Test(unittest.TestCase): + # these are here simply to make an IDE happy. Their values get dynamically + # set when the class gets constructed + process: subprocess.Popen = None + exit_event: threading.Event = None + + @classmethod + def send(cls, cmd): + if cls.process is None: + return + + log('<---', cmd) + cls.process.stdin.write(cmd) + cls.process.stdin.flush() + + @classmethod + def read_until(cls, marker): + micropy_data = b'' + error_data = b'' + + log('MARKER', marker) + + logged = False + + while ( + not micropy_data.endswith(marker) and + not cls.exit_event.is_set() + ): + try: + char = cls.process.stdout.read(1) + except: # NOQA + break + + if char: + micropy_data += char + logged = False + else: + logged = True + log('--->', micropy_data) + + if micropy_data.endswith(b'\nERROR END\n'): + error_data = micropy_data.split(b'\nERROR START\n')[-1].split(b'\nERROR END\n')[0] + micropy_data = b'' + log('---> ERROR: ', error_data) + logged = True + break + + if not logged: + log('--->', micropy_data) + + if cls.exit_event.is_set(): + log('--EXIT EVENT SET') + + if micropy_data: + return micropy_data.replace(marker, b''), error_data + + return micropy_data, error_data + + @classmethod + def setUpClass(cls): + os.chdir(os.path.dirname(__file__)) + cls.exit_event = threading.Event() + + log(f'--SETTING UP') + cls.process = subprocess.Popen( + ['bash'], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + stdin=subprocess.PIPE, + env=os.environ, + shell=True, + preexec_fn=os.setsid + ) + log(f'--RUNNING MICROPYTHON ({MICROPYTHON_PATH})') + + cls.send(b'cd ' + os.path.dirname(__file__).encode('utf-8') + b'\n') + cls.send(MICROPYTHON_PATH.encode('utf-8') + b'\n') + _, error_data = cls.read_until(b'>>>') + + if error_data: + raise RuntimeError(error_data) + + log('--MICROPYTHON STARTED') + + @classmethod + def tearDownClass(cls): + log('--TEARDOWN STARTED') + + if cls.process is not None: + cls.send(CTRL_C) + cls.send(CTRL_C) + cls.send(CTRL_D) + + if not cls.process.stdin.closed: + cls.process.stdin.close() + + os.killpg(os.getpgid(cls.process.pid), signal.SIGTERM) + + cls.process.wait() + + if not cls.process.stdout.closed: + cls.process.stdout.close() + + if not cls.process.stderr.closed: + cls.process.stderr.close() + + cls.process = None + + log(f'--TEARDOWN FINISHED') + + def test_1_image_compare(self): + image = Image.open(IMG_PATH) + res_img = image.convert('RGB') + image.close() + res_data = list(res_img.getdata()) + res_img.close() + + with open(TEST_PATH, 'rb') as f: + test_code = f.read() + + log(f'--RUNNING TEST ({TEST_PATH})') + + test_code = test_code.strip() + + if self.__class__.process is None: + self.fail('MicroPython failure.') + + self.send(CTRL_E) + + _, error_data = self.read_until(PASTE_PROMPT) + if error_data: + self.fail(error_data) + + test_code = test_code.split(b'\r\n') + + for i, line in enumerate(test_code): + self.send(line + b'\n') + _, error_data = self.read_until(b'\n') + + if error_data: + self.fail(error_data) + + time.sleep(0.002) + + # self.read_until(b'# end\n') + + def _do(td: TestData): + self.send(CTRL_D) + td.error_data = b'' + td.watchdog_timer = time.time() + + td.result = [] + + try: + _, td.error_data = self.read_until(b'FRAME START\n') + td.watchdog_timer = time.time() + + lne, td.error_data = self.read_until(b'\n') + + while ( + b'FRAME END' not in lne and + not td.error_data and + not self.__class__.exit_event.is_set() + ): + td.watchdog_timer = time.time() + td.result.append(lne) + lne, td.error_data = self.read_until(b'\n') + + if td.error_data: + return + + if self.__class__.exit_event.is_set(): + return + + except: # NOQA + import traceback + + traceback.print_exc() + + td.error_data = traceback.format_exc() + return + + td.event.set() + + test_data = TestData() + + t = threading.Thread( + target=_do, + args=(test_data,) + ) + t.daemon = True + test_data.watchdog_timer = time.time() + + t.start() + + while ( + (time.time() - test_data.watchdog_timer) * 1000 <= 20000 and + not test_data.event.is_set() + ): + test_data.event.wait(0.05) + + if not test_data.event.is_set(): + self.__class__.exit_event.set() + # self.read_until(REPL_PROMPT) + + self.send(CTRL_C) + self.send(CTRL_C) + + width = 800 + height = 480 + + if test_data.error_data: + self.fail(test_data.error_data) + + try: + frame = bytearray( + b''.join(binascii.unhexlify(lne) for lne in test_data.result) + ) + + # I don't exactly know why the byte order is backwards but it is + frame = bytes(bytearray([ + item for j in range(0, len(frame), 3) + for item in [frame[j + 2], frame[j + 1], frame[j]] + ])) + + image = Image.new('RGB', (width, height)) + image.frombytes(frame) + img = image.convert('RGB') + image.close() + + byte_data = list(img.getdata()) + img.save(os.path.join(ARTIFACT_PATH, f'frame.png'), 'PNG') + img.close() + + with open(os.path.join(ARTIFACT_PATH, f'frame.bin'), 'wb') as f: + # have to flatten the data and remove the alpha + # from the PIL image it is formatted as + # [(r, g, b), (r, g, b)] + f.write(bytes(bytearray([ + item for sublist in byte_data + for item in sublist + ]))) + + except: # NOQA + import traceback + + self.fail(traceback.format_exc()) + + self.assertEqual(res_data, byte_data, 'Frames do not match') + + +cwd = os.path.abspath(os.getcwd()) + +ARTIFACT_PATH = os.path.join(cwd, 'artifacts') +MICROPYTHON_PATH = os.path.join(cwd, 'micropython') + + +if __name__ == '__main__': + import sys + + arg_parser = argparse.ArgumentParser() + arg_parser.add_argument( + '--artifact-path', + dest='artifact_path', + help='path to save artifacts to', + action='store' + ) + arg_parser.add_argument( + '--mpy-path', + dest='mpy_path', + help='path to micropython', + action='store' + ) + arg_parser.add_argument( + '--debug', + dest='debug', + help='debug output', + action='store_true' + ) + + args = arg_parser.parse_args() + + ARTIFACT_PATH = os.path.join(cwd, args.artifact_path) + MICROPYTHON_PATH = os.path.join(cwd, args.mpy_path) + DEBUG = args.debug + + if not os.path.exists(ARTIFACT_PATH): + raise RuntimeError(f'Artifact path does not exist ({ARTIFACT_PATH})') + + if not os.path.exists(MICROPYTHON_PATH): + raise RuntimeError(f'MicroPython binary not found ({MICROPYTHON_PATH})') + + debug_log_path = os.path.join(ARTIFACT_PATH, 'debug.log') + debug_log = open(debug_log_path, 'w') + + unittest.main(argv=[sys.argv[0], '-v']) + + debug_log.close() + print(f'View the debug output in "{debug_log_path}"') diff --git a/tests/micropy_test/font_montserrat_24.ttf b/tests/micropy_test/font_montserrat_24.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f4a266dd37d5066da46c9a6b8898073ae2930a64 GIT binary patch literal 197624 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%0A+&hMl60&72-OVAV9J+!ire=9wu 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

+2N%_-x>` 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%0AEKleGZ?E%8KK&LlWVO(( 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 literal 0 HcmV?d00001 diff --git a/tests/micropy_test/micropy.py b/tests/micropy_test/micropy.py new file mode 100644 index 000000000..5f7b9799f --- /dev/null +++ b/tests/micropy_test/micropy.py @@ -0,0 +1,432 @@ +import io + +import lvgl as lv +import ubinascii +import fs_driver +import sys + + +if not lv.is_initialized(): + lv.init() + +try: + lv.log_register_print_cb # NOQA + + raise RuntimeError('Logging in LVGL MUST be disabled to run the tests.') +except AttributeError: + pass +except RuntimeError as exc: + buf = io.StringIO() + sys.print_exception(exc, buf) + + print('ERROR START') + print(buf.getvalue()) + print('ERROR END') + raise + +fs_drv = lv.fs_drv_t() +fs_driver.fs_register(fs_drv, 'A') + +WIDTH = 800 +HEIGHT = 480 + + +def test_func_wrapper(func): + def _wrapper(*args, **kwargs): + try: + return func(*args, **kwargs) + except Exception as exc: + buf = io.StringIO() + sys.print_exception(exc, buf) + + print('ERROR START') + print(buf.getvalue()) + print('ERROR END') + + return _wrapper + + +CAPTURE_FRAME = False + + +@test_func_wrapper +def flush(disp, area, color_p): + + x1 = area.x1 + x2 = area.x2 + y1 = area.y1 + y2 = area.y2 + + size = (x2 - x1 + 1) * (y2 - y1 + 1) * lv.color_format_get_size( + disp.get_color_format() + ) + data_view = color_p.__dereference__(size) + byte_count = 0 + + print('FRAME START') + sys.stdout.flush() + + while byte_count != size: + chunk_size = min(size - byte_count, 512) + chunk = data_view[byte_count:chunk_size + byte_count] + byte_count += chunk_size + print(ubinascii.hexlify(bytes(chunk)).decode('utf-8')) + sys.stdout.flush() + + print('FRAME END') + sys.stdout.flush() + + disp.flush_ready() + + +disp_drv = lv.display_create(WIDTH, HEIGHT) +disp_drv.set_flush_cb(flush) +disp_drv.set_color_format(lv.COLOR_FORMAT.RGB888) + +color_size = lv.color_format_get_size(disp_drv.get_color_format()) + +buf = bytearray(WIDTH * HEIGHT * color_size) +disp_drv.set_draw_buffers( + buf, + None, + WIDTH * HEIGHT * color_size, + lv.DISPLAY_RENDER_MODE.FULL + ) + + +@test_func_wrapper +def GRID_FR(x): + return lv.COORD.MAX - 100 + x + + +@test_func_wrapper +def CANVAS_BUF_SIZE(w, h, bpp, stride): + return ((((w * bpp + 7) >> 3) + stride - 1) & ~( + stride - 1)) * h + lv.DRAW_BUF_ALIGN + + +@test_func_wrapper +def create_ui(): + # Create a colors + c1 = lv.color_hex(0xff0000) + c2 = lv.palette_darken(lv.PALETTE.BLUE, 2) + c3 = c1.mix(c2, lv.OPA._60) + + # Create a style + style_big_font = lv.style_t() + style_big_font.init() + + # Try to load as built in font and if not load it using tiny TTF + try: + font_montserrat_24 = lv.font_montserrat_24 + except AttributeError: + font_montserrat_24 = lv.font_t() + lv.tiny_ttf_create_file(font_montserrat_24, 'A:font_montserrat_24.ttf', 32) + + style_big_font.set_text_font(font_montserrat_24) + + # Get the active screen + scr = lv.screen_active() + + # Declare static array of integers, and test grid setting options + gird_cols = [300, GRID_FR(3), GRID_FR(2), lv.GRID_TEMPLATE_LAST] + gird_rows = [100, GRID_FR(1), lv.GRID_CONTENT, lv.GRID_TEMPLATE_LAST] + scr.set_grid_dsc_array(gird_cols, gird_rows) + + chart_type_subject = lv.subject_t() + chart_type_subject.init_int(0) + + # Create a widget + dropdown = lv.dropdown(scr) + + # Pass a string as argument + dropdown.set_options("Lines\nBars") + + # Use grid align options + dropdown.set_grid_cell( + lv.GRID_ALIGN.CENTER, + 0, + 1, + lv.GRID_ALIGN.CENTER, + 0, + 1 + ) + + # Bind to a subject + dropdown.bind_value(chart_type_subject) + + # Create a chart with an external array of points + chart = lv.chart(lv.screen_active()) + chart.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 1, lv.GRID_ALIGN.CENTER, 1, 1) + + series = chart.add_series(c3, lv.chart.AXIS.PRIMARY_X) + + chart_y_array = [10, 25, 50, 40, 30, 35, 60, 65, 70, 75] + + chart.set_ext_y_array(series, chart_y_array) + + # Add custom observer callback + chart_type_subject.add_observer_obj( + lambda _, __: chart_type_observer_cb(chart, chart_type_subject), + chart, + None + ) + + # Manually set the subject's value + chart_type_subject.set_int(1) + + label = lv.label(scr) + label.set_grid_cell(lv.GRID_ALIGN.START, 1, 1, lv.GRID_ALIGN.CENTER, 0, 1) + + # Apply styles on main part and default state + label.set_style_bg_opa(lv.OPA._70, 0) + label.set_style_bg_color(c1, 0) + label.set_style_text_color(c2, 0) + label.add_style(style_big_font, 0) + + # Declare an array of strings + btnmatrix_options = ["First", "Second", "\n", "Third", ""] + + btnmatrix_ctrl = [lv.buttonmatrix.CTRL.DISABLED, + 2 | lv.buttonmatrix.CTRL.CHECKED, 1] + + btnmatrix = lv.buttonmatrix(scr) + btnmatrix.set_grid_cell( + lv.GRID_ALIGN.STRETCH, + 1, + 1, + lv.GRID_ALIGN.STRETCH, + 1, + 1 + ) + # Pass string and enum arrays + btnmatrix.set_map(btnmatrix_options) + btnmatrix.set_ctrl_map(btnmatrix_ctrl) + # Add style to non main part and non default state + btnmatrix.add_style(style_big_font, lv.PART.ITEMS | lv.STATE.CHECKED) + + btnmatrix.set_selected_button(1) + btnmatrix.add_event_cb( + lambda _: buttonmatrix_event_cb(btnmatrix, label), + lv.EVENT.VALUE_CHANGED, + None + ) + btnmatrix.send_event(lv.EVENT.VALUE_CHANGED, None) + + # Create a base object + cont = lv.obj(scr) + # Span 2 rows + cont.set_grid_cell(lv.GRID_ALIGN.STRETCH, 2, 1, lv.GRID_ALIGN.STRETCH, 0, 2) + + # Apply flex layout + cont.set_flex_flow(lv.FLEX_FLOW.COLUMN) + + btn1 = list_button_create(cont) + btn2 = list_button_create(cont) + btn3 = list_button_create(cont) + btn4 = list_button_create(cont) + btn5 = list_button_create(cont) + btn6 = list_button_create(cont) + btn7 = list_button_create(cont) + btn8 = list_button_create(cont) + btn9 = list_button_create(cont) + btn10 = list_button_create(cont) + + a = lv.anim_t() + a.init() + a.set_var(btn1) + a.set_values(lv.OPA.COVER, lv.OPA._50) + a.set_custom_exec_cb(lambda _, v: opa_anim_cb(btn1, v)) # Pass a callback + a.set_time(300) + a.set_path_cb(lv.anim_t.path_ease_out) + a.start() + + btn2.add_flag(lv.obj.FLAG.HIDDEN) + + btn_label = btn3.get_child(0) + btn_label.set_text("A multi-line text with a ° symbol") + btn_label.set_width(lv.pct(100)) + + a = lv.anim_t() + a.init() + a.set_var(btn4) + a.set_values(lv.OPA.COVER, lv.OPA._50) + a.set_custom_exec_cb(lambda _, v: opa_anim_cb(btn4, v)) # Pass a callback + a.set_path_cb(lv.anim_t.path_ease_out) + a.set_time(300) + a.set_repeat_count(lv.ANIM_REPEAT_INFINITE) + a.start() + + # Wait and delete the button with the animation + + cont.get_child(3).delete() + # Large byte array + + canvas_buf = bytearray(CANVAS_BUF_SIZE(400, 100, 16, 1)) + + canvas = lv.canvas(scr) + canvas.set_grid_cell(lv.GRID_ALIGN.START, 0, 2, lv.GRID_ALIGN.START, 2, 1) + # Test RGB565 rendering + canvas.set_buffer( + lv.draw_buf_align(canvas_buf, lv.COLOR_FORMAT.RGB565), + 400, + 100, + lv.COLOR_FORMAT.RGB565 + ) + canvas.fill_bg(c2, lv.OPA.COVER) + draw_to_canvas(canvas) + + test_img_lvgl_logo_jpg_data = ( + b'\xFF\xD8\xFF\xE0\x00\x10\x4A\x46\x49\x46\x00\x01\x01\x01\x01\x2C\x01\x2C\x00\x00\xFF\xFE\x00\x13\x43\x72\x65\x61\x74\x65\x64\x20\x77\x69\x74\x68\x20\x47\x49\x4D\x50\xFF\xDB\x00\x43\x00\x08\x06\x06\x07\x06\x05\x08\x07\x07\x07\x09\x09\x08\x0A\x0C\x15\x0E\x0C\x0B\x0B\x0C\x19\x12\x13\x0F\x15\x1E\x1B\x20\x1F\x1E\x1B\x1D\x1D\x21\x25\x30\x29\x21\x23\x2D\x24\x1D\x1D\x2A\x39\x2A\x2D\x31\x33\x36\x36\x36\x20\x28\x3B\x3F\x3A\x34\x3E\x30\x35\x36\x33\xFF\xDB\x00\x43\x01\x09\x09\x09\x0C\x0B\x0C\x18\x0E\x0E\x18\x33\x22\x1D\x22\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33' + b'\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\xFF\xC0\x00\x11\x08\x00\x21\x00\x69\x03\x01\x11\x00\x02\x11\x01\x03\x11\x01\xFF\xC4\x00\x1F\x00\x00\x01\x05\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\xFF\xC4\x00\xB5\x10\x00\x02\x01\x03\x03\x02\x04\x03\x05\x05\x04\x04\x00\x00\x01\x7D\x01\x02\x03\x00\x04\x11\x05\x12\x21\x31\x41\x06\x13\x51\x61\x07\x22\x71\x14\x32\x81\x91\xA1\x08\x23\x42\xB1\xC1\x15\x52\xD1\xF0\x24\x33\x62\x72\x82\x09\x0A\x16\x17\x18\x19\x1A\x25\x26\x27\x28\x29\x2A\x34\x35\x36\x37\x38\x39\x3A\x43\x44\x45\x46\x47\x48\x49\x4A\x53\x54\x55' + b'\x56\x57\x58\x59\x5A\x63\x64\x65\x66\x67\x68\x69\x6A\x73\x74\x75\x76\x77\x78\x79\x7A\x83\x84\x85\x86\x87\x88\x89\x8A\x92\x93\x94\x95\x96\x97\x98\x99\x9A\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFF\xC4\x00\x1F\x01\x00\x03\x01\x01\x01\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\xFF\xC4\x00\xB5\x11\x00\x02\x01\x02\x04\x04\x03\x04\x07\x05\x04\x04\x00\x01\x02\x77\x00\x01\x02\x03\x11\x04\x05\x21\x31\x06\x12\x41' + b'\x51\x07\x61\x71\x13\x22\x32\x81\x08\x14\x42\x91\xA1\xB1\xC1\x09\x23\x33\x52\xF0\x15\x62\x72\xD1\x0A\x16\x24\x34\xE1\x25\xF1\x17\x18\x19\x1A\x26\x27\x28\x29\x2A\x35\x36\x37\x38\x39\x3A\x43\x44\x45\x46\x47\x48\x49\x4A\x53\x54\x55\x56\x57\x58\x59\x5A\x63\x64\x65\x66\x67\x68\x69\x6A\x73\x74\x75\x76\x77\x78\x79\x7A\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x92\x93\x94\x95\x96\x97\x98\x99\x9A\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFF\xDA\x00\x0C\x03\x01\x00\x02\x11\x03' + b'\x11\x00\x3F\x00\x4F\x11\xFC\x6B\xF1\x25\x8F\x89\x35\x2B\x2B\x2B\x7B\x04\xB7\xB6\xB9\x78\x50\x49\x13\x33\x10\xAC\x57\x24\xEE\x1D\x71\x9A\x00\xCB\xFF\x00\x85\xEB\xE2\xEF\xF9\xE7\xA6\xFF\x00\xDF\x86\xFF\x00\xE2\xA9\x88\xD7\xF0\xE7\xC5\x5F\x1B\xF8\x9B\x57\x5D\x36\xD6\x4D\x0E\x09\x59\x19\xC3\xDC\xC6\xC8\xB8\x03\x3D\x77\x1E\x69\x0C\xF5\x4F\x87\xFE\x25\xBB\xF1\x4F\x84\xE3\xD4\x6F\xA3\x85\x2E\x44\xAF\x14\x9E\x47\xDC\x62\xA7\x19\x1C\x9A\x00\xD7\xD0\xB5\xBB\x5F\x11\x69\x11\x6A\x56\x42\x41\x04\x8C\xCA\xA2\x45\xC3\x65\x58\xA9\xE3\xEA\x0D\x00\x26\xB9\xAE\xDA\x78\x7A\xCE\x2B\xBB\xE1\x20\xB7\x79\xD2\x16\x91\x14\x11\x19\x63\x80\xCD\xCF\x0B\x9C\x73' + b'\xEF\x40\x1A\x74\x01\x43\x5A\xD6\x2D\x34\x0D\x22\xE3\x53\xBE\x66\x10\x42\x01\x21\x46\x59\x89\x38\x00\x0E\xE4\x92\x00\x14\x00\xEB\xCD\x56\xCF\x4D\xD3\x0E\xA3\xA8\xCE\xB6\x76\xEA\xA1\x9D\xA7\x21\x76\xE7\xB1\xF7\xF6\x14\x01\xCE\xAF\xC4\x0B\x69\xD7\xCD\xB4\xD0\x7C\x43\x75\x6D\xD4\x5C\x45\xA7\xB6\xC2\x3D\x40\x24\x12\x3E\x82\x80\x36\xB4\x4F\x11\xE9\x7E\x21\x8A\x47\xD3\xEE\x0B\x3C\x27\x6C\xD0\xC8\x86\x39\x62\x3E\x8C\x8D\x82\x28\x01\xE9\xAD\xDA\xC9\xE2\x29\xB4\x35\x12\x7D\xAE\x2B\x65\xB9\x63\xB7\xE5\xD8\x58\xA8\xE7\xD7\x20\xD0\x06\x95\x00\x14\x01\xF3\x87\x88\x6F\x3C\x26\x3C\x49\xAA\x09\xFC\x20\x25\x98\x5D\xCA\x1E\x4F\xED\x29\x57\x7B\x6F\x39' + b'\x38\x1C\x0C\x9E\x71\x5C\x13\xC6\xB8\xC9\xAB\x6C\x7D\x66\x1F\x86\x63\x56\x94\x6A\x7B\x4B\x5D\x27\xB7\x75\xEA\x72\x3E\x3C\xD2\xAC\xB4\x5F\x18\xDE\xD8\xE9\xD1\x34\x56\x88\x23\x68\xE3\x67\x2D\xB7\x74\x6A\xC4\x64\xF2\x79\x26\xBB\xD3\xBA\x3E\x52\x4B\x96\x4D\x1C\xE5\x32\x4F\xA6\x7E\x09\x7F\xC9\x37\x8F\xFE\xBE\x65\xFE\x62\x90\xCD\x4F\x85\x5F\xF2\x4F\x6C\x7F\xEB\xB4\xFF\x00\xFA\x39\xE8\x03\xA4\xD6\xB4\xAB\x7D\x73\x44\xBC\xD2\xEE\x86\x61\xBA\x89\xA3\x6F\x6C\xF4\x23\xDC\x1C\x1F\xC2\x80\x31\xBC\x05\xAA\xDC\x6A\x1E\x1C\x16\x97\xE7\xFE\x26\x7A\x64\x8D\x65\x76\x0F\x52\xE9\xC0\x6F\xF8\x12\xE0\xFE\x34\x01\x4F\x5C\xFF\x00\x8A\x8B\xC7\x3A\x66\x82\xBF' + b'\x35\x9E\x98\x06\xA1\x7D\xE8\x5F\xA4\x28\x7F\x1C\xB6\x3D\x85\x00\x45\x35\xB4\x7E\x27\xF8\x9F\x3D\xB5\xE8\x12\xD8\xE8\x16\xF1\x49\x1D\xBB\x0C\xAB\x5C\x49\x92\x1C\x8E\xFB\x54\x71\xE8\x4D\x00\x77\x34\x01\x02\x2D\xAA\xDE\x4A\xD1\xAC\x22\xE5\x95\x7C\xD2\xB8\xDE\x40\xE9\x9E\xF8\xE4\xE2\x80\x39\x3B\x5F\xF9\x2C\x7A\x87\xFD\x81\x61\xFF\x00\xD1\xAD\x40\x1D\x9D\x00\x14\x01\xF3\xC6\xBD\xFF\x00\x08\x5F\xFC\x24\x5A\x9F\xDA\x06\xBF\xE7\xFD\xAE\x5F\x33\xCB\x30\xED\xDD\xBC\xE7\x19\xE7\x19\xAF\x26\xA7\xB1\xE7\x77\xBF\xE0\x7E\x87\x83\xFE\xD2\xFA\xBD\x3E\x4E\x4B\x59\x5A\xFC\xD7\xB5\x89\xBC\x79\x61\xE0\xC9\xBC\x5D\x73\x26\xA0\x75\xE1\x72\x63\x8B\x7F\xD9' + b'\xCC\x3B\x31\xE5\xAE\x31\xBB\x9E\x98\xCF\xBD\x76\x4F\x15\x0A\x6F\x95\xA3\xE6\xB0\xD9\x0E\x23\x17\x4F\xDB\x46\x49\x27\x7E\xFD\xFD\x0E\x1B\xC6\x7A\x06\x9D\xA1\x5D\x69\xAD\xA5\xCD\x75\x25\xA5\xF5\x92\xDC\xA8\xBA\xDB\xBD\x72\xCC\x30\x76\xF1\xFC\x35\xD3\x09\x29\xC5\x49\x1E\x3E\x26\x84\xB0\xF5\x65\x4A\x5B\xA7\x63\xDC\xFE\x09\x7F\xC9\x37\x8F\xFE\xBE\x65\xFE\x62\x99\x89\xA1\xF0\xB2\x68\x93\xE1\xFD\x92\xB4\xA8\x0F\x9D\x3F\x05\x87\xFC\xF6\x7A\x00\xED\x16\x68\x9D\xB6\xAC\x88\xC7\xD0\x30\x34\x01\xC2\x6B\x97\x90\x78\x27\xC7\x2B\xAE\x5C\x37\x95\xA4\xEB\x10\x18\x6E\xDB\xB2\x4F\x1A\x96\x46\xFA\xB2\x82\xBF\x80\xA0\x0D\x3F\x00\xD9\x4E\x34\x79\xB5\xBB' + b'\xF4\x2B\xA8\x6B\x33\x1B\xB9\x41\xEA\x88\x78\x8D\x3F\xE0\x29\x8F\xCC\xD0\x05\x1D\x66\x56\xF0\x87\x8D\x9B\xC4\x73\x46\xCD\xA3\x6A\x50\x25\xBD\xF4\xA8\xA5\x8D\xBC\x88\x4E\xC9\x1B\x1F\xC2\x41\x20\x9E\xD4\x01\xD8\x5B\x6A\x36\x37\x96\xCB\x73\x6D\x79\x04\xD0\x30\xC8\x92\x39\x03\x29\x1F\x51\x40\x1C\x96\x83\x79\x6D\xA8\x7C\x4D\xF1\x0D\xC5\x9C\xF1\xDC\x40\x96\x56\xD1\x34\x91\x36\xE5\x0E\x0B\xE5\x72\x38\xC8\xC8\xE2\x80\x16\x09\x12\x3F\x8C\x5A\x81\x77\x55\x1F\xD8\xB0\xF5\x38\xFF\x00\x96\xAD\x40\x1D\x8F\xDA\x20\xFF\x00\x9E\xD1\xFF\x00\xDF\x42\x80\x1D\xBD\x3F\xBE\xBF\x9D\x00\x79\x46\xA9\xF0\x6A\x6D\x47\x56\xBC\xBD\x1A\xDA\x20\xB8\x9D\xE5\x08\x6D' + b'\x89\xDB\xB9\x89\xC6\x77\x7B\xD7\x04\xF0\x5C\xD2\x6F\x98\xFA\xCC\x3F\x13\x46\x95\x28\xD3\xF6\x57\xB2\x4B\x7E\xCB\xD0\xB7\xE2\x3F\x84\xD2\xEB\xDA\xDC\xBA\x82\xEB\x09\x08\x91\x11\x76\x1B\x72\xD8\xDA\x81\x7A\xEE\xF6\xAA\xAB\x84\xE7\x97\x35\xCC\x70\x3C\x42\xB0\xB4\x15\x2F\x67\x7B\x5F\xAF\x77\x7E\xC5\x4F\x12\x7C\x1A\x97\x5E\x8F\x49\x55\xD6\xD2\x13\x61\x64\xB6\xA4\x9B\x62\xDB\xF0\xCC\x77\x7D\xEE\x3E\xF7\x4A\xEA\xA7\x1E\x48\xA8\xF6\x3C\x1C\x5D\x7F\xAC\x57\x9D\x5B\x5B\x99\xDC\xEE\x3C\x15\xE1\x64\xF0\x7F\x86\x61\xD2\x16\xE4\xDC\x95\x66\x77\x94\xAE\xDD\xC5\x8F\x61\x93\x81\x56\x73\x91\x37\xC3\xCF\x08\x33\x16\x6F\x0F\x58\x12\x4E\x49\x31\x75\xA0' + b'\x0B\x7A\x6F\x83\xFC\x3B\xA3\xDE\xAD\xE6\x9D\xA3\xDA\x5A\xDC\xA8\x20\x49\x12\x60\x80\x7A\xD0\x05\xFD\x4F\x4A\xB0\xD6\x6C\xCD\xA6\xA5\x69\x15\xD5\xB9\x60\xC6\x39\x57\x23\x23\xA1\xA0\x0B\x6A\xA1\x54\x2A\x80\x00\x18\x00\x76\xA0\x01\x95\x5D\x4A\xB2\x86\x52\x30\x41\x19\x06\x80\x39\xB9\xBE\x1E\xF8\x42\x79\xCC\xD2\x78\x7A\xC3\x79\x39\x38\x88\x00\x4F\xD0\x71\x40\x1B\xB6\x56\x16\x9A\x6D\xAA\xDB\x58\xDA\xC3\x6D\x02\x7D\xD8\xE1\x40\x8A\x3F\x01\x40\x19\xDA\xA7\x84\xBC\x3F\xAD\xDD\x8B\xBD\x4F\x49\xB5\xBB\xB8\x0A\x10\x49\x2A\x64\xED\x1D\x07\xEA\x68\x02\x8F\xFC\x2B\xBF\x07\xFF\x00\xD0\xBB\x61\xFF\x00\x7E\xA8\x03\x73\xFB\x32\xCB\xFE\x7D\xD2\x80\x2D' + b'\xD0\x01\x40\x05\x00\x14\x00\x50\x01\x40\x05\x00\x14\x00\x50\x01\x40\x05\x00\x14\x00\x50\x01\x40\x1F\xFF\xD9' + ) + + test_img_lvgl_logo_jpg = lv.image_dsc_t( + dict( + header=dict(cf=lv.COLOR_FORMAT.RAW_ALPHA, w=105, h=33), + data_size=1947, + data=test_img_lvgl_logo_jpg_data + ) + ) + + img = lv.image(scr) + img.set_src(test_img_lvgl_logo_jpg) + img.align(lv.ALIGN.BOTTOM_RIGHT, -20, -20) + img.add_flag(lv.obj.FLAG.IGNORE_LAYOUT) + + img = lv.image(scr) + img.set_src("A:test_img_lvgl_logo.png") + img.set_pos(500, 420) + img.add_flag(lv.obj.FLAG.IGNORE_LAYOUT) + img.set_rotation(200) + img.set_scale_x(400) + + +@test_func_wrapper +def chart_type_observer_cb(chart, subject): + v = subject.get_int() + # chart = observer.get_target() + chart.set_type(lv.chart.TYPE.LINE if v == 0 else lv.chart.TYPE.BAR) + + +@test_func_wrapper +def buttonmatrix_event_cb(buttonmatrix, label): + # label = e.get_user_data() + # buttonmatrix = e.get_target() + idx = buttonmatrix.get_selected_button() + text = buttonmatrix.get_button_text(idx) + label.set_text(text) + + +@test_func_wrapper +def list_button_create(parent): + btn = lv.button(parent) + btn.set_size(lv.pct(100), lv.SIZE_CONTENT) + + # Get an integer + idx = btn.get_index() + + # Formatted string for label + label = lv.label(btn) + label.set_text(lv.SYMBOL.FILE + " Item %d" % idx) + + return btn + + +@test_func_wrapper +def opa_anim_cb(button, value): + try: + button.set_style_opa(value, 0) + except: # NOQA + pass + + +@test_func_wrapper +def draw_to_canvas(canvas): + layer = lv.layer_t() + canvas.init_layer(layer) + + # Use draw descriptors + + test_img_lvgl_logo_png_data = ( + b'\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x69\x00\x00\x00\x21\x08\x06\x00\x00\x00\xDA\x89\x85\x3B\x00\x00\x00\x06\x62\x4B\x47\x44\x00\x00\x00\x00\x00\x00\xF9\x43\xBB\x7F\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x2E\x23\x00\x00\x2E\x23\x01\x78\xA5\x3F\x76\x00\x00\x00\x07\x74\x49\x4D\x45\x07\xE7\x09\x12\x12\x25\x07\x59\xA0\x4E\xA5\x00\x00\x00\x19\x74\x45\x58\x74\x43\x6F\x6D\x6D\x65\x6E\x74\x00\x43\x72\x65\x61\x74\x65\x64\x20\x77\x69\x74\x68\x20\x47\x49\x4D\x50\x57\x81\x0E\x17\x00\x00\x06\xB9\x49\x44\x41\x54\x68\xDE\xED\x9A\x7F\x8C\x5D\x45\x15\xC7\x3F\xE7\xBE\xF7\x76\xA9\x20\x18\x03\x9A\x6A\x77\xE6\xDD' + b'\xB7\x6B\x8A\x49\xC3\x1A\xB5\x25\x80\xB5\xE2\x6A\x2B\x0D\x46\x71\x89\x8A\xBF\x48\x4C\xD5\xD4\x46\x08\x58\x48\x10\xC5\xE8\x3F\xA6\x68\x6B\xE4\x0F\x85\x22\x68\x53\x6D\x9A\x40\x31\x40\xC0\x92\xB6\xD0\x62\x53\x4A\xAC\x44\xA2\xAD\xA4\x76\xF7\xDE\xB9\xAF\x3F\x0C\x0A\xD2\x96\x6D\xD9\xDD\xB7\xF7\xF8\xC7\x9B\xCA\x76\xF7\xFD\x5C\x77\xDD\xD7\xE4\x7D\x93\x97\x97\xB9\x33\x77\x66\xCE\xF9\xCE\x39\x73\xE6\xCC\x85\x36\xDA\x68\xE3\x7F\x87\x00\x98\x7C\xBE\x13\x95\xE5\x40\x0F\x5A\x7E\x36\x8D\x23\x0C\xA1\x6C\x4D\x92\x68\xA0\xAD\xEE\x29\xAA\xD0\x5A\x13\x28\x99\xCD\xC0\xF5\x67\x48\x9B\x01\x9C\x00\x96\x26\x2E\x7A\xBE\xAD\xF2\xE6\x91\x85\xCC\x42\xA0\x7F\x06' + b'\x08\x2A\x01\x81\xFF\x5D\x08\xDC\x02\x7C\x7E\x7C\x83\xAE\xAE\x82\x48\xA0\x9D\x80\x04\xA2\xC3\x71\x1C\xA7\xF5\x3A\x35\xB6\x90\x45\x35\x07\x68\x92\x44\x6F\x4C\x75\x72\xF3\xC2\x30\x08\x52\x3A\x01\x4D\x5C\xFD\x7E\xAC\x0D\x73\xAA\xBC\x05\xD1\x9C\x57\xD5\x88\xA2\xA7\x8B\x2E\x1E\x6D\x64\x3C\x6B\x0B\x19\x55\xED\x40\x34\x4D\x5C\x3C\xDC\xCC\x5C\x03\x85\x8B\xBD\x22\xA7\x13\x03\xC0\xE5\xC0\xA7\x80\xD3\xFE\xD9\x3B\x27\x99\xB1\xF0\x56\xE0\x79\xE0\x40\xAA\xD2\xDB\x58\xD7\xDA\x8B\xB0\x1F\xE1\xAF\xC6\x86\xF3\xA7\xEC\x42\x52\xBE\x08\xBC\x04\x3C\x62\xF2\x85\x6C\x45\x22\x4D\x3E\x6B\x6C\xF8\x31\x63\xC3\x5F\x2B\xBC\x88\x30\x08\x52\x04\x8A\xC0\xA0\x20\x7F' + b'\x36\x36\x7C\xC0\xD8\x70\x89\xC9\x87\x99\x9A\xB3\x46\xAF\x43\x78\x09\xE4\x31\x63\xC3\x6C\x53\x24\xCD\x90\x85\x3E\x9B\xB8\xE8\x05\xA1\xF4\x24\x70\xAC\xCE\xF8\xEF\x06\x8C\x22\xB9\x86\x28\x4A\xF5\x45\xE0\x35\xA0\x1B\x58\x31\x95\xC9\x19\x53\xC8\x08\x7C\x0B\x30\xC0\x13\x49\x3C\x58\x9A\x68\xE1\xC6\x86\x57\x07\x22\x7B\x80\x6D\xC0\x8D\xC0\x7C\x20\x07\xFC\xC3\xCB\x94\xF5\xCF\xBE\x0A\xEC\x44\x79\xDA\xD8\xB0\xD6\x42\x9B\xE3\xC7\x9B\xAB\xA2\xB4\x02\x49\xFD\xC6\x86\xB7\x2B\xD9\xB5\x80\x9D\xCE\x8E\x8B\xC5\xB8\x04\xFC\xD8\x17\x57\xD8\x7C\x78\x49\xB3\x7D\xA8\x68\x1F\xB0\x10\x38\x26\xE8\x86\xB3\x09\xCC\x8B\x04\x7A\x07\xF0\xD4\x99\x36\xC0\xF7\x80\x45' + b'\x88\xBE\x23\x71\x51\x98\xB8\xA8\xA0\xA2\x97\x80\xF6\x02\xB7\x01\x09\xF0\x61\xE0\x59\x63\xC3\x65\x33\xB0\x27\xCD\x08\x2E\x04\xD6\xCC\xD8\x4E\xAA\x3C\x86\x10\x03\x79\x55\xBE\x0C\xAC\x6B\xF4\x55\x6B\xC3\x40\xE1\x26\x5F\x7C\xD0\xB9\xF8\xF5\x71\xFB\x94\x90\xF2\x5D\xE0\x87\x80\x02\xBF\x50\xE1\x8E\x62\x1C\x1D\x9F\xB4\x58\xE2\x78\x14\xD8\x0F\xEC\x37\xA6\x70\x1F\xA2\x6B\x80\x65\x40\x34\xDD\xE2\x06\xC0\xCB\x40\xCA\x39\x84\x24\x89\x86\x80\xFB\x7D\x71\xA5\xB5\xB6\xA3\x71\x7E\xB9\xD4\x2B\xF3\x34\x70\xEF\x59\xCA\x48\xE9\x03\xEE\xF2\xC5\xEF\xA8\xE8\xAA\x4A\x04\x4D\x9E\xCF\xE0\x49\x90\x55\x22\xB2\x30\x71\xD1\xC1\x69\xB7\xA4\x4C\x90\xEE\x2B\x8D\x05' + b'\xBD\x12\xC8\xDC\x2A\x62\x65\x51\xBE\x06\x5C\xD7\x4A\x44\xA9\x72\x9F\x08\xAB\x81\x1E\x25\xB8\x1E\xD8\xD4\xE0\xAB\xAB\xBD\x07\xD9\x90\xB8\xE8\xF0\x9B\x51\xA3\xED\x04\xD6\xFA\xBA\x8D\x28\x6B\x8A\x2E\x6E\x78\xF3\x48\xDC\xA0\x02\xAF\xCE\x48\x08\xBE\x35\x72\x73\xB4\x1C\x89\x9D\x57\x79\xE1\xF1\xF8\x52\x1B\xFE\xC0\x47\x6A\x41\xAB\x90\x54\x4C\xA2\x57\x8C\x0D\x37\x03\x2B\x81\x6F\x74\xF7\xBC\x67\xF3\xC0\xA1\xBF\xA7\xB5\xC3\xF7\xF0\x5D\xFE\xB8\x51\x9A\x68\x45\x10\x7C\x04\xB8\x0C\x18\x42\xB9\x33\x49\x22\x6D\x15\x59\xB3\x0A\x4B\x80\x5F\xD6\x68\x93\x57\xD8\x20\x65\xC2\x5A\x0D\x3F\xF5\x11\xDE\xE2\xD1\x91\xD2\x95\xC0\xEE\x3A\xED\xBF\xEE\xF7\xCB\xA7' + b'\x12\x17\xED\x9B\x50\xF7\x05\xFF\xFF\x50\x92\x44\xC5\x56\x12\x32\x68\xC0\x3A\x02\x5A\x15\x2A\x87\x80\x47\x01\x41\xB8\x79\x5E\x97\x91\x1A\x01\xC3\x45\x9E\xA4\x14\xF8\xD9\xF8\xBA\x8B\xBB\x17\x08\xB0\xC8\x17\x9F\x6E\x35\x31\x5B\x97\x80\x86\x02\x88\x41\x05\x7E\xEE\xDD\xF2\xB5\x22\xD9\x7C\x8D\x80\xA1\x1F\x98\x0B\xFC\x2D\x95\x74\xFB\xF8\xBA\xF3\x4B\xA7\x2E\xA0\x7C\xA8\x4F\x81\x43\x6D\x92\xA6\x19\x63\xA3\x23\x3B\x81\xE7\x80\xF3\x44\xF4\x96\x4A\x6D\xBA\x0A\x61\xCE\x07\x0C\x00\x6B\x0F\xC7\xEE\xAC\x54\x4E\x0A\x19\xAF\x0B\x05\x86\xA7\x32\x0F\x63\xC3\x15\xC6\x86\x1B\x8D\x0D\xFB\xDB\x24\x4D\xC0\x91\xA3\x47\xC6\x5B\xD3\x0D\xC6\x16\xDE\x3E\x29\x05' + b'\x34\xC6\x32\x9F\x1D\x38\x2A\x2A\x5B\x26\xD6\x67\x44\x87\x81\x51\xAF\x8F\x8B\xA6\x38\x95\xCB\x81\x2F\xF9\xE0\xA3\x4D\xD2\x24\x12\x08\xB6\x00\xAE\xEC\xB2\xF4\xC6\x0A\x4D\x6E\xF2\xB2\xAE\x77\xC9\xE0\x89\x89\x95\x71\x1C\x9D\xF6\xEF\x0B\xB0\xA0\x15\xDD\x5D\xBD\x2C\xEE\x28\xC2\x49\x60\xA4\x55\x49\x72\x6E\xE0\x8D\x71\xC1\xC0\x2A\x6B\xED\x9C\x71\x6E\x68\x11\xF0\x51\xE0\x84\x0A\xEB\x6B\x74\xF3\x8C\xFF\xFF\x4C\xAB\xC9\x97\x55\x78\x46\xE0\x9A\x2A\xE7\xA4\x14\xF8\x83\xA0\xAF\x81\x5C\xA1\x10\x56\x5E\xC9\x04\x94\xEF\xA3\x6E\x98\xC5\x48\x6F\x13\xA2\xDF\x07\x0A\x4A\x70\x0D\xF0\xC8\x99\x8C\x04\xE5\x3D\x67\x4B\x31\x8E\x8E\xD5\x48\x45\xFC\x06\xE1\x56' + b'\x60\xB1\xB1\xE1\x92\xC4\x45\xBB\x5A\x86\xA4\x71\x7E\x78\x4E\x25\x92\x14\x3A\xB6\xC7\x71\x90\x96\x09\x7A\x5B\x95\x03\xEF\xAE\x3E\xD3\xBD\x2B\x23\x69\x3F\xD0\x31\x1B\x82\x24\xC9\xE0\xCB\xC6\x86\x0F\x00\xDF\x06\x6E\xEB\xE9\x9E\xFF\xBB\xE1\xD2\x48\x17\xE5\x3B\xAC\x12\xF0\x93\x9A\x2E\x25\xE0\x40\xAA\x3C\x01\x7C\x1A\xB8\xA7\xCB\x14\x16\x17\x2B\xB8\xC6\x59\x21\x49\xE0\x6A\x60\x73\x75\x7F\xCF\xDD\x29\xFC\x0A\x78\xD8\xAF\xC8\x4A\xD8\x74\xA4\x23\xB3\xD2\x8C\xA6\xB3\x9B\x03\x54\xD6\x23\x7C\x13\x58\x38\x52\x1A\xB9\x4A\xE0\x5A\xEF\x21\x9E\x94\xF2\xDD\x51\x55\xC4\x71\x94\x5A\x1B\xDE\xAC\x70\x25\x70\x99\x88\x3E\x64\x6C\xFE\xB3\x89\x8B\x8F\xCF\x36' + b'\x49\x41\x0D\xC5\xBF\x19\xFC\xD4\x6F\x93\x6D\x85\x15\x97\x24\xD1\x41\x60\xAB\x97\xE9\x76\xE0\x2B\xBE\xEA\x1E\xE7\xA2\xBA\x0B\xC8\xB9\x28\x01\x3E\x07\x9C\x04\x96\x82\x3C\x67\x6C\xD8\x67\x4C\x4F\xA6\x7A\xE8\x5D\x08\x8C\x0D\xDF\x0F\x7C\x68\x26\xDD\x5D\x4B\x04\x68\x82\x5E\x65\x6C\xBE\xD1\xBB\xA1\xE3\x89\x8B\x77\x57\xB1\xFC\x35\x5A\xCE\x33\x7E\xD2\x3F\xDA\x97\xCB\xE5\xB6\x37\x4C\xB4\x8B\x76\x1A\x1B\x2E\x05\x7E\x0B\xBC\x17\xD8\x86\x8C\xED\x35\x36\xFC\x3D\xC8\x1F\x11\x2D\xA2\xAA\xA8\xCC\x45\x78\x1F\xE8\xC7\x81\x3E\xAF\xCB\x18\x78\xBC\xCE\x10\x17\x88\xB2\xDC\xD8\xFC\x58\x63\xCE\x41\x0E\xB4\x0C\x49\xC0\xBA\x26\x3E\xB3\x78\x01\xF8\x40\x15\xA9' + b'\xFE\x84\xB0\x97\xB2\xDB\x02\xB8\x77\xE0\xD0\xC1\xB1\xA6\x2C\xD2\x45\x7B\x4D\x3E\xFC\x20\xCA\x6A\x9F\x4A\xBA\xA2\xFC\x53\x9F\xC1\x94\x89\x53\xFD\x27\x70\xBF\x90\xAE\x73\xCE\xBD\x52\xA7\xFB\x10\xE4\xD1\x26\x14\x73\x6B\x76\x76\xCD\x27\x1D\x51\x64\x23\x70\x7E\x93\xAF\x56\x4D\x80\xBA\x24\x2A\x19\x1B\xDE\xE5\xDD\x56\x49\x48\x37\x4D\xC9\x75\xC6\xD1\xBF\x81\x3B\x8D\xC9\xFF\x08\x91\x4F\x78\xA2\x7A\x7C\x90\x75\xE6\x5A\x62\x00\xD8\x13\x08\xDB\xE2\x38\x1A\xAA\x63\x12\x03\xC8\x7F\xEF\xC0\x9A\x59\xBD\x7F\xF9\x7F\x92\x94\x4C\xDE\x03\xE2\x53\x94\xBF\x22\x9A\xDE\x81\x5C\xB4\x03\xD8\x31\x3D\xFB\x5C\xFC\xBA\x0F\x9A\x1E\x9E\x37\x2F\x94\x20\x53\x3E\x99' + b'\x24\xCE\x69\x73\xFD\x44\x7B\x80\x3D\x53\xDD\x93\x4A\xF5\xD2\x63\x0A\xF5\xDC\x45\x89\x52\xA9\x04\x0C\x55\x39\x6F\x1D\x05\xEE\x3E\xD7\x33\x1B\x87\x0F\xCF\xCE\x1D\x93\x1C\x84\xCE\xB4\xBC\xC9\x76\x56\x39\x03\xED\x50\xF8\x97\xC0\x72\xCA\x77\x31\x95\xB0\xFB\x52\x70\xC6\xE4\x7B\x09\x64\xC1\x84\x1E\x4E\x29\xEC\x2A\xBA\xE8\x55\xDA\x68\xA3\x8D\x36\xDA\x68\xA3\x8D\x73\x1A\xFF\x01\xC1\xBA\x4F\x53\x6B\xDA\x6F\x58\x00\x00\x00\x00\x49\x45\x4E\x44\xAE\x42\x60\x82' + ) + + test_img_lvgl_logo_png = lv.image_dsc_t( + dict( + header=dict(cf=lv.COLOR_FORMAT.RAW_ALPHA, w=105, h=33), + data_size=1873, + data=test_img_lvgl_logo_png_data + ) + ) + + image_draw_dsc = lv.draw_image_dsc_t() + + image_draw_dsc.init() + image_draw_dsc.src = test_img_lvgl_logo_png + + coords = lv.area_t( + dict( + x1=10, + y1=10, + x2=10 + test_img_lvgl_logo_png.header.w - 1, + y2=10 + test_img_lvgl_logo_png.header.h - 1 + ) + ) + lv.draw_image(layer, image_draw_dsc, coords) + + # Reuse the draw descriptor + coords.move(40, 40) + image_draw_dsc.opa = lv.OPA._50 + lv.draw_image(layer, image_draw_dsc, coords) + + line_draw_dsc = lv.draw_line_dsc_t() + line_draw_dsc.init() + line_draw_dsc.color = lv.color_hex3(0xCA8) + line_draw_dsc.width = 8 + line_draw_dsc.round_end = 1 + line_draw_dsc.round_start = 1 + line_draw_dsc.p1.x = 150 + line_draw_dsc.p1.y = 30 + line_draw_dsc.p2.x = 350 + line_draw_dsc.p2.y = 55 + lv.draw_line(layer, line_draw_dsc) + + canvas.finish_layer(layer) + + c = lv.color_hex(0xff0000) + for i in range(50): + canvas.set_px(100 + i * 2, 10, c, lv.OPA.COVER) + + +@test_func_wrapper +def main(): + lv.tick_inc(300) + lv.refr_now(None) + + +create_ui() +main() +# end diff --git a/tests/micropy_test/test_img_lvgl_logo.png b/tests/micropy_test/test_img_lvgl_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2484cf84ade58f3533a94166ec9a4d0c0f31ab64 GIT binary patch literal 1873 zcmV-X2d?;uP)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00y~9L_t(&-tC%yj9o<)$3N%3 z_jaiu7z3JWcjn!Wwc=_k4MuT^ioZxq)zn4^SV$1X=s%`tYvd1wB4|@> znm{o?z>>DmVpB@2M53*vcK6=7uRjb5(w1%6-M9Dn$D7J__x)UV-Ph!Olb4sdGk0dr z`OZ0W=FEjQ+Gyi{hX9y-z7v(@Ko44eHjN_;p=?c(XrQg`DXP#~6DXO@!1ZTHn*p2v zmL@KGzOC}+k%i1cpnnDkDglB2T?pI)e13d`uC9Vepq+pOqQh|XBm4Rflz1<{;W)rg{}i!L5*WISsN8CC5-G)-JQ+{|19g^Rr+ zrxOFf<-n(a)Bf2zCz-MER^WNyK&sN)Sl8N%upi;C#)k8!>_Sq$2)qP5V)BJ-MIuc; zYi#&2W5Zu7yofLeQUr>?pdf!XHhjR?aEZx>nVPdkuS0kV*xab9; z^dxYs&iL;Jj3T*)C`$E3;5DEdSTU8!8B@pzd(1pL?+SJ-@bNwa;Z zXdkc;I40+$zfj?hVjLZxv{>SJ z6xa{!H>PkOqHBOZSWGf5(C6jiAZ5Z@4L|h}-r~`b(v`sOI_Lv50#8Dpa(JAvnb^F;KPN^QCdVa^8(0BaA&?yOW! z3K_2p1%{_G4`ag>#)cb>4g1?9O~8?(N5)&z4aOGUJ}Ct>#xkEBI4UYzCe~*}hk;SA zkBg=_mCJ!I`QW2X(j*cHwg9f|vh>CZO>XkCu6N1ciHVhQ9G&*>3$UOS-Ceyb?kK`Z zV5C(^a&F*_alybUYwetIZfFtkQQ(9M>uYrLjQ{^ktI3yDct+rwD(9pW_=BLYfn1>w zR$j>jl<%W%n8iqM6QbV-3QBMd@W`2r1m!(vOEHd))ksDB2H{p*=2VyW!GE7v(#w z67Z9nE+ybVsyqRF8n~y+6c!gNxW-u_N#JT=b9H~u-6{MEc-XJVO4xLyBeT+srn8#^ zRMsPW6IeJ>8o5f~TJIsAl=9tCRm5?WS{vT1a3ye=h(2U&{K^B!x(mp;C;>hPoCKDFJZEg!XG~9~dgxsUj1Aupd}t=! zT}uRLf?j28zR|m(jcKozO}gs_*g z+XA?E;LyRbrYzD$drdz4Aj)c=O1h%_Q=h?