sdcard picomite: sync with upstream

This commit is contained in:
Yatao Li
2025-06-15 21:31:45 +08:00
parent f305e6def6
commit eb3b15e188
37 changed files with 3695 additions and 449 deletions

View File

@@ -1,17 +1,43 @@
cmake_minimum_required(VERSION 3.13)
# Valid builds are PICO, PICOUSB, VGA, VGAUSB, HDMI(rp2350 only), HDMIUSB(rp2350 only), WEB
set(APP_NAME picomite)
set(PICOCALC true)
#set(SDBOOT true)
# For dynamic loading from SD card:
# SDBOOT requires the bootloader to be in the first 256KB of flash
# PicoMite will need to be shifted by this amount, and all references to
# positions in flash updated to accomodate. THIS OPTION IS NOT READY YET.
# details: https://github.com/adwuard/Picocalc_SD_Boot
set(SDBOOT true)
# Compile for PICO 1 Board
set(COMPILE PICO)
set(PICO_PLATFORM rp2040)
set(PICO_BOARD pico)
# Compile for PICO 2 Board
#set(COMPILE PICORP2350)
#set(COMPILE WEBRP2350)
add_executable(${APP_NAME}
if (COMPILE STREQUAL "HDMI" OR COMPILE STREQUAL "WEBRP2350" OR COMPILE STREQUAL "HDMIUSB" OR COMPILE STREQUAL "VGARP2350" OR COMPILE STREQUAL "VGAUSBRP2350" OR COMPILE STREQUAL "PICORP2350" OR COMPILE STREQUAL "PICOUSBRP2350" )
set(PICO_PLATFORM rp2350)
if (COMPILE STREQUAL "WEBRP2350")
set(PICO_BOARD pico2_w)
else()
set(PICO_BOARD pimoroni_pga2350)
endif()
else()
set(PICO_PLATFORM rp2040)
if (COMPILE STREQUAL "WEB")
set(PICO_BOARD pico_w)
else()
set(PICO_BOARD pico)
endif()
endif()
include(pico_sdk_import.cmake)
project(PicoMite C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
#set(PICO_NO_COPRO_DIS 1)
pico_sdk_init()
add_executable(PicoMite
PicoMite.c
Memory.c
regex.c
@@ -47,21 +73,56 @@ add_executable(${APP_NAME}
VS1053.c
aes.c
)
if (COMPILE STREQUAL "WEB" OR COMPILE STREQUAL "WEBRP2350" )
target_sources(PicoMite PRIVATE
SSD1963.c
Touch.c
GUI.c
cJSON.c
mqtt.c
MMMqtt.c
MMTCPclient.c
MMtelnet.c
MMntp.c
MMtcpserver.c
tftp.c
MMtftp.c
MMudp.c
)
set_source_files_properties(cJSON.c PROPERTIES COMPILE_FLAGS -Os)
target_include_directories(PicoMite PRIVATE
${CMAKE_CURRENT_LIST_DIR}
${CMAKE_CURRENT_LIST_DIR}/.. # for our common lwipopts
)
Pico_enable_stdio_usb(PicoMite 1)
endif()
target_sources(${APP_NAME} PRIVATE
if ((COMPILE STREQUAL "PICO") OR (COMPILE STREQUAL "PICOUSB") OR (COMPILE STREQUAL "PICORP2350") OR (COMPILE STREQUAL "PICOUSBRP2350") OR (COMPILE STREQUAL "WEBRP2350"))
target_sources(PicoMite PRIVATE
SSD1963.c
Touch.c
GUI.c)
endif()
target_sources(${APP_NAME} PRIVATE
if (COMPILE STREQUAL "VGAUSB" OR COMPILE STREQUAL "PICOUSBRP2350" OR COMPILE STREQUAL "VGAUSBRP2350" OR COMPILE STREQUAL "PICOUSB" OR COMPILE STREQUAL "HDMIUSB")
target_sources(PicoMite PRIVATE
USBKeyboard.c
)
else()
target_sources(PicoMite PRIVATE
Keyboard.c
mouse.c
)
endif()
if(COMPILE STREQUAL "VGARP2350" OR COMPILE STREQUAL "WEBRP2350" OR COMPILE STREQUAL "PICORP2350" OR COMPILE STREQUAL "HDMI" OR COMPILE STREQUAL "HDMIUSB" OR COMPILE STREQUAL "VGAUSBRP2350" OR COMPILE STREQUAL "PICOUSBRP2350")
target_sources(PicoMite PRIVATE
upng.c
)
endif()
if(PICOCALC STREQUAL "true")
target_sources(${APP_NAME} PRIVATE
target_sources(PicoMite PRIVATE
picocalc/i2ckbd.c
)
endif()
@@ -79,27 +140,33 @@ set_source_files_properties(hxcmod.c PROPERTIES COMPILE_FLAGS -Os)
set_source_files_properties(MATHS.c PROPERTIES COMPILE_FLAGS -Os)
set_source_files_properties(Editor.c PROPERTIES COMPILE_FLAGS -Os)
set_source_files_properties(aes.c PROPERTIES COMPILE_FLAGS -Os)
pico_generate_pio_header(${APP_NAME} ${CMAKE_CURRENT_LIST_DIR}/PicoMiteI2S.pio)
pico_define_boot_stage2(slower_boot2 ${PICO_DEFAULT_BOOT_STAGE2_FILE})
target_compile_definitions(slower_boot2 PRIVATE PICO_FLASH_SPI_CLKDIV=4)
pico_set_boot_stage2(${APP_NAME} slower_boot2)
pico_enable_stdio_usb(${APP_NAME} 1)
pico_enable_stdio_uart(${APP_NAME} 0)
pico_add_extra_outputs(${APP_NAME})
pico_add_uf2_output(${APP_NAME})
target_link_options(${APP_NAME} PRIVATE -Wl,--print-memory-usage)
target_link_options(${APP_NAME} PRIVATE -Wl,-z,max-page-size=4096)
pico_set_linker_script(${APP_NAME} ${CMAKE_BINARY_DIR}/${APP_NAME}.ld)
pico_generate_pio_header(PicoMite ${CMAKE_CURRENT_LIST_DIR}/PicoMiteI2S.pio)
if (COMPILE STREQUAL "VGAUSB" OR COMPILE STREQUAL "VGA" OR COMPILE STREQUAL "PICO" OR COMPILE STREQUAL "PICOUSB" OR COMPILE STREQUAL "WEB")
pico_define_boot_stage2(slower_boot2 ${PICO_DEFAULT_BOOT_STAGE2_FILE})
target_compile_definitions(slower_boot2 PRIVATE PICO_FLASH_SPI_CLKDIV=4)
pico_set_boot_stage2(PicoMite slower_boot2)
endif()
if (COMPILE STREQUAL "VGAUSB" OR COMPILE STREQUAL "VGA" OR COMPILE STREQUAL "VGAUSBRP2350" OR COMPILE STREQUAL "VGARP2350")
pico_generate_pio_header(PicoMite ${CMAKE_CURRENT_LIST_DIR}/PicoMiteVGA.pio)
endif()
pico_set_printf_implementation(${APP_NAME} compiler)
if (COMPILE STREQUAL "VGAUSB" OR COMPILE STREQUAL "PICOUSB" OR COMPILE STREQUAL "HDMIUSB" OR COMPILE STREQUAL "PICOUSBRP2350" OR COMPILE STREQUAL "VGAUSBRP2350")
Pico_enable_stdio_usb(PicoMite 0)
target_include_directories(PicoMite PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/usb_host_files
)
else()
Pico_enable_stdio_usb(PicoMite 1)
endif()
target_compile_options(${APP_NAME} PRIVATE -DNDEBUG
pico_enable_stdio_uart(PicoMite 0)
pico_add_extra_outputs(PicoMite)
pico_set_printf_implementation(PicoMite compiler)
if(COMPILE STREQUAL "VGARP2350" OR COMPILE STREQUAL "WEBRP2350" OR COMPILE STREQUAL "PICORP2350" OR COMPILE STREQUAL "HDMI" OR COMPILE STREQUAL "HDMIUSB" OR COMPILE STREQUAL "VGAUSBRP2350" OR COMPILE STREQUAL "PICOUSBRP2350")
pico_set_float_implementation(PicoMite pico_dcp)
endif()
target_compile_options(PicoMite PRIVATE -DNDEBUG
-DPICO_STDIO_USB_ENABLE_RESET_VIA_VENDOR_INTERFACE=0
-DPICO_ADC_CLKDIV_ROUND_NEAREST
-DPICO_XOSC_STARTUP_DELAY_MULTIPLIER=64
@@ -110,22 +177,64 @@ target_compile_options(${APP_NAME} PRIVATE -DNDEBUG
-DPICO_MALLOC_PANIC
-O2
-Wall)
target_compile_options(${APP_NAME} PRIVATE -DPICOMITE
-DPICO_HEAP_SIZE=0x1000
-DGUICONTROLS
-DPICO_CORE0_STACK_SIZE=0x1000
# all RP2350 variants
if (COMPILE STREQUAL "HDMI" OR COMPILE STREQUAL "WEBRP2350" OR COMPILE STREQUAL "HDMIUSB" OR COMPILE STREQUAL "PICORP2350" OR COMPILE STREQUAL "PICOUSBRP2350" OR COMPILE STREQUAL "VGARP2350" OR COMPILE STREQUAL "VGAUSBRP2350")
target_compile_options(PicoMite PRIVATE -Drp2350
-DPICO_FLASH_SPI_CLKDIV=4
-DPICO_PIO_USE_GPIO_BASE
)
endif()
# all PicoMite variants - enable the gui
if (COMPILE STREQUAL "PICO" OR COMPILE STREQUAL "PICOUSB" OR COMPILE STREQUAL "PICORP2350" OR COMPILE STREQUAL "PICOUSBRP2350")
target_compile_options(PicoMite PRIVATE -DPICOMITE
-DPICO_HEAP_SIZE=0x1000
-DGUICONTROLS
-DPICO_CORE0_STACK_SIZE=0x1000
)
endif()
# all VGA variants
if (COMPILE STREQUAL "VGA" OR COMPILE STREQUAL "VGAUSB" OR COMPILE STREQUAL "VGARP2350" OR COMPILE STREQUAL "VGAUSBRP2350")
target_compile_options(PicoMite PRIVATE -DPICOMITEVGA
-DPICO_HEAP_SIZE=0x2000
-DPICO_CORE0_STACK_SIZE=0x2000
)
endif()
# HDMI variants
if (COMPILE STREQUAL "HDMI" OR COMPILE STREQUAL "HDMIUSB")
target_compile_options(PicoMite PRIVATE -DPICOMITEVGA
-DHDMI
-DPICO_HEAP_SIZE=0x2000
-DPICO_CORE0_STACK_SIZE=0x2000
)
endif()
#Web variants need more heap
if(COMPILE STREQUAL "WEB" OR COMPILE STREQUAL "WEBRP2350")
target_compile_options(PicoMite PRIVATE -DPICOMITEWEB
-DPICO_HEAP_SIZE=0x4000
-DGUICONTROLS
-DCYW43_HOST_NAME="WebMite"
-DPICO_CYW43_ARCH_POLL
-DPICO_CORE0_STACK_SIZE=0x4000
)
endif()
#USB variants
if (COMPILE STREQUAL "PICOUSB" OR COMPILE STREQUAL "PICOUSBRP2350" OR COMPILE STREQUAL "VGAUSB" OR COMPILE STREQUAL "VGAUSBRP2350" OR COMPILE STREQUAL "HDMIUSB")
target_compile_options(PicoMite PRIVATE -DUSBKEYBOARD
)
endif()
#special case WEB RP2350 gets the GUI controls
if(COMPILE STREQUAL "WEBRP2350")
target_compile_options(PicoMite PRIVATE -DGUICONTROLS
)
endif()
#set the PICOCALC flag
if(PICOCALC STREQUAL "true")
target_compile_options(${APP_NAME} PRIVATE -DPICOCALC
target_compile_options(PicoMite PRIVATE -DPICOCALC
)
endif()
target_link_libraries(${APP_NAME}
target_link_libraries(PicoMite
pico_stdlib
hardware_flash
hardware_irq
@@ -136,39 +245,65 @@ target_link_libraries(${APP_NAME}
hardware_dma
hardware_exception
hardware_pio
pico_multicore
pico_unique_id
)
if(COMPILE STREQUAL "VGAUSB" OR COMPILE STREQUAL "PICOUSB" OR COMPILE STREQUAL "HDMIUSB" OR COMPILE STREQUAL "PICOUSBRP2350" OR COMPILE STREQUAL "VGAUSBRP2350")
target_link_libraries(PicoMite
tinyusb_host
tinyusb_board
pico_multicore
)
endif()
set(UF2_SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${APP_NAME}.uf2)
set(UF2_DEST ${CMAKE_BINARY_DIR}/${APP_NAME}.uf2)
if(COMPILE STREQUAL "VGA" OR COMPILE STREQUAL "PICO" OR COMPILE STREQUAL "HDMI" OR COMPILE STREQUAL "VGARP2350" OR COMPILE STREQUAL "PICORP2350")
target_link_libraries(PicoMite
pico_multicore
)
endif()
if(COMPILE STREQUAL "VGARP2350" OR COMPILE STREQUAL "WEBRP2350" OR COMPILE STREQUAL "PICORP2350" OR COMPILE STREQUAL "HDMI" OR COMPILE STREQUAL "HDMIUSB" OR COMPILE STREQUAL "VGAUSBRP2350" OR COMPILE STREQUAL "PICOUSBRP2350")
target_link_libraries(PicoMite
pico_rand
)
endif()
if(COMPILE STREQUAL "WEB" OR COMPILE STREQUAL "WEBRP2350" )
target_link_libraries(PicoMite
pico_cyw43_arch_lwip_poll
)
endif()
if(SDBOOT STREQUAL "true" AND (COMPILE STREQUAL "PICORP2350" OR COMPILE STREQUAL "WEBRP2350"))
pico_set_linker_script(PicoMite ${CMAKE_SOURCE_DIR}/memmap_default_rp2350.ld)
endif()
if(SDBOOT STREQUAL "true" AND (COMPILE STREQUAL "PICO"))
pico_set_linker_script(PicoMite ${CMAKE_SOURCE_DIR}/memmap_default_rp2040.ld)
endif()
set(UF2_SOURCE ${CMAKE_CURRENT_BINARY_DIR}/PicoMite.uf2)
set(UF2_DEST ${CMAKE_BINARY_DIR}/PicoMite.uf2)
add_custom_command(
OUTPUT ${UF2_DEST}
DEPENDS ${UF2_SOURCE}
COMMAND ${CMAKE_COMMAND} -E copy ${UF2_SOURCE} ${UF2_DEST}
COMMENT "Copying ${APP_NAME}.uf2 to top-level build dir"
COMMENT "Copying PicoMite.uf2 to top-level build dir"
)
add_custom_target(PREPARE_${APP_NAME}
COMMENT "Create Linker Script for '${APP_NAME}'"
add_custom_target(PREPARE_PicoMite
COMMENT "Create Linker Script for 'PicoMite'"
COMMAND ${Python3_EXECUTABLE}
${CMAKE_SOURCE_DIR}/applink.py PREPARE
${CMAKE_BINARY_DIR}
${APP_NAME})
PicoMite)
add_custom_target(BUILT_${APP_NAME}
COMMENT "Record Build Details for '${APP_NAME}'"
add_custom_target(BUILT_PicoMite
COMMENT "Record Build Details for 'PicoMite'"
DEPENDS ${UF2_DEST}
COMMAND ${Python3_EXECUTABLE}
${CMAKE_SOURCE_DIR}/applink.py BUILT
${CMAKE_BINARY_DIR}
${APP_NAME})
PicoMite)
if(SDBOOT STREQUAL "true")
pico_set_linker_script(${APP_NAME} ${CMAKE_SOURCE_DIR}/memmap_sdcard_app.ld)
endif()