gitextract_9zm7ai3y/ ├── .github/ │ └── workflows/ │ ├── desktop-linux.yml │ └── static.yml ├── .gitignore ├── .gitmodules ├── AGENTS.md ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── docs/ │ ├── amyboard/ │ │ ├── README.md │ │ ├── accessories.md │ │ ├── arduino.md │ │ ├── firmware.md │ │ ├── modular.md │ │ ├── online.md │ │ ├── python.md │ │ └── troubleshooting.md │ ├── getting_started.md │ ├── music.md │ ├── pcbs/ │ │ ├── amyboard/ │ │ │ ├── README.md │ │ │ ├── amyboard-v1.0.brd │ │ │ ├── amyboard-v1.0.sch │ │ │ ├── amyboard-v1.1dpwe.brd │ │ │ ├── amyboard-v1.1dpwe.sch │ │ │ ├── amyboard-v1.4.brd │ │ │ ├── amyboard-v1.4.sch │ │ │ ├── amyboard_front_panel.3mf │ │ │ └── amyboard_front_panel.dxf │ │ ├── tulip4_board_v4r5/ │ │ │ ├── CP2102N-A02-GQFN24.lbr │ │ │ ├── ESP32-S3-WROOM-2-N32R8V.l#1 │ │ │ ├── ESP32-S3-WROOM-2-N32R8V.lbr │ │ │ ├── QFN50P400X400X90-25N.lbr │ │ │ ├── tulip board bom.csv │ │ │ ├── tulip breakout.b#1 │ │ │ ├── tulip breakout.b#2 │ │ │ ├── tulip breakout.b#3 │ │ │ ├── tulip breakout.b#4 │ │ │ ├── tulip breakout.b#5 │ │ │ ├── tulip breakout.b#6 │ │ │ ├── tulip breakout.b#7 │ │ │ ├── tulip breakout.b#8 │ │ │ ├── tulip breakout.b#9 │ │ │ ├── tulip breakout.brd │ │ │ ├── tulip breakout.csv │ │ │ ├── tulip breakout.pro │ │ │ ├── tulip breakout.s#1 │ │ │ ├── tulip breakout.s#2 │ │ │ ├── tulip breakout.s#3 │ │ │ ├── tulip breakout.s#4 │ │ │ ├── tulip breakout.s#5 │ │ │ ├── tulip breakout.s#6 │ │ │ ├── tulip breakout.s#7 │ │ │ ├── tulip breakout.s#8 │ │ │ ├── tulip breakout.s#9 │ │ │ ├── tulip breakout.sch │ │ │ ├── tulip breakout_00.pro │ │ │ ├── tulip breakout_01.pro │ │ │ ├── tulip breakout_02.pro │ │ │ ├── tulip breakout_03.pro │ │ │ ├── tulip4.xlsx │ │ │ └── tulip4r3/ │ │ │ ├── empty.kicad_wks │ │ │ ├── sym-lib-table │ │ │ ├── tulip4r3-eagle-import.kicad_sym │ │ │ ├── tulip4r3.kicad_pcb │ │ │ ├── tulip4r3.kicad_pro │ │ │ └── tulip4r3.kicad_sch │ │ ├── tulip4_board_v4r6/ │ │ │ ├── CP2102N-A02-GQFN24.lbr │ │ │ ├── ESP32-S3-WROOM-2-N32R8V.l#1 │ │ │ ├── ESP32-S3-WROOM-2-N32R8V.lbr │ │ │ ├── QFN50P400X400X90-25N.lbr │ │ │ ├── tulip board.xlsx │ │ │ ├── tulip breakout.b#1 │ │ │ ├── tulip breakout.b#2 │ │ │ ├── tulip breakout.b#3 │ │ │ ├── tulip breakout.b#4 │ │ │ ├── tulip breakout.b#5 │ │ │ ├── tulip breakout.b#6 │ │ │ ├── tulip breakout.b#7 │ │ │ ├── tulip breakout.b#8 │ │ │ ├── tulip breakout.b#9 │ │ │ ├── tulip breakout.brd │ │ │ ├── tulip breakout.pro │ │ │ ├── tulip breakout.s#1 │ │ │ ├── tulip breakout.s#2 │ │ │ ├── tulip breakout.s#3 │ │ │ ├── tulip breakout.s#4 │ │ │ ├── tulip breakout.s#5 │ │ │ ├── tulip breakout.s#6 │ │ │ ├── tulip breakout.s#7 │ │ │ ├── tulip breakout.s#8 │ │ │ ├── tulip breakout.s#9 │ │ │ ├── tulip breakout.sch │ │ │ ├── tulip breakout_00.pro │ │ │ ├── tulip breakout_01.pro │ │ │ ├── tulip breakout_02.pro │ │ │ ├── tulip breakout_03.pro │ │ │ ├── tulip breakout_top_bom.csv │ │ │ ├── tulip breakout_top_cpl.csv │ │ │ └── tulip_board_bom.csv │ │ ├── tulip4_board_v4r7/ │ │ │ ├── CP2102N-A02-GQFN24.lbr │ │ │ ├── ESP32-S3-WROOM-2-N32R8V.l#1 │ │ │ ├── ESP32-S3-WROOM-2-N32R8V.lbr │ │ │ ├── QFN50P400X400X90-25N.lbr │ │ │ ├── tulip board.xlsx │ │ │ ├── tulip breakout.b#1 │ │ │ ├── tulip breakout.b#2 │ │ │ ├── tulip breakout.b#3 │ │ │ ├── tulip breakout.b#4 │ │ │ ├── tulip breakout.b#5 │ │ │ ├── tulip breakout.b#6 │ │ │ ├── tulip breakout.b#7 │ │ │ ├── tulip breakout.b#8 │ │ │ ├── tulip breakout.b#9 │ │ │ ├── tulip breakout.brd │ │ │ ├── tulip breakout.pro │ │ │ ├── tulip breakout.s#1 │ │ │ ├── tulip breakout.s#2 │ │ │ ├── tulip breakout.s#3 │ │ │ ├── tulip breakout.s#4 │ │ │ ├── tulip breakout.s#5 │ │ │ ├── tulip breakout.s#6 │ │ │ ├── tulip breakout.s#7 │ │ │ ├── tulip breakout.s#8 │ │ │ ├── tulip breakout.s#9 │ │ │ ├── tulip breakout.sch │ │ │ ├── tulip breakout_00.pro │ │ │ ├── tulip breakout_01.pro │ │ │ ├── tulip breakout_02.pro │ │ │ ├── tulip breakout_03.pro │ │ │ ├── tulip breakout_top_bom.csv │ │ │ ├── tulip breakout_top_cpl.csv │ │ │ └── tulip_board_bom.csv │ │ ├── tulip4_board_v4r8/ │ │ │ ├── CP2102N-A02-GQFN24.lbr │ │ │ ├── ESP32-S3-WROOM-2-N32R8V.l#1 │ │ │ ├── ESP32-S3-WROOM-2-N32R8V.lbr │ │ │ ├── QFN50P400X400X90-25N.lbr │ │ │ ├── tulip breakout.b#1 │ │ │ ├── tulip breakout.b#2 │ │ │ ├── tulip breakout.b#3 │ │ │ ├── tulip breakout.b#4 │ │ │ ├── tulip breakout.b#5 │ │ │ ├── tulip breakout.b#6 │ │ │ ├── tulip breakout.b#7 │ │ │ ├── tulip breakout.b#8 │ │ │ ├── tulip breakout.b#9 │ │ │ ├── tulip breakout.brd │ │ │ ├── tulip breakout.pro │ │ │ ├── tulip breakout.s#1 │ │ │ ├── tulip breakout.s#2 │ │ │ ├── tulip breakout.s#3 │ │ │ ├── tulip breakout.s#4 │ │ │ ├── tulip breakout.s#5 │ │ │ ├── tulip breakout.s#6 │ │ │ ├── tulip breakout.s#7 │ │ │ ├── tulip breakout.s#8 │ │ │ ├── tulip breakout.s#9 │ │ │ ├── tulip breakout.sch │ │ │ ├── tulip breakout_00.pro │ │ │ ├── tulip breakout_01.pro │ │ │ ├── tulip breakout_02.pro │ │ │ ├── tulip breakout_03.pro │ │ │ ├── tulip breakout_top_bom.csv │ │ │ ├── tulip breakout_top_cpl.csv │ │ │ └── tulip_board_bom.csv │ │ ├── tulip4_board_v4r9/ │ │ │ ├── 3dmodels/ │ │ │ │ ├── 1734827-2.stp │ │ │ │ ├── CAP_WE_865060340001.stp │ │ │ │ ├── CAP_WE_865060345007.stp │ │ │ │ ├── CUI_DEVICES_SJ2-35863B1-SMT-TR.step │ │ │ │ ├── C_0805_2012Metric.step │ │ │ │ ├── C_1210_3225Metric.step │ │ │ │ ├── DFN 8.STEP │ │ │ │ ├── DIP-6-SMD.step │ │ │ │ ├── D_SMA.step │ │ │ │ ├── D_SOD-323.step │ │ │ │ ├── ESP32-S3-WROOM-1.STEP │ │ │ │ ├── HVSSOP-8.STEP │ │ │ │ ├── JS102011JAQN.stp │ │ │ │ ├── MOLEX_217179-0001.stp │ │ │ │ ├── RK10J1_R.step │ │ │ │ ├── R_0805_2012.step │ │ │ │ ├── SOT-223-6.STEP │ │ │ │ ├── SOT-23-3.step │ │ │ │ ├── SOT-23-5.step │ │ │ │ ├── SOT-23-6.wrl │ │ │ │ ├── SOT-363_SC-70-6.step │ │ │ │ ├── SSOP-16_3.9x4.9mm_P0.635mm.step │ │ │ │ ├── SSOP-20_3.9x8.7mm_P0.635mm.step │ │ │ │ ├── TE-1734709-4-b-3d.stp │ │ │ │ ├── TSSOP-20_4.4x6.5mm_P0.65mm.step │ │ │ │ ├── VISHAY_IFSC-1515AH-01.STEP │ │ │ │ └── XF2M_4015_1A.step │ │ │ ├── audio.kicad_sch │ │ │ ├── fp-lib-table │ │ │ ├── interface.kicad_sch │ │ │ ├── mcu.kicad_sch │ │ │ ├── power.kicad_sch │ │ │ ├── sym-lib-table │ │ │ ├── tulip_sch_template.kicad_wks │ │ │ ├── tulipcc-bom.xlsx │ │ │ ├── tulipcc-bottom-pos.csv │ │ │ ├── tulipcc-gerbers/ │ │ │ │ ├── tulipcc-B_Cu.gbl │ │ │ │ ├── tulipcc-B_Mask.gbs │ │ │ │ ├── tulipcc-B_Paste.gbp │ │ │ │ ├── tulipcc-B_Silkscreen.gbo │ │ │ │ ├── tulipcc-Edge_Cuts.gm1 │ │ │ │ ├── tulipcc-F_Cu.gtl │ │ │ │ ├── tulipcc-F_Mask.gts │ │ │ │ ├── tulipcc-F_Paste.gtp │ │ │ │ ├── tulipcc-F_Silkscreen.gto │ │ │ │ ├── tulipcc-NPTH-drl_map.gbr │ │ │ │ ├── tulipcc-NPTH.drl │ │ │ │ ├── tulipcc-PTH-drl_map.gbr │ │ │ │ └── tulipcc-PTH.drl │ │ │ ├── tulipcc-top-pos.csv │ │ │ ├── tulipcc-top-pos.xls │ │ │ ├── tulipcc.kicad_pcb │ │ │ ├── tulipcc.kicad_pro │ │ │ ├── tulipcc.kicad_sch │ │ │ ├── tulipcc.xml │ │ │ ├── tulipcc_footprint_lib.pretty/ │ │ │ │ ├── ALPS_RK10J12R0A0B.kicad_mod │ │ │ │ ├── CAP_WE_865060340001.kicad_mod │ │ │ │ ├── CAP_WE_865060345007.kicad_mod │ │ │ │ ├── CK_JS102011JAQN.kicad_mod │ │ │ │ ├── CON_CUI_SJ2-35863B1-SMT.kicad_mod │ │ │ │ ├── C_0805_2012.kicad_mod │ │ │ │ ├── C_1210_3225.kicad_mod │ │ │ │ ├── D_SMA.kicad_mod │ │ │ │ ├── D_SOD-323.kicad_mod │ │ │ │ ├── ESP32-S3-WROOM-2.kicad_mod │ │ │ │ ├── FB_0805_2012.kicad_mod │ │ │ │ ├── HVSSOP-8-1EP_3x3mm_P0.65mm_EP1.57x1.89mm.kicad_mod │ │ │ │ ├── IND_VD_IFSC-1515AH-01.kicad_mod │ │ │ │ ├── OMRON_XF2M-4015-1A.kicad_mod │ │ │ │ ├── PDIP6-SMD.kicad_mod │ │ │ │ ├── R_0805_2012.kicad_mod │ │ │ │ ├── SOT-223-6.kicad_mod │ │ │ │ ├── SOT-23-3.kicad_mod │ │ │ │ ├── SOT-23-5.kicad_mod │ │ │ │ ├── SOT-23-6.kicad_mod │ │ │ │ ├── SOT-363_SC-70-6.kicad_mod │ │ │ │ ├── SSOP-16_3.9x4.9mm_P0.635mm.kicad_mod │ │ │ │ ├── SSOP-20_3.9x8.7mm_P0.635mm.kicad_mod │ │ │ │ ├── TDFN-8-1EP_2x2mm_P0.5mm_EP0.8x1.2mm.kicad_mod │ │ │ │ ├── TEST_POINT.kicad_mod │ │ │ │ ├── TE_1734709-4.kicad_mod │ │ │ │ ├── TE_17348272.kicad_mod │ │ │ │ ├── TSSOP-20_4.4x6.5mm_P0.65mm.kicad_mod │ │ │ │ ├── UDFN-8-1EP_2x2mm_P0.5mm_EP0.7x1.3mm_1.kicad_mod │ │ │ │ └── USB-C_Molex_217179-0001.kicad_mod │ │ │ └── tulipcc_symbol_lib.kicad_sym │ │ ├── tulip4_breakout_v3/ │ │ │ ├── tulip breakout.brd │ │ │ └── tulip breakout.sch │ │ ├── tulip4_breakout_v4/ │ │ │ ├── tulip breakout.b#1 │ │ │ ├── tulip breakout.b#2 │ │ │ ├── tulip breakout.brd │ │ │ ├── tulip breakout.pro │ │ │ ├── tulip breakout.s#1 │ │ │ ├── tulip breakout.s#2 │ │ │ └── tulip breakout.sch │ │ ├── tulip4_r10/ │ │ │ ├── tulip-matouch-eagle-7.brd │ │ │ └── tulip-matouch-eagle-7.sch │ │ └── tulip4_r11/ │ │ ├── case.lbrn2 │ │ ├── tulipv4_r11.brd │ │ ├── tulipv4_r11.dxf │ │ ├── tulipv4_r11.sch │ │ └── tulipv4_r11_dimension.dxf │ ├── troubleshooting.md │ ├── tulip_api.md │ ├── tulip_board.md │ ├── tulip_board_r9.md │ ├── tulip_breadboard.md │ ├── tulip_breakout.md │ ├── tulip_build.md │ ├── tulip_debug.md │ ├── tulip_desktop.md │ └── tulip_flashing.md ├── lv_binding_micropython_tulip/ │ ├── LICENSE │ ├── README.md │ ├── bindings.cmake │ ├── driver/ │ │ ├── esp32/ │ │ │ ├── espidf.c │ │ │ ├── espidf.h │ │ │ ├── ili9341.py │ │ │ ├── ili9XXX.py │ │ │ ├── lv_spi.py │ │ │ ├── modrtch.c │ │ │ ├── modxpt2046.c │ │ │ ├── sh2lib.c │ │ │ ├── sh2lib.h │ │ │ └── xpt2046.py │ │ ├── generic/ │ │ │ ├── axp192.py │ │ │ ├── ft6x36.py │ │ │ ├── ili9xxx-test.py │ │ │ ├── ili9xxx.py │ │ │ ├── st77xx-test.py │ │ │ ├── st77xx.py │ │ │ ├── xpt2046-test.py │ │ │ └── xpt2046.py │ │ ├── include/ │ │ │ └── common.h │ │ ├── js/ │ │ │ └── lv_timer.py │ │ ├── linux/ │ │ │ ├── evdev.py │ │ │ └── lv_timer.py │ │ ├── rp2/ │ │ │ ├── rp2_dma-test.py │ │ │ └── rp2_dma.py │ │ ├── stm32/ │ │ │ ├── STM32F7DISC/ │ │ │ │ ├── ft5336.c │ │ │ │ ├── ft5336.h │ │ │ │ ├── modrk043fn48h.c │ │ │ │ ├── rk043fn48h.h │ │ │ │ ├── stm32746g_discovery.h │ │ │ │ ├── stm32746g_discovery_ts.c │ │ │ │ ├── stm32746g_discovery_ts.h │ │ │ │ └── ts.h │ │ │ └── string1.c │ │ └── zephyr/ │ │ ├── README.md │ │ ├── lvgl.c │ │ ├── lvgl_driver.h │ │ └── modlvzephyr.c │ ├── examples/ │ │ ├── Dynamic_loading_font_example.py │ │ ├── advanced_demo.py │ │ ├── custom_widget_example.py │ │ ├── example1.py │ │ ├── example3.py │ │ ├── fb_test.py │ │ ├── generic-st77xx-with-xpt2046.py │ │ ├── madctl/ │ │ │ ├── README.md │ │ │ └── madctl_helper.py │ │ ├── png_example.py │ │ └── uasyncio_example1.py │ ├── gen/ │ │ ├── gen_mpy.py │ │ ├── lv_mpy_example.c │ │ └── lv_mpy_example.json │ ├── include/ │ │ └── lv_mp_mem_custom_include.h │ ├── lib/ │ │ ├── display_driver.py │ │ ├── display_driver_utils.py │ │ ├── fs_driver.py │ │ ├── lv_colors.py │ │ ├── lv_utils.py │ │ ├── tpcal.py │ │ └── utils.py │ ├── lv_conf.h │ ├── lvgl/ │ │ ├── .devcontainer/ │ │ │ ├── __CMakeLists.txt__ │ │ │ ├── __build_all.sh__ │ │ │ ├── __c_cpp_properties.json__ │ │ │ ├── __lv_conf.h__ │ │ │ ├── __main.c__ │ │ │ ├── __settings.json__ │ │ │ ├── devcontainer.json │ │ │ ├── lvgl_shell.html │ │ │ └── setup.sh │ │ ├── .pre-commit-config.yaml │ │ ├── .typos.toml │ │ ├── CMakeLists.txt │ │ ├── CMakePresets.json │ │ ├── Kconfig │ │ ├── LICENCE.txt │ │ ├── README.md │ │ ├── SConscript │ │ ├── component.mk │ │ ├── idf_component.yml │ │ ├── library.json │ │ ├── library.properties │ │ ├── lv_conf_template.h │ │ ├── lvgl.h │ │ ├── lvgl.mk │ │ ├── lvgl.pc.in │ │ ├── scripts/ │ │ │ ├── LVGLImage.py │ │ │ ├── build_html_examples.sh │ │ │ ├── built_in_font/ │ │ │ │ ├── built_in_font_gen.py │ │ │ │ └── generate_all.py │ │ │ ├── changelog-template.hbs │ │ │ ├── changelog_gen.sh │ │ │ ├── code-format.cfg │ │ │ ├── code-format.py │ │ │ ├── cppcheck_run.sh │ │ │ ├── filetohex.py │ │ │ ├── find_version.sh │ │ │ ├── genexamplelist.sh │ │ │ ├── image_viewer.py │ │ │ ├── infer_run.sh │ │ │ ├── install-prerequisites.sh │ │ │ ├── jpg_to_sjpg.py │ │ │ ├── lv_conf_internal_gen.py │ │ │ ├── release/ │ │ │ │ ├── com.py │ │ │ │ ├── commits.txt │ │ │ │ ├── patch.py │ │ │ │ └── release.py │ │ │ ├── style_api_gen.py │ │ │ └── trace_filter.py │ │ └── src/ │ │ ├── core/ │ │ │ ├── lv_global.h │ │ │ ├── lv_group.c │ │ │ ├── lv_group.h │ │ │ ├── lv_obj.c │ │ │ ├── lv_obj.h │ │ │ ├── lv_obj_class.c │ │ │ ├── lv_obj_class.h │ │ │ ├── lv_obj_draw.c │ │ │ ├── lv_obj_draw.h │ │ │ ├── lv_obj_event.c │ │ │ ├── lv_obj_event.h │ │ │ ├── lv_obj_id_builtin.c │ │ │ ├── lv_obj_pos.c │ │ │ ├── lv_obj_pos.h │ │ │ ├── lv_obj_property.c │ │ │ ├── lv_obj_property.h │ │ │ ├── lv_obj_scroll.c │ │ │ ├── lv_obj_scroll.h │ │ │ ├── lv_obj_style.c │ │ │ ├── lv_obj_style.h │ │ │ ├── lv_obj_style_gen.c │ │ │ ├── lv_obj_style_gen.h │ │ │ ├── lv_obj_tree.c │ │ │ ├── lv_obj_tree.h │ │ │ ├── lv_refr.c │ │ │ └── lv_refr.h │ │ ├── display/ │ │ │ ├── lv_display.c │ │ │ ├── lv_display.h │ │ │ └── lv_display_private.h │ │ ├── draw/ │ │ │ ├── lv_draw.c │ │ │ ├── lv_draw.h │ │ │ ├── lv_draw_arc.c │ │ │ ├── lv_draw_arc.h │ │ │ ├── lv_draw_buf.c │ │ │ ├── lv_draw_buf.h │ │ │ ├── lv_draw_image.c │ │ │ ├── lv_draw_image.h │ │ │ ├── lv_draw_label.c │ │ │ ├── lv_draw_label.h │ │ │ ├── lv_draw_line.c │ │ │ ├── lv_draw_line.h │ │ │ ├── lv_draw_mask.c │ │ │ ├── lv_draw_mask.h │ │ │ ├── lv_draw_rect.c │ │ │ ├── lv_draw_rect.h │ │ │ ├── lv_draw_triangle.c │ │ │ ├── lv_draw_triangle.h │ │ │ ├── lv_draw_vector.c │ │ │ ├── lv_draw_vector.h │ │ │ ├── lv_image_decoder.c │ │ │ ├── lv_image_decoder.h │ │ │ ├── lv_image_dsc.h │ │ │ ├── nxp/ │ │ │ │ ├── pxp/ │ │ │ │ │ ├── lv_draw_buf_pxp.c │ │ │ │ │ ├── lv_draw_pxp.c │ │ │ │ │ ├── lv_draw_pxp.h │ │ │ │ │ ├── lv_draw_pxp_fill.c │ │ │ │ │ ├── lv_draw_pxp_img.c │ │ │ │ │ ├── lv_draw_pxp_layer.c │ │ │ │ │ ├── lv_pxp_cfg.c │ │ │ │ │ ├── lv_pxp_cfg.h │ │ │ │ │ ├── lv_pxp_osa.c │ │ │ │ │ ├── lv_pxp_osa.h │ │ │ │ │ ├── lv_pxp_utils.c │ │ │ │ │ └── lv_pxp_utils.h │ │ │ │ └── vglite/ │ │ │ │ ├── lv_draw_buf_vglite.c │ │ │ │ ├── lv_draw_vglite.c │ │ │ │ ├── lv_draw_vglite.h │ │ │ │ ├── lv_draw_vglite_arc.c │ │ │ │ ├── lv_draw_vglite_border.c │ │ │ │ ├── lv_draw_vglite_fill.c │ │ │ │ ├── lv_draw_vglite_img.c │ │ │ │ ├── lv_draw_vglite_label.c │ │ │ │ ├── lv_draw_vglite_layer.c │ │ │ │ ├── lv_draw_vglite_line.c │ │ │ │ ├── lv_draw_vglite_triangle.c │ │ │ │ ├── lv_vglite_buf.c │ │ │ │ ├── lv_vglite_buf.h │ │ │ │ ├── lv_vglite_matrix.c │ │ │ │ ├── lv_vglite_matrix.h │ │ │ │ ├── lv_vglite_path.c │ │ │ │ ├── lv_vglite_path.h │ │ │ │ ├── lv_vglite_utils.c │ │ │ │ └── lv_vglite_utils.h │ │ │ ├── renesas/ │ │ │ │ └── dave2d/ │ │ │ │ ├── lv_draw_dave2d.c │ │ │ │ ├── lv_draw_dave2d.h │ │ │ │ ├── lv_draw_dave2d_arc.c │ │ │ │ ├── lv_draw_dave2d_border.c │ │ │ │ ├── lv_draw_dave2d_fill.c │ │ │ │ ├── lv_draw_dave2d_image.c │ │ │ │ ├── lv_draw_dave2d_label.c │ │ │ │ ├── lv_draw_dave2d_line.c │ │ │ │ ├── lv_draw_dave2d_mask_rectangle.c │ │ │ │ ├── lv_draw_dave2d_triangle.c │ │ │ │ ├── lv_draw_dave2d_utils.c │ │ │ │ └── lv_draw_dave2d_utils.h │ │ │ ├── sdl/ │ │ │ │ ├── lv_draw_sdl.c │ │ │ │ └── lv_draw_sdl.h │ │ │ ├── sw/ │ │ │ │ ├── arm2d/ │ │ │ │ │ ├── lv_draw_sw_arm2d.h │ │ │ │ │ └── lv_draw_sw_helium.h │ │ │ │ ├── blend/ │ │ │ │ │ ├── arm2d/ │ │ │ │ │ │ └── lv_blend_arm2d.h │ │ │ │ │ ├── helium/ │ │ │ │ │ │ ├── lv_blend_helium.S │ │ │ │ │ │ └── lv_blend_helium.h │ │ │ │ │ ├── lv_draw_sw_blend.c │ │ │ │ │ ├── lv_draw_sw_blend.h │ │ │ │ │ ├── lv_draw_sw_blend_to_argb8888.c │ │ │ │ │ ├── lv_draw_sw_blend_to_argb8888.h │ │ │ │ │ ├── lv_draw_sw_blend_to_rgb332.c │ │ │ │ │ ├── lv_draw_sw_blend_to_rgb332.h │ │ │ │ │ ├── lv_draw_sw_blend_to_rgb565.c │ │ │ │ │ ├── lv_draw_sw_blend_to_rgb565.h │ │ │ │ │ ├── lv_draw_sw_blend_to_rgb888.c │ │ │ │ │ ├── lv_draw_sw_blend_to_rgb888.h │ │ │ │ │ └── neon/ │ │ │ │ │ ├── lv_blend_neon.S │ │ │ │ │ └── lv_blend_neon.h │ │ │ │ ├── lv_draw_sw.c │ │ │ │ ├── lv_draw_sw.h │ │ │ │ ├── lv_draw_sw_arc.c │ │ │ │ ├── lv_draw_sw_border.c │ │ │ │ ├── lv_draw_sw_box_shadow.c │ │ │ │ ├── lv_draw_sw_fill.c │ │ │ │ ├── lv_draw_sw_gradient.c │ │ │ │ ├── lv_draw_sw_gradient.h │ │ │ │ ├── lv_draw_sw_img.c │ │ │ │ ├── lv_draw_sw_letter.c │ │ │ │ ├── lv_draw_sw_line.c │ │ │ │ ├── lv_draw_sw_mask.c │ │ │ │ ├── lv_draw_sw_mask.h │ │ │ │ ├── lv_draw_sw_mask_rect.c │ │ │ │ ├── lv_draw_sw_transform.c │ │ │ │ ├── lv_draw_sw_triangle.c │ │ │ │ └── lv_draw_sw_vector.c │ │ │ └── vg_lite/ │ │ │ ├── lv_draw_buf_vg_lite.c │ │ │ ├── lv_draw_vg_lite.c │ │ │ ├── lv_draw_vg_lite.h │ │ │ ├── lv_draw_vg_lite_arc.c │ │ │ ├── lv_draw_vg_lite_border.c │ │ │ ├── lv_draw_vg_lite_box_shadow.c │ │ │ ├── lv_draw_vg_lite_fill.c │ │ │ ├── lv_draw_vg_lite_img.c │ │ │ ├── lv_draw_vg_lite_label.c │ │ │ ├── lv_draw_vg_lite_layer.c │ │ │ ├── lv_draw_vg_lite_line.c │ │ │ ├── lv_draw_vg_lite_mask_rect.c │ │ │ ├── lv_draw_vg_lite_triangle.c │ │ │ ├── lv_draw_vg_lite_type.h │ │ │ ├── lv_draw_vg_lite_vector.c │ │ │ ├── lv_vg_lite_decoder.c │ │ │ ├── lv_vg_lite_decoder.h │ │ │ ├── lv_vg_lite_grad.c │ │ │ ├── lv_vg_lite_grad.h │ │ │ ├── lv_vg_lite_math.c │ │ │ ├── lv_vg_lite_math.h │ │ │ ├── lv_vg_lite_path.c │ │ │ ├── lv_vg_lite_path.h │ │ │ ├── lv_vg_lite_pending.c │ │ │ ├── lv_vg_lite_pending.h │ │ │ ├── lv_vg_lite_utils.c │ │ │ └── lv_vg_lite_utils.h │ │ ├── drivers/ │ │ │ ├── README.md │ │ │ ├── display/ │ │ │ │ ├── drm/ │ │ │ │ │ ├── lv_linux_drm.c │ │ │ │ │ └── lv_linux_drm.h │ │ │ │ ├── fb/ │ │ │ │ │ ├── lv_linux_fbdev.c │ │ │ │ │ └── lv_linux_fbdev.h │ │ │ │ ├── ili9341/ │ │ │ │ │ ├── lv_ili9341.c │ │ │ │ │ └── lv_ili9341.h │ │ │ │ ├── lcd/ │ │ │ │ │ ├── lv_lcd_generic_mipi.c │ │ │ │ │ └── lv_lcd_generic_mipi.h │ │ │ │ ├── st7735/ │ │ │ │ │ ├── lv_st7735.c │ │ │ │ │ └── lv_st7735.h │ │ │ │ ├── st7789/ │ │ │ │ │ ├── lv_st7789.c │ │ │ │ │ └── lv_st7789.h │ │ │ │ ├── st7796/ │ │ │ │ │ ├── lv_st7796.c │ │ │ │ │ └── lv_st7796.h │ │ │ │ └── tft_espi/ │ │ │ │ ├── lv_tft_espi.cpp │ │ │ │ └── lv_tft_espi.h │ │ │ ├── evdev/ │ │ │ │ ├── lv_evdev.c │ │ │ │ └── lv_evdev.h │ │ │ ├── libinput/ │ │ │ │ ├── lv_libinput.c │ │ │ │ ├── lv_libinput.h │ │ │ │ ├── lv_xkb.c │ │ │ │ └── lv_xkb.h │ │ │ ├── lv_drivers.h │ │ │ ├── nuttx/ │ │ │ │ ├── lv_nuttx_cache.c │ │ │ │ ├── lv_nuttx_cache.h │ │ │ │ ├── lv_nuttx_entry.c │ │ │ │ ├── lv_nuttx_entry.h │ │ │ │ ├── lv_nuttx_fbdev.c │ │ │ │ ├── lv_nuttx_fbdev.h │ │ │ │ ├── lv_nuttx_image_cache.c │ │ │ │ ├── lv_nuttx_image_cache.h │ │ │ │ ├── lv_nuttx_lcd.c │ │ │ │ ├── lv_nuttx_lcd.h │ │ │ │ ├── lv_nuttx_libuv.c │ │ │ │ ├── lv_nuttx_libuv.h │ │ │ │ ├── lv_nuttx_profiler.c │ │ │ │ ├── lv_nuttx_profiler.h │ │ │ │ ├── lv_nuttx_touchscreen.c │ │ │ │ └── lv_nuttx_touchscreen.h │ │ │ ├── sdl/ │ │ │ │ ├── lv_sdl_keyboard.c │ │ │ │ ├── lv_sdl_keyboard.h │ │ │ │ ├── lv_sdl_mouse.c │ │ │ │ ├── lv_sdl_mouse.h │ │ │ │ ├── lv_sdl_mousewheel.c │ │ │ │ ├── lv_sdl_mousewheel.h │ │ │ │ ├── lv_sdl_window.c │ │ │ │ └── lv_sdl_window.h │ │ │ ├── windows/ │ │ │ │ ├── lv_windows_context.c │ │ │ │ ├── lv_windows_context.h │ │ │ │ ├── lv_windows_display.c │ │ │ │ ├── lv_windows_display.h │ │ │ │ ├── lv_windows_input.c │ │ │ │ └── lv_windows_input.h │ │ │ └── x11/ │ │ │ ├── lv_x11.h │ │ │ ├── lv_x11_display.c │ │ │ └── lv_x11_input.c │ │ ├── font/ │ │ │ ├── lv_binfont_loader.c │ │ │ ├── lv_binfont_loader.h │ │ │ ├── lv_font.c │ │ │ ├── lv_font.h │ │ │ ├── lv_font_dejavu_16_persian_hebrew.c │ │ │ ├── lv_font_fmt_txt.c │ │ │ ├── lv_font_fmt_txt.h │ │ │ ├── lv_font_montserrat_10.c │ │ │ ├── lv_font_montserrat_12.c │ │ │ ├── lv_font_montserrat_14.c │ │ │ ├── lv_font_montserrat_16.c │ │ │ ├── lv_font_montserrat_18.c │ │ │ ├── lv_font_montserrat_20.c │ │ │ ├── lv_font_montserrat_22.c │ │ │ ├── lv_font_montserrat_24.c │ │ │ ├── lv_font_montserrat_26.c │ │ │ ├── lv_font_montserrat_28.c │ │ │ ├── lv_font_montserrat_28_compressed.c │ │ │ ├── lv_font_montserrat_30.c │ │ │ ├── lv_font_montserrat_32.c │ │ │ ├── lv_font_montserrat_34.c │ │ │ ├── lv_font_montserrat_36.c │ │ │ ├── lv_font_montserrat_38.c │ │ │ ├── lv_font_montserrat_40.c │ │ │ ├── lv_font_montserrat_42.c │ │ │ ├── lv_font_montserrat_44.c │ │ │ ├── lv_font_montserrat_46.c │ │ │ ├── lv_font_montserrat_48.c │ │ │ ├── lv_font_montserrat_8.c │ │ │ ├── lv_font_simsun_16_cjk.c │ │ │ ├── lv_font_unscii_16.c │ │ │ ├── lv_font_unscii_8.c │ │ │ └── lv_symbol_def.h │ │ ├── indev/ │ │ │ ├── lv_indev.c │ │ │ ├── lv_indev.h │ │ │ ├── lv_indev_private.h │ │ │ ├── lv_indev_scroll.c │ │ │ └── lv_indev_scroll.h │ │ ├── layouts/ │ │ │ ├── flex/ │ │ │ │ ├── lv_flex.c │ │ │ │ └── lv_flex.h │ │ │ ├── grid/ │ │ │ │ ├── lv_grid.c │ │ │ │ └── lv_grid.h │ │ │ ├── lv_layout.c │ │ │ └── lv_layout.h │ │ ├── libs/ │ │ │ ├── barcode/ │ │ │ │ ├── code128.c │ │ │ │ ├── code128.h │ │ │ │ ├── lv_barcode.c │ │ │ │ └── lv_barcode.h │ │ │ ├── bin_decoder/ │ │ │ │ ├── lv_bin_decoder.c │ │ │ │ └── lv_bin_decoder.h │ │ │ ├── bmp/ │ │ │ │ ├── lv_bmp.c │ │ │ │ └── lv_bmp.h │ │ │ ├── ffmpeg/ │ │ │ │ ├── lv_ffmpeg.c │ │ │ │ └── lv_ffmpeg.h │ │ │ ├── freetype/ │ │ │ │ ├── ftmodule.h │ │ │ │ ├── ftoption.h │ │ │ │ ├── lv_freetype.c │ │ │ │ ├── lv_freetype.h │ │ │ │ ├── lv_freetype_glyph.c │ │ │ │ ├── lv_freetype_image.c │ │ │ │ ├── lv_freetype_outline.c │ │ │ │ ├── lv_freetype_private.h │ │ │ │ └── lv_ftsystem.c │ │ │ ├── fsdrv/ │ │ │ │ ├── lv_fs_arduino_esp_littlefs.cpp │ │ │ │ ├── lv_fs_cbfs.c │ │ │ │ ├── lv_fs_fatfs.c │ │ │ │ ├── lv_fs_littlefs.c │ │ │ │ ├── lv_fs_memfs.c │ │ │ │ ├── lv_fs_posix.c │ │ │ │ ├── lv_fs_stdio.c │ │ │ │ ├── lv_fs_win32.c │ │ │ │ └── lv_fsdrv.h │ │ │ ├── gif/ │ │ │ │ ├── gifdec.c │ │ │ │ ├── gifdec.h │ │ │ │ ├── gifdec_mve.h │ │ │ │ ├── lv_gif.c │ │ │ │ └── lv_gif.h │ │ │ ├── libjpeg_turbo/ │ │ │ │ ├── lv_libjpeg_turbo.c │ │ │ │ └── lv_libjpeg_turbo.h │ │ │ ├── libpng/ │ │ │ │ ├── lv_libpng.c │ │ │ │ └── lv_libpng.h │ │ │ ├── lodepng/ │ │ │ │ ├── lodepng.c │ │ │ │ ├── lodepng.h │ │ │ │ ├── lv_lodepng.c │ │ │ │ └── lv_lodepng.h │ │ │ ├── lz4/ │ │ │ │ ├── LICENSE │ │ │ │ ├── lz4.c │ │ │ │ └── lz4.h │ │ │ ├── qrcode/ │ │ │ │ ├── lv_qrcode.c │ │ │ │ ├── lv_qrcode.h │ │ │ │ ├── qrcodegen.c │ │ │ │ └── qrcodegen.h │ │ │ ├── rle/ │ │ │ │ ├── lv_rle.c │ │ │ │ └── lv_rle.h │ │ │ ├── rlottie/ │ │ │ │ ├── lv_rlottie.c │ │ │ │ └── lv_rlottie.h │ │ │ ├── thorvg/ │ │ │ │ ├── add_lvgl_if.sh │ │ │ │ ├── config.h │ │ │ │ ├── thorvg.h │ │ │ │ ├── thorvg_capi.h │ │ │ │ ├── tvgAnimation.cpp │ │ │ │ ├── tvgArray.h │ │ │ │ ├── tvgBezier.cpp │ │ │ │ ├── tvgBezier.h │ │ │ │ ├── tvgCanvas.cpp │ │ │ │ ├── tvgCanvas.h │ │ │ │ ├── tvgCapi.cpp │ │ │ │ ├── tvgCommon.h │ │ │ │ ├── tvgCompressor.cpp │ │ │ │ ├── tvgCompressor.h │ │ │ │ ├── tvgFill.cpp │ │ │ │ ├── tvgFill.h │ │ │ │ ├── tvgFrameModule.h │ │ │ │ ├── tvgInitializer.cpp │ │ │ │ ├── tvgIteratorAccessor.h │ │ │ │ ├── tvgLoadModule.h │ │ │ │ ├── tvgLoader.cpp │ │ │ │ ├── tvgLoader.h │ │ │ │ ├── tvgMath.cpp │ │ │ │ ├── tvgMath.h │ │ │ │ ├── tvgPaint.cpp │ │ │ │ ├── tvgPaint.h │ │ │ │ ├── tvgPicture.cpp │ │ │ │ ├── tvgPicture.h │ │ │ │ ├── tvgRawLoader.cpp │ │ │ │ ├── tvgRawLoader.h │ │ │ │ ├── tvgRender.cpp │ │ │ │ ├── tvgRender.h │ │ │ │ ├── tvgSaveModule.h │ │ │ │ ├── tvgSaver.cpp │ │ │ │ ├── tvgScene.cpp │ │ │ │ ├── tvgScene.h │ │ │ │ ├── tvgShape.cpp │ │ │ │ ├── tvgShape.h │ │ │ │ ├── tvgStr.cpp │ │ │ │ ├── tvgStr.h │ │ │ │ ├── tvgSvgCssStyle.cpp │ │ │ │ ├── tvgSvgCssStyle.h │ │ │ │ ├── tvgSvgLoader.cpp │ │ │ │ ├── tvgSvgLoader.h │ │ │ │ ├── tvgSvgLoaderCommon.h │ │ │ │ ├── tvgSvgPath.cpp │ │ │ │ ├── tvgSvgPath.h │ │ │ │ ├── tvgSvgSceneBuilder.cpp │ │ │ │ ├── tvgSvgSceneBuilder.h │ │ │ │ ├── tvgSvgUtil.cpp │ │ │ │ ├── tvgSvgUtil.h │ │ │ │ ├── tvgSwCanvas.cpp │ │ │ │ ├── tvgSwCommon.h │ │ │ │ ├── tvgSwFill.cpp │ │ │ │ ├── tvgSwImage.cpp │ │ │ │ ├── tvgSwMath.cpp │ │ │ │ ├── tvgSwMemPool.cpp │ │ │ │ ├── tvgSwRaster.cpp │ │ │ │ ├── tvgSwRasterAvx.h │ │ │ │ ├── tvgSwRasterC.h │ │ │ │ ├── tvgSwRasterNeon.h │ │ │ │ ├── tvgSwRasterTexmap.h │ │ │ │ ├── tvgSwRenderer.cpp │ │ │ │ ├── tvgSwRenderer.h │ │ │ │ ├── tvgSwRle.cpp │ │ │ │ ├── tvgSwShape.cpp │ │ │ │ ├── tvgSwStroke.cpp │ │ │ │ ├── tvgTaskScheduler.cpp │ │ │ │ ├── tvgTaskScheduler.h │ │ │ │ ├── tvgXmlParser.cpp │ │ │ │ └── tvgXmlParser.h │ │ │ ├── tiny_ttf/ │ │ │ │ ├── lv_tiny_ttf.c │ │ │ │ ├── lv_tiny_ttf.h │ │ │ │ ├── stb_rect_pack.h │ │ │ │ └── stb_truetype_htcw.h │ │ │ └── tjpgd/ │ │ │ ├── lv_tjpgd.c │ │ │ ├── lv_tjpgd.h │ │ │ ├── tjpgd.c │ │ │ ├── tjpgd.h │ │ │ └── tjpgdcnf.h │ │ ├── lv_api_map_v8.h │ │ ├── lv_api_map_v9_0.h │ │ ├── lv_conf_internal.h │ │ ├── lv_conf_kconfig.h │ │ ├── lv_init.c │ │ ├── lv_init.h │ │ ├── lvgl.h │ │ ├── lvgl_private.h │ │ ├── misc/ │ │ │ ├── cache/ │ │ │ │ ├── _lv_cache_lru_rb.c │ │ │ │ ├── _lv_cache_lru_rb.h │ │ │ │ ├── lv_cache.c │ │ │ │ ├── lv_cache.h │ │ │ │ ├── lv_cache_entry.c │ │ │ │ ├── lv_cache_entry.h │ │ │ │ ├── lv_cache_entry_private.h │ │ │ │ ├── lv_cache_private.h │ │ │ │ ├── lv_image_cache.c │ │ │ │ ├── lv_image_cache.h │ │ │ │ ├── lv_image_header_cache.c │ │ │ │ └── lv_image_header_cache.h │ │ │ ├── lv_anim.c │ │ │ ├── lv_anim.h │ │ │ ├── lv_anim_timeline.c │ │ │ ├── lv_anim_timeline.h │ │ │ ├── lv_area.c │ │ │ ├── lv_area.h │ │ │ ├── lv_array.c │ │ │ ├── lv_array.h │ │ │ ├── lv_assert.h │ │ │ ├── lv_async.c │ │ │ ├── lv_async.h │ │ │ ├── lv_bidi.c │ │ │ ├── lv_bidi.h │ │ │ ├── lv_color.c │ │ │ ├── lv_color.h │ │ │ ├── lv_color_op.c │ │ │ ├── lv_color_op.h │ │ │ ├── lv_event.c │ │ │ ├── lv_event.h │ │ │ ├── lv_fs.c │ │ │ ├── lv_fs.h │ │ │ ├── lv_ll.c │ │ │ ├── lv_ll.h │ │ │ ├── lv_log.c │ │ │ ├── lv_log.h │ │ │ ├── lv_lru.c │ │ │ ├── lv_lru.h │ │ │ ├── lv_math.c │ │ │ ├── lv_math.h │ │ │ ├── lv_palette.c │ │ │ ├── lv_palette.h │ │ │ ├── lv_profiler.h │ │ │ ├── lv_profiler_builtin.c │ │ │ ├── lv_profiler_builtin.h │ │ │ ├── lv_rb.c │ │ │ ├── lv_rb.h │ │ │ ├── lv_style.c │ │ │ ├── lv_style.h │ │ │ ├── lv_style_gen.c │ │ │ ├── lv_style_gen.h │ │ │ ├── lv_templ.c │ │ │ ├── lv_templ.h │ │ │ ├── lv_text.c │ │ │ ├── lv_text.h │ │ │ ├── lv_text_ap.c │ │ │ ├── lv_text_ap.h │ │ │ ├── lv_timer.c │ │ │ ├── lv_timer.h │ │ │ ├── lv_types.h │ │ │ ├── lv_utils.c │ │ │ └── lv_utils.h │ │ ├── osal/ │ │ │ ├── lv_cmsis_rtos2.c │ │ │ ├── lv_cmsis_rtos2.h │ │ │ ├── lv_freertos.c │ │ │ ├── lv_freertos.h │ │ │ ├── lv_os.h │ │ │ ├── lv_os_none.c │ │ │ ├── lv_os_none.h │ │ │ ├── lv_pthread.c │ │ │ ├── lv_pthread.h │ │ │ ├── lv_rtthread.c │ │ │ ├── lv_rtthread.h │ │ │ ├── lv_windows.c │ │ │ └── lv_windows.h │ │ ├── others/ │ │ │ ├── file_explorer/ │ │ │ │ ├── lv_file_explorer.c │ │ │ │ └── lv_file_explorer.h │ │ │ ├── fragment/ │ │ │ │ ├── README.md │ │ │ │ ├── lv_fragment.c │ │ │ │ ├── lv_fragment.h │ │ │ │ └── lv_fragment_manager.c │ │ │ ├── gridnav/ │ │ │ │ ├── lv_gridnav.c │ │ │ │ └── lv_gridnav.h │ │ │ ├── ime/ │ │ │ │ ├── lv_ime_pinyin.c │ │ │ │ └── lv_ime_pinyin.h │ │ │ ├── imgfont/ │ │ │ │ ├── lv_imgfont.c │ │ │ │ └── lv_imgfont.h │ │ │ ├── monkey/ │ │ │ │ ├── lv_monkey.c │ │ │ │ └── lv_monkey.h │ │ │ ├── observer/ │ │ │ │ ├── lv_observer.c │ │ │ │ └── lv_observer.h │ │ │ ├── snapshot/ │ │ │ │ ├── lv_snapshot.c │ │ │ │ └── lv_snapshot.h │ │ │ ├── sysmon/ │ │ │ │ ├── lv_sysmon.c │ │ │ │ └── lv_sysmon.h │ │ │ └── vg_lite_tvg/ │ │ │ ├── vg_lite.h │ │ │ ├── vg_lite_matrix.c │ │ │ └── vg_lite_tvg.cpp │ │ ├── stdlib/ │ │ │ ├── builtin/ │ │ │ │ ├── lv_mem_core_builtin.c │ │ │ │ ├── lv_sprintf_builtin.c │ │ │ │ ├── lv_string_builtin.c │ │ │ │ ├── lv_tlsf.c │ │ │ │ └── lv_tlsf.h │ │ │ ├── clib/ │ │ │ │ ├── lv_mem_core_clib.c │ │ │ │ ├── lv_sprintf_clib.c │ │ │ │ └── lv_string_clib.c │ │ │ ├── lv_mem.c │ │ │ ├── lv_mem.h │ │ │ ├── lv_sprintf.h │ │ │ ├── lv_string.h │ │ │ ├── micropython/ │ │ │ │ └── lv_mem_core_micropython.c │ │ │ └── rtthread/ │ │ │ ├── lv_mem_core_rtthread.c │ │ │ ├── lv_sprintf_rtthread.c │ │ │ └── lv_string_rtthread.c │ │ ├── themes/ │ │ │ ├── default/ │ │ │ │ ├── lv_theme_default.c │ │ │ │ └── lv_theme_default.h │ │ │ ├── lv_theme.c │ │ │ ├── lv_theme.h │ │ │ ├── mono/ │ │ │ │ ├── lv_theme_mono.c │ │ │ │ └── lv_theme_mono.h │ │ │ └── simple/ │ │ │ ├── lv_theme_simple.c │ │ │ └── lv_theme_simple.h │ │ ├── tick/ │ │ │ ├── lv_tick.c │ │ │ └── lv_tick.h │ │ └── widgets/ │ │ ├── animimage/ │ │ │ ├── lv_animimage.c │ │ │ └── lv_animimage.h │ │ ├── arc/ │ │ │ ├── lv_arc.c │ │ │ └── lv_arc.h │ │ ├── bar/ │ │ │ ├── lv_bar.c │ │ │ └── lv_bar.h │ │ ├── button/ │ │ │ ├── lv_button.c │ │ │ └── lv_button.h │ │ ├── buttonmatrix/ │ │ │ ├── lv_buttonmatrix.c │ │ │ └── lv_buttonmatrix.h │ │ ├── calendar/ │ │ │ ├── lv_calendar.c │ │ │ ├── lv_calendar.h │ │ │ ├── lv_calendar_header_arrow.c │ │ │ ├── lv_calendar_header_arrow.h │ │ │ ├── lv_calendar_header_dropdown.c │ │ │ └── lv_calendar_header_dropdown.h │ │ ├── canvas/ │ │ │ ├── lv_canvas.c │ │ │ └── lv_canvas.h │ │ ├── chart/ │ │ │ ├── lv_chart.c │ │ │ └── lv_chart.h │ │ ├── checkbox/ │ │ │ ├── lv_checkbox.c │ │ │ └── lv_checkbox.h │ │ ├── dropdown/ │ │ │ ├── lv_dropdown.c │ │ │ └── lv_dropdown.h │ │ ├── image/ │ │ │ ├── lv_image.c │ │ │ └── lv_image.h │ │ ├── imagebutton/ │ │ │ ├── lv_imagebutton.c │ │ │ └── lv_imagebutton.h │ │ ├── keyboard/ │ │ │ ├── lv_keyboard.c │ │ │ └── lv_keyboard.h │ │ ├── label/ │ │ │ ├── lv_label.c │ │ │ └── lv_label.h │ │ ├── led/ │ │ │ ├── lv_led.c │ │ │ └── lv_led.h │ │ ├── line/ │ │ │ ├── lv_line.c │ │ │ └── lv_line.h │ │ ├── list/ │ │ │ ├── lv_list.c │ │ │ └── lv_list.h │ │ ├── menu/ │ │ │ ├── lv_menu.c │ │ │ └── lv_menu.h │ │ ├── msgbox/ │ │ │ ├── lv_msgbox.c │ │ │ └── lv_msgbox.h │ │ ├── objx_templ/ │ │ │ ├── lv_objx_templ.c │ │ │ └── lv_objx_templ.h │ │ ├── roller/ │ │ │ ├── lv_roller.c │ │ │ └── lv_roller.h │ │ ├── scale/ │ │ │ ├── lv_scale.c │ │ │ └── lv_scale.h │ │ ├── slider/ │ │ │ ├── lv_slider.c │ │ │ └── lv_slider.h │ │ ├── span/ │ │ │ ├── lv_span.c │ │ │ └── lv_span.h │ │ ├── spinbox/ │ │ │ ├── lv_spinbox.c │ │ │ └── lv_spinbox.h │ │ ├── spinner/ │ │ │ ├── lv_spinner.c │ │ │ └── lv_spinner.h │ │ ├── switch/ │ │ │ ├── lv_switch.c │ │ │ └── lv_switch.h │ │ ├── table/ │ │ │ ├── lv_table.c │ │ │ └── lv_table.h │ │ ├── tabview/ │ │ │ ├── lv_tabview.c │ │ │ └── lv_tabview.h │ │ ├── textarea/ │ │ │ ├── lv_textarea.c │ │ │ └── lv_textarea.h │ │ ├── tileview/ │ │ │ ├── lv_tileview.c │ │ │ └── lv_tileview.h │ │ └── win/ │ │ ├── lv_win.c │ │ └── lv_win.h │ ├── mkrules.cmake │ ├── pycparser/ │ │ ├── .vimrc │ │ ├── CHANGES │ │ ├── CONTRIBUTORS │ │ ├── LICENSE │ │ ├── MANIFEST.in │ │ ├── README.rst │ │ ├── SECURITY.md │ │ ├── TODO.txt │ │ ├── _clean_tables.py │ │ ├── examples/ │ │ │ ├── README.rst │ │ │ ├── c-to-c.py │ │ │ ├── c_files/ │ │ │ │ ├── basic.c │ │ │ │ ├── funky.c │ │ │ │ ├── hash.c │ │ │ │ ├── memmgr.c │ │ │ │ ├── memmgr.h │ │ │ │ ├── pragmas.c │ │ │ │ └── year.c │ │ │ ├── c_json.py │ │ │ ├── cdecl.py │ │ │ ├── construct_ast_from_scratch.py │ │ │ ├── dump_ast.py │ │ │ ├── explore_ast.py │ │ │ ├── func_calls.py │ │ │ ├── func_defs.py │ │ │ ├── func_defs_add_param.py │ │ │ ├── rewrite_ast.py │ │ │ ├── serialize_ast.py │ │ │ ├── using_cpp_libc.py │ │ │ └── using_gcc_E_libc.py │ │ ├── pycparser/ │ │ │ ├── __init__.py │ │ │ ├── _ast_gen.py │ │ │ ├── _build_tables.py │ │ │ ├── _c_ast.cfg │ │ │ ├── ast_transforms.py │ │ │ ├── c_ast.py │ │ │ ├── c_generator.py │ │ │ ├── c_lexer.py │ │ │ ├── c_parser.py │ │ │ ├── ply/ │ │ │ │ ├── LICENSE │ │ │ │ ├── __init__.py │ │ │ │ ├── cpp.py │ │ │ │ ├── ctokens.py │ │ │ │ ├── lex.py │ │ │ │ ├── yacc.py │ │ │ │ └── ygen.py │ │ │ └── plyparser.py │ │ ├── setup.cfg │ │ ├── setup.py │ │ ├── tests/ │ │ │ ├── README.txt │ │ │ ├── __init__.py │ │ │ ├── c_files/ │ │ │ │ ├── c11.c │ │ │ │ ├── cppd_with_stdio_h.c │ │ │ │ ├── empty.h │ │ │ │ ├── example_c_file.c │ │ │ │ ├── hdir/ │ │ │ │ │ └── 9/ │ │ │ │ │ └── inc.h │ │ │ │ ├── memmgr.c │ │ │ │ ├── memmgr.h │ │ │ │ ├── memmgr_with_h.c │ │ │ │ ├── simplemain.c │ │ │ │ └── year.c │ │ │ ├── test_c_ast.py │ │ │ ├── test_c_generator.py │ │ │ ├── test_c_lexer.py │ │ │ ├── test_c_parser.py │ │ │ ├── test_examples.py │ │ │ ├── test_general.py │ │ │ └── test_util.py │ │ └── utils/ │ │ ├── benchmark/ │ │ │ ├── README.rst │ │ │ ├── benchmark-parse.py │ │ │ └── inputs/ │ │ │ ├── redis.c.ppout │ │ │ ├── sqlite-btree.c.ppout │ │ │ └── tccgen.c.ppout │ │ ├── fake_libc_include/ │ │ │ ├── X11/ │ │ │ │ ├── Intrinsic.h │ │ │ │ ├── Xlib.h │ │ │ │ ├── _X11_fake_defines.h │ │ │ │ └── _X11_fake_typedefs.h │ │ │ ├── _ansi.h │ │ │ ├── _fake_defines.h │ │ │ ├── _fake_typedefs.h │ │ │ ├── _syslist.h │ │ │ ├── aio.h │ │ │ ├── alloca.h │ │ │ ├── ar.h │ │ │ ├── argz.h │ │ │ ├── arpa/ │ │ │ │ └── inet.h │ │ │ ├── asm-generic/ │ │ │ │ └── int-ll64.h │ │ │ ├── assert.h │ │ │ ├── complex.h │ │ │ ├── cpio.h │ │ │ ├── ctype.h │ │ │ ├── dirent.h │ │ │ ├── dlfcn.h │ │ │ ├── emmintrin.h │ │ │ ├── endian.h │ │ │ ├── envz.h │ │ │ ├── errno.h │ │ │ ├── fastmath.h │ │ │ ├── fcntl.h │ │ │ ├── features.h │ │ │ ├── fenv.h │ │ │ ├── float.h │ │ │ ├── fmtmsg.h │ │ │ ├── fnmatch.h │ │ │ ├── ftw.h │ │ │ ├── getopt.h │ │ │ ├── glob.h │ │ │ ├── grp.h │ │ │ ├── iconv.h │ │ │ ├── ieeefp.h │ │ │ ├── immintrin.h │ │ │ ├── inttypes.h │ │ │ ├── iso646.h │ │ │ ├── langinfo.h │ │ │ ├── libgen.h │ │ │ ├── libintl.h │ │ │ ├── limits.h │ │ │ ├── linux/ │ │ │ │ ├── socket.h │ │ │ │ └── version.h │ │ │ ├── locale.h │ │ │ ├── malloc.h │ │ │ ├── math.h │ │ │ ├── mir_toolkit/ │ │ │ │ └── client_types.h │ │ │ ├── monetary.h │ │ │ ├── mqueue.h │ │ │ ├── ndbm.h │ │ │ ├── net/ │ │ │ │ └── if.h │ │ │ ├── netdb.h │ │ │ ├── netinet/ │ │ │ │ ├── in.h │ │ │ │ └── tcp.h │ │ │ ├── newlib.h │ │ │ ├── nl_types.h │ │ │ ├── openssl/ │ │ │ │ ├── err.h │ │ │ │ ├── evp.h │ │ │ │ ├── hmac.h │ │ │ │ ├── ssl.h │ │ │ │ └── x509v3.h │ │ │ ├── paths.h │ │ │ ├── poll.h │ │ │ ├── process.h │ │ │ ├── pthread.h │ │ │ ├── pwd.h │ │ │ ├── reent.h │ │ │ ├── regdef.h │ │ │ ├── regex.h │ │ │ ├── sched.h │ │ │ ├── search.h │ │ │ ├── semaphore.h │ │ │ ├── setjmp.h │ │ │ ├── signal.h │ │ │ ├── smmintrin.h │ │ │ ├── spawn.h │ │ │ ├── stdalign.h │ │ │ ├── stdarg.h │ │ │ ├── stdatomic.h │ │ │ ├── stdbool.h │ │ │ ├── stddef.h │ │ │ ├── stdint.h │ │ │ ├── stdio.h │ │ │ ├── stdlib.h │ │ │ ├── stdnoreturn.h │ │ │ ├── string.h │ │ │ ├── strings.h │ │ │ ├── stropts.h │ │ │ ├── sys/ │ │ │ │ ├── ioctl.h │ │ │ │ ├── ipc.h │ │ │ │ ├── mman.h │ │ │ │ ├── msg.h │ │ │ │ ├── poll.h │ │ │ │ ├── resource.h │ │ │ │ ├── select.h │ │ │ │ ├── sem.h │ │ │ │ ├── shm.h │ │ │ │ ├── socket.h │ │ │ │ ├── stat.h │ │ │ │ ├── statvfs.h │ │ │ │ ├── sysctl.h │ │ │ │ ├── time.h │ │ │ │ ├── times.h │ │ │ │ ├── types.h │ │ │ │ ├── uio.h │ │ │ │ ├── un.h │ │ │ │ ├── utsname.h │ │ │ │ └── wait.h │ │ │ ├── syslog.h │ │ │ ├── tar.h │ │ │ ├── termios.h │ │ │ ├── tgmath.h │ │ │ ├── threads.h │ │ │ ├── time.h │ │ │ ├── trace.h │ │ │ ├── ulimit.h │ │ │ ├── unctrl.h │ │ │ ├── unistd.h │ │ │ ├── utime.h │ │ │ ├── utmp.h │ │ │ ├── utmpx.h │ │ │ ├── wchar.h │ │ │ ├── wctype.h │ │ │ ├── wordexp.h │ │ │ ├── xcb/ │ │ │ │ └── xcb.h │ │ │ └── zlib.h │ │ └── internal/ │ │ ├── constptr.c │ │ ├── cppify.bat │ │ ├── example_c_file.c │ │ ├── fake_includes.py │ │ ├── make_fake_typedefs.py │ │ ├── memprofiling.py │ │ ├── zc.c │ │ ├── zz-ctoc.py │ │ └── zz_parse.py │ └── tests/ │ ├── run.sh │ └── run_test.py ├── railway.json ├── requirements.txt ├── tulip/ │ ├── README.md │ ├── amyboard/ │ │ ├── CMakeLists.txt │ │ ├── DPWE-NOTES │ │ ├── amyboard_fs_create.py │ │ ├── amyboard_support.c │ │ ├── amyboard_usbd.h │ │ ├── boards/ │ │ │ ├── AMYBOARD/ │ │ │ │ ├── board.json │ │ │ │ ├── mpconfigboard.cmake │ │ │ │ ├── mpconfigboard.h │ │ │ │ ├── pins.csv │ │ │ │ ├── sdkconfig.board │ │ │ │ └── tulip-partitions-16MB.csv │ │ │ ├── manifest.py │ │ │ └── sdkconfig.tulip │ │ ├── boot.py │ │ ├── esp32_common.cmake │ │ ├── machine_sdcard.c │ │ ├── main/ │ │ │ ├── CMakeLists.txt │ │ │ └── idf_component.yml │ │ ├── main.c │ │ ├── modules/ │ │ │ ├── _boot.py │ │ │ ├── apa106.py │ │ │ ├── espnow.py │ │ │ ├── flashbdev.py │ │ │ └── inisetup.py │ │ ├── mp_usbd_descriptor.c │ │ ├── mpconfigport.h │ │ ├── mphalport.c │ │ ├── mphalport.h │ │ ├── other.patch │ │ ├── pins.h │ │ ├── qstrdefsport.h │ │ ├── sketch.py │ │ ├── tasks.h │ │ └── web.patch │ ├── amyboardweb/ │ │ ├── .gitignore │ │ ├── CLAUDE.md │ │ ├── Makefile │ │ ├── README.md │ │ ├── api/ │ │ │ └── firmware.js │ │ ├── api.js │ │ ├── asyncio/ │ │ │ ├── __init__.py │ │ │ └── core.py │ │ ├── deploy.sh │ │ ├── dev.py │ │ ├── lexer_dedent.c │ │ ├── lexer_dedent.h │ │ ├── lextab.py │ │ ├── library.h │ │ ├── library.js │ │ ├── main.c │ │ ├── mipweb/ │ │ │ ├── manifest.py │ │ │ └── mipweb/ │ │ │ └── __init__.py │ │ ├── modjs.c │ │ ├── modjsffi.c │ │ ├── modtime.c │ │ ├── mpconfigport.h │ │ ├── mphalport.c │ │ ├── mphalport.h │ │ ├── node_run.sh │ │ ├── objjsproxy.c │ │ ├── objpyproxy.js │ │ ├── package.json │ │ ├── proxy_c.c │ │ ├── proxy_c.h │ │ ├── proxy_js.js │ │ ├── qstrdefsport.h │ │ ├── server.py │ │ ├── static/ │ │ │ ├── amy_api.generated.js │ │ │ ├── amy_event_layout.generated.js │ │ │ ├── amy_parameters.js │ │ │ ├── amyrepl.css │ │ │ ├── editor/ │ │ │ │ └── index.html │ │ │ ├── editor_knobs.js │ │ │ ├── esptool/ │ │ │ │ ├── README.md │ │ │ │ ├── css/ │ │ │ │ │ ├── light.css │ │ │ │ │ └── style.css │ │ │ │ ├── index.html │ │ │ │ ├── js/ │ │ │ │ │ └── script.js │ │ │ │ ├── license.md │ │ │ │ └── script/ │ │ │ │ └── develop │ │ │ ├── examples.js │ │ │ ├── index.html │ │ │ ├── mini-coi.js │ │ │ ├── patches.generated.js │ │ │ ├── pcm_presets.generated.js │ │ │ ├── spss.js │ │ │ ├── tree.js │ │ │ ├── treejs.css │ │ │ ├── xterm.css │ │ │ └── xterm.js │ │ ├── variants/ │ │ │ ├── manifest.py │ │ │ ├── pyscript/ │ │ │ │ ├── manifest.py │ │ │ │ ├── mpconfigvariant.h │ │ │ │ └── mpconfigvariant.mk │ │ │ └── standard/ │ │ │ ├── mpconfigvariant.h │ │ │ └── mpconfigvariant.mk │ │ ├── vercel.json │ │ └── yacctab.py │ ├── amyrepl/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── api.js │ │ ├── asyncio/ │ │ │ ├── __init__.py │ │ │ └── core.py │ │ ├── lexer_dedent.c │ │ ├── lexer_dedent.h │ │ ├── library.h │ │ ├── library.js │ │ ├── main.c │ │ ├── modjs.c │ │ ├── modjsffi.c │ │ ├── modtime.c │ │ ├── mpconfigport.h │ │ ├── mphalport.c │ │ ├── mphalport.h │ │ ├── node_run.sh │ │ ├── objjsproxy.c │ │ ├── objpyproxy.js │ │ ├── proxy_c.c │ │ ├── proxy_c.h │ │ ├── proxy_js.js │ │ ├── qstrdefsport.h │ │ └── variants/ │ │ ├── manifest.py │ │ ├── pyscript/ │ │ │ ├── manifest.py │ │ │ ├── mpconfigvariant.h │ │ │ └── mpconfigvariant.mk │ │ └── standard/ │ │ ├── mpconfigvariant.h │ │ └── mpconfigvariant.mk │ ├── esp32s3/ │ │ ├── CMakeLists.txt │ │ ├── boards/ │ │ │ ├── MATOUCH7/ │ │ │ │ ├── board.json │ │ │ │ ├── mpconfigboard.cmake │ │ │ │ ├── mpconfigboard.h │ │ │ │ ├── pins.csv │ │ │ │ └── sdkconfig.board │ │ │ ├── N16R8/ │ │ │ │ ├── board.json │ │ │ │ ├── mpconfigboard.cmake │ │ │ │ ├── mpconfigboard.h │ │ │ │ ├── pins.csv │ │ │ │ ├── sdkconfig.board │ │ │ │ └── tulip-partitions-16MB.csv │ │ │ ├── N32R8/ │ │ │ │ ├── board.json │ │ │ │ ├── mpconfigboard.cmake │ │ │ │ ├── mpconfigboard.h │ │ │ │ ├── pins.csv │ │ │ │ ├── sdkconfig.board │ │ │ │ └── tulip-partitions-32MB.csv │ │ │ ├── TDECK/ │ │ │ │ ├── board.json │ │ │ │ ├── mpconfigboard.cmake │ │ │ │ ├── mpconfigboard.h │ │ │ │ ├── pins.csv │ │ │ │ └── sdkconfig.board │ │ │ ├── TULIP4_R11/ │ │ │ │ ├── board.json │ │ │ │ ├── mpconfigboard.cmake │ │ │ │ ├── mpconfigboard.h │ │ │ │ ├── pins.csv │ │ │ │ └── sdkconfig.board │ │ │ ├── TULIP4_R11_DEBUG/ │ │ │ │ ├── board.json │ │ │ │ ├── mpconfigboard.cmake │ │ │ │ ├── mpconfigboard.h │ │ │ │ ├── pins.csv │ │ │ │ └── sdkconfig.board │ │ │ ├── manifest.py │ │ │ └── sdkconfig.tulip │ │ ├── boot.py │ │ ├── esp32_common.cmake │ │ ├── esp32s3_display.c │ │ ├── esp32s3_display.h │ │ ├── esp_lcd_touch.c │ │ ├── esp_lcd_touch.h │ │ ├── esp_lcd_touch_gt911.c │ │ ├── esp_lcd_touch_gt911.h │ │ ├── ft5x06_touchscreen.c │ │ ├── ft5x06_touchscreen.h │ │ ├── gccollect.h │ │ ├── gdbinit │ │ ├── gprof.sh │ │ ├── gt911_touchscreen.c │ │ ├── gt911_touchscreen.h │ │ ├── help.c │ │ ├── main/ │ │ │ ├── CMakeLists.txt │ │ │ └── idf_component.yml │ │ ├── main.c │ │ ├── modsocket.c │ │ ├── modules/ │ │ │ ├── _boot.py │ │ │ ├── apa106.py │ │ │ ├── espnow.py │ │ │ ├── flashbdev.py │ │ │ └── inisetup.py │ │ ├── mpconfigport.h │ │ ├── mphalport.c │ │ ├── network_common.c │ │ ├── network_wlan.c │ │ ├── pins.h │ │ ├── qstrdefsport.h │ │ ├── tasks.h │ │ ├── tdeck_display.c │ │ ├── tdeck_display.h │ │ ├── tdeck_keyboard.c │ │ ├── tdeck_keyboard.h │ │ ├── usb.c │ │ ├── usb_host.c │ │ └── usb_host.h │ ├── fs/ │ │ ├── amyboard/ │ │ │ └── ex/ │ │ │ └── woodpiano.txt │ │ └── tulip/ │ │ └── ex/ │ │ ├── ansi.py │ │ ├── bunny_bounce/ │ │ │ └── bunny_bounce.py │ │ ├── buttons.py │ │ ├── calibrate.py │ │ ├── fonts.py │ │ ├── joy.py │ │ ├── parallax.py │ │ ├── planet_boing/ │ │ │ └── planet_boing.py │ │ ├── rgb332.py │ │ ├── screensaver.py │ │ ├── woodpiano.txt │ │ ├── wordpad.py │ │ └── xanadu.py │ ├── fs_create.py │ ├── linux/ │ │ ├── Makefile │ │ ├── build.sh │ │ ├── main.c │ │ ├── mpconfigport.h │ │ ├── mpconfigport.mk │ │ └── variants/ │ │ └── manifest.py │ ├── macos/ │ │ ├── Info.plist │ │ ├── Makefile │ │ ├── SDL2.framework/ │ │ │ └── Versions/ │ │ │ └── A/ │ │ │ ├── Headers/ │ │ │ │ ├── SDL.h │ │ │ │ ├── SDL_assert.h │ │ │ │ ├── SDL_atomic.h │ │ │ │ ├── SDL_audio.h │ │ │ │ ├── SDL_bits.h │ │ │ │ ├── SDL_blendmode.h │ │ │ │ ├── SDL_clipboard.h │ │ │ │ ├── SDL_config.h │ │ │ │ ├── SDL_config_macosx.h │ │ │ │ ├── SDL_copying.h │ │ │ │ ├── SDL_cpuinfo.h │ │ │ │ ├── SDL_endian.h │ │ │ │ ├── SDL_error.h │ │ │ │ ├── SDL_events.h │ │ │ │ ├── SDL_filesystem.h │ │ │ │ ├── SDL_gamecontroller.h │ │ │ │ ├── SDL_gesture.h │ │ │ │ ├── SDL_haptic.h │ │ │ │ ├── SDL_hidapi.h │ │ │ │ ├── SDL_hints.h │ │ │ │ ├── SDL_joystick.h │ │ │ │ ├── SDL_keyboard.h │ │ │ │ ├── SDL_keycode.h │ │ │ │ ├── SDL_loadso.h │ │ │ │ ├── SDL_locale.h │ │ │ │ ├── SDL_log.h │ │ │ │ ├── SDL_main.h │ │ │ │ ├── SDL_messagebox.h │ │ │ │ ├── SDL_metal.h │ │ │ │ ├── SDL_misc.h │ │ │ │ ├── SDL_mouse.h │ │ │ │ ├── SDL_mutex.h │ │ │ │ ├── SDL_name.h │ │ │ │ ├── SDL_opengl.h │ │ │ │ ├── SDL_opengl_glext.h │ │ │ │ ├── SDL_opengles.h │ │ │ │ ├── SDL_opengles2.h │ │ │ │ ├── SDL_opengles2_gl2.h │ │ │ │ ├── SDL_opengles2_gl2ext.h │ │ │ │ ├── SDL_opengles2_gl2platform.h │ │ │ │ ├── SDL_opengles2_khrplatform.h │ │ │ │ ├── SDL_pixels.h │ │ │ │ ├── SDL_platform.h │ │ │ │ ├── SDL_power.h │ │ │ │ ├── SDL_quit.h │ │ │ │ ├── SDL_rect.h │ │ │ │ ├── SDL_render.h │ │ │ │ ├── SDL_revision.h │ │ │ │ ├── SDL_rwops.h │ │ │ │ ├── SDL_scancode.h │ │ │ │ ├── SDL_sensor.h │ │ │ │ ├── SDL_shape.h │ │ │ │ ├── SDL_stdinc.h │ │ │ │ ├── SDL_surface.h │ │ │ │ ├── SDL_system.h │ │ │ │ ├── SDL_syswm.h │ │ │ │ ├── SDL_thread.h │ │ │ │ ├── SDL_timer.h │ │ │ │ ├── SDL_touch.h │ │ │ │ ├── SDL_types.h │ │ │ │ ├── SDL_version.h │ │ │ │ ├── SDL_video.h │ │ │ │ ├── SDL_vulkan.h │ │ │ │ ├── begin_code.h │ │ │ │ └── close_code.h │ │ │ ├── Resources/ │ │ │ │ ├── Info.plist │ │ │ │ ├── License.txt │ │ │ │ ├── ReadMe.txt │ │ │ │ └── default.metallib │ │ │ ├── SDL2 │ │ │ └── _CodeSignature/ │ │ │ └── CodeResources │ │ ├── build.sh │ │ ├── main.c │ │ ├── mpconfigport.h │ │ ├── mpconfigport.mk │ │ ├── package.sh │ │ ├── tulip.icns │ │ ├── variants/ │ │ │ └── manifest.py │ │ └── virtualmidi.m │ ├── release.sh │ ├── server/ │ │ ├── .gitignore │ │ ├── amyboardworld_admin.html │ │ ├── amyboardworld_db_api.md │ │ ├── amyboardworld_db_api.py │ │ ├── backup_world.py │ │ ├── migrate_tulipworld_from_discord.py │ │ ├── railway.json │ │ └── requirements.txt │ ├── shared/ │ │ ├── amy_connector.c │ │ ├── amy_connector.h │ │ ├── amyboard-py/ │ │ │ ├── amyboard.py │ │ │ ├── pye.py │ │ │ ├── pye_core.py │ │ │ ├── pye_gen.py │ │ │ └── self_test.py │ │ ├── bigfont.c │ │ ├── bresenham.c │ │ ├── bresenham.h │ │ ├── desktop/ │ │ │ ├── mpconfigport.h │ │ │ ├── mpconfigport.mk │ │ │ ├── mphalport.h │ │ │ ├── mpthreadport.c │ │ │ ├── mpthreadport.h │ │ │ ├── multicast.c │ │ │ ├── unix_display.c │ │ │ └── unix_mphal.c │ │ ├── display.c │ │ ├── display.h │ │ ├── editor.c │ │ ├── grab_submodules.sh │ │ ├── help.c │ │ ├── keyscan.c │ │ ├── keyscan.h │ │ ├── lodepng.c │ │ ├── lodepng.h │ │ ├── lvgl_u8g2.c │ │ ├── modtulip.c │ │ ├── polyfills.c │ │ ├── polyfills.h │ │ ├── py/ │ │ │ ├── _boot.py │ │ │ ├── _sx126x.py │ │ │ ├── adc1115.py │ │ │ ├── arpegg.py │ │ │ ├── chunk.py │ │ │ ├── drums.py │ │ │ ├── editor.py │ │ │ ├── juno6.py │ │ │ ├── learn_midi_codes.py │ │ │ ├── m58angle.py │ │ │ ├── m5_8encoder.py │ │ │ ├── m5adc.py │ │ │ ├── m5cardkb.py │ │ │ ├── m5dac.py │ │ │ ├── m5dac2.py │ │ │ ├── m5digiclock.py │ │ │ ├── m5extend.py │ │ │ ├── m5joy.py │ │ │ ├── mabeedac.py │ │ │ ├── midi.py │ │ │ ├── music.py │ │ │ ├── patches.py │ │ │ ├── sequencer.py │ │ │ ├── sh1107.py │ │ │ ├── ssd1327.py │ │ │ ├── sx1262.py │ │ │ ├── sx126x.py │ │ │ ├── synth.py │ │ │ ├── tulip.py │ │ │ ├── tulip_graphics.py │ │ │ ├── tulip_queue.py │ │ │ ├── tuliprequests.py │ │ │ ├── ui.py │ │ │ ├── upysh.py │ │ │ ├── utarfile.py │ │ │ ├── voices.py │ │ │ ├── world.py │ │ │ ├── world_web.py │ │ │ └── worldui.py │ │ ├── smallfont.c │ │ ├── tsequencer.c │ │ ├── tsequencer.h │ │ ├── tulip.mk │ │ ├── tulip_helpers.c │ │ ├── tulip_helpers.h │ │ ├── u8fontdata.c │ │ ├── u8fontdata.h │ │ ├── u8g2_fonts.c │ │ ├── u8g2_fonts.h │ │ ├── ui.c │ │ ├── ui.h │ │ ├── ulab/ │ │ │ ├── .gitignore │ │ │ ├── .readthedocs.yaml │ │ │ ├── CONTRIBUTING.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── build/ │ │ │ │ ├── esp32-cmake.sh │ │ │ │ ├── esp32.sh │ │ │ │ ├── rp2.sh │ │ │ │ └── rp2w.sh │ │ │ ├── build-cp.sh │ │ │ ├── build.sh │ │ │ ├── code/ │ │ │ │ ├── micropython.cmake │ │ │ │ ├── micropython.mk │ │ │ │ ├── ndarray.c │ │ │ │ ├── ndarray.h │ │ │ │ ├── ndarray_operators.c │ │ │ │ ├── ndarray_operators.h │ │ │ │ ├── ndarray_properties.c │ │ │ │ ├── ndarray_properties.h │ │ │ │ ├── numpy/ │ │ │ │ │ ├── approx.c │ │ │ │ │ ├── approx.h │ │ │ │ │ ├── bitwise.c │ │ │ │ │ ├── bitwise.h │ │ │ │ │ ├── carray/ │ │ │ │ │ │ ├── carray.c │ │ │ │ │ │ ├── carray.h │ │ │ │ │ │ ├── carray_tools.c │ │ │ │ │ │ └── carray_tools.h │ │ │ │ │ ├── compare.c │ │ │ │ │ ├── compare.h │ │ │ │ │ ├── create.c │ │ │ │ │ ├── create.h │ │ │ │ │ ├── fft/ │ │ │ │ │ │ ├── fft.c │ │ │ │ │ │ ├── fft.h │ │ │ │ │ │ ├── fft_tools.c │ │ │ │ │ │ └── fft_tools.h │ │ │ │ │ ├── filter.c │ │ │ │ │ ├── filter.h │ │ │ │ │ ├── io/ │ │ │ │ │ │ ├── io.c │ │ │ │ │ │ └── io.h │ │ │ │ │ ├── linalg/ │ │ │ │ │ │ ├── linalg.c │ │ │ │ │ │ ├── linalg.h │ │ │ │ │ │ ├── linalg_tools.c │ │ │ │ │ │ └── linalg_tools.h │ │ │ │ │ ├── ndarray/ │ │ │ │ │ │ ├── ndarray_iter.c │ │ │ │ │ │ └── ndarray_iter.h │ │ │ │ │ ├── numerical.c │ │ │ │ │ ├── numerical.h │ │ │ │ │ ├── numpy.c │ │ │ │ │ ├── numpy.h │ │ │ │ │ ├── poly.c │ │ │ │ │ ├── poly.h │ │ │ │ │ ├── random/ │ │ │ │ │ │ ├── random.c │ │ │ │ │ │ └── random.h │ │ │ │ │ ├── stats.c │ │ │ │ │ ├── stats.h │ │ │ │ │ ├── transform.c │ │ │ │ │ ├── transform.h │ │ │ │ │ ├── vector.c │ │ │ │ │ └── vector.h │ │ │ │ ├── scipy/ │ │ │ │ │ ├── integrate/ │ │ │ │ │ │ ├── integrate.c │ │ │ │ │ │ └── integrate.h │ │ │ │ │ ├── linalg/ │ │ │ │ │ │ ├── linalg.c │ │ │ │ │ │ └── linalg.h │ │ │ │ │ ├── optimize/ │ │ │ │ │ │ ├── optimize.c │ │ │ │ │ │ └── optimize.h │ │ │ │ │ ├── scipy.c │ │ │ │ │ ├── scipy.h │ │ │ │ │ ├── signal/ │ │ │ │ │ │ ├── signal.c │ │ │ │ │ │ └── signal.h │ │ │ │ │ └── special/ │ │ │ │ │ ├── special.c │ │ │ │ │ └── special.h │ │ │ │ ├── ulab.c │ │ │ │ ├── ulab.h │ │ │ │ ├── ulab_tools.c │ │ │ │ ├── ulab_tools.h │ │ │ │ ├── user/ │ │ │ │ │ ├── user.c │ │ │ │ │ └── user.h │ │ │ │ └── utils/ │ │ │ │ ├── utils.c │ │ │ │ └── utils.h │ │ │ ├── docs/ │ │ │ │ ├── manual/ │ │ │ │ │ ├── Makefile │ │ │ │ │ ├── make.bat │ │ │ │ │ └── source/ │ │ │ │ │ ├── conf.py │ │ │ │ │ ├── index.rst │ │ │ │ │ ├── numpy-fft.rst │ │ │ │ │ ├── numpy-functions.rst │ │ │ │ │ ├── numpy-linalg.rst │ │ │ │ │ ├── numpy-random.rst │ │ │ │ │ ├── numpy-universal.rst │ │ │ │ │ ├── scipy-linalg.rst │ │ │ │ │ ├── scipy-optimize.rst │ │ │ │ │ ├── scipy-signal.rst │ │ │ │ │ ├── scipy-special.rst │ │ │ │ │ ├── ulab-intro.rst │ │ │ │ │ ├── ulab-ndarray.rst │ │ │ │ │ ├── ulab-programming.rst │ │ │ │ │ ├── ulab-tricks.rst │ │ │ │ │ └── ulab-utils.rst │ │ │ │ ├── numpy-fft.ipynb │ │ │ │ ├── numpy-functions.ipynb │ │ │ │ ├── numpy-linalg.ipynb │ │ │ │ ├── numpy-random.ipynb │ │ │ │ ├── numpy-universal.ipynb │ │ │ │ ├── scipy-integrate.ipynb │ │ │ │ ├── scipy-linalg.ipynb │ │ │ │ ├── scipy-optimize.ipynb │ │ │ │ ├── scipy-signal.ipynb │ │ │ │ ├── scipy-special.ipynb │ │ │ │ ├── templates/ │ │ │ │ │ ├── manual.tpl │ │ │ │ │ └── rst.tpl │ │ │ │ ├── ulab-approx.ipynb │ │ │ │ ├── ulab-change-log.md │ │ │ │ ├── ulab-compare.ipynb │ │ │ │ ├── ulab-convert.ipynb │ │ │ │ ├── ulab-intro.ipynb │ │ │ │ ├── ulab-ndarray.ipynb │ │ │ │ ├── ulab-numerical.ipynb │ │ │ │ ├── ulab-poly.ipynb │ │ │ │ ├── ulab-programming.ipynb │ │ │ │ ├── ulab-tricks.ipynb │ │ │ │ └── ulab-utils.ipynb │ │ │ ├── requirements.txt │ │ │ ├── requirements_cp_dev.txt │ │ │ ├── run-tests │ │ │ ├── snippets/ │ │ │ │ ├── json_to_ndarray.py │ │ │ │ ├── ndarray_to_json.py │ │ │ │ ├── numpy/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── core/ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ ├── fromnumeric.py │ │ │ │ │ │ ├── multiarray.py │ │ │ │ │ │ ├── numeric.py │ │ │ │ │ │ ├── overrides.py │ │ │ │ │ │ └── shape_base.py │ │ │ │ │ └── lib/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── block.py │ │ │ │ │ ├── function_base.py │ │ │ │ │ ├── polynomial.py │ │ │ │ │ └── type_check.py │ │ │ │ ├── rclass.py │ │ │ │ ├── scipy/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── signal/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── filter_design.py │ │ │ │ └── tests/ │ │ │ │ ├── numpy/ │ │ │ │ │ ├── core/ │ │ │ │ │ │ ├── fromnumeric.py │ │ │ │ │ │ ├── multiarray.py │ │ │ │ │ │ ├── numeric.py │ │ │ │ │ │ └── shape_base.py │ │ │ │ │ └── lib/ │ │ │ │ │ ├── block.py │ │ │ │ │ ├── function_base.py │ │ │ │ │ ├── polynomial.py │ │ │ │ │ └── type_check.py │ │ │ │ └── scipy/ │ │ │ │ └── signal/ │ │ │ │ └── filter_design.py │ │ │ ├── test-common.sh │ │ │ ├── test-snippets.sh │ │ │ └── tests/ │ │ │ ├── 1d/ │ │ │ │ ├── complex/ │ │ │ │ │ ├── complex_exp.py │ │ │ │ │ ├── complex_sqrt.py │ │ │ │ │ └── imag_real.py │ │ │ │ └── numpy/ │ │ │ │ ├── 00smoke.py │ │ │ │ ├── argminmax.py │ │ │ │ ├── compare.py │ │ │ │ ├── convolve.py │ │ │ │ ├── fft.py │ │ │ │ ├── gc.py │ │ │ │ ├── interp.py │ │ │ │ ├── optimize.py │ │ │ │ ├── poly.py │ │ │ │ ├── slicing.py │ │ │ │ ├── slicing2.py │ │ │ │ ├── sum.py │ │ │ │ ├── trapz.py │ │ │ │ └── universal_functions.py │ │ │ ├── 2d/ │ │ │ │ ├── complex/ │ │ │ │ │ ├── binary_op.py │ │ │ │ │ ├── complex_exp.py │ │ │ │ │ ├── complex_sqrt.py │ │ │ │ │ ├── conjugate.py │ │ │ │ │ ├── imag_real.py │ │ │ │ │ └── sort_complex.py │ │ │ │ ├── numpy/ │ │ │ │ │ ├── 00smoke.py │ │ │ │ │ ├── and.py │ │ │ │ │ ├── any_all.py │ │ │ │ │ ├── arange.py │ │ │ │ │ ├── asarray.py │ │ │ │ │ ├── bitwise_and.py │ │ │ │ │ ├── bitwise_or.py │ │ │ │ │ ├── bitwise_xor.py │ │ │ │ │ ├── buffer.py │ │ │ │ │ ├── cholesky.py │ │ │ │ │ ├── concatenate.py │ │ │ │ │ ├── delete.py │ │ │ │ │ ├── diag.py │ │ │ │ │ ├── eye.py │ │ │ │ │ ├── full.py │ │ │ │ │ ├── initialisation.py │ │ │ │ │ ├── isinf.py │ │ │ │ │ ├── left_shift.py │ │ │ │ │ ├── linalg.py │ │ │ │ │ ├── linspace.py │ │ │ │ │ ├── load_save.py │ │ │ │ │ ├── loadtxt.py │ │ │ │ │ ├── logspace.py │ │ │ │ │ ├── methods.py │ │ │ │ │ ├── nonzero.py │ │ │ │ │ ├── numericals.py │ │ │ │ │ ├── ones.py │ │ │ │ │ ├── operators.py │ │ │ │ │ ├── or.py │ │ │ │ │ ├── reshape.py │ │ │ │ │ ├── right_shift.py │ │ │ │ │ ├── savetxt.py │ │ │ │ │ ├── signal.py │ │ │ │ │ ├── size.py │ │ │ │ │ ├── sort.py │ │ │ │ │ ├── take.py │ │ │ │ │ ├── vectorize.py │ │ │ │ │ ├── where.py │ │ │ │ │ ├── xor.py │ │ │ │ │ └── zeros.py │ │ │ │ ├── scipy/ │ │ │ │ │ ├── cho_solve.py │ │ │ │ │ ├── integrate.py │ │ │ │ │ ├── solve_triangular.py │ │ │ │ │ └── sosfilt.py │ │ │ │ └── utils/ │ │ │ │ └── from_buffer.py │ │ │ ├── 3d/ │ │ │ │ ├── complex/ │ │ │ │ │ ├── complex_exp.py │ │ │ │ │ ├── complex_sqrt.py │ │ │ │ │ └── imag_real.py │ │ │ │ └── numpy/ │ │ │ │ └── create.py │ │ │ └── 4d/ │ │ │ ├── complex/ │ │ │ │ ├── complex_exp.py │ │ │ │ ├── complex_sqrt.py │ │ │ │ └── imag_real.py │ │ │ └── numpy/ │ │ │ └── create.py │ │ └── util/ │ │ └── file_server.py │ ├── tdeck/ │ │ └── README.md │ └── web/ │ ├── Makefile │ ├── README.md │ ├── api.js │ ├── asyncio/ │ │ ├── __init__.py │ │ └── core.py │ ├── build.sh │ ├── deploy.sh │ ├── lexer_dedent.c │ ├── lexer_dedent.h │ ├── lextab.py │ ├── library.h │ ├── library.js │ ├── main.c │ ├── mipweb/ │ │ ├── manifest.py │ │ └── mipweb/ │ │ └── __init__.py │ ├── modjs.c │ ├── modjsffi.c │ ├── modtime.c │ ├── mpconfigport.h │ ├── mphalport.c │ ├── mphalport.h │ ├── node_run.sh │ ├── objjsproxy.c │ ├── objpyproxy.js │ ├── package.json │ ├── proxy_c.c │ ├── proxy_c.h │ ├── proxy_js.js │ ├── qstrdefsport.h │ ├── serve.sh │ ├── server.py │ ├── static/ │ │ ├── amyrepl.css │ │ ├── examples.js │ │ ├── index.html │ │ ├── mini-coi.js │ │ ├── spss.js │ │ ├── tree.js │ │ └── treejs.css │ ├── variants/ │ │ ├── manifest.py │ │ ├── pyscript/ │ │ │ ├── manifest.py │ │ │ ├── mpconfigvariant.h │ │ │ └── mpconfigvariant.mk │ │ └── standard/ │ │ ├── mpconfigvariant.h │ │ └── mpconfigvariant.mk │ └── yacctab.py └── www/ ├── css/ │ ├── all.css │ ├── amyrepl.css │ ├── prism.css │ └── theme.css ├── index.html ├── js/ │ ├── aos.cjs.js │ ├── aos.esm.js │ ├── aos.js │ ├── bootstrap.bundle.js │ ├── bootstrap.esm.js │ ├── bootstrap.js │ └── prism.js └── run/ ├── amy-20260325084235.aw.js ├── amy-20260325084235.js ├── amy-20260325084235.wasm ├── amyrepl.css ├── examples.js ├── index.html ├── mini-coi.js ├── spss.js ├── tree.js ├── treejs.css ├── tulipcc-20260325084235.data ├── tulipcc-20260325084235.mjs └── tulipcc-20260325084235.wasm