Full Code of shorepine/tulipcc for AI

main 1fd8593afde4 cached
1889 files
93.0 MB
24.5M tokens
15007 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (97,969K chars total). Download the full file to get everything.
Repository: shorepine/tulipcc
Branch: main
Commit: 1fd8593afde4
Files: 1889
Total size: 93.0 MB

Directory structure:
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

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/workflows/desktop-linux.yml
================================================
name: C/C++ CI

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: setup
      run: sudo apt update; sudo apt install libsdl2-dev libffi-dev
    - name: make
      run: cd tulip/linux; ./build.sh


================================================
FILE: .github/workflows/static.yml
================================================
# Simple workflow for deploying static content to GitHub Pages
name: Deploy static content to Pages

on:
  # Runs on pushes targeting the default branch
  push:
    branches: ["main"]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
  contents: read
  pages: write
  id-token: write

# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
  group: "pages"
  cancel-in-progress: false

jobs:
  # Single deploy job since we're just deploying
  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Setup Pages
        uses: actions/configure-pages@v5
      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          # Upload entire repository
          path: 'www'
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4


================================================
FILE: .gitignore
================================================
.DS_Store
__pycache__
tulip/macos/gon_config.json
esp-idf/components/bootloader/subproject/dependencies.lock
dependencies.lock
tulip/esp32s3/dist
tulip/esp32s3/build
tulip/esp32s3/tulip-sys.bin
tulip/esp32s3/tulip-vfs.bin
tulip/macos/build-standard/
tulip/macos/tulip
tulip/macos/tulip.arm64
tulip/macos/tulip.x86_64
tulip/macos/dist
tulip/macos/lextab.py
tulip/macos/yacctab.py
tulip/linux/build-standard
tulip/amyrepl/build-standard
tulip/web/build-standard
tulip/linux/dev
tulip/ios/build-standard
tulip/esp32s3/managed_components
tulip/tdeck/build
tulip/tdeck/managed_components
tulip/tulipcc_r10/build
tulip/tulipcc_r10/managed_components
.submodules_ok
tulip/fs/tulip/ex/my_*
tulip/fs/amboard/ex/my_*
tulip/web/stage
tulip/amyboardweb/stage
tulip/amyboard/build
tulip/amyboard/dist
tulip/amyboard/managed_components
tulip/amyboardweb/build-standard
.python-version

# Prerequisites
*.d

# Object files
*.o
*.ko
*.obj
*.elf
*.pyc
*.P

# Linker output
*.ilk
*.exp

# Precompiled Headers
*.gch
*.pch

# Libraries
*.lib
#*.a
*.la
*.lo

# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
#*.dylib

# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
*.hex

# Debug files
*.dSYM/
*.su
*.idb
*.pdb

# Kernel Module Compile Results
*.mod*
*.cmd
.tmp_versions/
modules.order
Module.symvers
Mkfile.old
dkms.conf

mpy-cross/build/genhdr/mpversion.h

# KiCAD Temporary files

*.000
*.bak
*.bck
*.kicad_pcb-bak
*.kicad_sch-bak
*-backups
*.kicad_prl
*.sch-bak
*~
_autosave-*
*auto_saved_files*
*.tmp
*-save.pro
*-save.kicad_pcb
fp-info-cache
*.lck


================================================
FILE: .gitmodules
================================================
[submodule "micropython"]
	path = micropython
	url = https://github.com/micropython/micropython
[submodule "amy"]
	path = amy
	url = https://github.com/shorepine/amy


================================================
FILE: AGENTS.md
================================================
# Agent Instructions for `tulipcc`

## Worktree File Editing

When working in a worktree, **always use relative paths** or the full worktree path for file edits. Never use `/Users/bwhitman/outside/tulipcc/tulip/...` — that's the main repo, not the worktree. The worktree is at the current working directory. Using main repo paths will silently edit the wrong copy and the changes won't appear in your build or in VS Code. This applies to all files including submodules like `amy/`.

## Submodule Setup

To initialize and update submodules for this repo, use:

- `tulip/shared/grab_submodules.sh`

Do not use ad-hoc/manual recursive submodule commands when this script is available.

Important:

- Run this script from `tulip/shared` (for example: `cd tulip/shared && ./grab_submodules.sh`). The script uses relative paths and will fail or partially run from other directories.
- The script creates `.submodules_ok` at repo root after first successful setup. If submodule pointers change and you need to force a resync, remove `.submodules_ok` and rerun the script from `tulip/shared`.
- `micropython` is expected to appear dirty after running submodule setup. `grab_submodules.sh` intentionally patches `micropython/mpy-cross/Makefile` (`-Wno-gnu-folding-constant`) so it compiles on newer macOS clang versions.

## Micropython Submodule Status

The `micropython` submodule is expected to appear dirty after bootstrap/build steps (for example, local warning-flag patching done by `tulip/shared/grab_submodules.sh`).

Treat this as expected local state and ignore `micropython` dirtiness in `git status` unless you are intentionally working on `micropython`.

## AMY Submodule Policy

We constantly update the `amy` submodule to work with `tulipcc`.

Before pushing anything in `tulipcc` to `main`, the `amy` submodule must be pinned to the latest known working git version.

### Checking if AMY is up to date

When asked to update to the latest commits, always fetch the AMY remote and compare against its remote main — do not assume the pinned commit is current:

1. `cd amy && git fetch amy-origin main`
2. Compare `git rev-parse amy-origin/main` vs `git rev-parse HEAD`
3. If they differ, checkout the latest and update the pin in `tulipcc`

### Making changes to AMY

If an agent makes changes to `amy`, the agent must follow this exact sequence:

1. Open a PR in the `amy` repository for those `amy` changes.
2. Run `make test` in `amy`.
3. In `tulipcc`, point the `amy` submodule to the AMY PR commit and test `tulipcc`.
4. If both `amy` tests and `tulipcc` tests pass, merge the `amy` PR.
5. Pin the `amy` submodule in `tulipcc` to that merged `amy` commit.
6. Commit the submodule pointer update in `tulipcc`.
7. Merge/push `tulipcc` to `main`.

## Testing `tulipcc`

The easiest ways to test `tulipcc` are:

- `./build.sh` in `tulip/macos`
- `./build.sh` in `tulip/web`
- `./build.sh` in `tulip/amyboardweb`

All three `build.sh` scripts exit after building. To start a local dev server on port 8000 after building, run `./serve.sh` in `tulip/web` or `tulip/amyboardweb`.

## ESP-IDF Build Commands (Required)

If the user asks to build `amyboard`, or asks to build `tulip cc` / `tulip esp32s3`, first run:

- `source ~/.espressif/python_env/idf5.4_py3.13_env/bin/activate`
- `source ~/esp/esp-idf-v5.4.1/export.sh`

For `amyboard` build:

1. `cd tulip/amyboard`
2. `idf.py -DMICROPY_BOARD=AMYBOARD build`

For `tulip cc` or `tulip esp32s3` build:

1. `cd tulip/esp32s3`
2. `idf.py -DMICROPY_BOARD=TULIP4_R11 build`

## Tulip Release

Only perform a Tulip release when the user explicitly asks for it.

**Important:** Releases must always be built from the `main` branch (or a worktree reset to `origin/main`). Before starting a release, ensure the working tree is on `main` with all intended changes merged. Never release from an unmerged feature branch.

Release steps:

1. Ensure you are on the `main` branch (or reset to `origin/main`).
2. Activate the Espressif virtualenv:
   - `source ~/.espressif/python_env/idf5.4_py3.13_env/bin/activate`
3. Change into the `tulip/` directory.
4. Ensure release tag `v-XXX-2026` exists (where `XXX` is `jan`, `feb`, `mar`, `apr`, etc.).
   - If the tag does not exist, create it first.
5. Run:
   - `./release.sh v-XXX-2026 upload`

Web release steps (run when the user asks to release/deploy web targets):

1. For Tulip Web:
   - `cd tulip/web`
   - `./build.sh`
   - Ensure compile/build succeeded.
   - `./deploy.sh`
   - Merge the deploy branch to `main` so GitHub Pages publishes updated `www/run` artifacts.
2. For Amyboard Web:
   - `cd tulip/amyboardweb`
   - `./build.sh`
   - Ensure compile/build succeeded.
   - `./deploy.sh`

Notes:

- This command cleans and compiles all Tulip targets.
- Typical runtime is about 5 to 10 minutes.

## Safe Git Merge Procedure (Required)

When a user asks to commit/push/merge PR changes, treat it as a strict ordered workflow.

### Ordering Rules

- Do not run `git push` and PR merge commands in parallel.
- Do not run any dependent git steps in parallel.
- Required order is:
  1. `git add` / `git commit`
  2. `git push`
  3. confirm remote branch tip equals local `HEAD`
  4. merge PR
  5. confirm `origin/main` contains expected commit(s)

### Pre-Merge Verification (Required)

Before merging:
1. Ensure local branch is clean except expected submodule dirtiness.
2. Ensure all intended files are committed (`git diff --name-only HEAD` should be empty for tracked files intended for merge).
3. Ensure remote branch includes latest commit:
   - `git rev-parse HEAD`
   - `git rev-parse origin/<current-branch>`
   - These must match before merge.

### Post-Merge Verification (Required)

After merging:
1. `git fetch origin main`
2. Verify merged commit SHA is reachable from `origin/main`.
3. Verify key changed files match expectations (for example with `git diff origin/main -- <path>`).
4. Report in final response:
   - merged PR number
   - merge commit SHA
   - confirmation that `origin/main` includes the intended changes

### Failure Handling

- If any verification fails, do not claim success.
- Continue until the intended commit(s) are in `origin/main` (or explain the blocking protection explicitly).


================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

## Our Pledge

In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.

## Our Standards

Examples of behavior that contributes to creating a positive environment
include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery and unwelcome sexual attention or
 advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
 address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
 professional setting

## Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.

## Scope

This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at brian@variogr.am. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq


================================================
FILE: LICENSE
================================================
Tulip Creative Computer

The MIT License (MIT)

Copyright (c) 2017-2022 Brian Whitman

Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files (the "Software"), to deal 
in the Software without restriction, including without limitation the rights 
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 
of the Software, and to permit persons to whom the Software is furnished to 
do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in 
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

--------------------------------------------------------------------------------

ESP-IDF:
See esp-idf/LICENSE

--------------------------------------------------------------------------------

Micropython

The MIT License (MIT)

Copyright (c) 2013-2022 Damien P. George

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

--------------------------------------------------------------------------------

Individual files may include additional copyright holders.

The various ports of MicroPython may include third-party software that is
licensed under different terms. These licenses are summarised in the tree
below, please refer to these files and directories for further license and
copyright information. Note that (L)GPL-licensed code listed below is only
used during the build process and is not part of the compiled source code.

/ (MIT)
    /drivers
        /cc3000 (BSD-3-clause)
        /cc3100 (BSD-3-clause)
        /wiznet5k (BSD-3-clause)
    /lib
        /asf4 (Apache-2.0)
        /axtls (BSD-3-clause)
            /config
                /scripts
                    /config (GPL-2.0-or-later)
                /Rules.mak (GPL-2.0)
        /berkeley-db-1xx (BSD-4-clause)
        /btstack (See btstack/LICENSE)
        /cmsis (BSD-3-clause)
        /crypto-algorithms (NONE)
        /libhydrogen (ISC)
        /littlefs (BSD-3-clause)
        /lwip (BSD-3-clause)
        /mynewt-nimble (Apache-2.0)
        /nrfx (BSD-3-clause)
        /nxp_driver (BSD-3-Clause)
        /oofatfs (BSD-1-clause)
        /pico-sdk (BSD-3-clause)
        /re15 (BSD-3-clause)
        /stm32lib (BSD-3-clause)
        /tinytest (BSD-3-clause)
        /tinyusb (MIT)
        /uzlib (Zlib)
    /logo (uses OFL-1.1)
    /ports
        /cc3200
            /hal (BSD-3-clause)
            /simplelink (BSD-3-clause)
            /FreeRTOS (GPL-2.0 with FreeRTOS exception)
        /stm32
            /usbd*.c (MCD-ST Liberty SW License Agreement V2)
            /stm32_it.* (MIT + BSD-3-clause)
            /system_stm32*.c (MIT + BSD-3-clause)
            /boards
                /startup_stm32*.s (BSD-3-clause)
                /*/stm32*.h (BSD-3-clause)
            /usbdev (MCD-ST Liberty SW License Agreement V2)
            /usbhost (MCD-ST Liberty SW License Agreement V2)
        /teensy
            /core (PJRC.COM)
        /zephyr
            /src (Apache-2.0)
    /tools
        /dfu.py (LGPL-3.0-only)


================================================
FILE: README.md
================================================
# Tulip Creative Computer - a portable programmable device for music, graphics, code and writing

![Tulip](https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pics/tulip_hero.jpg)

Welcome to the Tulip Creative Computer (Tulip CC)!
 
Tulip is a low power and affordable self-contained portable computer, with a touchscreen display and sound. It's fully programmable - you write code to define your music, games or anything else you can think of. It boots instantaneously into a Python prompt with a lot of built in support for music synthesis, fast graphics and text, hardware MIDI, network access and external sensors. Dive right into making something without distractions or complications. 

The entire system is dedicated to your code, the display and sound, running in real time, on specialized hardware. The hardware and software are fully open source and anyone can [buy one](https://tulip.computer/) or [build one](docs/tulip_build.md). You can use Tulip to make music, code, art, games, or just write. 

You can now even [run Tulip on the web](https://tulip.computer/run) and share your creations with anyone!

Tulip is powered by [MicroPython](https://micropython.org), [AMY](https://github.com/shorepine/amy), and [LVGL](https://lvgl.io). The Tulip hardware runs on the ESP32-S3 chip using the [ESP-IDF](https://github.com/espressif/esp-idf).

 * [**Get a Tulip** from our friends at Makerfabs for only US$59](https://tulip.computer)
 * [Just got a Tulip CC? **Check out our getting started guide!**](docs/getting_started.md)
 * [Want to make music with your Tulip? **See our music tutorial**](docs/music.md)
 * [See the full **Tulip API**](docs/tulip_api.md)
 * [**Try out Tulip on the web!**](https://tulip.computer/run/)

 [![shore pine sound systems discord](https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pics/shorepine100.png) **Chat about Tulip on our Discord!**](https://discord.gg/TzBFkUb8pG)

**Check out this video!**

[![Tulip, a musical computer based on Micropython
](https://i.ytimg.com/vi/1lYFjQp7Xrw/maxresdefault.jpg)](https://www.youtube.com/watch?v=1lYFjQp7Xrw "Tulip, a musical computer based on Micropython")

You can use Tulip one of three ways:
 * Tulip is available both as an [off the shelf or DIY hardware project (Tulip CC)](https://tulip.computer/)
 * [Tulip runs on the web](https://tulip.computer/run) with (almost) all the same features. 
 * Tulip can also run as a native app for Mac or Linux (or WSL in Windows) as [Tulip Desktop](docs/tulip_desktop.md)

If you're nervous about getting or building the hardware, [try it out on the web!](https://tulip.computer/run)

[![Tulip Web](https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pics/tulipweb.png)](https://tulip.computer/run/)

The hardware Tulip CC supports:

- 8.5MB of RAM - 2MB is available to MicroPython, and 1.5MB is available for OS memory. The rest is used for the graphics framebuffers (which you can use as storage) and the firmware cache. 
- 32MB flash storage, as a filesystem accesible in Python (24MB left over after OS in ROM)
- An [AMY](https://github.com/shorepine/amy) stereo 120-voice synthesizer engine running locally, or as a wireless controller for an [Alles](https://github.com/shorepine/alles) mesh. Tulip's synth supports additive and subtractive oscillators, an excellent FM synthesis engine, samplers, karplus-strong, high quality analog style filters, a sequencer, and much more. We ship Tulip with a drum machine, voices / patch app, and Juno-6 editor.
- Text frame buffer layer, 128 x 50, with ANSI support for 256 colors, inverse, bold, underline, background color
- Up to 32 sprites on screen, drawn per scanline, with collision detection, from a total of 32KB of bitmap memory (1 byte per pixel)
- A 1024 (+128 overscan) by 600 (+100 overscan) background frame buffer to draw arbitrary bitmaps to, or use as RAM, and which can scroll horizontally / vertically
- WiFi, access http via Python requests or TCP / UDP sockets 
- Adjustable display clock and resolution, defaults to 30 FPS at 1024x600.
- 256 colors
- Can load PNGs from disk to set sprites or background, or generate bitmap data from code
- Built in code and text editor
- Built in BBS chat room and file transfer area called **TULIP ~ WORLD**
- USB keyboard, MIDI and mouse support, including hubs 
- Capactive multi-touch support (mouse on Tulip Desktop and Tulip Web)
- MIDI input and output
- I2C / Grove / Mabee connector, compatible with [many I2C devices like joysticks, keyboard, GPIO, DACs, ADCs, hubs](docs/tulip_api.md#i2c--grove--mabee)
- 575mA power usage @ 5V including display, at medium display brightness, can last for hours on LiPo, 18650s, or USB battery pack 

I've been working on Tulip on and off for years over many hardware iterations and hope that someone out there finds it as fun as I have, either making things with Tulip or working on Tulip itself. I'd love feedback, your own Tulip experiments or pull requests to improve the system.

![Tulip](https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pics/tulip4.png)


 * [**Any issues with your Tulip CC? Here's our troubleshooting guide**](docs/troubleshooting.md)
 * [**Learn about our roadmap and find out what we're working on next**](https://github.com/orgs/shorepine/projects/1)
 * [**Build your own Tulip**](docs/tulip_build.md)
 * **[You can read more about the "why" or "how" of Tulip on my website!](https://notes.variogram.com/2024/07/30/tulip-available/)** 


## T-Deck Tulip CC

![T-Deck](docs/pics/tdeck_editor.jpg)

A **new** small option: get yourself a [T-Deck](https://www.aliexpress.us/item/3256805505920840.html?gatewayAdapt=glo2usa4itemAdapt) and install Tulip CC on it directly! [Check out our T-Deck page for more detail.](tulip/tdeck/README.md)


## Getting started

Once you've [bought a Tulip](https://tulip.computer), [opened Tulip Web](https://tulip.computer/run), [built a Tulip](docs/tulip_build.md) or [installed Tulip Desktop](docs/tulip_desktop.md), you'll see that Tulip boots right into a Python prompt and all interaction with the system happens there. You can make your own Python programs with Tulip's built in editor and execute them, or just experiment on the Tulip REPL prompt in real time.

[**See the full Tulip API**](docs/tulip_api.md) for more details on all the graphics, sound and input functions.

Below are a few getting started tips and small examples. The [full API](docs/tulip_api.md) page has more detail on everything you can do on a Tulip. [**See a more complete getting started page**](docs/getting_started.md) or [**a music making tutorial**](docs/music.md) as well!



```python
# Run a saved Python file. Control-C stops it
cd('ex') # The ex folder has a few examples and graphics in it
execfile("parallax.py")
# If you want to run a Tulip package (folder with other files in it)
run("game")
```

### The Tulip Editor

Tulip ships with a text editor, based on pico/nano. It supports syntax highlighting, search, save/save-as. 

```python
# Opens the Tulip editor to the given filename. 
edit("game.py")
```

![Editor](https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pics/editor.png)


### Input and user interface

Tulip supports USB keyboard and mice input as well as touch input. (On Tulip Desktop and Web, mouse clicks act as touch points.) It also comes with UI elements like buttons and sliders to use in your applications, and a way to run mulitple applications as once using callbacks. More in the [full API](docs/tulip_api.md).

```python
(x0, y0, x1, y1, x2, y2) = tulip.touch()
```

![UI demo](https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pics/sliders.png)


### Network

Tulip CC has the capability to connect to a Wi-Fi network, and Python's native requests library will work to access TCP and UDP. We ship a few convenience functions to grab data from URLs as well. More in the [full API](docs/tulip_api.md).

```python
# Join a wifi network (not needed on Tulip Desktop or Web)
tulip.wifi("ssid", "password")

# Get IP address or check if connected
ip_address = tulip.ip() # returns None if not connected

# Save the contents of a URL to disk (needs wifi)
bytes_read = tulip.url_save("https://url", "filename.ext")
```


### Music / sound

Tulip comes with the AMY synthesizer, a very full featured 120-oscillator synth that supports FM, PCM, additive synthesis, partial synthesis, filters, and much more. We also provide a useful "music computer" for scales, chords and progressions. More in the [full API](docs/tulip_api.md) and in the [music tutorial.](docs/music.md) Tulip's version of AMY comes with stereo sound, which you can set per oscillator with the `pan` parameter.

```python
amy.drums() # plays a test song
amy.send(volume=4) # change volume
amy.reset() # stops all music / sounds playing
```
https://user-images.githubusercontent.com/76612/215893940-658144b7-0c6f-42e2-9836-bd271597aab3.mov


### MIDI

Tulip supports MIDI in and out to connect to external music hardware. You can set up a Python callback to respond immediately to any incoming MIDI message. You can also send messages out to MIDI out. More in the [full API](docs/tulip_api.md) and [music tutorial](docs/music.md).

```python
m = tulip.midi_in() # returns bytes of the last MIDI message received
tulip.midi_out((144,60,127)) # sends a note on message
tulip.midi_out(bytes) # Can send bytes or list
```

### Graphics system

The Tulip GPU supports a scrolling background layer, hardware sprites, and a text layer. Much more in the [full API](docs/tulip_api.md).

```python
# Set or get a pixel on the BG
pal_idx = tulip.bg_pixel(x,y)

# Set the contents of a PNG file on the background.
tulip.bg_png(png_filename, x, y)

tulip.bg_scroll(line, x_offset, y_offset, x_speed, y_speed)
```

https://user-images.githubusercontent.com/76612/215895305-7b02ad27-b02a-429a-92ef-f13136e9f9d2.mov


Hardware sprites are supported. They draw over the background and text layer per scanline per frame:

```python
(w, h, bytes) = tulip.sprite_png("filename.png", mem_pos)

...

# Set a sprite x and y position
tulip.sprite_move(12, x, y)
```

https://user-images.githubusercontent.com/76612/215896311-fc0823aa-44bc-4305-85db-a6773db11a98.mov


### Tulip World

Still very much early days, but Tulip supports a native chat and file sharing BBS called **TULIP ~ WORLD** where you can hang out with other Tulip owners. You're able to pull down the latest messages and files and send messages and files yourself. More in the [full API](docs/tulip_api.md).

```python
import world
world.post_message("hello!!") # Sends a message to Tulip World. username required. will prompt if not set
world.upload(filename) # Uploads a file to Tulip World. username required
world.ls() # lists most recent unique filenames/usernames
```

## How to build, compile and help develop Tulip

 * [Get a Tulip!](https://tulip.computer)
 * [Build your own Tulip Creative Computer](docs/tulip_build.md) with FOUR different options.
 * [How to compile and flash Tulip hardware](docs/tulip_flashing.md)
 * [How to run or compile Tulip Desktop](docs/tulip_desktop.md)
 * [The full Tulip API](docs/tulip_api.md)
 * [File any code issues or pull requests!](https://github.com/shorepine/tulipcc/issues)

[![shore pine sound systems discord](https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pics/shorepine100.png) **Chat about Tulip on our Discord!**](https://discord.gg/TzBFkUb8pG)

Two important development guidelines if you'd like to help contribute!

 * Be nice and helpful and don't be afraid to ask questions! We're all doing this for fun and to learn. 
 * Any change or feature must be equivalent across Tulip Desktop and Tulip CC. There are of course limited exceptions to this rule, but please test on hardware before proposing a new feature / change. 

Have fun!

![Tulip](https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pics/tulip4.png)










================================================
FILE: docs/amyboard/README.md
================================================
# Getting Started with AMYboard

Welcome to **AMYboard** -- a powerful music synthesizer on a small modular-compatible board, for $29. AMYboard is built on the [AMY synthesizer](https://github.com/shorepine/amy) and runs [MicroPython](https://micropython.org) on an ESP32-S3.

<img src="https://amyboard.com/img/amyboard_preview.png" width=500>

AMYboard gives you:

 - **128 Juno-6 analog patches** and **128 DX7 FM patches**, plus piano, drums, and custom synthesis
 - **MIDI in and out** (USB gadget and TRS)
 - **CV in and out** for modular synth integration (-10V to +10V)
 - **S/PDIF in and out** for digital audio
 - **SD card** for extra storage and samples
 - **I2C port** for [accessories](accessories.md) -- encoders, displays, and more
 - **Python programmability** -- write code to control every parameter of the synth
 - **Web editor** at [amyboard.com](https://amyboard.com/editor) for patch design and environment management

If you have problems with AMYboard, check out the [troubleshooting page](troubleshooting.md). 

-- DAn and Brian

## What's in the box

AMYboard ships from [Makerfabs](https://amyboard.com/#get). In the box you'll get the board itself with the connectors already on, and an optional front panel that you can use if you want to mount your AMYboard in a Eurorrack case. See [Modular Synth Setup](modular.md) for details on the front panel and Eurorack mounting.


## How AMYboard works - patches and sketches

By default, our firmware boots your AMYboard up with what we call an "environment" - a list of patch to MIDI channel assignments and some default Python code that can run on startup. If you use [AMYboard online](online.md) you can change the patches, load new presets, load patches from others on our file sharing network AMYboard World, or write your own code to run on your AMYboard. 

When AMYboard starts up, it sets up whatever patches are set to each channel and then runs the code that the user set up, if any. The code lets you build great interactive environments: you can load default patches and then have code modify them or change how inputs from CV or MIDI affect the patches, for example. 

You can browse AMYboard World to find other environments to get inspiration! Download them and change them to fit your needs.

You can also remove our custom firmware (it's easy to put back!) and run AMYboard under [Arduino](arduino.md) where you'll have full control over everything on AMYboard. 

## Board overview

<img src="https://raw.githubusercontent.com/shorepine/tulipcc/main/www/img/amyboard_front_panel_annotated.jpg" width=500>

**Front panel connectors** (top to bottom, 10 jacks):

| Connector | Description |
|-----------|-------------|
| **S/PDIF in** | 3.5mm digital audio input |
| **S/PDIF out** | 3.5mm digital audio output |
| **Line in** | 3.5mm stereo analog audio input - can be 10vpp via DIP switch |
| **Line out** | 3.5mm stereo analog audio output - can be 10vpp via DIP switch |
| **MIDI in** | 3.5mm TRS MIDI Type-A or B input |
| **MIDI out** | 3.5mm TRS Type-A or B MIDI output (software switchable) |
| **CV1 in** | 3.5mm analog input, -10V to +10V (ADS1115 ADC) |
| **CV1 out** | 3.5mm analog output, -10V to +10V (GP8413 DAC) |
| **CV2 in** | 3.5mm analog input, -10V to +10V (ADS1115 ADC) |
| **CV2 out** | 3.5mm analog output, -10V to +10V (GP8413 DAC) |


<img src="https://raw.githubusercontent.com/shorepine/tulipcc/main/www/img/amyboard_back_panel_annotated.jpg" width=500>

**Other connectors:**

| Connector | Location | Description |
|-----------|----------|-------------|
| **USB-C** | Side | Power, serial REPL, USB MIDI (gadget mode, NOT HOST), firmware updates |
| **I2C front panel** | Front | I2C Grove port for [accessories](accessories.md) (encoders, displays) |
| **I2C host** | Back | For connecting to a [Tulip Creative Computer](https://github.com/shorepine/tulipcc) |
| **MicroSD card** | Side | Extra storage for samples and patches |
| **Modular power** | Back | 10-pin Eurorack power supply connector |
| **Debug header** | Back | For firmware development |


## Power Supplies

AMYboard can be powered 3 ways:

 * USB-C connector: standard 5V input via USB
 * Modular 10-pin connector: a standard Eurorack connector can power AMYboard via the +12V connector
 * I2C host: a Tulip Creative Computer or other 3.3V i2c connection via the Grove connector

If multiple power supplies are connected AMYboard will use the highest available voltage. 

## Upgrading firmware

Before you do anything else, upgrade your firmware! The easiest way is online via your browser. See our [firmware upgrading page](firmware.md) for more info on how to upgrade.

## Quick start - Standalone

1. **Plug in USB-C** from your computer to AMYboard. It powers the board and gives you a serial and MIDI connection.
2. **Plug in headphones or speakers** to the audio out jack.
3. **Connect a MIDI controller** (To your DAW using USB MIDI or TRS MIDI) and play! AMYboard boots with Juno-6 patch #0 on MIDI channel 1 by default. 
4. **Try out AMYboard online**. Use [AMYboard online](online.md) to change synth patches, try out code environments and see other people's patches and code on AMYboard World. You can send code and patches right to your AMYboard over a MIDI connection (TRS MIDI or USB) online.

## Quick start - Modular Synth

1. **Flip the DIP switches for modular 10vpp output**. See our [Modular page](modular.md) for more info.
2. **Connect 10-pin modular power.** Make sure to use a cable that has a "key" for the correct orientation. 
3. **Connect your CV and audio and MIDI cables**. By default AMYboard plays a synth patch on MIDI channel 1. But it can do SO MUCH MORE. 
4. Since the USB connection on your AMYboard will be hidden during a Eurorack install, use TRS MIDI to transfer patches and code between [AMYboard online](online.md) and your AMYboard in a case. 

## Quick start - Tulip

If you have a [Tulip Creative Computer](https://tulip.computer), you can directly connect your AMYboard to it via the GROVE port and the back I2C HOST connector. Tulip will power and communicate with the AMYboard! 

In Tulip, just

```python
from machine import I2C
i2c = I2C(0, freq=400000)
amy.override_send = lambda x: i2c.writeto(0x3f, x)
```
And all sound will come from the AMYboard. 

## Guides

 - **[Using AMYboard Online](online.md)** -- The web editor at amyboard.com for patch design and management
 - **[Arduino Setup](arduino.md)** -- Using the AMY synth engine in Arduino projects
 - **[Modular Synth Setup](modular.md)** -- CV, gate, and MIDI integration with your modular rig
 - **[Using Python](python.md)** -- Programming AMYboard with MicroPython
 - **[Accessories](accessories.md)** -- Compatible displays, encoders, and other I2C accessories
 - **[Troubleshooting](troubleshooting.md)** -- Common issues and how to fix them

## Learn more about AMY

AMYboard is powered by AMY, an open-source synthesizer engine. To learn more about synthesis, patches, and the wire protocol:

 - [AMY synth documentation](https://github.com/shorepine/amy/blob/main/docs/synth.md)
 - [AMY API reference](https://github.com/shorepine/amy/blob/main/docs/api.md)
 - [AMY MIDI documentation](https://github.com/shorepine/amy/blob/main/docs/midi.md)

## Community

[![shore pine sound systems discord](https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pics/shorepine100.png) **Chat about AMYboard on our Discord!**](https://discord.gg/TzBFkUb8pG)





================================================
FILE: docs/amyboard/accessories.md
================================================
# AMYboard Accessories

AMYboard has a front panel I2C port for plugging in accessories. These connect with a simple cable (GROVE connector) -- no soldering required.

The I2C bus (SCL=18, SDA=17, 400kHz) is available for connecting additional hardware:

```python
import amyboard
i2c = amyboard.get_i2c()

# Scan for connected devices
print(i2c.scan())

# Read/write registers on any I2C device
val = amyboard.read_register(addr, reg)
amyboard.write_register(addr, reg, val)
```

You can add more DACs, ADCs, displays, or sensors to expand AMYboard's capabilities.

**Note:** For the Adafruit units below, you'll need a [GROVE to Stemma QT Adapter Cable](). They can be hard to find in-stock, but you can make one (or two) yourself if you have a soldering iron: Take an existing GROVE cable and an existing Stemma QT cable, cut them both in the middle, then connect the bare ends together. (Note that, for Grove cables, the SDA and SCL colors depend on manufacturer.  The ordering below should be correct, however, i.e. SCL is the "edge" cable).

|Signal|Stemma QT color|Grove color|
|--|--|--|
|GND|Black|Black|
|Vcc|Red|Red|
|SDA|Blue|White (Seeed) or Yellow (M5) or White (Adafruit)|
|SCL|Yellow|Yellow (Seeed) or White (M5) or Green (Adafruit)|


## Known compatible accessories

### Displays

 - [**Adafruit Grayscale 1.5" 128x128 OLED Display (STEMMA QT)**](https://www.adafruit.com/product/4741) -- A high-contrast 128x128 grayscale OLED with 16 shades of gray. AMYboard has built-in support for this display, including waveform visualization. Connects directly via the STEMMA QT cable.

```python
import amyboard

# Initialize the display (auto-detects SSD1327 or SH1107)
amyboard.init_display()

# Draw text (x, y, color 0-255)
amyboard.display.text("Hello!", 0, 0, 255)
amyboard.display.text("AMYboard", 0, 16, 128)
amyboard.display_refresh()

# Draw shapes
amyboard.display.fill_rect(10, 40, 50, 20, 200)
amyboard.display_refresh()

# Show a live waveform visualization
amyboard.draw_waveform()
```

### Rotary encoders

 - [**Adafruit I2C STEMMA QT Rotary Encoder Breakout**](https://www.adafruit.com/product/5880) -- A single rotary encoder with push button and NeoPixel LED, running seesaw firmware over I2C. Supports up to 8 on one I2C bus via address jumpers. AMYboard has built-in Python support for reading encoder position and button state.

```python
import amyboard

# Read encoder position (0-3)
pos = amyboard.read_encoder(encoder=0)

# Initialize and read encoder push buttons
amyboard.init_buttons()
buttons = amyboard.read_buttons()
# Returns tuple of 4 booleans (True = pressed)

# Monitor all encoders on the OLED display
amyboard.monitor_encoders()
```

 - [**Adafruit I2C QT Quad Rotary Encoder Breakout**](https://www.adafruit.com/product/5752) -- Four rotary encoders with built-in push buttons on a single I2C breakout, running seesaw firmware. AMYboard has built-in support via `read_encoder()`, `init_buttons()`, and `read_buttons()`. With a display connected, you can use `patch_selector()` to scroll through your `.patch` files with one encoder and load them with a click.

```python
import amyboard

# Read any of the 4 encoders (0-3)
pos = amyboard.read_encoder(encoder=0)

# Initialize and read all 4 push buttons
amyboard.init_buttons()
buttons = amyboard.read_buttons()
# Returns list of 4 booleans (True = pressed)

# Patch selector: scroll through patches and load on click
# (requires a display to be connected)
amyboard.init_display()
amyboard.patch_selector()
```

 - [**M5Stack 8-Encoder Unit (STM32F030)**](https://shop.m5stack.com/products/8-encoder-unit-stm32f030) -- Eight rotary encoders with RGB LEDs and a toggle switch, all on one I2C unit. Great for controlling multiple synth parameters at once.

## Connecting accessories

All accessories plug into the front panel I2C port. You can daisy-chain multiple I2C devices together.

```python
import amyboard

# Scan the I2C bus to see connected accessories
i2c = amyboard.get_i2c()
print(i2c.scan())
```




See [Using Python](python.md) and [Modular Synth Setup](modular.md) for more on using I2C devices with AMYboard.

[Back to Getting Started](README.md)


================================================
FILE: docs/amyboard/arduino.md
================================================
# AMYboard Arduino Setup

AMYboard runs MicroPython firmware by default, but the underlying **AMY synthesizer engine** is available as a standalone Arduino library. This means you can use AMY's synthesis on AMYboard's ESP32-S3 hardware (or many other boards) from Arduino sketches.


### 1. Install the AMY library and AMYboard board support

AMY library and AMYboard board support are both available in the Arduino Library Manager. Follow these steps in order:

 1. **Install ESP32 board support**: In the Arduino IDE, go to **File > Preferences** and add the ESP32 board manager URL: `https://espressif.github.io/arduino-esp32/package_esp32_index.json`. Then go to **Tools > Board > Boards Manager**, search for **"esp32"** by Espressif, and install it.
 2. **Select the AMYboard board**: Go to **Tools > Board > ESP32 Arduino** and select **AMYboard**.
 3. **Install the AMY library**: Go to **Sketch > Include Library > Manage Libraries**, search for **"AMY"**, and install it.

<img src="https://github.com/shorepine/amy/raw/main/docs/arduino1.png" width="400"/>

 4. Open the example sketch: **File > Examples > AMY > AMY_MIDI_Synth**
 5. Make sure AMYboard is selected as your board, then click **Upload**.

The example receives MIDI input and plays a Juno-6 patch. It's a good starting point for any project.

### 2. Flash AMYboard hardware with Arduino sketch

It should flash directly over USB-C without any special steps. If you see an upload error, put AMYboard into DFU (bootloader) mode:

 1. Hold down both **BOOT** and **RST** buttons on the back of the board.
 2. Release **RST** first, then release **BOOT**. It'll feel like "rolling" your finger over both buttons from bottom to top.
 3. Try uploading again.

You can always go back to the stock AMYboard MicroPython firmware using the [web upgrader at amyboard.com](online.md).

## Minimal Arduino sketch

```c
#include <AMY-Arduino.h>

void setup() {
  amy_config_t config = amy_default_config();
  amy_config.features.default_synths = 1;
  amy_start(config);
}

void loop() {
  amy_update();
}
```

This minimal sketch will respond to MIDI input over USB -- look for "AMYboard" as a MIDI input device on your computer or in your DAW. Send it MIDI notes and you'll hear the default Juno-6 patch.

Check out the other examples in **File > Examples > AMY** for more ideas, including sequencer demos and multi-voice setups.

## Playing notes from Arduino

Loading a preset synth patch:
```c
amy_event e = amy_default_event();
e.synth = 1;         // The synth to be set up.
e.patch_number = 6;  // Juno A17 Choir preset patch.
e.num_voices = 4;    // How many simultaneous voices to provision.
amy_add_event(&e);
```
Playing a note on a configured synth:
```c
amy_event e = amy_default_event();
e.synth = 1;         // Which synth to use
e.midi_note = 60;    // Middle C
e.velocity = 1;      // Full strike
amy_add_event(&e);
```

## More information

 - [AMY Arduino getting started guide](https://github.com/shorepine/amy/blob/main/docs/arduino.md) -- detailed setup for all supported boards
 - [AMY API reference](https://github.com/shorepine/amy/blob/main/docs/api.md) -- full C API documentation
 - [Supported boards and features matrix](https://github.com/shorepine/amy/issues/354)

[Back to Getting Started](README.md)


================================================
FILE: docs/amyboard/firmware.md
================================================
# Upgrading your Firmware

There are three ways to upgrade the firmware on your AMYboard. The easiest is using the web-based upgrader.

---

## Option 1: AMYboard Online firmware upgrader (easiest)

The [AMYboard Online editor](https://amyboard.com/editor) includes a built-in firmware upgrader that works right from your browser using WebSerial. We recommend using Google Chrome for this. 

1. Connect your AMYboard to your computer over USB.
2. Hold down both buttons on the side of the AMYboard, then release RST first, then release BOOT. This puts the board into bootloader mode.
3. Open the firmware upgrade page and click **Search for AMYboard**.

<img src="img/upgrade_firmware.png" width=600>

4. Choose the serial port that corresponds to your AMYboard (it may show up as "USB/JTAG" or "AMYboard")

<img src="img/choose_serial_port.png" width=400>

5. Choose to either **Upgrade AMYboard firmware** (keeps your files) or **Fully erase and re-flash AMYboard** (fresh start).
6. Wait for the process to complete. You can then hit the RST button to restart your AMYboard into the upgraded firmware!

---

## Option 2: Over-the-air upgrade via serial

If your AMYboard is already running and you can connect to it over serial, you can upgrade over Wi-Fi.

Connect to your AMYboard's serial console using one of:

```bash
mpremote connect /dev/YOUR_SERIAL_PORT
```

or:

```bash
screen /dev/YOUR_SERIAL_PORT 115200
```

Then at the MicroPython prompt, connect to Wi-Fi and run the upgrade:

```python
>>> import amyboard
>>> amyboard.wifi('your_ssid', 'your_password')
>>> amyboard.upgrade()
```

The upgrade will download the latest firmware and system files over Wi-Fi. Your saved files are preserved. The board will reboot when finished.

---

## Option 3: Flash with esptool

If your AMYboard won't boot or you need a completely fresh flash, you can use `esptool` to write the full firmware image directly.

1. Download the latest `amyboard-full-AMYBOARD.bin` from the [releases page](https://github.com/shorepine/tulipcc/releases/latest).

2. Connect your AMYboard over USB and put it in bootloader mode (hold both buttons, release RST first, then BOOT).

3. Install `esptool` if you haven't already, and flash the image:

```bash
pip install esptool
esptool.py write_flash 0x0 amyboard-full-AMYBOARD.bin
```

**Note: This will erase everything on the board, including any saved files.**

The AMYboard should reboot when flashing is complete (you may need to unplug and replug the USB cable). After this initial flash, you can use `amyboard.upgrade()` or the web firmware upgrader for future updates.

---

[Back to Getting Started](README.md)


================================================
FILE: docs/amyboard/modular.md
================================================
# Modular Synth Setup

AMYboard is designed to integrate directly with Eurorack and other modular synth systems. It has a 10-pin modular power connector, analog CV inputs and outputs, MIDI I/O, and an I2C bus for expansion. 

<img src="https://raw.githubusercontent.com/shorepine/tulipcc/main/www/img/amyboard_modular_2.jpg" width=600>

## Accessories

You can add an optional [OLED screen or knob](accessories.md) yourself by just connecting them to the I2C port on the front of the AMYboard. 

Your AMYboard ships with a plexiglass "front panel" with cutouts for the jacks and an optional screen and knob. The panel can be attached to the AMYboard through the jack screws. The front panel then screws into your Eurorack case. 

<img src="https://raw.githubusercontent.com/shorepine/tulipcc/main/www/img/amyboard_bambu.png" width=600>

You can also 3D print your own front panel for whatever use case you have in mind! [You can grab a BambuLab 3MF file here](https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pcbs/amyboard/amyboard_front_panel.3mf). Or build from the [DXF file for the provided front panel](https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pcbs/amyboard/amyboard_front_panel.dxf).


## 10vpp Operation

Most modular synthesis units operate at 10Vpp, where an audio signal swings between -5V and +5V. Out of the box, AMYboard is "line level" at 1Vpp. To change the audio input and output of AMYboard to 10Vpp, you need to change the DIP switches on the back of the board to "OFF" / closed.

<img src="https://raw.githubusercontent.com/shorepine/tulipcc/main/www/img/dip_switches.png" width=600>

 - **Switches 1 & 2** (input): When closed, attenuate the inputs -- making line in friendly to 10Vpp Eurorack signals.
 - **Switches 3 & 4** (output): When closed, increase the gain of the output buffer -- making line out more friendly to 10Vpp Eurorack.

## CV outputs

AMYboard has **two CV outputs** on 3.5mm jacks, powered by a GP8413 12-bit DAC (I2C address `0x58`). The outputs range from approximately **-10V to +10V**, suitable for controlling Eurorack pitch, filter cutoff, or any CV-controlled parameter.

```python
import amyboard

# Output 3.3V on CV out 1
amyboard.cv_out(3.3, channel=0)

# Output -5V on CV out 2
amyboard.cv_out(-5.0, channel=1)
```

You can route an entire AMY synth's audio to a CV output using `set_cv_out`. The synth's audio is silenced from the speakers and sent to the DAC instead, so you can use any AMY waveform as a CV source:

```python
import amy, amyboard

# Create a synth and route it to CV1
amy.send(synth=5, wave=amy.SAW_DOWN, vel=1, freq=0.5)
amyboard.set_cv_out(channel=0, synth=5)
```

This sends a 0.5Hz saw wave out CV1 at full range (-10V to +10V). You can change the waveform, frequency, or amplitude at any time with `amy.send(synth=5, ...)`.

To stop it, release the note or clear the mapping:

```python
amyboard.set_cv_out(channel=0, synth=0)  # clear the CV mapping
```


### Use cases

 - **Pitch CV**: Output 1V/oct pitch voltages to control an external oscillator
 - **Modulation**: Generate LFOs, envelopes, or sequenced voltages in Python
 - **Sample & hold**: Read a value, process it, and output the result


## CV inputs

AMYboard has **two CV inputs** on 3.5mm jacks, powered by an ADS1115 16-bit ADC (I2C address `0x48`). They accept **-10V to +10V**.

```python
import amyboard

# Read voltage on CV in 1
volts = amyboard.cv_in(channel=0)
print(f"CV in 1: {volts:.2f}V")

# Read raw ADC value
raw = amyboard.adc1115_raw(channel=0)
```

### Use cases

 - **External CV to AMY**: Map incoming CV to synth parameters (filter, pitch, amplitude)
 - **Gate detection**: Read a gate signal and trigger AMY notes
 - **Sensor input**: Connect any voltage source (-10V to +10V range) and read it from Python

### Example: CV input controls AMY filter with CtrlCoefs

AMY's CtrlCoef system lets you map CV inputs directly to synth parameters without any Python polling loop. For frequency parameters like `filter_freq`, CtrlCoefs work in **log2 (1V/oct) space** -- the `const` value sets a center frequency in Hz, and the `ext0` coefficient scales how many octaves the CV shifts per volt.

The formula for the final frequency is:

```
freq = const * 2^(ext0 * cv_voltage)
```

So to sweep a low-pass filter between roughly 100 Hz and 1000 Hz using CV input 1 (-10V to +10V):

1. Pick the **geometric center** of your range: `sqrt(100 * 1000) ≈ 316 Hz`
2. Solve for `ext0`: you need `316 * 2^(ext0 * 10) = 1000`, so `ext0 = log2(1000/316) / 10 ≈ 0.166`

In practice, round numbers like `const=300, ext0=0.15` get you close (roughly 106 Hz to 849 Hz):

```python
import amy

# Set up a saw wave with a CV-controlled low-pass filter
amy.send(synth=1, wave=amy.SAW_DOWN)
amy.send(synth=1, filter_freq={'const': 300, 'ext0': 0.15}, filter_type=amy.FILTER_LPF24)

# Play a note -- the filter cutoff now tracks CV in 1
amy.send(synth=1, vel=1, note=48)
```

With nothing patched to CV in 1 (0V), the filter sits at 300 Hz. Patch in a modular LFO or envelope and the cutoff sweeps exponentially -- just like a hardware filter with a 1V/oct CV input.

For exact 100–1000 Hz range, use `'const': 316, 'ext0': 0.166`. For a wider sweep (e.g. 50–5000 Hz), increase `ext0`:

```python
# Wider sweep: geometric center ~500 Hz, ±10V covers 50 to 5000 Hz
amy.send(synth=1, filter_freq={'const': 500, 'ext0': 0.33}, filter_type=amy.FILTER_LPF24)
```


[Back to Getting Started](README.md)



================================================
FILE: docs/amyboard/online.md
================================================
# Using AMYboard Online

The AMYboard web editor at [amyboard.com](https://amyboard.com/editor) lets you design patches, write Python code, manage your AMYboard, and see shared patches and code -- all from your browser. You can also use it as a standalone browser-based synthesizer without any hardware at all.

<img src="img/amyboard_online.png">


## Getting started

Just open [amyboard.com](https://amyboard.com/editor) in Chrome, Edge, or Firefox (Safari works but MIDI is not available). Click anywhere once on the page to unlock audio, and you're ready to go.

The online editor can be used to both set up a code environment and patches for your AMYboard, or you can just use the site on its own to make music. It can respond to MIDI like a synth, and the sketches you write will work there too. It can't do _everything_ a real AMYboard can - but it's close enough for most things. 

## Play and edit patches

The web editor gives you a knob-per-function interface for Juno-6 and DX7 style patches.

<img src="img/channel_strip.png" width=700>

The channel strip runs across the top of the Patch tab and controls which synth channel you're editing.

| Control | Description |
|---------|-------------|
| **Channel 1** (dropdown) | Select which of the 16 independent synth channels to edit. Each channel has its own patch, MIDI assignment, and parameter set. |
| **Active** (checkbox) | Enable or disable this channel. Unchecking it silences the channel without losing its settings. |
| **Patch: None** (button) | Click to open the patch browser and load one of the 256 built-in presets into the current channel. The button shows the name of the currently loaded patch for this channel. |
| **Save** (red button) | Save the current knob values as a named patch. You can recall it later from the patch browser. An asterisk will appear if the patch is "dirty" (has changes that haven't been saved.) |
| **Revert** | Reset the current channel back to the last saved or loaded patch, discarding any unsaved edits. |
| **Clear** | Reset all knobs on this channel to their default values and remove the patch name. |
| **Effects** | The global effects panel (EQ, Chorus, Reverb, Echo). Effects are shared across all channels. |


<img src="img/load_patches.png" width=400>

The patch browser lets you load from your own patches, Juno-6 and DX-7 presets, and community patches from AMYboard World.


<img src="img/patch_knobs.png" width=700>

The patch knob panel contains six sections organized into two columns. The left column (pink) controls the oscillators and LFO; the right column (blue) controls the filter and envelopes.

#### OSC A — Oscillator A

| Knob | Description |
|------|-------------|
| **freq** | Base frequency of oscillator A in Hz. Default 440 (concert A). |
| **wave** | Waveform selector. Click to cycle through: SINE, PULSE, SAW\_UP, SAW\_DOWN, TRIANGLE, NOISE, and more. |
| **duty** | Pulse width for PULSE waveform (0–1). Has no effect on other waveforms. |
| **level** | Output level (amplitude) of oscillator A (0–1). |

<img src="img/wavetable_presets.png" width=250>

*When you select a wavetable waveform, the Wavetable Presets dropdown lets you choose from built-in wavetable files.*

#### OSC B — Oscillator B

| Knob | Description |
|------|-------------|
| **freq** | Base frequency of oscillator B in Hz. Default 220 (one octave below OSC A). Detune this slightly from OSC A for a thicker sound. |
| **wave** | Waveform selector for oscillator B. Independent of OSC A. |
| **duty** | Pulse width for oscillator B PULSE waveform. |
| **level** | Output level of oscillator B (0–1). |

#### LFO — Low Frequency Oscillator

| Knob | Description |
|------|-------------|
| **freq** | LFO rate in Hz. Typical values are below 10 Hz for vibrato/tremolo effects. |
| **wave** | LFO waveform (TRIANGLE, SINE, SAW, PULSE, etc.). |
| **osc** | How much the LFO modulates oscillator pitch (0–1). Creates vibrato. |
| **pwm** | How much the LFO modulates pulse width of OSC A and B (0–1). Creates pulse-width modulation. |
| **filt** | How much the LFO modulates the VCF cutoff frequency (0–1). Creates filter wobble. |

#### VCF — Voltage-Controlled Filter

| Knob | Description |
|------|-------------|
| **freq** | Filter cutoff frequency in Hz. Lower values make the sound darker/bassier; higher values open the filter. |
| **resonance** | Filter resonance (Q factor, 0–1). Higher values create a sharper peak at the cutoff. Extreme values can cause clipping. |
| **kbd** | Keyboard tracking amount (0–1). At 1.0, the filter cutoff tracks your MIDI note so higher notes are brighter. |
| **env** | How much the VCF ENV (see below) modulates the filter cutoff. Higher values give more filter sweep per note. Negative values make filter sweep downwards on attack. |

#### VCF ENV — Filter Envelope

| Knob | Description |
|------|-------------|
| **attack** | Time (ms) for the filter envelope to rise to its peak after a note-on. |
| **decay** | Time (ms) for the filter envelope to fall from peak to sustain level. |
| **sustain** | The filter envelope level held while a key is held down (0–1). |
| **release** | Time (ms) for the filter envelope to fall from sustain to zero after note-off. |

#### ADSR — Amplitude Envelope

| Knob | Description |
|------|-------------|
| **attack** | Time (ms) for the note to reach full volume after note-on. |
| **decay** | Time (ms) for the volume to fall from peak to the sustain level. |
| **sustain** | Volume level held while a key is held (0–1). |
| **release** | Time (ms) for the note to fade to silence after note-off. |


If you have a MIDI controller and a browser that supports WebMIDI, AMYboard Online can use it directly:

 - Click the MIDI device selector to choose your input and output devices
 - Play notes on your controller and hear them through AMYboard's synth engine
 - MIDI CC messages can control patch parameters in real time


<img src="img/knob_modal.png" width=250>

*The knob settings popup showing min/max range, log scaling toggle, and MIDI CC assignment with Learn mode.*

Click any knob **label** (the text above or below the knob, e.g. "freq") to open its parameter editor popup.

| Field | Description |
|-------|-------------|
| **min / max** | The real-world range this knob covers. For example, OSC A freq defaults to min 50 Hz / max 2000 Hz. Tighten this range to make the knob more precise over a smaller span of values. |
| **log** | When checked, the knob follows a logarithmic scale — useful for frequency and time parameters where large values are less perceptually important. |
| **MIDI CC (0-127)** | Assign a MIDI Continuous Controller number to this knob. When your controller sends that CC, the knob moves in real time. |
| **Learn** | Click Learn, then move a knob or fader on your MIDI controller. The CC number is detected automatically and filled in. |
| **Save / Cancel** | Save commits the new range and CC assignment. Cancel closes without changing anything. |


<img src="img/effects_knobs.png" width=220>

The Effects panel (right side of the Patch tab) contains four global processors shared by all channels.

#### EQ — 3-Band Equalizer

| Knob | Description |
|------|-------------|
| **low** | Low-frequency (\< 800 Hz) shelf gain (dB). Positive boosts bass; negative cuts it. |
| **mid** | Mid-frequency gain (800 Hz - 7 kHz). |
| **high** | High-frequency (\> 7 kHz) shelf gain. Positive adds brightness; negative rolls off treble. |

#### Chorus

| Knob | Description |
|------|-------------|
| **level** | Chorus wet/dry mix (0–1). 0 = dry, 1 = full chorus. |
| **freq** | Chorus LFO rate. Higher values give a faster, more intense modulation. |
| **depth** | Chorus depth — how wide the pitch modulation swings. More depth = thicker, swimmy sound. |

#### Reverb

| Knob | Description |
|------|-------------|
| **level** | Reverb wet/dry mix (0–1). |
| **live** | Room size / decay time (0–1). Higher values give a longer, larger-sounding reverb tail. |
| **damp** | High-frequency damping of the reverb tail (0–1). Higher values make the reverb sound warmer and less harsh. |

#### Echo

| Knob | Description |
|------|-------------|
| **level** | Echo wet/dry mix (0–1). |
| **delay** | Echo delay time in milliseconds. |
| **feedback** | How much of the echo signal feeds back into itself (0–1). Higher values create longer, repeating echoes. Keep below 1 to avoid runaway feedback. |


## Write and run Python sketches

When AMYboard starts up, either on web or hardware, it sets up whatever patches are set to each channel (using a file called `editor_state.json` that you can see in the code editor) and then runs a "sketch" set up in `sketch.py`. This is a Python program that runs setup code (in the top level of the code file) and then calls `loop()` periodically (about every 50ms). 

<img src="img/code_editor.png" width=600>

*The Code editor with syntax highlighting, file management, and live execution. Write and edit Python scripts that control AMY directly.*

The code tab of AMYboard online has a code editor. You should see a default `sketch.py` that you can edit. Once you make changes, click the green Start button to re-run the code. The other buttons on the Your Files section are:

 - <img src="img/icon_upload.png" width=32> Upload a file from your computer into AMYboard storage
 - <img src="img/icon_plus.png" width=32> Add a new blank file
 - <img src="img/icon_edit.png" width=32> Rename the selected file
 - <img src="img/icon_trash.png" width=32> Delete the selected file

The code editor auto-saves, so there's no save button. 

Above the code editor is an option "REPL" - a way to interactively type commands into AYMboard online. Remember, this is not directly communicating with your hardware AMYboard, it is talking to the AMYboard emulator running in your web browser. If you want to write code directly on your AMYboard, [see our Python documentation](python.md). 

<img src="img/terminal_repl.png" width=600>

*The Terminal REPL gives you an interactive MicroPython prompt where you can type AMY commands and see results immediately.*

Under the code editor is a row of simulated [AMYboard accessories](accessories.md). This includes an OLED display, a rotary encoder with push button, and two CV input knobs. These help you verify your hardware hookups before deploying to a real AMYboard with acessories.

<img src="img/oled_rotary_cv.png" width=600>

*The hardware interface: OLED display showing firmware info, rotary encoder for patch selection, and CV input knobs for modular integration.*

## Transfer environments to your AMYboard hardware

You can transfer the state of your AMYboard online session directly to a real AMYboard over MIDI SYSEX. You can use either USB MIDI (AMYboard device) or TRS MIDI cable from your own MIDI hardware. 

<img src="img/send_to_amyboard.png" width=600>

If you have an AMYboard connected via USB:

 1. Click **Send to AMYboard** in the web editor
 2. Make sure your MIDI out (the pull-down menu in the top-right of the editor window) is set to your AMYboard! If your AMYboard is connected over USB, MIDI out should say "MIDI out: AMYboard". If you're using TRS MIDI, connect it from your MIDI out port to your AMYboard MIDI in.  *Note:* You may need to quit and reopen your web browser to make it recognize the AMYboard USB MIDI device
 3. Your current patch assignments, modified patches, and any audio files or python files including `sketch.py` are packed into an archive and transferred over MIDI SysEx
 4. The hardware AMYboard unpacks and applies everything automatically, then reboots

This is the easiest way to set up your hardware AMYboard from a comfortable editing environment.


## AMYboard World

We provide a file sharing network for AMYboard called "AMYboard World." People can share their own environments and patches. It's up to you if you want to share your code with others, but we recommend it! Make sure to join us on our [Discord](https://discord.gg/TzBFkUb8pG) to let people know about your uploads. 


<img src="img/amyboard_world_environments.png" width=600>

You can search or see everyone's uploaded environments. Enviroments contain everything in the file list -- both patches and code. An online or hardware AMYboard runs a single environment at a time. Click on an environment to replace your current setup with one from AMYboard World. 

<img src="img/amyboard_world_patches.png" width=600>

You can also download individual patches for synths from the community. This will just update your current patch settings. You can also preview a few notes of a patch before downloading it.

<img src="img/amyboard_world_upload.png" width=600>

You can upload your own environments or patches here. Choose a memorable username and describe your work!



[Back to Getting Started](README.md)


================================================
FILE: docs/amyboard/python.md
================================================
# Using Python

AMYboard runs MicroPython and gives you a full Python REPL for controlling the synthesizer, reading inputs, and building instruments and effects in real time.

## Connecting to the REPL

### From your computer

Connect AMYboard via USB-C and use a serial terminal or `mpremote`:

```bash
pip install mpremote
mpremote resume
```

You'll see the MicroPython `>>>` prompt. You can type Python commands directly.

### From the web

Open [amyboard.com](https://amyboard.com) -- it includes a Python REPL running in the browser. You can test code online before deploying it to hardware.

## Playing sounds with AMY

The `amy` module gives you direct access to the synthesizer engine:

```python
import amy

# Clear any existing setup
amy.reset()

# Play a 440Hz sine wave
amy.send(osc=0, wave=amy.SINE, freq=440, vel=1)

# Stop the note
amy.send(osc=0, vel=0)
```

### Using patches

AMY has 256+ built-in patches: 0-127 are Juno-6 analog, 128-255 are DX7 FM, 256 is piano, and 257+ are PCM drum kits.
In general, a patch will use multiple oscs.  `synth` is our abstraction to manage multiple oscs at the same time.

```python
# Load Juno-6 patch #10 on synth 1
amy.send(synth=1, patch=10, num_voices=4)

# Play middle C
amy.send(synth=1, note=60, vel=1)

# Send the note-off
amy.send(synth=1, note=60, vel=0)

# Switch to DX7 patch #5
amy.send(synth=1, patch=133)  # 128 + 5
```

### Polyphony with synths

The `synth` objects provide the specified level of polyphony.  They also connect directly to MIDI channels:

```python
# Set up a 4-voice polyphonic Juno patch on synth 1 (MIDI channel 1).
amy.send(synth=1, patch=0, num_voices=4)

# Play notes on individual voices
amy.send(synth=1, note=60, vel=1)  # C
amy.send(synth=1, note=64, vel=1)  # E
amy.send(synth=1, note=67, vel=1)  # G

# Send vel=0 with no note number for "all notes off"
amy.send(synth=1, vel=0)

# You can also play polyphonically with a MIDI keyboard (connected via the "MIDI in" jack) or your computer (writing to the AMYboard USB MIDI gadget) sending notes on channel 1.  
```

## The `amyboard` module

The `amyboard` module provides functions specific to the AMYboard hardware:

```python
import amyboard

# CV I/O
amyboard.cv_out(5.0, channel=0)    # Output 5V on CV out 1
volts = amyboard.cv_in(channel=0)   # Read CV in 1

# Rotary encoders.  The defaults are for the Adafruit single-encoder https://www.adafruit.com/product/5880
print(amyboard.read_encoder())
amyboard.init_buttons()
print(amyboard.read_buttons())

# OLED display (if connected)
amyboard.init_display()
amyboard.display.fill(0)
amyboard.display_refresh()

# I2C
i2c = amyboard.get_i2c()
devices = i2c.scan()
print(devices)

# SD card
amyboard.mount_sd()
```

See the [Modular Synth Setup](modular.md) page for detailed CV and encoder examples.

## The sketch.py startup script

AMYboard automatically runs `sketch.py` from your current environment directory on boot. The top-level code runs once at startup, and if you define a `loop()` function it will be called repeatedly (~60ms interval). Use it to set up your default configuration:

```python
# /user/current/sketch.py
import amy, amyboard

# Set up my preferred patches
amy.send(synth=1, patch=0, num_voices=6)      # Channel 1: Juno patch 0, 6-voice poly
amy.send(synth=10, num_voices=1, oscs_per_voice=1, synth_flags=3)    # Channel 10: Drums (synth_flags magic).

# Set CV out 1 to 0V on startup
amyboard.cv_out(0.0, channel=0)

def loop():
    pass
```

You can edit `sketch.py` directly on the hardware using the built-in text editor. Connect to your AMYboard with `screen` or `mpremote` (not `idf.py monitor`, which doesn't support full terminal emulation):

```bash
screen /dev/YOUR_SERIAL_PORT 115200
# or
mpremote connect /dev/YOUR_SERIAL_PORT
```

Then at the REPL:

```python
amyboard.edit('current/sketch.py')
```

This opens a full-screen text editor. On macOS, use **Esc then the key** instead of Ctrl (macOS terminals intercept many Ctrl sequences):

 - **Esc, S** — Save
 - **Esc, Q** — Quit
 - **Esc, X** — Cut line
 - **Esc, V** — Paste
 - **Esc, Z** — Undo
 - **Esc, F** — Find

On Linux or Windows terminals, Ctrl-S, Ctrl-Q, etc. work as usual. See the [pye documentation](https://github.com/robert-hh/Micropython-Editor) for the full list of key bindings.

You can also create or edit files from [AMYboard Online](https://amyboard.com/editor) and send them to hardware with **Send to AMYboard**.

## File management

### On hardware

```python
from upysh import *

ls                  # List files
cat('sketch.py')    # Print file contents
cd('/user')         # Change directory
pwd                 # Print working directory
```

### Transfer files with mpremote

```bash
# Copy a file from your computer to AMYboard
mpremote resume fs cp my_script.py :my_script.py

# Copy a file from AMYboard to your computer
mpremote resume fs cp :sketch.py sketch.py

# Edit a file on AMYboard with your local editor
mpremote resume edit sketch.py
```

## Working with MIDI in Python

```python
import tulip

# Set up a MIDI callback
def my_midi_callback(is_sysex):
    if is_sysex:
        return  # Ignore sysex
    message = tulip.midi_in()
    while message is not None and len(message) > 0:
        # message is a bytes object
        status = message[0]
        if status & 0xF0 == 0x90:  # Note on
            note = message[1]
            vel = message[2]
            print(f"Note on: {note} velocity: {vel}")
        # Maybe there are more messages queued?
        message = tulip.midi_in()

tulip.midi_callback(my_midi_callback)
```

## Example: simple arpeggiator

```python
import amy, time

notes = [60, 64, 67, 72]  # C major arpeggio
amy.send(synth=1, patch=0, num_voices=4)   # Juno patch 0

for _ in range(10):
    for note in notes:
        amy.send(synth=1, note=note, vel=1)
        time.sleep(0.15)
        amy.send(synth=1, note=note, vel=0)
        time.sleep(0.05)
```
**Note:** Keyboard interrupt (Ctrl-C) doesn't work while the loop is running, so beware of getting stuck.  Pressing the "Reset" button will start you over.

## Example: CV-controlled pitch

```python
import amy, amyboard, time

amy.reset()
amy.send(osc=0, wave=amy.SINE, vel=1)  # Sine wave, on

for _ in range(100):
    v = amyboard.cv_in(channel=0)
    # Map -10..+10V to 100..1000 Hz
    freq = 100 + ((v + 10) / 20.0) * 900
    amy.send(osc=0, freq=freq)
    time.sleep(0.05)
```

## More resources

 - [AMY wire protocol reference](https://github.com/shorepine/amy/blob/main/docs/api.md) -- every parameter you can control
 - [AMY synth architecture](https://github.com/shorepine/amy/blob/main/docs/synth.md) -- deep dive into oscillators, filters, modulation
 - [MicroPython documentation](https://docs.micropython.org/en/latest/) -- general MicroPython reference

[Back to Getting Started](README.md)


================================================
FILE: docs/amyboard/troubleshooting.md
================================================
# Troubleshooting

Here are solutions to common issues with AMYboard. If you're stuck, reach out to the community -- we're happy to help.

## Get help

 - [Discord](https://discord.gg/TzBFkUb8pG) -- quickest way to get help from the community
 - [GitHub Issues](https://github.com/shorepine/tulipcc/issues) -- bug reports and feature requests
 - [Makerfabs contact](https://makerfabs.com/contact.html) -- hardware defect / shipping issues

**Please remember**: AMYboard is supported by volunteers. We'll do our best to help, but please be patient and try the steps below first.

## Always upgrade first

Many issues are fixed in newer firmware. Before troubleshooting, [update to the latest release](firmware.md).

## No sound

**Check the basics:**
 - Is the USB-C cable, modular power or I2c power connected? AMYboard needs power.
 - Are cables plugged into the **audio out** jack (not audio in)?

**Check the synth:**
 - Connect via `mpremote resume` and try:
   ```python
   import amy
   amy.send(osc=0, wave=amy.SINE, freq=440, vel=1)
   ```
   You should hear a 440Hz sine wave. If you do, the audio hardware is working.

**Check MIDI:**
 - AMYboard boots with Juno-6 patch #0 on MIDI channel 1. Make sure your controller is sending on channel 1.
 - Try a different MIDI cable or controller.
 - Check USB MIDI vs TRS MIDI -- are you using the right connection?

## No serial connection / mpremote can't find the board

 - Try a different USB-C cable. Some cables are charge-only and don't carry data.
 - **Install the CH340K driver**: Some operating systems need a USB-to-serial driver. [Download CH340K drivers here](https://www.wch-ic.com/downloads/CH341SER_ZIP.html).
 - On macOS, check **System Information > USB** to see if the board appears.
 - On Linux, check `ls /dev/ttyACM*` or `ls /dev/ttyUSB*`.
 - On Windows, check Device Manager for COM ports.
 - Make sure no other program (serial monitor, DAW) is using the port.

## USB MIDI not recognized

 - AMYboard appears as a USB MIDI device with VID `0xCAF0` and PID `0x4009`.
 - On macOS, open **Audio MIDI Setup** and check if AMYboard appears.
 - On Windows, check Device Manager under "Sound, video and game controllers".
 - Try a different USB port or cable.
 - Some USB hubs can cause issues -- try connecting directly.

## AMYboard Online issues

### No sound in the browser
 - Click anywhere on the page to unlock the browser's AudioContext. Browsers block audio until user interaction.
 - Check that your browser's audio output is set to the correct device.
 - Try Chrome -- it has the best Web Audio support.

### Web MIDI not working
 - Web MIDI requires Chrome or Edge. Firefox and Safari do not support Web MIDI.
 - Make sure your MIDI device is connected before opening amyboard.com.
 - Click the MIDI device selector and choose your device.
 - On some systems, you may need to grant MIDI access permission.

### "Send to AMYboard" fails
 - Make sure AMYboard is connected via USB or MIDI.

## MIDI issues

### Wrong MIDI type (Type A vs Type B)
 - AMYboard defaults to Type A MIDI. If your gear uses Type B:
   ```python
   import amyboard
   amyboard.init_midi(type='B')
   ```
 - Add this to your `sketch.py` to make it permanent.

## Board won't boot / crashes on startup

 - **Safe mode**: Hold the BOOT button while AMYboard is powering up. This skips running your `sketch.py` and also runs a hardware self-test (audio input, CV in/out). You'll hear a chime if all tests pass. Once it finishes you'll have a normal REPL where you can fix or delete your sketch.
 - If your `sketch.py` or `boot.py` has a bug, hold BOOT to skip it, then delete it via the REPL or `mpremote`:
   ```bash
   mpremote resume fs rm :user/current/sketch.py
   ```
 - Try a full "factory reset" by erasing the flash and reflashing. See our [firmware upgrade page](firmware.md).

## SD card not mounting

 - Make sure the SD card is formatted as FAT32.
 - Try a different SD card -- some cards have compatibility issues.
 - Mount manually:
   ```python
   import amyboard
   amyboard.mount_sd()
   ```
   Check for error messages.

## I2C devices not found

 - Scan the bus to see what's connected:
   ```python
   import amyboard
   i2c = amyboard.get_i2c()
   print(i2c.scan())
   ```
 - Expected addresses: `0x40` (PCM9211), `0x48` (ADS1115 ADC), `0x58` (GP8413 DAC), `0x49` (Seesaw encoders).
 - Check your wiring -- SDA and SCL may be swapped.
 - Make sure pull-up resistors are present on your I2C lines (AMYboard has them built in for the onboard devices).

[Back to Getting Started](README.md)


================================================
FILE: docs/getting_started.md
================================================
# Getting started with the Tulip CC v4r11

Welcome to the [Tulip Creative Computer!](https://github.com/shorepine/tulipcc) Here you'll find out all about your new [Tulip board that you bought from Makerfabs.](https://tulip.computer)

Before we get started, we want to explain the brief history of Tulip and how we work on it. You'll get a lot more out of Tulip if you understand what sort of thing we're building and what sort of community we are.

![Tulip](https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pics/tulip4.png)

Tulip has been a side project of [mine](https://notes.variogram.com/about) for a few years. I've always wanted a small low-power computer I could write code or games or music on, that was portable and didn't have distractions like a web browser or work email. Over the years, Tulip has gone through a few iterations from [a bunch of wires](tulip_breadboard.md) to the much more polished and cheap board you just bought from our friends at Makerfabs. Along the way, I encouraged [a friend](https://scholar.google.com/citations?user=1H4HuCkAAAAJ&hl=en) to help me with the [music synthesizer underlying Tulip](https://github.com/shorepine/amy). We quickly saw the power and fun of having an excellent analog and FM-style synth that could be controlled in Python on constrained real-time hardware. The Tulip you have in your hands is brand new, we constantly chase bugs, add new features, make new music and demos for it. There's a small but growing community of like minded people on our [Discord](https://discord.gg/TzBFkUb8pG) who try fun experiments as we build. 

**No one working on Tulip makes any money from it**. We're all hobbyists and engineers and scientists and musicians who enjoy working on a small project like this and we hope others can join us. Tulip was designed to be incredibly cheap and completely open source. You can even [build one yourself!](tulip_build.md) I've spent the initial money on PCB design to be able to get this version of Tulip in your hands, and you did pay a tiny amount extra over the raw cost of the parts and assembly needed to build Tulip, to support future design work from our partner Makerfabs. 

**Tulip is fun to use today but still needs help**. You should have fun hacking on and using Tulip, and never expect it to be perfect. You will run into lots of weirdness and challenges. We hope you find those constraints entertaining and inspiring. We're hoping to build a community of people that can work together to make Tulip better every day. Remember, if the Tulip firmware doesn't do it for you, you can always use the hardware you bought for your own creations. You can easily replace our firmware and flash it yourself using the ESP-IDF or Arduino.

If you have problems with Tulip, you can find us on GitHub [issues](https://github.com/shorepine/tulipcc/issues) or the [Discord](https://discord.gg/TzBFkUb8pG). We'll do our best to help out!

-- Brian


## Get used to the ports

Here's a legend to the ports, facing the front. 

<img src="https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pics/tulipv4r11_front.png" width=600>

## Acesssories you may want

The Tulip board you got can work on its own. Most people will want to add a couple of accessories to make it work even better. You should at least get a computer keyboard, the rest are optional. 

### USB keyboard

Tulip is a very command-line centered interface with some touch controls. You'll have a much easier time using Tulip if you connect a USB computer keyboard to it for typing. It turns the Tulip into a portable "deck" for whatever you can imagine. 

You _should_ be able to use any USB computer keyboard you already have. We're always surprised to find weird keyboards that don't follow all the "rules", so if yours doesn't "just work", get in touch and we'll help you debug!

[If you want a more compact hardware keyboard, the tiny "cardKB" will work great with Tulip, plugged into the I2C port.](https://shop.m5stack.com/products/cardkb-mini-keyboard-programmable-unit-v1-1-mega8a)


### DACs or ADCs for modular synths

If you use modular synths, Tulip is a powerful and fun control surface and way to "program" your modular rig or older analog synth in Python. You can use the existing MIDI ports to do a lot, but if you have CV gear, we recommend getting a I2C DAC to control it. [You can get a 2 channel DAC with modular ready 3.5mm jacks from Makerfabs](https://www.makerfabs.com/mabee-dac-gp8413.html). You can use up to 8 at once for a total of 16 CV outputs!

[You can see a list other supported I2C devices, including ADCs to read CV output, that you can use with your Tulip.](tulip_api.md#i2c--grove--mabee)

### Type-A 3.5mm MIDI adapters to full size

We support both USB MIDI and "standard" TRS MIDI. Most modern MIDI equipment now uses 3.5mm jacks for MIDI connectors. If you have the older 5-pin DIN connectors and want to use them on Tulip, you'll want to pick up a couple of [Type-A 3.5mm adapters](https://www.amazon.com/Kurrent-Electric-Type-3-5mm-Adapter/dp/B0C2RLB3SL/). 

### A hub for USB MIDI

If you want to use a USB MIDI device (like a keyboard or a USB-MIDI adapter), we support that on Tulip from the `USB-KB` connector. We also support simple hubs, since you'll want to connect both a USB MIDI plug and a typing keyboard. USB hub support works but is in constant development, so please let us know if your setup doesn't work! 

### A small li-po battery

Tulip is a low power device and can run on battery for portable computing. There's a standard JST connector on back for flat li-po or 18650 battery packs. Tulip will charge the battery if you connect a USB power cable to the USB charge/PWR port (the top one.) I personally use [this 1200mAh battery](https://www.adafruit.com/product/258). If you want to keep it "inside" Tulip (between the back case and the PCB), you'll want to find a battery that is 5mm or so thin. You can use a piece of double sided tape it keep it inside the battery area of the PCB. 

Larger batteries will work great and last longer, but you'll have to remove the back case to make them fit (or mount the battery some other way.) [This 5200mAh battery pack](https://www.amazon.com/XINLANTECH-Rechargeable-Bluetooth-Electronic-Batteries/dp/B0C2VFTDPY) will last many many hours on Tulip and fit right on the PCB with the back case removed. 

**Please make sure you have the polarity right!** The red cable on the battery should be going to the side of the connector with a + sign on the Tulip board. 

### An extra Alles or five

<img src="https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pics/nicoboard-alles.jpg" width=400>

Tulip supports using [Alles](http://github.com/shorepine/alles) as extra speakers. You control up to dozens of other speakers wirelessly using the AMY synthesizer for amazing multi-channel audio setups, using only a Tulip to control them! [You can get Alles PCBs from our friends at Blinkinlabs.](https://shop.blinkinlabs.com/products/alles-pcb)


## Get started with Tulip


<img src="https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pics/tulipv4r11back.png" width=600>


Now that you've got your Tulip, here's how to get started:

 - If you want to use a battery, open the back black case with a screwdriver and plug it in. If you do remove the back case, make sure not to bump the touchscreen connector labeled above as it's been known to be loose (we're working on gluing it down at the factory.) 
 - Connect a USB-C cable from a power adapter or your computer to the **top** USB connector, facing Tulip.
 - Plug in a USB keyboard to the **bottom** USB connector. 
 - Optionally wire up your stereo audio jack, MIDI and I2C connectors if you have them. Headphones will work fine on the audio jack if you don't have a mixer or other sound system. 
 - Turn on the Tulip! The switch is on the top of the board.
 - You should see the following. If you have audio connected, you should also hear a "bleep" sound on startup.

<img src="https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pics/tulip4r11firstboot.jpg" width=400>

 - Your USB keyboard should be able to type into this screen, called the "REPL". It can accept Python code and some simple system commands. Try `ls` and you should see a directory listing. 

### First, upgrade your Tulip! 

You should **upgrade the firmware on Tulip** whenever you receive it. You should also upgrade maybe once every week or so. We are constantly adding new features, fixing bugs, updating the API. To upgrade your Tulip, connect it to your Wi-Fi first:

 - `tulip.wifi('ssid', 'password')` will return an IP address if successful.
 - `tulip.upgrade()` will walk you through the upgrade. Accept both upgrades -- the system folder and the firmware. This process will take a few minutes in total. Your Tulip will reboot itself when it is done.

[If you don't have easy access to Wi-Fi, or want to flash Tulip from code we haven't released yet, you can also directly flash Tulip from your computer.](tulip_flashing.md)

### More quick start tips

 - Type `run('calibrate')` to calibrate the touch screen if you think it is needed. 
 - The black icon on the bottom right is a launcher, for quick access to some included programs. Tap on `Drums` and you should see (and hear!) a drum machine. 
 - Tap the top right blue "switch" icon to get back to the REPL. Tap it again to get back to the drum machine. You can also use `control-Tab`
 - Tap the red "quit" icon to quit the drum machine.
 - You can `edit('boot.py')` to add anything you want to run on Tulip startup, like wifi, or calibration, or setting up a synth. You can save in the editor with `control-X` and quit with `control-Q`. 
 - You can switch TFB/REPL font sizes with `tulip.tfb_font(x)`: `0` is the default 8x12 font, `1` is a small 6x8 font, and `2` is a big 12x16 font.
 - After joining Wi-Fi, try out Tulip World with `run('worldui')` or `world.ls()` to see files and messages posted by others! 
 - Other things to try:
   - Some games/animations: `run('bunny_bounce')` or `run('planet_boing')` or `run('parallax')` (use control-C to quit), 
   - Music apps: `run('voices')`, `run('juno6')`, `run('drums')`
   - Music demo: `run('xanadu')`
   - Other utlities: `run('wordpad')`, `run('buttons')`. 
 - The code for all of these are available, for you to modify or learn from. We ship a copy of `drums`, `voices` and `juno6` as `my_drums`, `my_voices`, `my_juno6` in `/sys/ex` if you want to edit those. The official versions are read-only and you can't mess them up! 
 - If you've got MIDI plugged in, try playing a note! Tulip boots with Juno-6 patch #0 on MIDI Channel 1. You can use the `voices` app to change that assignment. If you want your MIDI knobs / sliders to control things like the Juno-6 parameters in `run('juno6')`, run a script to learn the sliders and update the midi mapping: `import learn_midi_codes`. Note you'll need to "learn" at least 13 buttons, 8 knobs and 9 sliders for full control of Juno. 
 - Try `world.download('mc_dance')`, `world.download('tracks')`, or `world.download('periodic2')` for some neat things by the Tulip community. 


Your next stop: [check out our making music on Tulip tutorial](music.md)

Then, [check out the API for making your own music, games, graphics with Tulip.](tulip_api.md)

If you're having any issues with your Tulip, please check out our [troubleshooting guide.](troubleshooting.md)

[If you want to work on Tulip itself, check out our guide to compiling and flashing the Tulip firmware.](tulip_flashing.md)

If you find yourself wanting to write Tulip code on a "real" computer, check out [Tulip Web](https://tulip.computer/run) and [Tulip Desktop](tulip_desktop.md), which simulates the Tulip hardware, or, see below how to transfer and edit files remotely.

## How to transfer files between Tulip and your computer

There are a few ways to files between Tulip and your computer. You can connect Tulip to your computer over a USB cable (the top USB port, the charging/UART/power port) and use a program called `mpremote`, or you can do it wirelessly by turning on Wi-Fi on the Tulip and using our Tulip World BBS or setting up a little server on your computer. 

### Using `mpremote`

[`mpremote`](https://docs.micropython.org/en/latest/reference/mpremote.html) is provided by the MicroPython project to be able to control and interact with MicroPython on many kinds of devices, including Tulip! It connects to Tulip over the UART USB connection and you are able to use the Tulip REPL, edit, upload and download files. (It does a lot more, but we'll just discuss file transfer here.)

**You may need to install the USB->Serial driver first for your computer's OS.** Some OSes already have it installed and some don't. If `mpremote` can't find a port, [try to install the CH340K drivers.](https://www.wch-ic.com/downloads/CH341SER_ZIP.html). 

First, install `mpremote`on your computer. Usually, this is (in your Terminal app) `pip install mpremote`. (If you don't have `pip`, please search for how to install it on your OS.) Once it's installed, make sure you've connected a USB cable from Tulip's top USB port - "USB pwr/charge/program" - to your computer. Then, with Tulip on, just run `mpremote` on your computer's terminal. You should see the Tulip's REPL on your screen! You can type into it and see it there. It's a fine way to control almost all of Tulip. 

To transfer a file from your computer to Tulip from mpremote, use `mpremote resume fs cp local_file.py :tulip_file.py`. This takes a file called `local_file.py` on your computer in the folder you're in, and transfers it to the current Tulip directory, calling it `tulip_file.py`. It's pretty fast! To transfer a file from Tulip to your computer, do it in reverse: `mpremote resume fs cp :tulip_file.py local_file.py`. 

To edit a file on Tulip directly on your computer, just do `mpremote resume edit file.py`. This will open whatever `EDITOR` you have set in your shell's environment. Once you save it in your editor, it'll be saved on Tulip! 

[See a lot more about `mpremote`](https://docs.micropython.org/en/latest/reference/mpremote.html). Note that we've only confirmed Tulip to work with the `fs`, `mount` and `repl` commands so far.  And on Tulip, you always need to add `resume` to your `mpremote` command. If you have any issues let us know! 

## Using Wi-Fi

With Wi-Fi, after you do `tulip.wifi('ssid', 'password')` first, there are two ways of getting files between Tulip hardware and your computer:

 - **Use Tulip World and Tulip Desktop:** On [Tulip Desktop](tulip_desktop.md) your files are in your  `~/.local/share/tulipcc/user` folder. You can edit and add files there directly and use `world.upload(folder)` or `world.upload(filename)` to place files on Tulip World from either Deskop or hardware Tulip. You can retrieve these files with `world.download(folder)` or `world.download(filename)`. The only downside to this method is that your files are publicly available to anyone else on Tulip World, so please don't share private information using Tulip World. 

 - **Use our file transfer script**: You can privately transfer files to and from a Tulip with our Python script [file_server.py](../tulip/shared/util/file_server.py). Download that script to your computer somewhere. Then, on your computer's terminal, run it, like `$ python file_server.py`. Wherever you run that script, all files in the folder you ran it from will be available to your Tulip. Use your computers' network manager to find out your computers' IP address (the `192.168.1.23` bit below is an example of it.)\
 \
 You can transfer any files **from** a computer to Tulip with `tulip.url_save(url, filename)` like: `tulip.url_save('http://192.168.1.23:8000/file.py', 'file.py')`. The `file.py` should be a file in the current directory that you've run `file_server.py` from.\
 \
 To transfer from a Tulip **to** a computer, use `tulip.url_put(url, file)` like `tulip.url_put('http://192.168.1.23:8000', 'file.py')` and it will appear in that folder on your computer.

 
[![shore pine sound systems discord](https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pics/shorepine100.png) **Chat about Tulip on our Discord!**](https://discord.gg/TzBFkUb8pG)

Have fun! See you on Tulip World!



================================================
FILE: docs/music.md
================================================
# Using Tulip to make music tutorial

Welcome to Tulip! 

This tutorial shows you all the ways to make music and make code to make music on Tulip. We'll update it as more examples, techniques and demos appear. 

First, make sure you've gone through the initial [getting started tutorial](getting_started.md). Especially, please make sure you've run `tulip.upgrade()`. 

## What Tulip is

Tulip is a **music computer** where everything about the underlying synthesis and sequencer engine can be programmed, live, on the Tulip itself. We provide a code editor and you can run programs right on Tulip, including multi-tasking apps that work together. We provide a few programs -- a patch editor, a place to assign voices, a drum machine -- but the real value of Tulip is the power to make whatever you imagine, or the programs contributed by others. 

## What Tulip can do with music 

 - Play very accurate Juno-6 patches and similar analog synths, up to 6 note polyphony / multimbrality. You have full control over all the parameters.
 - Play very accurate DX7 patches, and allow you to create your own FM synthesis setup -- in code!
 - Play built in 808-style drum patches, with pitch control 
 - Play a very good piano synthesis without samples
 - Load in your own .WAV samples to use in a sampler
 - Control CV outputs for modular synths and analog synths, with built in waveforms and sample & hold 
 - Sample CV inputs from an ADC to control other events on Tulip 
 - Send MIDI in and out, from code. You can write code to respond to MIDI messages to do whatever you want
 - Use USB MIDI devices like keyboards or synthesizers or adapters connected to Tulip's USB-KB port (with a hub to still support typing keyboards)
 - Share a common sequencer clock across multiple apps, for example, a drum machine and an arpeggiator 
 - Add global EQ, chorus, echo or reverb to the audio output
 - A scale and chord library to define musical notes in code, e.g. `music.Chord("F:min")`
 - Have total low level control of all oscillators, specifying their filters, waveform, modulation sources, ADSRs

## A small note about Tulip Desktop and Tulip Web

If you're using [Tulip Desktop](tulip_desktop.md) or [Tulip Web](https://tulip.computer/run) instead of a real Tulip, things will mostly be the same. CV sending does not work on Tulip Desktop. And anytime you see `/sys/` (for example, to open an example), replace it with `../sys/`. 


## The built-in Tulip synthesizer

When you start up your Tulip, it is configured to receive MIDI messages from the MIDI in port (or the USB MIDI port if connected.) You can plug in any MIDI device that sends MIDI out, like a MIDI keyboard or your computer running a sequencer. 

Try to just play notes once you've turned on Tulip, By default, MIDI channel 1 plays a Juno-6 patch. Notes on channel 10 will play PCM patches, roughly aligned with General MIDI drums. 

You can adjust patch assignments per channel, or change patches, using our built in `voices` app. You can type `run('voices')` or tap the bottom right launcher menu and tap `Voices`. 

<img src="https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pics/voices.png" width=600>


The red button on the top right will quit the app, and the blue button will switch to other apps, including the REPL (where you can type commands.)

Try changing the channel 1 patch to a different Juno-6 patch, or a DX-7 patch. Also make sure to try our [new piano patch](https://shorepine.github.io/amy/piano.html), by selecting "Misc" and choosing "dpwe Piano". 

You can also tap the keyboard on screen, even with multiple fingers. Try also playing with the arpeggiator. 

## The built-in Juno-6 patch editor

If you want to modify parameters of the Juno-6 synthesizer you can open `juno6`, either from the REPL or the launcher menu. While you have a Juno-6 patch assigned to a MIDI channel, you can modify any parameters of it, just like a real Juno-6. You can also assign MIDI control change values to a parameter, so that your MIDI keyboards sliders/knobs can control parameters.

<img src="https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pics/juno6.png" width=600>


## The Tulip sequencer and built-in drum machine

There's an 808-style drum machine that comes with Tulip, accessed via `run('drums')`. You can play back any PCM sample that ships on Tulip, or even load your own (see below.) The Tulip drum machine shares a common clock alongside any other Tulip program that uses a sequencer. This means that, for example, the arpeggiator in the `voices` app will stay in time with the drum machine. We'll show you how to control and use the sequencer in your own programs below.

<img src="https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pics/drums.png" width=600>


Set up a nice drum sequence for a bit. Play with the pitch parameter and pan. Now, go back to the REPL with the "switch" icon, or by using `control-Tab`. The drum machine should still be playing!

Let's make some of our own Tulip code to play along! You can make programs with our editor or just write small functions in the REPL itself. Let's start there. What we want to do is play the notes of a chord randomly, but in time with the drum machine already playing.

First, let's grab the synth we'll be playing. Let's just use the default playing synth - the Juno-6 patch 0 on MIDI channel 1. If you changed it to something else, that's fine! While we're here, we'll also choose the chord we want to play. So just type

```python
import music, random
chord = music.Chord("F:min7").midinotes()
syn = midi.config.get_synth(channel=1)
```

The first `import music, random` tells Tulip that we'll be using those libraries. Some (like `tulip, amy, midi`) are already included on bootup, but it's a good habit to get into when writing programs. 

If you just type `chord` and enter, you'll see the contents - just a list of MIDI notes corresponding to F minor 7. And `syn` is an object you can send messages to do make tones. Try `syn.note_on(50, 0.5)` -- will play a MIDI note 50 at half volume. 

To set this up to play with the sequencer, we will add a **sequence**.  A sequence has a set length per note (like quarter note, 1/32nd note, etc) and total length of the pattern. Let's make a 8 quarter note long sequence filled with random notes in the F:min7 chord we got earlier. 

For now, let's make a `Sequence` of 8 quarter notes -- the `4` defines the `1/4` note and the `8` is the length. 

(When finishing typing this, hit enter a few times at the end until you see a `>>>` prompt again (not a `...`.) )

```python
seq = sequencer.AMYSequence(8, 4) 
for i in range(8):
    seq.add(i, syn.note_on, [random.choice(chord), 0.6])
```

To unpack this a litte, we're creating a 8 1/4 note long pattern `(8,4)` and then adding 8 random notes of the F:min7 chord we created earlier to it. The `seq.add` first takes a parameter of which element to schedule (here, just 0, 1, 2, 3.... 7) and then the function to call (`syn.note_on`), then the arguments for that function (`random.choice(chord)` chooses a random midi note, and 0.6 is the velocity.)

You should now be hearing a synth pattern play every quarter note in time with the drums. It will keep going! The first parameter of `sequencer.AMYSequence` is the `divider` of the callback. This tells Tulip how often to call the callback. A `4` means `1/4`, a quarter note. If you made it `8`, it would be an eighth note. 

```python
seq.clear() # the sequence should stop 
seq = sequencer.AMYSequence(8, 8)  
for i in range(8):
    seq.add(i, syn.note_on, [random.choice(chord), 0.6])
```

This should be twice as fast! 

(If you want to do more complex things that aren't in even time, you can set your divider up to `192` and it will be called every single tick (with roughly 10ms between ticks) and you can decide when to emit notes. You can also run multiple `AMYSequence`s at once for polyrhythms.

You can also schedule any python function with a sequencer, not just a music note. You can do this with `TulipSequence` instead of `AMYSequence`. This will be useful to do things like update the screen, or send something to an external device, or anything you can imagine. The two sequencers stay in sync. Instead of `syn.note_on` as the function, just make your own function!

```python
def p(x):
    print("hey!")

print_seq = sequencer.TulipSequence(2, p)
```

To stop this printing every half note, type `print_seq.clear()`. Your programs should end in a `seq.clear()` so that you can clean up after yourself!

While you're playing with this, go back to the `voices` app and change the patch on channel 1 to something else. You'll hear your synth change immediately. You can also do this programatically: 

```python
syn.program_change(143) # change to patch #143 (dx-7 patch BASS 2)
```

Juno patches use patch number 0-127, DX7 are 128-255, and the piano is at 256.

You can also easily change the BPM of the sequencer -- this will impact everything using it, like the drum machine as well:

```python
sequencer.tempo(120)
```

[(Make sure to read more about the sequencer API in the API docs!)](tulip_api.md)

## Making new synths

We're using `midi.config.get_synth(channel=1)` to "borrow" the synth that booted with Tulip. But if you're going to want to share your ideas with others, you should make your own `synth` that doesn't conflict with anything already running on Tulip. That's easy, you can just run:

```python
syn = synth.PatchSynth(num_voices=2, patch=143) # two note polyphony, patch 143 is DX7 BASS 2
```

And if you want to play multimbral tones, like a Juno-6 bass alongside a DX7 pad:

```python
synth1 = synth.PatchSynth(num_voices=1, patch=0)  # Juno
synth2 = synth.PatchSynth(num_voices=1, patch=128)  # DX7
synth1.note_on(50, 1)
synth2.note_on(50, 0.5)
```

You can also "schedule" notes. This is useful for sequencing fast parameter changes. `synth`s accept a `time` parameter, and it's in milliseconds. For example, type this into the REPL.

```python
# play a chord all at once
import music, midi, tulip
synth4 = synth.PatchSynth(num_voices=4, patch=1)
chord = music.Chord("F:min7").midinotes()
for i,note in enumerate(chord):
    synth4.note_on(note, 0.5, time=tulip.amy_ticks_ms() + (i * 1000))   # time is i seconds from now
    # each note on will play precisely one second after the last
```

You can send `all_notes_off()` to your synth to stop playing notes:

```python
synth4.all_notes_off()
```

If you are booting a new synth in your program, remember to `release` your synths when you're done with them
```python
synth1.release() # Does all note-off and then clears the voice alloc 
synth2.release()
synth4.release()
```

As you learn more about AMY (the underlying synth engine) you may be interested in making your own `synth`s in Python. See `synth.py`'s `OscSynth` for an example. 

## Modifying the default synth or other MIDI channel assignments in code

You may want to programatically change the MIDI to synth mapping. One example would be to lower the polyphony of the booted by default 6-note synth on channel 1, so that notes coming in through MIDI don't impact the performance or polyphony of your app. Or if you want to set up your music app to receive different patches on different MIDI channels. 

You can change the parameters of channel synths like this:

```python
midi.config.add_synth(channel=c, synth=synth.PatchSynth(patch_number=p, num_voices=n))
```

Note that `add_synth` will stop any running synth on that channel and boot a new one in its place. 

## The editor

You can get a lot done in the Tulip REPL just playing around. But you'll eventually want to save your creations and run them alongside other things. Let's start up the Tulip Editor and save your first program. You can go ahead and quit the drum machine if you want, and remember to run

```
seq.clear() # the synth should stop 
```

to stop your REPL sequencer callback.

<img src="https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pics/jampy.png" width=600>

Type `edit('jam.py')` (or whatever you want to call it.) You'll see a black screen open. This is the editor! You can use it like a computer's editor to save code. Just start typing, let's put our program in posterity:

```python
import tulip, midi, music, random, sequencer

chord = music.Chord("F:min7").midinotes()
syn = synth.PatchSynth(num_voices=1, patch=143)  # DX7 BASS 2
seq = None

def note(t):
    syn.note_on(random.choice(chord), 0.6, time=t)

def start():
    global seq
    seq = sequencer.TulipSequence(8, note)

def stop():
    global seq
    seq.clear()
    syn.release()

```

Hit `control-X` to save this (you'll see a little asterisk `*` go away in the status bar) and then either `control-Q` to quit the editor or `control-Tab` to switch back to the REPL. Now, just:

```
import jam
jam.start() # should start playing
jam.stop() # will stop playing
```

This will be easier for you to edit your creations and try things out. Try different chords, patches, different sequences, etc. If you stopped the drum machine, you can restart it anytime and it will stay in time with your `jam`.

The drum machine itself is actually a simple Tulip program, written in Python. You can look at the code on your Tulip, or edit it and run your own version. You can go back to the REPL and run `edit('/sys/ex/my_drums.py')` -- this will open a copy of the drum machine you can edit. Try changing the color of the LED on line 12 to say, 9. Then save ('control-X'), then quit the running drum machine and open your version -- `run('my_drums')`. You should see the change! Check out the rest of the drum machine code. Most of it is UI setup, and then you can see it setting up a sequencer callback and sending off the drum messages every beat. 

## UIScreens

You may have noticed that the editor, the `voices` and `drums` app all have those buttons on the top right and their own screen, while your `jam.py` just runs in the REPL. That works for a lot of things, but maybe you want to build a UI or show status of your app on its own screen. To do that, we can easily adapt our simple program to be a Tulip `UIScreen` app like its big siblings. Let's make a `jam2.py` into a UIScreen with a slider for tempo. Open `edit('jam2.py')` (quit the editor and restart it if you're editing something else) and make it

```python
import tulip, midi, music, random

def note(t):
    global app
    app.syn.note_on(random.choice(app.chord), 0.6, time=t)

def start(app):
    app.seq = sequencer.TulipSequence(8, note)

def stop(app):
    app.seq.clear()
    app.syn.release()

def run(screen):
    global app
    app = screen
    app.seq = None
    app.chord = music.Chord("F:min7").midinotes()
    app.syn = synth.PatchSynth(num_voices=1, patch=143)  # DX7 BASS 2
    app.present()
    app.quit_callback = stop
    start(app)
```

Save this and then just `run('jam2')` from the REPL (you can omit the `.py` if you want.) You'll see a blank screen with the top right buttons and you should be hearing your sequence, started when the app starts. If you hit "switch" or `control-Tab` it will still be going. If you quit or `control-Q` the app, it will stop. That's the `quit_callback` being setup there. 

Let's add a UI component. Add a few lines to `run` so it looks like:

```python
def run(screen):
    global app
    app = screen
    app.seq = None
    app.chord = music.Chord("F:min7").midinotes()
    app.syn = synth.PatchSynth(num_voices=1, patch=143)  # DX7 BASS 2
    bpm_slider = tulip.UISlider(sequencer.tempo()/2.4, w=300, h=25,
        callback=bpm_change, bar_color=123, handle_color=23)
    app.add(bpm_slider, x=300,y=200)
    app.present()
    app.quit_callback = stop
    start(app)
```

And also add a new function, above the `run(screen)`. This is the callback from when someone changes the bpm slider. In this function, we want to change the system BPM:

```python
def bpm_change(event):
    sequencer.tempo(event.get_target_obj().get_value()*2.4)
```

Now quit the `jam2` app if it was already running and re-`run` it. You should see a slider, and when you move it, the system BPM changes. The `2.4` you see in the code is because sliders return values between 0-100, and we convert that into BPMs of 0-240. You can add all sorts of UI elements. We provide a few classic ones like `UICheckbox` and `UIButton`. You should look at the source of `drums` and `voices` to see how they're built and [our API documentation for the full details.](tulip_api.md) How about a `UIText` entry box for people to type in the chord they want to play? 

<img src="https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pics/jam2.png" width=600>


## Sampler, OscSynth

Tulip defines a few different `synth` classes, including `OscSynth` which directly uses one oscillator per voice of polyphony, as in this simple sine wave synth:

```python
s = synth.OscSynth(wave=amy.SINE)
s.note_on(60,1)
s.note_off(60)
```

Let's try it as a sampler. There are 29 samples of drum-like and instrument sounds in Tulip, and it can adjust the pitch and pan and loop of each one. You can try it out with:

```python
# You can pass any AMY arguments to the setup of OscSynth
s = synth.OscSynth(wave=amy.PCM, patch=10) # PCM wave type, patch=10 (808 Cowbell)

s.note_on(50, 1.0)
s.note_on(40, 1.0) # different pitch

s.update_oscs(pan=0) # different pan
s.note_on(40, 1.0)

s.update_oscs(feedback=1, patch=23) # patch 23 is Koto, feedback=1 loops the sound
s.note_on(40, 1.0)
s.note_off(40) # looped instruments require a note_off to stop
```

You can load your own samples into Tulip. Take any .wav file and [load it onto Tulip.](getting_started.md#transfer-files-between-tulip-and-your-computer) Now, load it in as a PCM patch:

```python
amy.load_sample('sample.wav', patch=50)
s = synth.OscSynth(wave=amy.PCM, patch=50)
s.note_on(60, 1.0)
```

You can also load PCM patches with looped segments if you have their loopstart and loopend parameters (these are often stored in the WAVE metadata. If the .wav file has this metadata, we'll parse it. The example file `/sys/ex/vlng3.wav` has it. You can also provide the metadata directly.) To indicate looping, use `feedback=1`. 

```python
amy.load_sample("/sys/ex/vlng3.wav", patch=50)  # loads wave looping metadata
s = synth.OscSynth(wave=amy.CUSTOM, patch=50, feedback=1, num_voices=1)
s.note_on(60, 1.0) # loops
s.note_on(55, 1.0) # loops
s.note_off(55) # stops
```

You can unload samples from RAM with `amy.unload_sample(patch_number)`. 

## Modify Juno-6 patches programatically

We showed above how to `run('juno6')` to see a Juno-6 editor. But if you want your code to change the patches, you can do it yourself with:

```python
run("juno6")
# Go back to REPL
juno6.vcf_res.set(64) # 0-127
```

If you switch back to the Juno-6 editor, you'll see the slider for resonance physically moved as well.

You can type `juno6.` and then hit the `TAB` key to see functions you can call. 


## AMY low-level control in Tulip

Tulip's synth is powered by [AMY](https://github.com/shorepine/amy), a very full featured multi-oscillator additive and subtractive style synth. It's got tons of features. Our examples so far have all been in the "higher-level" Tulip python mode, but you can send direct AMY commands by simply calling `amy.send()`:

```python
import amy
amy.send(osc=30, wave=amy.SINE, freq=440, vel=1) # 440Hz sine wave
amy.send(osc=30, vel = 0) # note off
amy.reverb(1) # turn on global reverb
amy.echo(level=1, delay_ms=400, feedback=0.8) # global echo
amy.drums() # play a test pattern
amy.reset() # reset every AMY oscillator
```

Here's how to make an 808-style bass drum tone in pure AMY oscillators:

```python
amy.send(osc=31, wave=amy.SINE, amp=0.5, freq=0.25, phase=0.5)
amy.send(osc=32, wave=amy.SINE, bp0="0,1,500,0,0,0", freq="150,1,0,0,0,1", mod_source=31, vel=1)
```

If you're interested in going deeper on all that AMY can do, [check out AMY's README](https://github.com/shorepine/amy/blob/main/README.md). 


## Sending and receiving MIDI in code

You can write functions that respond to MIDI inputs easily on Tulip. Let's say you wanted to make a very simple sine wave oscillator that responded to MIDI messages on channel 1. All you need to do is write a MIDI callback function, like the sequencer one you did earlier. 

```python
import midi, amy
def sine(m):
    if m[0] == 144: # MIDI message channel 1 byte 0 note on
        # send a sine wave to osc 30, with midi note and velocity
        amy.send(osc=30, wave=amy.SINE, note=m[1], vel=m[2] / 127.0)

# turn off Tulip's native handling of MIDI so we can hear our synth
midi.config.reset()

# Add our callback
midi.add_callback(sine)

# Now play a MIDI note into Tulip. If you don't have a KB attached, use midi_local to send the message:
tulip.midi_local((144, 60, 100))

# You should hear a sine wave

# Turn off the midi callback 
midi.remove_callback(sine)

# reset back to the default synths
midi.add_default_synths()

```

To send MIDI out, just use `tulip.midi_out(message)`, e.g. `tulip.midi_out([0x90, 0x40, 0x7F])` to send a note-on at velocity 127 and note 64 to the first MIDI channel.   You can, for example, use this to send a MIDI message out every sequencer tick on Tulip.

## Outputting CV signals to modular and analog synths

Tulip can output CV signals instead of audio signals out a compatible DAC chip that you attach on the side "i2c" port. [You can get a DAC](https://github.com/shorepine/tulipcc/blob/main/docs/getting_started.md#dacs-or-adcs-for-modular-synths) and send any waveform out its port, even synced to a tempo or using sample & hold. I'd first recommend trying out the user-contributed `waves.py` app, which brings all this together using a GUI: 

To get the `waves.py` app, you'll first need to join Wi-Fi and get it from Tulip World. See the [getting started](getting_started.md) tutorial for more info, but just do:

```python
tulip.wifi(ssid, password)
world.download('waves.py')
run('waves')
```

And you should see:

<img src="https://raw.githubusercontent.com/shorepine/tulipcc/main/docs/pics/waves.png" width=600>

If you look at the source of `waves.py` in the editor, you can see it's pretty simple after the UI setup. 

```python
amy.send(osc=30, external_channel=1, wave=amy.SAW_DOWN, vel=1, freq=0.5, amp=1)
```
This sends a saw wave out the first channel of DACs at 0.5Hz with amplitude of 1, so will be 0-5V peak to peak. 

Send

```python
amy.send(osc=30, amp=0)
```

to stop it. You can also send individual voltages with

```python
import mabeedac
mabeedac.send(2.5, channel=0) # sends 2.5V to the first CV channel.
```

## Custom FM tones and AMY patches (WOOD PIANO)

Let's see how to make your own FM synthesis in AMY commands. The 4-operator "WOOD PIANO" FM tone is a classic. It's pretty simple, too. 

Let's make a custom patch, which is a set of AMY commands you can assign to a patch number (from 1024 to 1055.)

To do so, ask AMY to "remember" what we're doing, but not send it to the internal synthesizer. This is done by

```python
amy.start_store_patch()
```

Anything you send AMY from now will be logged to a custom patch and not to the internal synth. 

Now, send the AMY setup commands for your patch. Make sure your patch is consecutive oscillators, starting at oscillator 0 for the "root oscillator."

The WOOD PIANO patch is four operators, each with an envelope and different modulation amplitude.

```python
amy.send(osc=1, bp0="0,1,5300,0,0,0", phase=0.25, ratio=1, amp="0.3,0,0,1,0,0")
amy.send(osc=2, bp0="0,1,3400,0,0,0", phase=0.25, ratio=0.5, amp="1.68,0,0,1,0,0")
amy.send(osc=3, bp0="0,1,6700,0,0,0", phase=0.25, ratio=1, amp="0.23,0,0,1,0,0")
amy.send(osc=4, bp0="0,1,3400,0,0,0", phase=0.25, ratio=0.5, amp="1.68,0,0,1,0,0")
```

Then, send the "root" oscillator instructions. This is the one you'd send note-ons to. The root oscillator gets an "algorithm", which indicates how to modulate the operators. See the [AMY documentation](https://github.com/shorepine/amy) for more detail. It also gets its own amplitude and pitch envelopes (`bp0` and `bp1`). 


```python
amy.send(osc=0, wave=amy.ALGO, algorithm=5, algo_source="1,2,3,4", bp0="0,1,147,0", bp1="0,1,179,1", freq="0,1,0,0,1,1")
```

Now, tell AMY to stop logging the patch and store it to a custom patch number.

```python
amy.stop_store_patch(1024)
```

Now, you're free to use this patch number like all the Juno and DX7 ones. For a polyphonic wood piano, do:

```python
s = synth.PatchSynth(5)
s.program_change(1024)
s.note_on(50, 1)
s.note_on(50, 1)
s.note_on(55, 1)
```

Try saving these setup commands (including the `store_patch`, which gets cleared on power / boot) to a python file, like `woodpiano.py`, and `execfile("woodpiano.py")` on reboot to set it up for you!







================================================
FILE: docs/pcbs/amyboard/README.md
================================================
# AMYboard Schematics

![AMYBoard 1.4](https://github.com/shorepine/tulipcc/blob/main/docs/pcbs/amyboard/amyboard-1.4-sch.png)


================================================
FILE: docs/pcbs/amyboard/amyboard-v1.0.brd
================================================
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE eagle SYSTEM "eagle.dtd">
<eagle version="6.1">
<drawing>
<settings>
<setting alwaysvectorfont="no"/>
<setting verticaltext="up"/>
</settings>
<grid distance="1" unitdist="mil" unit="mil" style="dots" multiple="1" display="yes" altdistance="1" altunitdist="mil" altunit="mm"/>
<layers>
<layer number="1" name="Top" color="4" fill="1" visible="yes" active="yes"/>
<layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes"/>
<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/>
<layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes"/>
<layer number="19" name="Unrouted" color="6" fill="1" visible="yes" active="yes"/>
<layer number="20" name="Dimension" color="13" fill="1" visible="yes" active="yes"/>
<layer number="21" name="tPlace" color="7" fill="1" visible="yes" active="yes"/>
<layer number="22" name="bPlace" color="14" fill="1" visible="yes" active="yes"/>
<layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="24" name="bOrigins" color="15" fill="1" visible="no" active="yes"/>
<layer number="25" name="tNames" color="7" fill="1" visible="no" active="yes"/>
<layer number="26" name="bNames" color="7" fill="1" visible="no" active="yes"/>
<layer number="27" name="tValues" color="7" fill="1" visible="no" active="yes"/>
<layer number="28" name="bValues" color="7" fill="1" visible="no" active="yes"/>
<layer number="29" name="tStop" color="7" fill="3" visible="no" active="yes"/>
<layer number="30" name="bStop" color="7" fill="6" visible="no" active="yes"/>
<layer number="31" name="tCream" color="7" fill="4" visible="no" active="yes"/>
<layer number="32" name="bCream" color="7" fill="5" visible="no" active="yes"/>
<layer number="33" name="tFinish" color="6" fill="3" visible="no" active="yes"/>
<layer number="34" name="bFinish" color="6" fill="6" visible="no" active="yes"/>
<layer number="35" name="tGlue" color="7" fill="4" visible="no" active="yes"/>
<layer number="36" name="bGlue" color="7" fill="5" visible="no" active="yes"/>
<layer number="37" name="tTest" color="7" fill="1" visible="no" active="yes"/>
<layer number="38" name="bTest" color="7" fill="1" visible="no" active="yes"/>
<layer number="39" name="tKeepout" color="4" fill="11" visible="no" active="yes"/>
<layer number="40" name="bKeepout" color="1" fill="11" visible="no" active="yes"/>
<layer number="41" name="tRestrict" color="4" fill="10" visible="no" active="yes"/>
<layer number="42" name="bRestrict" color="1" fill="10" visible="no" active="yes"/>
<layer number="43" name="vRestrict" color="2" fill="10" visible="no" active="yes"/>
<layer number="44" name="Drills" color="7" fill="1" visible="no" active="yes"/>
<layer number="45" name="Holes" color="7" fill="1" visible="no" active="yes"/>
<layer number="46" name="Milling" color="3" fill="1" visible="no" active="yes"/>
<layer number="47" name="Measures" color="7" fill="1" visible="no" active="yes"/>
<layer number="48" name="Document" color="7" fill="1" visible="no" active="yes"/>
<layer number="49" name="Reference" color="7" fill="1" visible="no" active="yes"/>
<layer number="50" name="dxf" color="7" fill="1" visible="no" active="no"/>
<layer number="51" name="tDocu" color="7" fill="1" visible="no" active="yes"/>
<layer number="52" name="bDocu" color="7" fill="1" visible="no" active="yes"/>
<layer number="53" name="tGND_GNDA" color="7" fill="9" visible="no" active="no"/>
<layer number="54" name="bGND_GNDA" color="1" fill="9" visible="no" active="no"/>
<layer number="56" name="wert" color="7" fill="1" visible="no" active="no"/>
<layer number="57" name="tCAD" color="7" fill="1" visible="no" active="no"/>
<layer number="58" name="b3D" color="7" fill="1" visible="no" active="no"/>
<layer number="59" name="tCarbon" color="7" fill="1" visible="no" active="no"/>
<layer number="60" name="bCarbon" color="7" fill="1" visible="no" active="no"/>
<layer number="61" name="stand" color="7" fill="1" visible="no" active="no"/>
<layer number="88" name="SimResults" color="9" fill="1" visible="no" active="no"/>
<layer number="89" name="SimProbes" color="9" fill="1" visible="no" active="no"/>
<layer number="90" name="Modules" color="5" fill="1" visible="no" active="no"/>
<layer number="91" name="Nets" color="2" fill="1" visible="no" active="no"/>
<layer number="92" name="Busses" color="1" fill="1" visible="no" active="no"/>
<layer number="93" name="Pins" color="2" fill="1" visible="no" active="no"/>
<layer number="94" name="Symbols" color="4" fill="1" visible="no" active="no"/>
<layer number="95" name="Names" color="7" fill="1" visible="no" active="no"/>
<layer number="96" name="Values" color="7" fill="1" visible="no" active="no"/>
<layer number="97" name="Info" color="7" fill="1" visible="no" active="no"/>
<layer number="98" name="Guide" color="6" fill="1" visible="no" active="no"/>
<layer number="99" name="SpiceOrder" color="7" fill="1" visible="no" active="no"/>
<layer number="100" name="Muster" color="7" fill="1" visible="no" active="no"/>
<layer number="101" name="Patch_Top" color="12" fill="4" visible="no" active="yes"/>
<layer number="102" name="Vscore" color="7" fill="1" visible="no" active="yes"/>
<layer number="103" name="tMap" color="7" fill="1" visible="no" active="yes"/>
<layer number="104" name="Name" color="16" fill="1" visible="no" active="yes"/>
<layer number="105" name="tPlate" color="7" fill="1" visible="no" active="yes"/>
<layer number="106" name="bPlate" color="7" fill="1" visible="no" active="yes"/>
<layer number="107" name="Crop" color="7" fill="1" visible="no" active="yes"/>
<layer number="108" name="tplace-old" color="10" fill="1" visible="no" active="yes"/>
<layer number="109" name="ref-old" color="11" fill="1" visible="no" active="yes"/>
<layer number="110" name="fp0" color="7" fill="1" visible="no" active="yes"/>
<layer number="111" name="LPC17xx" color="7" fill="1" visible="no" active="yes"/>
<layer number="112" name="tSilk" color="7" fill="1" visible="no" active="yes"/>
<layer number="113" name="IDFDebug" color="4" fill="1" visible="no" active="yes"/>
<layer number="114" name="Badge_Outline" color="7" fill="1" visible="no" active="yes"/>
<layer number="115" name="ReferenceISLANDS" color="7" fill="1" visible="no" active="yes"/>
<layer number="116" name="Patch_BOT" color="9" fill="4" visible="no" active="yes"/>
<layer number="117" name="BACKMAAT1" color="7" fill="1" visible="no" active="yes"/>
<layer number="118" name="Rect_Pads" color="7" fill="1" visible="no" active="yes"/>
<layer number="119" name="KAP_TEKEN" color="7" fill="1" visible="no" active="yes"/>
<layer number="120" name="KAP_MAAT1" color="7" fill="1" visible="no" active="yes"/>
<layer number="121" name="_tsilk" color="7" fill="1" visible="no" active="yes"/>
<layer number="122" name="_bsilk" color="7" fill="1" visible="no" active="yes"/>
<layer number="123" name="tTestmark" color="7" fill="1" visible="no" active="yes"/>
<layer number="124" name="bTestmark" color="7" fill="1" visible="no" active="yes"/>
<layer number="125" name="_tNames" color="7" fill="1" visible="no" active="yes"/>
<layer number="126" name="_bNames" color="7" fill="1" visible="no" active="yes"/>
<layer number="127" name="_tValues" color="7" fill="1" visible="no" active="yes"/>
<layer number="128" name="_bValues" color="7" fill="1" visible="no" active="yes"/>
<layer number="129" name="Mask" color="7" fill="1" visible="no" active="yes"/>
<layer number="130" name="SMDSTROOK" color="7" fill="1" visible="no" active="yes"/>
<layer number="131" name="tAdjust" color="7" fill="1" visible="no" active="yes"/>
<layer number="132" name="bAdjust" color="7" fill="1" visible="no" active="yes"/>
<layer number="133" name="bottom_silk" color="7" fill="1" visible="no" active="yes"/>
<layer number="134" name="silk_top" color="7" fill="1" visible="no" active="no"/>
<layer number="135" name="silk_bottom" color="7" fill="1" visible="no" active="no"/>
<layer number="136" name="silktop" color="7" fill="1" visible="no" active="yes"/>
<layer number="137" name="silkbottom" color="7" fill="1" visible="no" active="yes"/>
<layer number="138" name="GND@2" color="7" fill="1" visible="no" active="yes"/>
<layer number="139" name="mtKeepout" color="7" fill="1" visible="no" active="yes"/>
<layer number="140" name="mbKeepout" color="7" fill="1" visible="no" active="yes"/>
<layer number="141" name="mtRestrict" color="7" fill="1" visible="no" active="yes"/>
<layer number="142" name="mbRestrict" color="7" fill="1" visible="no" active="yes"/>
<layer number="143" name="mvRestrict" color="7" fill="1" visible="no" active="yes"/>
<layer number="144" name="Drill_legend" color="7" fill="1" visible="no" active="yes"/>
<layer number="145" name="DrillLegend_01-16" color="7" fill="1" visible="no" active="yes"/>
<layer number="146" name="DrillLegend_01-20" color="7" fill="1" visible="no" active="yes"/>
<layer number="147" name="mMeasures" color="7" fill="1" visible="no" active="yes"/>
<layer number="148" name="mDocument" color="7" fill="1" visible="no" active="yes"/>
<layer number="149" name="mReference" color="7" fill="1" visible="no" active="yes"/>
<layer number="150" name="Notes" color="7" fill="1" visible="no" active="yes"/>
<layer number="151" name="HeatSink" color="7" fill="1" visible="no" active="yes"/>
<layer number="152" name="_bDocu" color="7" fill="1" visible="no" active="yes"/>
<layer number="153" name="FabDoc1" color="7" fill="1" visible="no" active="yes"/>
<layer number="154" name="FabDoc2" color="7" fill="1" visible="no" active="yes"/>
<layer number="155" name="FabDoc3" color="7" fill="1" visible="no" active="yes"/>
<layer number="156" name="DXF0409-TOP" color="7" fill="1" visible="no" active="yes"/>
<layer number="157" name="DXF0409-BOTTOM" color="7" fill="1" visible="no" active="yes"/>
<layer number="158" name="tCream_M3定位" color="62" fill="1" visible="no" active="yes"/>
<layer number="166" name="AntennaArea" color="7" fill="1" visible="no" active="yes"/>
<layer number="168" name="4mmHeightArea" color="7" fill="1" visible="no" active="yes"/>
<layer number="191" name="mNets" color="7" fill="1" visible="no" active="yes"/>
<layer number="192" name="mBusses" color="7" fill="1" visible="no" active="yes"/>
<layer number="193" name="mPins" color="7" fill="1" visible="no" active="yes"/>
<layer number="194" name="mSymbols" color="7" fill="1" visible="no" active="yes"/>
<layer number="195" name="mNames" color="7" fill="1" visible="no" active="yes"/>
<layer number="196" name="mValues" color="7" fill="1" visible="no" active="yes"/>
<layer number="199" name="Contour" color="7" fill="1" visible="no" active="yes"/>
<layer number="200" name="200bmp" color="1" fill="10" visible="no" active="yes"/>
<layer number="201" name="201bmp" color="2" fill="10" visible="no" active="yes"/>
<layer number="202" name="202bmp" color="3" fill="10" visible="no" active="yes"/>
<layer number="203" name="203bmp" color="4" fill="10" visible="no" active="yes"/>
<layer number="204" name="204bmp" color="5" fill="10" visible="no" active="yes"/>
<layer number="205" name="205bmp" color="6" fill="10" visible="no" active="yes"/>
<layer number="206" name="206bmp" color="7" fill="10" visible="no" active="yes"/>
<layer number="207" name="207bmp" color="8" fill="10" visible="no" active="yes"/>
<layer number="208" name="208bmp" color="9" fill="10" visible="no" active="yes"/>
<layer number="209" name="209bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="210" name="210bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="211" name="211bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="212" name="212bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="213" name="213bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="214" name="214bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="215" name="215bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="216" name="216bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="217" name="217bmp" color="18" fill="1" visible="no" active="no"/>
<layer number="218" name="218bmp" color="19" fill="1" visible="no" active="no"/>
<layer number="219" name="219bmp" color="20" fill="1" visible="no" active="no"/>
<layer number="220" name="220bmp" color="21" fill="1" visible="no" active="no"/>
<layer number="221" name="221bmp" color="22" fill="1" visible="no" active="no"/>
<layer number="222" name="222bmp" color="23" fill="1" visible="no" active="no"/>
<layer number="223" name="223bmp" color="24" fill="1" visible="no" active="no"/>
<layer number="224" name="224bmp" color="25" fill="1" visible="no" active="no"/>
<layer number="225" name="225bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="226" name="226bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="227" name="227bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="228" name="228bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="229" name="229bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="230" name="230bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="231" name="231bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="232" name="Eagle3D_PG2" color="7" fill="1" visible="no" active="yes"/>
<layer number="233" name="Eagle3D_PG3" color="7" fill="1" visible="no" active="yes"/>
<layer number="248" name="Housing" color="7" fill="1" visible="no" active="yes"/>
<layer number="249" name="Edge" color="7" fill="1" visible="no" active="yes"/>
<layer number="250" name="Descript" color="3" fill="1" visible="no" active="no"/>
<layer number="251" name="SMDround" color="12" fill="11" visible="no" active="no"/>
<layer number="252" name="tComponents" color="7" fill="1" visible="no" active="yes"/>
<layer number="253" name="bComponents" color="7" fill="1" visible="no" active="yes"/>
<layer number="254" name="cooling" color="7" fill="1" visible="no" active="yes"/>
<layer number="255" name="routoute" color="7" fill="1" visible="no" active="yes"/>
</layers>
<board>
<plain>
<wire x1="0" y1="0" x2="106" y2="0" width="0.254" layer="20"/>
<wire x1="106" y1="0" x2="106" y2="48" width="0.254" layer="20"/>
<wire x1="106" y1="48" x2="0" y2="48" width="0.254" layer="20"/>
<wire x1="0" y1="48" x2="0" y2="0" width="0.254" layer="20"/>
<dimension x1="-36.83" y1="-200.66" x2="-36.83" y2="-35.66" x3="-41.1226" y3="-118.16" layer="47"/>
<dimension x1="63.17" y1="-200.66" x2="-36.83" y2="-200.66" x3="13.17" y3="-206.756" layer="47"/>
<dimension x1="-58.42" y1="-278.13" x2="-78.74" y2="-278.13" x3="-68.58" y3="-279.4" layer="47"/>
<dimension x1="-57.15" y1="-276.86" x2="-57.15" y2="-262.89" x3="-55.88" y3="-269.875" layer="47"/>
<dimension x1="-80.01" y1="-274.32" x2="-80.01" y2="-276.86" x3="-81.28" y3="-275.59" layer="47"/>
<dimension x1="-60.96" y1="-261.62" x2="-76.2" y2="-261.62" x3="-68.58" y3="-260.35" layer="47"/>
<dimension x1="-84.074" y1="-347.98" x2="-84.074" y2="-322.58" x3="-55.118" y3="-335.28" layer="47" dtype="vertical"/>
<dimension x1="-100.33" y1="-325.12" x2="-67.31" y2="-325.12" x3="-83.82" y3="-320.421" layer="47" dtype="horizontal"/>
<dimension x1="-100.33" y1="-345.44" x2="-100.33" y2="-325.12" x3="-107.569" y3="-335.28" layer="47" dtype="vertical"/>
<dimension x1="-102.87" y1="-337.185" x2="-64.77" y2="-342.9" x3="-83.82" y3="-316.992" layer="47" dtype="horizontal"/>
<dimension x1="-67.818" y1="-347.98" x2="-64.77" y2="-335.28" x3="-61.214" y3="-341.63" layer="47" dtype="vertical"/>
<dimension x1="-95.25" y1="-345.44" x2="-92.71" y2="-325.12" x3="-93.98" y3="-350.139" layer="47" dtype="horizontal"/>
<dimension x1="-137.16" y1="-441.96" x2="-116.84" y2="-441.96" x3="-127" y3="-449.58" layer="47"/>
<dimension x1="-137.16" y1="-441.96" x2="-137.16" y2="-410.21" x3="-149.86" y3="-426.085" layer="47" dtype="horizontal"/>
<dimension x1="-137.16" y1="-441.96" x2="-137.16" y2="-439.42" x3="-142.24" y3="-440.69" layer="47" dtype="vertical"/>
<text x="-109.5375" y="-448.945" size="1.778" layer="47" font="vector" ratio="15">Units: Inches</text>
<dimension x1="-137.16" y1="-441.96" x2="-130.81" y2="-441.96" x3="-133.985" y3="-445.77" layer="47"/>
<dimension x1="-137.16" y1="-441.96" x2="-137.16" y2="-412.75" x3="-146.05" y3="-427.355" layer="47" dtype="vertical"/>
<dimension x1="-156.21" y1="-631.19" x2="-156.21" y2="-466.19" x3="-160.5026" y3="-548.69" layer="47"/>
<dimension x1="-56.21" y1="-631.19" x2="-156.21" y2="-631.19" x3="-106.21" y3="-637.286" layer="47"/>
<dimension x1="-177.8" y1="-708.66" x2="-198.12" y2="-708.66" x3="-187.96" y3="-709.93" layer="47"/>
<dimension x1="-176.53" y1="-707.39" x2="-176.53" y2="-693.42" x3="-175.26" y3="-700.405" layer="47"/>
<dimension x1="-199.39" y1="-704.85" x2="-199.39" y2="-707.39" x3="-200.66" y3="-706.12" layer="47"/>
<dimension x1="-180.34" y1="-692.15" x2="-195.58" y2="-692.15" x3="-187.96" y3="-690.88" layer="47"/>
<dimension x1="-203.454" y1="-778.51" x2="-203.454" y2="-753.11" x3="-174.498" y3="-765.81" layer="47" dtype="vertical"/>
<dimension x1="-219.71" y1="-755.65" x2="-186.69" y2="-755.65" x3="-203.2" y3="-750.951" layer="47" dtype="horizontal"/>
<dimension x1="-219.71" y1="-775.97" x2="-219.71" y2="-755.65" x3="-226.949" y3="-765.81" layer="47" dtype="vertical"/>
<dimension x1="-222.25" y1="-767.715" x2="-184.15" y2="-773.43" x3="-203.2" y3="-747.522" layer="47" dtype="horizontal"/>
<dimension x1="-187.198" y1="-778.51" x2="-184.15" y2="-765.81" x3="-180.594" y3="-772.16" layer="47" dtype="vertical"/>
<dimension x1="-214.63" y1="-775.97" x2="-212.09" y2="-755.65" x3="-213.36" y3="-780.669" layer="47" dtype="horizontal"/>
<dimension x1="-256.54" y1="-872.49" x2="-236.22" y2="-872.49" x3="-246.38" y3="-880.11" layer="47"/>
<dimension x1="-256.54" y1="-872.49" x2="-256.54" y2="-840.74" x3="-269.24" y3="-856.615" layer="47" dtype="horizontal"/>
<dimension x1="-256.54" y1="-872.49" x2="-256.54" y2="-869.95" x3="-261.62" y3="-871.22" layer="47" dtype="vertical"/>
<text x="-228.9175" y="-879.475" size="1.778" layer="47" font="vector" ratio="15">Units: Inches</text>
<dimension x1="-256.54" y1="-872.49" x2="-250.19" y2="-872.49" x3="-253.365" y3="-876.3" layer="47"/>
<dimension x1="-256.54" y1="-872.49" x2="-256.54" y2="-843.28" x3="-265.43" y3="-857.885" layer="47" dtype="vertical"/>
<dimension x1="-275.59" y1="-1061.72" x2="-275.59" y2="-896.72" x3="-279.8826" y3="-979.22" layer="47"/>
<dimension x1="-175.59" y1="-1061.72" x2="-275.59" y2="-1061.72" x3="-225.59" y3="-1067.816" layer="47"/>
<circle x="2.54" y="45.466" radius="1.36783125" width="0.4064" layer="20"/>
<circle x="2.54" y="2.54" radius="1.436840625" width="0.4064" layer="20"/>
<circle x="103.4542" y="2.54" radius="1.36783125" width="0.4064" layer="20"/>
<circle x="103.4542" y="45.466" radius="1.36783125" width="0.4064" layer="20"/>
<dimension x1="106" y1="48" x2="0" y2="48" x3="53" y3="54.1274" layer="20" dtype="vertical"/>
<dimension x1="0" y1="48" x2="0" y2="0" x3="-4.5974" y3="24" layer="20" dtype="vertical"/>
<text x="10.16" y="28.5496" size="1.27" layer="22" font="vector" ratio="20" rot="MR270">OUT1</text>
<text x="19.9644" y="23.7998" size="1.27" layer="22" font="vector" ratio="20" rot="MR90">OUT2</text>
<text x="10.1346" y="23.749" size="1.27" layer="22" font="vector" ratio="20" rot="MR270">CVIN/</text>
<text x="21.1582" y="23.9014" size="1.27" layer="22" font="vector" ratio="20" rot="MR270">CVIN/</text>
<text x="32.0294" y="28.3464" size="1.27" layer="22" font="vector" ratio="20" rot="MR270">OUT</text>
<text x="32.1564" y="25.019" size="1.27" layer="22" font="vector" ratio="20" rot="MR270">MIDIIN/</text>
<text x="43.0276" y="28.3718" size="1.27" layer="22" font="vector" ratio="20" rot="MR270">OUT</text>
<text x="42.9514" y="24.8666" size="1.27" layer="22" font="vector" ratio="20" rot="MR270">SPDIFIN/</text>
<text x="53.975" y="28.3972" size="1.27" layer="22" font="vector" ratio="20" rot="MR270">OUT</text>
<text x="54.0766" y="25.019" size="1.27" layer="22" font="vector" ratio="20" rot="MR270">LINEIN/</text>
<text x="29.1592" y="8.8392" size="0.8128" layer="21" font="vector" ratio="11">+</text>
<text x="25.8572" y="10.2616" size="0.8128" layer="21" font="vector" ratio="11">+</text>
<text x="21.4884" y="8.8646" size="0.8128" layer="21" font="vector" ratio="11">+</text>
<text x="19.8882" y="14.1732" size="0.8128" layer="21" font="vector" ratio="11">+</text>
<text x="29.464" y="22.3012" size="0.8128" layer="21" font="vector" ratio="11">+</text>
<text x="13.8938" y="17.272" size="0.8128" layer="21" font="vector" ratio="11">+</text>
<text x="17.8054" y="17.3736" size="0.8128" layer="21" font="vector" ratio="11">+</text>
<text x="37.6936" y="10.0584" size="0.8128" layer="21" font="vector" ratio="11">+</text>
<text x="31.3182" y="25.7556" size="0.8128" layer="21" font="vector" ratio="11">+</text>
<text x="49.403" y="12.4714" size="0.8128" layer="21" font="vector" ratio="11">+</text>
<text x="51.4604" y="12.5222" size="0.8128" layer="21" font="vector" ratio="11">+</text>
<text x="37.6428" y="11.0998" size="0.8128" layer="21" font="vector" ratio="11">+</text>
<text x="38.0492" y="5.6388" size="2.032" layer="22" font="vector" ratio="20" rot="MR180">AmyBoard</text>
<text x="34.0614" y="4.6736" size="0.8128" layer="22" font="vector" rot="MR180">V1.0</text>
<rectangle x1="99.8474" y1="5.6388" x2="105.8164" y2="23.5458" layer="20"/>
</plain>
<libraries>
<library name="PCM9211PT">
<packages>
<package name="QFP50P900X900X160-48N">
<text x="-5.66" y="-5.71" size="1.27" layer="27" align="top-left">&gt;VALUE</text>
<text x="-5.66" y="5.71" size="1.27" layer="25">&gt;NAME</text>
<circle x="-5.94" y="2.75" radius="0.1" width="0.2" layer="21"/>
<circle x="-5.94" y="2.75" radius="0.1" width="0.2" layer="51"/>
<wire x1="3.5" y1="-3.5" x2="-3.5" y2="-3.5" width="0.127" layer="51"/>
<wire x1="3.5" y1="3.5" x2="-3.5" y2="3.5" width="0.127" layer="51"/>
<wire x1="3.5" y1="-3.5" x2="3.5" y2="3.5" width="0.127" layer="51"/>
<wire x1="-3.5" y1="-3.5" x2="-3.5" y2="3.5" width="0.127" layer="51"/>
<wire x1="3.5" y1="-3.5" x2="3.21" y2="-3.5" width="0.127" layer="21"/>
<wire x1="3.5" y1="3.5" x2="3.21" y2="3.5" width="0.127" layer="21"/>
<wire x1="-3.5" y1="-3.5" x2="-3.21" y2="-3.5" width="0.127" layer="21"/>
<wire x1="-3.5" y1="3.5" x2="-3.21" y2="3.5" width="0.127" layer="21"/>
<wire x1="3.5" y1="-3.5" x2="3.5" y2="-3.21" width="0.127" layer="21"/>
<wire x1="3.5" y1="3.5" x2="3.5" y2="3.21" width="0.127" layer="21"/>
<wire x1="-3.5" y1="-3.5" x2="-3.5" y2="-3.21" width="0.127" layer="21"/>
<wire x1="-3.5" y1="3.5" x2="-3.5" y2="3.21" width="0.127" layer="21"/>
<wire x1="-5.21" y1="-5.21" x2="5.21" y2="-5.21" width="0.05" layer="39"/>
<wire x1="-5.21" y1="5.21" x2="5.21" y2="5.21" width="0.05" layer="39"/>
<wire x1="-5.21" y1="-5.21" x2="-5.21" y2="5.21" width="0.05" layer="39"/>
<wire x1="5.21" y1="-5.21" x2="5.21" y2="5.21" width="0.05" layer="39"/>
<smd name="13" x="-2.75" y="-4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="14" x="-2.25" y="-4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="15" x="-1.75" y="-4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="16" x="-1.25" y="-4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="17" x="-0.75" y="-4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="18" x="-0.25" y="-4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="19" x="0.25" y="-4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="20" x="0.75" y="-4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="21" x="1.25" y="-4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="22" x="1.75" y="-4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="23" x="2.25" y="-4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="24" x="2.75" y="-4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="37" x="2.75" y="4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="38" x="2.25" y="4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="39" x="1.75" y="4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="40" x="1.25" y="4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="41" x="0.75" y="4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="42" x="0.25" y="4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="43" x="-0.25" y="4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="44" x="-0.75" y="4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="45" x="-1.25" y="4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="46" x="-1.75" y="4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="47" x="-2.25" y="4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="48" x="-2.75" y="4.18" dx="0.28" dy="1.56" layer="1" roundness="25"/>
<smd name="1" x="-4.18" y="2.75" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="2" x="-4.18" y="2.25" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="3" x="-4.18" y="1.75" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="4" x="-4.18" y="1.25" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="5" x="-4.18" y="0.75" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="6" x="-4.18" y="0.25" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="7" x="-4.18" y="-0.25" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="8" x="-4.18" y="-0.75" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="9" x="-4.18" y="-1.25" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="10" x="-4.18" y="-1.75" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="11" x="-4.18" y="-2.25" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="12" x="-4.18" y="-2.75" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="25" x="4.18" y="-2.75" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="26" x="4.18" y="-2.25" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="27" x="4.18" y="-1.75" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="28" x="4.18" y="-1.25" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="29" x="4.18" y="-0.75" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="30" x="4.18" y="-0.25" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="31" x="4.18" y="0.25" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="32" x="4.18" y="0.75" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="33" x="4.18" y="1.25" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="34" x="4.18" y="1.75" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="35" x="4.18" y="2.25" dx="1.56" dy="0.28" layer="1" roundness="25"/>
<smd name="36" x="4.18" y="2.75" dx="1.56" dy="0.28" layer="1" roundness="25"/>
</package>
</packages>
</library>
<library name="pcm5101apw">
<packages>
<package name="PW20_TEX">
<smd name="1" x="-2.921" y="2.925" dx="1.4732" dy="0.3556" layer="1"/>
<smd name="2" x="-2.921" y="2.275" dx="1.4732" dy="0.3556" layer="1"/>
<smd name="3" x="-2.921" y="1.625" dx="1.4732" dy="0.3556" layer="1"/>
<smd name="4" x="-2.921" y="0.975" dx="1.4732" dy="0.3556" layer="1"/>
<smd name="5" x="-2.921" y="0.325" dx="1.4732" dy="0.3556" layer="1"/>
<smd name="6" x="-2.921" y="-0.324996875" dx="1.4732" dy="0.3556" layer="1"/>
<smd name="7" x="-2.921" y="-0.975" dx="1.4732" dy="0.3556" layer="1"/>
<smd name="8" x="-2.921" y="-1.624996875" dx="1.4732" dy="0.3556" layer="1"/>
<smd name="9" x="-2.921" y="-2.275" dx="1.4732" dy="0.3556" layer="1"/>
<smd name="10" x="-2.921" y="-2.924996875" dx="1.4732" dy="0.3556" layer="1"/>
<smd name="11" x="2.921" y="-2.925" dx="1.4732" dy="0.3556" layer="1"/>
<smd name="12" x="2.921" y="-2.275003125" dx="1.4732" dy="0.3556" layer="1"/>
<smd name="13" x="2.921" y="-1.625" dx="1.4732" dy="0.3556" layer="1"/>
<smd name="14" x="2.921" y="-0.975003125" dx="1.4732" dy="0.3556" layer="1"/>
<smd name="15" x="2.921" y="-0.325" dx="1.4732" dy="0.3556" layer="1"/>
<smd name="16" x="2.921" y="0.324996875" dx="1.4732" dy="0.3556" layer="1"/>
<smd name="17" x="2.921" y="0.975" dx="1.4732" dy="0.3556" layer="1"/>
<smd name="18" x="2.921" y="1.624996875" dx="1.4732" dy="0.3556" layer="1"/>
<smd name="19" x="2.921" y="2.275" dx="1.4732" dy="0.3556" layer="1"/>
<smd name="20" x="2.921" y="2.924996875" dx="1.4732" dy="0.3556" layer="1"/>
<wire x1="-2.1082" y1="-3.429" x2="2.1082" y2="-3.429" width="0.1524" layer="21"/>
<wire x1="2.1082" y1="3.429" x2="-2.1082" y2="3.429" width="0.1524" layer="21"/>
<polygon width="0.0254" layer="21">
<vertex x="-4.1656" y="-2.734496875"/>
<vertex x="-4.1656" y="-3.115496875"/>
<vertex x="-3.9116" y="-3.115496875"/>
<vertex x="-3.9116" y="-2.734496875"/>
</polygon>
<polygon width="0.0254" layer="21">
<vertex x="4.1656" y="3.115496875"/>
<vertex x="4.1656" y="2.734496875"/>
<vertex x="3.9116" y="2.734496875"/>
<vertex x="3.9116" y="3.115496875"/>
</polygon>
<text x="-3.7592" y="3.1496" size="1.27" layer="21" ratio="6" rot="SR0">*</text>
<text x="-1.7272" y="-0.635" size="1.27" layer="21" ratio="6" rot="SR0">&gt;Value</text>
<wire x1="-2.2352" y1="2.7686" x2="-2.2352" y2="3.0734" width="0.1524" layer="51"/>
<wire x1="-2.2352" y1="3.0734" x2="-3.302" y2="3.0734" width="0.1524" layer="51"/>
<wire x1="-3.302" y1="3.0734" x2="-3.302" y2="2.7686" width="0.1524" layer="51"/>
<wire x1="-3.302" y1="2.7686" x2="-2.2352" y2="2.7686" width="0.1524" layer="51"/>
<wire x1="-2.2352" y1="2.1336" x2="-2.2352" y2="2.4384" width="0.1524" layer="51"/>
<wire x1="-2.2352" y1="2.4384" x2="-3.302" y2="2.4384" width="0.1524" layer="51"/>
<wire x1="-3.302" y1="2.4384" x2="-3.302" y2="2.1336" width="0.1524" layer="51"/>
<wire x1="-3.302" y1="2.1336" x2="-2.2352" y2="2.1336" width="0.1524" layer="51"/>
<wire x1="-2.2352" y1="1.4732" x2="-2.2352" y2="1.778" width="0.1524" layer="51"/>
<wire x1="-2.2352" y1="1.778" x2="-3.302" y2="1.778" width="0.1524" layer="51"/>
<wire x1="-3.302" y1="1.778" x2="-3.302" y2="1.4732" width="0.1524" layer="51"/>
<wire x1="-3.302" y1="1.4732" x2="-2.2352" y2="1.4732" width="0.1524" layer="51"/>
<wire x1="-2.2352" y1="0.8128" x2="-2.2352" y2="1.1176" width="0.1524" layer="51"/>
<wire x1="-2.2352" y1="1.1176" x2="-3.302" y2="1.1176" width="0.1524" layer="51"/>
<wire x1="-3.302" y1="1.1176" x2="-3.302" y2="0.8128" width="0.1524" layer="51"/>
<wire x1="-3.302" y1="0.8128" x2="-2.2352" y2="0.8128" width="0.1524" layer="51"/>
<wire x1="-2.2352" y1="0.1778" x2="-2.2352" y2="0.4826" width="0.1524" layer="51"/>
<wire x1="-2.2352" y1="0.4826" x2="-3.302" y2="0.4826" width="0.1524" layer="51"/>
<wire x1="-3.302" y1="0.4826" x2="-3.302" y2="0.1778" width="0.1524" layer="51"/>
<wire x1="-3.302" y1="0.1778" x2="-2.2352" y2="0.1778" width="0.1524" layer="51"/>
<wire x1="-2.2352" y1="-0.4826" x2="-2.2352" y2="-0.1778" width="0.1524" layer="51"/>
<wire x1="-2.2352" y1="-0.1778" x2="-3.302" y2="-0.1778" width="0.1524" layer="51"/>
<wire x1="-3.302" y1="-0.1778" x2="-3.302" y2="-0.4826" width="0.1524" layer="51"/>
<wire x1="-3.302" y1="-0.4826" x2="-2.2352" y2="-0.4826" width="0.1524" layer="51"/>
<wire x1="-2.2352" y1="-1.1176" x2="-2.2352" y2="-0.8128" width="0.1524" layer="51"/>
<wire x1="-2.2352" y1="-0.8128" x2="-3.302" y2="-0.8128" width="0.1524" layer="51"/>
<wire x1="-3.302" y1="-0.8128" x2="-3.302" y2="-1.1176" width="0.1524" layer="51"/>
<wire x1="-3.302" y1="-1.1176" x2="-2.2352" y2="-1.1176" width="0.1524" layer="51"/>
<wire x1="-2.2352" y1="-1.778" x2="-2.2352" y2="-1.4732" width="0.1524" layer="51"/>
<wire x1="-2.2352" y1="-1.4732" x2="-3.302" y2="-1.4732" width="0.1524" layer="51"/>
<wire x1="-3.302" y1="-1.4732" x2="-3.302" y2="-1.778" width="0.1524" layer="51"/>
<wire x1="-3.302" y1="-1.778" x2="-2.2352" y2="-1.778" width="0.1524" layer="51"/>
<wire x1="-2.2352" y1="-2.4384" x2="-2.2352" y2="-2.1336" width="0.1524" layer="51"/>
<wire x1="-2.2352" y1="-2.1336" x2="-3.302" y2="-2.1336" width="0.1524" layer="51"/>
<wire x1="-3.302" y1="-2.1336" x2="-3.302" y2="-2.4384" width="0.1524" layer="51"/>
<wire x1="-3.302" y1="-2.4384" x2="-2.2352" y2="-2.4384" width="0.1524" layer="51"/>
<wire x1="-2.2352" y1="-3.0734" x2="-2.2352" y2="-2.7686" width="0.1524" layer="51"/>
<wire x1="-2.2352" y1="-2.7686" x2="-3.302" y2="-2.7686" width="0.1524" layer="51"/>
<wire x1="-3.302" y1="-2.7686" x2="-3.302" y2="-3.0734" width="0.1524" layer="51"/>
<wire x1="-3.302" y1="-3.0734" x2="-2.2352" y2="-3.0734" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="-2.7686" x2="2.2352" y2="-3.0734" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="-3.0734" x2="3.302" y2="-3.0734" width="0.1524" layer="51"/>
<wire x1="3.302" y1="-3.0734" x2="3.302" y2="-2.7686" width="0.1524" layer="51"/>
<wire x1="3.302" y1="-2.7686" x2="2.2352" y2="-2.7686" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="-2.1336" x2="2.2352" y2="-2.4384" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="-2.4384" x2="3.302" y2="-2.4384" width="0.1524" layer="51"/>
<wire x1="3.302" y1="-2.4384" x2="3.302" y2="-2.1336" width="0.1524" layer="51"/>
<wire x1="3.302" y1="-2.1336" x2="2.2352" y2="-2.1336" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="-1.4732" x2="2.2352" y2="-1.778" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="-1.778" x2="3.302" y2="-1.778" width="0.1524" layer="51"/>
<wire x1="3.302" y1="-1.778" x2="3.302" y2="-1.4732" width="0.1524" layer="51"/>
<wire x1="3.302" y1="-1.4732" x2="2.2352" y2="-1.4732" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="-0.8128" x2="2.2352" y2="-1.1176" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="-1.1176" x2="3.302" y2="-1.1176" width="0.1524" layer="51"/>
<wire x1="3.302" y1="-1.1176" x2="3.302" y2="-0.8128" width="0.1524" layer="51"/>
<wire x1="3.302" y1="-0.8128" x2="2.2352" y2="-0.8128" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="-0.1778" x2="2.2352" y2="-0.4826" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="-0.4826" x2="3.302" y2="-0.4826" width="0.1524" layer="51"/>
<wire x1="3.302" y1="-0.4826" x2="3.302" y2="-0.1778" width="0.1524" layer="51"/>
<wire x1="3.302" y1="-0.1778" x2="2.2352" y2="-0.1778" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="0.4826" x2="2.2352" y2="0.1778" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="0.1778" x2="3.302" y2="0.1778" width="0.1524" layer="51"/>
<wire x1="3.302" y1="0.1778" x2="3.302" y2="0.4826" width="0.1524" layer="51"/>
<wire x1="3.302" y1="0.4826" x2="2.2352" y2="0.4826" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="1.1176" x2="2.2352" y2="0.8128" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="0.8128" x2="3.302" y2="0.8128" width="0.1524" layer="51"/>
<wire x1="3.302" y1="0.8128" x2="3.302" y2="1.1176" width="0.1524" layer="51"/>
<wire x1="3.302" y1="1.1176" x2="2.2352" y2="1.1176" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="1.778" x2="2.2352" y2="1.4732" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="1.4732" x2="3.302" y2="1.4732" width="0.1524" layer="51"/>
<wire x1="3.302" y1="1.4732" x2="3.302" y2="1.778" width="0.1524" layer="51"/>
<wire x1="3.302" y1="1.778" x2="2.2352" y2="1.778" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="2.4384" x2="2.2352" y2="2.1336" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="2.1336" x2="3.302" y2="2.1336" width="0.1524" layer="51"/>
<wire x1="3.302" y1="2.1336" x2="3.302" y2="2.4384" width="0.1524" layer="51"/>
<wire x1="3.302" y1="2.4384" x2="2.2352" y2="2.4384" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="3.0734" x2="2.2352" y2="2.7686" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="2.7686" x2="3.302" y2="2.7686" width="0.1524" layer="51"/>
<wire x1="3.302" y1="2.7686" x2="3.302" y2="3.0734" width="0.1524" layer="51"/>
<wire x1="3.302" y1="3.0734" x2="2.2352" y2="3.0734" width="0.1524" layer="51"/>
<wire x1="-2.2352" y1="-3.302" x2="2.2352" y2="-3.302" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="-3.302" x2="2.2352" y2="3.302" width="0.1524" layer="51"/>
<wire x1="2.2352" y1="3.302" x2="0.3048" y2="3.302" width="0.1524" layer="51"/>
<wire x1="0.3048" y1="3.302" x2="-0.3048" y2="3.302" width="0.1524" layer="51"/>
<wire x1="-0.3048" y1="3.302" x2="-2.2352" y2="3.302" width="0.1524" layer="51"/>
<wire x1="-2.2352" y1="3.302" x2="-2.2352" y2="-3.302" width="0.1524" layer="51"/>
<wire x1="0.3048" y1="3.302" x2="-0.3048" y2="3.302" width="0.1524" layer="51" curve="-180"/>
<text x="-2.4384" y="1.9558" size="1.27" layer="51" ratio="6" rot="SR0">*</text>
<wire x1="-2.2352" y1="0" x2="-2.2352" y2="5.207" width="0.1524" layer="47"/>
<wire x1="-2.2352" y1="5.207" x2="-2.2352" y2="5.588" width="0.1524" layer="47"/>
<wire x1="2.2352" y1="0" x2="2.2352" y2="5.207" width="0.1524" layer="47"/>
<wire x1="2.2352" y1="5.207" x2="2.2352" y2="5.588" width="0.1524" layer="47"/>
<wire x1="-2.2352" y1="5.207" x2="2.2352" y2="5.207" width="0.1524" layer="47"/>
<wire x1="-2.2352" y1="5.207" x2="-1.9812" y2="5.334" width="0.1524" layer="47"/>
<wire x1="-2.2352" y1="5.207" x2="-1.9812" y2="5.08" width="0.1524" layer="47"/>
<wire x1="-1.9812" y1="5.334" x2="-1.9812" y2="5.08" width="0.1524" layer="47"/>
<wire x1="2.2352" y1="5.207" x2="1.9812" y2="5.334" width="0.1524" layer="47"/>
<wire x1="2.2352" y1="5.207" x2="1.9812" y2="5.08" width="0.1524" layer="47"/>
<wire x1="1.9812" y1="5.334" x2="1.9812" y2="5.08" width="0.1524" layer="47"/>
<wire x1="-3.302" y1="-5.588" x2="-3.302" y2="-5.207" width="0.1524" layer="47"/>
<wire x1="-3.302" y1="-5.207" x2="-3.302" y2="7.112" width="0.1524" layer="47"/>
<wire x1="-3.302" y1="7.112" x2="-3.302" y2="7.493" width="0.1524" layer="47"/>
<wire x1="3.302" y1="0" x2="3.302" y2="7.112" width="0.1524" layer="47"/>
<wire x1="3.302" y1="7.112" x2="3.302" y2="7.493" width="0.1524" layer="47"/>
<wire x1="-3.302" y1="7.112" x2="3.302" y2="7.112" width="0.1524" layer="47"/>
<wire x1="-3.302" y1="7.112" x2="-3.048" y2="7.239" width="0.1524" layer="47"/>
<wire x1="-3.302" y1="7.112" x2="-3.048" y2="6.985" width="0.1524" layer="47"/>
<wire x1="-3.048" y1="7.239" x2="-3.048" y2="6.985" width="0.1524" layer="47"/>
<wire x1="3.302" y1="7.112" x2="3.048" y2="7.239" width="0.1524" layer="47"/>
<wire x1="3.302" y1="7.112" x2="3.048" y2="6.985" width="0.1524" layer="47"/>
<wire x1="3.048" y1="7.239" x2="3.048" y2="6.985" width="0.1524" layer="47"/>
<wire x1="0" y1="3.302" x2="4.7752" y2="3.302" width="0.1524" layer="47"/>
<wire x1="4.7752" y1="3.302" x2="5.1816" y2="3.302" width="0.1524" layer="47"/>
<wire x1="0" y1="-3.302" x2="4.7752" y2="-3.302" width="0.1524" layer="47"/>
<wire x1="4.7752" y1="-3.302" x2="5.1816" y2="-3.302" width="0.1524" layer="47"/>
<wire x1="4.7752" y1="3.302" x2="4.7752" y2="-3.302" width="0.1524" layer="47"/>
<wire x1="4.7752" y1="3.302" x2="4.6736" y2="3.048" width="0.1524" layer="47"/>
<wire x1="4.7752" y1="3.302" x2="4.9276" y2="3.048" width="0.1524" layer="47"/>
<wire x1="4.6736" y1="3.048" x2="4.9276" y2="3.048" width="0.1524" layer="47"/>
<wire x1="4.7752" y1="-3.302" x2="4.6736" y2="-3.048" width="0.1524" layer="47"/>
<wire x1="4.7752" y1="-3.302" x2="4.9276" y2="-3.048" width="0.1524" layer="47"/>
<wire x1="4.6736" y1="-3.048" x2="4.9276" y2="-3.048" width="0.1524" layer="47"/>
<wire x1="-2.921" y1="2.921" x2="-5.461" y2="2.921" width="0.1524" layer="47"/>
<wire x1="-5.461" y1="2.921" x2="-5.842" y2="2.921" width="0.1524" layer="47"/>
<wire x1="-2.921" y1="2.286" x2="-5.461" y2="2.286" width="0.1524" layer="47"/>
<wire x1="-5.461" y1="2.286" x2="-5.842" y2="2.286" width="0.1524" layer="47"/>
<wire x1="-5.461" y1="2.921" x2="-5.461" y2="4.191" width="0.1524" layer="47"/>
<wire x1="-5.461" y1="2.286" x2="-5.461" y2="1.016" width="0.1524" layer="47"/>
<wire x1="-5.461" y1="2.921" x2="-5.588" y2="3.175" width="0.1524" layer="47"/>
<wire x1="-5.461" y1="2.921" x2="-5.334" y2="3.175" width="0.1524" layer="47"/>
<wire x1="-5.588" y1="3.175" x2="-5.334" y2="3.175" width="0.1524" layer="47"/>
<wire x1="-5.461" y1="2.286" x2="-5.588" y2="2.032" width="0.1524" layer="47"/>
<wire x1="-5.461" y1="2.286" x2="-5.334" y2="2.032" width="0.1524" layer="47"/>
<wire x1="-5.588" y1="2.032" x2="-5.334" y2="2.032" width="0.1524" layer="47"/>
<wire x1="-2.54" y1="0" x2="-2.54" y2="-5.207" width="0.1524" layer="47"/>
<wire x1="-2.54" y1="-5.207" x2="-2.54" y2="-5.588" width="0.1524" layer="47"/>
<wire x1="-3.302" y1="-5.207" x2="-4.572" y2="-5.207" width="0.1524" layer="47"/>
<wire x1="-2.54" y1="-5.207" x2="-1.27" y2="-5.207" width="0.1524" layer="47"/>
<wire x1="-3.302" y1="-5.207" x2="-3.556" y2="-5.08" width="0.1524" layer="47"/>
<wire x1="-3.302" y1="-5.207" x2="-3.556" y2="-5.334" width="0.1524" layer="47"/>
<wire x1="-3.556" y1="-5.08" x2="-3.556" y2="-5.334" width="0.1524" layer="47"/>
<wire x1="-2.54" y1="-5.207" x2="-2.286" y2="-5.08" width="0.1524" layer="47"/>
<wire x1="-2.54" y1="-5.207" x2="-2.286" y2="-5.334" width="0.1524" layer="47"/>
<wire x1="-2.286" y1="-5.08" x2="-2.286" y2="-5.334" width="0.1524" layer="47"/>
<text x="-15.2146" y="-8.382" size="1.27" layer="47" ratio="6" rot="SR0">Default Padstyle: RX58Y14D0T</text>
<text x="-15.5702" y="-9.906" size="1.27" layer="47" ratio="6" rot="SR0">Pin One Padstyle: RX58Y14D0T</text>
<text x="-14.8082" y="-14.478" size="1.27" layer="47" ratio="6" rot="SR0">Alt 1 Padstyle: OX60Y90D30P</text>
<text x="-14.8082" y="-16.002" size="1.27" layer="47" ratio="6" rot="SR0">Alt 2 Padstyle: OX90Y60D30P</text>
<text x="-4.0386" y="5.715" size="0.635" layer="47" ratio="4" rot="SR0">0.177in/4.496mm</text>
<text x="-3.7592" y="7.62" size="0.635" layer="47" ratio="4" rot="SR0">0.26in/6.604mm</text>
<text x="5.2832" y="-0.3048" size="0.635" layer="47" ratio="4" rot="SR0">0.26in/6.604mm</text>
<text x="-13.4874" y="2.286" size="0.635" layer="47" ratio="4" rot="SR0">0.026in/0.65mm</text>
<text x="-6.6802" y="-6.35" size="0.635" layer="47" ratio="4" rot="SR0">0.03in/0.762mm</text>
<text x="-3.2766" y="-0.635" size="1.27" layer="27" ratio="6" rot="SR0">&gt;Name</text>
</package>
</packages>
</library>
<library name="A9G">
<description>Generated from &lt;b&gt;Maduino Zero A9G v1.0.sch&lt;/b&gt;&lt;p&gt;
by exp-project-lbr.ulp</description>
<packages>
<package name="DISCRETE_R0603">
<wire x1="-1.397" y1="0.635" x2="1.397" y2="0.635" width="0.127" layer="21"/>
<wire x1="1.397" y1="0.635" x2="1.397" y2="-0.635" width="0.127" layer="21"/>
<wire x1="1.397" y1="-0.635" x2="-1.397" y2="-0.635" width="0.127" layer="21"/>
<wire x1="-1.397" y1="-0.635" x2="-1.397" y2="0.635" width="0.127" layer="21"/>
<smd name="1" x="-0.762" y="0" dx="0.889" dy="0.889" layer="1" roundness="25"/>
<smd name="2" x="0.762" y="0" dx="0.889" dy="0.889" layer="1" roundness="25"/>
<text x="-1.397" y="0.762" size="0.635" layer="25" ratio="10">&gt;name</text>
<text x="-1.651" y="-1.4605" size="0.635" layer="27" ratio="10">&gt;value</text>
</package>
<package name="DISCRETE_C0603">
<description>&lt;b&gt;0603&lt;b&gt;&lt;p&gt;</description>
<wire x1="-1.397" y1="0.635" x2="1.397" y2="0.635" width="0.127" layer="21"/>
<wire x1="1.397" y1="0.635" x2="1.397" y2="-0.635" width="0.127" layer="21"/>
<wire x1="1.397" y1="-0.635" x2="-1.397" y2="-0.635" width="0.127" layer="21"/>
<wire x1="-1.397" y1="-0.635" x2="-1.397" y2="0.635" width="0.127" layer="21"/>
<rectangle x1="-1.27" y1="-0.508" x2="1.27" y2="0.508" layer="39"/>
<smd name="1" x="-0.762" y="0" dx="0.889" dy="0.889" layer="1" roundness="25"/>
<smd name="2" x="0.762" y="0" dx="0.889" dy="0.889" layer="1" roundness="25"/>
<text x="-1.397" y="0.762" size="0.889" layer="25" ratio="11">&gt;name</text>
<text x="-1.27" y="-0.1905" size="0.381" layer="27" ratio="12">&gt;value</text>
<text x="-1.27" y="-0.254" size="0.635" layer="33" ratio="10">&gt;name</text>
</package>
<package name="DISCRETE_C0402">
<description>&lt;b&gt;0402&lt;b&gt;&lt;p&gt;</description>
<wire x1="-0.762" y1="-0.4445" x2="-0.889" y2="-0.3175" width="0.0762" layer="21" curve="-90"/>
<wire x1="-0.889" y1="-0.3175" x2="-0.889" y2="0.3175" width="0.0762" layer="21"/>
<wire x1="-0.889" y1="0.3175" x2="-0.762" y2="0.4445" width="0.0762" layer="21" curve="-90"/>
<wire x1="-0.762" y1="0.4445" x2="0.762" y2="0.4445" width="0.0762" layer="21"/>
<wire x1="0.762" y1="0.4445" x2="0.889" y2="0.3175" width="0.0762" layer="21" curve="-90"/>
<wire x1="0.889" y1="0.3175" x2="0.889" y2="-0.3175" width="0.0762" layer="21"/>
<wire x1="0.889" y1="-0.3175" x2="0.762" y2="-0.4445" width="0.0762" layer="21" curve="-90"/>
<wire x1="0.762" y1="-0.4445" x2="-0.762" y2="-0.4445" width="0.0762" layer="21"/>
<smd name="1" x="-0.4445" y="0" dx="0.635" dy="0.635" layer="1" roundness="50"/>
<smd name="2" x="0.4445" y="0" dx="0.635" dy="0.635" layer="1" roundness="50"/>
<text x="-1.27" y="0.635" size="0.635" layer="25" ratio="10">&gt;NAME</text>
<text x="-1.016" y="-0.254" size="0.4064" layer="27" font="vector" ratio="10">&gt;VALUE</text>
<polygon width="0.0254" layer="51">
<vertex x="-0.508" y="0.254"/>
<vertex x="0.508" y="0.254"/>
<vertex x="0.508" y="-0.254"/>
<vertex x="-0.508" y="-0.254"/>
</polygon>
</package>
<package name="DISCRETE_R0402">
<wire x1="-0.762" y1="-0.4445" x2="-0.889" y2="-0.3175" width="0.0762" layer="21" curve="-90"/>
<wire x1="-0.889" y1="-0.3175" x2="-0.889" y2="0.3175" width="0.0762" layer="21"/>
<wire x1="-0.889" y1="0.3175" x2="-0.762" y2="0.4445" width="0.0762" layer="21" curve="-90"/>
<wire x1="-0.762" y1="0.4445" x2="0.762" y2="0.4445" width="0.0762" layer="21"/>
<wire x1="0.762" y1="0.4445" x2="0.889" y2="0.3175" width="0.0762" layer="21" curve="-90"/>
<wire x1="0.889" y1="0.3175" x2="0.889" y2="-0.3175" width="0.0762" layer="21"/>
<wire x1="0.889" y1="-0.3175" x2="0.762" y2="-0.4445" width="0.0762" layer="21" curve="-90"/>
<wire x1="0.762" y1="-0.4445" x2="-0.762" y2="-0.4445" width="0.0762" layer="21"/>
<smd name="1" x="-0.4445" y="0" dx="0.635" dy="0.635" layer="1" roundness="50"/>
<smd name="2" x="0.4445" y="0" dx="0.635" dy="0.635" layer="1" roundness="50"/>
<text x="-1.27" y="0.635" size="0.635" layer="25" ratio="10">&gt;NAME</text>
<text x="-1.27" y="-1.27" size="0.635" layer="27" font="vector" ratio="10">&gt;VALUE</text>
</package>
</packages>
</library>
<library name="self">
<packages>
<package name="ESP32-­S2-­SOLO">
<wire x1="-9" y1="12.75" x2="9" y2="12.75" width="0.127" layer="21"/>
<wire x1="9" y1="12.75" x2="9" y2="-12.75" width="0.127" layer="21"/>
<wire x1="9" y1="-12.75" x2="-9" y2="-12.75" width="0.127" layer="21"/>
<wire x1="-9" y1="-12.75" x2="-9" y2="12.75" width="0.127" layer="21"/>
<wire x1="-8.89" y1="6.75" x2="8.89" y2="6.75" width="0.127" layer="21"/>
<smd name="1" x="-8.75" y="5.26" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="2" x="-8.75" y="3.99" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="3" x="-8.75" y="2.72" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="4" x="-8.75" y="1.45" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="5" x="-8.75" y="0.18" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="6" x="-8.75" y="-1.09" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="7" x="-8.75" y="-2.36" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="8" x="-8.75" y="-3.63" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="9" x="-8.75" y="-4.9" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="10" x="-8.75" y="-6.17" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="11" x="-8.75" y="-7.44" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="12" x="-8.75" y="-8.71" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="13" x="-8.75" y="-9.98" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="14" x="-8.75" y="-11.25" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="15" x="-6.985" y="-12.5" dx="1.5" dy="0.9" layer="1" roundness="10" rot="R90"/>
<smd name="16" x="-5.715" y="-12.5" dx="1.5" dy="0.9" layer="1" roundness="10" rot="R90"/>
<smd name="17" x="-4.445" y="-12.5" dx="1.5" dy="0.9" layer="1" roundness="10" rot="R90"/>
<smd name="18" x="-3.175" y="-12.5" dx="1.5" dy="0.9" layer="1" roundness="10" rot="R90"/>
<smd name="19" x="-1.905" y="-12.5" dx="1.5" dy="0.9" layer="1" roundness="10" rot="R90"/>
<smd name="20" x="-0.635" y="-12.5" dx="1.5" dy="0.9" layer="1" roundness="10" rot="R90"/>
<smd name="21" x="0.635" y="-12.5" dx="1.5" dy="0.9" layer="1" roundness="10" rot="R90"/>
<smd name="22" x="1.905" y="-12.5" dx="1.5" dy="0.9" layer="1" roundness="10" rot="R90"/>
<smd name="23" x="3.175" y="-12.5" dx="1.5" dy="0.9" layer="1" roundness="10" rot="R90"/>
<smd name="24" x="4.445" y="-12.5" dx="1.5" dy="0.9" layer="1" roundness="10" rot="R90"/>
<smd name="25" x="5.715" y="-12.5" dx="1.5" dy="0.9" layer="1" roundness="10" rot="R90"/>
<smd name="26" x="6.985" y="-12.5" dx="1.5" dy="0.9" layer="1" roundness="10" rot="R90"/>
<smd name="27" x="8.75" y="-11.25" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="28" x="8.75" y="-9.98" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="29" x="8.75" y="-8.71" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="30" x="8.75" y="-7.44" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="31" x="8.75" y="-6.17" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="32" x="8.75" y="-4.9" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="33" x="8.75" y="-3.63" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="34" x="8.75" y="-2.36" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="35" x="8.75" y="-1.09" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="36" x="8.75" y="0.18" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="37" x="8.75" y="1.45" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="38" x="8.75" y="2.72" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="39" x="8.75" y="3.99" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="40" x="8.75" y="5.26" dx="1.5" dy="0.9" layer="1" roundness="10"/>
<smd name="41" x="-1.5" y="-2.46" dx="3.7" dy="3.7" layer="1"/>
<text x="-5.08" y="-15.24" size="1.27" layer="25">&gt;NAME</text>
<text x="-5.08" y="-16.51" size="1.27" layer="27">&gt;VALUE</text>
<text x="-5.08" y="9" size="1.27" layer="21">Antenna Area</text>
</package>
<package name="SOT-23-6">
<smd name="1" x="-1.2" y="0.95" dx="1" dy="0.6" layer="1"/>
<smd name="2" x="-1.2" y="0" dx="1" dy="0.6" layer="1"/>
<smd name="3" x="-1.2" y="-0.95" dx="1" dy="0.6" layer="1"/>
<smd name="4" x="1.2" y="-0.95" dx="1" dy="0.6" layer="1" rot="R180"/>
<smd name="5" x="1.2" y="0" dx="1" dy="0.6" layer="1" rot="R180"/>
<smd name="6" x="1.2" y="0.95" dx="1" dy="0.6" layer="1" rot="R180"/>
<wire x1="-0.8" y1="1.5" x2="0.8" y2="1.5" width="0.127" layer="21"/>
<wire x1="-0.8" y1="-1.5" x2="0.8" y2="-1.5" width="0.127" layer="21"/>
<circle x="-1.2" y="1.5" radius="0.1" width="0.3" layer="21"/>
<text x="-1.27" y="-3.81" size="1.27" layer="25">&gt;NAME</text>
<text x="-1.27" y="-5.08" size="1.27" layer="27">&gt;VALUE</text>
</package>
</packages>
</library>
<library name="microbuilder">
<description>&lt;h2&gt;&lt;b&gt;microBuilder.eu&lt;/b&gt; Eagle Footprint Library&lt;/h2&gt;

&lt;p&gt;Footprints for common components used in our projects and products.  This is the same library that we use internally, and it is regularly updated.  The newest version can always be found at &lt;b&gt;www.microBuilder.eu&lt;/b&gt;.  If you find this library useful, please feel free to purchase something from our online store. Please also note that all holes are optimised for metric drill bits!&lt;/p&gt;

&lt;h3&gt;Obligatory Warning&lt;/h3&gt;
&lt;p&gt;While it probably goes without saying, there are no guarantees that the footprints or schematic symbols in this library are flawless, and we make no promises of fitness for production, prototyping or any other purpose. These libraries are provided for information puposes only, and are used at your own discretion.  While we make every effort to produce accurate footprints, and many of the items found in this library have be proven in production, we can't make any promises of suitability for a specific purpose. If you do find any errors, though, please feel free to contact us at www.microbuilder.eu to let us know about it so that we can update the library accordingly!&lt;/p&gt;

&lt;h3&gt;License&lt;/h3&gt;
&lt;p&gt;This work is placed in the public domain, and may be freely used for commercial and non-commercial work with the following conditions:&lt;/p&gt;
&lt;p&gt;THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&lt;/p&gt;</description>
<packages>
<package name="SOT363">
<description>&lt;b&gt;Source:&lt;/b&gt; http://www.nxp.com/documents/data_sheet/2N7002PS.pdf</description>
<wire x1="1" y1="0.625" x2="1" y2="-0.625" width="0.2032" layer="51"/>
<wire x1="1" y1="-0.625" x2="-1" y2="-0.625" width="0.2032" layer="51"/>
<wire x1="-1" y1="-0.625" x2="-1" y2="0.625" width="0.2032" layer="51"/>
<wire x1="-1" y1="0.625" x2="1" y2="0.625" width="0.2032" layer="51"/>
<wire x1="-1.1" y1="0.45" x2="-1.1" y2="-0.45" width="0.2032" layer="21"/>
<wire x1="1.1" y1="0.45" x2="1.1" y2="-0.45" width="0.2032" layer="21"/>
<circle x="-1.5" y="-0.35" radius="0.1" width="0.2032" layer="21"/>
<smd name="1" x="-0.75" y="-0.9" dx="0.5" dy="0.5" layer="1"/>
<smd name="2" x="0" y="-0.9" dx="0.4" dy="0.5" layer="1"/>
<smd name="3" x="0.75" y="-0.9" dx="0.5" dy="0.5" layer="1"/>
<smd name="4" x="0.75" y="0.9" dx="0.5" dy="0.5" layer="1"/>
<smd name="5" x="0" y="0.9" dx="0.4" dy="0.5" layer="1"/>
<smd name="6" x="-0.75" y="0.9" dx="0.5" dy="0.5" layer="1"/>
<text x="1.651" y="0.127" size="0.8128" layer="25" ratio="18">&gt;NAME</text>
<text x="1.651" y="-0.508" size="0.4064" layer="27" ratio="10">&gt;VALUE</text>
<rectangle x1="-0.125" y1="-1.05" x2="0.125" y2="-0.7" layer="51"/>
<rectangle x1="-0.775" y1="-1.05" x2="-0.525" y2="-0.7" layer="51"/>
<rectangle x1="0.525" y1="-1.05" x2="0.775" y2="-0.7" layer="51"/>
<rectangle x1="-0.775" y1="0.7" x2="-0.525" y2="1.05" layer="51"/>
<rectangle x1="-0.125" y1="0.7" x2="0.125" y2="1.05" layer="51"/>
<rectangle x1="0.525" y1="0.7" x2="0.775" y2="1.05" layer="51"/>
</package>
</packages>
</library>
<library name="Discrete">
<packages>
<package name="SOT23">
<description>&lt;b&gt;SOT23&lt;/b&gt;</description>
<wire x1="-0.1905" y1="-0.635" x2="0.1905" y2="-0.635" width="0.127" layer="21"/>
<wire x1="1.4605" y1="-0.254" x2="1.4605" y2="0.635" width="0.127" layer="21"/>
<wire x1="1.4605" y1="0.635" x2="0.6985" y2="0.635" width="0.127" layer="21"/>
<wire x1="-0.6985" y1="0.635" x2="-1.4605" y2="0.635" width="0.127" layer="21"/>
<wire x1="-1.4605" y1="0.635" x2="-1.4605" y2="-0.254" width="0.127" layer="21"/>
<smd name="3" x="0" y="1.016" dx="1.016" dy="1.143" layer="1"/>
<smd name="2" x="0.95" y="-1.016" dx="1.016" dy="1.143" layer="1"/>
<smd name="1" x="-0.95" y="-1.016" dx="1.016" dy="1.143" layer="1" rot="R180"/>
<text x="-1.651" y="1.778" size="1.016" layer="25" ratio="12">&gt;name</text>
<text x="-2.032" y="-2.54" size="1.016" layer="27" ratio="12">&gt;value</text>
<text x="-1.27" y="0" size="0.635" layer="33" ratio="10">&gt;name</text>
<rectangle x1="-0.2286" y1="0.7112" x2="0.2286" y2="1.2954" layer="51"/>
<rectangle x1="0.7112" y1="-1.2954" x2="1.1684" y2="-0.7112" layer="51"/>
<rectangle x1="-1.1684" y1="-1.2954" x2="-0.7112" y2="-0.7112" layer="51"/>
<rectangle x1="-1.397" y1="-1.651" x2="1.397" y2="0.635" layer="39"/>
</package>
<package name="0603">
<description>&lt;b&gt;0603&lt;b&gt;&lt;p&gt;</description>
<wire x1="-1.397" y1="0.635" x2="1.397" y2="0.635" width="0.127" layer="21"/>
<wire x1="1.397" y1="0.635" x2="1.397" y2="-0.635" width="0.127" layer="21"/>
<wire x1="1.397" y1="-0.635" x2="-1.397" y2="-0.635" width="0.127" layer="21"/>
<wire x1="-1.397" y1="-0.635" x2="-1.397" y2="0.635" width="0.127" layer="21"/>
<smd name="1" x="-0.762" y="0" dx="0.889" dy="0.889" layer="1" roundness="25"/>
<smd name="2" x="0.762" y="0" dx="0.889" dy="0.889" layer="1" roundness="25"/>
<text x="-1.27" y="1.016" size="1.016" layer="25" ratio="12">&gt;name</text>
<text x="-1.27" y="-1.8415" size="1.016" layer="27" ratio="12">&gt;value</text>
<text x="-1.27" y="-0.254" size="0.635" layer="33" ratio="10">&gt;name</text>
<rectangle x1="-1.27" y1="-0.508" x2="1.27" y2="0.508" layer="39"/>
</package>
<package name="SOD323">
<description>&lt;b&gt;0805&lt;b&gt;&lt;p&gt;</description>
<wire x1="0.85" y1="0.625" x2="0.85" y2="-0.625" width="0.127" layer="21"/>
<wire x1="0.85" y1="-0.625" x2="-0.85" y2="-0.625" width="0.127" layer="21"/>
<wire x1="-0.85" y1="-0.625" x2="-0.85" y2="0.625" width="0.127" layer="21"/>
<wire x1="-0.85" y1="0.625" x2="0.85" y2="0.625" width="0.127" layer="21"/>
<wire x1="-0.14" y1="0.381" x2="-0.14" y2="-0.381" width="0.127" layer="21"/>
<wire x1="-0.127" y1="0.381" x2="0.254" y2="0" width="0.127" layer="21"/>
<wire x1="0.254" y1="0" x2="-0.127" y2="-0.381" width="0.127" layer="21"/>
<smd name="+" x="-1.2" y="0" dx="1" dy="0.8" layer="1" roundness="25"/>
<smd name="-" x="1.2" y="0" dx="1" dy="0.8" layer="1" roundness="25"/>
<text x="-1.778" y="0.762" size="0.8128" layer="25" font="vector" ratio="10">&gt;NAME</text>
<text x="-2.032" y="-1.7145" size="0.8128" layer="27" ratio="10">&gt;VALUE</text>
<text x="-1.27" y="-0.635" size="0.635" layer="33" font="vector" ratio="10">&gt;NAME</text>
<polygon width="0.127" layer="21">
<vertex x="-0.127" y="-0.381"/>
<vertex x="-0.127" y="0.381"/>
<vertex x="0.254" y="0"/>
</polygon>
</package>
</packages>
</library>
<library name="IC">
<packages>
<package name="SOT23-5">
<description>&lt;b&gt;Small Outline Transistor&lt;/b&gt;</description>
<wire x1="1.45" y1="0.8104" x2="1.45" y2="-0.8104" width="0.1524" layer="21"/>
<wire x1="1.4224" y1="-0.8104" x2="-1.4224" y2="-0.8104" width="0.1524" layer="51"/>
<wire x1="-1.45" y1="-0.8104" x2="-1.45" y2="0.8104" width="0.1524" layer="21"/>
<wire x1="-1.4224" y1="0.8104" x2="1.4224" y2="0.8104" width="0.1524" layer="51"/>
<wire x1="-0.5224" y1="0.8104" x2="0.5224" y2="0.8104" width="0.1524" layer="21"/>
<wire x1="-0.4276" y1="-0.8104" x2="-0.5224" y2="-0.8104" width="0.1524" layer="21"/>
<wire x1="0.5224" y1="-0.8104" x2="0.4276" y2="-0.8104" width="0.1524" layer="21"/>
<wire x1="-1.3276" y1="-0.8104" x2="-1.45" y2="-0.8104" width="0.1524" layer="21"/>
<wire x1="1.45" y1="-0.8104" x2="1.3276" y2="-0.8104" width="0.1524" layer="21"/>
<wire x1="1.3276" y1="0.8104" x2="1.45" y2="0.8104" width="0.1524" layer="21"/>
<wire x1="-1.45" y1="0.8104" x2="-1.3276" y2="0.8104" width="0.1524" layer="21"/>
<smd name="1" x="-0.95" y="-1.3001" dx="0.69" dy="1.2" layer="1"/>
<smd name="2" x="0" y="-1.3001" dx="0.69" dy="1.2" layer="1"/>
<smd name="3" x="0.95" y="-1.3001" dx="0.69" dy="1.2" layer="1"/>
<smd name="4" x="0.95" y="1.3001" dx="0.69" dy="1.2" layer="1"/>
<smd name="5" x="-0.95" y="1.3001" dx="0.69" dy="1.2" layer="1"/>
<text x="-1.651" y="-1.778" size="0.8128" layer="25" ratio="10" rot="R90">&gt;NAME</text>
<text x="2.4765" y="-2.2225" size="0.8128" layer="27" ratio="10" rot="R90">&gt;VALUE</text>
<rectangle x1="-1.2" y1="-1.5" x2="-0.7" y2="-0.85" layer="51"/>
<rectangle x1="-0.25" y1="-1.5" x2="0.25" y2="-0.85" layer="51"/>
<rectangle x1="0.7" y1="-1.5" x2="1.2" y2="-0.85" layer="51"/>
<rectangle x1="0.7" y1="0.85" x2="1.2" y2="1.5" layer="51"/>
<rectangle x1="-1.2" y1="0.85" x2="-0.7" y2="1.5" layer="51"/>
</package>
</packages>
</library>
<library name="USBC">
<packages>
<package name="USB-C-16P-5">
<smd name="B6" x="0.75" y="-0.34" dx="0.3" dy="1" layer="1"/>
<smd name="A7" x="0.25" y="-0.34" dx="0.3" dy="1" layer="1"/>
<smd name="GND2" x="3.225" y="-0.34" dx="0.6" dy="1" layer="1"/>
<smd name="VBUS2" x="2.45" y="-0.34" dx="0.6" dy="1" layer="1"/>
<smd name="B5" x="1.75" y="-0.34" dx="0.3" dy="1" layer="1"/>
<smd name="A8" x="1.25" y="-0.34" dx="0.3" dy="1" layer="1"/>
<smd name="B7" x="-0.75" y="-0.34" dx="0.3" dy="1" layer="1" rot="R180"/>
<smd name="A6" x="-0.25" y="-0.34" dx="0.3" dy="1" layer="1" rot="R180"/>
<smd name="GND" x="-3.225" y="-0.34" dx="0.6" dy="1" layer="1" rot="R180"/>
<smd name="VBUS1" x="-2.45" y="-0.34" dx="0.6" dy="1" layer="1" rot="R180"/>
<smd name="B8" x="-1.75" y="-0.34" dx="0.3" dy="1" layer="1" rot="R180"/>
<smd name="A5" x="-1.25" y="-0.34" dx="0.3" dy="1" layer="1" rot="R180"/>
<hole x="-2.89" y="-1.445" drill="0.65"/>
<hole x="2.89" y="-1.445" drill="0.65"/>
<wire x1="-4.62" y1="-5.4" x2="-4.62" y2="-4.78" width="0.01" layer="46"/>
<wire x1="-4.02" y1="-5.4" x2="-4.02" y2="-4.78" width="0.01" layer="46"/>
<wire x1="-4.62" y1="-4.78" x2="-4.02" y2="-4.78" width="0.01" layer="46" curve="-180"/>
<wire x1="-4.02" y1="-5.4" x2="-4.62" y2="-5.4" width="0.01" layer="46" curve="-180"/>
<wire x1="-4.32" y1="-4.295" x2="-4.32" y2="-5.895" width="0.01" layer="51"/>
<wire x1="-4.82" y1="-5.095" x2="-3.82" y2="-5.095" width="0.01" layer="51"/>
<wire x1="-4.62" y1="-5.095" x2="-4.02" y2="-5.095" width="0.01" layer="52"/>
<wire x1="-4.32" y1="-4.495" x2="-4.32" y2="-5.695" width="0.01" layer="52"/>
<wire x1="-4.82" y1="-5.395" x2="-3.82" y2="-5.395" width="0.01" layer="51"/>
<wire x1="-4.82" y1="-4.795" x2="-3.82" y2="-4.795" width="0.01" layer="51"/>
<wire x1="-4.62" y1="-1.465" x2="-4.62" y2="-0.365" width="0.01" layer="46"/>
<wire x1="-4.02" y1="-1.465" x2="-4.02" y2="-0.365" width="0.01" layer="46"/>
<wire x1="-4.02" y1="-1.465" x2="-4.62" y2="-1.465" width="0.01" layer="46" curve="-180"/>
<wire x1="-4.82" y1="-0.915" x2="-3.82" y2="-0.915" width="0.01" layer="51"/>
<wire x1="-4.62" y1="-0.915" x2="-4.02" y2="-0.915" width="0.01" layer="52"/>
<wire x1="-4.82" y1="-1.515" x2="-3.82" y2="-1.515" width="0.01" layer="51"/>
<wire x1="-4.82" y1="-0.315" x2="-3.82" y2="-0.315" width="0.01" layer="51"/>
<wire x1="-4.62" y1="-0.365" x2="-4.02" y2="-0.365" width="0.01" layer="46" curve="-180"/>
<wire x1="4.32" y1="-0.065" x2="4.32" y2="-1.765" width="0.01" layer="52"/>
<wire x1="4.02" y1="-5.4" x2="4.02" y2="-4.78" width="0.01" layer="46"/>
<wire x1="4.62" y1="-5.4" x2="4.62" y2="-4.78" width="0.01" layer="46"/>
<wire x1="4.02" y1="-4.78" x2="4.62" y2="-4.78" width="0.01" layer="46" curve="-180"/>
<wire x1="4.62" y1="-5.4" x2="4.02" y2="-5.4" width="0.01" layer="46" curve="-180"/>
<wire x1="4.32" y1="-4.295" x2="4.32" y2="-5.895" width="0.01" layer="51"/>
<wire x1="3.82" y1="-5.095" x2="4.82" y2="-5.095" width="0.01" layer="51"/>
<wire x1="4.02" y1="-5.095" x2="4.62" y2="-5.095" width="0.01" layer="52"/>
<wire x1="4.32" y1="-4.495" x2="4.32" y2="-5.695" width="0.01" layer="52"/>
<wire x1="3.82" y1="-5.395" x2="4.82" y2="-5.395" width="0.01" layer="51"/>
<wire x1="3.82" y1="-4.795" x2="4.82" y2="-4.795" width="0.01" layer="51"/>
<wire x1="4.02" y1="-1.465" x2="4.02" y2="-0.365" width="0.01" layer="46"/>
<wire x1="4.62" y1="-1.465" x2="4.62" y2="-0.365" width="0.01" layer="46"/>
<wire x1="4.62" y1="-1.465" x2="4.02" y2="-1.465" width="0.01" layer="46" curve="-180"/>
<wire x1="3.82" y1="-0.915" x2="4.82" y2="-0.915" width="0.01" layer="51"/>
<wire x1="4.02" y1="-0.915" x2="4.62" y2="-0.915" width="0.01" layer="52"/>
<wire x1="3.82" y1="-1.515" x2="4.82" y2="-1.515" width="0.01" layer="51"/>
<wire x1="3.82" y1="-0.315" x2="4.82" y2="-0.315" width="0.01" layer="51"/>
<wire x1="4.02" y1="-0.365" x2="4.62" y2="-0.365" width="0.01" layer="46" curve="-180"/>
<wire x1="-4.32" y1="0.135" x2="-4.32" y2="-0.345" width="0.01" layer="51"/>
<wire x1="-4.32" y1="-0.345" x2="-4.32" y2="-1.965" width="0.01" layer="51"/>
<wire x1="-4.32" y1="-0.065" x2="-4.32" y2="-1.765" width="0.01" layer="52"/>
<wire x1="4.32" y1="0.135" x2="4.32" y2="-0.345" width="0.01" layer="51"/>
<wire x1="4.32" y1="-0.345" x2="4.32" y2="-1.965" width="0.01" layer="51"/>
<wire x1="-4.32" y1="-7.695" x2="4.32" y2="-7.695" width="0.1524" layer="51"/>
<wire x1="-4.32" y1="-7.695" x2="-4.32" y2="-0.345" width="0.1524" layer="51"/>
<wire x1="-4.32" y1="-0.345" x2="4.32" y2="-0.345" width="0.1524" layer="51"/>
<wire x1="4.32" y1="-0.345" x2="4.32" y2="-7.695" width="0.1524" layer="51"/>
<wire x1="-4.32" y1="-7.7" x2="4.32" y2="-7.7" width="0.1524" layer="51" curve="-21.282614"/>
<wire x1="-4.32" y1="-2.2" x2="-4.32" y2="-4" width="0.2032" layer="21"/>
<wire x1="4.32" y1="-2.2" x2="4.32" y2="-4" width="0.2032" layer="21"/>
<polygon width="0.01" layer="31">
<vertex x="-4.82" y="-1.52"/>
<vertex x="-4.82" y="-0.32" curve="-90"/>
<vertex x="-4.35" y="0.15" curve="-90"/>
<vertex x="-3.82" y="-0.32"/>
<vertex x="-3.82" y="-1.52" curve="-90"/>
<vertex x="-4.35" y="-1.95" curve="-90"/>
</polygon>
<polygon width="0.01" layer="31">
<vertex x="3.82" y="-1.57"/>
<vertex x="3.82" y="-0.37" curve="-90"/>
<vertex x="4.3" y="0.15" curve="-90"/>
<vertex x="4.82" y="-0.32"/>
<vertex x="4.82" y="-1.52" curve="-90"/>
<vertex x="4.3" y="-1.95" curve="-90"/>
</polygon>
<polygon width="0.01" layer="31">
<vertex x="3.82" y="-5.45"/>
<vertex x="3.82" y="-4.85" curve="-90"/>
<vertex x="4.3" y="-4.3" curve="-90"/>
<vertex x="4.82" y="-4.8"/>
<vertex x="4.82" y="-5.4" curve="-90"/>
<vertex x="4.35" y="-5.9" curve="-90"/>
</polygon>
<polygon width="0.01" layer="31">
<vertex x="-4.82" y="-5.4"/>
<vertex x="-4.82" y="-4.8" curve="-90"/>
<vertex x="-4.3" y="-4.3" curve="-90"/>
<vertex x="-3.82" y="-4.8"/>
<vertex x="-3.82" y="-5.4" curve="-90"/>
<vertex x="-4.3" y="-5.9" curve="-90"/>
</polygon>
<text x="0" y="-2.54" size="0.762" layer="25" align="center">&gt;Name</text>
<text x="0" y="-3.81" size="0.762" layer="27" align="center">&gt;Value</text>
<smd name="SHLD1" x="-4.32" y="-0.915" dx="1" dy="2.1" layer="1" roundness="100" rot="R180" stop="no" cream="no"/>
<smd name="SHLD2" x="4.32" y="-0.915" dx="1" dy="2.1" layer="1" roundness="100" rot="R180" stop="no" cream="no"/>
<smd name="SHLD3" x="-4.32" y="-0.915" dx="1" dy="2.1" layer="16" roundness="100" stop="no" cream="no"/>
<smd name="SHLD4" x="4.32" y="-0.915" dx="1" dy="2.1" layer="16" roundness="100" stop="no" cream="no"/>
<smd name="SHLD5" x="-4.32" y="-5.095" dx="1" dy="1.6" layer="1" roundness="100" rot="R180" stop="no" cream="no"/>
<smd name="SHLD6" x="-4.32" y="-5.095" dx="1" dy="1.6" layer="16" roundness="100" stop="no" cream="no"/>
<smd name="SHLD7" x="4.32" y="-5.095" dx="1" dy="1.6" layer="16" roundness="100" stop="no" cream="no"/>
<smd name="SHLD8" x="4.32" y="-5.095" dx="1" dy="1.6" layer="1" roundness="100" rot="R180" stop="no" cream="no"/>
<rectangle x1="3.025" y1="-0.595" x2="3.425" y2="-0.095" layer="51"/>
<rectangle x1="2.25" y1="-0.595" x2="2.65" y2="-0.095" layer="51"/>
<rectangle x1="1.65" y1="-0.6" x2="1.85" y2="-0.1" layer="51"/>
<rectangle x1="1.15" y1="-0.6" x2="1.35" y2="-0.1" layer="51"/>
<rectangle x1="0.65" y1="-0.595" x2="0.85" y2="-0.095" layer="51"/>
<rectangle x1="0.15" y1="-0.595" x2="0.35" y2="-0.095" layer="51"/>
<rectangle x1="-0.35" y1="-0.595" x2="-0.15" y2="-0.095" layer="51"/>
<rectangle x1="-0.85" y1="-0.595" x2="-0.65" y2="-0.095" layer="51"/>
<rectangle x1="-1.35" y1="-0.595" x2="-1.15" y2="-0.095" layer="51"/>
<rectangle x1="-1.85" y1="-0.595" x2="-1.65" y2="-0.095" layer="51"/>
<rectangle x1="-2.65" y1="-0.595" x2="-2.25" y2="-0.095" layer="51"/>
<rectangle x1="-3.425" y1="-0.595" x2="-3.025" y2="-0.095" layer="51"/>
<polygon width="0.01" layer="29">
<vertex x="-4.92" y="-1.52"/>
<vertex x="-4.92" y="-0.32" curve="-90"/>
<vertex x="-4.32" y="0.235" curve="-90"/>
<vertex x="-3.72" y="-0.32"/>
<vertex x="-3.72" y="-1.52" curve="-90"/>
<vertex x="-4.32" y="-2.065" curve="-90"/>
</polygon>
<polygon width="0.01" layer="29">
<vertex x="3.72" y="-1.52"/>
<vertex x="3.72" y="-0.32" curve="-90"/>
<vertex x="4.32" y="0.235" curve="-90"/>
<vertex x="4.92" y="-0.32"/>
<vertex x="4.92" y="-1.52" curve="-90"/>
<vertex x="4.32" y="-2.065" curve="-90"/>
</polygon>
<polygon width="0.01" layer="29">
<vertex x="3.72" y="-5.4"/>
<vertex x="3.72" y="-4.8" curve="-90"/>
<vertex x="4.32" y="-4.195" curve="-90"/>
<vertex x="4.92" y="-4.8"/>
<vertex x="4.92" y="-5.4" curve="-90"/>
<vertex x="4.32" y="-5.995" curve="-90"/>
</polygon>
<polygon width="0.01" layer="29">
<vertex x="-4.92" y="-5.4"/>
<vertex x="-4.92" y="-4.8" curve="-90"/>
<vertex x="-4.32" y="-4.195" curve="-90"/>
<vertex x="-3.72" y="-4.8"/>
<vertex x="-3.72" y="-5.4" curve="-90"/>
<vertex x="-4.32" y="-5.995" curve="-90"/>
</polygon>
</package>
</packages>
</library>
<library name="Connector-new">
<packages>
<package name="HW4-SMD-2.0-90D">
<wire x1="-6.1" y1="1.5" x2="-5" y2="1.5" width="0.254" layer="21"/>
<wire x1="5" y1="1.5" x2="6.1" y2="1.5" width="0.254" layer="21"/>
<wire x1="-6.1" y1="9.2" x2="-3.4" y2="9.2" width="0.254" layer="21"/>
<wire x1="3.4" y1="9.2" x2="6.1" y2="9.2" width="0.254" layer="21"/>
<wire x1="-6.1" y1="1.5" x2="-6.1" y2="0" width="0.254" layer="21"/>
<wire x1="-6.1" y1="0" x2="-5" y2="0" width="0.254" layer="21"/>
<wire x1="-5" y1="0" x2="-5" y2="1.5" width="0.254" layer="21"/>
<wire x1="-5" y1="1.5" x2="5" y2="1.5" width="0.254" layer="21"/>
<wire x1="5" y1="1.5" x2="5" y2="0" width="0.254" layer="21"/>
<wire x1="5" y1="0" x2="6.1" y2="0" width="0.254" layer="21"/>
<wire x1="6.1" y1="0" x2="6.1" y2="1.5" width="0.254" layer="21"/>
<wire x1="-6.1" y1="1.5" x2="-6.1" y2="5.465" width="0.254" layer="21"/>
<wire x1="6.1" y1="1.5" x2="6.1" y2="5.465" width="0.254" layer="21"/>
<wire x1="-3.4" y1="9.2" x2="-3.4" y2="8.2" width="0.254" layer="21"/>
<wire x1="-3.4" y1="8.2" x2="3.4" y2="8.2" width="0.254" layer="21"/>
<wire x1="3.4" y1="8.2" x2="3.4" y2="9.2" width="0.254" layer="21"/>
<smd name="1" x="-3" y="-0.1" dx="2.74" dy="1.01" layer="1" rot="R90"/>
<smd name="2" x="-1" y="-0.1" dx="2.74" dy="1.01" layer="1" rot="R90"/>
<smd name="3" x="1" y="-0.1" dx="2.74" dy="1.01" layer="1" rot="R90"/>
<smd name="4" x="3" y="-0.1" dx="2.74" dy="1.01" layer="1" rot="R90"/>
<smd name="SS1" x="-5.4" y="7.4" dx="3" dy="1.5" layer="1" rot="R90"/>
<smd name="SS2" x="5.4" y="7.4" dx="3" dy="1.5" layer="1" rot="R90"/>
<text x="-1.905" y="8.89" size="0.889" layer="25" font="vector" ratio="11">&gt;NAME</text>
<text x="-2.54" y="4.445" size="0.889" layer="27" font="vector" ratio="11">&gt;VALUE</text>
<rectangle x1="-6.096" y1="-0.127" x2="6.096" y2="9.271" layer="39"/>
</package>
</packages>
</library>
<library name="sale">
<packages>
<package name="2*4*3.5MM">
<smd name="1" x="-1.675" y="0" dx="1.3" dy="1.15" layer="1" roundness="20" rot="R90"/>
<smd name="2" x="1.675" y="0" dx="1.3" dy="1.15" layer="1" roundness="20" rot="R90"/>
<smd name="3" x="2.3" y="1.55" dx="1.2" dy="0.9" layer="1" roundness="20" rot="R90"/>
<smd name="4" x="-2.3" y="1.55" dx="1.2" dy="0.9" layer="1" roundness="20" rot="R90"/>
<circle x="-0.85" y="1.55" radius="0.35" width="0.127" layer="20"/>
<circle x="0.85" y="1.55" radius="0.35" width="0.127" layer="20"/>
<wire x1="-2.275" y1="2.25" x2="-1" y2="2.25" width="0.127" layer="21"/>
<wire x1="-1" y1="2.25" x2="1" y2="2.25" width="0.127" layer="21"/>
<wire x1="1" y1="2.25" x2="2.275" y2="2.25" width="0.127" layer="21"/>
<wire x1="2.275" y1="2.25" x2="2.275" y2="-0.25" width="0.127" layer="21"/>
<wire x1="-2.275" y1="2.25" x2="-2.275" y2="-0.25" width="0.127" layer="21"/>
<wire x1="-1.9" y1="2.3" x2="-1.9" y2="2.55" width="0.127" layer="21"/>
<wire x1="-1.9" y1="2.55" x2="-1.5" y2="2.55" width="0.127" layer="21"/>
<wire x1="-1.5" y1="2.55" x2="-1.5" y2="2.3" width="0.127" layer="21"/>
<wire x1="-1" y1="2.25" x2="-1" y2="3.65" width="0.127" layer="21"/>
<wire x1="-1" y1="3.65" x2="1" y2="3.65" width="0.127" layer="21"/>
<wire x1="1" y1="3.65" x2="1" y2="2.25" width="0.127" layer="21"/>
<wire x1="1.5" y1="2.3" x2="1.5" y2="2.55" width="0.127" layer="21"/>
<wire x1="1.5" y1="2.55" x2="1.9" y2="2.55" width="0.127" layer="21"/>
<wire x1="1.9" y1="2.55" x2="1.9" y2="2.3" width="0.127" layer="21"/>
<wire x1="-2.275" y1="-0.25" x2="2.275" y2="-0.25" width="0.127" layer="21"/>
<text x="-2.7" y="-2" size="1.27" layer="25">&gt;name</text>
<text x="-2.7" y="-3.6" size="1.27" layer="27">&gt;value</text>
</package>
<package name="SOP-6-2.54MM">
<wire x1="-3.3" y1="4.45" x2="3.3" y2="4.45" width="0.127" layer="21"/>
<wire x1="3.3" y1="4.45" x2="3.3" y2="-4.45" width="0.127" layer="21"/>
<wire x1="3.3" y1="-4.45" x2="-3.3" y2="-4.45" width="0.127" layer="21"/>
<wire x1="-3.3" y1="-4.45" x2="-3.3" y2="4.45" width="0.127" layer="21"/>
<smd name="1" x="-4.5" y="2.54" dx="1.6" dy="1.8" layer="1"/>
<smd name="2" x="-4.5" y="0" dx="1.6" dy="1.8" layer="1"/>
<smd name="3" x="-4.5" y="-2.54" dx="1.6" dy="1.8" layer="1"/>
<smd name="4" x="4.5" y="-2.54" dx="1.6" dy="1.8" layer="1"/>
<smd name="5" x="4.5" y="0" dx="1.6" dy="1.8" layer="1"/>
<smd name="6" x="4.5" y="2.54" dx="1.6" dy="1.8" layer="1"/>
<circle x="-2.2" y="2.54" radius="0.3" width="0.6096" layer="21"/>
<text x="-2.54" y="-6.35" size="1.27" layer="25">&gt;name</text>
<text x="-2.54" y="-7.62" size="1.27" layer="27">&gt;value</text>
</package>
</packages>
</library>
<library name="diode">
<description>&lt;b&gt;Diodes&lt;/b&gt;&lt;p&gt;
Based on the following sources:
&lt;ul&gt;
&lt;li&gt;Motorola : www.onsemi.com
&lt;li&gt;Fairchild : www.fairchildsemi.com
&lt;li&gt;Philips : www.semiconductors.com
&lt;li&gt;Vishay : www.vishay.de
&lt;/ul&gt;
&lt;author&gt;Created by librarian@cadsoft.de&lt;/author&gt;</description>
<packages>
<package name="DO-214AC">
<description>&lt;b&gt;SURFACE MOUNT GENERAL RECTIFIER&lt;/b&gt; JEDEC DO-214AC molded platic body&lt;p&gt;
Method 2026&lt;br&gt;
Source: http://www.kingtronics.com/SMD_M7/M7_SMD_4007.pdf</description>
<wire x1="-2.15" y1="1.3" x2="2.15" y2="1.3" width="0.2032" layer="51"/>
<wire x1="2.15" y1="1.3" x2="2.15" y2="-1.3" width="0.2032" layer="51"/>
<wire x1="2.15" y1="-1.3" x2="-2.15" y2="-1.3" width="0.2032" layer="51"/>
<wire x1="-2.15" y1="-1.3" x2="-2.15" y2="1.3" width="0.2032" layer="51"/>
<wire x1="-1.035" y1="1.3" x2="1.025" y2="1.3" width="0.2032" layer="21"/>
<wire x1="1.025" y1="-1.3" x2="-1.035" y2="-1.3" width="0.2032" layer="21"/>
<smd name="C" x="-2.025" y="0" dx="1.8" dy="2.4" layer="1"/>
<smd name="A" x="2.025" y="0" dx="1.8" dy="2.4" layer="1" rot="R180"/>
<text x="-2.54" y="1.905" size="1.27" layer="25">&gt;NAME</text>
<text x="-2.54" y="-3.175" size="1.27" layer="27">&gt;VALUE</text>
<rectangle x1="-2.825" y1="-1.1" x2="-2.175" y2="1.1" layer="51"/>
<rectangle x1="2.175" y1="-1.1" x2="2.825" y2="1.1" layer="51" rot="R180"/>
<rectangle x1="-1.065" y1="-1.225" x2="-0.39" y2="1.225" layer="21"/>
<rectangle x1="-1.75" y1="-1.225" x2="-1.075" y2="1.225" layer="51"/>
</package>
</packages>
</library>
<library name="rcl">
<description>&lt;b&gt;Resistors, Capacitors, Inductors&lt;/b&gt;&lt;p&gt;
Based on the previous libraries:
&lt;ul&gt;
&lt;li&gt;r.lbr
&lt;li&gt;cap.lbr 
&lt;li&gt;cap-fe.lbr
&lt;li&gt;captant.lbr
&lt;li&gt;polcap.lbr
&lt;li&gt;ipc-smd.lbr
&lt;/ul&gt;
All SMD packages are defined according to the IPC specifications and  CECC&lt;p&gt;
&lt;author&gt;Created by librarian@cadsoft.de&lt;/author&gt;&lt;p&gt;
&lt;p&gt;
for Electrolyt Capacitors see also :&lt;p&gt;
www.bccomponents.com &lt;p&gt;
www.panasonic.com&lt;p&gt;
www.kemet.com&lt;p&gt;
http://www.secc.co.jp/pdf/os_e/2004/e_os_all.pdf &lt;b&gt;(SANYO)&lt;/b&gt;
&lt;p&gt;
for trimmer refence see : &lt;u&gt;www.electrospec-inc.com/cross_references/trimpotcrossref.asp&lt;/u&gt;&lt;p&gt;

&lt;table border=0 cellspacing=0 cellpadding=0 width="100%" cellpaddding=0&gt;
&lt;tr valign="top"&gt;

&lt;! &lt;td width="10"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td width="90%"&gt;

&lt;b&gt;&lt;font color="#0000FF" size="4"&gt;TRIM-POT CROSS REFERENCE&lt;/font&gt;&lt;/b&gt;
&lt;P&gt;
&lt;TABLE BORDER=0 CELLSPACING=1 CELLPADDING=2&gt;
  &lt;TR&gt;
    &lt;TD COLSPAN=8&gt;
      &lt;FONT SIZE=3 FACE=ARIAL&gt;&lt;B&gt;RECTANGULAR MULTI-TURN&lt;/B&gt;&lt;/FONT&gt;
    &lt;/TD&gt;
  &lt;/TR&gt;
  &lt;TR&gt;
    &lt;TD ALIGN=CENTER&gt;
      &lt;B&gt;
      &lt;FONT SIZE=3 FACE=ARIAL color="#FF0000"&gt;BOURNS&lt;/FONT&gt;
      &lt;/B&gt;
    &lt;/TD&gt;
    &lt;TD ALIGN=CENTER&gt;
      &lt;B&gt;
      &lt;FONT SIZE=3 FACE=ARIAL color="#FF0000"&gt;BI&amp;nbsp;TECH&lt;/FONT&gt;
      &lt;/B&gt;
    &lt;/TD&gt;
    &lt;TD ALIGN=CENTER&gt;
      &lt;B&gt;
      &lt;FONT SIZE=3 FACE=ARIAL color="#FF0000"&gt;DALE-VISHAY&lt;/FONT&gt;
      &lt;/B&gt;
    &lt;/TD&gt;
    &lt;TD ALIGN=CENTER&gt;
      &lt;B&gt;
      &lt;FONT SIZE=3 FACE=ARIAL color="#FF0000"&gt;PHILIPS/MEPCO&lt;/FONT&gt;
      &lt;/B&gt;
    &lt;/TD&gt;
    &lt;TD ALIGN=CENTER&gt;
      &lt;B&gt;
      &lt;FONT SIZE=3 FACE=ARIAL color="#FF0000"&gt;MURATA&lt;/FONT&gt;
      &lt;/B&gt;
    &lt;/TD&gt;
    &lt;TD ALIGN=CENTER&gt;
      &lt;B&gt;
      &lt;FONT SIZE=3 FACE=ARIAL color="#FF0000"&gt;PANASONIC&lt;/FONT&gt;
      &lt;/B&gt;
    &lt;/TD&gt;
    &lt;TD ALIGN=CENTER&gt;
      &lt;B&gt;
      &lt;FONT SIZE=3 FACE=ARIAL color="#FF0000"&gt;SPECTROL&lt;/FONT&gt;
      &lt;/B&gt;
    &lt;/TD&gt;
    &lt;TD ALIGN=CENTER&gt;
      &lt;B&gt;
      &lt;FONT SIZE=3 FACE=ARIAL color="#FF0000"&gt;MILSPEC&lt;/FONT&gt;
      &lt;/B&gt;
    &lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
  &lt;/TR&gt;
  &lt;TR&gt;
    &lt;TD BGCOLOR="#cccccc" ALIGN=CENTER&gt;&lt;FONT FACE=ARIAL SIZE=3 &gt;
      3005P&lt;BR&gt;
      3006P&lt;BR&gt;
      3006W&lt;BR&gt;
      3006Y&lt;BR&gt;
      3009P&lt;BR&gt;
      3009W&lt;BR&gt;
      3009Y&lt;BR&gt;
      3057J&lt;BR&gt;
      3057L&lt;BR&gt;
      3057P&lt;BR&gt;
      3057Y&lt;BR&gt;
      3059J&lt;BR&gt;
      3059L&lt;BR&gt;
      3059P&lt;BR&gt;
      3059Y&lt;BR&gt;&lt;/FONT&gt;
    &lt;/TD&gt;
    &lt;TD BGCOLOR="#cccccc" ALIGN=CENTER&gt;&lt;FONT FACE=ARIAL SIZE=3&gt;
      -&lt;BR&gt;
      89P&lt;BR&gt;
      89W&lt;BR&gt;
      89X&lt;BR&gt;
      89PH&lt;BR&gt;
      76P&lt;BR&gt;
      89XH&lt;BR&gt;
      78SLT&lt;BR&gt;
      78L&amp;nbsp;ALT&lt;BR&gt;
      56P&amp;nbsp;ALT&lt;BR&gt;
      78P&amp;nbsp;ALT&lt;BR&gt;
      T8S&lt;BR&gt;
      78L&lt;BR&gt;
      56P&lt;BR&gt;
      78P&lt;BR&gt;&lt;/FONT&gt;
    &lt;/TD&gt;
    &lt;TD BGCOLOR="#cccccc" ALIGN=CENTER&gt;&lt;FONT FACE=ARIAL SIZE=3&gt;
      -&lt;BR&gt;
      T18/784&lt;BR&gt;
      783&lt;BR&gt;
      781&lt;BR&gt;
      -&lt;BR&gt;
      -&lt;BR&gt;
      -&lt;BR&gt;
      2199&lt;BR&gt;
      1697/1897&lt;BR&gt;
      1680/1880&lt;BR&gt;
      2187&lt;BR&gt;
      -&lt;BR&gt;
      -&lt;BR&gt;
      -&lt;BR&gt;
      -&lt;BR&gt;&lt;/FONT&gt;
    &lt;/TD&gt;
    &lt;TD BGCOLOR="#cccccc" ALIGN=CENTER&gt;&lt;FONT FACE=ARIAL SIZE=3&gt;
      -&lt;BR&gt;
      8035EKP/CT20/RJ-20P&lt;BR&gt;
      -&lt;BR&gt;
      RJ-20X&lt;BR&gt;
      -&lt;BR&gt;
      -&lt;BR&gt;
      -&lt;BR&gt;
      1211L&lt;BR&gt;
      8012EKQ&amp;nbsp;ALT&lt;BR&gt;
      8012EKR&amp;nbsp;ALT&lt;BR&gt;
      1211P&lt;BR&gt;
      8012EKJ&lt;BR&gt;
      8012EKL&lt;BR&gt;
      8012EKQ&lt;BR&gt;
      8012EKR&lt;BR&gt;&lt;/FONT&gt;
    &lt;/TD&gt;
    &lt;TD BGCOLOR="#cccccc" ALIGN=CENTER&gt;&lt;FONT FACE=ARIAL SIZE=3&gt;
      -&lt;BR&gt;
      2101P&lt;BR&gt;
      2101W&lt;BR&gt;
      2101Y&lt;BR&gt;
      -&lt;BR&gt;
      -&lt;BR&gt;
      -&lt;BR&gt;
      -&lt;BR&gt;
      -&lt;BR&gt;
      -&lt;BR&gt;
      -&lt;BR&gt;
      -&lt;BR&gt;
      2102L&lt;BR&gt;
      2102S&lt;BR&gt;
      2102Y&lt;BR&gt;&lt;/FONT&gt;
    &lt;/TD&gt;
    &lt;TD BGCOLOR="#cccccc"
Download .txt
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
Download .txt
Showing preview only (1,503K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (15007 symbols across 867 files)

FILE: lv_binding_micropython_tulip/driver/esp32/espidf.c
  function gpio_pin_wakeup_disable (line 17) | inline void gpio_pin_wakeup_disable(void){}
  function gpio_pin_wakeup_enable (line 18) | inline void gpio_pin_wakeup_enable(uint32_t i, GPIO_INT_TYPE intr_state){}
  function gpio_intr_ack_high (line 19) | inline void gpio_intr_ack_high(uint32_t ack_mask){}
  function gpio_intr_ack (line 20) | inline void gpio_intr_ack(uint32_t ack_mask){}
  function gpio_intr_pending_high (line 21) | inline uint32_t gpio_intr_pending_high(void){return 0;}
  function gpio_intr_pending (line 22) | inline uint32_t gpio_intr_pending(void){return 0;}
  function gpio_intr_handler_register (line 23) | inline void gpio_intr_handler_register(gpio_intr_handler_fn_t fn, void *...
  function gpio_init (line 24) | inline void gpio_init(void){}
  function task_delay_ms (line 26) | void task_delay_ms(int ms)
  type mp_spi_device_callbacks_t (line 37) | typedef struct{
  function STATIC (line 52) | STATIC void isr_print_strn(void *env, const char *str, size_t len) {
  function cb_isr (line 62) | static inline void cb_isr(mp_obj_t cb, mp_obj_t arg)
  function ex_spi_pre_cb_isr (line 102) | void ex_spi_pre_cb_isr(spi_transaction_t *trans)
  function ex_spi_post_cb_isr (line 112) | void ex_spi_post_cb_isr(spi_transaction_t *trans)
  function spi_send_value (line 129) | static void spi_send_value(const uint8_t *value, uint8_t size, spi_devic...
  function ili9xxx_send_cmd (line 137) | static inline void ili9xxx_send_cmd(uint8_t cmd, int dc, spi_device_hand...
  function ili9xxx_send_data (line 144) | static inline void ili9xxx_send_data(const uint8_t *value, int dc, spi_d...
  function ili9xxx_send_data_dma (line 150) | static void ili9xxx_send_data_dma(void *disp_drv, void *data, size_t siz...
  function ili9xxx_post_cb_isr (line 159) | void ili9xxx_post_cb_isr(spi_transaction_t *trans)
  type color24_t (line 166) | typedef struct {
  function ili9xxx_flush (line 178) | void ili9xxx_flush(void *_disp_drv, const void *_area, void *_color_p)

FILE: lv_binding_micropython_tulip/driver/esp32/espidf.h
  type BaseType_t (line 41) | typedef int	BaseType_t;
  type UBaseType_t (line 42) | typedef unsigned int	UBaseType_t;
  type TickType_t (line 56) | typedef uint32_t TickType_t;
  function SPH0645_WORKAROUND (line 83) | static inline void SPH0645_WORKAROUND(int i2s_num)
  function get_ccount (line 92) | static inline void get_ccount(int *ccount)
  function esp_http_client_register_event_handler (line 136) | static inline void esp_http_client_register_event_handler(esp_http_clien...
  function set_spi_transaction_ext (line 148) | static inline void set_spi_transaction_ext(

FILE: lv_binding_micropython_tulip/driver/esp32/ili9XXX.py
  class ili9XXX (line 57) | class ili9XXX:
    method __init__ (line 62) | def __init__(self,
    method disp_spi_init (line 166) | def disp_spi_init(self):
    method deinit (line 260) | def deinit(self):
    method spi_send (line 304) | def spi_send(self, data):
    method spi_send_dma (line 310) | def spi_send_dma(self, data):
    method send_cmd (line 318) | def send_cmd(self, cmd):
    method send_data (line 323) | def send_data(self, data):
    method send_trans_word (line 330) | def send_trans_word(self):
    method send_data_dma (line 334) | def send_data_dma(self, data):          # data should be allocated as ...
    method _init (line 340) | async def _init(self, sleep_func):
    method init (line 382) | def init(self):
    method init_async (line 392) | async def init_async(self):
    method power_down (line 396) | def power_down(self):
    method flush (line 406) | def flush(self, disp_drv, area, color_p):
    method monitor (line 457) | def monitor(self, disp_drv, time, px):
    method stat (line 462) | def stat(self):
    method madctl (line 479) | def madctl(self, colormode, rotation, rotations):
  class ili9341 (line 494) | class ili9341(ili9XXX):
    method __init__ (line 496) | def __init__(self,
  class ili9488 (line 546) | class ili9488(ili9XXX):
    method __init__ (line 548) | def __init__(self,
  class ili9488g (line 599) | class ili9488g(ili9488):
    method __init__ (line 601) | def __init__(self,
  class gc9a01 (line 627) | class gc9a01(ili9XXX):
    method __init__ (line 632) | def __init__(self,
  class st7789 (line 714) | class st7789(ili9XXX):
    method __init__ (line 721) | def __init__(self,
  class st7735 (line 766) | class st7735(ili9XXX):
    method __init__ (line 773) | def __init__(self,

FILE: lv_binding_micropython_tulip/driver/esp32/lv_spi.py
  class SPI (line 29) | class SPI(object):
    method __init__ (line 35) | def __init__(self, spihost=HSPI_HOST, baudrate=200000, miso=-1, mosi=-...
    method init (line 79) | def init(self, baudrate=None, phase=None, polarity=None, cs=-1):
    method write (line 124) | def write(self, data):
    method read (line 136) | def read(self, length:int, write=None):
    method readinto (line 150) | def readinto(self, buf:bytearray, write=None):
    method write_readinto (line 162) | def write_readinto(self, data, buf:bytearray):
    method deinit (line 174) | def deinit(self):

FILE: lv_binding_micropython_tulip/driver/esp32/modrtch.c
  type rtch_info_t (line 75) | typedef struct _rtch_info_t
  type rtch_t (line 82) | typedef struct _rtch_t
  function STATIC (line 110) | STATIC void touch_read(lv_indev_t * indev_drv, lv_indev_data_t *data)
  function STATIC (line 119) | STATIC mp_obj_t mp_activate_rtch(mp_obj_t self_in)
  function STATIC (line 151) | STATIC MP_DEFINE_CONST_OBJ_TYPE(
  function STATIC (line 248) | STATIC mp_obj_t calibrate(mp_uint_t n_args, const mp_obj_t *args)
  function STATIC (line 266) | STATIC void enable_touch_sense(rtch_t *self)
  function STATIC (line 301) | STATIC mp_obj_t mp_rtch_init(mp_obj_t self_in)
  function STATIC (line 332) | STATIC mp_obj_t mp_rtch_deinit(mp_obj_t self_in)
  function STATIC (line 355) | STATIC int compare_int(const void *_a, const void *_b)
  function STATIC (line 362) | STATIC int measure_axis(
  function IRAM_ATTR (line 431) | IRAM_ATTR rtch_isr_handler(void* arg)
  function STATIC (line 452) | STATIC void rtch_task(void* arg)

FILE: lv_binding_micropython_tulip/driver/esp32/modxpt2046.c
  type xpt2046_obj_t (line 26) | typedef struct _xpt2046_obj_t
  function STATIC (line 54) | STATIC mp_obj_t mp_activate_xpt2046(mp_obj_t self_in)
  function STATIC (line 61) | STATIC mp_obj_t xpt2046_make_new(const mp_obj_type_t *type,
  function STATIC (line 162) | STATIC mp_obj_t mp_xpt2046_init(mp_obj_t self_in)
  function STATIC (line 193) | STATIC mp_obj_t mp_xpt2046_deinit(mp_obj_t self_in)
  function xpt2046_read (line 210) | static void xpt2046_read(lv_indev_t * indev_drv, lv_indev_data_t * data)
  function tp_spi_xchg (line 267) | static uint8_t tp_spi_xchg(xpt2046_obj_t *self, uint8_t data_send)
  function xpt2046_corr (line 284) | static void xpt2046_corr(xpt2046_obj_t *self, int16_t * x, int16_t * y)
  function xpt2046_avg (line 315) | static void xpt2046_avg(xpt2046_obj_t *self, int16_t * x, int16_t * y)

FILE: lv_binding_micropython_tulip/driver/esp32/sh2lib.c
  function shlib_load_nva (line 59) | static void shlib_load_nva(nghttp2_nv ng_nva[], const struct sh2lib_nv n...
  function callback_send_inner (line 79) | static ssize_t callback_send_inner(struct sh2lib_handle *hd, const uint8...
  function callback_send (line 95) | static ssize_t callback_send(nghttp2_session *session, const uint8_t *data,
  function callback_recv (line 128) | static ssize_t callback_recv(nghttp2_session *session, uint8_t *buf,
  function callback_on_frame_send (line 178) | static int callback_on_frame_send(nghttp2_session *session,
  function callback_on_frame_recv (line 200) | static int callback_on_frame_recv(nghttp2_session *session,
  function callback_on_stream_close (line 216) | static int callback_on_stream_close(nghttp2_session *session, int32_t st...
  function callback_on_data_chunk_recv (line 229) | static int callback_on_data_chunk_recv(nghttp2_session *session, uint8_t...
  function callback_on_header (line 247) | static int callback_on_header(nghttp2_session *session, const nghttp2_fr...
  function callback_on_extension (line 255) | static int callback_on_extension(nghttp2_session *session, const nghttp2...
  function do_http2_connect (line 262) | static int do_http2_connect(struct sh2lib_handle *hd)
  function sh2lib_init_handle (line 292) | static void sh2lib_init_handle(struct sh2lib_handle *hd, const char *uri)
  function sh2lib_connect_task_function (line 320) | static void sh2lib_connect_task_function(void *param)
  function sh2lib_connect_task (line 347) | int sh2lib_connect_task(struct sh2lib_handle *hd, const char *uri, int p...
  function sh2lib_connect (line 354) | int sh2lib_connect(struct sh2lib_handle *hd, const char *uri)
  function sh2lib_connect_async (line 377) | int sh2lib_connect_async(struct sh2lib_handle *hd, const char *uri)
  function sh2lib_free (line 403) | void sh2lib_free(struct sh2lib_handle *hd)
  function sh2lib_execute (line 428) | int sh2lib_execute(struct sh2lib_handle *hd)
  function sh2lib_do_get_with_nv (line 446) | int sh2lib_do_get_with_nv(struct sh2lib_handle *hd, const struct sh2lib_...
  function sh2lib_do_get (line 459) | int sh2lib_do_get(struct sh2lib_handle *hd, const char *path, sh2lib_fra...
  function sh2lib_data_provider_cb (line 469) | ssize_t sh2lib_data_provider_cb(nghttp2_session *session, int32_t stream...
  function sh2lib_do_putpost_with_nv (line 478) | int sh2lib_do_putpost_with_nv(struct sh2lib_handle *hd, const struct sh2...
  function sh2lib_do_post (line 496) | int sh2lib_do_post(struct sh2lib_handle *hd, const char *path,
  function sh2lib_do_put (line 508) | int sh2lib_do_put(struct sh2lib_handle *hd, const char *path,
  function sh2lib_session_resume_data (line 520) | int sh2lib_session_resume_data(struct sh2lib_handle *hd, int32_t stream_id)

FILE: lv_binding_micropython_tulip/driver/esp32/sh2lib.h
  type nghttp2_session (line 26) | typedef struct nghttp2_session nghttp2_session;
  type esp_tls (line 27) | typedef struct esp_tls esp_tls;
  type esp_tls_cfg (line 28) | typedef struct esp_tls_cfg esp_tls_cfg;
  type sh2lib_error (line 50) | typedef enum {
  type sh2lib_nv_flag (line 247) | typedef enum {
  type sh2lib_data_flag (line 278) | typedef enum {
  type sh2lib_data_recv_flag (line 304) | typedef enum {
  type sh2lib_handle (line 313) | struct sh2lib_handle {
  type sh2lib_nv (line 326) | struct sh2lib_nv {
  type sh2lib_handle (line 351) | struct sh2lib_handle
  type sh2lib_handle (line 369) | struct sh2lib_handle
  type sh2lib_handle (line 387) | struct sh2lib_handle
  type sh2lib_handle (line 412) | struct sh2lib_handle
  type sh2lib_handle (line 433) | struct sh2lib_handle
  type sh2lib_handle (line 444) | struct sh2lib_handle
  type sh2lib_handle (line 464) | struct sh2lib_handle
  type sh2lib_handle (line 486) | struct sh2lib_handle
  type sh2lib_handle (line 510) | struct sh2lib_handle
  type sh2lib_handle (line 528) | struct sh2lib_handle
  type sh2lib_handle (line 561) | struct sh2lib_handle
  type sh2lib_nv (line 561) | struct sh2lib_nv
  type sh2lib_handle (line 592) | struct sh2lib_handle
  type sh2lib_nv (line 592) | struct sh2lib_nv
  type sh2lib_handle (line 610) | struct sh2lib_handle

FILE: lv_binding_micropython_tulip/driver/esp32/xpt2046.py
  class xpt2046 (line 11) | class xpt2046:
    method __init__ (line 21) | def __init__(self, miso=-1, mosi=-1, clk=-1, cs=25,
    method calibrate (line 65) | def calibrate(self, x0, y0, x1, y1):
    method spi_init (line 71) | def spi_init(self):
    method deinit (line 134) | def deinit(self):
    method xpt_cmds (line 153) | def xpt_cmds(self, cmds):
    method get_med_coords (line 169) | def get_med_coords(self, count : int):
    method get_coords (line 183) | def get_coords(self):
    method get_pressure (line 199) | def get_pressure(self, factor : int) -> int:
    method read (line 206) | def read(self, indev_drv, data) -> int:
    method stat (line 223) | def stat(self):

FILE: lv_binding_micropython_tulip/driver/generic/axp192.py
  class AXP192 (line 125) | class AXP192():
    method __init__ (line 127) | def __init__(self, i2c_dev, sda, scl, freq=400000, i2c_addr=I2C_ADDRESS):
    method read_byte (line 131) | def read_byte(self, reg_addr):
    method write_byte (line 136) | def write_byte(self, reg_addr, data):
    method twiddle (line 140) | def twiddle(self, reg_addr, affects, value):
    method write (line 143) | def write(self, reg_addr, data):
    method read (line 198) | def read(self, reg_addr, length=1):
    method coulomb_counter (line 263) | def coulomb_counter(self):
    method coulomb_counter_enable (line 267) | def coulomb_counter_enable(self):
    method coulomb_counter_disable (line 270) | def coulomb_counter_disable(self):
    method coulomb_counter_suspend (line 273) | def coulomb_counter_suspend(self):
    method coulomb_counter_clear (line 276) | def coulomb_counter_clear(self):

FILE: lv_binding_micropython_tulip/driver/generic/ft6x36.py
  class ft6x36 (line 25) | class ft6x36:
    method __init__ (line 27) | def __init__(self, i2c_dev=0, sda=21, scl=22, freq=400000, addr=0x38, ...
    method callback (line 54) | def callback(self, driver, data):

FILE: lv_binding_micropython_tulip/driver/generic/ili9xxx-test.py
  function build_rect_buf (line 8) | def build_rect_buf(w, h, inner=[0x00, 0x00]):

FILE: lv_binding_micropython_tulip/driver/generic/ili9xxx.py
  class Ili9341_hw (line 102) | class Ili9341_hw(st77xx.St77xx_hw):
    method __init__ (line 103) | def __init__(self, **kw):
    method config_hw (line 116) | def config_hw(self):
    method apply_rotation (line 149) | def apply_rotation(self, rot):
  class Ili9341 (line 161) | class Ili9341(Ili9341_hw, st77xx.St77xx_lvgl):
    method __init__ (line 162) | def __init__(self, doublebuffer=True, factor=4, **kw):

FILE: lv_binding_micropython_tulip/driver/generic/st77xx-test.py
  function build_rect_buf (line 6) | def build_rect_buf(w, h, inner=[0x00,0x00]):
  function test_lcd (line 12) | def test_lcd(lcd):

FILE: lv_binding_micropython_tulip/driver/generic/st77xx.py
  class St77xx_hw (line 171) | class St77xx_hw(object):
    method __init__ (line 172) | def __init__(self, *, cs, dc, spi, res, suppRes, bl=None, model=None, ...
    method off (line 219) | def off(self): self.set_backlight(0)
    method hard_reset (line 221) | def hard_reset(self):
    method config (line 228) | def config(self):
    method set_backlight (line 231) | def set_backlight(self,percent):
    method set_window (line 234) | def set_window(self, x, y, w, h):
    method apply_rotation (line 241) | def apply_rotation(self,rot):
    method blit (line 247) | def blit(self, x, y, w, h, buf, is_blocking=True):
    method clear (line 252) | def clear(self, color):
    method write_register (line 265) | def write_register(self, reg, buf=None):
    method _rp2_write_register_dma (line 275) | def _rp2_write_register_dma(self, reg, buf, is_blocking=True):
    method rp2_wait_dma (line 298) | def rp2_wait_dma(self):
    method _run_seq (line 310) | def _run_seq(self,seq):
  class St7735_hw (line 323) | class St7735_hw(St77xx_hw):
    method __init__ (line 325) | def __init__(self,res,model='greentab',**kw):
    method config_hw (line 327) | def config_hw(self):
  class St7789_hw (line 391) | class St7789_hw(St77xx_hw):
    method __init__ (line 392) | def __init__(self,res,**kw):
    method config_hw (line 394) | def config_hw(self):
  class St77xx_lvgl (line 430) | class St77xx_lvgl(object):
    method disp_drv_flush_cb (line 438) | def disp_drv_flush_cb(self,disp_drv,area,color_p):
    method __init__ (line 452) | def __init__(self,doublebuffer=True,factor=4):
  class St7735 (line 476) | class St7735(St7735_hw,St77xx_lvgl):
    method __init__ (line 477) | def __init__(self,res,doublebuffer=True,factor=4,**kw):
  class St7789 (line 482) | class St7789(St7789_hw,St77xx_lvgl):
    method __init__ (line 483) | def __init__(self,res,doublebuffer=True,factor=4,**kw):

FILE: lv_binding_micropython_tulip/driver/generic/xpt2046.py
  class Xpt2046_hw (line 16) | class Xpt2046_hw(object):
    method _chanRead (line 30) | def _chanRead(self,chan):
    method __init__ (line 39) | def __init__(self,*,
    method _raw2px (line 60) | def _raw2px(self,rxy):
    method _raw_pos (line 67) | def _raw_pos(self):
    method pos (line 76) | def pos(self,N=10,attempts=20):
  class Xpt2046 (line 92) | class Xpt2046(Xpt2046_hw):
    method indev_drv_read_cb (line 93) | def indev_drv_read_cb(self, indev_drv, data):
    method __init__ (line 105) | def __init__(self,spi,spiRate=24_000_000,spiPrereadCb=None,**kw):

FILE: lv_binding_micropython_tulip/driver/include/common.h
  type mp_ptr_t (line 13) | typedef struct mp_ptr_t
  function STATIC (line 19) | STATIC mp_int_t mp_ptr_get_buffer(mp_obj_t self_in, mp_buffer_info_t *bu...

FILE: lv_binding_micropython_tulip/driver/js/lv_timer.py
  class Timer (line 6) | class Timer:
    method __init__ (line 10) | def __init__(self, id):
    method init (line 13) | def init(self, mode=PERIODIC, period=-1, callback=None):
    method deinit (line 20) | def deinit(self):

FILE: lv_binding_micropython_tulip/driver/linux/evdev.py
  class crosshair_cursor (line 9) | class crosshair_cursor:
    method __init__ (line 10) | def __init__(self, scr=None):
    method __call__ (line 23) | def __call__(self, data):
    method delete (line 28) | def delete(self):
  class mouse_indev (line 33) | class mouse_indev:
    method __init__ (line 34) | def __init__(self, scr=None, cursor=None, device='/dev/input/mice'):
    method mouse_read (line 50) | def mouse_read(self, indev, data) -> int:
    method delete (line 76) | def delete(self):

FILE: lv_binding_micropython_tulip/driver/linux/lv_timer.py
  function new (line 74) | def new(sdesc):
  function sigaction (line 82) | def sigaction(signum, handler, flags=0):
  function timer_create (line 95) | def timer_create(sig_id):
  function timer_delete (line 107) | def timer_delete(tid):
  function timer_settime (line 112) | def timer_settime(tid, period_ms, periodic):
  class Timer (line 132) | class Timer:
    method __init__ (line 137) | def __init__(self, id):
    method init (line 141) | def init(self, mode=PERIODIC, period=-1, callback=None):
    method deinit (line 152) | def deinit(self):
    method handler (line 158) | def handler(self, signum=-1):

FILE: lv_binding_micropython_tulip/driver/rp2/rp2_dma.py
  class DMA (line 9) | class DMA:
    method __init__ (line 22) | def __init__( self, channelNumber ):
    method config (line 29) | def config( self, src_addr, dst_addr, count, src_inc, dst_inc, trig_dr...
    method enable (line 42) | def enable( self ):
    method disable (line 45) | def disable( self ):
    method is_busy (line 48) | def is_busy( self ):

FILE: lv_binding_micropython_tulip/driver/stm32/STM32F7DISC/ft5336.c
  function ft5336_Init (line 145) | void ft5336_Init(uint16_t DeviceAddr)
  function ft5336_Reset (line 161) | void ft5336_Reset(uint16_t DeviceAddr)
  function ft5336_ReadID (line 173) | uint16_t ft5336_ReadID(uint16_t DeviceAddr)
  function ft5336_TS_Start (line 205) | void ft5336_TS_Start(uint16_t DeviceAddr)
  function ft5336_TS_DetectTouch (line 222) | uint8_t ft5336_TS_DetectTouch(uint16_t DeviceAddr)
  function ft5336_TS_GetXY (line 254) | void ft5336_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y)
  function ft5336_TS_EnableIT (line 375) | void ft5336_TS_EnableIT(uint16_t DeviceAddr)
  function ft5336_TS_DisableIT (line 390) | void ft5336_TS_DisableIT(uint16_t DeviceAddr)
  function ft5336_TS_ITStatus (line 407) | uint8_t ft5336_TS_ITStatus(uint16_t DeviceAddr)
  function ft5336_TS_ClearIT (line 420) | void ft5336_TS_ClearIT(uint16_t DeviceAddr)
  function ft5336_TS_GetGestureID (line 435) | void ft5336_TS_GetGestureID(uint16_t DeviceAddr, uint32_t * pGestureId)
  function ft5336_TS_GetTouchInfo (line 459) | void ft5336_TS_GetTouchInfo(uint16_t   DeviceAddr,
  function ft5336_Get_I2C_InitializedStatus (line 568) | static uint8_t ft5336_Get_I2C_InitializedStatus(void)
  function ft5336_I2C_InitializeIfRequired (line 578) | static void ft5336_I2C_InitializeIfRequired(void)
  function ft5336_TS_Configure (line 595) | static uint32_t ft5336_TS_Configure(uint16_t DeviceAddr)

FILE: lv_binding_micropython_tulip/driver/stm32/STM32F7DISC/ft5336.h
  type ft5336_handle_TypeDef (line 74) | typedef struct

FILE: lv_binding_micropython_tulip/driver/stm32/STM32F7DISC/modrk043fn48h.c
  function STATIC (line 36) | STATIC mp_obj_t mp_rk043fn48h_framebuffer(mp_obj_t n_obj) {
  function STATIC (line 51) | STATIC mp_obj_t mp_rk043fn48h_init(size_t n_args, const mp_obj_t *pos_ar...
  function STATIC (line 89) | STATIC mp_obj_t mp_rk043fn48h_deinit() {
  function STATIC (line 117) | STATIC void mp_rk043fn48h_flush(lv_display_t *disp_drv, const lv_area_t ...
  function DMA2D_TransferComplete (line 138) | void DMA2D_TransferComplete(DMA2D_HandleTypeDef *hdma2d) {
  function HAL_LTDC_ReloadEventCallback (line 143) | void HAL_LTDC_ReloadEventCallback(LTDC_HandleTypeDef *hltdc) {
  function STATIC (line 147) | STATIC void mp_rk043fn48h_ts_read(struct _lv_indev_t *indev_drv, lv_inde...
  function config_ltdc (line 191) | static bool config_ltdc(void) {
  function config_dma2d (line 258) | static bool config_dma2d(void) {
  function HAL_LTDC_MspInit (line 297) | void HAL_LTDC_MspInit(LTDC_HandleTypeDef *hltdc) {
  function HAL_LTDC_MspDeInit (line 355) | void HAL_LTDC_MspDeInit(LTDC_HandleTypeDef *hltdc) {
  function HAL_DMA2D_MspInit (line 361) | void HAL_DMA2D_MspInit(DMA2D_HandleTypeDef *hdma2d) {
  function TS_IO_Init (line 367) | void TS_IO_Init(void) {
  function TS_IO_Write (line 370) | void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) {
  function TS_IO_Read (line 378) | uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg) {
  function TS_IO_Delay (line 386) | void TS_IO_Delay(uint32_t Delay) {

FILE: lv_binding_micropython_tulip/driver/stm32/STM32F7DISC/stm32746g_discovery.h
  type Led_TypeDef (line 63) | typedef enum
  type Button_TypeDef (line 69) | typedef enum
  type ButtonMode_TypeDef (line 76) | typedef enum
  type COM_TypeDef (line 82) | typedef enum

FILE: lv_binding_micropython_tulip/driver/stm32/STM32F7DISC/stm32746g_discovery_ts.c
  function BSP_TS_Init (line 146) | uint8_t BSP_TS_Init(uint16_t ts_SizeX, uint16_t ts_SizeY)
  function BSP_TS_DeInit (line 176) | uint8_t BSP_TS_DeInit(void)
  function BSP_TS_ITConfig (line 186) | uint8_t BSP_TS_ITConfig(void)
  function BSP_TS_ITGetStatus (line 211) | uint8_t BSP_TS_ITGetStatus(void)
  function BSP_TS_GetState (line 222) | uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State)
  function BSP_TS_Get_GestureId (line 342) | uint8_t BSP_TS_Get_GestureId(TS_StateTypeDef *TS_State)
  function BSP_TS_ITClear (line 386) | void BSP_TS_ITClear(void)
  function BSP_TS_ResetTouchData (line 404) | uint8_t BSP_TS_ResetTouchData(TS_StateTypeDef *TS_State)

FILE: lv_binding_micropython_tulip/driver/stm32/STM32F7DISC/stm32746g_discovery_ts.h
  type TS_StateTypeDef (line 89) | typedef struct
  type TS_StatusTypeDef (line 112) | typedef enum
  type TS_GestureIdTypeDef (line 125) | typedef enum
  type TS_TouchEventTypeDef (line 143) | typedef enum

FILE: lv_binding_micropython_tulip/driver/stm32/STM32F7DISC/ts.h
  type TS_DrvTypeDef (line 68) | typedef struct

FILE: lv_binding_micropython_tulip/driver/zephyr/lvgl.c
  function lvgl_allocate_rendering_buffers (line 53) | static int lvgl_allocate_rendering_buffers(lv_disp_t *disp_drv)
  function lvgl_allocate_rendering_buffers (line 87) | static int lvgl_allocate_rendering_buffers(lv_disp_t *disp_drv)
  function lvgl_pointer_kscan_callback (line 159) | static void lvgl_pointer_kscan_callback(const struct device *dev,
  function lvgl_pointer_kscan_read (line 174) | static bool lvgl_pointer_kscan_read(lv_indev_t *drv, lv_indev_data_t *data)
  function lvgl_pointer_kscan_init (line 249) | static int lvgl_pointer_kscan_init(void)
  function lvgl_init (line 285) | int lvgl_init(const struct device *dev)

FILE: lv_binding_micropython_tulip/driver/zephyr/lvgl_driver.h
  type device (line 10) | struct device

FILE: lv_binding_micropython_tulip/driver/zephyr/modlvzephyr.c
  function STATIC (line 4) | STATIC mp_obj_t init() {

FILE: lv_binding_micropython_tulip/examples/advanced_demo.py
  function mp_trace (line 6) | def mp_trace(frame, event, arg):
  class ColorStyle (line 27) | class ColorStyle(lv.style_t):
    method __init__ (line 28) | def __init__(self, color):
  class ShadowStyle (line 37) | class ShadowStyle(lv.style_t):
    method __init__ (line 38) | def __init__(self):
  class ButtonStyle (line 48) | class ButtonStyle(lv.style_t):
    method __init__ (line 49) | def __init__(self):
  class ButtonPressedStyle (line 59) | class ButtonPressedStyle(lv.style_t):
    method __init__ (line 60) | def __init__(self):
  class AdvancedDemoTheme (line 70) | class AdvancedDemoTheme(lv.theme_t):
    method __init__ (line 72) | def __init__(self):
    method apply (line 89) | def apply(self, theme, obj):
  function get_member_name (line 98) | def get_member_name(obj, value):
  class SymbolButton (line 113) | class SymbolButton(lv.button):
    method __init__ (line 114) | def __init__(self, parent, symbol, text):
  class Page_Buttons (line 124) | class Page_Buttons:
    method __init__ (line 125) | def __init__(self, app, page):
  class Page_Simple (line 153) | class Page_Simple:
    method __init__ (line 154) | def __init__(self, app, page):
    method on_slider_changed (line 190) | def on_slider_changed(self, event):
    method on_style_selector_changed (line 193) | def on_style_selector_changed(self, event):
    method on_counter_button (line 200) | def on_counter_button(self, event):
  class Anim (line 204) | class Anim(lv.anim_t):
    method __init__ (line 205) | def __init__(self, obj, val, size, exec_cb, path_cb, time=500, playbac...
  class AnimatedChart (line 222) | class AnimatedChart(lv.chart):
    method __init__ (line 223) | def __init__(self, parent, val, size):
    method anim_phase1 (line 232) | def anim_phase1(self):
    method anim_phase2 (line 243) | def anim_phase2(self):
  class Page_Text (line 253) | class Page_Text:
    method __init__ (line 254) | def __init__(self, app, page):
  class Page_Chart (line 263) | class Page_Chart:
    method __init__ (line 264) | def __init__(self, app, page):
  class Screen_Main (line 298) | class Screen_Main(lv.obj):
    method __init__ (line 299) | def __init__(self, app, *args, **kwds):
  class AdvancedDemoApplication (line 310) | class AdvancedDemoApplication:
    method init_gui_SDL (line 311) | def init_gui_SDL(self):
    method init_gui_esp32 (line 323) | def init_gui_esp32(self):
    method init_gui_stm32 (line 350) | def init_gui_stm32(self):
    method init_gui_rp2 (line 375) | def init_gui_rp2(self):
    method init_gui (line 393) | def init_gui(self):

FILE: lv_binding_micropython_tulip/examples/custom_widget_example.py
  function get_member_name (line 22) | def get_member_name(obj, value):
  class CustomWidgetClass (line 41) | class CustomWidgetClass():
    method __init__ (line 43) | def __init__(self, width, height):
    method create (line 55) | def create(self, parent):
    method get_class (line 59) | def get_class(self):
    method constructor (line 63) | def constructor(self, lv_cls, obj):
    method destructor (line 71) | def destructor(self, lv_cls, obj):
    method event_cb (line 74) | def event_cb(self, lv_cls, e):
    method calc (line 97) | def calc(self, obj):
    method draw (line 120) | def draw(self, obj, layer):
  class CustomWidget (line 132) | class CustomWidget():
    method get_class (line 140) | def get_class():
    method __new__ (line 144) | def __new__(cls, parent):
    class CustomWidgetWrapper (line 150) | class CustomWidgetWrapper():
      method __init__ (line 152) | def __init__(self, parent):
      method __getattr__ (line 164) | def __getattr__(self, attr):
      method __repr__ (line 169) | def __repr__(self):
  class CustomTheme (line 176) | class CustomTheme(lv.theme_t):
    class Style (line 178) | class Style(lv.style_t):
      method __init__ (line 179) | def __init__(self):
    class PressedStyle (line 192) | class PressedStyle(lv.style_t):
      method __init__ (line 193) | def __init__(self):
    method __init__ (line 201) | def __init__(self):
    method apply (line 218) | def apply(self, theme, obj):
  function event_cb (line 248) | def event_cb(e):

FILE: lv_binding_micropython_tulip/examples/example1.py
  class driver (line 12) | class driver:
    method init_gui_SDL (line 13) | def init_gui_SDL(self):
    method init_gui_esp32 (line 18) | def init_gui_esp32(self):
    method init_gui_stm32 (line 37) | def init_gui_stm32(self):
    method init_gui (line 64) | def init_gui(self):

FILE: lv_binding_micropython_tulip/examples/example3.py
  function slider_event_cb (line 62) | def slider_event_cb(event):
  function button1_event_cb (line 65) | def button1_event_cb(event):
  function button2_event_cb (line 69) | def button2_event_cb(event):

FILE: lv_binding_micropython_tulip/examples/png_example.py
  function drag_event_handler (line 49) | def drag_event_handler(e):

FILE: lv_binding_micropython_tulip/examples/uasyncio_example1.py
  class MsgBox (line 69) | class MsgBox(lv.win):
    method drag_event_handler (line 71) | def drag_event_handler(self, e):
    method __init__ (line 79) | def __init__(self, parent):
    method is_open (line 111) | def is_open(self):
    method close_msg_box (line 114) | def close_msg_box(self):
    method set_text (line 128) | def set_text(self, txt):
  function btn_event_task (line 140) | async def btn_event_task(obj=None, event=-1):

FILE: lv_binding_micropython_tulip/gen/gen_mpy.py
  function memoize (line 19) | def memoize(func):
  function eprint (line 25) | def eprint(*args, **kwargs):
  function remove_declname (line 80) | def remove_declname(ast):
  function add_default_declname (line 91) | def add_default_declname(ast, name):
  function convert_array_to_ptr (line 103) | def convert_array_to_ptr(ast):
  function remove_quals (line 113) | def remove_quals(ast):
  function remove_explicit_struct (line 126) | def remove_explicit_struct(ast):
  function get_type (line 142) | def get_type(arg, **kwargs):
  function get_name (line 152) | def get_name(type):
  function remove_arg_names (line 173) | def remove_arg_names(ast):
  function function_prototype (line 184) | def function_prototype(func):
  function sanitize (line 219) | def sanitize(id, kwlist =
  function simplify_identifier (line 233) | def simplify_identifier(id):
  function obj_name_from_ext_name (line 237) | def obj_name_from_ext_name(ext_name):
  function obj_name_from_func_name (line 240) | def obj_name_from_func_name(func_name):
  function ctor_name_from_obj_name (line 243) | def ctor_name_from_obj_name(obj_name):
  function is_method_of (line 246) | def is_method_of(func_name, obj_name):
  function method_name_from_func_name (line 249) | def method_name_from_func_name(func_name):
  function get_enum_name (line 253) | def get_enum_name(enum):
  function str_enum_to_str (line 257) | def str_enum_to_str(str_enum):
  function is_obj_ctor (line 261) | def is_obj_ctor(func):
  function is_global_callback (line 272) | def is_global_callback(arg_type):
  function is_struct (line 283) | def is_struct(type):
  function has_ctor (line 398) | def has_ctor(obj_name):
  function get_ctor (line 401) | def get_ctor(obj_name):
  function get_methods (line 405) | def get_methods(obj_name):
  function noncommon_part (line 412) | def noncommon_part(member_name, stem_name):
  function get_first_arg (line 419) | def get_first_arg(func):
  function get_first_arg_type (line 429) | def get_first_arg_type(func):
  function get_base_struct_name (line 437) | def get_base_struct_name(struct_name):
  function get_struct_functions (line 443) | def get_struct_functions(struct_name):
  function is_struct_function (line 463) | def is_struct_function(func):
  function is_static_member (line 470) | def is_static_member(func, obj_type=base_obj_type):
  function get_enum_members (line 502) | def get_enum_members(obj_name):
  function get_enum_member_name (line 508) | def get_enum_member_name(enum_member):
  function get_enum_value (line 513) | def get_enum_value(obj_name, enum_member):
  class MissingConversionException (line 537) | class MissingConversionException(ValueError):
  function register_int_ptr_type (line 665) | def register_int_ptr_type(convertor, *types):
  function decl_to_callback (line 1784) | def decl_to_callback(decl):
  function get_user_data_accessors (line 1805) | def get_user_data_accessors(containing_struct, containing_struct_name = ...
  function get_user_data (line 1823) | def get_user_data(func, func_name = None, containing_struct = None, cont...
  function flatten_struct (line 1861) | def flatten_struct(struct_decls):
  function try_generate_struct (line 1871) | def try_generate_struct(struct_name, struct):
  function try_generate_array_type (line 2069) | def try_generate_array_type(type_ast):
  function get_arg_name (line 2164) | def get_arg_name(arg):
  function try_generate_type (line 2173) | def try_generate_type(type_ast):
  function create_helper_struct (line 2277) | def create_helper_struct(struct_str):
  function build_callback_func_arg (line 2309) | def build_callback_func_arg(arg, index, func, func_name = None):
  function gen_callback_func (line 2324) | def gen_callback_func(func, func_name = None, user_data_argument = False):
  function build_mp_func_arg (line 2413) | def build_mp_func_arg(arg, index, func, obj_name):
  function emit_func_obj (line 2494) | def emit_func_obj(func_obj_name, func_name, param_count, func_ptr, is_st...
  function gen_mp_func (line 2504) | def gen_mp_func(func, obj_name):
  function gen_func_error (line 2601) | def gen_func_error(method, exp):
  function gen_obj_methods (line 2622) | def gen_obj_methods(obj_name):
  function gen_obj (line 2647) | def gen_obj(obj_name):
  function try_generate_structs_from_first_argument (line 2769) | def try_generate_structs_from_first_argument():
  function gen_global (line 2791) | def gen_global(global_name, global_type_ast):
  function generate_struct_functions (line 2844) | def generate_struct_functions(struct_list):

FILE: lv_binding_micropython_tulip/gen/lv_mpy_example.c
  type mp_lv_obj_type_t (line 38) | typedef struct mp_lv_obj_type_t {
  function STATIC (line 46) | STATIC inline const mp_obj_type_t *get_BaseObj_type()
  type mp_obj_t (line 68) | typedef mp_obj_t (*mp_fun_ptr_var_t)(size_t n, const mp_obj_t *, void *p...
  type mp_lv_obj_fun_builtin_var_t (line 70) | typedef struct mp_lv_obj_fun_builtin_var_t {
  function STATIC (line 98) | STATIC mp_obj_t lv_fun_builtin_var_call(mp_obj_t self_in, size_t n_args,...
  function STATIC (line 106) | STATIC mp_int_t mp_func_get_buffer(mp_obj_t self_in, mp_buffer_info_t *b...
  type mp_lv_struct_t (line 128) | typedef struct mp_lv_struct_t
  function STATIC (line 139) | STATIC mp_int_t mp_lv_obj_get_buffer(mp_obj_t self_in, mp_buffer_info_t ...
  function STATIC (line 144) | STATIC mp_obj_t get_native_obj(mp_obj_t mp_obj)
  function STATIC (line 166) | STATIC mp_obj_t cast(mp_obj_t mp_obj, const mp_obj_type_t *mp_type)
  type mp_lv_obj_t (line 194) | typedef struct mp_lv_obj_t {
  function STATIC (line 200) | STATIC inline LV_OBJ_T *mp_to_lv(mp_obj_t mp_obj)
  function STATIC (line 215) | STATIC inline LV_OBJ_T *mp_get_callbacks(mp_obj_t mp_obj)
  function STATIC (line 229) | STATIC void mp_lv_delete_cb(lv_event_t * e)
  function STATIC (line 240) | STATIC inline mp_obj_t lv_to_mp(LV_OBJ_T *lv_obj)
  function STATIC (line 276) | STATIC mp_obj_t cast_obj_type(const mp_obj_type_t* type, mp_obj_t obj)
  function STATIC (line 288) | STATIC mp_obj_t cast_obj(mp_obj_t type_obj, mp_obj_t obj)
  function STATIC (line 293) | STATIC mp_obj_t make_new(
  function STATIC (line 322) | STATIC mp_int_t mp_lv_obj_get_buffer(mp_obj_t self_in, mp_buffer_info_t ...
  function STATIC (line 332) | STATIC mp_obj_t mp_lv_obj_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, ...
  type mp_lv_obj_type_t (line 349) | typedef struct mp_lv_obj_type_t {
  function STATIC (line 355) | STATIC inline mp_obj_t convert_to_bool(bool b)
  function STATIC (line 360) | STATIC inline mp_obj_t convert_to_str(const char *str)
  function STATIC (line 365) | STATIC inline const char *convert_from_str(mp_obj_t str)
  function STATIC (line 383) | STATIC mp_lv_struct_t *mp_to_lv_struct(mp_obj_t mp_obj)
  function STATIC (line 394) | STATIC inline size_t get_lv_struct_size(const mp_obj_type_t *type)
  function STATIC (line 400) | STATIC mp_obj_t make_new_lv_struct(
  function STATIC (line 429) | STATIC mp_obj_t lv_struct_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, ...
  function STATIC (line 444) | STATIC mp_obj_t lv_struct_subscr(mp_obj_t self_in, mp_obj_t index, mp_ob...
  function STATIC (line 491) | STATIC mp_obj_t lv_to_mp_struct(const mp_obj_type_t *type, void *lv_struct)
  function STATIC (line 502) | STATIC void call_parent_methods(mp_obj_t obj, qstr attr, mp_obj_t *dest)
  function STATIC (line 525) | STATIC mp_obj_t dict_to_struct(mp_obj_t dict, const mp_obj_type_t *type)
  function STATIC (line 547) | STATIC void* mp_to_ptr(mp_obj_t self_in)
  function STATIC (line 591) | STATIC void mp_blob_print(const mp_print_t *print,
  function STATIC (line 598) | STATIC mp_int_t mp_blob_get_buffer(mp_obj_t self_in, mp_buffer_info_t *b...
  function STATIC (line 614) | STATIC mp_obj_t mp_blob_cast(size_t argc, const mp_obj_t *argv)
  function STATIC (line 648) | STATIC inline mp_obj_t ptr_to_mp(void *data)
  function STATIC (line 655) | STATIC mp_obj_t mp_lv_cast(mp_obj_t type_obj, mp_obj_t ptr_obj)
  function STATIC (line 667) | STATIC inline mp_obj_t mp_lv_cast_instance(mp_obj_t self_in, mp_obj_t pt...
  function STATIC (line 681) | STATIC mp_obj_t mp_lv_dereference(size_t argc, const mp_obj_t *argv)
  function STATIC (line 707) | STATIC mp_obj_t get_callback_dict_from_user_data(void *user_data)
  function STATIC (line 725) | STATIC void *mp_lv_callback(mp_obj_t mp_callback, void *lv_callback, qst...
  function STATIC (line 757) | STATIC mp_obj_t mp_lv_funcptr(const mp_lv_obj_fun_builtin_var_t *mp_fun,...
  function mp_obj_get_ull (line 774) | STATIC unsigned long long mp_obj_get_ull(mp_obj_t obj)
  type mp_lv_array_t (line 788) | typedef struct mp_lv_array_t
  function STATIC (line 795) | STATIC void mp_lv_array_print(const mp_print_t *print,
  function STATIC (line 805) | STATIC mp_obj_t lv_array_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj...
  function mp_obj_t (line 874) | mp_obj_t mp_array_from_ptr(void *lv_arr, size_t element_size, bool is_si...
  type C_Pointer (line 1002) | typedef union {
  function STATIC (line 1016) | STATIC inline void* mp_write_ptr_C_Pointer(mp_obj_t self_in)
  function STATIC (line 1024) | STATIC inline mp_obj_t mp_read_ptr_C_Pointer(void *field)
  function STATIC (line 1032) | STATIC void mp_C_Pointer_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest)
  function STATIC (line 1065) | STATIC void mp_C_Pointer_print(const mp_print_t *print,
  function STATIC (line 1087) | STATIC inline const mp_obj_type_t *get_mp_C_Pointer_type()
  function STATIC (line 1105) | STATIC void LV_RES_print(const mp_print_t *print,
  function STATIC (line 1148) | STATIC void ENUM_LV_LOG_LEVEL_print(const mp_print_t *print,
  function STATIC (line 1207) | STATIC void LV_ALIGN_print(const mp_print_t *print,
  function STATIC (line 1252) | STATIC void LV_DIR_print(const mp_print_t *print,
  function STATIC (line 1291) | STATIC void ENUM_LV_COORD_print(const mp_print_t *print,
  function STATIC (line 1332) | STATIC void LV_FONT_SUBPX_print(const mp_print_t *print,
  function STATIC (line 1382) | STATIC void LV_OPA_print(const mp_print_t *print,
  function STATIC (line 1423) | STATIC void LV_TEXT_FLAG_print(const mp_print_t *print,
  function STATIC (line 1463) | STATIC void LV_TEXT_CMD_STATE_print(const mp_print_t *print,
  function STATIC (line 1504) | STATIC void LV_TEXT_ALIGN_print(const mp_print_t *print,
  function STATIC (line 1546) | STATIC void LV_BASE_DIR_print(const mp_print_t *print,
  function STATIC (line 1588) | STATIC void LV_BLEND_MODE_print(const mp_print_t *print,
  function STATIC (line 1628) | STATIC void LV_TEXT_DECOR_print(const mp_print_t *print,
  function STATIC (line 1672) | STATIC void LV_BORDER_SIDE_print(const mp_print_t *print,
  function STATIC (line 1712) | STATIC void LV_GRAD_DIR_print(const mp_print_t *print,
  function STATIC (line 1752) | STATIC void LV_DITHER_print(const mp_print_t *print,
  function STATIC (line 1879) | STATIC void LV_STYLE_print(const mp_print_t *print,
  function STATIC (line 1919) | STATIC void LV_STYLE_RES_print(const mp_print_t *print,
  function STATIC (line 1970) | STATIC void LV_STATE_print(const mp_print_t *print,
  function STATIC (line 2017) | STATIC void LV_PART_print(const mp_print_t *print,
  function STATIC (line 2083) | STATIC void LV_OBJ_FLAG_print(const mp_print_t *print,
  function STATIC (line 2124) | STATIC void LV_SCROLLBAR_MODE_print(const mp_print_t *print,
  function STATIC (line 2165) | STATIC void LV_SCROLL_SNAP_print(const mp_print_t *print,
  function STATIC (line 2215) | STATIC void LV_FS_RES_print(const mp_print_t *print,
  function STATIC (line 2254) | STATIC void LV_FS_MODE_print(const mp_print_t *print,
  function STATIC (line 2295) | STATIC void LV_IMG_SRC_print(const mp_print_t *print,
  function STATIC (line 2336) | STATIC void LV_DRAW_MASK_RES_print(const mp_print_t *print,
  function STATIC (line 2379) | STATIC void LV_DRAW_MASK_TYPE_print(const mp_print_t *print,
  function STATIC (line 2420) | STATIC void LV_DRAW_MASK_LINE_SIDE_print(const mp_print_t *print,
  function STATIC (line 2469) | STATIC void LV_KEY_print(const mp_print_t *print,
  function STATIC (line 2510) | STATIC void LV_FONT_FMT_TXT_CMAP_print(const mp_print_t *print,
  function STATIC (line 2549) | STATIC void LV_IMG_SIZE_MODE_print(const mp_print_t *print,
  function STATIC (line 2587) | STATIC void LV_ANIM_IMG_PART_print(const mp_print_t *print,
  function STATIC (line 2627) | STATIC void LV_ARC_MODE_print(const mp_print_t *print,
  function STATIC (line 2669) | STATIC void LV_LABEL_LONG_print(const mp_print_t *print,
  function STATIC (line 2709) | STATIC void LV_BAR_MODE_print(const mp_print_t *print,
  function STATIC (line 2756) | STATIC void LV_BTNMATRIX_CTRL_print(const mp_print_t *print,
  function STATIC (line 2797) | STATIC void LV_CHART_TYPE_print(const mp_print_t *print,
  function STATIC (line 2836) | STATIC void LV_CHART_UPDATE_MODE_print(const mp_print_t *print,
  function STATIC (line 2877) | STATIC void LV_CHART_AXIS_print(const mp_print_t *print,
  function STATIC (line 2917) | STATIC void LV_COLORWHEEL_MODE_print(const mp_print_t *print,
  function STATIC (line 2963) | STATIC void LV_KEYBOARD_MODE_print(const mp_print_t *print,
  function STATIC (line 3003) | STATIC void LV_MENU_HEADER_print(const mp_print_t *print,
  function STATIC (line 3042) | STATIC void LV_MENU_ROOT_BACK_BTN_print(const mp_print_t *print,
  function STATIC (line 3083) | STATIC void LV_METER_INDICATOR_TYPE_print(const mp_print_t *print,
  function STATIC (line 3122) | STATIC void LV_ROLLER_MODE_print(const mp_print_t *print,
  function STATIC (line 3162) | STATIC void LV_SLIDER_MODE_print(const mp_print_t *print,
  function STATIC (line 3201) | STATIC void LV_SPAN_OVERFLOW_print(const mp_print_t *print,
  function STATIC (line 3241) | STATIC void LV_SPAN_MODE_print(const mp_print_t *print,
  function STATIC (line 3279) | STATIC void LV_PART_TEXTAREA_print(const mp_print_t *print,
  function STATIC (line 3322) | STATIC void LV_TABLE_CELL_CTRL_print(const mp_print_t *print,
  function STATIC (line 3361) | STATIC void LV_ANIM_print(const mp_print_t *print,
  function STATIC (line 3425) | STATIC void LV_COLOR_FORMAT_print(const mp_print_t *print,
  function STATIC (line 3482) | STATIC void LV_PALETTE_print(const mp_print_t *print,
  function STATIC (line 3522) | STATIC void LV_OBJ_DRAW_PART_print(const mp_print_t *print,
  function STATIC (line 3613) | STATIC void LV_EVENT_print(const mp_print_t *print,
  function STATIC (line 3654) | STATIC void LV_DISP_ROTATION_print(const mp_print_t *print,
  function STATIC (line 3694) | STATIC void LV_DISP_RENDER_MODE_print(const mp_print_t *print,
  function STATIC (line 3747) | STATIC void LV_SCR_LOAD_ANIM_print(const mp_print_t *print,
  function STATIC (line 3787) | STATIC void LV_OBJ_TREE_WALK_print(const mp_print_t *print,
  function STATIC (line 3827) | STATIC void LV_FS_SEEK_print(const mp_print_t *print,
  function STATIC (line 3867) | STATIC void LV_DRAW_LAYER_FLAG_print(const mp_print_t *print,
  function STATIC (line 3907) | STATIC void LV_COVER_RES_print(const mp_print_t *print,
  function STATIC (line 3947) | STATIC void LV_LAYER_TYPE_print(const mp_print_t *print,
  function STATIC (line 3987) | STATIC void LV_OBJ_CLASS_EDITABLE_print(const mp_print_t *print,
  function STATIC (line 4027) | STATIC void LV_OBJ_CLASS_GROUP_DEF_print(const mp_print_t *print,
  function STATIC (line 4066) | STATIC void LV_OBJ_CLASS_THEME_INHERITABLE_print(const mp_print_t *print,
  function STATIC (line 4105) | STATIC void LV_GROUP_REFOCUS_POLICY_print(const mp_print_t *print,
  function STATIC (line 4147) | STATIC void LV_INDEV_TYPE_print(const mp_print_t *print,
  function STATIC (line 4186) | STATIC void LV_INDEV_STATE_print(const mp_print_t *print,
  function STATIC (line 4226) | STATIC void LV_FONT_FMT_TXT_print(const mp_print_t *print,
  function STATIC (line 4266) | STATIC void LV_ARC_DRAW_PART_print(const mp_print_t *print,
  function STATIC (line 4304) | STATIC void LV_BAR_DRAW_PART_print(const mp_print_t *print,
  function STATIC (line 4342) | STATIC void LV_BTNMATRIX_DRAW_PART_print(const mp_print_t *print,
  function STATIC (line 4386) | STATIC void LV_CHART_DRAW_PART_print(const mp_print_t *print,
  function STATIC (line 4424) | STATIC void LV_CHECKBOX_DRAW_PART_print(const mp_print_t *print,
  function STATIC (line 4467) | STATIC void LV_IMGBTN_STATE_print(const mp_print_t *print,
  function STATIC (line 4505) | STATIC void LV_LED_DRAW_PART_print(const mp_print_t *print,
  function STATIC (line 4546) | STATIC void LV_METER_DRAW_PART_print(const mp_print_t *print,
  function STATIC (line 4585) | STATIC void LV_SLIDER_DRAW_PART_print(const mp_print_t *print,
  function STATIC (line 4623) | STATIC void LV_TABLE_DRAW_PART_print(const mp_print_t *print,
  function STATIC (line 4663) | STATIC void LV_GRIDNAV_CTRL_print(const mp_print_t *print,
  function STATIC (line 4703) | STATIC void LV_IME_PINYIN_MODE_print(const mp_print_t *print,
  function STATIC (line 4742) | STATIC void LV_EXPLORER_SORT_print(const mp_print_t *print,
  function STATIC (line 4785) | STATIC void LV_EXPLORER_print(const mp_print_t *print,
  function STATIC (line 4828) | STATIC void LV_FLEX_ALIGN_print(const mp_print_t *print,
  function STATIC (line 4873) | STATIC void LV_FLEX_FLOW_print(const mp_print_t *print,
  function STATIC (line 4917) | STATIC void LV_GRID_ALIGN_print(const mp_print_t *print,
  function STATIC (line 5016) | STATIC void LV_SYMBOL_print(const mp_print_t *print,
  function STATIC (line 5048) | STATIC mp_obj_t mp_lv_obj_center(size_t mp_n_args, const mp_obj_t *mp_ar...
  function STATIC (line 5065) | STATIC mp_obj_t mp_lv_obj_get_style_width(size_t mp_n_args, const mp_obj...
  function STATIC (line 5111) | STATIC mp_obj_t mp_lv_obj_get_style_align(size_t mp_n_args, const mp_obj...
  function STATIC (line 5202) | STATIC inline void* mp_write_ptr_lv_color32_t(mp_obj_t self_in)
  function STATIC (line 5210) | STATIC inline mp_obj_t mp_read_ptr_lv_color32_t(void *field)
  function STATIC (line 5218) | STATIC void mp_lv_color32_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *...
  function STATIC (line 5251) | STATIC void mp_lv_color32_t_print(const mp_print_t *print,
  function STATIC (line 5273) | STATIC inline const mp_obj_type_t *get_mp_lv_color32_t_type()
  function STATIC (line 5284) | STATIC mp_obj_t mp_lv_obj_get_style_bg_color(size_t mp_n_args, const mp_...
  function STATIC (line 5306) | STATIC mp_obj_t mp_lv_obj_get_style_bg_opa(size_t mp_n_args, const mp_ob...
  function STATIC (line 5332) | STATIC mp_obj_t mp_lv_obj_get_style_bg_grad_dir(size_t mp_n_args, const ...
  function STATIC (line 5359) | STATIC inline void* mp_write_ptr_lv_gradient_stop_t(mp_obj_t self_in)
  function STATIC (line 5367) | STATIC inline mp_obj_t mp_read_ptr_lv_gradient_stop_t(void *field)
  function STATIC (line 5375) | STATIC void mp_lv_gradient_stop_t_attr(mp_obj_t self_in, qstr attr, mp_o...
  function STATIC (line 5404) | STATIC void mp_lv_gradient_stop_t_print(const mp_print_t *print,
  function STATIC (line 5426) | STATIC inline const mp_obj_type_t *get_mp_lv_gradient_stop_t_type()
  function lv_gradient_stop_t (line 5436) | lv_gradient_stop_t *mp_arr_to_lv_gradient_stop_t___2__(mp_obj_t mp_arr)
  function mp_obj_t (line 5452) | mp_obj_t mp_arr_from_lv_gradient_stop_t___2__(lv_gradient_stop_t *arr)
  function STATIC (line 5468) | STATIC inline void* mp_write_ptr_lv_grad_dsc_t(mp_obj_t self_in)
  function STATIC (line 5476) | STATIC inline mp_obj_t mp_read_ptr_lv_grad_dsc_t(void *field)
  function STATIC (line 5484) | STATIC void mp_lv_grad_dsc_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t ...
  function STATIC (line 5517) | STATIC void mp_lv_grad_dsc_t_print(const mp_print_t *print,
  function STATIC (line 5539) | STATIC inline const mp_obj_type_t *get_mp_lv_grad_dsc_t_type()
  function STATIC (line 5550) | STATIC mp_obj_t mp_lv_obj_get_style_bg_grad(size_t mp_n_args, const mp_o...
  function STATIC (line 5568) | STATIC mp_obj_t mp_lv_obj_get_style_bg_dither_mode(size_t mp_n_args, con...
  function STATIC (line 5586) | STATIC mp_obj_t mp_lv_obj_get_style_bg_img_src(size_t mp_n_args, const m...
  function STATIC (line 5620) | STATIC mp_obj_t mp_lv_obj_get_style_bg_img_tiled(size_t mp_n_args, const...
  function STATIC (line 5654) | STATIC mp_obj_t mp_lv_obj_get_style_border_side(size_t mp_n_args, const ...
  function STATIC (line 5807) | STATIC inline void* mp_write_ptr_lv_font_glyph_dsc_t(mp_obj_t self_in)
  function STATIC (line 5815) | STATIC inline mp_obj_t mp_read_ptr_lv_font_glyph_dsc_t(void *field)
  function STATIC (line 5823) | STATIC void mp_lv_font_glyph_dsc_t_attr(mp_obj_t self_in, qstr attr, mp_...
  function STATIC (line 5864) | STATIC void mp_lv_font_glyph_dsc_t_print(const mp_print_t *print,
  function STATIC (line 5886) | STATIC inline const mp_obj_type_t *get_mp_lv_font_glyph_dsc_t_type()
  function STATIC (line 5897) | STATIC mp_obj_t mp_funcptr_get_glyph_dsc(size_t mp_n_args, const mp_obj_...
  function STATIC (line 5911) | STATIC inline mp_obj_t mp_lv_funcptr_get_glyph_dsc(void *func){ return m...
  type _lv_font_t (line 5913) | struct _lv_font_t
  function STATIC (line 5922) | STATIC mp_obj_t mp_funcptr_get_glyph_bitmap(size_t mp_n_args, const mp_o...
  function STATIC (line 5934) | STATIC inline mp_obj_t mp_lv_funcptr_get_glyph_bitmap(void *func){ retur...
  type _lv_font_t (line 5936) | struct _lv_font_t
  function STATIC (line 5944) | STATIC inline void* mp_write_ptr_lv_font_t(mp_obj_t self_in)
  function STATIC (line 5952) | STATIC inline mp_obj_t mp_read_ptr_lv_font_t(void *field)
  function STATIC (line 5960) | STATIC void mp_lv_font_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest)
  function STATIC (line 6005) | STATIC void mp_lv_font_t_print(const mp_print_t *print,
  function STATIC (line 6027) | STATIC inline const mp_obj_type_t *get_mp_lv_font_t_type()
  function STATIC (line 6038) | STATIC mp_obj_t mp_lv_obj_get_style_text_font(size_t mp_n_args, const mp...
  function STATIC (line 6064) | STATIC mp_obj_t mp_lv_obj_get_style_text_decor(size_t mp_n_args, const m...
  function STATIC (line 6082) | STATIC mp_obj_t mp_lv_obj_get_style_text_align(size_t mp_n_args, const m...
  function STATIC (line 6114) | STATIC mp_obj_t mp_funcptr_lv_color_filter_cb_t(size_t mp_n_args, const ...
  function STATIC (line 6127) | STATIC inline mp_obj_t mp_lv_funcptr_lv_color_filter_cb_t(void *func){ r...
  type _lv_color_filter_dsc_t (line 6129) | struct _lv_color_filter_dsc_t
  function STATIC (line 6137) | STATIC inline void* mp_write_ptr_lv_color_filter_dsc_t(mp_obj_t self_in)
  function STATIC (line 6145) | STATIC inline mp_obj_t mp_read_ptr_lv_color_filter_dsc_t(void *field)
  function STATIC (line 6153) | STATIC void mp_lv_color_filter_dsc_t_attr(mp_obj_t self_in, qstr attr, m...
  function STATIC (line 6182) | STATIC void mp_lv_color_filter_dsc_t_print(const mp_print_t *print,
  function STATIC (line 6204) | STATIC inline const mp_obj_type_t *get_mp_lv_color_filter_dsc_t_type()
  function STATIC (line 6215) | STATIC mp_obj_t mp_lv_obj_get_style_color_filter_dsc(size_t mp_n_args, c...
  function STATIC (line 6239) | STATIC mp_obj_t mp_funcptr_lv_anim_exec_xcb_t(size_t mp_n_args, const mp...
  function STATIC (line 6251) | STATIC inline mp_obj_t mp_lv_funcptr_lv_anim_exec_xcb_t(void *func){ ret...
  function STATIC (line 6268) | STATIC mp_obj_t mp_funcptr_lv_anim_start_cb_t(size_t mp_n_args, const mp...
  function STATIC (line 6279) | STATIC inline mp_obj_t mp_lv_funcptr_lv_anim_start_cb_t(void *func){ ret...
  type _lv_anim_t (line 6281) | struct _lv_anim_t
  type _lv_anim_t (line 6282) | struct _lv_anim_t
  type _lv_anim_t (line 6283) | struct _lv_anim_t
  function STATIC (line 6292) | STATIC mp_obj_t mp_funcptr_lv_anim_get_value_cb_t(size_t mp_n_args, cons...
  function STATIC (line 6303) | STATIC inline mp_obj_t mp_lv_funcptr_lv_anim_get_value_cb_t(void *func){...
  type _lv_anim_t (line 6305) | struct _lv_anim_t
  type _lv_anim_t (line 6306) | struct _lv_anim_t
  function STATIC (line 6314) | STATIC inline void* mp_write_ptr_lv_anim_t(mp_obj_t self_in)
  function STATIC (line 6322) | STATIC inline mp_obj_t mp_read_ptr_lv_anim_t(void *field)
  function STATIC (line 6330) | STATIC void mp_lv_anim_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest)
  function STATIC (line 6399) | STATIC void mp_lv_anim_t_print(const mp_print_t *print,
  function STATIC (line 6421) | STATIC inline const mp_obj_type_t *get_mp_lv_anim_t_type()
  function STATIC (line 6432) | STATIC mp_obj_t mp_lv_obj_get_style_anim(size_t mp_n_args, const mp_obj_...
  function STATIC (line 6450) | STATIC mp_obj_t mp_lv_obj_get_style_anim_time(size_t mp_n_args, const mp...
  function STATIC (line 6480) | STATIC inline void* mp_write_ptr_lv_style_transition_dsc_t(mp_obj_t self...
  function STATIC (line 6488) | STATIC inline mp_obj_t mp_read_ptr_lv_style_transition_dsc_t(void *field)
  function STATIC (line 6496) | STATIC void mp_lv_style_transition_dsc_t_attr(mp_obj_t self_in, qstr att...
  function STATIC (line 6531) | STATIC void mp_lv_style_transition_dsc_t_print(const mp_print_t *print,
  function STATIC (line 6553) | STATIC inline const mp_obj_type_t *get_mp_lv_style_transition_dsc_t_type()
  function STATIC (line 6564) | STATIC mp_obj_t mp_lv_obj_get_style_transition(size_t mp_n_args, const m...
  function STATIC (line 6582) | STATIC mp_obj_t mp_lv_obj_get_style_blend_mode(size_t mp_n_args, const m...
  function STATIC (line 6600) | STATIC mp_obj_t mp_lv_obj_get_style_layout(size_t mp_n_args, const mp_ob...
  function STATIC (line 6618) | STATIC mp_obj_t mp_lv_obj_get_style_base_dir(size_t mp_n_args, const mp_...
  function STATIC (line 6636) | STATIC mp_obj_t mp_lv_obj_set_style_pad_all(size_t mp_n_args, const mp_o...
  function STATIC (line 6679) | STATIC mp_obj_t mp_lv_obj_set_style_size(size_t mp_n_args, const mp_obj_...
  function STATIC (line 6715) | STATIC mp_obj_t mp_lv_obj_set_user_data(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 6733) | STATIC mp_obj_t mp_lv_obj_get_user_data(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 6750) | STATIC mp_obj_t mp_lv_obj_get_style_flex_flow(size_t mp_n_args, const mp...
  function STATIC (line 6768) | STATIC mp_obj_t mp_lv_obj_get_style_flex_main_place(size_t mp_n_args, co...
  function STATIC (line 6794) | STATIC mp_obj_t mp_lv_obj_get_style_flex_grow(size_t mp_n_args, const mp...
  function STATIC (line 6826) | STATIC mp_obj_t mp_lv_obj_get_style_grid_row_align(size_t mp_n_args, con...
  function STATIC (line 6848) | STATIC mp_obj_t mp_lv_obj_get_style_grid_cell_column_pos(size_t mp_n_arg...
  function STATIC (line 6886) | STATIC mp_obj_t mp_lv_obj_move_foreground(size_t mp_n_args, const mp_obj...
  function STATIC (line 6907) | STATIC mp_obj_t mp_lv_obj_get_child_id(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 6932) | STATIC mp_obj_t mp_lv_obj_del_delayed(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 6950) | STATIC mp_obj_t mp_lv_obj_del_anim_ready_cb(size_t mp_n_args, const mp_o...
  function STATIC (line 6971) | STATIC mp_obj_t mp_lv_obj_set_parent(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 6993) | STATIC mp_obj_t mp_lv_obj_move_to_index(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 7011) | STATIC mp_obj_t mp_lv_obj_get_screen(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 7031) | STATIC inline void* mp_write_ptr_lv_area_t(mp_obj_t self_in)
  function STATIC (line 7039) | STATIC inline mp_obj_t mp_read_ptr_lv_area_t(void *field)
  function STATIC (line 7047) | STATIC void mp_lv_area_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest)
  function STATIC (line 7080) | STATIC void mp_lv_area_t_print(const mp_print_t *print,
  function STATIC (line 7102) | STATIC inline const mp_obj_type_t *get_mp_lv_area_t_type()
  function STATIC (line 7113) | STATIC mp_obj_t mp_funcptr_flush_cb(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 7126) | STATIC inline mp_obj_t mp_lv_funcptr_flush_cb(void *func){ return mp_lv_...
  type _lv_disp_t (line 7128) | struct _lv_disp_t
  function lv_area_t (line 7134) | lv_area_t *mp_arr_to_lv_area_t___32__(mp_obj_t mp_arr)
  function mp_obj_t (line 7150) | mp_obj_t mp_arr_from_lv_area_t___32__(lv_area_t *arr)
  function mp_obj_t (line 7180) | mp_obj_t mp_arr_from_uint8_t___32__(uint8_t *arr)
  function STATIC (line 7197) | STATIC mp_obj_t mp_funcptr_init_buf(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 7208) | STATIC inline mp_obj_t mp_lv_funcptr_init_buf(void *func){ return mp_lv_...
  type _lv_draw_ctx_t (line 7210) | struct _lv_draw_ctx_t
  function STATIC (line 7220) | STATIC inline void* mp_write_ptr_lv_draw_rect_dsc_t(mp_obj_t self_in)
  function STATIC (line 7228) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_rect_dsc_t(void *field)
  function STATIC (line 7236) | STATIC void mp_lv_draw_rect_dsc_t_attr(mp_obj_t self_in, qstr attr, mp_o...
  function STATIC (line 7313) | STATIC void mp_lv_draw_rect_dsc_t_print(const mp_print_t *print,
  function STATIC (line 7335) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_rect_dsc_t_type()
  function STATIC (line 7346) | STATIC mp_obj_t mp_funcptr_draw_rect(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 7359) | STATIC inline mp_obj_t mp_lv_funcptr_draw_rect(void *func){ return mp_lv...
  type _lv_draw_ctx_t (line 7361) | struct _lv_draw_ctx_t
  function STATIC (line 7371) | STATIC inline void* mp_write_ptr_lv_draw_arc_dsc_t(mp_obj_t self_in)
  function STATIC (line 7379) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_arc_dsc_t(void *field)
  function STATIC (line 7387) | STATIC void mp_lv_draw_arc_dsc_t_attr(mp_obj_t self_in, qstr attr, mp_ob...
  function STATIC (line 7428) | STATIC void mp_lv_draw_arc_dsc_t_print(const mp_print_t *print,
  function STATIC (line 7450) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_arc_dsc_t_type()
  function STATIC (line 7462) | STATIC inline void* mp_write_ptr_lv_point_t(mp_obj_t self_in)
  function STATIC (line 7470) | STATIC inline mp_obj_t mp_read_ptr_lv_point_t(void *field)
  function STATIC (line 7478) | STATIC void mp_lv_point_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest)
  function STATIC (line 7507) | STATIC void mp_lv_point_t_print(const mp_print_t *print,
  function STATIC (line 7529) | STATIC inline const mp_obj_type_t *get_mp_lv_point_t_type()
  function STATIC (line 7540) | STATIC mp_obj_t mp_funcptr_draw_arc(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 7556) | STATIC inline mp_obj_t mp_lv_funcptr_draw_arc(void *func){ return mp_lv_...
  type _lv_draw_ctx_t (line 7558) | struct _lv_draw_ctx_t
  function STATIC (line 7568) | STATIC inline void* mp_write_ptr_lv_draw_img_sup_t(mp_obj_t self_in)
  function STATIC (line 7576) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_img_sup_t(void *field)
  function STATIC (line 7584) | STATIC void mp_lv_draw_img_sup_t_attr(mp_obj_t self_in, qstr attr, mp_ob...
  function STATIC (line 7619) | STATIC void mp_lv_draw_img_sup_t_print(const mp_print_t *print,
  function STATIC (line 7641) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_img_sup_t_type()
  function STATIC (line 7653) | STATIC inline void* mp_write_ptr_lv_draw_img_dsc_t(mp_obj_t self_in)
  function STATIC (line 7661) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_img_dsc_t(void *field)
  function STATIC (line 7669) | STATIC void mp_lv_draw_img_dsc_t_attr(mp_obj_t self_in, qstr attr, mp_ob...
  function STATIC (line 7716) | STATIC void mp_lv_draw_img_dsc_t_print(const mp_print_t *print,
  function STATIC (line 7738) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_img_dsc_t_type()
  function STATIC (line 7749) | STATIC mp_obj_t mp_funcptr_draw_img_decoded(size_t mp_n_args, const mp_o...
  function STATIC (line 7765) | STATIC inline mp_obj_t mp_lv_funcptr_draw_img_decoded(void *func){ retur...
  type _lv_draw_ctx_t (line 7767) | struct _lv_draw_ctx_t
  function STATIC (line 7776) | STATIC mp_obj_t mp_funcptr_draw_img(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 7790) | STATIC inline mp_obj_t mp_lv_funcptr_draw_img(void *func){ return mp_lv_...
  type _lv_draw_ctx_t (line 7792) | struct _lv_draw_ctx_t
  function STATIC (line 7802) | STATIC inline void* mp_write_ptr_lv_draw_label_dsc_t(mp_obj_t self_in)
  function STATIC (line 7810) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_label_dsc_t(void *field)
  function STATIC (line 7818) | STATIC void mp_lv_draw_label_dsc_t_attr(mp_obj_t self_in, qstr attr, mp_...
  function STATIC (line 7875) | STATIC void mp_lv_draw_label_dsc_t_print(const mp_print_t *print,
  function STATIC (line 7897) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_label_dsc_t_type()
  function STATIC (line 7908) | STATIC mp_obj_t mp_funcptr_draw_letter(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 7922) | STATIC inline mp_obj_t mp_lv_funcptr_draw_letter(void *func){ return mp_...
  type _lv_draw_ctx_t (line 7924) | struct _lv_draw_ctx_t
  function STATIC (line 7934) | STATIC inline void* mp_write_ptr_lv_draw_line_dsc_t(mp_obj_t self_in)
  function STATIC (line 7942) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_line_dsc_t(void *field)
  function STATIC (line 7950) | STATIC void mp_lv_draw_line_dsc_t_attr(mp_obj_t self_in, qstr attr, mp_o...
  function STATIC (line 7993) | STATIC void mp_lv_draw_line_dsc_t_print(const mp_print_t *print,
  function STATIC (line 8015) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_line_dsc_t_type()
  function STATIC (line 8026) | STATIC mp_obj_t mp_funcptr_draw_line(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 8040) | STATIC inline mp_obj_t mp_lv_funcptr_draw_line(void *func){ return mp_lv...
  type _lv_draw_ctx_t (line 8042) | struct _lv_draw_ctx_t
  function lv_point_t (line 8050) | lv_point_t *mp_arr_to_lv_point_t_____(mp_obj_t mp_arr)
  function mp_obj_t (line 8066) | mp_obj_t mp_arr_from_lv_point_t_____(const lv_point_t *arr)
  function STATIC (line 8077) | STATIC mp_obj_t mp_funcptr_draw_polygon(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 8091) | STATIC inline mp_obj_t mp_lv_funcptr_draw_polygon(void *func){ return mp...
  type _lv_draw_ctx_t (line 8093) | struct _lv_draw_ctx_t
  function STATIC (line 8102) | STATIC mp_obj_t mp_funcptr_draw_transform(size_t mp_n_args, const mp_obj...
  function STATIC (line 8123) | STATIC inline mp_obj_t mp_lv_funcptr_draw_transform(void *func){ return ...
  type _lv_draw_ctx_t (line 8125) | struct _lv_draw_ctx_t
  type _lv_draw_ctx_t (line 8126) | struct _lv_draw_ctx_t
  function STATIC (line 8135) | STATIC mp_obj_t mp_funcptr_buffer_copy(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 8152) | STATIC inline mp_obj_t mp_lv_funcptr_buffer_copy(void *func){ return mp_...
  type _lv_draw_ctx_t (line 8154) | struct _lv_draw_ctx_t
  type _lv_draw_ctx_t (line 8155) | struct _lv_draw_ctx_t
  type _lv_draw_ctx_t (line 8156) | struct _lv_draw_ctx_t
  type __typeof__ (line 8159) | typedef __typeof__( ((lv_draw_layer_ctx_t*)(0))->original )
  function STATIC (line 8167) | STATIC inline void* mp_write_ptr_lv_draw_layer_ctx_original_t(mp_obj_t s...
  function STATIC (line 8175) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_layer_ctx_original_t(void *fi...
  function STATIC (line 8183) | STATIC void mp_lv_draw_layer_ctx_original_t_attr(mp_obj_t self_in, qstr ...
  function STATIC (line 8216) | STATIC void mp_lv_draw_layer_ctx_original_t_print(const mp_print_t *print,
  function STATIC (line 8238) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_layer_ctx_original_t_t...
  function STATIC (line 8250) | STATIC inline void* mp_write_ptr_lv_draw_layer_ctx_t(mp_obj_t self_in)
  function STATIC (line 8258) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_layer_ctx_t(void *field)
  function STATIC (line 8266) | STATIC void mp_lv_draw_layer_ctx_t_attr(mp_obj_t self_in, qstr attr, mp_...
  function STATIC (line 8303) | STATIC void mp_lv_draw_layer_ctx_t_print(const mp_print_t *print,
  function STATIC (line 8325) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_layer_ctx_t_type()
  function STATIC (line 8336) | STATIC mp_obj_t mp_funcptr_layer_init(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 8349) | STATIC inline mp_obj_t mp_lv_funcptr_layer_init(void *func){ return mp_l...
  type _lv_draw_ctx_t (line 8351) | struct _lv_draw_ctx_t
  type _lv_draw_layer_ctx_t (line 8351) | struct _lv_draw_layer_ctx_t
  function STATIC (line 8360) | STATIC mp_obj_t mp_funcptr_layer_adjust(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 8373) | STATIC inline mp_obj_t mp_lv_funcptr_layer_adjust(void *func){ return mp...
  type _lv_draw_ctx_t (line 8375) | struct _lv_draw_ctx_t
  type _lv_draw_layer_ctx_t (line 8375) | struct _lv_draw_layer_ctx_t
  function STATIC (line 8384) | STATIC mp_obj_t mp_funcptr_layer_blend(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 8397) | STATIC inline mp_obj_t mp_lv_funcptr_layer_blend(void *func){ return mp_...
  type _lv_draw_ctx_t (line 8399) | struct _lv_draw_ctx_t
  type _lv_draw_layer_ctx_t (line 8399) | struct _lv_draw_layer_ctx_t
  function STATIC (line 8408) | STATIC mp_obj_t mp_funcptr_layer_destroy(size_t mp_n_args, const mp_obj_...
  function STATIC (line 8420) | STATIC inline mp_obj_t mp_lv_funcptr_layer_destroy(void *func){ return m...
  type _lv_draw_ctx_t (line 8422) | struct _lv_draw_ctx_t
  function STATIC (line 8430) | STATIC inline void* mp_write_ptr_lv_draw_ctx_t(mp_obj_t self_in)
  function STATIC (line 8438) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_ctx_t(void *field)
  function STATIC (line 8446) | STATIC void mp_lv_draw_ctx_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t ...
  function STATIC (line 8517) | STATIC void mp_lv_draw_ctx_t_print(const mp_print_t *print,
  function STATIC (line 8539) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_ctx_t_type()
  function STATIC (line 8552) | STATIC mp_obj_t mp_funcptr_draw_ctx_init(size_t mp_n_args, const mp_obj_...
  function STATIC (line 8564) | STATIC inline mp_obj_t mp_lv_funcptr_draw_ctx_init(void *func){ return m...
  type _lv_disp_t (line 8566) | struct _lv_disp_t
  type _lv_disp_t (line 8567) | struct _lv_disp_t
  function STATIC (line 8575) | STATIC inline void* mp_write_ptr_lv_event_dsc_t(mp_obj_t self_in)
  function STATIC (line 8583) | STATIC inline mp_obj_t mp_read_ptr_lv_event_dsc_t(void *field)
  function STATIC (line 8591) | STATIC void mp_lv_event_dsc_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t...
  function STATIC (line 8618) | STATIC void mp_lv_event_dsc_t_print(const mp_print_t *print,
  function STATIC (line 8640) | STATIC inline const mp_obj_type_t *get_mp_lv_event_dsc_t_type()
  function STATIC (line 8652) | STATIC inline void* mp_write_ptr_lv_event_list_t(mp_obj_t self_in)
  function STATIC (line 8660) | STATIC inline mp_obj_t mp_read_ptr_lv_event_list_t(void *field)
  function STATIC (line 8668) | STATIC void mp_lv_event_list_t_attr(mp_obj_t self_in, qstr attr, mp_obj_...
  function STATIC (line 8697) | STATIC void mp_lv_event_list_t_print(const mp_print_t *print,
  function STATIC (line 8719) | STATIC inline const mp_obj_type_t *get_mp_lv_event_list_t_type()
  function STATIC (line 8732) | STATIC mp_obj_t mp_funcptr_lv_theme_apply_cb_t(size_t mp_n_args, const m...
  function STATIC (line 8744) | STATIC inline mp_obj_t mp_lv_funcptr_lv_theme_apply_cb_t(void *func){ re...
  type _lv_theme_t (line 8746) | struct _lv_theme_t
  function STATIC (line 8754) | STATIC inline void* mp_write_ptr_lv_theme_t(mp_obj_t self_in)
  function STATIC (line 8762) | STATIC inline mp_obj_t mp_read_ptr_lv_theme_t(void *field)
  function STATIC (line 8770) | STATIC void mp_lv_theme_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest)
  function STATIC (line 8815) | STATIC void mp_lv_theme_t_print(const mp_print_t *print,
  function STATIC (line 8837) | STATIC inline const mp_obj_type_t *get_mp_lv_theme_t_type()
  function STATIC (line 8850) | STATIC mp_obj_t mp_funcptr_lv_timer_cb_t(size_t mp_n_args, const mp_obj_...
  function STATIC (line 8861) | STATIC inline mp_obj_t mp_lv_funcptr_lv_timer_cb_t(void *func){ return m...
  type _lv_timer_t (line 8863) | struct _lv_timer_t
  function STATIC (line 8871) | STATIC inline void* mp_write_ptr_lv_timer_t(mp_obj_t self_in)
  function STATIC (line 8879) | STATIC inline mp_obj_t mp_read_ptr_lv_timer_t(void *field)
  function STATIC (line 8887) | STATIC void mp_lv_timer_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest)
  function STATIC (line 8924) | STATIC void mp_lv_timer_t_print(const mp_print_t *print,
  function STATIC (line 8946) | STATIC inline const mp_obj_type_t *get_mp_lv_timer_t_type()
  function STATIC (line 8959) | STATIC mp_obj_t mp_funcptr_wait_cb(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 8970) | STATIC inline mp_obj_t mp_lv_funcptr_wait_cb(void *func){ return mp_lv_f...
  type _lv_disp_t (line 8972) | struct _lv_disp_t
  function STATIC (line 8980) | STATIC inline void* mp_write_ptr_lv_disp_t(mp_obj_t self_in)
  function STATIC (line 8988) | STATIC inline mp_obj_t mp_read_ptr_lv_disp_t(void *field)
  function STATIC (line 8996) | STATIC void mp_lv_disp_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest)
  function STATIC (line 9119) | STATIC void mp_lv_disp_t_print(const mp_print_t *print,
  function STATIC (line 9141) | STATIC inline const mp_obj_type_t *get_mp_lv_disp_t_type()
  function STATIC (line 9152) | STATIC mp_obj_t mp_lv_obj_get_disp(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 9173) | STATIC mp_obj_t mp_lv_obj_get_child(size_t mp_n_args, const mp_obj_t *mp...
  function lv_obj_tree_walk_res_t (line 9199) | lv_obj_tree_walk_res_t lv_obj_tree_walk_cb_callback(struct _lv_obj_t *ar...
  function STATIC (line 9217) | STATIC mp_obj_t mp_lv_obj_tree_walk(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 9236) | STATIC mp_obj_t mp_lv_obj_set_pos(size_t mp_n_args, const mp_obj_t *mp_a...
  function STATIC (line 9255) | STATIC mp_obj_t mp_lv_obj_set_x(size_t mp_n_args, const mp_obj_t *mp_arg...
  function STATIC (line 9281) | STATIC mp_obj_t mp_lv_obj_refr_size(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 9318) | STATIC mp_obj_t mp_lv_obj_is_layout_positioned(size_t mp_n_args, const m...
  function STATIC (line 9339) | STATIC mp_obj_t mp_lv_obj_update_layout(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 9356) | STATIC mp_obj_t mp_lv_obj_set_align(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 9374) | STATIC mp_obj_t mp_lv_obj_align(size_t mp_n_args, const mp_obj_t *mp_arg...
  function STATIC (line 9394) | STATIC mp_obj_t mp_lv_obj_align_to(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 9415) | STATIC mp_obj_t mp_lv_obj_get_coords(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 9433) | STATIC mp_obj_t mp_lv_obj_get_x(size_t mp_n_args, const mp_obj_t *mp_arg...
  function STATIC (line 9510) | STATIC mp_obj_t mp_lv_obj_move_children_by(size_t mp_n_args, const mp_ob...
  function STATIC (line 9530) | STATIC mp_obj_t mp_lv_obj_transform_point(size_t mp_n_args, const mp_obj...
  function STATIC (line 9550) | STATIC mp_obj_t mp_lv_obj_get_transformed_area(size_t mp_n_args, const m...
  function STATIC (line 9570) | STATIC mp_obj_t mp_lv_obj_invalidate_area(size_t mp_n_args, const mp_obj...
  function STATIC (line 9592) | STATIC mp_obj_t mp_lv_obj_area_is_visible(size_t mp_n_args, const mp_obj...
  function STATIC (line 9622) | STATIC mp_obj_t mp_lv_obj_hit_test(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 9640) | STATIC mp_obj_t mp_lv_obj_set_scrollbar_mode(size_t mp_n_args, const mp_...
  function STATIC (line 9658) | STATIC mp_obj_t mp_lv_obj_set_scroll_dir(size_t mp_n_args, const mp_obj_...
  function STATIC (line 9676) | STATIC mp_obj_t mp_lv_obj_set_scroll_snap_x(size_t mp_n_args, const mp_o...
  function STATIC (line 9698) | STATIC mp_obj_t mp_lv_obj_get_scrollbar_mode(size_t mp_n_args, const mp_...
  function STATIC (line 9715) | STATIC mp_obj_t mp_lv_obj_get_scroll_dir(size_t mp_n_args, const mp_obj_...
  function STATIC (line 9732) | STATIC mp_obj_t mp_lv_obj_get_scroll_snap_x(size_t mp_n_args, const mp_o...
  function STATIC (line 9761) | STATIC mp_obj_t mp_lv_obj_get_scroll_top(size_t mp_n_args, const mp_obj_...
  function STATIC (line 9790) | STATIC mp_obj_t mp_lv_obj_get_scroll_end(size_t mp_n_args, const mp_obj_...
  function STATIC (line 9808) | STATIC mp_obj_t mp_lv_obj_scroll_by(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 9836) | STATIC mp_obj_t mp_lv_obj_scroll_to_x(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 9859) | STATIC mp_obj_t mp_lv_obj_scroll_to_view(size_t mp_n_args, const mp_obj_...
  function STATIC (line 9889) | STATIC mp_obj_t mp_lv_obj_get_scrollbar_area(size_t mp_n_args, const mp_...
  type __typeof__ (line 9910) | typedef __typeof__( ((lv_style_t*)(0))->v_p )
  function STATIC (line 9918) | STATIC inline void* mp_write_ptr_lv_style_value_t(mp_obj_t self_in)
  function STATIC (line 9926) | STATIC inline mp_obj_t mp_read_ptr_lv_style_value_t(void *field)
  function STATIC (line 9934) | STATIC void mp_lv_style_value_t_attr(mp_obj_t self_in, qstr attr, mp_obj...
  function STATIC (line 9965) | STATIC void mp_lv_style_value_t_print(const mp_print_t *print,
  function STATIC (line 9987) | STATIC inline const mp_obj_type_t *get_mp_lv_style_value_t_type()
  function STATIC (line 9999) | STATIC inline void* mp_write_ptr_lv_style_const_prop_t(mp_obj_t self_in)
  function STATIC (line 10007) | STATIC inline mp_obj_t mp_read_ptr_lv_style_const_prop_t(void *field)
  function STATIC (line 10015) | STATIC void mp_lv_style_const_prop_t_attr(mp_obj_t self_in, qstr attr, m...
  function STATIC (line 10044) | STATIC void mp_lv_style_const_prop_t_print(const mp_print_t *print,
  function STATIC (line 10066) | STATIC inline const mp_obj_type_t *get_mp_lv_style_const_prop_t_type()
  function STATIC (line 10078) | STATIC inline void* mp_write_ptr_lv_style_v_p_t(mp_obj_t self_in)
  function STATIC (line 10086) | STATIC inline mp_obj_t mp_read_ptr_lv_style_v_p_t(void *field)
  function STATIC (line 10094) | STATIC void mp_lv_style_v_p_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t...
  function STATIC (line 10125) | STATIC void mp_lv_style_v_p_t_print(const mp_print_t *print,
  function STATIC (line 10147) | STATIC inline const mp_obj_type_t *get_mp_lv_style_v_p_t_type()
  function STATIC (line 10159) | STATIC inline void* mp_write_ptr_lv_style_t(mp_obj_t self_in)
  function STATIC (line 10167) | STATIC inline mp_obj_t mp_read_ptr_lv_style_t(void *field)
  function STATIC (line 10175) | STATIC void mp_lv_style_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest)
  function STATIC (line 10208) | STATIC void mp_lv_style_t_print(const mp_print_t *print,
  function STATIC (line 10230) | STATIC inline const mp_obj_type_t *get_mp_lv_style_t_type()
  function STATIC (line 10241) | STATIC mp_obj_t mp_lv_obj_add_style(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 10260) | STATIC mp_obj_t mp_lv_obj_replace_style(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 10288) | STATIC mp_obj_t mp_lv_obj_report_style_change(size_t mp_n_args, const mp...
  function STATIC (line 10305) | STATIC mp_obj_t mp_lv_obj_refresh_style(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 10324) | STATIC mp_obj_t mp_lv_obj_enable_style_refresh(size_t mp_n_args, const m...
  function STATIC (line 10341) | STATIC mp_obj_t mp_lv_obj_get_style_prop(size_t mp_n_args, const mp_obj_...
  function STATIC (line 10360) | STATIC mp_obj_t mp_lv_obj_set_local_style_prop(size_t mp_n_args, const m...
  function STATIC (line 10380) | STATIC mp_obj_t mp_lv_obj_set_local_style_prop_meta(size_t mp_n_args, co...
  function STATIC (line 10400) | STATIC mp_obj_t mp_lv_obj_get_local_style_prop(size_t mp_n_args, const m...
  function STATIC (line 10420) | STATIC mp_obj_t mp_lv_obj_remove_local_style_prop(size_t mp_n_args, cons...
  function STATIC (line 10439) | STATIC mp_obj_t mp_lv_obj_fade_in(size_t mp_n_args, const mp_obj_t *mp_a...
  function STATIC (line 10462) | STATIC mp_obj_t mp_lv_obj_style_get_selector_state(size_t mp_n_args, con...
  function STATIC (line 10479) | STATIC mp_obj_t mp_lv_obj_style_get_selector_part(size_t mp_n_args, cons...
  function STATIC (line 10528) | STATIC mp_obj_t mp_lv_obj_set_style_align(size_t mp_n_args, const mp_obj...
  function STATIC (line 10619) | STATIC mp_obj_t mp_lv_obj_set_style_bg_color(size_t mp_n_args, const mp_...
  function STATIC (line 10638) | STATIC mp_obj_t mp_lv_obj_set_style_bg_opa(size_t mp_n_args, const mp_ob...
  function STATIC (line 10661) | STATIC mp_obj_t mp_lv_obj_set_style_bg_grad_dir(size_t mp_n_args, const ...
  function STATIC (line 10688) | STATIC mp_obj_t mp_lv_obj_set_style_bg_grad(size_t mp_n_args, const mp_o...
  function STATIC (line 10707) | STATIC mp_obj_t mp_lv_obj_set_style_bg_dither_mode(size_t mp_n_args, con...
  function STATIC (line 10726) | STATIC mp_obj_t mp_lv_obj_set_style_bg_img_src(size_t mp_n_args, const m...
  function STATIC (line 10757) | STATIC mp_obj_t mp_lv_obj_set_style_bg_img_tiled(size_t mp_n_args, const...
  function STATIC (line 10788) | STATIC mp_obj_t mp_lv_obj_set_style_border_side(size_t mp_n_args, const ...
  function STATIC (line 10915) | STATIC mp_obj_t mp_lv_obj_set_style_text_font(size_t mp_n_args, const mp...
  function STATIC (line 10942) | STATIC mp_obj_t mp_lv_obj_set_style_text_decor(size_t mp_n_args, const m...
  function STATIC (line 10961) | STATIC mp_obj_t mp_lv_obj_set_style_text_align(size_t mp_n_args, const m...
  function STATIC (line 10992) | STATIC mp_obj_t mp_lv_obj_set_style_color_filter_dsc(size_t mp_n_args, c...
  function STATIC (line 11015) | STATIC mp_obj_t mp_lv_obj_set_style_anim(size_t mp_n_args, const mp_obj_...
  function STATIC (line 11034) | STATIC mp_obj_t mp_lv_obj_set_style_anim_time(size_t mp_n_args, const mp...
  function STATIC (line 11057) | STATIC mp_obj_t mp_lv_obj_set_style_transition(size_t mp_n_args, const m...
  function STATIC (line 11076) | STATIC mp_obj_t mp_lv_obj_set_style_blend_mode(size_t mp_n_args, const m...
  function STATIC (line 11095) | STATIC mp_obj_t mp_lv_obj_set_style_layout(size_t mp_n_args, const mp_ob...
  function STATIC (line 11114) | STATIC mp_obj_t mp_lv_obj_set_style_base_dir(size_t mp_n_args, const mp_...
  function STATIC (line 11133) | STATIC mp_obj_t mp_lv_obj_calculate_style_text_align(size_t mp_n_args, c...
  function STATIC (line 11152) | STATIC mp_obj_t mp_lv_obj_init_draw_rect_dsc(size_t mp_n_args, const mp_...
  function STATIC (line 11171) | STATIC mp_obj_t mp_lv_obj_init_draw_label_dsc(size_t mp_n_args, const mp...
  function STATIC (line 11190) | STATIC mp_obj_t mp_lv_obj_init_draw_img_dsc(size_t mp_n_args, const mp_o...
  function STATIC (line 11209) | STATIC mp_obj_t mp_lv_obj_init_draw_line_dsc(size_t mp_n_args, const mp_...
  function STATIC (line 11228) | STATIC mp_obj_t mp_lv_obj_init_draw_arc_dsc(size_t mp_n_args, const mp_o...
  function STATIC (line 11247) | STATIC mp_obj_t mp_lv_obj_calculate_ext_draw_size(size_t mp_n_args, cons...
  function STATIC (line 11267) | STATIC mp_obj_t mp_funcptr_constructor_cb(size_t mp_n_args, const mp_obj...
  function STATIC (line 11279) | STATIC inline mp_obj_t mp_lv_funcptr_constructor_cb(void *func){ return ...
  type _lv_obj_class_t (line 11281) | struct _lv_obj_class_t
  type _lv_obj_t (line 11281) | struct _lv_obj_t
  type _lv_obj_class_t (line 11282) | struct _lv_obj_class_t
  type _lv_obj_t (line 11282) | struct _lv_obj_t
  function STATIC (line 11292) | STATIC inline void* mp_write_ptr_lv_event_t(mp_obj_t self_in)
  function STATIC (line 11300) | STATIC inline mp_obj_t mp_read_ptr_lv_event_t(void *field)
  function STATIC (line 11308) | STATIC void mp_lv_event_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest)
  function STATIC (line 11351) | STATIC void mp_lv_event_t_print(const mp_print_t *print,
  function STATIC (line 11373) | STATIC inline const mp_obj_type_t *get_mp_lv_event_t_type()
  function STATIC (line 11384) | STATIC mp_obj_t mp_funcptr_event_cb(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 11396) | STATIC inline mp_obj_t mp_lv_funcptr_event_cb(void *func){ return mp_lv_...
  type _lv_obj_class_t (line 11398) | struct _lv_obj_class_t
  type _lv_event_t (line 11398) | struct _lv_event_t
  function STATIC (line 11406) | STATIC inline void* mp_write_ptr_lv_obj_class_t(mp_obj_t self_in)
  function STATIC (line 11414) | STATIC inline mp_obj_t mp_read_ptr_lv_obj_class_t(void *field)
  function STATIC (line 11422) | STATIC void mp_lv_obj_class_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t...
  function STATIC (line 11469) | STATIC void mp_lv_obj_class_t_print(const mp_print_t *print,
  function STATIC (line 11491) | STATIC inline const mp_obj_type_t *get_mp_lv_obj_class_t_type()
  function STATIC (line 11503) | STATIC inline void* mp_write_ptr_lv_obj_draw_part_dsc_t(mp_obj_t self_in)
  function STATIC (line 11511) | STATIC inline mp_obj_t mp_read_ptr_lv_obj_draw_part_dsc_t(void *field)
  function STATIC (line 11519) | STATIC void mp_lv_obj_draw_part_dsc_t_attr(mp_obj_t self_in, qstr attr, ...
  function STATIC (line 11580) | STATIC void mp_lv_obj_draw_part_dsc_t_print(const mp_print_t *print,
  function STATIC (line 11602) | STATIC inline const mp_obj_type_t *get_mp_lv_obj_draw_part_dsc_t_type()
  function STATIC (line 11613) | STATIC mp_obj_t mp_lv_obj_draw_dsc_init(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 11631) | STATIC mp_obj_t mp_lv_obj_draw_part_check_type(size_t mp_n_args, const m...
  function STATIC (line 11654) | STATIC mp_obj_t mp_lv_obj_class_create_obj(size_t mp_n_args, const mp_ob...
  function STATIC (line 11684) | STATIC mp_obj_t mp_lv_obj_send_event(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 11703) | STATIC mp_obj_t mp_lv_obj_event_base(size_t mp_n_args, const mp_obj_t *m...
  function lv_obj_add_event_event_cb_callback (line 11721) | void lv_obj_add_event_event_cb_callback(lv_event_t *arg0)
  function STATIC (line 11738) | STATIC mp_obj_t mp_lv_obj_add_event(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 11758) | STATIC mp_obj_t mp_lv_obj_get_event_count(size_t mp_n_args, const mp_obj...
  function STATIC (line 11775) | STATIC mp_obj_t mp_lv_obj_get_event_dsc(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 11793) | STATIC mp_obj_t mp_lv_obj_remove_event(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 11811) | STATIC mp_obj_t mp_lv_obj_add_flag(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 11833) | STATIC mp_obj_t mp_lv_obj_add_state(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 11855) | STATIC mp_obj_t mp_lv_obj_has_flag(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 11877) | STATIC mp_obj_t mp_lv_obj_get_state(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 11894) | STATIC mp_obj_t mp_lv_obj_has_state(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 11913) | STATIC inline void* mp_write_ptr_lv_ll_t(mp_obj_t self_in)
  function STATIC (line 11921) | STATIC inline mp_obj_t mp_read_ptr_lv_ll_t(void *field)
  function STATIC (line 11929) | STATIC void mp_lv_ll_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest)
  function STATIC (line 11960) | STATIC void mp_lv_ll_t_print(const mp_print_t *print,
  function STATIC (line 11982) | STATIC inline const mp_obj_type_t *get_mp_lv_ll_t_type()
  function STATIC (line 11995) | STATIC mp_obj_t mp_funcptr_lv_group_focus_cb_t(size_t mp_n_args, const m...
  function STATIC (line 12006) | STATIC inline mp_obj_t mp_lv_funcptr_lv_group_focus_cb_t(void *func){ re...
  type _lv_group_t (line 12008) | struct _lv_group_t
  function STATIC (line 12017) | STATIC mp_obj_t mp_funcptr_lv_group_edge_cb_t(size_t mp_n_args, const mp...
  function STATIC (line 12029) | STATIC inline mp_obj_t mp_lv_funcptr_lv_group_edge_cb_t(void *func){ ret...
  type _lv_group_t (line 12031) | struct _lv_group_t
  function STATIC (line 12039) | STATIC inline void* mp_write_ptr_lv_group_t(mp_obj_t self_in)
  function STATIC (line 12047) | STATIC inline mp_obj_t mp_read_ptr_lv_group_t(void *field)
  function STATIC (line 12055) | STATIC void mp_lv_group_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest)
  function STATIC (line 12098) | STATIC void mp_lv_group_t_print(const mp_print_t *print,
  function STATIC (line 12120) | STATIC inline const mp_obj_type_t *get_mp_lv_group_t_type()
  function STATIC (line 12131) | STATIC mp_obj_t mp_lv_obj_get_group(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 12152) | STATIC mp_obj_t mp_lv_obj_check_type(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 12174) | STATIC mp_obj_t mp_lv_obj_get_class(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 12191) | STATIC mp_obj_t mp_lv_obj_is_valid(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 12208) | STATIC mp_obj_t mp_lv_obj_redraw(size_t mp_n_args, const mp_obj_t *mp_ar...
  function STATIC (line 12226) | STATIC mp_obj_t mp_lv_obj_set_tile(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 12245) | STATIC mp_obj_t mp_lv_obj_set_tile_id(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 12265) | STATIC mp_obj_t mp_lv_obj_set_flex_flow(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 12283) | STATIC mp_obj_t mp_lv_obj_set_flex_align(size_t mp_n_args, const mp_obj_...
  function STATIC (line 12303) | STATIC mp_obj_t mp_lv_obj_set_flex_grow(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 12321) | STATIC mp_obj_t mp_lv_obj_set_style_flex_flow(size_t mp_n_args, const mp...
  function STATIC (line 12340) | STATIC mp_obj_t mp_lv_obj_set_style_flex_main_place(size_t mp_n_args, co...
  function STATIC (line 12367) | STATIC mp_obj_t mp_lv_obj_set_style_flex_grow(size_t mp_n_args, const mp...
  function lv_coord_t (line 12385) | lv_coord_t *mp_arr_to_lv_coord_t_____(mp_obj_t mp_arr)
  function mp_obj_t (line 12401) | mp_obj_t mp_arr_from_lv_coord_t_____(const lv_coord_t *arr)
  function STATIC (line 12412) | STATIC mp_obj_t mp_lv_obj_set_grid_dsc_array(size_t mp_n_args, const mp_...
  function STATIC (line 12431) | STATIC mp_obj_t mp_lv_obj_set_grid_align(size_t mp_n_args, const mp_obj_...
  function STATIC (line 12450) | STATIC mp_obj_t mp_lv_obj_set_grid_cell(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 12473) | STATIC mp_obj_t mp_lv_obj_set_style_grid_row_dsc_array(size_t mp_n_args,...
  function STATIC (line 12496) | STATIC mp_obj_t mp_lv_obj_set_style_grid_row_align(size_t mp_n_args, con...
  function STATIC (line 12519) | STATIC mp_obj_t mp_lv_obj_set_style_grid_cell_column_pos(size_t mp_n_arg...
  function STATIC (line 12558) | STATIC mp_obj_t mp_lv_obj_create(size_t mp_n_args, const mp_obj_t *mp_ar...
  function STATIC (line 12963) | STATIC void obj_print(const mp_print_t *print,
  function STATIC (line 12971) | STATIC mp_obj_t obj_make_new(
  function STATIC (line 13005) | STATIC inline void* mp_write_ptr_lv_img_header_t(mp_obj_t self_in)
  function STATIC (line 13013) | STATIC inline mp_obj_t mp_read_ptr_lv_img_header_t(void *field)
  function STATIC (line 13021) | STATIC void mp_lv_img_header_t_attr(mp_obj_t self_in, qstr attr, mp_obj_...
  function STATIC (line 13058) | STATIC void mp_lv_img_header_t_print(const mp_print_t *print,
  function STATIC (line 13080) | STATIC inline const mp_obj_type_t *get_mp_lv_img_header_t_type()
  function STATIC (line 13092) | STATIC inline void* mp_write_ptr_lv_img_dsc_t(mp_obj_t self_in)
  function STATIC (line 13100) | STATIC inline mp_obj_t mp_read_ptr_lv_img_dsc_t(void *field)
  function STATIC (line 13108) | STATIC void mp_lv_img_dsc_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *...
  function STATIC (line 13139) | STATIC void mp_lv_img_dsc_t_print(const mp_print_t *print,
  function STATIC (line 13161) | STATIC inline const mp_obj_type_t *get_mp_lv_img_dsc_t_type()
  function STATIC (line 13172) | STATIC mp_obj_t mp_lv_img_buf_set_palette(size_t mp_n_args, const mp_obj...
  function STATIC (line 13191) | STATIC mp_obj_t mp_lv_img_buf_free(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 13208) | STATIC mp_obj_t mp_lv_img_decoder_get_info(size_t mp_n_args, const mp_ob...
  function STATIC (line 13228) | STATIC mp_obj_t mp_funcptr_lv_img_decoder_info_f_t(size_t mp_n_args, con...
  function STATIC (line 13241) | STATIC inline mp_obj_t mp_lv_funcptr_lv_img_decoder_info_f_t(void *func)...
  type _lv_img_decoder_t (line 13243) | struct _lv_img_decoder_t
  function STATIC (line 13252) | STATIC mp_obj_t mp_funcptr_lv_img_decoder_open_f_t(size_t mp_n_args, con...
  function STATIC (line 13264) | STATIC inline mp_obj_t mp_lv_funcptr_lv_img_decoder_open_f_t(void *func)...
  type _lv_img_decoder_t (line 13266) | struct _lv_img_decoder_t
  type _lv_img_decoder_dsc_t (line 13266) | struct _lv_img_decoder_dsc_t
  function STATIC (line 13275) | STATIC mp_obj_t mp_funcptr_lv_img_decoder_read_line_f_t(size_t mp_n_args...
  function STATIC (line 13291) | STATIC inline mp_obj_t mp_lv_funcptr_lv_img_decoder_read_line_f_t(void *...
  type _lv_img_decoder_t (line 13293) | struct _lv_img_decoder_t
  type _lv_img_decoder_dsc_t (line 13293) | struct _lv_img_decoder_dsc_t
  function STATIC (line 13302) | STATIC mp_obj_t mp_funcptr_lv_img_decoder_close_f_t(size_t mp_n_args, co...
  function STATIC (line 13314) | STATIC inline mp_obj_t mp_lv_funcptr_lv_img_decoder_close_f_t(void *func...
  type _lv_img_decoder_t (line 13316) | struct _lv_img_decoder_t
  type _lv_img_decoder_dsc_t (line 13316) | struct _lv_img_decoder_dsc_t
  function STATIC (line 13324) | STATIC inline void* mp_write_ptr_lv_img_decoder_t(mp_obj_t self_in)
  function STATIC (line 13332) | STATIC inline mp_obj_t mp_read_ptr_lv_img_decoder_t(void *field)
  function STATIC (line 13340) | STATIC void mp_lv_img_decoder_t_attr(mp_obj_t self_in, qstr attr, mp_obj...
  function STATIC (line 13375) | STATIC void mp_lv_img_decoder_t_print(const mp_print_t *print,
  function STATIC (line 13397) | STATIC inline const mp_obj_type_t *get_mp_lv_img_decoder_t_type()
  function STATIC (line 13409) | STATIC inline void* mp_write_ptr_lv_img_decoder_dsc_t(mp_obj_t self_in)
  function STATIC (line 13417) | STATIC inline mp_obj_t mp_read_ptr_lv_img_decoder_dsc_t(void *field)
  function STATIC (line 13425) | STATIC void mp_lv_img_decoder_dsc_t_attr(mp_obj_t self_in, qstr attr, mp...
  function STATIC (line 13474) | STATIC void mp_lv_img_decoder_dsc_t_print(const mp_print_t *print,
  function STATIC (line 13496) | STATIC inline const mp_obj_type_t *get_mp_lv_img_decoder_dsc_t_type()
  function STATIC (line 13507) | STATIC mp_obj_t mp_lv_img_decoder_open(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 13527) | STATIC mp_obj_t mp_lv_img_decoder_read_line(size_t mp_n_args, const mp_o...
  function STATIC (line 13548) | STATIC mp_obj_t mp_lv_img_decoder_close(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 13565) | STATIC mp_obj_t mp_lv_img_decoder_create(size_t mp_n_args, const mp_obj_...
  function STATIC (line 13582) | STATIC mp_obj_t mp_lv_img_decoder_delete(size_t mp_n_args, const mp_obj_...
  function lv_res_t (line 13599) | lv_res_t lv_img_decoder_t_info_cb_callback(struct _lv_img_decoder_t *arg...
  function STATIC (line 13618) | STATIC mp_obj_t mp_lv_img_decoder_set_info_cb(size_t mp_n_args, const mp...
  function lv_res_t (line 13636) | lv_res_t lv_img_decoder_t_open_cb_callback(struct _lv_img_decoder_t *arg...
  function STATIC (line 13654) | STATIC mp_obj_t mp_lv_img_decoder_set_open_cb(size_t mp_n_args, const mp...
  function lv_res_t (line 13672) | lv_res_t lv_img_decoder_t_read_line_cb_callback(struct _lv_img_decoder_t...
  function STATIC (line 13694) | STATIC mp_obj_t mp_lv_img_decoder_set_read_line_cb(size_t mp_n_args, con...
  function lv_img_decoder_t_close_cb_callback (line 13712) | void lv_img_decoder_t_close_cb_callback(struct _lv_img_decoder_t *arg0, ...
  function STATIC (line 13730) | STATIC mp_obj_t mp_lv_img_decoder_set_close_cb(size_t mp_n_args, const m...
  function STATIC (line 13748) | STATIC mp_obj_t mp_lv_img_decoder_built_in_info(size_t mp_n_args, const ...
  function STATIC (line 13767) | STATIC mp_obj_t mp_lv_img_decoder_built_in_open(size_t mp_n_args, const ...
  function STATIC (line 13785) | STATIC mp_obj_t mp_lv_img_decoder_built_in_close(size_t mp_n_args, const...
  function STATIC (line 13806) | STATIC inline void* mp_write_ptr__lv_img_cache_entry_t(mp_obj_t self_in)
  function STATIC (line 13814) | STATIC inline mp_obj_t mp_read_ptr__lv_img_cache_entry_t(void *field)
  function STATIC (line 13822) | STATIC void mp__lv_img_cache_entry_t_attr(mp_obj_t self_in, qstr attr, m...
  function STATIC (line 13851) | STATIC void mp__lv_img_cache_entry_t_print(const mp_print_t *print,
  function STATIC (line 13873) | STATIC inline const mp_obj_type_t *get_mp__lv_img_cache_entry_t_type()
  function STATIC (line 13884) | STATIC mp_obj_t mp_funcptr_open_cb(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 13897) | STATIC inline mp_obj_t mp_lv_funcptr_open_cb(void *func){ return mp_lv_f...
  function STATIC (line 13914) | STATIC mp_obj_t mp_funcptr_set_size_cb(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 13925) | STATIC inline mp_obj_t mp_lv_funcptr_set_size_cb(void *func){ return mp_...
  function STATIC (line 13942) | STATIC mp_obj_t mp_funcptr_invalidate_src_cb(size_t mp_n_args, const mp_...
  function STATIC (line 13953) | STATIC inline mp_obj_t mp_lv_funcptr_invalidate_src_cb(void *func){ retu...
  function STATIC (line 13969) | STATIC inline void* mp_write_ptr_lv_img_cache_manager_t(mp_obj_t self_in)
  function STATIC (line 13977) | STATIC inline mp_obj_t mp_read_ptr_lv_img_cache_manager_t(void *field)
  function STATIC (line 13985) | STATIC void mp_lv_img_cache_manager_t_attr(mp_obj_t self_in, qstr attr, ...
  function STATIC (line 14016) | STATIC void mp_lv_img_cache_manager_t_print(const mp_print_t *print,
  function STATIC (line 14038) | STATIC inline const mp_obj_type_t *get_mp_lv_img_cache_manager_t_type()
  function STATIC (line 14049) | STATIC mp_obj_t mp_lv_img_cache_manager_init(size_t mp_n_args, const mp_...
  function STATIC (line 14066) | STATIC mp_obj_t mp_lv_img_cache_manager_apply(size_t mp_n_args, const mp...
  function STATIC (line 14091) | STATIC mp_obj_t mp_lv_img_src_get_type(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 14108) | STATIC mp_obj_t mp_lv_img_set_src(size_t mp_n_args, const mp_obj_t *mp_a...
  function STATIC (line 14126) | STATIC mp_obj_t mp_lv_img_set_offset_x(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 14148) | STATIC mp_obj_t mp_lv_img_set_angle(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 14166) | STATIC mp_obj_t mp_lv_img_set_pivot(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 14185) | STATIC mp_obj_t mp_lv_img_set_zoom(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 14203) | STATIC mp_obj_t mp_lv_img_set_antialias(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 14221) | STATIC mp_obj_t mp_lv_img_set_size_mode(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 14239) | STATIC mp_obj_t mp_lv_img_get_src(size_t mp_n_args, const mp_obj_t *mp_a...
  function STATIC (line 14256) | STATIC mp_obj_t mp_lv_img_get_offset_x(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 14277) | STATIC mp_obj_t mp_lv_img_get_angle(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 14294) | STATIC mp_obj_t mp_lv_img_get_pivot(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 14316) | STATIC mp_obj_t mp_lv_img_get_antialias(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 14333) | STATIC mp_obj_t mp_lv_img_get_size_mode(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 14397) | STATIC void img_print(const mp_print_t *print,
  function STATIC (line 14405) | STATIC mp_obj_t img_make_new(
  function mp_obj_t (line 14453) | mp_obj_t mp_arr_from_void_ptr____(const void * *arr)
  function STATIC (line 14464) | STATIC mp_obj_t mp_lv_animimg_set_src(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 14487) | STATIC mp_obj_t mp_lv_animimg_set_duration(size_t mp_n_args, const mp_ob...
  function STATIC (line 14516) | STATIC mp_obj_t mp_lv_animimg_get_src_count(size_t mp_n_args, const mp_o...
  function STATIC (line 14533) | STATIC mp_obj_t mp_lv_animimg_get_duration(size_t mp_n_args, const mp_ob...
  function STATIC (line 14570) | STATIC void animimg_print(const mp_print_t *print,
  function STATIC (line 14578) | STATIC mp_obj_t animimg_make_new(
  function STATIC (line 14619) | STATIC mp_obj_t mp_lv_arc_set_angles(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 14654) | STATIC mp_obj_t mp_lv_arc_set_mode(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 14676) | STATIC mp_obj_t mp_lv_arc_set_range(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 14719) | STATIC mp_obj_t mp_lv_arc_get_value(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 14744) | STATIC mp_obj_t mp_lv_arc_get_mode(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 14769) | STATIC mp_obj_t mp_lv_arc_align_obj_to_angle(size_t mp_n_args, const mp_...
  function STATIC (line 14827) | STATIC void arc_print(const mp_print_t *print,
  function STATIC (line 14835) | STATIC mp_obj_t arc_make_new(
  function STATIC (line 14868) | STATIC mp_obj_t mp_lv_label_set_text(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 14897) | STATIC mp_obj_t mp_lv_label_set_long_mode(size_t mp_n_args, const mp_obj...
  function STATIC (line 14927) | STATIC mp_obj_t mp_lv_label_get_text(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 14944) | STATIC mp_obj_t mp_lv_label_get_long_mode(size_t mp_n_args, const mp_obj...
  function STATIC (line 14965) | STATIC mp_obj_t mp_lv_label_get_letter_pos(size_t mp_n_args, const mp_ob...
  function STATIC (line 14984) | STATIC mp_obj_t mp_lv_label_get_letter_on(size_t mp_n_args, const mp_obj...
  function STATIC (line 15002) | STATIC mp_obj_t mp_lv_label_is_char_under_pos(size_t mp_n_args, const mp...
  function STATIC (line 15020) | STATIC mp_obj_t mp_lv_label_get_text_selection_start(size_t mp_n_args, c...
  function STATIC (line 15041) | STATIC mp_obj_t mp_lv_label_ins_text(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 15060) | STATIC mp_obj_t mp_lv_label_cut_text(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 15105) | STATIC void label_print(const mp_print_t *print,
  function STATIC (line 15113) | STATIC mp_obj_t label_make_new(
  function STATIC (line 15146) | STATIC mp_obj_t mp_lv_bar_set_value(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 15169) | STATIC mp_obj_t mp_lv_bar_set_range(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 15188) | STATIC mp_obj_t mp_lv_bar_set_mode(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 15206) | STATIC mp_obj_t mp_lv_bar_get_value(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 15235) | STATIC mp_obj_t mp_lv_bar_get_mode(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 15272) | STATIC void bar_print(const mp_print_t *print,
  function STATIC (line 15280) | STATIC mp_obj_t bar_make_new(
  function STATIC (line 15323) | STATIC void btn_print(const mp_print_t *print,
  function STATIC (line 15331) | STATIC mp_obj_t btn_make_new(
  function mp_obj_t (line 15379) | mp_obj_t mp_arr_from_char_ptr____(const char * *arr)
  function STATIC (line 15390) | STATIC mp_obj_t mp_lv_btnmatrix_set_map(size_t mp_n_args, const mp_obj_t...
  function lv_btnmatrix_ctrl_t (line 15407) | lv_btnmatrix_ctrl_t *mp_arr_to_lv_btnmatrix_ctrl_t_____(mp_obj_t mp_arr)
  function mp_obj_t (line 15423) | mp_obj_t mp_arr_from_lv_btnmatrix_ctrl_t_____(const lv_btnmatrix_ctrl_t ...
  function STATIC (line 15434) | STATIC mp_obj_t mp_lv_btnmatrix_set_ctrl_map(size_t mp_n_args, const mp_...
  function STATIC (line 15456) | STATIC mp_obj_t mp_lv_btnmatrix_set_btn_ctrl(size_t mp_n_args, const mp_...
  function STATIC (line 15479) | STATIC mp_obj_t mp_lv_btnmatrix_set_btn_ctrl_all(size_t mp_n_args, const...
  function STATIC (line 15501) | STATIC mp_obj_t mp_lv_btnmatrix_set_btn_width(size_t mp_n_args, const mp...
  function STATIC (line 15524) | STATIC mp_obj_t mp_lv_btnmatrix_get_map(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 15541) | STATIC mp_obj_t mp_lv_btnmatrix_get_selected_btn(size_t mp_n_args, const...
  function STATIC (line 15558) | STATIC mp_obj_t mp_lv_btnmatrix_get_btn_text(size_t mp_n_args, const mp_...
  function STATIC (line 15576) | STATIC mp_obj_t mp_lv_btnmatrix_has_btn_ctrl(size_t mp_n_args, const mp_...
  function STATIC (line 15629) | STATIC void btnmatrix_print(const mp_print_t *print,
  function STATIC (line 15637) | STATIC mp_obj_t btnmatrix_make_new(
  function STATIC (line 15670) | STATIC mp_obj_t mp_lv_calendar_set_today_date(size_t mp_n_args, const mp...
  function STATIC (line 15695) | STATIC inline void* mp_write_ptr_lv_calendar_date_t(mp_obj_t self_in)
  function STATIC (line 15703) | STATIC inline mp_obj_t mp_read_ptr_lv_calendar_date_t(void *field)
  function STATIC (line 15711) | STATIC void mp_lv_calendar_date_t_attr(mp_obj_t self_in, qstr attr, mp_o...
  function STATIC (line 15742) | STATIC void mp_lv_calendar_date_t_print(const mp_print_t *print,
  function STATIC (line 15764) | STATIC inline const mp_obj_type_t *get_mp_lv_calendar_date_t_type()
  function lv_calendar_date_t (line 15774) | lv_calendar_date_t *mp_arr_to_lv_calendar_date_t_____(mp_obj_t mp_arr)
  function mp_obj_t (line 15790) | mp_obj_t mp_arr_from_lv_calendar_date_t_____(lv_calendar_date_t *arr)
  function STATIC (line 15801) | STATIC mp_obj_t mp_lv_calendar_set_highlighted_dates(size_t mp_n_args, c...
  function STATIC (line 15820) | STATIC mp_obj_t mp_lv_calendar_set_day_names(size_t mp_n_args, const mp_...
  function STATIC (line 15838) | STATIC mp_obj_t mp_lv_calendar_get_btnmatrix(size_t mp_n_args, const mp_...
  function STATIC (line 15855) | STATIC mp_obj_t mp_lv_calendar_get_today_date(size_t mp_n_args, const mp...
  function STATIC (line 15876) | STATIC mp_obj_t mp_lv_calendar_get_highlighted_dates(size_t mp_n_args, c...
  function STATIC (line 15897) | STATIC mp_obj_t mp_lv_calendar_get_pressed_date(size_t mp_n_args, const ...
  function STATIC (line 15934) | STATIC void calendar_print(const mp_print_t *print,
  function STATIC (line 15942) | STATIC mp_obj_t calendar_make_new(
  function STATIC (line 15985) | STATIC void calendar_header_arrow_print(const mp_print_t *print,
  function STATIC (line 15993) | STATIC mp_obj_t calendar_header_arrow_make_new(
  function STATIC (line 16036) | STATIC void calendar_header_dropdown_print(const mp_print_t *print,
  function STATIC (line 16044) | STATIC mp_obj_t calendar_header_dropdown_make_new(
  function STATIC (line 16077) | STATIC mp_obj_t mp_lv_canvas_set_buffer(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 16098) | STATIC mp_obj_t mp_lv_canvas_set_px(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 16119) | STATIC mp_obj_t mp_lv_canvas_set_palette(size_t mp_n_args, const mp_obj_...
  function STATIC (line 16138) | STATIC mp_obj_t mp_lv_canvas_get_px(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 16159) | STATIC mp_obj_t mp_lv_canvas_get_img(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 16176) | STATIC mp_obj_t mp_lv_canvas_copy_buf(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 16198) | STATIC mp_obj_t mp_lv_canvas_transform(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 16223) | STATIC mp_obj_t mp_lv_canvas_blur_hor(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 16246) | STATIC mp_obj_t mp_lv_canvas_fill_bg(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 16265) | STATIC mp_obj_t mp_lv_canvas_draw_rect(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 16287) | STATIC mp_obj_t mp_lv_canvas_draw_text(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 16309) | STATIC mp_obj_t mp_lv_canvas_draw_img(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 16330) | STATIC mp_obj_t mp_lv_canvas_draw_line(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 16350) | STATIC mp_obj_t mp_lv_canvas_draw_polygon(size_t mp_n_args, const mp_obj...
  function STATIC (line 16370) | STATIC mp_obj_t mp_lv_canvas_draw_arc(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 16418) | STATIC void canvas_print(const mp_print_t *print,
  function STATIC (line 16426) | STATIC mp_obj_t canvas_make_new(
  function STATIC (line 16459) | STATIC mp_obj_t mp_lv_chart_set_type(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 16481) | STATIC mp_obj_t mp_lv_chart_set_range(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 16501) | STATIC mp_obj_t mp_lv_chart_set_update_mode(size_t mp_n_args, const mp_o...
  function STATIC (line 16519) | STATIC mp_obj_t mp_lv_chart_set_div_line_count(size_t mp_n_args, const m...
  function STATIC (line 16554) | STATIC mp_obj_t mp_lv_chart_set_axis_tick(size_t mp_n_args, const mp_obj...
  function STATIC (line 16578) | STATIC mp_obj_t mp_lv_chart_get_type(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 16600) | STATIC inline void* mp_write_ptr_lv_chart_series_t(mp_obj_t self_in)
  function STATIC (line 16608) | STATIC inline mp_obj_t mp_read_ptr_lv_chart_series_t(void *field)
  function STATIC (line 16616) | STATIC void mp_lv_chart_series_t_attr(mp_obj_t self_in, qstr attr, mp_ob...
  function STATIC (line 16659) | STATIC void mp_lv_chart_series_t_print(const mp_print_t *print,
  function STATIC (line 16681) | STATIC inline const mp_obj_type_t *get_mp_lv_chart_series_t_type()
  function STATIC (line 16692) | STATIC mp_obj_t mp_lv_chart_get_x_start_point(size_t mp_n_args, const mp...
  function STATIC (line 16710) | STATIC mp_obj_t mp_lv_chart_get_point_pos_by_id(size_t mp_n_args, const ...
  function STATIC (line 16734) | STATIC mp_obj_t mp_lv_chart_add_series(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 16753) | STATIC mp_obj_t mp_lv_chart_remove_series(size_t mp_n_args, const mp_obj...
  function STATIC (line 16771) | STATIC mp_obj_t mp_lv_chart_hide_series(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 16790) | STATIC mp_obj_t mp_lv_chart_set_series_color(size_t mp_n_args, const mp_...
  function STATIC (line 16809) | STATIC mp_obj_t mp_lv_chart_set_x_start_point(size_t mp_n_args, const mp...
  function STATIC (line 16828) | STATIC mp_obj_t mp_lv_chart_get_series_next(size_t mp_n_args, const mp_o...
  function STATIC (line 16847) | STATIC inline void* mp_write_ptr_lv_chart_cursor_t(mp_obj_t self_in)
  function STATIC (line 16855) | STATIC inline mp_obj_t mp_read_ptr_lv_chart_cursor_t(void *field)
  function STATIC (line 16863) | STATIC void mp_lv_chart_cursor_t_attr(mp_obj_t self_in, qstr attr, mp_ob...
  function STATIC (line 16900) | STATIC void mp_lv_chart_cursor_t_print(const mp_print_t *print,
  function STATIC (line 16922) | STATIC inline const mp_obj_type_t *get_mp_lv_chart_cursor_t_type()
  function STATIC (line 16933) | STATIC mp_obj_t mp_lv_chart_add_cursor(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 16952) | STATIC mp_obj_t mp_lv_chart_set_cursor_pos(size_t mp_n_args, const mp_ob...
  function STATIC (line 16971) | STATIC mp_obj_t mp_lv_chart_set_cursor_point(size_t mp_n_args, const mp_...
  function STATIC (line 16991) | STATIC mp_obj_t mp_lv_chart_get_cursor_point(size_t mp_n_args, const mp_...
  function STATIC (line 17009) | STATIC mp_obj_t mp_lv_chart_set_all_value(size_t mp_n_args, const mp_obj...
  function STATIC (line 17032) | STATIC mp_obj_t mp_lv_chart_set_next_value2(size_t mp_n_args, const mp_o...
  function STATIC (line 17052) | STATIC mp_obj_t mp_lv_chart_set_value_by_id(size_t mp_n_args, const mp_o...
  function STATIC (line 17072) | STATIC mp_obj_t mp_lv_chart_set_value_by_id2(size_t mp_n_args, const mp_...
  function STATIC (line 17093) | STATIC mp_obj_t mp_lv_chart_set_ext_y_array(size_t mp_n_args, const mp_o...
  function STATIC (line 17116) | STATIC mp_obj_t mp_lv_chart_get_y_array(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 17190) | STATIC void chart_print(const mp_print_t *print,
  function STATIC (line 17198) | STATIC mp_obj_t chart_make_new(
  function STATIC (line 17239) | STATIC mp_obj_t mp_lv_checkbox_get_text(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 17269) | STATIC void checkbox_print(const mp_print_t *print,
  function STATIC (line 17277) | STATIC mp_obj_t checkbox_make_new(
  function STATIC (line 17311) | STATIC inline void* mp_write_ptr_lv_color_hsv_t(mp_obj_t self_in)
  function STATIC (line 17319) | STATIC inline mp_obj_t mp_read_ptr_lv_color_hsv_t(void *field)
  function STATIC (line 17327) | STATIC void mp_lv_color_hsv_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t...
  function STATIC (line 17358) | STATIC void mp_lv_color_hsv_t_print(const mp_print_t *print,
  function STATIC (line 17380) | STATIC inline const mp_obj_type_t *get_mp_lv_color_hsv_t_type()
  function STATIC (line 17391) | STATIC mp_obj_t mp_lv_colorwheel_set_hsv(size_t mp_n_args, const mp_obj_...
  function STATIC (line 17409) | STATIC mp_obj_t mp_lv_colorwheel_set_rgb(size_t mp_n_args, const mp_obj_...
  function STATIC (line 17427) | STATIC mp_obj_t mp_lv_colorwheel_set_mode(size_t mp_n_args, const mp_obj...
  function STATIC (line 17449) | STATIC mp_obj_t mp_lv_colorwheel_get_hsv(size_t mp_n_args, const mp_obj_...
  function STATIC (line 17466) | STATIC mp_obj_t mp_lv_colorwheel_get_rgb(size_t mp_n_args, const mp_obj_...
  function STATIC (line 17483) | STATIC mp_obj_t mp_lv_colorwheel_get_color_mode(size_t mp_n_args, const ...
  function STATIC (line 17504) | STATIC mp_obj_t mp_lv_colorwheel_create(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 17536) | STATIC void colorwheel_print(const mp_print_t *print,
  function STATIC (line 17544) | STATIC mp_obj_t colorwheel_make_new(
  function STATIC (line 17589) | STATIC mp_obj_t mp_lv_dropdown_add_option(size_t mp_n_args, const mp_obj...
  function STATIC (line 17616) | STATIC mp_obj_t mp_lv_dropdown_set_dir(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 17646) | STATIC mp_obj_t mp_lv_dropdown_get_text(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 17675) | STATIC mp_obj_t mp_lv_dropdown_get_selected_str(size_t mp_n_args, const ...
  function STATIC (line 17694) | STATIC mp_obj_t mp_lv_dropdown_get_option_index(size_t mp_n_args, const ...
  function STATIC (line 17720) | STATIC mp_obj_t mp_lv_dropdown_get_dir(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 17780) | STATIC void dropdown_print(const mp_print_t *print,
  function STATIC (line 17788) | STATIC mp_obj_t dropdown_make_new(
  function STATIC (line 17821) | STATIC mp_obj_t mp_lv_imgbtn_set_src(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 17842) | STATIC mp_obj_t mp_lv_imgbtn_set_state(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 17860) | STATIC mp_obj_t mp_lv_imgbtn_get_src_left(size_t mp_n_args, const mp_obj...
  function STATIC (line 17901) | STATIC void imgbtn_print(const mp_print_t *print,
  function STATIC (line 17909) | STATIC mp_obj_t imgbtn_make_new(
  function STATIC (line 17954) | STATIC mp_obj_t mp_lv_keyboard_set_textarea(size_t mp_n_args, const mp_o...
  function STATIC (line 17972) | STATIC mp_obj_t mp_lv_keyboard_set_mode(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 17994) | STATIC mp_obj_t mp_lv_keyboard_set_map(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 18018) | STATIC mp_obj_t mp_lv_keyboard_get_mode(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 18035) | STATIC mp_obj_t mp_lv_keyboard_def_event_cb(size_t mp_n_args, const mp_o...
  function STATIC (line 18072) | STATIC void keyboard_print(const mp_print_t *print,
  function STATIC (line 18080) | STATIC mp_obj_t keyboard_make_new(
  function STATIC (line 18113) | STATIC mp_obj_t mp_lv_led_set_color(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 18147) | STATIC mp_obj_t mp_lv_led_get_brightness(size_t mp_n_args, const mp_obj_...
  function STATIC (line 18180) | STATIC void led_print(const mp_print_t *print,
  function STATIC (line 18188) | STATIC mp_obj_t led_make_new(
  function STATIC (line 18221) | STATIC mp_obj_t mp_lv_line_set_points(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 18260) | STATIC void line_print(const mp_print_t *print,
  function STATIC (line 18268) | STATIC mp_obj_t line_make_new(
  function STATIC (line 18301) | STATIC mp_obj_t mp_lv_list_add_text(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 18319) | STATIC mp_obj_t mp_lv_list_add_btn(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 18338) | STATIC mp_obj_t mp_lv_list_get_btn_text(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 18368) | STATIC void list_print(const mp_print_t *print,
  function STATIC (line 18376) | STATIC mp_obj_t list_make_new(
  function STATIC (line 18413) | STATIC mp_obj_t mp_lv_menu_set_page_title(size_t mp_n_args, const mp_obj...
  function STATIC (line 18439) | STATIC mp_obj_t mp_lv_menu_set_mode_header(size_t mp_n_args, const mp_ob...
  function STATIC (line 18457) | STATIC mp_obj_t mp_lv_menu_set_mode_root_back_btn(size_t mp_n_args, cons...
  function STATIC (line 18475) | STATIC mp_obj_t mp_lv_menu_set_load_page_event(size_t mp_n_args, const m...
  function STATIC (line 18518) | STATIC mp_obj_t mp_lv_menu_back_btn_is_root(size_t mp_n_args, const mp_o...
  function STATIC (line 18566) | STATIC void menu_print(const mp_print_t *print,
  function STATIC (line 18574) | STATIC mp_obj_t menu_make_new(
  function STATIC (line 18607) | STATIC mp_obj_t mp_lv_menu_page_create(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 18631) | STATIC void menu_page_print(const mp_print_t *print,
  function STATIC (line 18639) | STATIC mp_obj_t menu_page_make_new(
  function STATIC (line 18682) | STATIC void menu_cont_print(const mp_print_t *print,
  function STATIC (line 18690) | STATIC mp_obj_t menu_cont_make_new(
  function STATIC (line 18733) | STATIC void menu_section_print(const mp_print_t *print,
  function STATIC (line 18741) | STATIC mp_obj_t menu_section_make_new(
  function STATIC (line 18784) | STATIC void menu_separator_print(const mp_print_t *print,
  function STATIC (line 18792) | STATIC mp_obj_t menu_separator_make_new(
  function STATIC (line 18825) | STATIC mp_obj_t mp_lv_meter_set_scale_ticks(size_t mp_n_args, const mp_o...
  function STATIC (line 18846) | STATIC mp_obj_t mp_lv_meter_set_scale_major_ticks(size_t mp_n_args, cons...
  function STATIC (line 18868) | STATIC mp_obj_t mp_lv_meter_set_scale_range(size_t mp_n_args, const mp_o...
  type __typeof__ (line 18883) | typedef __typeof__( ((lv_meter_indicator_t*)(0))->type_data )
  type __typeof__ (line 18884) | typedef __typeof__( ((lv_meter_indicator_type_data_t*)(0))->needle_img )
  function STATIC (line 18892) | STATIC inline void* mp_write_ptr_lv_meter_indicator_type_data_needle_img...
  function STATIC (line 18900) | STATIC inline mp_obj_t mp_read_ptr_lv_meter_indicator_type_data_needle_i...
  function STATIC (line 18908) | STATIC void mp_lv_meter_indicator_type_data_needle_img_t_attr(mp_obj_t s...
  function STATIC (line 18937) | STATIC void mp_lv_meter_indicator_type_data_needle_img_t_print(const mp_...
  function STATIC (line 18959) | STATIC inline const mp_obj_type_t *get_mp_lv_meter_indicator_type_data_n...
  type __typeof__ (line 18964) | typedef __typeof__( ((lv_meter_indicator_type_data_t*)(0))->needle_line )
  function STATIC (line 18972) | STATIC inline void* mp_write_ptr_lv_meter_indicator_type_data_needle_lin...
  function STATIC (line 18980) | STATIC inline mp_obj_t mp_read_ptr_lv_meter_indicator_type_data_needle_l...
  function STATIC (line 18988) | STATIC void mp_lv_meter_indicator_type_data_needle_line_t_attr(mp_obj_t ...
  function STATIC (line 19019) | STATIC void mp_lv_meter_indicator_type_data_needle_line_t_print(const mp...
  function STATIC (line 19041) | STATIC inline const mp_obj_type_t *get_mp_lv_meter_indicator_type_data_n...
  type __typeof__ (line 19046) | typedef __typeof__( ((lv_meter_indicator_type_data_t*)(0))->arc )
  function STATIC (line 19054) | STATIC inline void* mp_write_ptr_lv_meter_indicator_type_data_arc_t(mp_o...
  function STATIC (line 19062) | STATIC inline mp_obj_t mp_read_ptr_lv_meter_indicator_type_data_arc_t(vo...
  function STATIC (line 19070) | STATIC void mp_lv_meter_indicator_type_data_arc_t_attr(mp_obj_t self_in,...
  function STATIC (line 19103) | STATIC void mp_lv_meter_indicator_type_data_arc_t_print(const mp_print_t...
  function STATIC (line 19125) | STATIC inline const mp_obj_type_t *get_mp_lv_meter_indicator_type_data_a...
  type __typeof__ (line 19130) | typedef __typeof__( ((lv_meter_indicator_type_data_t*)(0))->scale_lines )
  function STATIC (line 19138) | STATIC inline void* mp_write_ptr_lv_meter_indicator_type_data_scale_line...
  function STATIC (line 19146) | STATIC inline mp_obj_t mp_read_ptr_lv_meter_indicator_type_data_scale_li...
  function STATIC (line 19154) | STATIC void mp_lv_meter_indicator_type_data_scale_lines_t_attr(mp_obj_t ...
  function STATIC (line 19187) | STATIC void mp_lv_meter_indicator_type_data_scale_lines_t_print(const mp...
  function STATIC (line 19209) | STATIC inline const mp_obj_type_t *get_mp_lv_meter_indicator_type_data_s...
  function STATIC (line 19221) | STATIC inline void* mp_write_ptr_lv_meter_indicator_type_data_t(mp_obj_t...
  function STATIC (line 19229) | STATIC inline mp_obj_t mp_read_ptr_lv_meter_indicator_type_data_t(void *...
  function STATIC (line 19237) | STATIC void mp_lv_meter_indicator_type_data_t_attr(mp_obj_t self_in, qst...
  function STATIC (line 19270) | STATIC void mp_lv_meter_indicator_type_data_t_print(const mp_print_t *pr...
  function STATIC (line 19292) | STATIC inline const mp_obj_type_t *get_mp_lv_meter_indicator_type_data_t...
  function STATIC (line 19304) | STATIC inline void* mp_write_ptr_lv_meter_indicator_t(mp_obj_t self_in)
  function STATIC (line 19312) | STATIC inline mp_obj_t mp_read_ptr_lv_meter_indicator_t(void *field)
  function STATIC (line 19320) | STATIC void mp_lv_meter_indicator_t_attr(mp_obj_t self_in, qstr attr, mp...
  function STATIC (line 19355) | STATIC void mp_lv_meter_indicator_t_print(const mp_print_t *print,
  function STATIC (line 19377) | STATIC inline const mp_obj_type_t *get_mp_lv_meter_indicator_t_type()
  function STATIC (line 19388) | STATIC mp_obj_t mp_lv_meter_add_needle_line(size_t mp_n_args, const mp_o...
  function STATIC (line 19408) | STATIC mp_obj_t mp_lv_meter_add_needle_img(size_t mp_n_args, const mp_ob...
  function STATIC (line 19432) | STATIC mp_obj_t mp_lv_meter_add_scale_lines(size_t mp_n_args, const mp_o...
  function STATIC (line 19453) | STATIC mp_obj_t mp_lv_meter_set_indicator_value(size_t mp_n_args, const ...
  function STATIC (line 19501) | STATIC void meter_print(const mp_print_t *print,
  function STATIC (line 19509) | STATIC mp_obj_t meter_make_new(
  function STATIC (line 19578) | STATIC mp_obj_t mp_lv_msgbox_create(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 19613) | STATIC void msgbox_print(const mp_print_t *print,
  function STATIC (line 19621) | STATIC mp_obj_t msgbox_make_new(
  function STATIC (line 19654) | STATIC mp_obj_t mp_lv_roller_set_options(size_t mp_n_args, const mp_obj_...
  function STATIC (line 19673) | STATIC mp_obj_t mp_lv_roller_set_selected(size_t mp_n_args, const mp_obj...
  function STATIC (line 19729) | STATIC void roller_print(const mp_print_t *print,
  function STATIC (line 19737) | STATIC mp_obj_t roller_make_new(
  function STATIC (line 19782) | STATIC mp_obj_t mp_lv_slider_set_mode(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 19816) | STATIC mp_obj_t mp_lv_slider_get_mode(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 19858) | STATIC void slider_print(const mp_print_t *print,
  function STATIC (line 19866) | STATIC mp_obj_t slider_make_new(
  function STATIC (line 19900) | STATIC inline void* mp_write_ptr_lv_span_t(mp_obj_t self_in)
  function STATIC (line 19908) | STATIC inline mp_obj_t mp_read_ptr_lv_span_t(void *field)
  function STATIC (line 19916) | STATIC void mp_lv_span_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest)
  function STATIC (line 19949) | STATIC void mp_lv_span_t_print(const mp_print_t *print,
  function STATIC (line 19971) | STATIC inline const mp_obj_type_t *get_mp_lv_span_t_type()
  function STATIC (line 19982) | STATIC mp_obj_t mp_lv_spangroup_new_span(size_t mp_n_args, const mp_obj_...
  function STATIC (line 19999) | STATIC mp_obj_t mp_lv_spangroup_del_span(size_t mp_n_args, const mp_obj_...
  function STATIC (line 20017) | STATIC mp_obj_t mp_lv_spangroup_set_align(size_t mp_n_args, const mp_obj...
  function STATIC (line 20035) | STATIC mp_obj_t mp_lv_spangroup_set_overflow(size_t mp_n_args, const mp_...
  function STATIC (line 20057) | STATIC mp_obj_t mp_lv_spangroup_set_mode(size_t mp_n_args, const mp_obj_...
  function STATIC (line 20075) | STATIC mp_obj_t mp_lv_spangroup_set_lines(size_t mp_n_args, const mp_obj...
  function STATIC (line 20093) | STATIC mp_obj_t mp_lv_spangroup_get_child(size_t mp_n_args, const mp_obj...
  function STATIC (line 20115) | STATIC mp_obj_t mp_lv_spangroup_get_align(size_t mp_n_args, const mp_obj...
  function STATIC (line 20132) | STATIC mp_obj_t mp_lv_spangroup_get_overflow(size_t mp_n_args, const mp_...
  function STATIC (line 20153) | STATIC mp_obj_t mp_lv_spangroup_get_mode(size_t mp_n_args, const mp_obj_...
  function STATIC (line 20170) | STATIC mp_obj_t mp_lv_spangroup_get_lines(size_t mp_n_args, const mp_obj...
  function STATIC (line 20191) | STATIC mp_obj_t mp_lv_spangroup_get_expand_width(size_t mp_n_args, const...
  function STATIC (line 20209) | STATIC mp_obj_t mp_lv_spangroup_get_expand_height(size_t mp_n_args, cons...
  function STATIC (line 20258) | STATIC void spangroup_print(const mp_print_t *print,
  function STATIC (line 20266) | STATIC mp_obj_t spangroup_make_new(
  function STATIC (line 20488) | STATIC void textarea_print(const mp_print_t *print,
  function STATIC (line 20496) | STATIC mp_obj_t textarea_make_new(
  function STATIC (line 20608) | STATIC void spinbox_print(const mp_print_t *print,
  function STATIC (line 20616) | STATIC mp_obj_t spinbox_make_new(
  function STATIC (line 20649) | STATIC mp_obj_t mp_lv_spinner_create(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 20674) | STATIC void spinner_print(const mp_print_t *print,
  function STATIC (line 20682) | STATIC mp_obj_t spinner_make_new(
  function STATIC (line 20725) | STATIC void switch_print(const mp_print_t *print,
  function STATIC (line 20733) | STATIC mp_obj_t switch_make_new(
  function STATIC (line 20766) | STATIC mp_obj_t mp_lv_table_set_cell_value(size_t mp_n_args, const mp_ob...
  function STATIC (line 20801) | STATIC mp_obj_t mp_lv_table_set_col_width(size_t mp_n_args, const mp_obj...
  function STATIC (line 20820) | STATIC mp_obj_t mp_lv_table_add_cell_ctrl(size_t mp_n_args, const mp_obj...
  function STATIC (line 20844) | STATIC mp_obj_t mp_lv_table_get_cell_value(size_t mp_n_args, const mp_ob...
  function STATIC (line 20871) | STATIC mp_obj_t mp_lv_table_get_col_width(size_t mp_n_args, const mp_obj...
  function STATIC (line 20889) | STATIC mp_obj_t mp_lv_table_has_cell_ctrl(size_t mp_n_args, const mp_obj...
  function STATIC (line 20909) | STATIC mp_obj_t mp_lv_table_get_selected_cell(size_t mp_n_args, const mp...
  function STATIC (line 20951) | STATIC void table_print(const mp_print_t *print,
  function STATIC (line 20959) | STATIC mp_obj_t table_make_new(
  function STATIC (line 21008) | STATIC mp_obj_t mp_lv_tabview_set_act(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 21031) | STATIC mp_obj_t mp_lv_tabview_create(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 21061) | STATIC void tabview_print(const mp_print_t *print,
  function STATIC (line 21069) | STATIC mp_obj_t tabview_make_new(
  function STATIC (line 21102) | STATIC mp_obj_t mp_lv_tileview_add_tile(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 21137) | STATIC void tileview_print(const mp_print_t *print,
  function STATIC (line 21145) | STATIC mp_obj_t tileview_make_new(
  function STATIC (line 21182) | STATIC mp_obj_t mp_lv_win_add_btn(size_t mp_n_args, const mp_obj_t *mp_a...
  function STATIC (line 21209) | STATIC mp_obj_t mp_lv_win_create(size_t mp_n_args, const mp_obj_t *mp_ar...
  function STATIC (line 21236) | STATIC void win_print(const mp_print_t *print,
  function STATIC (line 21244) | STATIC mp_obj_t win_make_new(
  function STATIC (line 21282) | STATIC inline void* mp_write_ptr_lv_pinyin_dict_t(mp_obj_t self_in)
  function STATIC (line 21290) | STATIC inline mp_obj_t mp_read_ptr_lv_pinyin_dict_t(void *field)
  function STATIC (line 21298) | STATIC void mp_lv_pinyin_dict_t_attr(mp_obj_t self_in, qstr attr, mp_obj...
  function STATIC (line 21326) | STATIC void mp_lv_pinyin_dict_t_print(const mp_print_t *print,
  function STATIC (line 21348) | STATIC inline const mp_obj_type_t *get_mp_lv_pinyin_dict_t_type()
  function STATIC (line 21359) | STATIC mp_obj_t mp_lv_ime_pinyin_set_dict(size_t mp_n_args, const mp_obj...
  function STATIC (line 21377) | STATIC mp_obj_t mp_lv_ime_pinyin_set_mode(size_t mp_n_args, const mp_obj...
  function STATIC (line 21403) | STATIC mp_obj_t mp_lv_ime_pinyin_get_dict(size_t mp_n_args, const mp_obj...
  function STATIC (line 21436) | STATIC void ime_pinyin_print(const mp_print_t *print,
  function STATIC (line 21444) | STATIC mp_obj_t ime_pinyin_make_new(
  function STATIC (line 21477) | STATIC mp_obj_t mp_lv_file_explorer_set_quick_access_path(size_t mp_n_ar...
  function STATIC (line 21496) | STATIC mp_obj_t mp_lv_file_explorer_set_sort(size_t mp_n_args, const mp_...
  function STATIC (line 21546) | STATIC mp_obj_t mp_lv_file_explorer_get_sort(size_t mp_n_args, const mp_...
  function STATIC (line 21588) | STATIC void file_explorer_print(const mp_print_t *print,
  function STATIC (line 21596) | STATIC mp_obj_t file_explorer_make_new(
  function STATIC (line 21629) | STATIC mp_obj_t mp_lv_barcode_set_dark_color(size_t mp_n_args, const mp_...
  function STATIC (line 21655) | STATIC mp_obj_t mp_lv_barcode_update(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 21673) | STATIC mp_obj_t mp_lv_barcode_get_dark_color(size_t mp_n_args, const mp_...
  function STATIC (line 21714) | STATIC void barcode_print(const mp_print_t *print,
  function STATIC (line 21722) | STATIC mp_obj_t barcode_make_new(
  function STATIC (line 21774) | STATIC void gif_print(const mp_print_t *print,
  function STATIC (line 21782) | STATIC mp_obj_t gif_make_new(
  function STATIC (line 21827) | STATIC mp_obj_t mp_lv_qrcode_update(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 21859) | STATIC void qrcode_print(const mp_print_t *print,
  function STATIC (line 21867) | STATIC mp_obj_t qrcode_make_new(
  type _lv_mp_int_wrapper (line 21926) | typedef struct {
  function STATIC (line 21937) | STATIC inline void* mp_write_ptr__lv_mp_int_wrapper(mp_obj_t self_in)
  function STATIC (line 21945) | STATIC inline mp_obj_t mp_read_ptr__lv_mp_int_wrapper(void *field)
  function STATIC (line 21953) | STATIC void mp__lv_mp_int_wrapper_attr(mp_obj_t self_in, qstr attr, mp_o...
  function STATIC (line 21980) | STATIC void mp__lv_mp_int_wrapper_print(const mp_print_t *print,
  function STATIC (line 22002) | STATIC inline const mp_obj_type_t *get_mp__lv_mp_int_wrapper_type()
  function STATIC (line 22744) | STATIC inline void* mp_write_ptr_lv_color8_t(mp_obj_t self_in)
  function STATIC (line 22752) | STATIC inline mp_obj_t mp_read_ptr_lv_color8_t(void *field)
  function STATIC (line 22760) | STATIC void mp_lv_color8_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *d...
  function STATIC (line 22793) | STATIC void mp_lv_color8_t_print(const mp_print_t *print,
  function STATIC (line 22815) | STATIC inline const mp_obj_type_t *get_mp_lv_color8_t_type()
  function STATIC (line 22827) | STATIC inline void* mp_write_ptr_lv_color16_t(mp_obj_t self_in)
  function STATIC (line 22835) | STATIC inline mp_obj_t mp_read_ptr_lv_color16_t(void *field)
  function STATIC (line 22843) | STATIC void mp_lv_color16_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *...
  function STATIC (line 22874) | STATIC void mp_lv_color16_t_print(const mp_print_t *print,
  function STATIC (line 22896) | STATIC inline const mp_obj_type_t *get_mp_lv_color16_t_type()
  function STATIC (line 22908) | STATIC inline void* mp_write_ptr_lv_color24_t(mp_obj_t self_in)
  function STATIC (line 22916) | STATIC inline mp_obj_t mp_read_ptr_lv_color24_t(void *field)
  function STATIC (line 22924) | STATIC void mp_lv_color24_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *...
  function STATIC (line 22955) | STATIC void mp_lv_color24_t_print(const mp_print_t *print,
  function STATIC (line 22977) | STATIC inline const mp_obj_type_t *get_mp_lv_color24_t_type()
  function STATIC (line 22990) | STATIC mp_obj_t mp_funcptr_lv_log_print_g_cb_t(size_t mp_n_args, const m...
  function STATIC (line 23002) | STATIC inline mp_obj_t mp_lv_funcptr_lv_log_print_g_cb_t(void *func){ re...
  function STATIC (line 23011) | STATIC inline void* mp_write_ptr_lv_mem_monitor_t(mp_obj_t self_in)
  function STATIC (line 23019) | STATIC inline mp_obj_t mp_read_ptr_lv_mem_monitor_t(void *field)
  function STATIC (line 23027) | STATIC void mp_lv_mem_monitor_t_attr(mp_obj_t self_in, qstr attr, mp_obj...
  function STATIC (line 23068) | STATIC void mp_lv_mem_monitor_t_print(const mp_print_t *print,
  function STATIC (line 23090) | STATIC inline const mp_obj_type_t *get_mp_lv_mem_monitor_t_type()
  function STATIC (line 23103) | STATIC mp_obj_t mp_funcptr_lv_async_cb_t(size_t mp_n_args, const mp_obj_...
  function STATIC (line 23114) | STATIC inline mp_obj_t mp_lv_funcptr_lv_async_cb_t(void *func){ return m...
  function STATIC (line 23123) | STATIC inline void* mp_write_ptr_lv_anim_timeline_t(mp_obj_t self_in)
  function STATIC (line 23131) | STATIC inline mp_obj_t mp_read_ptr_lv_anim_timeline_t(void *field)
  function STATIC (line 23139) | STATIC void mp_lv_anim_timeline_t_attr(mp_obj_t self_in, qstr attr, mp_o...
  function STATIC (line 23166) | STATIC void mp_lv_anim_timeline_t_print(const mp_print_t *print,
  function STATIC (line 23188) | STATIC inline const mp_obj_type_t *get_mp_lv_anim_timeline_t_type()
  function STATIC (line 23201) | STATIC mp_obj_t mp_funcptr_lv_layout_update_cb_t(size_t mp_n_args, const...
  function STATIC (line 23213) | STATIC inline mp_obj_t mp_lv_funcptr_lv_layout_update_cb_t(void *func){ ...
  function STATIC (line 23223) | STATIC mp_obj_t mp_funcptr_ready_cb(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 23234) | STATIC inline mp_obj_t mp_lv_funcptr_ready_cb(void *func){ return mp_lv_...
  type _lv_fs_drv_t (line 23236) | struct _lv_fs_drv_t
  function STATIC (line 23245) | STATIC mp_obj_t mp_funcptr_open_cb_1(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 23258) | STATIC inline mp_obj_t mp_lv_funcptr_open_cb_1(void *func){ return mp_lv...
  type _lv_fs_drv_t (line 23260) | struct _lv_fs_drv_t
  function STATIC (line 23269) | STATIC mp_obj_t mp_funcptr_close_cb(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 23281) | STATIC inline mp_obj_t mp_lv_funcptr_close_cb(void *func){ return mp_lv_...
  type _lv_fs_drv_t (line 23283) | struct _lv_fs_drv_t
  function STATIC (line 23292) | STATIC mp_obj_t mp_funcptr_read_cb(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 23307) | STATIC inline mp_obj_t mp_lv_funcptr_read_cb(void *func){ return mp_lv_f...
  type _lv_fs_drv_t (line 23309) | struct _lv_fs_drv_t
  function STATIC (line 23318) | STATIC mp_obj_t mp_funcptr_write_cb(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 23333) | STATIC inline mp_obj_t mp_lv_funcptr_write_cb(void *func){ return mp_lv_...
  type _lv_fs_drv_t (line 23335) | struct _lv_fs_drv_t
  function STATIC (line 23344) | STATIC mp_obj_t mp_funcptr_seek_cb(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 23358) | STATIC inline mp_obj_t mp_lv_funcptr_seek_cb(void *func){ return mp_lv_f...
  type _lv_fs_drv_t (line 23360) | struct _lv_fs_drv_t
  function STATIC (line 23369) | STATIC mp_obj_t mp_funcptr_tell_cb(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 23382) | STATIC inline mp_obj_t mp_lv_funcptr_tell_cb(void *func){ return mp_lv_f...
  type _lv_fs_drv_t (line 23384) | struct _lv_fs_drv_t
  function STATIC (line 23393) | STATIC mp_obj_t mp_funcptr_dir_open_cb(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 23405) | STATIC inline mp_obj_t mp_lv_funcptr_dir_open_cb(void *func){ return mp_...
  type _lv_fs_drv_t (line 23407) | struct _lv_fs_drv_t
  function STATIC (line 23416) | STATIC mp_obj_t mp_funcptr_dir_read_cb(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 23429) | STATIC inline mp_obj_t mp_lv_funcptr_dir_read_cb(void *func){ return mp_...
  type _lv_fs_drv_t (line 23431) | struct _lv_fs_drv_t
  function STATIC (line 23438) | STATIC inline mp_obj_t mp_lv_funcptr_dir_close_cb(void *func){ return mp...
  type _lv_fs_drv_t (line 23440) | struct _lv_fs_drv_t
  function STATIC (line 23448) | STATIC inline void* mp_write_ptr_lv_fs_drv_t(mp_obj_t self_in)
  function STATIC (line 23456) | STATIC inline mp_obj_t mp_read_ptr_lv_fs_drv_t(void *field)
  function STATIC (line 23464) | STATIC void mp_lv_fs_drv_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *d...
  function STATIC (line 23515) | STATIC void mp_lv_fs_drv_t_print(const mp_print_t *print,
  function STATIC (line 23537) | STATIC inline const mp_obj_type_t *get_mp_lv_fs_drv_t_type()
  function STATIC (line 23549) | STATIC inline void* mp_write_ptr_lv_fs_file_cache_t(mp_obj_t self_in)
  function STATIC (line 23557) | STATIC inline mp_obj_t mp_read_ptr_lv_fs_file_cache_t(void *field)
  function STATIC (line 23565) | STATIC void mp_lv_fs_file_cache_t_attr(mp_obj_t self_in, qstr attr, mp_o...
  function STATIC (line 23598) | STATIC void mp_lv_fs_file_cache_t_print(const mp_print_t *print,
  function STATIC (line 23620) | STATIC inline const mp_obj_type_t *get_mp_lv_fs_file_cache_t_type()
  function STATIC (line 23632) | STATIC inline void* mp_write_ptr_lv_fs_file_t(mp_obj_t self_in)
  function STATIC (line 23640) | STATIC inline mp_obj_t mp_read_ptr_lv_fs_file_t(void *field)
  function STATIC (line 23648) | STATIC void mp_lv_fs_file_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *...
  function STATIC (line 23679) | STATIC void mp_lv_fs_file_t_print(const mp_print_t *print,
  function STATIC (line 23701) | STATIC inline const mp_obj_type_t *get_mp_lv_fs_file_t_type()
  function STATIC (line 23713) | STATIC inline void* mp_write_ptr_lv_fs_dir_t(mp_obj_t self_in)
  function STATIC (line 23721) | STATIC inline mp_obj_t mp_read_ptr_lv_fs_dir_t(void *field)
  function STATIC (line 23729) | STATIC void mp_lv_fs_dir_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *d...
  function STATIC (line 23758) | STATIC void mp_lv_fs_dir_t_print(const mp_print_t *print,
  function STATIC (line 23780) | STATIC inline const mp_obj_type_t *get_mp_lv_fs_dir_t_type()
  function STATIC (line 23792) | STATIC inline void* mp_write_ptr_lv_grad_t(mp_obj_t self_in)
  function STATIC (line 23800) | STATIC inline mp_obj_t mp_read_ptr_lv_grad_t(void *field)
  function STATIC (line 23808) | STATIC void mp_lv_grad_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest)
  function STATIC (line 23847) | STATIC void mp_lv_grad_t_print(const mp_print_t *print,
  function STATIC (line 23869) | STATIC inline const mp_obj_type_t *get_mp_lv_grad_t_type()
  function STATIC (line 23882) | STATIC mp_obj_t mp_funcptr_lv_draw_mask_xcb_t(size_t mp_n_args, const mp...
  function STATIC (line 23897) | STATIC inline mp_obj_t mp_lv_funcptr_lv_draw_mask_xcb_t(void *func){ ret...
  function STATIC (line 23913) | STATIC inline void* mp_write_ptr__lv_draw_mask_common_dsc_t(mp_obj_t sel...
  function STATIC (line 23921) | STATIC inline mp_obj_t mp_read_ptr__lv_draw_mask_common_dsc_t(void *field)
  function STATIC (line 23929) | STATIC void mp__lv_draw_mask_common_dsc_t_attr(mp_obj_t self_in, qstr at...
  function STATIC (line 23958) | STATIC void mp__lv_draw_mask_common_dsc_t_print(const mp_print_t *print,
  function STATIC (line 23980) | STATIC inline const mp_obj_type_t *get_mp__lv_draw_mask_common_dsc_t_type()
  type __typeof__ (line 23985) | typedef __typeof__( ((lv_draw_mask_line_param_t*)(0))->cfg )
  function STATIC (line 23993) | STATIC inline void* mp_write_ptr_lv_draw_mask_line_param_cfg_t(mp_obj_t ...
  function STATIC (line 24001) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_mask_line_param_cfg_t(void *f...
  function STATIC (line 24009) | STATIC void mp_lv_draw_mask_line_param_cfg_t_attr(mp_obj_t self_in, qstr...
  function STATIC (line 24040) | STATIC void mp_lv_draw_mask_line_param_cfg_t_print(const mp_print_t *print,
  function STATIC (line 24062) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_mask_line_param_cfg_t_...
  function STATIC (line 24074) | STATIC inline void* mp_write_ptr_lv_draw_mask_line_param_t(mp_obj_t self...
  function STATIC (line 24082) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_mask_line_param_t(void *field)
  function STATIC (line 24090) | STATIC void mp_lv_draw_mask_line_param_t_attr(mp_obj_t self_in, qstr att...
  function STATIC (line 24133) | STATIC void mp_lv_draw_mask_line_param_t_print(const mp_print_t *print,
  function STATIC (line 24155) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_mask_line_param_t_type()
  type __typeof__ (line 24160) | typedef __typeof__( ((lv_draw_mask_angle_param_t*)(0))->cfg )
  function STATIC (line 24168) | STATIC inline void* mp_write_ptr_lv_draw_mask_angle_param_cfg_t(mp_obj_t...
  function STATIC (line 24176) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_mask_angle_param_cfg_t(void *...
  function STATIC (line 24184) | STATIC void mp_lv_draw_mask_angle_param_cfg_t_attr(mp_obj_t self_in, qst...
  function STATIC (line 24215) | STATIC void mp_lv_draw_mask_angle_param_cfg_t_print(const mp_print_t *pr...
  function STATIC (line 24237) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_mask_angle_param_cfg_t...
  function STATIC (line 24249) | STATIC inline void* mp_write_ptr_lv_draw_mask_angle_param_t(mp_obj_t sel...
  function STATIC (line 24257) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_mask_angle_param_t(void *field)
  function STATIC (line 24265) | STATIC void mp_lv_draw_mask_angle_param_t_attr(mp_obj_t self_in, qstr at...
  function STATIC (line 24300) | STATIC void mp_lv_draw_mask_angle_param_t_print(const mp_print_t *print,
  function STATIC (line 24322) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_mask_angle_param_t_type()
  type __typeof__ (line 24327) | typedef __typeof__( ((lv_draw_mask_radius_param_t*)(0))->cfg )
  function STATIC (line 24335) | STATIC inline void* mp_write_ptr_lv_draw_mask_radius_param_cfg_t(mp_obj_...
  function STATIC (line 24343) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_mask_radius_param_cfg_t(void ...
  function STATIC (line 24351) | STATIC void mp_lv_draw_mask_radius_param_cfg_t_attr(mp_obj_t self_in, qs...
  function STATIC (line 24382) | STATIC void mp_lv_draw_mask_radius_param_cfg_t_print(const mp_print_t *p...
  function STATIC (line 24404) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_mask_radius_param_cfg_...
  function STATIC (line 24416) | STATIC inline void* mp_write_ptr__lv_draw_mask_radius_circle_dsc_t(mp_ob...
  function STATIC (line 24424) | STATIC inline mp_obj_t mp_read_ptr__lv_draw_mask_radius_circle_dsc_t(voi...
  function STATIC (line 24432) | STATIC void mp__lv_draw_mask_radius_circle_dsc_t_attr(mp_obj_t self_in, ...
  function STATIC (line 24471) | STATIC void mp__lv_draw_mask_radius_circle_dsc_t_print(const mp_print_t ...
  function STATIC (line 24493) | STATIC inline const mp_obj_type_t *get_mp__lv_draw_mask_radius_circle_ds...
  function STATIC (line 24505) | STATIC inline void* mp_write_ptr_lv_draw_mask_radius_param_t(mp_obj_t se...
  function STATIC (line 24513) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_mask_radius_param_t(void *field)
  function STATIC (line 24521) | STATIC void mp_lv_draw_mask_radius_param_t_attr(mp_obj_t self_in, qstr a...
  function STATIC (line 24552) | STATIC void mp_lv_draw_mask_radius_param_t_print(const mp_print_t *print,
  function STATIC (line 24574) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_mask_radius_param_t_ty...
  type __typeof__ (line 24579) | typedef __typeof__( ((lv_draw_mask_fade_param_t*)(0))->cfg )
  function STATIC (line 24587) | STATIC inline void* mp_write_ptr_lv_draw_mask_fade_param_cfg_t(mp_obj_t ...
  function STATIC (line 24595) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_mask_fade_param_cfg_t(void *f...
  function STATIC (line 24603) | STATIC void mp_lv_draw_mask_fade_param_cfg_t_attr(mp_obj_t self_in, qstr...
  function STATIC (line 24638) | STATIC void mp_lv_draw_mask_fade_param_cfg_t_print(const mp_print_t *print,
  function STATIC (line 24660) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_mask_fade_param_cfg_t_...
  function STATIC (line 24672) | STATIC inline void* mp_write_ptr_lv_draw_mask_fade_param_t(mp_obj_t self...
  function STATIC (line 24680) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_mask_fade_param_t(void *field)
  function STATIC (line 24688) | STATIC void mp_lv_draw_mask_fade_param_t_attr(mp_obj_t self_in, qstr att...
  function STATIC (line 24717) | STATIC void mp_lv_draw_mask_fade_param_t_print(const mp_print_t *print,
  function STATIC (line 24739) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_mask_fade_param_t_type()
  type __typeof__ (line 24744) | typedef __typeof__( ((lv_draw_mask_map_param_t*)(0))->cfg )
  function STATIC (line 24752) | STATIC inline void* mp_write_ptr_lv_draw_mask_map_param_cfg_t(mp_obj_t s...
  function STATIC (line 24760) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_mask_map_param_cfg_t(void *fi...
  function STATIC (line 24768) | STATIC void mp_lv_draw_mask_map_param_cfg_t_attr(mp_obj_t self_in, qstr ...
  function STATIC (line 24797) | STATIC void mp_lv_draw_mask_map_param_cfg_t_print(const mp_print_t *print,
  function STATIC (line 24819) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_mask_map_param_cfg_t_t...
  function STATIC (line 24831) | STATIC inline void* mp_write_ptr_lv_draw_mask_map_param_t(mp_obj_t self_in)
  function STATIC (line 24839) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_mask_map_param_t(void *field)
  function STATIC (line 24847) | STATIC void mp_lv_draw_mask_map_param_t_attr(mp_obj_t self_in, qstr attr...
  function STATIC (line 24876) | STATIC void mp_lv_draw_mask_map_param_t_print(const mp_print_t *print,
  function STATIC (line 24898) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_mask_map_param_t_type()
  type __typeof__ (line 24903) | typedef __typeof__( ((lv_draw_mask_polygon_param_t*)(0))->cfg )
  function STATIC (line 24911) | STATIC inline void* mp_write_ptr_lv_draw_mask_polygon_param_cfg_t(mp_obj...
  function STATIC (line 24919) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_mask_polygon_param_cfg_t(void...
  function STATIC (line 24927) | STATIC void mp_lv_draw_mask_polygon_param_cfg_t_attr(mp_obj_t self_in, q...
  function STATIC (line 24956) | STATIC void mp_lv_draw_mask_polygon_param_cfg_t_print(const mp_print_t *...
  function STATIC (line 24978) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_mask_polygon_param_cfg...
  function STATIC (line 24990) | STATIC inline void* mp_write_ptr_lv_draw_mask_polygon_param_t(mp_obj_t s...
  function STATIC (line 24998) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_mask_polygon_param_t(void *fi...
  function STATIC (line 25006) | STATIC void mp_lv_draw_mask_polygon_param_t_attr(mp_obj_t self_in, qstr ...
  function STATIC (line 25035) | STATIC void mp_lv_draw_mask_polygon_param_t_print(const mp_print_t *print,
  function STATIC (line 25057) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_mask_polygon_param_t_t...
  function STATIC (line 25071) | STATIC inline void* mp_write_ptr_lv_indev_data_t(mp_obj_t self_in)
  function STATIC (line 25079) | STATIC inline mp_obj_t mp_read_ptr_lv_indev_data_t(void *field)
  function STATIC (line 25087) | STATIC void mp_lv_indev_data_t_attr(mp_obj_t self_in, qstr attr, mp_obj_...
  function STATIC (line 25124) | STATIC void mp_lv_indev_data_t_print(const mp_print_t *print,
  function STATIC (line 25146) | STATIC inline const mp_obj_type_t *get_mp_lv_indev_data_t_type()
  function STATIC (line 25157) | STATIC mp_obj_t mp_funcptr_read_cb_1(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 25169) | STATIC inline mp_obj_t mp_lv_funcptr_read_cb_1(void *func){ return mp_lv...
  type _lv_indev_t (line 25171) | struct _lv_indev_t
  function STATIC (line 25180) | STATIC mp_obj_t mp_funcptr_feedback_cb(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 25192) | STATIC inline mp_obj_t mp_lv_funcptr_feedback_cb(void *func){ return mp_...
  type _lv_indev_t (line 25194) | struct _lv_indev_t
  type __typeof__ (line 25195) | typedef __typeof__( ((lv_indev_t*)(0))->pointer )
  function STATIC (line 25203) | STATIC inline void* mp_write_ptr_lv_indev_pointer_t(mp_obj_t self_in)
  function STATIC (line 25211) | STATIC inline mp_obj_t mp_read_ptr_lv_indev_pointer_t(void *field)
  function STATIC (line 25219) | STATIC void mp_lv_indev_pointer_t_attr(mp_obj_t self_in, qstr attr, mp_o...
  function STATIC (line 25276) | STATIC void mp_lv_indev_pointer_t_print(const mp_print_t *print,
  function STATIC (line 25298) | STATIC inline const mp_obj_type_t *get_mp_lv_indev_pointer_t_type()
  type __typeof__ (line 25303) | typedef __typeof__( ((lv_indev_t*)(0))->keypad )
  function STATIC (line 25311) | STATIC inline void* mp_write_ptr_lv_indev_keypad_t(mp_obj_t self_in)
  function STATIC (line 25319) | STATIC inline mp_obj_t mp_read_ptr_lv_indev_keypad_t(void *field)
  function STATIC (line 25327) | STATIC void mp_lv_indev_keypad_t_attr(mp_obj_t self_in, qstr attr, mp_ob...
  function STATIC (line 25356) | STATIC void mp_lv_indev_keypad_t_print(const mp_print_t *print,
  function STATIC (line 25378) | STATIC inline const mp_obj_type_t *get_mp_lv_indev_keypad_t_type()
  function STATIC (line 25390) | STATIC inline void* mp_write_ptr_lv_indev_t(mp_obj_t self_in)
  function STATIC (line 25398) | STATIC inline mp_obj_t mp_read_ptr_lv_indev_t(void *field)
  function STATIC (line 25406) | STATIC void mp_lv_indev_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest)
  function STATIC (line 25481) | STATIC void mp_lv_indev_t_print(const mp_print_t *print,
  function STATIC (line 25503) | STATIC inline const mp_obj_type_t *get_mp_lv_indev_t_type()
  function STATIC (line 25515) | STATIC inline void* mp_write_ptr_lv_msg_t(mp_obj_t self_in)
  function STATIC (line 25523) | STATIC inline mp_obj_t mp_read_ptr_lv_msg_t(void *field)
  function STATIC (line 25531) | STATIC void mp_lv_msg_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest)
  function STATIC (line 25564) | STATIC void mp_lv_msg_t_print(const mp_print_t *print,
  function STATIC (line 25586) | STATIC inline const mp_obj_type_t *get_mp_lv_msg_t_type()
  function STATIC (line 25598) | STATIC inline void* mp_write_ptr_gd_GCE(mp_obj_t self_in)
  function STATIC (line 25606) | STATIC inline mp_obj_t mp_read_ptr_gd_GCE(void *field)
  function STATIC (line 25614) | STATIC void mp_gd_GCE_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest)
  function STATIC (line 25649) | STATIC void mp_gd_GCE_print(const mp_print_t *print,
  function STATIC (line 25671) | STATIC inline const mp_obj_type_t *get_mp_gd_GCE_type()
  function mp_obj_t (line 25697) | mp_obj_t mp_arr_from_uint8_t___0x100_ptr_3__(uint8_t *arr)
  function STATIC (line 25713) | STATIC inline void* mp_write_ptr_gd_Palette(mp_obj_t self_in)
  function STATIC (line 25721) | STATIC inline mp_obj_t mp_read_ptr_gd_Palette(void *field)
  function STATIC (line 25729) | STATIC void mp_gd_Palette_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest)
  function STATIC (line 25758) | STATIC void mp_gd_Palette_print(const mp_print_t *print,
  function STATIC (line 25780) | STATIC inline const mp_obj_type_t *get_mp_gd_Palette_type()
  function STATIC (line 25793) | STATIC mp_obj_t mp_funcptr_plain_text(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 25812) | STATIC inline mp_obj_t mp_lv_funcptr_plain_text(void *func){ return mp_l...
  function STATIC (line 25829) | STATIC mp_obj_t mp_funcptr_comment(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 25840) | STATIC inline mp_obj_t mp_lv_funcptr_comment(void *func){ return mp_lv_f...
  function mp_obj_t (line 25872) | mp_obj_t mp_arr_from_char___8__(char *arr)
  function mp_obj_t (line 25902) | mp_obj_t mp_arr_from_char___3__(char *arr)
  function STATIC (line 25917) | STATIC mp_obj_t mp_funcptr_application(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 25930) | STATIC inline mp_obj_t mp_lv_funcptr_application(void *func){ return mp_...
  function STATIC (line 25946) | STATIC inline void* mp_write_ptr_gd_GIF(mp_obj_t self_in)
  function STATIC (line 25954) | STATIC inline mp_obj_t mp_read_ptr_gd_GIF(void *field)
  function STATIC (line 25962) | STATIC void mp_gd_GIF_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest)
  function STATIC (line 26033) | STATIC void mp_gd_GIF_print(const mp_print_t *print,
  function STATIC (line 26055) | STATIC inline const mp_obj_type_t *get_mp_gd_GIF_type()
  function STATIC (line 26074) | STATIC mp_obj_t mp_lv_color32_set_int(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 26092) | STATIC mp_obj_t mp_lv_color32_to_int(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 26109) | STATIC mp_obj_t mp_lv_color_set_int(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 26127) | STATIC mp_obj_t mp_lv_color_to_int(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 26144) | STATIC mp_obj_t mp_lv_color_eq(size_t mp_n_args, const mp_obj_t *mp_args...
  function STATIC (line 26162) | STATIC mp_obj_t mp_lv_color_to8(size_t mp_n_args, const mp_obj_t *mp_arg...
  function STATIC (line 26179) | STATIC mp_obj_t mp_lv_color_to16(size_t mp_n_args, const mp_obj_t *mp_ar...
  function STATIC (line 26196) | STATIC mp_obj_t mp_lv_color_to24(size_t mp_n_args, const mp_obj_t *mp_ar...
  function STATIC (line 26213) | STATIC mp_obj_t mp_lv_color_to32(size_t mp_n_args, const mp_obj_t *mp_ar...
  function STATIC (line 26230) | STATIC mp_obj_t mp_lv_color_mix(size_t mp_n_args, const mp_obj_t *mp_arg...
  function STATIC (line 26249) | STATIC mp_obj_t mp_lv_color_premult(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 26268) | STATIC mp_obj_t mp_lv_color_mix_with_alpha(size_t mp_n_args, const mp_ob...
  function STATIC (line 26290) | STATIC mp_obj_t mp_lv_color_brightness(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 26307) | STATIC mp_obj_t mp_lv_color_from_native(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 26327) | STATIC mp_obj_t mp_lv_color_fill(size_t mp_n_args, const mp_obj_t *mp_ar...
  function STATIC (line 26346) | STATIC mp_obj_t mp_lv_color_lighten(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 26372) | STATIC mp_obj_t mp_lv_color_to_hsv(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 26416) | STATIC mp_obj_t mp_lv_gradient_calculate(size_t mp_n_args, const mp_obj_...
  function STATIC (line 26435) | STATIC mp_obj_t mp_lv_gradient_get(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 26472) | STATIC mp_obj_t mp_lv_font_get_line_height(size_t mp_n_args, const mp_ob...
  function STATIC (line 26489) | STATIC mp_obj_t mp_lv_font_get_glyph_bitmap(size_t mp_n_args, const mp_o...
  function STATIC (line 26507) | STATIC mp_obj_t mp_lv_font_get_glyph_dsc(size_t mp_n_args, const mp_obj_...
  function STATIC (line 26527) | STATIC mp_obj_t mp_lv_font_get_glyph_width(size_t mp_n_args, const mp_ob...
  function STATIC (line 26546) | STATIC mp_obj_t mp_lv_font_free(size_t mp_n_args, const mp_obj_t *mp_arg...
  function lv_color_t (line 26594) | lv_color_t lv_color_filter_dsc_t_cb_callback(const struct _lv_color_filt...
  function STATIC (line 26613) | STATIC mp_obj_t mp_lv_color_filter_dsc_init(size_t mp_n_args, const mp_o...
  function STATIC (line 26640) | STATIC mp_obj_t mp_lv_anim_set_var(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 26665) | STATIC mp_obj_t mp_lv_anim_set_exec_cb(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 26683) | STATIC mp_obj_t mp_lv_anim_set_time(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 26705) | STATIC mp_obj_t mp_lv_anim_set_values(size_t mp_n_args, const mp_obj_t *...
  function lv_anim_t_exec_cb_callback (line 26724) | void lv_anim_t_exec_cb_callback(struct _lv_anim_t *arg0, int32_t arg1)
  function STATIC (line 26742) | STATIC mp_obj_t mp_lv_anim_set_custom_exec_cb(size_t mp_n_args, const mp...
  function lv_anim_t_path_cb_callback (line 26760) | int32_t lv_anim_t_path_cb_callback(const struct _lv_anim_t *arg0)
  function STATIC (line 26777) | STATIC mp_obj_t mp_lv_anim_set_path_cb(size_t mp_n_args, const mp_obj_t ...
  function lv_anim_t_start_cb_callback (line 26795) | void lv_anim_t_start_cb_callback(struct _lv_anim_t *arg0)
  function STATIC (line 26812) | STATIC mp_obj_t mp_lv_anim_set_start_cb(size_t mp_n_args, const mp_obj_t...
  function lv_anim_t_get_value_cb_callback (line 26830) | int32_t lv_anim_t_get_value_cb_callback(struct _lv_anim_t *arg0)
  function STATIC (line 26847) | STATIC mp_obj_t mp_lv_anim_set_get_value_cb(size_t mp_n_args, const mp_o...
  function lv_anim_t_ready_cb_callback (line 26865) | void lv_anim_t_ready_cb_callback(struct _lv_anim_t *arg0)
  function STATIC (line 26882) | STATIC mp_obj_t mp_lv_anim_set_ready_cb(size_t mp_n_args, const mp_obj_t...
  function lv_anim_t_deleted_cb_callback (line 26900) | void lv_anim_t_deleted_cb_callback(struct _lv_anim_t *arg0)
  function STATIC (line 26917) | STATIC mp_obj_t mp_lv_anim_set_deleted_cb(size_t mp_n_args, const mp_obj...
  function STATIC (line 26943) | STATIC mp_obj_t mp_lv_anim_set_repeat_count(size_t mp_n_args, const mp_o...
  function STATIC (line 26965) | STATIC mp_obj_t mp_lv_anim_set_early_apply(size_t mp_n_args, const mp_ob...
  function STATIC (line 26987) | STATIC mp_obj_t mp_lv_anim_get_delay(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 27008) | STATIC mp_obj_t mp_lv_anim_get_repeat_count(size_t mp_n_args, const mp_o...
  function STATIC (line 27025) | STATIC mp_obj_t mp_lv_anim_get_user_data(size_t mp_n_args, const mp_obj_...
  function STATIC (line 27042) | STATIC mp_obj_t mp_lv_anim_custom_del(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 27060) | STATIC mp_obj_t mp_lv_anim_custom_get(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 27082) | STATIC mp_obj_t mp_lv_anim_start(size_t mp_n_args, const mp_obj_t *mp_ar...
  function STATIC (line 27103) | STATIC mp_obj_t mp_lv_anim_path_linear(size_t mp_n_args, const mp_obj_t ...
  function lv_style_prop_t (line 27184) | lv_style_prop_t *mp_arr_to_lv_style_prop_t_____(mp_obj_t mp_arr)
  function mp_obj_t (line 27200) | mp_obj_t mp_arr_from_lv_style_prop_t_____(const lv_style_prop_t *arr)
  function lv_style_transition_dsc_init_path_cb_callback (line 27211) | int32_t lv_style_transition_dsc_init_path_cb_callback(const struct _lv_a...
  function STATIC (line 27228) | STATIC mp_obj_t mp_lv_style_transition_dsc_init(size_t mp_n_args, const ...
  function STATIC (line 27259) | STATIC mp_obj_t mp_lv_disp_dpx(size_t mp_n_args, const mp_obj_t *mp_args...
  function STATIC (line 27277) | STATIC mp_obj_t mp_lv_disp_remove(size_t mp_n_args, const mp_obj_t *mp_a...
  function STATIC (line 27298) | STATIC mp_obj_t mp_lv_disp_get_next(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 27315) | STATIC mp_obj_t mp_lv_disp_set_res(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 27342) | STATIC mp_obj_t mp_lv_disp_set_rotation(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 27361) | STATIC mp_obj_t mp_lv_disp_set_dpi(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 27379) | STATIC mp_obj_t mp_lv_disp_get_hor_res(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 27416) | STATIC mp_obj_t mp_lv_disp_get_rotation(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 27437) | STATIC mp_obj_t mp_lv_disp_set_draw_buffers(size_t mp_n_args, const mp_o...
  function lv_disp_t_flush_cb_callback (line 27458) | void lv_disp_t_flush_cb_callback(struct _lv_disp_t *arg0, const lv_area_...
  function STATIC (line 27477) | STATIC mp_obj_t mp_lv_disp_set_flush_cb(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 27495) | STATIC mp_obj_t mp_lv_disp_set_color_format(size_t mp_n_args, const mp_o...
  function STATIC (line 27513) | STATIC mp_obj_t mp_lv_disp_get_color_format(size_t mp_n_args, const mp_o...
  function STATIC (line 27530) | STATIC mp_obj_t mp_lv_disp_set_antialaising(size_t mp_n_args, const mp_o...
  function STATIC (line 27548) | STATIC mp_obj_t mp_lv_disp_get_antialiasing(size_t mp_n_args, const mp_o...
  function lv_disp_t_draw_ctx_init_callback (line 27577) | void lv_disp_t_draw_ctx_init_callback(lv_disp_t *arg0, struct _lv_draw_c...
  function lv_disp_t_draw_ctx_deinit_callback (line 27595) | void lv_disp_t_draw_ctx_deinit_callback(lv_disp_t *arg0, struct _lv_draw...
  function STATIC (line 27613) | STATIC mp_obj_t mp_lv_disp_set_draw_ctx(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 27633) | STATIC mp_obj_t mp_lv_disp_get_scr_act(size_t mp_n_args, const mp_obj_t ...
  function lv_disp_add_event_event_cb_callback (line 27666) | void lv_disp_add_event_event_cb_callback(lv_event_t *arg0)
  function STATIC (line 27683) | STATIC mp_obj_t mp_lv_disp_add_event(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 27703) | STATIC mp_obj_t mp_lv_disp_get_event_count(size_t mp_n_args, const mp_ob...
  function STATIC (line 27720) | STATIC mp_obj_t mp_lv_disp_get_event_dsc(size_t mp_n_args, const mp_obj_...
  function STATIC (line 27738) | STATIC mp_obj_t mp_lv_disp_remove_event(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 27756) | STATIC mp_obj_t mp_lv_disp_send_event(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 27775) | STATIC mp_obj_t mp_lv_disp_set_theme(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 27793) | STATIC mp_obj_t mp_lv_disp_get_theme(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 27810) | STATIC mp_obj_t mp_lv_disp_get_inactive_time(size_t mp_n_args, const mp_...
  function STATIC (line 27839) | STATIC mp_obj_t mp_lv_disp_get_chroma_key_color(size_t mp_n_args, const ...
  function STATIC (line 27856) | STATIC mp_obj_t mp_lv_disp_set_user_data(size_t mp_n_args, const mp_obj_...
  function STATIC (line 27878) | STATIC mp_obj_t mp_lv_disp_get_user_data(size_t mp_n_args, const mp_obj_...
  function STATIC (line 27955) | STATIC mp_obj_t mp_lv_area_copy(size_t mp_n_args, const mp_obj_t *mp_arg...
  function STATIC (line 27973) | STATIC mp_obj_t mp_lv_area_get_width(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 27994) | STATIC mp_obj_t mp_lv_area_set(size_t mp_n_args, const mp_obj_t *mp_args...
  function STATIC (line 28015) | STATIC mp_obj_t mp_lv_area_set_width(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 28037) | STATIC mp_obj_t mp_lv_area_get_size(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 28054) | STATIC mp_obj_t mp_lv_area_increase(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 28077) | STATIC mp_obj_t mp_lv_area_align(size_t mp_n_args, const mp_obj_t *mp_ar...
  function STATIC (line 28121) | STATIC inline void* mp_write_ptr_lv_draw_label_hint_t(mp_obj_t self_in)
  function STATIC (line 28129) | STATIC inline mp_obj_t mp_read_ptr_lv_draw_label_hint_t(void *field)
  function STATIC (line 28137) | STATIC void mp_lv_draw_label_hint_t_attr(mp_obj_t self_in, qstr attr, mp...
  function STATIC (line 28168) | STATIC void mp_lv_draw_label_hint_t_print(const mp_print_t *print,
  function STATIC (line 28190) | STATIC inline const mp_obj_type_t *get_mp_lv_draw_label_hint_t_type()
  function STATIC (line 28201) | STATIC mp_obj_t mp_lv_draw_label(size_t mp_n_args, const mp_obj_t *mp_ar...
  function STATIC (line 28226) | STATIC mp_obj_t mp_lv_draw_img(size_t mp_n_args, const mp_obj_t *mp_args...
  function STATIC (line 28258) | STATIC mp_obj_t mp_lv_draw_triangle(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 28285) | STATIC mp_obj_t mp_lv_draw_layer_create(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 28308) | STATIC mp_obj_t mp_lv_draw_layer_blend(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 28327) | STATIC mp_obj_t mp_lv_draw_layer_destroy(size_t mp_n_args, const mp_obj_...
  function STATIC (line 28345) | STATIC mp_obj_t mp_lv_draw_wait_for_finish(size_t mp_n_args, const mp_ob...
  function STATIC (line 28385) | STATIC mp_obj_t mp_lv_draw_rect_dsc_init(size_t mp_n_args, const mp_obj_...
  function STATIC (line 28411) | STATIC mp_obj_t mp_lv_draw_arc_dsc_init(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 28437) | STATIC mp_obj_t mp_lv_point_transform(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 28466) | STATIC mp_obj_t mp_lv_draw_img_dsc_init(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 28500) | STATIC mp_obj_t mp_lv_draw_label_dsc_init(size_t mp_n_args, const mp_obj...
  function STATIC (line 28526) | STATIC mp_obj_t mp_lv_draw_line_dsc_init(size_t mp_n_args, const mp_obj_...
  function STATIC (line 28568) | STATIC mp_obj_t mp_lv_event_send(size_t mp_n_args, const mp_obj_t *mp_ar...
  function lv_event_add_cb_callback (line 28587) | void lv_event_add_cb_callback(lv_event_t *arg0)
  function STATIC (line 28604) | STATIC mp_obj_t mp_lv_event_add(size_t mp_n_args, const mp_obj_t *mp_arg...
  function STATIC (line 28624) | STATIC mp_obj_t mp_lv_event_get_count(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 28641) | STATIC mp_obj_t mp_lv_event_get_dsc(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 28659) | STATIC mp_obj_t mp_lv_event_remove(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 28690) | STATIC inline mp_obj_t mp_lv_funcptr_lv_event_cb_t(void *func){ return m...
  function STATIC (line 28698) | STATIC mp_obj_t mp_lv_event_dsc_get_cb(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 28715) | STATIC mp_obj_t mp_lv_event_dsc_get_user_data(size_t mp_n_args, const mp...
  function STATIC (line 28742) | STATIC mp_obj_t mp_lv_theme_set_parent(size_t mp_n_args, const mp_obj_t ...
  function lv_theme_t_apply_cb_callback (line 28760) | void lv_theme_t_apply_cb_callback(struct _lv_theme_t *arg0, lv_obj_t *arg1)
  function STATIC (line 28778) | STATIC mp_obj_t mp_lv_theme_set_apply_cb(size_t mp_n_args, const mp_obj_...
  function STATIC (line 28806) | STATIC mp_obj_t mp_lv_timer_get_user_data(size_t mp_n_args, const mp_obj...
  function STATIC (line 28823) | STATIC mp_obj_t mp_lv_timer_del(size_t mp_n_args, const mp_obj_t *mp_arg...
  function lv_timer_t_timer_cb_callback (line 28848) | void lv_timer_t_timer_cb_callback(struct _lv_timer_t *arg0)
  function STATIC (line 28865) | STATIC mp_obj_t mp_lv_timer_set_cb(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 28883) | STATIC mp_obj_t mp_lv_timer_set_period(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 28905) | STATIC mp_obj_t mp_lv_timer_set_repeat_count(size_t mp_n_args, const mp_...
  function STATIC (line 28927) | STATIC mp_obj_t mp_lv_timer_get_next(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 28962) | STATIC mp_obj_t mp_lv_style_get_prop_inlined(size_t mp_n_args, const mp_...
  function STATIC (line 28981) | STATIC mp_obj_t mp_lv_style_set_size(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 29000) | STATIC mp_obj_t mp_lv_style_set_pad_all(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 29038) | STATIC mp_obj_t mp_lv_style_remove_prop(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 29056) | STATIC mp_obj_t mp_lv_style_set_prop(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 29075) | STATIC mp_obj_t mp_lv_style_set_prop_meta(size_t mp_n_args, const mp_obj...
  function STATIC (line 29098) | STATIC mp_obj_t mp_lv_style_is_empty(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 29147) | STATIC mp_obj_t mp_lv_style_set_align(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 29237) | STATIC mp_obj_t mp_lv_style_set_bg_color(size_t mp_n_args, const mp_obj_...
  function STATIC (line 29255) | STATIC mp_obj_t mp_lv_style_set_bg_opa(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 29277) | STATIC mp_obj_t mp_lv_style_set_bg_grad_dir(size_t mp_n_args, const mp_o...
  function STATIC (line 29303) | STATIC mp_obj_t mp_lv_style_set_bg_grad(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 29321) | STATIC mp_obj_t mp_lv_style_set_bg_dither_mode(size_t mp_n_args, const m...
  function STATIC (line 29339) | STATIC mp_obj_t mp_lv_style_set_bg_img_src(size_t mp_n_args, const mp_ob...
  function STATIC (line 29369) | STATIC mp_obj_t mp_lv_style_set_bg_img_tiled(size_t mp_n_args, const mp_...
  function STATIC (line 29399) | STATIC mp_obj_t mp_lv_style_set_border_side(size_t mp_n_args, const mp_o...
  function STATIC (line 29525) | STATIC mp_obj_t mp_lv_style_set_text_font(size_t mp_n_args, const mp_obj...
  function STATIC (line 29551) | STATIC mp_obj_t mp_lv_style_set_text_decor(size_t mp_n_args, const mp_ob...
  function STATIC (line 29569) | STATIC mp_obj_t mp_lv_style_set_text_align(size_t mp_n_args, const mp_ob...
  function STATIC (line 29599) | STATIC mp_obj_t mp_lv_style_set_color_filter_dsc(size_t mp_n_args, const...
  function STATIC (line 29621) | STATIC mp_obj_t mp_lv_style_set_anim(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 29639) | STATIC mp_obj_t mp_lv_style_set_anim_time(size_t mp_n_args, const mp_obj...
  function STATIC (line 29661) | STATIC mp_obj_t mp_lv_style_set_transition(size_t mp_n_args, const mp_ob...
  function STATIC (line 29679) | STATIC mp_obj_t mp_lv_style_set_blend_mode(size_t mp_n_args, const mp_ob...
  function STATIC (line 29697) | STATIC mp_obj_t mp_lv_style_set_layout(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 29715) | STATIC mp_obj_t mp_lv_style_set_base_dir(size_t mp_n_args, const mp_obj_...
  function STATIC (line 29733) | STATIC mp_obj_t mp_lv_style_set_flex_flow(size_t mp_n_args, const mp_obj...
  function STATIC (line 29751) | STATIC mp_obj_t mp_lv_style_set_flex_main_place(size_t mp_n_args, const ...
  function STATIC (line 29777) | STATIC mp_obj_t mp_lv_style_set_flex_grow(size_t mp_n_args, const mp_obj...
  function STATIC (line 29795) | STATIC mp_obj_t mp_lv_style_set_grid_row_dsc_array(size_t mp_n_args, con...
  function STATIC (line 29817) | STATIC mp_obj_t mp_lv_style_set_grid_row_align(size_t mp_n_args, const m...
  function STATIC (line 30031) | STATIC mp_obj_t mp_lv_event_get_target(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 30052) | STATIC mp_obj_t mp_lv_event_get_code(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 30085) | STATIC mp_obj_t mp_lv_event_get_target_obj(size_t mp_n_args, const mp_ob...
  function STATIC (line 30106) | STATIC mp_obj_t mp_lv_event_get_indev(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 30123) | STATIC mp_obj_t mp_lv_event_get_draw_part_dsc(size_t mp_n_args, const mp...
  function STATIC (line 30140) | STATIC mp_obj_t mp_lv_event_get_draw_ctx(size_t mp_n_args, const mp_obj_...
  function STATIC (line 30157) | STATIC mp_obj_t mp_lv_event_get_old_size(size_t mp_n_args, const mp_obj_...
  function STATIC (line 30174) | STATIC mp_obj_t mp_lv_event_get_key(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 30191) | STATIC mp_obj_t mp_lv_event_get_scroll_anim(size_t mp_n_args, const mp_o...
  function STATIC (line 30208) | STATIC mp_obj_t mp_lv_event_set_ext_draw_size(size_t mp_n_args, const mp...
  function STATIC (line 30226) | STATIC mp_obj_t mp_lv_event_get_self_size_info(size_t mp_n_args, const m...
  function STATIC (line 30244) | STATIC inline void* mp_write_ptr_lv_hit_test_info_t(mp_obj_t self_in)
  function STATIC (line 30252) | STATIC inline mp_obj_t mp_read_ptr_lv_hit_test_info_t(void *field)
  function STATIC (line 30260) | STATIC void mp_lv_hit_test_info_t_attr(mp_obj_t self_in, qstr attr, mp_o...
  function STATIC (line 30289) | STATIC void mp_lv_hit_test_info_t_print(const mp_print_t *print,
  function STATIC (line 30311) | STATIC inline const mp_obj_type_t *get_mp_lv_hit_test_info_t_type()
  function STATIC (line 30322) | STATIC mp_obj_t mp_lv_event_get_hit_test_info(size_t mp_n_args, const mp...
  function STATIC (line 30343) | STATIC mp_obj_t mp_lv_event_set_cover_res(size_t mp_n_args, const mp_obj...
  function STATIC (line 30361) | STATIC mp_obj_t mp_lv_event_get_msg(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 30407) | STATIC mp_obj_t mp_lv_group_del(size_t mp_n_args, const mp_obj_t *mp_arg...
  function STATIC (line 30428) | STATIC mp_obj_t mp_lv_group_add_obj(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 30458) | STATIC mp_obj_t mp_lv_group_focus_freeze(size_t mp_n_args, const mp_obj_...
  function STATIC (line 30476) | STATIC mp_obj_t mp_lv_group_send_data(size_t mp_n_args, const mp_obj_t *...
  function lv_group_t_focus_cb_callback (line 30494) | void lv_group_t_focus_cb_callback(struct _lv_group_t *arg0)
  function STATIC (line 30511) | STATIC mp_obj_t mp_lv_group_set_focus_cb(size_t mp_n_args, const mp_obj_...
  function lv_group_t_edge_cb_callback (line 30529) | void lv_group_t_edge_cb_callback(struct _lv_group_t *arg0, bool arg1)
  function STATIC (line 30547) | STATIC mp_obj_t mp_lv_group_set_edge_cb(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 30565) | STATIC mp_obj_t mp_lv_group_set_refocus_policy(size_t mp_n_args, const m...
  function STATIC (line 30591) | STATIC mp_obj_t mp_lv_group_get_focused(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 30608) | STATIC mp_obj_t mp_lv_group_get_focus_cb(size_t mp_n_args, const mp_obj_...
  function STATIC (line 30625) | STATIC mp_obj_t mp_lv_group_get_edge_cb(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 30642) | STATIC mp_obj_t mp_lv_group_get_editing(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 30659) | STATIC mp_obj_t mp_lv_group_get_wrap(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 30676) | STATIC mp_obj_t mp_lv_group_get_obj_count(size_t mp_n_args, const mp_obj...
  function STATIC (line 30871) | STATIC mp_obj_t mp_lv_span_set_text(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 30919) | STATIC mp_obj_t mp_lv_color8_set_int(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 30937) | STATIC mp_obj_t mp_lv_color8_to_int(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 30964) | STATIC mp_obj_t mp_lv_color16_set_int(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 30982) | STATIC mp_obj_t mp_lv_color16_to_int(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 31009) | STATIC mp_obj_t mp_lv_color24_set_int(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 31027) | STATIC mp_obj_t mp_lv_color24_to_int(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 31054) | STATIC mp_obj_t mp_lv_mem_monitor(size_t mp_n_args, const mp_obj_t *mp_a...
  function STATIC (line 31080) | STATIC mp_obj_t mp_lv_anim_timeline_del(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 31097) | STATIC mp_obj_t mp_lv_anim_timeline_add(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 31116) | STATIC mp_obj_t mp_lv_anim_timeline_start(size_t mp_n_args, const mp_obj...
  function STATIC (line 31137) | STATIC mp_obj_t mp_lv_anim_timeline_set_reverse(size_t mp_n_args, const ...
  function STATIC (line 31155) | STATIC mp_obj_t mp_lv_anim_timeline_set_progress(size_t mp_n_args, const...
  function STATIC (line 31177) | STATIC mp_obj_t mp_lv_anim_timeline_get_reverse(size_t mp_n_args, const ...
  function STATIC (line 31210) | STATIC mp_obj_t mp_lv_fs_drv_init(size_t mp_n_args, const mp_obj_t *mp_a...
  function STATIC (line 31241) | STATIC mp_obj_t mp_lv_fs_open(size_t mp_n_args, const mp_obj_t *mp_args,...
  function STATIC (line 31260) | STATIC mp_obj_t mp_lv_fs_close(size_t mp_n_args, const mp_obj_t *mp_args...
  function STATIC (line 31277) | STATIC mp_obj_t mp_lv_fs_read(size_t mp_n_args, const mp_obj_t *mp_args,...
  function STATIC (line 31297) | STATIC mp_obj_t mp_lv_fs_write(size_t mp_n_args, const mp_obj_t *mp_args...
  function STATIC (line 31317) | STATIC mp_obj_t mp_lv_fs_seek(size_t mp_n_args, const mp_obj_t *mp_args,...
  function STATIC (line 31336) | STATIC mp_obj_t mp_lv_fs_tell(size_t mp_n_args, const mp_obj_t *mp_args,...
  function STATIC (line 31376) | STATIC mp_obj_t mp_lv_fs_dir_open(size_t mp_n_args, const mp_obj_t *mp_a...
  function STATIC (line 31394) | STATIC mp_obj_t mp_lv_fs_dir_read(size_t mp_n_args, const mp_obj_t *mp_a...
  function STATIC (line 31412) | STATIC mp_obj_t mp_lv_fs_dir_close(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 31440) | STATIC mp_obj_t mp_lv_gradient_cleanup(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 31466) | STATIC mp_obj_t mp_lv_draw_mask_line_points_init(size_t mp_n_args, const...
  function STATIC (line 31488) | STATIC mp_obj_t mp_lv_draw_mask_line_angle_init(size_t mp_n_args, const ...
  function STATIC (line 31535) | STATIC mp_obj_t mp_lv_draw_mask_angle_init(size_t mp_n_args, const mp_ob...
  function STATIC (line 31573) | STATIC mp_obj_t mp_lv_draw_mask_radius_init(size_t mp_n_args, const mp_o...
  function STATIC (line 31618) | STATIC mp_obj_t mp_lv_draw_mask_fade_init(size_t mp_n_args, const mp_obj...
  function STATIC (line 31657) | STATIC mp_obj_t mp_lv_draw_mask_map_init(size_t mp_n_args, const mp_obj_...
  function STATIC (line 31693) | STATIC mp_obj_t mp_lv_draw_mask_polygon_init(size_t mp_n_args, const mp_...
  function STATIC (line 31729) | STATIC mp_obj_t mp_lv_indev_delete(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 31746) | STATIC mp_obj_t mp_lv_indev_get_next(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 31763) | STATIC mp_obj_t mp_lv_indev_enable(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 31781) | STATIC mp_obj_t mp_lv_indev_set_type(size_t mp_n_args, const mp_obj_t *m...
  function lv_indev_t_read_cb_callback (line 31799) | void lv_indev_t_read_cb_callback(struct _lv_indev_t *arg0, lv_indev_data...
  function STATIC (line 31817) | STATIC mp_obj_t mp_lv_indev_set_read_cb(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 31835) | STATIC mp_obj_t mp_lv_indev_set_user_data(size_t mp_n_args, const mp_obj...
  function STATIC (line 31857) | STATIC mp_obj_t mp_lv_indev_get_type(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 31874) | STATIC mp_obj_t mp_lv_indev_get_state(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 31891) | STATIC mp_obj_t mp_lv_indev_get_group(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 31908) | STATIC mp_obj_t mp_lv_indev_get_disp(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 31925) | STATIC mp_obj_t mp_lv_indev_set_disp(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 31943) | STATIC mp_obj_t mp_lv_indev_get_user_data(size_t mp_n_args, const mp_obj...
  function STATIC (line 31964) | STATIC mp_obj_t mp_lv_indev_reset(size_t mp_n_args, const mp_obj_t *mp_a...
  function STATIC (line 31990) | STATIC mp_obj_t mp_lv_indev_set_group(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 32008) | STATIC mp_obj_t mp_lv_indev_set_button_points(size_t mp_n_args, const mp...
  function STATIC (line 32026) | STATIC mp_obj_t mp_lv_indev_get_point(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 32044) | STATIC mp_obj_t mp_lv_indev_get_gesture_dir(size_t mp_n_args, const mp_o...
  function STATIC (line 32061) | STATIC mp_obj_t mp_lv_indev_get_key(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 32082) | STATIC mp_obj_t mp_lv_indev_get_scroll_obj(size_t mp_n_args, const mp_ob...
  function STATIC (line 32107) | STATIC mp_obj_t mp_lv_indev_get_read_timer(size_t mp_n_args, const mp_ob...
  function STATIC (line 32183) | STATIC mp_obj_t mp_lv_msg_get_id(size_t mp_n_args, const mp_obj_t *mp_ar...
  function STATIC (line 32200) | STATIC mp_obj_t mp_lv_msg_get_payload(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 32217) | STATIC mp_obj_t mp_lv_msg_get_user_data(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 32245) | STATIC mp_obj_t mp_gd_render_frame(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 32263) | STATIC mp_obj_t mp_gd_get_frame(size_t mp_n_args, const mp_obj_t *mp_arg...
  function STATIC (line 32280) | STATIC mp_obj_t mp_gd_rewind(size_t mp_n_args, const mp_obj_t *mp_args, ...
  function STATIC (line 32336) | STATIC mp_obj_t mp_lv_timer_handler_run_in_period(size_t mp_n_args, cons...
  function STATIC (line 32369) | STATIC mp_obj_t mp_lv_trigo_cos(size_t mp_n_args, const mp_obj_t *mp_arg...
  function STATIC (line 32386) | STATIC mp_obj_t mp_lv_memzero(size_t mp_n_args, const mp_obj_t *mp_args,...
  function STATIC (line 32404) | STATIC mp_obj_t mp_lv_pct(size_t mp_n_args, const mp_obj_t *mp_args, voi...
  function STATIC (line 32421) | STATIC mp_obj_t mp_lv_font_default(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 32438) | STATIC mp_obj_t mp_lv_color8_from_buf(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 32455) | STATIC mp_obj_t mp_lv_color16_from_buf(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 32472) | STATIC mp_obj_t mp_lv_color24_from_buf(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 32489) | STATIC mp_obj_t mp_lv_color32_from_buf(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 32506) | STATIC mp_obj_t mp_lv_color_from_buf(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 32523) | STATIC mp_obj_t mp_lv_color_mix_premult(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 32542) | STATIC mp_obj_t mp_lv_color_make(size_t mp_n_args, const mp_obj_t *mp_ar...
  function STATIC (line 32561) | STATIC mp_obj_t mp_lv_color_hex(size_t mp_n_args, const mp_obj_t *mp_arg...
  function STATIC (line 32582) | STATIC mp_obj_t mp_lv_color_chroma_key(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 32607) | STATIC mp_obj_t mp_lv_style_prop_has_flag(size_t mp_n_args, const mp_obj...
  function STATIC (line 32625) | STATIC mp_obj_t mp_lv_scr_act(size_t mp_n_args, const mp_obj_t *mp_args,...
  function STATIC (line 32662) | STATIC mp_obj_t mp_lv_grid_fr(size_t mp_n_args, const mp_obj_t *mp_args,...
  function STATIC (line 32679) | STATIC mp_obj_t mp_lv_task_handler(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 32696) | STATIC mp_obj_t mp_lv_version_major(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 32721) | STATIC mp_obj_t mp_lv_version_info(size_t mp_n_args, const mp_obj_t *mp_...
  function lv_log_print_g_cb_t_print_cb_callback (line 32738) | void lv_log_print_g_cb_t_print_cb_callback(lv_log_level_t arg0, const ch...
  function STATIC (line 32756) | STATIC mp_obj_t mp_lv_log_register_print_cb(size_t mp_n_args, const mp_o...
  function STATIC (line 32780) | STATIC mp_obj_t mp_lv_tick_inc(size_t mp_n_args, const mp_obj_t *mp_args...
  function STATIC (line 32809) | STATIC mp_obj_t mp_lv_timer_create_basic(size_t mp_n_args, const mp_obj_...
  function lv_timer_create_timer_xcb_callback (line 32826) | void lv_timer_create_timer_xcb_callback(struct _lv_timer_t *arg0)
  function STATIC (line 32843) | STATIC mp_obj_t mp_lv_timer_create(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 32866) | STATIC mp_obj_t mp_lv_timer_get_idle(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 32887) | STATIC mp_obj_t mp_lv_bezier3(size_t mp_n_args, const mp_obj_t *mp_args,...
  function STATIC (line 32908) | STATIC mp_obj_t mp_lv_atan2(size_t mp_n_args, const mp_obj_t *mp_args, v...
  function STATIC (line 32927) | STATIC inline void* mp_write_ptr_lv_sqrt_res_t(mp_obj_t self_in)
  function STATIC (line 32935) | STATIC inline mp_obj_t mp_read_ptr_lv_sqrt_res_t(void *field)
  function STATIC (line 32943) | STATIC void mp_lv_sqrt_res_t_attr(mp_obj_t self_in, qstr attr, mp_obj_t ...
  function STATIC (line 32972) | STATIC void mp_lv_sqrt_res_t_print(const mp_print_t *print,
  function STATIC (line 32994) | STATIC inline const mp_obj_type_t *get_mp_lv_sqrt_res_t_type()
  function STATIC (line 33005) | STATIC mp_obj_t mp_lv_sqrt(size_t mp_n_args, const mp_obj_t *mp_args, vo...
  function STATIC (line 33032) | STATIC mp_obj_t mp_lv_pow(size_t mp_n_args, const mp_obj_t *mp_args, voi...
  function STATIC (line 33050) | STATIC mp_obj_t mp_lv_map(size_t mp_n_args, const mp_obj_t *mp_args, voi...
  function STATIC (line 33071) | STATIC mp_obj_t mp_lv_rand(size_t mp_n_args, const mp_obj_t *mp_args, vo...
  function STATIC (line 33089) | STATIC mp_obj_t mp_lv_malloc(size_t mp_n_args, const mp_obj_t *mp_args, ...
  function STATIC (line 33110) | STATIC mp_obj_t mp_lv_realloc(size_t mp_n_args, const mp_obj_t *mp_args,...
  function STATIC (line 33128) | STATIC mp_obj_t mp_lv_memcpy(size_t mp_n_args, const mp_obj_t *mp_args, ...
  function STATIC (line 33147) | STATIC mp_obj_t mp_lv_memset(size_t mp_n_args, const mp_obj_t *mp_args, ...
  function STATIC (line 33166) | STATIC mp_obj_t mp_lv_strlen(size_t mp_n_args, const mp_obj_t *mp_args, ...
  function STATIC (line 33183) | STATIC mp_obj_t mp_lv_strncpy(size_t mp_n_args, const mp_obj_t *mp_args,...
  function STATIC (line 33202) | STATIC mp_obj_t mp_lv_mem_test(size_t mp_n_args, const mp_obj_t *mp_args...
  function lv_async_call_async_xcb_callback (line 33219) | void lv_async_call_async_xcb_callback(void *arg0)
  function STATIC (line 33236) | STATIC mp_obj_t mp_lv_async_call(size_t mp_n_args, const mp_obj_t *mp_ar...
  function STATIC (line 33265) | STATIC mp_obj_t mp_lv_anim_del(size_t mp_n_args, const mp_obj_t *mp_args...
  function STATIC (line 33283) | STATIC mp_obj_t mp_lv_anim_del_all(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 33307) | STATIC mp_obj_t mp_lv_anim_get(size_t mp_n_args, const mp_obj_t *mp_args...
  function STATIC (line 33325) | STATIC mp_obj_t mp_lv_anim_get_timer(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 33342) | STATIC mp_obj_t mp_lv_anim_count_running(size_t mp_n_args, const mp_obj_...
  function STATIC (line 33359) | STATIC mp_obj_t mp_lv_anim_speed_to_time(size_t mp_n_args, const mp_obj_...
  function STATIC (line 33382) | STATIC mp_obj_t mp_lv_anim_timeline_create(size_t mp_n_args, const mp_ob...
  function STATIC (line 33413) | STATIC mp_obj_t mp_lv_color_to_native(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 33435) | STATIC mp_obj_t mp_lv_color_from_native_alpha(size_t mp_n_args, const mp...
  function STATIC (line 33455) | STATIC mp_obj_t mp_lv_color_format_get_size(size_t mp_n_args, const mp_o...
  function STATIC (line 33472) | STATIC mp_obj_t mp_lv_color_format_has_alpha(size_t mp_n_args, const mp_...
  function STATIC (line 33489) | STATIC mp_obj_t mp_lv_color_hsv_to_rgb(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 33508) | STATIC mp_obj_t mp_lv_color_rgb_to_hsv(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 33527) | STATIC mp_obj_t mp_lv_palette_main(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 33544) | STATIC mp_obj_t mp_lv_palette_lighten(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 33566) | STATIC mp_obj_t mp_lv_txt_get_size(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 33589) | STATIC mp_obj_t mp_lv_txt_get_width(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 33610) | STATIC mp_obj_t mp_lv_bidi_calculate_align(size_t mp_n_args, const mp_ob...
  function STATIC (line 33629) | STATIC mp_obj_t mp_lv_style_register_prop(size_t mp_n_args, const mp_obj...
  function STATIC (line 33646) | STATIC mp_obj_t mp_lv_style_get_num_custom_props(size_t mp_n_args, const...
  function STATIC (line 33663) | STATIC mp_obj_t mp_lv_style_prop_get_default(size_t mp_n_args, const mp_...
  function STATIC (line 33684) | STATIC mp_obj_t mp_lv_disp_create(size_t mp_n_args, const mp_obj_t *mp_a...
  function STATIC (line 33702) | STATIC mp_obj_t mp_lv_disp_get_default(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 33723) | STATIC mp_obj_t mp_lv_scr_load_anim(size_t mp_n_args, const mp_obj_t *mp...
  function lv_layout_register_cb_callback (line 33744) | void lv_layout_register_cb_callback(struct _lv_obj_t *arg0, void *arg1)
  function STATIC (line 33762) | STATIC mp_obj_t mp_lv_layout_register(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 33780) | STATIC mp_obj_t mp_lv_clamp_width(size_t mp_n_args, const mp_obj_t *mp_a...
  function STATIC (line 33804) | STATIC mp_obj_t mp_lv_fs_get_drv(size_t mp_n_args, const mp_obj_t *mp_ar...
  function STATIC (line 33821) | STATIC mp_obj_t mp_lv_fs_is_ready(size_t mp_n_args, const mp_obj_t *mp_a...
  function STATIC (line 33838) | STATIC mp_obj_t mp_lv_fs_get_letters(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 33855) | STATIC mp_obj_t mp_lv_fs_get_ext(size_t mp_n_args, const mp_obj_t *mp_ar...
  function STATIC (line 33880) | STATIC mp_obj_t mp_lv_gradient_set_cache_size(size_t mp_n_args, const mp...
  function STATIC (line 33901) | STATIC mp_obj_t mp_lv_draw_arc_get_area(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 33925) | STATIC mp_obj_t mp_lv_draw_mask_add(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 33943) | STATIC mp_obj_t mp_lv_draw_mask_apply(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 33963) | STATIC mp_obj_t mp_lv_draw_mask_apply_ids(size_t mp_n_args, const mp_obj...
  function STATIC (line 33985) | STATIC mp_obj_t mp_lv_draw_mask_remove_id(size_t mp_n_args, const mp_obj...
  function STATIC (line 34002) | STATIC mp_obj_t mp_lv_draw_mask_remove_custom(size_t mp_n_args, const mp...
  function STATIC (line 34027) | STATIC mp_obj_t mp_lv_draw_mask_is_any(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 34048) | STATIC mp_obj_t mp_lv_group_create(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 34081) | STATIC mp_obj_t mp_lv_indev_create(size_t mp_n_args, const mp_obj_t *mp_...
  function STATIC (line 34110) | STATIC mp_obj_t mp_lv_indev_search_obj(size_t mp_n_args, const mp_obj_t ...
  function STATIC (line 34136) | STATIC mp_obj_t mp_lv_is_initialized(size_t mp_n_args, const mp_obj_t *m...
  function STATIC (line 34157) | STATIC mp_obj_t mp_lv_theme_get_from_obj(size_t mp_n_args, const mp_obj_...
  function STATIC (line 34178) | STATIC mp_obj_t mp_lv_theme_get_font_small(size_t mp_n_args, const mp_ob...
  function STATIC (line 34211) | STATIC mp_obj_t mp_lv_font_load(size_t mp_n_args, const mp_obj_t *mp_arg...
  function STATIC (line 34228) | STATIC mp_obj_t mp_lv_snapshot_take(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 34250) | STATIC mp_obj_t mp_lv_snapshot_buf_size_needed(size_t mp_n_args, const m...
  function STATIC (line 34268) | STATIC mp_obj_t mp_lv_snapshot_take_to_buf(size_t mp_n_args, const mp_ob...
  function STATIC (line 34289) | STATIC mp_obj_t mp_lv_gridnav_add(size_t mp_n_args, const mp_obj_t *mp_a...
  function lv_imgfont_create_path_cb_callback (line 34315) | bool lv_imgfont_create_path_cb_callback(const lv_font_t *arg0, void *arg...
  function STATIC (line 34338) | STATIC mp_obj_t mp_lv_imgfont_create(size_t mp_n_args, const mp_obj_t *m...
  function lv_msg_subscribe_cb_callback (line 34365) | void lv_msg_subscribe_cb_callback(lv_msg_t *arg0)
  function STATIC (line 34382) | STATIC mp_obj_t mp_lv_msg_subscribe(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 34401) | STATIC mp_obj_t mp_lv_msg_subscribe_obj(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 34424) | STATIC mp_obj_t mp_lv_msg_send(size_t mp_n_args, const mp_obj_t *mp_args...
  function STATIC (line 34454) | STATIC mp_obj_t mp_gd_open_gif_file(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 34471) | STATIC mp_obj_t mp_gd_open_gif_data(size_t mp_n_args, const mp_obj_t *mp...
  function STATIC (line 34492) | STATIC mp_obj_t mp_lv_tiny_ttf_create_file(size_t mp_n_args, const mp_ob...
  function STATIC (line 34510) | STATIC mp_obj_t mp_lv_tiny_ttf_create_file_ex(size_t mp_n_args, const mp...
  function STATIC (line 34529) | STATIC mp_obj_t mp_lv_tiny_ttf_create_data(size_t mp_n_args, const mp_ob...
  function STATIC (line 34548) | STATIC mp_obj_t mp_lv_tiny_ttf_create_data_ex(size_t mp_n_args, const mp...
  function STATIC (line 34568) | STATIC mp_obj_t mp_lv_tiny_ttf_set_size(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 34598) | STATIC mp_obj_t mp_lv_theme_default_init(size_t mp_n_args, const mp_obj_...
  function STATIC (line 34619) | STATIC mp_obj_t mp_lv_theme_default_get(size_t mp_n_args, const mp_obj_t...
  function STATIC (line 34640) | STATIC mp_obj_t mp_lv_theme_mono_init(size_t mp_n_args, const mp_obj_t *...
  function STATIC (line 34663) | STATIC mp_obj_t mp_lv_theme_basic_init(size_t mp_n_args, const mp_obj_t ...
  function lv_font_t_get_glyph_dsc_callback (line 34684) | bool lv_font_t_get_glyph_dsc_callback(const struct _lv_font_t *arg0, lv_...
  type _lv_font_t (line 34704) | struct _lv_font_t
  function lv_color_t (line 34722) | lv_color_t lv_color_filter_dsc_t_filter_cb_callback(const struct _lv_col...
  function lv_style_transition_dsc_t_path_xcb_callback (line 34741) | int32_t lv_style_transition_dsc_t_path_xcb_callback(const struct _lv_ani...
  function lv_draw_ctx_t_init_buf_callback (line 34758) | void lv_draw_ctx_t_init_buf_callback(struct _lv_draw_ctx_t *arg0)
  function lv_draw_ctx_t_draw_rect_callback (line 34775) | void lv_draw_ctx_t_draw_rect_callback(struct _lv_draw_ctx_t *arg0, const...
  function lv_draw_ctx_t_draw_arc_callback (line 34794) | void lv_draw_ctx_t_draw_arc_callback(struct _lv_draw_ctx_t *arg0, const ...
  function lv_draw_ctx_t_draw_img_decoded_callback (line 34816) | void lv_draw_ctx_t_draw_img_decoded_callback(struct _lv_draw_ctx_t *arg0...
  function lv_res_t (line 34838) | lv_res_t lv_draw_ctx_t_draw_img_callback(struct _lv_draw_ctx_t *arg0, co...
  function lv_draw_ctx_t_draw_letter_callback (line 34858) | void lv_draw_ctx_t_draw_letter_callback(struct _lv_draw_ctx_t *arg0, con...
  function lv_draw_ctx_t_draw_line_callback (line 34878) | void lv_draw_ctx_t_draw_line_callback(struct _lv_draw_ctx_t *arg0, const...
  function lv_draw_ctx_t_draw_polygon_callback (line 34898) | void lv_draw_ctx_t_draw_polygon_callback(struct _lv_draw_ctx_t *arg0, co...
  function lv_draw_ctx_t_draw_transform_callback (line 34918) | void lv_draw_ctx_t_draw_transform_callback(struct _lv_draw_ctx_t *arg0, ...
  function lv_draw_ctx_t_wait_for_finish_callback (line 34945) | void lv_draw_ctx_t_wait_for_finish_callback(struct _lv_draw_ctx_t *arg0)
  function lv_draw_ctx_t_buffer_copy_callback (line 34962) | void lv_draw_ctx_t_buffer_copy_callback(struct _lv_draw_ctx_t *arg0, voi...
  function lv_draw_ctx_t_buffer_convert_callback (line 34985) | void lv_draw_ctx_t_buffer_convert_callback(struct _lv_draw_ctx_t *arg0)
  function lv_draw_ctx_t_buffer_clear_callback (line 35002) | void lv_draw_ctx_t_buffer_clear_callback(struct _lv_draw_ctx_t *arg0)
  function lv_draw_layer_ctx_t (line 35019) | lv_draw_layer_ctx_t * lv_draw_ctx_t_layer_init_callback(struct _lv_draw_...
  function lv_draw_ctx_t_layer_adjust_callback (line 35038) | void lv_draw_ctx_t_layer_adjust_callback(struct _lv_draw_ctx_t *arg0, st...
  function lv_draw_ctx_t_layer_blend_callback (line 35057) | void lv_draw_ctx_t_layer_blend_callback(struct _lv_draw_ctx_t *arg0, str...
  function lv_draw_ctx_t_layer_destroy_callback (line 35076) | void lv_draw_ctx_t_layer_destroy_callback(struct _lv_draw_ctx_t *arg0, l...
  function lv_disp_t_wait_cb_callback (line 35094) | void lv_disp_t_wait_cb_callback(struct _lv_disp_t *arg0)
  function lv_obj_class_t_constructor_cb_callback (line 35111) | void lv_obj_class_t_constructor_cb_callback(const struct _lv_obj_class_t...
  function lv_obj_class_t_destructor_cb_callback (line 35129) | void lv_obj_class_t_destructor_cb_callback(const struct _lv_obj_class_t ...
  function lv_obj_class_t_event_cb_callback (line 35147) | void lv_obj_class_t_event_cb_callback(const struct _lv_obj_class_t *arg0...
  function lv_fs_drv_t_ready_cb_callback (line 35186) | bool lv_fs_drv_t_ready_cb_callback(struct _lv_fs_drv_t *arg0)
  type _lv_fs_drv_t (line 35203) | struct _lv_fs_drv_t
  function lv_fs_res_t (line 35222) | lv_fs_res_t lv_fs_drv_t_close_cb_callback(struct _lv_fs_drv_t *arg0, voi...
  function lv_fs_res_t (line 35240) | lv_fs_res_t lv_fs_drv_t_read_cb_callback(struct _lv_fs_drv_t *arg0, void...
  function lv_fs_res_t (line 35261) | lv_fs_res_t lv_fs_drv_t_write_cb_callback(struct _lv_fs_drv_t *arg0, voi...
  function lv_fs_res_t (line 35282) | lv_fs_res_t lv_fs_drv_t_seek_cb_callback(struct _lv_fs_drv_t *arg0, void...
  function lv_fs_res_t (line 35302) | lv_fs_res_t lv_fs_drv_t_tell_cb_callback(struct _lv_fs_drv_t *arg0, void...
  type _lv_fs_drv_t (line 35321) | struct _lv_fs_drv_t
  function lv_fs_res_t (line 35339) | lv_fs_res_t lv_fs_drv_t_dir_read_cb_callback(struct _lv_fs_drv_t *arg0, ...
  function lv_fs_res_t (line 35358) | lv_fs_res_t lv_fs_drv_t_dir_close_cb_callback(struct _lv_fs_drv_t *arg0,...
  function lv_indev_t_feedback_cb_callback (line 35383) | void lv_indev_t_feedback_cb_callback(struct _lv_indev_t *arg0, uint8_t a...

FILE: lv_binding_micropython_tulip/lib/display_driver_utils.py
  class driver (line 15) | class driver:
    method __init__ (line 17) | def __init__(self,width=420,height=320,orientation=ORIENT_PORTRAIT, as...
    method init_gui_SDL (line 37) | def init_gui_SDL(self):
    method init_gui_ili9341 (line 48) | def init_gui_ili9341(self):
    method init_gui_twatch (line 97) | def init_gui_twatch(self):
    method init_gui (line 115) | def init_gui(self):

FILE: lv_binding_micropython_tulip/lib/fs_driver.py
  function fs_open_cb (line 8) | def fs_open_cb(drv, path, mode):
  function fs_close_cb (line 28) | def fs_close_cb(drv, fs_file):
  function fs_read_cb (line 37) | def fs_read_cb(drv, fs_file, buf, btr, br):
  function fs_seek_cb (line 48) | def fs_seek_cb(drv, fs_file, pos, whence):
  function fs_tell_cb (line 57) | def fs_tell_cb(drv, fs_file, pos):
  function fs_write_cb (line 67) | def fs_write_cb(drv, fs_file, buf, btw, bw):
  function fs_register (line 77) | def fs_register(fs_drv, letter, cache_size=500):

FILE: lv_binding_micropython_tulip/lib/lv_colors.py
  function LV_COLOR_MAKE (line 2) | def LV_COLOR_MAKE(r,g,b):
  class lv_colors (line 6) | class lv_colors:

FILE: lv_binding_micropython_tulip/lib/lv_utils.py
  class event_loop (line 68) | class event_loop():
    method __init__ (line 72) | def __init__(self, freq=25, timer_id=default_timer_id, max_scheduled=2...
    method deinit (line 99) | def deinit(self):
    method disable (line 107) | def disable(self):
    method enable (line 110) | def enable(self):
    method is_running (line 114) | def is_running():
    method current_instance (line 118) | def current_instance():
    method task_handler (line 121) | def task_handler(self, _):
    method timer_cb (line 131) | def timer_cb(self, t):
    method async_refresh (line 142) | async def async_refresh(self):
    method async_timer (line 154) | async def async_timer(self):
    method default_exception_sink (line 161) | def default_exception_sink(self, e):

FILE: lv_binding_micropython_tulip/lib/tpcal.py
  class Tpcal_point (line 38) | class Tpcal_point():
    method __init__ (line 39) | def __init__(self, x, y, name):
    method __repr__ (line 44) | def __repr__(self):
  class Tpcal (line 51) | class Tpcal():
    method __init__ (line 62) | def __init__(self, points, calibrate, touch_count = 5):
    method show_text (line 103) | def show_text(self, txt):
    method show_circle (line 108) | def show_circle(self):
    method calibrate_clicked (line 120) | def calibrate_clicked(self):
    method check (line 148) | def check(self):
  function calibrate (line 158) | def calibrate(points):

FILE: lv_binding_micropython_tulip/lib/utils.py
  function aligned_buf (line 13) | def aligned_buf(buf, alignment):

FILE: lv_binding_micropython_tulip/lvgl/lvgl.h
  function lv_version_major (line 166) | static inline int lv_version_major(void)
  function lv_version_minor (line 171) | static inline int lv_version_minor(void)
  function lv_version_patch (line 176) | static inline int lv_version_patch(void)

FILE: lv_binding_micropython_tulip/lvgl/scripts/LVGLImage.
Copy disabled (too large) Download .json
Condensed preview — 1889 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (106,456K chars).
[
  {
    "path": ".github/workflows/desktop-linux.yml",
    "chars": 323,
    "preview": "name: C/C++ CI\n\non:\n  push:\n    branches: [ \"main\" ]\n  pull_request:\n    branches: [ \"main\" ]\n\njobs:\n  build:\n\n    runs-"
  },
  {
    "path": ".github/workflows/static.yml",
    "chars": 1252,
    "preview": "# Simple workflow for deploying static content to GitHub Pages\nname: Deploy static content to Pages\n\non:\n  # Runs on pus"
  },
  {
    "path": ".gitignore",
    "chars": 1540,
    "preview": ".DS_Store\n__pycache__\ntulip/macos/gon_config.json\nesp-idf/components/bootloader/subproject/dependencies.lock\ndependencie"
  },
  {
    "path": ".gitmodules",
    "chars": 166,
    "preview": "[submodule \"micropython\"]\n\tpath = micropython\n\turl = https://github.com/micropython/micropython\n[submodule \"amy\"]\n\tpath "
  },
  {
    "path": "AGENTS.md",
    "chars": 6218,
    "preview": "# Agent Instructions for `tulipcc`\n\n## Worktree File Editing\n\nWhen working in a worktree, **always use relative paths** "
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 3348,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
  },
  {
    "path": "LICENSE",
    "chars": 4502,
    "preview": "Tulip Creative Computer\n\nThe MIT License (MIT)\n\nCopyright (c) 2017-2022 Brian Whitman\n\nPermission is hereby granted, fre"
  },
  {
    "path": "README.md",
    "chars": 11937,
    "preview": "# Tulip Creative Computer - a portable programmable device for music, graphics, code and writing\n\n![Tulip](https://raw.g"
  },
  {
    "path": "docs/amyboard/README.md",
    "chars": 7463,
    "preview": "# Getting Started with AMYboard\n\nWelcome to **AMYboard** -- a powerful music synthesizer on a small modular-compatible b"
  },
  {
    "path": "docs/amyboard/accessories.md",
    "chars": 4164,
    "preview": "# AMYboard Accessories\n\nAMYboard has a front panel I2C port for plugging in accessories. These connect with a simple cab"
  },
  {
    "path": "docs/amyboard/arduino.md",
    "chars": 3294,
    "preview": "# AMYboard Arduino Setup\n\nAMYboard runs MicroPython firmware by default, but the underlying **AMY synthesizer engine** i"
  },
  {
    "path": "docs/amyboard/firmware.md",
    "chars": 2653,
    "preview": "# Upgrading your Firmware\n\nThere are three ways to upgrade the firmware on your AMYboard. The easiest is using the web-b"
  },
  {
    "path": "docs/amyboard/modular.md",
    "chars": 5470,
    "preview": "# Modular Synth Setup\n\nAMYboard is designed to integrate directly with Eurorack and other modular synth systems. It has "
  },
  {
    "path": "docs/amyboard/online.md",
    "chars": 12833,
    "preview": "# Using AMYboard Online\n\nThe AMYboard web editor at [amyboard.com](https://amyboard.com/editor) lets you design patches,"
  },
  {
    "path": "docs/amyboard/python.md",
    "chars": 6828,
    "preview": "# Using Python\n\nAMYboard runs MicroPython and gives you a full Python REPL for controlling the synthesizer, reading inpu"
  },
  {
    "path": "docs/amyboard/troubleshooting.md",
    "chars": 4561,
    "preview": "# Troubleshooting\n\nHere are solutions to common issues with AMYboard. If you're stuck, reach out to the community -- we'"
  },
  {
    "path": "docs/getting_started.md",
    "chars": 16328,
    "preview": "# Getting started with the Tulip CC v4r11\n\nWelcome to the [Tulip Creative Computer!](https://github.com/shorepine/tulipc"
  },
  {
    "path": "docs/music.md",
    "chars": 24792,
    "preview": "# Using Tulip to make music tutorial\n\nWelcome to Tulip! \n\nThis tutorial shows you all the ways to make music and make co"
  },
  {
    "path": "docs/pcbs/amyboard/README.md",
    "chars": 127,
    "preview": "# AMYboard Schematics\n\n![AMYBoard 1.4](https://github.com/shorepine/tulipcc/blob/main/docs/pcbs/amyboard/amyboard-1.4-sc"
  },
  {
    "path": "docs/pcbs/amyboard/amyboard-v1.0.brd",
    "chars": 327659,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"6.1\">\n<drawing>\n<settings>\n<s"
  },
  {
    "path": "docs/pcbs/amyboard/amyboard-v1.0.sch",
    "chars": 1183307,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"6.1\">\n<drawing>\n<settings>\n<s"
  },
  {
    "path": "docs/pcbs/amyboard/amyboard-v1.1dpwe.brd",
    "chars": 407589,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/amyboard/amyboard-v1.1dpwe.sch",
    "chars": 1203734,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/amyboard/amyboard-v1.4.brd",
    "chars": 434165,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"6.1\">\n<drawing>\n<settings>\n<s"
  },
  {
    "path": "docs/pcbs/amyboard/amyboard-v1.4.sch",
    "chars": 1411383,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"6.1\">\n<drawing>\n<settings>\n<s"
  },
  {
    "path": "docs/pcbs/amyboard/amyboard_front_panel.dxf",
    "chars": 35756,
    "preview": "  0\nSECTION\n  2\nHEADER\n  9\n$ACADVER\n  1\nAC1009\n  0\nENDSEC\n  0\nSECTION\n  2\nTABLES\n  0\nTABLE\n  2\nLAYER\n  70\n2\n  0\nLAYER\n  "
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/CP2102N-A02-GQFN24.lbr",
    "chars": 11469,
    "preview": "<!--This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA) with Desi"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/ESP32-S3-WROOM-2-N32R8V.l#1",
    "chars": 15504,
    "preview": "<!--This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA) with Desi"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/ESP32-S3-WROOM-2-N32R8V.lbr",
    "chars": 14550,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/QFN50P400X400X90-25N.lbr",
    "chars": 7968,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip board bom.csv",
    "chars": 7356,
    "preview": "\"Part\";\"Value\";\"Device\";\"Package\";\"Description\";\"AVAILABILITY\";\"DESCRIPTION\";\"MF\";\"MP\";\"MPN\";\"OC_FARNELL\";\"OC_NEWARK\";\"P"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.b#1",
    "chars": 139239,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.b#2",
    "chars": 139239,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.b#3",
    "chars": 139237,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.b#4",
    "chars": 139237,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.b#5",
    "chars": 139233,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.b#6",
    "chars": 249581,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.b#7",
    "chars": 166779,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.b#8",
    "chars": 249477,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.b#9",
    "chars": 249484,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.brd",
    "chars": 206017,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.csv",
    "chars": 7591,
    "preview": "\"Part\";\"Value\";\"Device\";\"Package\";\"Description\";\"AVAILABILITY\";\"COPYRIGHT\";\"DESCRIPTION\";\"DIGI-KEY_PART_NUMBER\";\"DIGI-KE"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.pro",
    "chars": 1032,
    "preview": "EAGLE AutoRouter Statistics:\n\nJob           : /Users/bwhitman/outside/tulipcc/pcbs/tulip4_board_v4r5/tulip breakout.brd\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.s#1",
    "chars": 468085,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.s#2",
    "chars": 468085,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.s#3",
    "chars": 468674,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.s#4",
    "chars": 468704,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.s#5",
    "chars": 461051,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.s#6",
    "chars": 422449,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.s#7",
    "chars": 422449,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.s#8",
    "chars": 423021,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.s#9",
    "chars": 421142,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout.sch",
    "chars": 360571,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout_00.pro",
    "chars": 616,
    "preview": "EAGLE AutoRouter Statistics:\n\nJob           : /Users/bwhitman/outside/tulipcc/pcbs/tulip4_board_ch340e/tulip breakout.br"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout_01.pro",
    "chars": 1019,
    "preview": "EAGLE AutoRouter Statistics:\n\nJob           : /Users/bwhitman/outside/tulipcc/pcbs/tulip4_board_ch340e/tulip breakout.br"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout_02.pro",
    "chars": 1021,
    "preview": "EAGLE AutoRouter Statistics:\n\nJob           : /Users/bwhitman/outside/tulipcc/pcbs/tulip4_board_ch340e/tulip breakout.br"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip breakout_03.pro",
    "chars": 1049,
    "preview": "EAGLE AutoRouter Statistics:\n\nJob           : /Users/bwhitman/outside/tulipcc/pcbs/tulip4_board_ch340e/tulip breakout.br"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip4r3/empty.kicad_wks",
    "chars": 233,
    "preview": "(kicad_wks (version 20210606) (generator pl_editor)\n(setup (textsize 1.5 1.5)(linewidth 0.15)(textlinewidth 0.15)\n(left_"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip4r3/sym-lib-table",
    "chars": 143,
    "preview": "(sym_lib_table\n  (lib (name \"tulip4r3-eagle-import\")(type \"KiCad\")(uri \"${KIPRJMOD}/tulip4r3-eagle-import.kicad_sym\")(op"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip4r3/tulip4r3-eagle-import.kicad_sym",
    "chars": 422124,
    "preview": "(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor)\n  (symbol \"6N137S\" (in_bom yes) (on_board yes)\n    "
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip4r3/tulip4r3.kicad_pcb",
    "chars": 50,
    "preview": "(kicad_pcb (version 20211014) (generator pcbnew)\n)"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip4r3/tulip4r3.kicad_pro",
    "chars": 9099,
    "preview": "{\n  \"board\": {\n    \"design_settings\": {\n      \"defaults\": {\n        \"board_outline_line_width\": 0.09999999999999999,\n   "
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r5/tulip4r3/tulip4r3.kicad_sch",
    "chars": 105,
    "preview": "(kicad_sch (version 20211123) (generator eeschema)\n  (paper \"A4\")\n  (lib_symbols)\n  (symbol_instances)\n)\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/CP2102N-A02-GQFN24.lbr",
    "chars": 11469,
    "preview": "<!--This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA) with Desi"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/ESP32-S3-WROOM-2-N32R8V.l#1",
    "chars": 15504,
    "preview": "<!--This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA) with Desi"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/ESP32-S3-WROOM-2-N32R8V.lbr",
    "chars": 14550,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/QFN50P400X400X90-25N.lbr",
    "chars": 7968,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout.b#1",
    "chars": 141269,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout.b#2",
    "chars": 214086,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout.b#3",
    "chars": 213617,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout.b#4",
    "chars": 209629,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout.b#5",
    "chars": 209622,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout.b#6",
    "chars": 141271,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout.b#7",
    "chars": 218828,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout.b#8",
    "chars": 208224,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout.b#9",
    "chars": 139293,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout.brd",
    "chars": 212866,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout.pro",
    "chars": 1034,
    "preview": "EAGLE AutoRouter Statistics:\n\nJob           : /Users/bwhitman/outside/tulipcc/pcbs/tulip4_board_v4r6/tulip breakout.brd\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout.s#1",
    "chars": 377676,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout.s#2",
    "chars": 377676,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout.s#3",
    "chars": 360571,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout.s#4",
    "chars": 468085,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout.s#5",
    "chars": 468085,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout.s#6",
    "chars": 468674,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout.s#7",
    "chars": 468704,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout.s#8",
    "chars": 461051,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout.s#9",
    "chars": 422449,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout.sch",
    "chars": 377676,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout_00.pro",
    "chars": 616,
    "preview": "EAGLE AutoRouter Statistics:\n\nJob           : /Users/bwhitman/outside/tulipcc/pcbs/tulip4_board_ch340e/tulip breakout.br"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout_01.pro",
    "chars": 1019,
    "preview": "EAGLE AutoRouter Statistics:\n\nJob           : /Users/bwhitman/outside/tulipcc/pcbs/tulip4_board_ch340e/tulip breakout.br"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout_02.pro",
    "chars": 1021,
    "preview": "EAGLE AutoRouter Statistics:\n\nJob           : /Users/bwhitman/outside/tulipcc/pcbs/tulip4_board_ch340e/tulip breakout.br"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout_03.pro",
    "chars": 1049,
    "preview": "EAGLE AutoRouter Statistics:\n\nJob           : /Users/bwhitman/outside/tulipcc/pcbs/tulip4_board_ch340e/tulip breakout.br"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout_top_bom.csv",
    "chars": 811,
    "preview": "Comment,Designator,Footprint,LCSC Part #\n0.1uF,C8 C9 C10 C21,0805-NO,\n2.2nF,C32 C33,0805-NO,\n2.2uF,C22 C23,0805-NO,\n4.7K"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip breakout_top_cpl.csv",
    "chars": 1163,
    "preview": "Designator,Mid X,Mid Y,Layer,Rotation\n6N137S,41.50,39.40,Top,0.0\nAUDIO_CONN,67.00, 5.20,Top,180.0\nC4,31.40,36.50,Top,180"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r6/tulip_board_bom.csv",
    "chars": 4287,
    "preview": "Part,Value,Device,Package,Description,,AMOUNT,WHERE,URL,,,\r\n6N137S,6N137S,6N137S,8-SMD,Lite-On 6N137 - High Speed Opto I"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/CP2102N-A02-GQFN24.lbr",
    "chars": 11469,
    "preview": "<!--This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA) with Desi"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/ESP32-S3-WROOM-2-N32R8V.l#1",
    "chars": 15504,
    "preview": "<!--This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA) with Desi"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/ESP32-S3-WROOM-2-N32R8V.lbr",
    "chars": 14550,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/QFN50P400X400X90-25N.lbr",
    "chars": 7968,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout.b#1",
    "chars": 144085,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout.b#2",
    "chars": 235606,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout.b#3",
    "chars": 144084,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout.b#4",
    "chars": 144095,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout.b#5",
    "chars": 144109,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout.b#6",
    "chars": 144109,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout.b#7",
    "chars": 144107,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout.b#8",
    "chars": 128127,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout.b#9",
    "chars": 227649,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout.brd",
    "chars": 224640,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout.pro",
    "chars": 1039,
    "preview": "EAGLE AutoRouter Statistics:\n\nJob           : /Users/bwhitman/outside/tulipcc/docs/pcbs/tulip4_board_v4r7/tulip breakout"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout.s#1",
    "chars": 433131,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout.s#2",
    "chars": 391150,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout.s#3",
    "chars": 385822,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout.s#4",
    "chars": 386659,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout.s#5",
    "chars": 372287,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout.s#6",
    "chars": 383999,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout.s#7",
    "chars": 377676,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout.s#8",
    "chars": 377676,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout.s#9",
    "chars": 377676,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout.sch",
    "chars": 433137,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout_00.pro",
    "chars": 619,
    "preview": "EAGLE AutoRouter Statistics:\n\nJob           : /Users/bwhitman/outside/tulipcc/docs/pcbs/tulip4_board_v4r7/tulip breakout"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout_01.pro",
    "chars": 1022,
    "preview": "EAGLE AutoRouter Statistics:\n\nJob           : /Users/bwhitman/outside/tulipcc/docs/pcbs/tulip4_board_v4r7/tulip breakout"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout_02.pro",
    "chars": 1024,
    "preview": "EAGLE AutoRouter Statistics:\n\nJob           : /Users/bwhitman/outside/tulipcc/docs/pcbs/tulip4_board_v4r7/tulip breakout"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout_03.pro",
    "chars": 1025,
    "preview": "EAGLE AutoRouter Statistics:\n\nJob           : /Users/bwhitman/outside/tulipcc/docs/pcbs/tulip4_board_v4r7/tulip breakout"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout_top_bom.csv",
    "chars": 811,
    "preview": "Comment,Designator,Footprint,LCSC Part #\n0.1uF,C8 C9 C10 C21,0805-NO,\n2.2nF,C32 C33,0805-NO,\n2.2uF,C22 C23,0805-NO,\n4.7K"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip breakout_top_cpl.csv",
    "chars": 1163,
    "preview": "Designator,Mid X,Mid Y,Layer,Rotation\n6N137S,41.50,39.40,Top,0.0\nAUDIO_CONN,67.00, 5.20,Top,180.0\nC4,31.40,36.50,Top,180"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r7/tulip_board_bom.csv",
    "chars": 4635,
    "preview": "Part,Value,Device,Package,Description,,AMOUNT,WHERE,URL,,,\r\nVO0601T,VO0601T,VO0601T,8-SOIC,Optoisolator,,1,DIGIKEY,https"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/CP2102N-A02-GQFN24.lbr",
    "chars": 11469,
    "preview": "<!--This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA) with Desi"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/ESP32-S3-WROOM-2-N32R8V.l#1",
    "chars": 15504,
    "preview": "<!--This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA) with Desi"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/ESP32-S3-WROOM-2-N32R8V.lbr",
    "chars": 14550,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/QFN50P400X400X90-25N.lbr",
    "chars": 7968,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout.b#1",
    "chars": 221394,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout.b#2",
    "chars": 221157,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout.b#3",
    "chars": 141312,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout.b#4",
    "chars": 141312,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout.b#5",
    "chars": 215097,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout.b#6",
    "chars": 142426,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout.b#7",
    "chars": 140217,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout.b#8",
    "chars": 140190,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout.b#9",
    "chars": 141188,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout.brd",
    "chars": 221341,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout.pro",
    "chars": 1039,
    "preview": "EAGLE AutoRouter Statistics:\n\nJob           : /Users/bwhitman/outside/tulipcc/docs/pcbs/tulip4_board_v4r8/tulip breakout"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout.s#1",
    "chars": 424634,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout.s#2",
    "chars": 429737,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout.s#3",
    "chars": 433137,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout.s#4",
    "chars": 433131,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout.s#5",
    "chars": 391150,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout.s#6",
    "chars": 385822,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout.s#7",
    "chars": 386659,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout.s#8",
    "chars": 372287,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout.s#9",
    "chars": 383999,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout.sch",
    "chars": 425584,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE eagle SYSTEM \"eagle.dtd\">\n<eagle version=\"9.6.2\">\n<drawing>\n<settings>\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout_00.pro",
    "chars": 623,
    "preview": "EAGLE AutoRouter Statistics:\n\nJob           : /Users/bwhitman/outside/tulipcc/docs/pcbs/tulip4_board_v4r8/tulip breakout"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout_01.pro",
    "chars": 1026,
    "preview": "EAGLE AutoRouter Statistics:\n\nJob           : /Users/bwhitman/outside/tulipcc/docs/pcbs/tulip4_board_v4r8/tulip breakout"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout_02.pro",
    "chars": 1028,
    "preview": "EAGLE AutoRouter Statistics:\n\nJob           : /Users/bwhitman/outside/tulipcc/docs/pcbs/tulip4_board_v4r8/tulip breakout"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout_03.pro",
    "chars": 1029,
    "preview": "EAGLE AutoRouter Statistics:\n\nJob           : /Users/bwhitman/outside/tulipcc/docs/pcbs/tulip4_board_v4r8/tulip breakout"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout_top_bom.csv",
    "chars": 811,
    "preview": "Comment,Designator,Footprint,LCSC Part #\n0.1uF,C8 C9 C10 C21,0805-NO,\n2.2nF,C32 C33,0805-NO,\n2.2uF,C22 C23,0805-NO,\n4.7K"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip breakout_top_cpl.csv",
    "chars": 1163,
    "preview": "Designator,Mid X,Mid Y,Layer,Rotation\n6N137S,41.50,39.40,Top,0.0\nAUDIO_CONN,67.00, 5.20,Top,180.0\nC4,31.40,36.50,Top,180"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r8/tulip_board_bom.csv",
    "chars": 4298,
    "preview": "Part,Value,Device,Package,Description,,AMOUNT,WHERE,URL,,,\r\nVO0601T,VO0601T,VO0601T,8-SOIC,Optoisolator,,1,DIGIKEY,https"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/1734827-2.stp",
    "chars": 164576,
    "preview": "ISO-10303-21;\r\nHEADER;\r\nFILE_DESCRIPTION((''),'2;1');\r\nFILE_NAME('C-1734827-2','2019-11-22T00:46:15',('workeradm'),(\r\n'T"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/CAP_WE_865060340001.stp",
    "chars": 604715,
    "preview": "ISO-10303-21;\r\nHEADER;\r\nFILE_DESCRIPTION( ( 'Unknown' ), '1' );\r\nFILE_NAME( 'C:/Syc/3D/Product/eiCap/WCAP-ASxx/WCAP-AS5H"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/CAP_WE_865060345007.stp",
    "chars": 596567,
    "preview": "ISO-10303-21;\r\nHEADER;\r\nFILE_DESCRIPTION( ( 'Unknown' ), '1' );\r\nFILE_NAME( 'C:/Syc/3D/Product/eiCap/WCAP-ASxx/WCAP-AS5H"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/CUI_DEVICES_SJ2-35863B1-SMT-TR.step",
    "chars": 2638188,
    "preview": "ISO-10303-21;\r\nHEADER;\r\nFILE_DESCRIPTION (( 'STEP AP214' ),\r\n    '1' );\r\nFILE_NAME ('CUI_DEVICES_SJ2-35863B1-SMT-TR.step"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/C_0805_2012Metric.step",
    "chars": 43618,
    "preview": "ISO-10303-21;\nHEADER;\n/* C_0805_2012Metric.step 3D STEP model for use in ECAD systems\n * Copyright (C) 2017, kicad StepU"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/C_1210_3225Metric.step",
    "chars": 43502,
    "preview": "ISO-10303-21;\nHEADER;\n/* C_1210_3225Metric.step 3D STEP model for use in ECAD systems\n * Copyright (C) 2017, kicad StepU"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/DFN 8.STEP",
    "chars": 498965,
    "preview": "ISO-10303-21;\r\nHEADER;\r\nFILE_DESCRIPTION (( 'STEP AP214' ),\r\n    '1' );\r\nFILE_NAME ('D0CAD0BF-D7EC-4631-8482-F6E2641774E"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/DIP-6-SMD.step",
    "chars": 330840,
    "preview": "ISO-10303-21;\r\nHEADER;\r\nFILE_DESCRIPTION (( 'STEP AP214' ),\r\n    '1' );\r\nFILE_NAME ('51F1AF81-41F3-48CE-8F1B-54E958D86E9"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/D_SMA.step",
    "chars": 70794,
    "preview": "ISO-10303-21;\nHEADER;\n/* D_SMA.step 3D STEP model for use in ECAD systems\n * Copyright (C) 2017, kicad StepUp\n * \n * Thi"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/D_SOD-323.step",
    "chars": 105189,
    "preview": "ISO-10303-21;\nHEADER;\n/* D_SOD-323.step 3D STEP model for use in ECAD systems\n * Copyright (C) 2017, kicad StepUp\n * \n *"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/ESP32-S3-WROOM-1.STEP",
    "chars": 6224279,
    "preview": "ISO-10303-21;\r\nHEADER;\r\nFILE_DESCRIPTION (( 'STEP AP214' ),\r\n    '1' );\r\nFILE_NAME ('ESP32-S3-WROOM-1_20211021.STEP',\r\n "
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/HVSSOP-8.STEP",
    "chars": 396510,
    "preview": "ISO-10303-21;\r\nHEADER;\r\nFILE_DESCRIPTION (( 'STEP AP214' ),\r\n    '1' );\r\nFILE_NAME ('DGN8D.STEP',\r\n    '2020-08-29T17:45"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/JS102011JAQN.stp",
    "chars": 518289,
    "preview": "ISO-10303-21;\r\nHEADER;\r\nFILE_DESCRIPTION((''),'2;1');\r\nFILE_NAME('JS102011JAQN_SW0001_PRT','2016-06-29T',('jtrepler'),('"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/MOLEX_217179-0001.stp",
    "chars": 1236259,
    "preview": "ISO-10303-21;\r\nHEADER;\r\nFILE_DESCRIPTION((''),'2;1');\r\nFILE_NAME('2171790001','2021-03-03T',('gga'),(''),\r\n'PRO/ENGINEER"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/RK10J1_R.step",
    "chars": 977604,
    "preview": "ISO-10303-21;\r\nHEADER;\r\n/* Generated by software containing ST-Developer\r\n * from STEP Tools, Inc. (www.steptools.com) \r"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/R_0805_2012.step",
    "chars": 40592,
    "preview": "ISO-10303-21;\nHEADER;\n/* R_0805_2012Metric.step 3D STEP model for use in ECAD systems\n * Copyright (C) 2018, kicad StepU"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/SOT-223-6.STEP",
    "chars": 331395,
    "preview": "ISO-10303-21;\r\nHEADER;\r\nFILE_DESCRIPTION (( 'STEP AP214' ),\r\n    '1' );\r\nFILE_NAME ('8F21F0BE-CC20-4D73-8F02-EE0CE736F9D"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/SOT-23-3.step",
    "chars": 119867,
    "preview": "ISO-10303-21;\nHEADER;\n/* SOT-23.step 3D STEP model for use in ECAD systems\n * Copyright (C) 2017, kicad StepUp\n * \n * Th"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/SOT-23-5.step",
    "chars": 174941,
    "preview": "ISO-10303-21;\nHEADER;\n/* SOT-23-5.step 3D STEP model for use in ECAD systems\n * Copyright (C) 2017, kicad StepUp\n * \n * "
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/SOT-23-6.wrl",
    "chars": 57154,
    "preview": "#VRML V2.0 utf8\r\n#kicad StepUp wrl exported\r\n\r\n# Copyright (C) 2017, kicad StepUp\r\n# \r\n# This work is licensed under the"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/SOT-363_SC-70-6.step",
    "chars": 185034,
    "preview": "ISO-10303-21;\nHEADER;\n/* SOT-363_SC-70-6.step 3D STEP model for use in ECAD systems\n * Copyright (C) 2017, kicad StepUp\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/SSOP-16_3.9x4.9mm_P0.635mm.step",
    "chars": 425397,
    "preview": "ISO-10303-21;\nHEADER;\n/* SSOP-16_3.9x4.9mm_P0.635mm.step 3D STEP model for use in ECAD systems\n * Copyright (C) 2017, ki"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/SSOP-20_3.9x8.7mm_P0.635mm.step",
    "chars": 581030,
    "preview": "ISO-10303-21;\r\nHEADER;\r\n/* SSOP-20_3.9x8.7mm_P0.635mm.step 3D STEP model for use in ECAD systems\r\n * Copyright (C) 2018,"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/TE-1734709-4-b-3d.stp",
    "chars": 238792,
    "preview": "ISO-10303-21;\r\nHEADER;\r\nFILE_DESCRIPTION((''),'2;1');\r\nFILE_NAME('C-1734709-4','2011-04-19T',('workeradm'),('Tyco Electr"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/TSSOP-20_4.4x6.5mm_P0.65mm.step",
    "chars": 552258,
    "preview": "ISO-10303-21;\nHEADER;\n/* TSSOP-20_4.4x6.5mm_P0.65mm.step 3D STEP model for use in ECAD systems\n * Copyright (C) 2017, ki"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/VISHAY_IFSC-1515AH-01.STEP",
    "chars": 255557,
    "preview": "ISO-10303-21;\r\nHEADER;\r\nFILE_DESCRIPTION (( 'STEP AP214' ),\r\n    '1' );\r\nFILE_NAME ('IFSC-1515AH-01.STEP',\r\n    '2014-06"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/3dmodels/XF2M_4015_1A.step",
    "chars": 3638634,
    "preview": "ISO-10303-21;\r\nHEADER;\r\nFILE_DESCRIPTION (( 'STEP AP203' ),\r\n    '1' );\r\nFILE_NAME ('XF2M_4015_1A.step',\r\n    '2011-02-1"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/audio.kicad_sch",
    "chars": 134642,
    "preview": "(kicad_sch (version 20230121) (generator eeschema)\r\n\r\n  (uuid 7a31fe0a-40f9-468d-902a-c7fad4c9e0f2)\r\n\r\n  (paper \"A4\")\r\n\r"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/fp-lib-table",
    "chars": 157,
    "preview": "(fp_lib_table\r\n  (version 7)\r\n  (lib (name \"tulipcc_footprint_lib\")(type \"KiCad\")(uri \"${KIPRJMOD}/tulipcc_footprint_lib"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/interface.kicad_sch",
    "chars": 259240,
    "preview": "(kicad_sch (version 20230121) (generator eeschema)\r\n\r\n  (uuid aa9013b9-61dc-492d-be5c-4d6c0126195c)\r\n\r\n  (paper \"A4\")\r\n\r"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/mcu.kicad_sch",
    "chars": 86849,
    "preview": "(kicad_sch (version 20230121) (generator eeschema)\r\n\r\n  (uuid f226e34b-2860-4bf9-bc2d-6855a8ea5ba6)\r\n\r\n  (paper \"A4\")\r\n\r"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/power.kicad_sch",
    "chars": 163401,
    "preview": "(kicad_sch (version 20230121) (generator eeschema)\r\n\r\n  (uuid 9d0c03a8-81dd-4105-8ea1-313d7ad1172e)\r\n\r\n  (paper \"A4\")\r\n\r"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/sym-lib-table",
    "chars": 155,
    "preview": "(sym_lib_table\r\n  (version 7)\r\n  (lib (name \"tulipcc_symbol_lib\")(type \"KiCad\")(uri \"${KIPRJMOD}/tulipcc_symbol_lib.kica"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/tulip_sch_template.kicad_wks",
    "chars": 1489,
    "preview": "(kicad_wks (version 20220228) (generator pl_editor)\r\n  (setup (textsize 1.5 1.5)(linewidth 0.15)(textlinewidth 0.15)\r\n  "
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/tulipcc-bottom-pos.csv",
    "chars": 35,
    "preview": "Ref,Val,Package,PosX,PosY,Rot,Side\n"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/tulipcc-gerbers/tulipcc-B_Cu.gbl",
    "chars": 241747,
    "preview": "G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,7.0.6*\r\nG04 #@! TF.CreationDate,2023-09-13T17:44:04-07:00*\r\nG04 #@! TF.Projec"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/tulipcc-gerbers/tulipcc-B_Mask.gbs",
    "chars": 1135,
    "preview": "G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,7.0.6*\r\nG04 #@! TF.CreationDate,2023-09-13T17:44:04-07:00*\r\nG04 #@! TF.Projec"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/tulipcc-gerbers/tulipcc-B_Paste.gbp",
    "chars": 501,
    "preview": "G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,7.0.6*\r\nG04 #@! TF.CreationDate,2023-09-13T17:44:04-07:00*\r\nG04 #@! TF.Projec"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/tulipcc-gerbers/tulipcc-B_Silkscreen.gbo",
    "chars": 1249,
    "preview": "G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,7.0.6*\r\nG04 #@! TF.CreationDate,2023-09-13T17:44:04-07:00*\r\nG04 #@! TF.Projec"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/tulipcc-gerbers/tulipcc-Edge_Cuts.gm1",
    "chars": 2381,
    "preview": "G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,7.0.6*\r\nG04 #@! TF.CreationDate,2023-09-13T17:44:04-07:00*\r\nG04 #@! TF.Projec"
  },
  {
    "path": "docs/pcbs/tulip4_board_v4r9/tulipcc-gerbers/tulipcc-F_Cu.gtl",
    "chars": 727150,
    "preview": "G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,7.0.6*\r\nG04 #@! TF.CreationDate,2023-09-13T17:44:04-07:00*\r\nG04 #@! TF.Projec"
  }
]

// ... and 1689 more files (download for full content)

About this extraction

This page contains the full source code of the shorepine/tulipcc GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1889 files (93.0 MB), approximately 24.5M tokens, and a symbol index with 15007 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!