diff --git a/.gitignore b/.gitignore index 5404029..a86d6e7 100644 --- a/.gitignore +++ b/.gitignore @@ -71,10 +71,14 @@ vcpkg_installed/ # test output & cache Testing/ .cache/ +.pytest_cache/ *.prg32 # Local environment configuration -prg32_env.h +sdkconfig +profiles/sdkconfig.defaults.local +.vscode/c_cpp_properties.json +.vscode/launch.json # Local Python tooling .venv/ diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json deleted file mode 100644 index fa53470..0000000 --- a/.vscode/c_cpp_properties.json +++ /dev/null @@ -1,368 +0,0 @@ -// -// !!! WARNING !!! AUTO-GENERATED FILE! -// PLEASE DO NOT MODIFY IT AND USE "platformio.ini": -// https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags -// -{ - "configurations": [ - { - "name": "PlatformIO", - "includePath": [ - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/riscv/include", - "/Users/raffaelemontella/PlatformioIOProjects/PRG32/.pio/build/prg32-esp32c6/config", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/newlib/platform_include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/freertos/config/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/freertos/config/include/freertos", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/freertos/config/riscv/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/freertos/FreeRTOS-Kernel/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/freertos/FreeRTOS-Kernel/portable/riscv/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/freertos/FreeRTOS-Kernel/portable/riscv/include/freertos", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/freertos/esp_additions/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_hw_support/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_hw_support/include/soc", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_hw_support/include/soc/esp32c6", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_hw_support/dma/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_hw_support/ldo/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_hw_support/debug_probe/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_hw_support/port/esp32c6", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_hw_support/port/esp32c6/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_hw_support/port/esp32c6/private_include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/heap/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/heap/tlsf", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/log/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/soc/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/soc/esp32c6", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/soc/esp32c6/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/soc/esp32c6/register", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/hal/platform_port/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/hal/esp32c6/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/hal/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_rom/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_rom/esp32c6/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_rom/esp32c6/include/esp32c6", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_rom/esp32c6", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_common/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_system/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_system/port/soc", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_system/port/include/riscv", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_system/port/include/private", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/lwip/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/lwip/include/apps", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/lwip/include/apps/sntp", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/lwip/lwip/src/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/lwip/port/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/lwip/port/freertos/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/lwip/port/esp32xx/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/lwip/port/esp32xx/include/arch", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/lwip/port/esp32xx/include/sys", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_gpio/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_timer/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_pm/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/mbedtls/port/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/library", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/mbedtls/esp_crt_bundle/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/3rdparty/everest/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/3rdparty/p256-m", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/3rdparty/p256-m/p256-m", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_app_format/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_bootloader_format/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/app_update/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/bootloader_support/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/bootloader_support/bootloader_flash/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_partition/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/efuse/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/efuse/esp32c6/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_mm/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/spi_flash/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_security/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/pthread/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_gptimer/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_ringbuf/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_uart/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/vfs/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/app_trace/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_event/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/nvs_flash/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_pcnt/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_spi/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_mcpwm/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_ana_cmpr/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_i2s/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/sdmmc/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_sdmmc/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_sdspi/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_sdio/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_dac/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_rmt/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_tsens/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_sdm/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_i2c/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_ledc/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_parlio/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_usb_serial_jtag/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/driver/deprecated", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/driver/i2c/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/driver/touch_sensor/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/driver/twai/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_phy/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_phy/esp32c6/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_vfs_console/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_netif/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/wpa_supplicant/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/wpa_supplicant/port/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/wpa_supplicant/esp_supplicant/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_coex/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_wifi/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_wifi/include/local", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_wifi/wifi_apps/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_wifi/wifi_apps/nan_app/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/unity/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/unity/unity/src", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/cmock/CMock/src", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/console", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/http_parser", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp-tls", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp-tls/esp-tls-crypto", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_adc/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_adc/interface", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_adc/esp32c6/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_adc/deprecated/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_isp/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_cam/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_cam/interface", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_jpeg/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_ppa/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_eth/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_gdbstub/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_hid/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/tcp_transport/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_http_client/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_http_server/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_https_ota/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_https_server/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_psram/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_lcd/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_lcd/interface", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/protobuf-c/protobuf-c", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/protocomm/include/common", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/protocomm/include/security", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/protocomm/include/transports", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/protocomm/include/crypto/srp6a", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/protocomm/proto-c", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_local_ctrl/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/espcoredump/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/espcoredump/include/port/riscv", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/wear_levelling/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/fatfs/diskio", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/fatfs/src", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/fatfs/vfs", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/idf_test/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/idf_test/include/esp32c6", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/ieee802154/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/json/cJSON", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/mqtt/esp-mqtt/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/nvs_sec_provider/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/rt/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/spiffs/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/wifi_provisioning/include", - "/Users/raffaelemontella/PlatformioIOProjects/PRG32/components/prg32_audio/include", - "/Users/raffaelemontella/PlatformioIOProjects/PRG32/managed_components/espressif__esp_websocket_client/include", - "/Users/raffaelemontella/PlatformioIOProjects/PRG32/managed_components/espressif__mdns/include", - "/Users/raffaelemontella/PlatformioIOProjects/PRG32/components/prg32/include", - "/Users/raffaelemontella/PlatformioIOProjects/PRG32/main", - "" - ], - "browse": { - "limitSymbolsToIncludedHeaders": true, - "path": [ - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/riscv/include", - "/Users/raffaelemontella/PlatformioIOProjects/PRG32/.pio/build/prg32-esp32c6/config", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/newlib/platform_include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/freertos/config/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/freertos/config/include/freertos", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/freertos/config/riscv/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/freertos/FreeRTOS-Kernel/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/freertos/FreeRTOS-Kernel/portable/riscv/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/freertos/FreeRTOS-Kernel/portable/riscv/include/freertos", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/freertos/esp_additions/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_hw_support/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_hw_support/include/soc", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_hw_support/include/soc/esp32c6", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_hw_support/dma/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_hw_support/ldo/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_hw_support/debug_probe/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_hw_support/port/esp32c6", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_hw_support/port/esp32c6/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_hw_support/port/esp32c6/private_include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/heap/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/heap/tlsf", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/log/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/soc/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/soc/esp32c6", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/soc/esp32c6/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/soc/esp32c6/register", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/hal/platform_port/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/hal/esp32c6/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/hal/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_rom/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_rom/esp32c6/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_rom/esp32c6/include/esp32c6", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_rom/esp32c6", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_common/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_system/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_system/port/soc", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_system/port/include/riscv", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_system/port/include/private", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/lwip/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/lwip/include/apps", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/lwip/include/apps/sntp", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/lwip/lwip/src/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/lwip/port/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/lwip/port/freertos/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/lwip/port/esp32xx/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/lwip/port/esp32xx/include/arch", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/lwip/port/esp32xx/include/sys", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_gpio/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_timer/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_pm/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/mbedtls/port/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/library", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/mbedtls/esp_crt_bundle/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/3rdparty/everest/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/3rdparty/p256-m", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/mbedtls/mbedtls/3rdparty/p256-m/p256-m", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_app_format/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_bootloader_format/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/app_update/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/bootloader_support/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/bootloader_support/bootloader_flash/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_partition/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/efuse/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/efuse/esp32c6/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_mm/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/spi_flash/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_security/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/pthread/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_gptimer/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_ringbuf/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_uart/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/vfs/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/app_trace/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_event/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/nvs_flash/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_pcnt/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_spi/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_mcpwm/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_ana_cmpr/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_i2s/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/sdmmc/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_sdmmc/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_sdspi/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_sdio/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_dac/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_rmt/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_tsens/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_sdm/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_i2c/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_ledc/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_parlio/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_usb_serial_jtag/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/driver/deprecated", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/driver/i2c/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/driver/touch_sensor/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/driver/twai/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_phy/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_phy/esp32c6/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_vfs_console/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_netif/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/wpa_supplicant/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/wpa_supplicant/port/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/wpa_supplicant/esp_supplicant/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_coex/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_wifi/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_wifi/include/local", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_wifi/wifi_apps/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_wifi/wifi_apps/nan_app/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/unity/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/unity/unity/src", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/cmock/CMock/src", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/console", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/http_parser", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp-tls", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp-tls/esp-tls-crypto", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_adc/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_adc/interface", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_adc/esp32c6/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_adc/deprecated/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_isp/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_cam/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_cam/interface", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_jpeg/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_driver_ppa/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_eth/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_gdbstub/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_hid/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/tcp_transport/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_http_client/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_http_server/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_https_ota/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_https_server/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_psram/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_lcd/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_lcd/interface", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/protobuf-c/protobuf-c", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/protocomm/include/common", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/protocomm/include/security", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/protocomm/include/transports", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/protocomm/include/crypto/srp6a", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/protocomm/proto-c", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/esp_local_ctrl/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/espcoredump/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/espcoredump/include/port/riscv", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/wear_levelling/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/fatfs/diskio", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/fatfs/src", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/fatfs/vfs", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/idf_test/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/idf_test/include/esp32c6", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/ieee802154/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/json/cJSON", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/mqtt/esp-mqtt/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/nvs_sec_provider/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/rt/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/spiffs/include", - "/Users/raffaelemontella/.platformio/packages/framework-espidf/components/wifi_provisioning/include", - "/Users/raffaelemontella/PlatformioIOProjects/PRG32/components/prg32_audio/include", - "/Users/raffaelemontella/PlatformioIOProjects/PRG32/managed_components/espressif__esp_websocket_client/include", - "/Users/raffaelemontella/PlatformioIOProjects/PRG32/managed_components/espressif__mdns/include", - "/Users/raffaelemontella/PlatformioIOProjects/PRG32/components/prg32/include", - "/Users/raffaelemontella/PlatformioIOProjects/PRG32/main", - "" - ] - }, - "defines": [ - "_POSIX_READER_WRITER_LOCKS", - "_GNU_SOURCE", - "_GLIBCXX_USE_POSIX_SEMAPHORE", - "_GLIBCXX_HAVE_POSIX_SEMAPHORE", - "SOC_XTAL_FREQ_MHZ=CONFIG_XTAL_FREQ", - "SOC_MMU_PAGE_SIZE=CONFIG_MMU_PAGE_SIZE", - "PRG32_FIRMWARE_VERSION=\"ab088fd-dirty\"", - "IDF_VER=\"5.4.1\"", - "ESP_PLATFORM", - "PLATFORMIO=60119", - "" - ], - "cStandard": "gnu17", - "cppStandard": "gnu++23", - "compilerPath": "/Users/raffaelemontella/.platformio/packages/toolchain-riscv32-esp/bin/riscv32-esp-elf-gcc", - "compilerArgs": [ - "-march=rv32imac_zicsr_zifencei", - "" - ] - } - ], - "version": 4 -} diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 7526738..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,53 +0,0 @@ -// AUTOMATICALLY GENERATED FILE. PLEASE DO NOT MODIFY IT MANUALLY -// -// PlatformIO Debugging Solution -// -// Documentation: https://docs.platformio.org/en/latest/plus/debugging.html -// Configuration: https://docs.platformio.org/en/latest/projectconf/sections/env/options/debug/index.html - -{ - "version": "0.2.0", - "configurations": [ - { - "name": "PRG32: ESP-IDF debug", - "type": "espidf", - "request": "launch", - "initGdbCommands": [ - "set disassemble-next-line on", - "set print pretty on" - ] - }, - { - "type": "platformio-debug", - "request": "launch", - "name": "PIO Debug", - "executable": "/Users/raffaelemontella/PlatformioIOProjects/PRG32/.pio/build/prg32-esp32c6/firmware.elf", - "projectEnvName": "prg32-esp32c6", - "toolchainBinDir": "/Users/raffaelemontella/.platformio/packages/toolchain-riscv32-esp/bin", - "internalConsoleOptions": "openOnSessionStart", - "preLaunchTask": { - "type": "PlatformIO", - "task": "Pre-Debug" - } - }, - { - "type": "platformio-debug", - "request": "launch", - "name": "PIO Debug (skip Pre-Debug)", - "executable": "/Users/raffaelemontella/PlatformioIOProjects/PRG32/.pio/build/prg32-esp32c6/firmware.elf", - "projectEnvName": "prg32-esp32c6", - "toolchainBinDir": "/Users/raffaelemontella/.platformio/packages/toolchain-riscv32-esp/bin", - "internalConsoleOptions": "openOnSessionStart" - }, - { - "type": "platformio-debug", - "request": "launch", - "name": "PIO Debug (without uploading)", - "executable": "/Users/raffaelemontella/PlatformioIOProjects/PRG32/.pio/build/prg32-esp32c6/firmware.elf", - "projectEnvName": "prg32-esp32c6", - "toolchainBinDir": "/Users/raffaelemontella/.platformio/packages/toolchain-riscv32-esp/bin", - "internalConsoleOptions": "openOnSessionStart", - "loadMode": "manual" - } - ] -} diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 696143f..d47a398 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -11,7 +11,7 @@ "-D", "SDKCONFIG=build-esp32c6/sdkconfig", "-D", - "SDKCONFIG_DEFAULTS=sdkconfig.defaults", + "SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults", "set-target", "esp32c6" ], @@ -27,7 +27,7 @@ "-D", "SDKCONFIG=build-esp32c6/sdkconfig", "-D", - "SDKCONFIG_DEFAULTS=sdkconfig.defaults", + "SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults", "-D", "IDF_TARGET=esp32c6", "menuconfig" @@ -44,7 +44,7 @@ "-D", "SDKCONFIG=build-esp32c6/sdkconfig", "-D", - "SDKCONFIG_DEFAULTS=sdkconfig.defaults", + "SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults", "-D", "IDF_TARGET=esp32c6", "build" @@ -62,7 +62,7 @@ "-D", "SDKCONFIG=build-esp32c6/sdkconfig", "-D", - "SDKCONFIG_DEFAULTS=sdkconfig.defaults", + "SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults", "-D", "IDF_TARGET=esp32c6", "flash", @@ -80,7 +80,7 @@ "-D", "SDKCONFIG=build-qemu/sdkconfig", "-D", - "SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu", + "SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu", "set-target", "esp32c3" ], @@ -96,7 +96,7 @@ "-D", "SDKCONFIG=build-qemu/sdkconfig", "-D", - "SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu", + "SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu", "-D", "IDF_TARGET=esp32c3", "build" @@ -114,7 +114,7 @@ "-D", "SDKCONFIG=build-qemu/sdkconfig", "-D", - "SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu", + "SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu", "-D", "IDF_TARGET=esp32c3", "qemu", @@ -133,7 +133,7 @@ "-D", "SDKCONFIG=build-qemu/sdkconfig", "-D", - "SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu", + "SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu", "-D", "IDF_TARGET=esp32c3", "qemu", @@ -153,7 +153,7 @@ "-D", "SDKCONFIG=build-qemu/sdkconfig", "-D", - "SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu", + "SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu", "-D", "IDF_TARGET=esp32c3", "gdb" @@ -170,7 +170,7 @@ "-D", "SDKCONFIG=build-esp32c6/sdkconfig", "-D", - "SDKCONFIG_DEFAULTS=sdkconfig.defaults", + "SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults", "-D", "IDF_TARGET=esp32c6", "fullclean" @@ -278,4 +278,4 @@ "default": "http://192.168.4.1" } ] -} +} \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md index 8b717c1..1084d00 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -20,10 +20,17 @@ Before writing or modifying any code, you MUST complete these steps: ## [PHASE 2: VALIDATION RUNS] 1. At the start of every session you must ask the user a question: -"Would you like to validate my edits by building the prg32 framework or do you prefer to run the builds on your own?" +"Would you like to validate my edits by allowing me to build the PRG32 framework or do you prefer to run the builds on your own?" +The possible answers should include: +- "Yes, please validate the edits by building the PRG32 framework.". +- "No, I prefer to run the builds on my own.". -2. If the answer to the builds is yes, you should then ask: +2. IF AND ONLY IF the answer is yes, you should then ask: "For what architecture are you building for? ESP32C6 or QEMU?" +The possible answers should include: +- ESP32C6. +- QEMU. +- Both. ## [PHASE 3: EXECUTION & DOCUMENTATION] When modifying code, you are bound by these rules: @@ -44,11 +51,22 @@ Run these exact commands to validate your work: git diff --check # 2. Run Python linting/tooling +python3 -m compileall prg32 tests tools python3 -m prg32 doctor -python3 -m py_compile python3 -m prg32 +python3 -m prg32 test + +# 3. Run CI Tests (from GitHub Actions) +python3 -m prg32.esp32c6.ci_smoke_test +python3 -m prg32 abi check +cartridges/devicedemo/tests/check_source.sh +cartridges/bachdemo/scripts/test.sh +cartridges/poing/tests/run.sh +cc -std=c11 -Wall -Wextra -Werror cartridges/blackjack/tests/test_rules.c cartridges/blackjack/blackjack_rules.c -o /tmp/prg32-blackjack-rules +/tmp/prg32-blackjack-rules +sha256sum --check cartridges/blackjack/SHA256SUMS ``` -If the user explicitly asked for you to do the builds after the edits, you should run one of these commands or both based on the architecture you are building on. +If the user explicitly asked for you to do the builds after the edits, you should run one of these commands or both based on the architecture the edits are targeting. If you are working on ESP32c6, Build the physical firmware: ```bash @@ -60,6 +78,6 @@ If you are working on QEMU, Build the QEMU firmware: python3 -m prg32 qemu build ``` -[PHASE 5: DOCUMENTATION EDITING] -After being done with editing, you should modify all relevant documentation in docs/ and the repository structure. -NEVER edit the README unless explicitly specified. +## [PHASE 5: DOCUMENTATION EDITING] +After being done with editing, you should modify all relevant documentation in docs/ and the [repository structure](docs/repository_structure.md). +NEVER edit the [README](/README.md) unless explicitly specified. diff --git a/CMakeLists.txt b/CMakeLists.txt index 6db6c01..263f3f3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,6 +16,29 @@ if(NOT PRG32_FIRMWARE_VERSION) endif() set(PROJECT_VER "${PRG32_FIRMWARE_VERSION}") +set(EXTRA_CONFIGS "") +if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/profiles/sdkconfig.defaults.local") + set(EXTRA_CONFIGS "${CMAKE_CURRENT_LIST_DIR}/profiles/sdkconfig.defaults.local") +endif() + +if(NOT DEFINED SDKCONFIG_DEFAULTS AND NOT DEFINED ENV{SDKCONFIG_DEFAULTS}) + if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/sdkconfig.defaults") + set(SDKCONFIG_DEFAULTS "sdkconfig.defaults") + else() + set(SDKCONFIG_DEFAULTS "profiles/sdkconfig.defaults") + endif() +elseif(DEFINED SDKCONFIG_DEFAULTS AND SDKCONFIG_DEFAULTS STREQUAL "sdkconfig.defaults" AND NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/sdkconfig.defaults") + set(SDKCONFIG_DEFAULTS "profiles/sdkconfig.defaults") +endif() + +if(EXTRA_CONFIGS) + if(DEFINED ENV{SDKCONFIG_DEFAULTS}) + set(SDKCONFIG_DEFAULTS "$ENV{SDKCONFIG_DEFAULTS};${EXTRA_CONFIGS}") + else() + set(SDKCONFIG_DEFAULTS "${SDKCONFIG_DEFAULTS};${EXTRA_CONFIGS}") + endif() +endif() + include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(PRG32) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1322d9e..d717640 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -44,80 +44,23 @@ Reflection: - What would you improve next? ``` -## Local Setup - -Recommended setup: - -1. Open `PRG32.code-workspace` in VS Code. -2. Install the recommended extensions. -3. Install and source ESP-IDF for ESP32-C3 and ESP32-C6. -4. Use QEMU for early graphics/debugging work. -5. Use the ESP32-C6 board for final hardware validation. - -ESP-IDF commands: - -```bash -idf.py set-target esp32c6 -idf.py build -idf.py flash monitor -``` - -QEMU commands: - -```bash -idf.py -B build-qemu -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu set-target esp32c3 -idf.py -B build-qemu -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu build -idf.py -B build-qemu -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu qemu --graphics monitor -``` - -PlatformIO users can open the repository root and use the `prg32-esp32c6` -environment for physical board builds. - ## Validation Checklist Run these checks before opening a pull request: ```bash -git diff --check -PYTHONPYCACHEPREFIX=/tmp/prg32-pycache python3 -m py_compile \ - python3 -m prg32 \ - tools/prg32_metrics_paper.py -PYTHONPYCACHEPREFIX=/tmp/prg32-pycache python3 -m unittest discover -s tests -python3 -m prg32 doctor --host-only -``` - -When ESP-IDF is available, also run: - -```bash -idf.py build -idf.py -B build-qemu -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu build -``` - -For end-to-end QEMU cartridge testing: - -```bash -./scripts/smoke_test.sh +python3 -m compileall prg32 tests tools +python3 -m prg32 doctor +python3 -m prg32 test ``` -Changes under `cartridges/blackjack` or `cartridges/devicedemo` must also pass -their local checks and package scripts. GitHub Actions repeats these commands -and uploads both architecture variants plus each Cartridge Store bundle: +Then verify that the project is building correctly: ```bash -cc -std=c11 -Wall -Wextra -Werror \ - cartridges/blackjack/tests/test_rules.c \ - cartridges/blackjack/blackjack_rules.c \ - -o /tmp/prg32-blackjack-rules -/tmp/prg32-blackjack-rules -cartridges/devicedemo/tests/check_source.sh -cartridges/blackjack/build.sh -PRG32_REPO="$PWD" PRG32_ARCHITECTURE=esp32c6 cartridges/devicedemo/scripts/build.sh -PRG32_REPO="$PWD" PRG32_ARCHITECTURE=qemu cartridges/devicedemo/scripts/build.sh -PRG32_REPO="$PWD" cartridges/devicedemo/scripts/pack-store-bundle.sh +python3 -m prg32 qemu build-and-run +python3 -m prg32 esp32c6 build-and-flash ``` -If a tool is missing, write that clearly in the pull request. Do not claim a -firmware or QEMU build passed unless it actually ran. ## Coding Guidelines @@ -128,9 +71,7 @@ firmware or QEMU build passed unless it actually ran. changes the default firmware behavior. - Keep example games in `examples/games`; do not move them into the default app. - Keep focused rendering demonstrations in `examples/features`. -- Do not reintroduce legacy `urg32` paths or symbols. -- Keep generated files, local databases, build outputs, and `.prg32` cartridges - out of commits. +- Keep generated files, local databases, build outputs, and `.prg32` cartridges out of commits. - Keep docs in sync when commands, paths, APIs, examples, or lab flows change. ## Assembly Guidelines diff --git a/README.md b/README.md index ff29574..340d3cf 100644 --- a/README.md +++ b/README.md @@ -15,43 +15,7 @@ The platform is designed around the **Espressif ESP32-C6** microcontroller and u - **Audio**: One or two MAX98357A I2S amplifiers for mono or stereo sound. - **Input**: A simple digital joystick and action buttons wired directly to GPIO pins. -Please refer to the [Hardware & Pinouts](docs/hardware/hardware.md) guide for further information about the full bill of materials, breadboard wiring diagrams, and PCB references. -## Cartridge Builds - -New `.prg32` cartridges use the portable ABI table and do not depend on a -particular firmware ELF. Build an example after loading the ESP-IDF environment: - -```bash -python3 -m prg32 cartridge build \ - examples/games/asteroids/graphics/game.S \ - --portable \ - --entry-prefix asteroids_graphics \ - --name asteroids \ - --out build-esp32c6/asteroids.prg32 -``` - -The builder rejects firmware-specific absolute-import builds. Existing -cartridges of that kind remain loadable only with matching resident firmware. -See the [cartridge guide](docs/software/cartridges.md) for hardware and QEMU -upload instructions and the [ABI guide](docs/software/abi.md) for compatibility. - -## Indexed Framebuffer - -On ESP32-C6 hardware, the 320x200 game surface is a 64,000-byte, 8-bit indexed -framebuffer backed by a deterministic 256-entry RGB565 palette. The ILI9341 -remains in native 16-bit RGB565 mode: dirty indexed rows are expanded into the -existing small RGB565 SPI strip only during presentation. Compared with the -previous 128,000-byte framebuffer, this reclaims 63,488 bytes (about 62 KiB) -without allocating a second full-size RGB565 surface. Existing RGB565 drawing -calls remain source- and ABI-compatible through deterministic system-palette -quantization; indexed-native primitives and palette cycling are available for -cartridges that need exact palette control. See [ILI9341 Hardware and Driver -Notes](docs/hardware/ili9341.md) and the [Framework Manual](docs/software/framework_manual.md). - -The reference Performance Test compares matched RGB565-compatible and full -indexed-native workloads. Poing is an application example that renders its -procedural scene with 8-bit indices and can publish a 300-frame gameplay result -through the same public performance API by pressing SELECT. +Please refer to the [Hardware & Pinouts](docs/hardware/hardware.md) guide for further information about breadboard wiring diagrams, PCB references and the full bill of materials. ## Academic Profile @@ -72,8 +36,8 @@ through the same public performance API by pressing SELECT. 3. Select an ESP-IDF 5.4 or newer release. 4. Include support for `esp32c3` and `esp32c6`. 5. (Optional) Check the QEMU RISC-V emulator box during installation if you want to use the QEMU desktop emulator. -6. Open the "ESP-IDF PowerShell" shortcut created by the installer. -7. Clone the project and verify your setup from that shell (the ESP-IDF environment is already active, so `pip` will install into it): +6. Open the "ESP-IDF PowerShell" shortcut created by the installer. This will activate the ESP-IDF environment, so `pip` will install into it. +7. Clone the project and verify your setup from that shell ```powershell cd $HOME\Documents @@ -209,8 +173,7 @@ The ESP32-C6 build keeps UART0 as the primary ESP-IDF console and enables native USB Serial/JTAG as a secondary output for PlatformIO Monitor. A healthy boot logs the configured `prg32_lcd` ILI9341 pins before drawing the splash. -The PlatformIO environment is for the physical ESP32-C6 classroom board. Keep -using the `idf.py` commands in `docs/qemu.md` for QEMU screen builds. +The PlatformIO environment is for the physical ESP32-C6 classroom board. Keep using the commands in the [QEMU documentation](docs/usage/qemu.md) for QEMU screen builds. > [!TIP] diff --git a/assets/prg32_logo.png b/assets/prg32_logo.png index f4c3d2b..ab0c539 100644 Binary files a/assets/prg32_logo.png and b/assets/prg32_logo.png differ diff --git a/cartridges/blackjack/AGENTS.md b/cartridges/blackjack/AGENTS.md new file mode 100644 index 0000000..3051de5 --- /dev/null +++ b/cartridges/blackjack/AGENTS.md @@ -0,0 +1,12 @@ +# AGENTS.md + +When making changes to this cartridge, run the following local checks and package scripts from the repository root: + +```bash +cc -std=c11 -Wall -Wextra -Werror \ + cartridges/blackjack/tests/test_rules.c \ + cartridges/blackjack/blackjack_rules.c \ + -o /tmp/prg32-blackjack-rules +/tmp/prg32-blackjack-rules +cartridges/blackjack/build.sh +``` diff --git a/cartridges/devicedemo/AGENTS.md b/cartridges/devicedemo/AGENTS.md index a972a17..ba6cce7 100644 --- a/cartridges/devicedemo/AGENTS.md +++ b/cartridges/devicedemo/AGENTS.md @@ -1,3 +1,12 @@ # AGENTS.md This cartridge tracks the PRG32 `main` branch. Before changing APIs, read the corresponding PRG32 documentation and public headers. Keep code and documentation in sync. Prefer compact indexed assets over RGB565 arrays when appropriate. Preserve the portable ABI-table build. Do not introduce firmware-private calls. Before completion run `git diff --check` when in a git tree, `python3 -m prg32 doctor` when the CLI is available, and build at least one of ESP32-C6 or QEMU. Keep DeviceDemo safe: diagnostic pages must not reconfigure WiFi, erase cartridges, or publish network state automatically. + +When making changes to this cartridge, run the following local checks and package scripts from the repository root: + +```bash +cartridges/devicedemo/tests/check_source.sh +PRG32_REPO="$PWD" PRG32_ARCHITECTURE=esp32c6 cartridges/devicedemo/scripts/build.sh +PRG32_REPO="$PWD" PRG32_ARCHITECTURE=qemu cartridges/devicedemo/scripts/build.sh +PRG32_REPO="$PWD" cartridges/devicedemo/scripts/pack-store-bundle.sh +``` diff --git a/components/prg32/Kconfig b/components/prg32/Kconfig index db9170f..abb119e 100644 --- a/components/prg32/Kconfig +++ b/components/prg32/Kconfig @@ -1,4 +1,4 @@ -menu "PRG32 framework" +menu "PRG32 Framework" choice PRG32_DISPLAY_BACKEND prompt "Display backend" @@ -195,6 +195,244 @@ config PRG32_STORE_URL Example: http://192.168.1.42:5080 In QEMU builds, mDNS is unavailable; set this to reach a LAN server. +menu "Wi-Fi Configuration" + +choice PRG32_WIFI_BOOT_MODE + prompt "Wi-Fi Boot Mode" + default PRG32_WIFI_BOOT_MODE_AP + help + Select the initial Wi-Fi mode at boot. + Access Point (AP) mode hosts its own network. + Infrastructure (STA) mode connects to an existing network. + +config PRG32_WIFI_BOOT_MODE_AP + bool "Access Point (AP)" + help + The board creates its own network (e.g. SSID "PRG32"). + +config PRG32_WIFI_BOOT_MODE_STA + bool "Infrastructure (STA)" + help + The board connects to an existing local network. + +endchoice + +config PRG32_WIFI_SSID + string "Wi-Fi SSID" + default "PRG32" + help + The SSID of the network. If in AP mode, this is the network name + broadcasted by the device. If in STA mode, this is the network + to connect to. + +config PRG32_WIFI_PASSWORD + string "Wi-Fi Password" + default "prg32game" + help + The password of the network. Must be at least 8 characters for WPA2. + +endmenu + +menu "PRG32 Board Configuration" + +config PRG32_PIN_LCD_MOSI + int "LCD MOSI GPIO" + default 7 + +config PRG32_PIN_LCD_MISO + int "LCD MISO GPIO" + default 2 + +config PRG32_PIN_LCD_SCLK + int "LCD SCLK GPIO" + default 6 + +config PRG32_PIN_LCD_CS + int "LCD CS GPIO" + default 10 + +config PRG32_PIN_LCD_DC + int "LCD DC GPIO" + default 1 + +config PRG32_PIN_LCD_RST + int "LCD RST GPIO" + default 0 + +config PRG32_PIN_LCD_BL + int "LCD Backlight GPIO" + default 5 + +config PRG32_PIN_BTN_UP + int "Joystick UP GPIO" + default 3 + +config PRG32_PIN_BTN_DOWN + int "Joystick DOWN GPIO" + default 13 + +config PRG32_PIN_BTN_LEFT + int "Joystick LEFT GPIO" + default 18 + +config PRG32_PIN_BTN_RIGHT + int "Joystick RIGHT GPIO" + default 19 + +config PRG32_PIN_BTN_START + int "START Button GPIO" + default 20 + +config PRG32_PIN_BTN_A + int "A Button GPIO" + default 21 + +config PRG32_PIN_BTN_B + int "B Button GPIO" + default 22 + +config PRG32_ENABLE_SEPARATE_SELECT_PIN + bool "Enable separate SELECT button pin" + default n + +config PRG32_PIN_BTN_SELECT + int "SELECT Button GPIO" + depends on PRG32_ENABLE_SEPARATE_SELECT_PIN + default 20 + +config PRG32_PIN_SETUP + int "Dedicated SETUP Button GPIO" + default -1 + +config PRG32_PIN_BUZZER + int "Buzzer GPIO" + default -1 + +config PRG32_AUDIO_I2S_BCLK_GPIO + int "I2S BCLK GPIO" + depends on PRG32_AUDIO_ENABLED + default 4 + +config PRG32_AUDIO_I2S_LRCLK_GPIO + int "I2S LRCLK/WS GPIO" + depends on PRG32_AUDIO_ENABLED + default 11 + +config PRG32_AUDIO_I2S_DATA_GPIO + int "I2S DATA/DIN GPIO" + depends on PRG32_AUDIO_ENABLED + default 23 + +config PRG32_AUDIO_I2S_SD_GPIO + int "I2S SD/shutdown GPIO" + depends on PRG32_AUDIO_ENABLED + default -1 + help + Optional amplifier shutdown/control GPIO. Set to -1 when not wired. + +config PRG32_PIN_RGB_LED + int "RGB LED GPIO" + default 8 + +config PRG32_QEMU_UART_1_TX + int "QEMU UART 1 TX (Python Listener)" + default 4 + +config PRG32_QEMU_UART_1_RX + int "QEMU UART 1 RX (Python Listener)" + default 5 + +config PRG32_LCD_SPI_CLOCK_HZ + int "LCD SPI Clock (Hz)" + default 27000000 + +config PRG32_LCD_BACKLIGHT_ACTIVE_LEVEL + int "LCD Backlight Active Level" + default 1 + +config PRG32_LCD_BOOT_TEST_MS + int "LCD Boot Test Delay (ms)" + default 0 + +config PRG32_LCD_SOFT_SPI + int "LCD Soft SPI Mode" + default 0 + +config PRG32_BOOT_SIGNAL_ENABLE + int "Enable Boot Signal" + default 0 + +config PRG32_BOOT_DIAGNOSTIC_DELAY_MS + int "Boot Diagnostic Delay (ms)" + default 0 + +endmenu + +menu "PRG32 Firmware Features" + +choice PRG32_DEFAULT_CONSOLE_MODE + prompt "Default Console Mode" + default PRG32_DEFAULT_MODE_UART_LCD_MIRROR + +config PRG32_DEFAULT_MODE_UART_ONLY + bool "UART Only" + +config PRG32_DEFAULT_MODE_LCD_ONLY + bool "LCD Only" + +config PRG32_DEFAULT_MODE_UART_LCD_MIRROR + bool "UART + LCD Mirror" + +endchoice + +config PRG32_DEBUG + int "PRG32 Debug Level" + default 0 + +config PRG32_GAME_UPLOAD_ENABLE + bool "Enable Game Upload (SoftAP + HTTP)" + default n if PRG32_DISPLAY_QEMU_RGB + default y + +config PRG32_WIFI_SCORES_ENABLE + bool "Enable Wi-Fi Scores API" + default n + +config PRG32_AUDIO_DEFAULT_VOLUME_PCT + int "Default Audio Volume (%)" + default 70 + range 0 100 + +config PRG32_MULTIPLAYER_ENABLE + bool "Enable Multiplayer Service" + default y + +config PRG32_MULTIPLAYER_SERVER_URL + string "Multiplayer Server URL" + depends on PRG32_MULTIPLAYER_ENABLE + default "ws://192.168.4.2:8081" + +config PRG32_BOOT_SETUP_MODE + int "Boot Setup Mode" + default 0 + +config PRG32_WIFI_AP_CHANNEL + int "Wi-Fi AP Channel" + default 6 + +config PRG32_WIFI_AP_MAX_CONN + int "Wi-Fi AP Max Connections" + default 4 + +config PRG32_WIFI_COUNTRY_CODE + string "Wi-Fi Country Code" + default "IT" + +config PRG32_WIFI_STA_LEGACY_PROTOCOLS + int "Wi-Fi STA Legacy Protocols Enabled" + default 1 + endmenu endmenu +endmenu diff --git a/components/prg32/assets/prg32_splash_logo.c b/components/prg32/assets/prg32_splash_logo.c index 5807372..e30ede5 100644 --- a/components/prg32/assets/prg32_splash_logo.c +++ b/components/prg32/assets/prg32_splash_logo.c @@ -1311,7 +1311,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x1082, - 0x18a2, 0x3186, 0x39e7, 0x39e7, 0x4208, 0x0000, 0x0841, 0x39e7, + 0x18a2, 0x18a2, 0x39e7, 0x39e7, 0x4208, 0x0000, 0x0841, 0x39e7, 0x39e7, 0x39e7, 0x41e7, 0x4208, 0x4208, 0x39e7, 0x9472, 0x94b3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -1351,7 +1351,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x18c3, 0x39e7, 0x39e7, 0x4208, 0x0000, 0x0841, 0x39e7, + 0x0000, 0x0000, 0x0841, 0x39e7, 0x4208, 0x0000, 0x0841, 0x39e7, 0x39e7, 0x39e7, 0x41e7, 0x4208, 0x4208, 0x4208, 0x8c72, 0x9492, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -1385,13 +1385,13 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb597, 0xb558, 0x4207, 0x4208, 0x4207, 0x4208, 0x4207, 0x4207, 0x4208, 0x0861, 0x0000, 0x7bcf, 0x7bef, 0x39e7, 0x0841, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0841, 0x3186, 0x39c7, 0x39e7, 0x0000, 0x0841, 0x39e7, + 0x0841, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x1081, 0x0000, 0x0841, 0x39c7, 0x39e7, 0x0000, 0x0841, 0x39e7, 0x39e7, 0x39e7, 0x41e7, 0x4207, 0x4208, 0x4208, 0x8c72, 0x9492, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -1424,19 +1424,19 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbd97, 0xb558, 0x4208, 0x4208, 0x41e7, 0x4208, 0x4207, 0x4207, - 0x4208, 0x0861, 0x0000, 0x7bef, 0x7bcf, 0x4a49, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4208, 0x4228, 0x0000, 0x0841, 0x39e7, + 0x4208, 0x0861, 0x0000, 0x7bef, 0x7bcf, 0x4a49, 0x0000, 0x0841, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x1081, 0x0000, 0x4208, 0x4228, 0x0000, 0x0841, 0x39e7, 0x39e7, 0x39e7, 0x4207, 0x4208, 0x4208, 0x4208, 0x8c72, 0x9492, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6065, + 0x6065, 0x6065, 0x6065, 0x6065, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -1464,19 +1464,19 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbd97, 0xb557, 0x4207, 0x4208, 0x4207, 0x4208, 0x4207, 0x4208, - 0x4208, 0x0861, 0x0000, 0x7bef, 0x7bcf, 0x4208, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0x4a49, 0x4228, 0x0000, 0x0841, 0x39e7, + 0x4208, 0x0861, 0x0000, 0x7bef, 0x7bcf, 0x4208, 0x0000, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x0020, 0x4a49, 0x4228, 0x0000, 0x0841, 0x39e7, 0x41e7, 0x39e7, 0x41e7, 0x4208, 0x4208, 0x4208, 0x8c52, 0x9492, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf892, 0xf8b0, - 0xf0b0, 0xf0b0, 0xf0b0, 0xf0d0, 0xf151, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf0d0, 0xf8b0, + 0xf0b0, 0xf0b0, 0xf0b0, 0xf0d0, 0xf0d0, 0x6065, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -1504,19 +1504,19 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbd97, 0xb557, 0x4207, 0x4207, 0x4207, 0x4208, 0x4208, 0x4208, - 0x4208, 0x0861, 0x0000, 0x7bef, 0x7bce, 0x4208, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0x4a49, 0x4228, 0x0000, 0x0020, 0x39e7, + 0x4208, 0x0861, 0x0000, 0x7bef, 0x7bce, 0x4208, 0x0000, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x0020, 0x4a49, 0x4228, 0x0000, 0x0020, 0x39e7, 0x39e7, 0x41e7, 0x41e7, 0x41e7, 0x4208, 0x4208, 0x8c52, 0x9492, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf912, 0xf0d0, - 0xf0d0, 0xf0d0, 0xf0d0, 0xf111, 0xf151, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x6065, 0xf0d0, 0xf912, 0xf0d0, + 0xf0d0, 0xf0d0, 0xf0d0, 0xf111, 0xf151, 0xf0d0, 0x6065, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -1544,19 +1544,19 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbd97, 0xb557, 0x41e7, 0x41e7, 0x4207, 0x41e7, 0x4207, 0x4208, - 0x4208, 0x0861, 0x0000, 0x7bcf, 0x7bce, 0x4228, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4a29, 0x4228, 0x0000, 0x0020, 0x39e7, + 0x4208, 0x0861, 0x0000, 0x7bcf, 0x7bce, 0x4228, 0x0000, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, + 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, + 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, + 0x3412, 0x3412, 0x0000, 0x4a29, 0x4228, 0x0000, 0x0020, 0x39e7, 0x41e7, 0x41e7, 0x41e7, 0x4207, 0x4208, 0x4207, 0x8c72, 0x9492, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0800, 0x6065, 0xf86f, 0xf890, 0xf8b0, - 0xf8f0, 0xf0f0, 0xf0f0, 0xf911, 0xf911, 0xf06d, 0xf86d, 0x0800, + 0x0000, 0x0000, 0x0000, 0x6065, 0xf0d0, 0xf86f, 0xf890, 0xf8b0, + 0xf8f0, 0xf0f0, 0xf0f0, 0xf911, 0xf911, 0xf06d, 0xf86d, 0x6065, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -1584,14 +1584,14 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb597, 0xb557, 0x41e7, 0x4207, 0x41e7, 0x41e7, 0x4207, 0x4207, - 0x4208, 0x0861, 0x0000, 0x7bef, 0x7bcf, 0x4a48, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4a28, 0x4a49, 0x0000, 0x0841, 0x39e7, + 0x4208, 0x0861, 0x0000, 0x7bef, 0x7bcf, 0x4a48, 0x0000, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, + 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, + 0x3432, 0x3432, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, + 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, + 0x3412, 0x3412, 0x3412, 0x3412, 0x33f2, 0x33f2, 0x33f2, 0x33f2, + 0x33f2, 0x3bf2, 0x0000, 0x4a28, 0x4a49, 0x0000, 0x0841, 0x39e7, 0x41e7, 0x39e7, 0x41e7, 0x4207, 0x4207, 0x4208, 0x8c72, 0x94b2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -1624,18 +1624,18 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb597, 0xb577, 0x41e7, 0x41e7, 0x39e7, 0x4207, 0x41e7, 0x41e8, - 0x4208, 0x0861, 0x0000, 0x7bef, 0x7bae, 0x4a28, 0x0000, 0x0000, - 0x0000, 0x0041, 0x06fd, 0x071f, 0x073f, 0x075f, 0x077f, 0x073f, - 0x0413, 0x0000, 0x0000, 0x01c8, 0x06df, 0x071f, 0x075f, 0x075f, - 0x075f, 0x075f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x073f, - 0x073f, 0x073f, 0x06df, 0x06de, 0x06df, 0x077f, 0x0000, 0x0000, - 0x0000, 0xf8f3, 0xf953, 0xf954, 0xf973, 0xf955, 0x0000, 0x0000, - 0x0000, 0x0000, 0xf913, 0xf914, 0xf934, 0xf973, 0xf935, 0x0000, - 0x0000, 0x0000, 0x0000, 0x4a48, 0x4a69, 0x0000, 0x0841, 0x39e7, + 0x4208, 0x0861, 0x0000, 0x7bef, 0x7bae, 0x4a28, 0x0000, 0x3412, + 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, + 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, 0x3412, + 0x3412, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0xef5d, 0xef5d, 0xef5d, + 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, + 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, + 0x3bf2, 0x3bf2, 0x0000, 0x4a48, 0x4a69, 0x0000, 0x0841, 0x39e7, 0x39e7, 0x39e7, 0x41e7, 0x4207, 0x4208, 0x4207, 0x8c72, 0x94b3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0800, 0xf0f0, 0xf111, 0xfc98, 0xffff, 0xffdf, + 0x0000, 0x0000, 0x6065, 0xf0f0, 0xf111, 0xfc98, 0xffff, 0xffdf, 0xffbf, 0xfbb8, 0xf2b5, 0xf8f1, 0xf8f1, 0xf8f1, 0xf911, 0xb0a9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -1664,20 +1664,20 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbdb7, 0xb578, 0x41e7, 0x39e7, 0x39e7, 0x4207, 0x4208, 0x41e7, - 0x4208, 0x0861, 0x0000, 0x7bcf, 0x73ae, 0x4a28, 0x0000, 0x0000, - 0x0000, 0x0041, 0x067d, 0x069e, 0x069f, 0x06bf, 0x06bf, 0x069e, - 0x067f, 0x0000, 0x0000, 0x01a8, 0x067e, 0x067e, 0x069e, 0x06bf, - 0x06bf, 0x067e, 0x0454, 0x036f, 0x0000, 0x0020, 0x0000, 0x067f, - 0x067e, 0x067e, 0x067e, 0x067f, 0x065e, 0x06de, 0x0000, 0x0000, - 0xe110, 0xf8d2, 0xf932, 0xf132, 0xf8f2, 0xf8d2, 0x70c7, 0x0000, - 0x0000, 0x7087, 0xf0d1, 0xf112, 0xf132, 0xf8d1, 0xf8f2, 0x0000, - 0x0000, 0x0000, 0x0020, 0x4a49, 0x4a69, 0x0000, 0x0841, 0x39e7, + 0x4208, 0x0861, 0x0000, 0x7bcf, 0x73ae, 0x4a28, 0x0000, 0x33b1, + 0x3bf2, 0x33b1, 0x3bf2, 0x33b1, 0x3bf2, 0x33b1, 0x3bf2, 0x33b1, + 0x3bf2, 0x33b1, 0x3bf2, 0x33b1, 0x3bf2, 0x33b1, 0x3bf2, 0x33b1, + 0x3bf2, 0xef5d, 0xef5d, 0x3432, 0x3432, 0x3432, 0xef5d, 0xef5d, + 0xef5d, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0xef5d, 0xef5d, + 0x3bd2, 0x3391, 0x3bd2, 0x3391, 0x3bd2, 0x3391, 0x3bd2, 0x3391, + 0x3bd2, 0x3391, 0x3bd2, 0x3391, 0x3bd2, 0x3391, 0x3bd2, 0x3391, + 0x3bd2, 0x3391, 0x0020, 0x4a49, 0x4a69, 0x0000, 0x0841, 0x39e7, 0x39e7, 0x39e7, 0x41e7, 0x41e7, 0x4208, 0x4207, 0x9472, 0x94b3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2021, 0xf930, 0xf152, 0xffdf, 0xffff, 0xffff, + 0x0000, 0x0000, 0x6065, 0xf930, 0xf152, 0xffdf, 0xffff, 0xffff, 0xffbf, 0xf8b0, 0xf0f1, 0xf911, 0xf8f1, 0xf911, 0xf911, 0x8867, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x6065, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -1704,14 +1704,14 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbdb7, 0xbd98, 0x4208, 0x39e7, 0x41e7, 0x41e7, 0x41e7, 0x41e7, - 0x4207, 0x0861, 0x0000, 0x7bcf, 0x73ae, 0x4a49, 0x0000, 0x0000, - 0x0000, 0x0041, 0x0e9e, 0x06bf, 0x030e, 0x0000, 0x0000, 0x071f, - 0x065e, 0x073f, 0x0020, 0x01a8, 0x069f, 0x06ff, 0x0000, 0x0000, - 0x0000, 0x063d, 0x067e, 0x06de, 0x0020, 0x0041, 0x069f, 0x069f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x98ca, 0xf8f2, 0xf112, 0x0800, - 0x0800, 0xe950, 0xf952, 0x0000, 0x0000, 0xf952, 0xf912, 0xf133, - 0x0821, 0x0000, 0x0000, 0x4a28, 0x4a49, 0x0000, 0x0841, 0x39e7, + 0x4207, 0x0861, 0x0000, 0x7bcf, 0x73ae, 0x4a49, 0x0000, 0x3bf2, + 0x33b1, 0x3bf2, 0x33b1, 0x3bf2, 0x3391, 0x3bd2, 0x3391, 0x3bd2, + 0x3391, 0x3bd2, 0x3391, 0x3bd2, 0x3391, 0x3bd2, 0x3391, 0x3bd2, + 0x3391, 0xef5d, 0xef5d, 0x3432, 0x3432, 0x3432, 0x3432, 0xef5d, + 0xef5d, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0xef5d, 0xef5d, + 0x3b90, 0x43d1, 0x3b90, 0x43d1, 0x3b90, 0x43d1, 0x3b90, 0x43d1, + 0x3b90, 0x43d1, 0x3b90, 0x43d1, 0x3b90, 0x43b1, 0x3b70, 0x43b1, + 0x3b70, 0x43b1, 0x0000, 0x4a28, 0x4a49, 0x0000, 0x0841, 0x39e7, 0x41e7, 0x41e7, 0x41e7, 0x4207, 0x4208, 0x4208, 0x9473, 0x9cb3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -1744,14 +1744,14 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbdb7, 0xb578, 0x4208, 0x41e7, 0x41e7, 0x4207, 0x41e7, 0x41e7, - 0x4208, 0x0861, 0x0000, 0x7bcf, 0x73ae, 0x4a28, 0x0000, 0x0000, - 0x0000, 0x0041, 0x0e9e, 0x0e9f, 0x0350, 0x0000, 0x0000, 0x077f, - 0x067f, 0x075f, 0x0021, 0x01c8, 0x067f, 0x069e, 0x0020, 0x0000, - 0x0000, 0x063e, 0x069f, 0x071f, 0x0020, 0x0041, 0x069f, 0x0ebf, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x98ca, 0xf932, 0xf152, 0x0820, - 0x0020, 0x2803, 0x3004, 0x0000, 0x0000, 0xf932, 0xf932, 0xf132, - 0x0800, 0x0000, 0x0000, 0x4a28, 0x4a49, 0x0000, 0x0841, 0x41e7, + 0x4208, 0x0861, 0x0000, 0x7bcf, 0x73ae, 0x4a28, 0x0000, 0x3b91, + 0x43d2, 0x3b90, 0x43d1, 0x3b90, 0x43d1, 0x3b90, 0x43d1, 0x3b90, + 0x43d1, 0x3b90, 0x43d1, 0x3b90, 0x43d1, 0x3b90, 0x43d1, 0x3b90, + 0x43d1, 0xef5d, 0xef5d, 0x3432, 0x3432, 0x3432, 0x3432, 0xef5d, + 0xef5d, 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0xef5d, 0xef5d, + 0x43b1, 0x3b70, 0x43b1, 0x3b70, 0x43b1, 0x3b70, 0x43b1, 0x3b70, + 0x43b1, 0x3b70, 0x43b1, 0x3b70, 0x43b1, 0x3b70, 0x43b1, 0x3b70, + 0x43b1, 0x3b70, 0x0000, 0x4a28, 0x4a49, 0x0000, 0x0841, 0x41e7, 0x41e7, 0x39e7, 0x41e7, 0x4207, 0x4208, 0x4208, 0x9473, 0x9cb3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -1784,14 +1784,14 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc5d8, 0xb558, 0x39e7, 0x41e7, 0x41e7, 0x41e8, 0x4207, 0x4208, - 0x4208, 0x0861, 0x0000, 0x7bce, 0x738e, 0x4228, 0x0000, 0x0000, - 0x0000, 0x0041, 0x069e, 0x067e, 0x02ee, 0x0041, 0x0041, 0x079f, - 0x069f, 0x077f, 0x0021, 0x01c8, 0x069f, 0x065d, 0x0082, 0x0021, - 0x0041, 0x0e5e, 0x069f, 0x06ff, 0x0020, 0x0041, 0x065e, 0x067e, - 0x0020, 0x0000, 0x0021, 0x0021, 0x0020, 0x0020, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xa0cb, 0xf8f1, 0xe971, 0x0821, - 0x0020, 0x0000, 0x0020, 0x0000, 0x1001, 0xf8f2, 0xf912, 0xf112, - 0x0000, 0x0000, 0x0000, 0x4a49, 0x4a49, 0x0000, 0x0841, 0x41e7, + 0x4208, 0x0861, 0x0000, 0x7bce, 0x738e, 0x4228, 0x0000, 0x43b1, + 0x3b70, 0x43b1, 0x3b70, 0x43b1, 0x3b70, 0x43b1, 0x3b70, 0x43b1, + 0x3b70, 0x43b1, 0x3b70, 0x43b1, 0x3b70, 0x43b1, 0x3b70, 0x43b1, + 0x3b70, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0xef5d, 0xef5d, 0xef5d, + 0x4350, 0x4b91, 0x4350, 0x4b91, 0x4350, 0x4b91, 0x4350, 0x4b91, + 0x4350, 0x4b91, 0x4350, 0x4b91, 0x4350, 0x4b91, 0x4350, 0x4b91, + 0x4350, 0x4b91, 0x0000, 0x4a49, 0x4a49, 0x0000, 0x0841, 0x41e7, 0x39e7, 0x39e7, 0x41e7, 0x41e7, 0x41e7, 0x39e7, 0x9473, 0x9cd4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -1824,14 +1824,14 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbdb8, 0xbd78, 0x39e7, 0x39e7, 0x39e7, 0x41e7, 0x41e7, 0x4208, - 0x4207, 0x0861, 0x0000, 0x73ae, 0x738e, 0x4a49, 0x0000, 0x0000, - 0x0000, 0x0041, 0x069e, 0x067e, 0x06bf, 0x073f, 0x075f, 0x067f, - 0x067f, 0x075f, 0x0021, 0x0188, 0x065e, 0x067e, 0x06fe, 0x06de, - 0x06df, 0x067f, 0x0f1f, 0x073f, 0x0020, 0x0061, 0x063d, 0x063d, - 0x0020, 0x0000, 0x063e, 0x05bd, 0x0d9e, 0x063e, 0x0020, 0x0000, - 0x0000, 0xf0f1, 0xf0b1, 0xf8d1, 0xf8f1, 0xf953, 0x0800, 0x0000, - 0x0000, 0x0000, 0x0000, 0xe9d2, 0xf973, 0xf8d2, 0xf912, 0x0000, - 0x0000, 0x0000, 0x0020, 0x4228, 0x4a49, 0x0000, 0x0821, 0x39e7, + 0x4207, 0x0861, 0x0000, 0x73ae, 0x738e, 0x4a49, 0x0000, 0x3b70, + 0x3b70, 0x3b70, 0x4370, 0x4370, 0x4370, 0x4350, 0x4350, 0x4350, + 0x4350, 0x4350, 0x4350, 0x4350, 0x4350, 0x4350, 0x4350, 0x4350, + 0x4350, 0xef5d, 0xef5d, 0x3432, 0x4350, 0xef5d, 0xef5d, 0x3432, + 0x3432, 0x3432, 0x3432, 0x3432, 0x3432, 0xef5d, 0xef5d, 0xef5d, + 0x4350, 0x4350, 0x4350, 0x4350, 0x4350, 0x4350, 0x4350, 0x4350, + 0x4350, 0x4350, 0x4350, 0x4350, 0x4350, 0x4350, 0x4330, 0x4330, + 0x4330, 0x4330, 0x0020, 0x4228, 0x4a49, 0x0000, 0x0821, 0x39e7, 0x39e7, 0x39e7, 0x41e7, 0x41e7, 0x39e7, 0x39e7, 0x9473, 0x9cb4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -1859,19 +1859,19 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a49, - 0x5289, 0x52aa, 0x528a, 0x5acb, 0x5acb, 0x39c7, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x632d, 0x83d1, 0x2965, 0x2945, 0x2945, 0x39e7, 0x39e7, 0x39e7, - 0x39e7, 0x0861, 0x0000, 0x7bae, 0x738d, 0x4a28, 0x0000, 0x0000, - 0x0000, 0x0041, 0x069e, 0x06bf, 0x069f, 0x069f, 0x065e, 0x063e, - 0x063d, 0x0477, 0x0020, 0x01c9, 0x067f, 0x067e, 0x065e, 0x065e, - 0x065e, 0x063e, 0x0000, 0x0020, 0x0020, 0x0062, 0x065f, 0x065e, - 0x0020, 0x0020, 0x061f, 0x059e, 0x057f, 0x05ff, 0x0000, 0x0000, - 0x0000, 0xf8f2, 0xf111, 0xf152, 0xf932, 0xf952, 0x7087, 0x0000, - 0x0000, 0x0000, 0x4024, 0xf152, 0xf953, 0xf112, 0xb0ac, 0x0000, - 0x0000, 0x0000, 0x0020, 0x4208, 0x4228, 0x0000, 0x0021, 0x39e7, + 0x39e7, 0x0861, 0x0000, 0x7bae, 0x738d, 0x4a28, 0x0000, 0x4350, + 0x4350, 0x4350, 0x4350, 0x4350, 0x4350, 0x4350, 0x4350, 0x4350, + 0x4350, 0x4350, 0x4350, 0x4350, 0x4350, 0x4350, 0x4350, 0x4350, + 0x4350, 0xef5d, 0xef5d, 0x3432, 0x3432, 0xef5d, 0xef5d, 0x4350, + 0x3432, 0x3432, 0x3432, 0x3432, 0xef5d, 0xef5d, 0x3432, 0xef5d, + 0x4b30, 0x4b30, 0x4b30, 0x4b30, 0x4b30, 0x4b30, 0x4b30, 0x4b30, + 0x4b30, 0x4b30, 0x4b30, 0x4b30, 0x4b30, 0x4b30, 0x4b30, 0x4b30, + 0x4b30, 0x4b30, 0x0020, 0x4208, 0x4228, 0x0000, 0x0021, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x3186, 0x3186, 0x3186, 0x736f, 0x73af, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -1899,19 +1899,19 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0xffff, - 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xb5b6, 0x0861, 0x0020, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, + 0x0000, 0xffdf, 0xffff, 0xffff, 0xffff, 0xb5b6, 0x0861, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x39e7, 0x39e7, 0x39e7, - 0x39e7, 0x0861, 0x0000, 0x73ae, 0x6b6d, 0x4228, 0x0000, 0x0000, - 0x0000, 0x0061, 0x0e9e, 0x06bf, 0x06ff, 0x069f, 0x065e, 0x061d, - 0x0000, 0x0000, 0x0000, 0x01c9, 0x069f, 0x06bf, 0x05bc, 0x059b, - 0x055b, 0x05bd, 0x0396, 0x0354, 0x0020, 0x0061, 0x067f, 0x0e7f, - 0x0041, 0x0820, 0x0000, 0x041b, 0x053e, 0x059e, 0x0000, 0x0000, - 0x0000, 0x0801, 0x0800, 0x1001, 0x98ca, 0xf912, 0xf0d1, 0x0000, - 0x0000, 0x1001, 0xf0f2, 0xf932, 0xf952, 0x2003, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0841, 0x4228, 0x4228, 0x0000, 0x0821, 0x39e7, + 0x39e7, 0x0861, 0x0000, 0x73ae, 0x6b6d, 0x4228, 0x0000, 0x4330, + 0x4330, 0x4330, 0x4330, 0x4330, 0x4330, 0x4b30, 0x4b30, 0x4b30, + 0x4b30, 0x4b30, 0x4b30, 0x4b30, 0x4b30, 0x4b30, 0x4b30, 0x4b30, + 0x4b30, 0xef5d, 0xef5d, 0x3432, 0x3432, 0x4350, 0xef5d, 0xef5d, + 0x3432, 0x3432, 0x3432, 0x3432, 0xef5d, 0xef5d, 0x3432, 0xef5d, + 0x4b2f, 0x4b0f, 0x4b0f, 0x4b0f, 0x4b0f, 0x4b0f, 0x4b0f, 0x4b0f, + 0x4b0f, 0x4b0f, 0x4b0f, 0x4b0f, 0x4b0f, 0x4b0f, 0x4b0f, 0x4b0f, + 0x4b0f, 0x4b0f, 0x0841, 0x4228, 0x4228, 0x0000, 0x0821, 0x39e7, 0x39e7, 0x39e7, 0x39c7, 0x0000, 0x0841, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -1939,19 +1939,19 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0040, 0xffff, 0xffdf, 0xffdf, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffdf, 0xf7be, 0xf79e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa514, 0x9493, 0x738e, 0x4208, 0x4208, 0x4208, 0x41e7, 0x39e7, - 0x39e7, 0x0861, 0x0000, 0x738e, 0x6b4d, 0x4a49, 0x0000, 0x0000, - 0x0000, 0x0041, 0x063d, 0x0e3e, 0x0371, 0x0020, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x01a8, 0x065f, 0x0e9f, 0x0021, 0x0000, - 0x0000, 0x0dbe, 0x059e, 0x05de, 0x0020, 0x0021, 0x061e, 0x061e, - 0x0020, 0x0000, 0x0000, 0x041a, 0x051f, 0x057e, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0800, 0x90ca, 0xf0d1, 0xf0b1, 0x0000, - 0x0000, 0xf0b1, 0xf0b1, 0xf8f1, 0x0800, 0x0800, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0841, 0x4228, 0x4a28, 0x0000, 0x0841, 0x39e7, + 0x39e7, 0x0861, 0x0000, 0x738e, 0x6b4d, 0x4a49, 0x0000, 0x4b30, + 0x4b30, 0x4b30, 0x4b30, 0x4b2f, 0x4b2f, 0x4b2f, 0x4b0f, 0x4b0f, + 0x4b0f, 0x4b0f, 0x4b0f, 0x4b0f, 0x4b0f, 0x4b0f, 0x4b0f, 0x4b0f, + 0x4b0f, 0xef5d, 0xef5d, 0x3432, 0x3432, 0x3432, 0xef5d, 0xef5d, + 0xef5d, 0x4350, 0x3432, 0xef5d, 0xef5d, 0x3432, 0x3432, 0xef5d, + 0x4b0f, 0x4b0f, 0x4b0f, 0x530f, 0x530f, 0x530f, 0x530f, 0x530f, + 0x530f, 0x530f, 0x530f, 0x530f, 0x530f, 0x530f, 0x530f, 0x52ef, + 0x52ef, 0x52ef, 0x0841, 0x4228, 0x4a28, 0x0000, 0x0841, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x39c7, 0x39a6, 0x8c12, 0x9452, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -1979,19 +1979,19 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffdf, 0xf79e, 0xffdf, 0xffdf, 0xf7bf, 0xffff, 0xf7be, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffdf, 0x0000, 0x0020, 0x0861, 0xffff, 0xffff, 0xf7be, + 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa4f4, 0x9c93, 0x736d, 0x41e8, 0x4208, 0x4208, 0x39e7, 0x3a07, - 0x4208, 0x0861, 0x0000, 0x738e, 0x6b4d, 0x4a49, 0x0000, 0x0000, - 0x0000, 0x0021, 0x05fd, 0x05fe, 0x0351, 0x0020, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x01a8, 0x061e, 0x067e, 0x0021, 0x0000, - 0x0000, 0x057e, 0x059e, 0x05de, 0x0020, 0x0021, 0x059e, 0x05df, - 0x01c8, 0x0187, 0x0168, 0x043b, 0x0cff, 0x057f, 0x0000, 0x0000, - 0x3023, 0x3824, 0x4045, 0x3844, 0xa0ac, 0xf8d2, 0xf0f1, 0x0800, - 0x0800, 0xf0d1, 0xf0d1, 0xf932, 0x2022, 0x3844, 0x4065, 0x3803, - 0x0000, 0x0000, 0x0861, 0x4a28, 0x4a28, 0x0000, 0x0841, 0x41e7, + 0x4208, 0x0861, 0x0000, 0x738e, 0x6b4d, 0x4a49, 0x0000, 0x42ce, + 0x4b0f, 0x42ce, 0x4b0f, 0x4ace, 0x4b0f, 0x4ace, 0x4b0f, 0x4ace, + 0x530f, 0x4ace, 0x530f, 0x4ace, 0x530f, 0x4ace, 0x530f, 0x4ace, + 0x530f, 0xef5d, 0xef5d, 0xef5d, 0x3432, 0x3432, 0x3432, 0xef5d, + 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0x3432, 0x3432, 0xef5d, 0xef5d, + 0x52ef, 0x4aae, 0x52ef, 0x4aae, 0x52ef, 0x4aae, 0x52ef, 0x4aae, + 0x52ef, 0x4aae, 0x52ef, 0x4aae, 0x52ef, 0x4aae, 0x52ef, 0x4aae, + 0x52ef, 0x4aae, 0x0861, 0x5a8a, 0x4a28, 0x0000, 0x0841, 0x41e7, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x39c7, 0x39c7, 0x8c12, 0x9493, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2018,20 +2018,20 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, - 0x0841, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffdf, 0xffdf, - 0xffff, 0x2124, 0x0020, 0x0000, 0x0020, 0x1082, 0xa514, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, + 0x0841, 0x0000, 0x0000, 0xffdf, 0xffff, 0xffff, 0xffdf, 0xffdf, + 0xef9d, 0x0021, 0x0000, 0x0000, 0x0000, 0x0861, 0xffff, 0xffff, 0xffdf, 0xffff, 0xf7be, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9cb3, 0x94b3, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x39e7, - 0x3a07, 0x0861, 0x0000, 0x738e, 0x6b6d, 0x4a28, 0x0000, 0x0000, - 0x0000, 0x0041, 0x05de, 0x05de, 0x0331, 0x0020, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x01c9, 0x061f, 0x063e, 0x0021, 0x0000, - 0x0000, 0x053e, 0x059f, 0x061f, 0x0020, 0x0020, 0x00a7, 0x0cdf, - 0x04bf, 0x049e, 0x049e, 0x04bf, 0x04df, 0x057f, 0x0021, 0x0000, - 0xf111, 0xf0f1, 0xf0d1, 0xf0d2, 0xf0f1, 0xf912, 0x9029, 0x0820, - 0x0801, 0xf131, 0xf911, 0xf8f1, 0xf0d1, 0xf0f2, 0xf112, 0xf112, - 0x0800, 0x0020, 0x1082, 0x4a49, 0x4a49, 0x0000, 0x0841, 0x39e7, + 0x3a07, 0x0861, 0x0000, 0x738e, 0x6b6d, 0x4a28, 0x0000, 0x52ef, + 0x4ace, 0x52ef, 0x4aae, 0x52ef, 0x4aae, 0x52ef, 0x4aae, 0x52ef, + 0x4aae, 0x52ef, 0x4aae, 0x52ef, 0x4aae, 0x52ef, 0x4aae, 0x52ef, + 0x4aae, 0xef5d, 0xef5d, 0xef5d, 0x3432, 0x3432, 0x3432, 0x4350, + 0x3432, 0xef5d, 0xef5d, 0x3432, 0x3432, 0x3432, 0xef5d, 0xef5d, + 0x4aae, 0x52ef, 0x52ae, 0x52cf, 0x52ae, 0x52cf, 0x52ae, 0x5acf, + 0x52ae, 0x5acf, 0x528e, 0x5acf, 0x528e, 0x5acf, 0x528e, 0x5acf, + 0x528e, 0x5acf, 0x1082, 0x52aa, 0x4a49, 0x0000, 0x0841, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x39c7, 0x39c7, 0x39e7, 0x9473, 0x9c93, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2058,20 +2058,20 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xf7be, 0xffdf, - 0xffdf, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffdf, 0xffff, 0xffff, - 0xffff, 0xf79e, 0x0861, 0x0000, 0x0000, 0x18c3, 0xdeda, 0xffbf, - 0xffdf, 0xffff, 0xffff, 0xffdf, 0xf7be, 0xf7be, 0x0020, 0x0020, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffdf, 0xffff, 0xffff, + 0xf7be, 0x738d, 0x0000, 0x0000, 0x0020, 0x7bef, 0xffff, 0xffbf, + 0xffdf, 0xffff, 0xffff, 0xffdf, 0xf7be, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0841, 0x0000, 0x39c7, 0x39e7, 0x39e7, - 0x39e7, 0x0861, 0x0000, 0x738e, 0x6b4d, 0x4228, 0x0000, 0x0000, - 0x0000, 0x0041, 0x061f, 0x053e, 0x02d0, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x01ea, 0x063f, 0x063e, 0x0020, 0x0000, - 0x0000, 0x053e, 0x053f, 0x057f, 0x0020, 0x0000, 0x0020, 0x04df, - 0x04df, 0x04be, 0x049e, 0x049f, 0x04bf, 0x053f, 0x0000, 0x0000, - 0x3002, 0xf952, 0xf132, 0xe932, 0xf132, 0xc0ac, 0x0000, 0x0000, - 0x0800, 0xf131, 0xf932, 0xf932, 0xf131, 0xe952, 0xf152, 0xf953, - 0x0000, 0x0000, 0x0841, 0x4228, 0x4a49, 0x0000, 0x0841, 0x39e7, + 0x39e7, 0x0861, 0x0000, 0x738e, 0x6b4d, 0x4228, 0x0000, 0x4aae, + 0x52ef, 0x4aae, 0x52ef, 0x4aae, 0x52ef, 0x4aae, 0x52ef, 0x52ae, + 0x52cf, 0x52ae, 0x52cf, 0x52ae, 0x5acf, 0x52ae, 0x5acf, 0x528e, + 0x5acf, 0x5acf, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, + 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0x5acf, + 0x5acf, 0x528e, 0x5acf, 0x528e, 0x5acf, 0x528e, 0x5acf, 0x528e, + 0x5acf, 0x528e, 0x5acf, 0x528e, 0x5acf, 0x528e, 0x5acf, 0x528e, + 0x5aaf, 0x528e, 0x0841, 0x52aa, 0x4a49, 0x0000, 0x0841, 0x39e7, 0x39e7, 0x39e7, 0x39c7, 0x0000, 0x0861, 0x0820, 0x0841, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2098,20 +2098,20 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1061, 0x1082, 0x1081, 0xffdf, 0xffff, - 0xffff, 0xffff, 0xf79e, 0xa534, 0x94b2, 0x7bce, 0xffdf, 0xffff, - 0xffff, 0xffdf, 0x8410, 0x9492, 0x94d2, 0xf7de, 0xffdf, 0xffff, + 0x0000, 0x0000, 0x0000, 0x1061, 0x1082, 0x0000, 0x0000, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x4a69, 0x4a69, 0x4a69, 0xffff, 0xffff, 0xffff, 0xf7be, 0xf79e, 0xffff, 0xffff, 0xffdf, 0xffff, 0x4a69, 0x39e7, 0x1082, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4228, 0x4a49, 0x3186, 0x2104, 0x18e3, 0x39e7, 0x39e7, 0x39e7, - 0x39e7, 0x0861, 0x0000, 0x738e, 0x6b4d, 0x4228, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0020, 0x0021, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0x4208, 0x4a49, 0x0000, 0x0841, 0x39e7, + 0x39e7, 0x0861, 0x0000, 0x738e, 0x6b4d, 0x4228, 0x0000, 0x528e, + 0x528e, 0x528e, 0x528e, 0x528e, 0x528e, 0x528e, 0x528e, 0x528e, + 0x528e, 0x528e, 0x528e, 0x528e, 0x528e, 0x528e, 0x528e, 0x528e, + 0x528e, 0x528e, 0x528e, 0x528e, 0x528e, 0x528e, 0x528e, 0x528e, + 0x528e, 0x528e, 0x528e, 0x528e, 0x528e, 0x526e, 0x526e, 0x526e, + 0x526e, 0x526e, 0x526e, 0x526e, 0x5a6e, 0x5a6e, 0x5a6e, 0x5a6e, + 0x5a6e, 0x5a6e, 0x5a6e, 0x5a6e, 0x5a6e, 0x5a6d, 0x5a6d, 0x5a6d, + 0x5a6d, 0x5a6d, 0x0020, 0x4208, 0x4a49, 0x0000, 0x0841, 0x39e7, 0x39e7, 0x39e7, 0x39c7, 0x2965, 0x31a6, 0x3185, 0x52aa, 0x5acb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2138,20 +2138,20 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0021, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffdf, - 0xffdf, 0xf79e, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffff, 0x4228, - 0x0020, 0x0040, 0xce59, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffdf, + 0x0000, 0x0000, 0x0021, 0x0000, 0x0000, 0xffdf, 0xffff, 0xffdf, + 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0x6b2c, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x9cf4, 0x9cd4, 0x6b4d, 0x4a29, 0x4a49, 0x4208, 0x4208, 0x41e7, - 0x4208, 0x0861, 0x0000, 0x738e, 0x6b4c, 0x4228, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0x4208, 0x4a49, 0x0000, 0x0841, 0x4207, + 0x4208, 0x0861, 0x0000, 0x738e, 0x6b4c, 0x4228, 0x0000, 0x528e, + 0x528e, 0x528e, 0x526e, 0x526e, 0x526e, 0x526e, 0x526e, 0x526e, + 0x526e, 0x5a6e, 0x5a6e, 0x5a6e, 0x5a6e, 0x5a6e, 0x5a6e, 0x5a6e, + 0x5a6e, 0x5a6e, 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, + 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, + 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, + 0x5a6d, 0x5a6d, 0x5a6d, 0x5a4d, 0x5a4d, 0x5a4d, 0x5a4d, 0x5a4d, + 0x5a4d, 0x5a4d, 0x0020, 0x4208, 0x4a49, 0x0000, 0x0841, 0x4207, 0x39e7, 0x41e7, 0x4208, 0x4208, 0x41e7, 0x4207, 0x8c72, 0x9492, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2178,20 +2178,20 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0820, 0xffdf, 0xffff, 0xffdf, 0xffff, 0xffff, - 0xffff, 0xf7be, 0x1082, 0x0000, 0x0000, 0x0000, 0x0020, 0xffff, - 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffde, 0xbdf7, 0x0020, - 0x0000, 0x0000, 0x0861, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0xffdf, 0xffff, 0xffdf, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf79e, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x9cf4, 0xa4f4, 0x41e7, 0x41e8, 0x4208, 0x39e7, 0x41e7, 0x41e7, - 0x4208, 0x0861, 0x0000, 0x738e, 0x6b2c, 0x4a49, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0x4208, 0x4228, 0x0000, 0x0841, 0x39e7, + 0x4208, 0x0861, 0x0000, 0x738e, 0x6b2c, 0x4a49, 0x0000, 0x5a6d, + 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, + 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, 0x5a6d, + 0x5a4d, 0x5a4d, 0x5a4d, 0x5a4d, 0x5a4d, 0x5a4d, 0x5a4d, 0x5a4d, + 0x5a4d, 0x5a4d, 0x5a4d, 0x5a4d, 0x5a4d, 0x5a4d, 0x5a4d, 0x5a4d, + 0x5a4d, 0x5a4d, 0x5a4d, 0x5a4d, 0x5a4d, 0x5a4d, 0x5a4d, 0x5a4d, + 0x624d, 0x624d, 0x624d, 0x624d, 0x624d, 0x624d, 0x624d, 0x624d, + 0x624d, 0x624d, 0x0020, 0x4208, 0x4228, 0x0000, 0x0841, 0x39e7, 0x39e7, 0x39e7, 0x39e8, 0x4208, 0x39e7, 0x39c7, 0x8411, 0x8c51, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2218,20 +2218,20 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0020, 0xffff, 0xf79d, 0x0000, 0xd61c, 0xf71f, 0xffff, 0xffff, - 0xffff, 0xffff, 0xf79e, 0x528a, 0x4a69, 0x5aaa, 0xffdf, 0xffff, - 0xffff, 0xf7be, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xdefb, - 0x0000, 0x0000, 0x4228, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, - 0xffdf, 0xffdf, 0x410f, 0x30eb, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0020, 0x73af, 0x73af, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xf7be, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, + 0xffdf, 0xffdf, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x1061, 0x0861, 0x39c7, 0x39e7, 0x39e7, - 0x39e7, 0x0861, 0x0000, 0x738e, 0x6b4d, 0x4a49, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0xffdf, 0xf7be, 0xf7df, 0xffdf, 0xffdf, - 0x0020, 0x0020, 0x0020, 0xef5d, 0xef7d, 0xf7be, 0x0020, 0x0000, - 0x2124, 0xf7be, 0xf79e, 0xef7d, 0xf7be, 0xffdf, 0x0020, 0x0020, - 0x0020, 0xce79, 0xffff, 0xffdf, 0xf7be, 0xef7d, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xfea0, 0x49a0, - 0x0000, 0x0000, 0x0000, 0x0840, 0xf620, 0x5a20, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0841, 0x4208, 0x4228, 0x0000, 0x0841, 0x39e7, + 0x39e7, 0x0861, 0x0000, 0x738e, 0x6b4d, 0x4a49, 0x0000, 0x5a4d, + 0x5a4d, 0x5a4d, 0x628e, 0x6aef, 0x730f, 0x730f, 0x730f, 0x6acf, + 0x628e, 0x626e, 0x628e, 0x6acf, 0x72ef, 0x6acf, 0x628e, 0x626e, + 0x6a8e, 0x6acf, 0x72ef, 0x72ef, 0x72ef, 0x6acf, 0x628e, 0x626e, + 0x6a8e, 0x6acf, 0x72ef, 0x72ef, 0x72ef, 0x6aaf, 0x6a6e, 0x624d, + 0x624d, 0x624d, 0x624d, 0x624d, 0x624d, 0x6a6c, 0x6a6c, 0x6a6c, + 0x624d, 0x622d, 0x622d, 0x622d, 0x6a4c, 0x6a6c, 0x6a4c, 0x622d, + 0x622d, 0x622d, 0x0841, 0x4208, 0x4228, 0x0000, 0x0841, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x18e3, 0x18c3, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2258,20 +2258,20 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0841, 0xffdf, 0xf7be, 0x0000, 0x8bf4, 0x9bd8, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffff, + 0x0841, 0xffdf, 0xb556, 0x0000, 0x73af, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0x0000, 0x0020, 0x0861, 0xffff, 0xffff, 0xffff, 0xffff, - 0xbdf7, 0xb596, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xff9f, - 0xff9f, 0xffdf, 0x4910, 0x410c, 0x0000, 0x0000, 0x0000, 0x0020, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xff9f, + 0xff9f, 0xffdf, 0x73af, 0x73af, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, 0x39c7, 0x39e7, 0x39e7, - 0x4207, 0x0861, 0x0000, 0x6b6d, 0x6b4d, 0x4a49, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0xf7be, 0xffdf, 0xffdf, 0xffff, 0xffff, - 0x10a2, 0x0020, 0x0021, 0xffff, 0xffdf, 0xffff, 0x0841, 0x0020, - 0x3165, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0x0020, 0x0020, - 0x18c3, 0xdedb, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xfea0, 0x51e0, - 0x0020, 0x0000, 0x0000, 0x0820, 0xfe60, 0x6240, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0841, 0x4228, 0x4228, 0x0000, 0x0841, 0x39e7, + 0x4207, 0x0861, 0x0000, 0x6b6d, 0x6b4d, 0x4a49, 0x0000, 0x59ec, + 0x624d, 0x59ec, 0x72cf, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, + 0x72ef, 0x626d, 0x72ae, 0xef5d, 0xef5d, 0xef5d, 0x72ae, 0x624d, + 0x72ef, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0x72ae, 0x624d, + 0x72cf, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0x6a8e, 0x620c, + 0x6a4d, 0x620c, 0x6a4d, 0x620c, 0x6a4d, 0x6a4b, 0xee20, 0x6a4b, + 0x6a4c, 0x61ec, 0x6a2d, 0x61eb, 0x728b, 0xee20, 0x726c, 0x61cc, + 0x6a0d, 0x61cc, 0x0841, 0x4228, 0x4228, 0x0000, 0x0841, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x10a2, 0x10c2, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2298,20 +2298,20 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0841, 0xffdf, 0xffff, 0xffdf, 0x7331, 0x6270, 0x0841, 0x0000, - 0xdefb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xef9d, + 0x0841, 0xffdf, 0xffff, 0xffdf, 0xffff, 0x73af, 0x0841, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xf79e, 0x0021, 0x0000, 0x0000, 0x0000, 0x0861, 0xffff, 0xffff, 0xffff, - 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0x0821, - 0x4230, 0x4af4, 0x5316, 0x5314, 0x0020, 0x0000, 0x0000, 0x0000, + 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0x7bd0, + 0x0821, 0x0821, 0x5316, 0x5314, 0x0020, 0x0000, 0x0000, 0x0000, 0x9cf3, 0x9cd4, 0x4a29, 0x39c7, 0x39e7, 0x41e7, 0x4208, 0x4208, - 0x4208, 0x0861, 0x0000, 0x736d, 0x6b4d, 0x4a69, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0xf7be, 0x6b4d, 0x0020, 0x0020, 0x0000, - 0xffbe, 0x0000, 0x0020, 0x0000, 0xffdf, 0x0841, 0x0020, 0x6b2d, - 0xffdf, 0x0041, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0020, - 0xf79e, 0xc638, 0x0020, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0820, 0xfea0, 0x51e0, - 0x0020, 0x0000, 0x0000, 0x0840, 0xf620, 0x5a40, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0841, 0x4208, 0x4228, 0x0000, 0x0841, 0x39e7, + 0x4208, 0x0861, 0x0000, 0x736d, 0x6b4d, 0x4a69, 0x0000, 0x622d, + 0x59ec, 0x622d, 0x72ae, 0xef5d, 0x8bb1, 0x8bb2, 0x8371, 0x8bb1, + 0xef5d, 0x72cf, 0x6a6d, 0x8330, 0xef5d, 0x8330, 0x6a4d, 0x728e, + 0xef5d, 0x8351, 0x8350, 0x8b91, 0x8330, 0x7aef, 0x6a4d, 0x7aaf, + 0xef5d, 0x8310, 0x72ae, 0x7acf, 0x728e, 0x728e, 0x6a2d, 0x724e, + 0x6a4d, 0x7aaf, 0x726e, 0x728e, 0x6a2c, 0x7a6b, 0xee20, 0x7aab, + 0x6a0b, 0x6a0c, 0x61cb, 0x724c, 0x7a6a, 0xee20, 0x722a, 0x6a0c, + 0x61cb, 0x6a0c, 0x0841, 0x4208, 0x4228, 0x0000, 0x0841, 0x39e7, 0x39e7, 0x41e7, 0x41e7, 0x39e7, 0x39e7, 0x4207, 0x8410, 0x8c51, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2338,20 +2338,20 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0841, 0xffdf, 0xffff, 0xffff, 0xffdf, 0xf7be, 0x0000, 0x20e4, - 0x0861, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xf7be, - 0x736d, 0x0000, 0x0000, 0x0020, 0x7bef, 0xffff, 0xffff, 0xffdf, - 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffbf, 0x5231, 0x20a6, 0x0000, - 0x296a, 0x4af4, 0x52f5, 0x5314, 0x0020, 0x0000, 0x0000, 0x0000, + 0x0841, 0xffdf, 0xffff, 0xffff, 0xffdf, 0xf7be, 0xb556, 0x20e4, + 0x0861, 0xb556, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xf7be, + 0x7b8d, 0x0000, 0x0000, 0x0020, 0x8410, 0xffff, 0xffff, 0xffdf, + 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffbf, 0x7bd0, 0x20a6, 0x0000, + 0x5b15, 0x4af4, 0x52f5, 0x5314, 0x0020, 0x0000, 0x0000, 0x0000, 0x9cf4, 0x9cd4, 0x4228, 0x39e7, 0x4208, 0x4208, 0x4208, 0x4208, - 0x4208, 0x0861, 0x0000, 0x738d, 0x6b6d, 0x4a69, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xf7bf, - 0xffff, 0x0000, 0x0000, 0x0000, 0xffdf, 0x0841, 0x0000, 0x0820, - 0x62ec, 0xffdf, 0xffde, 0xf7be, 0xf79d, 0x0000, 0x0000, 0x0020, - 0xf7be, 0xce79, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, - 0xf7be, 0xf7be, 0xf77e, 0xef5d, 0x0000, 0x0000, 0x0000, 0xff00, - 0xff22, 0x0840, 0x0000, 0xf640, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0820, 0x4208, 0x4228, 0x0000, 0x0841, 0x39e7, + 0x4208, 0x0861, 0x0000, 0x738d, 0x6b6d, 0x4a69, 0x0000, 0x61cc, + 0x6a0d, 0x61cc, 0x7aef, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, + 0xef5d, 0x728e, 0x726e, 0x72ae, 0xef5d, 0x7aae, 0x724e, 0x6a0c, + 0x7aaf, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0x7aae, 0x7a8e, 0x7a8e, + 0xef5d, 0x7aae, 0x726e, 0x69ec, 0x722d, 0x69ec, 0x722d, 0x6a0d, + 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0x7a6d, 0x720b, 0x828b, 0xee20, + 0x7a6b, 0x69eb, 0x722c, 0x722a, 0xee20, 0x7a6a, 0x7a2c, 0x61ab, + 0x71ec, 0x69ab, 0x0820, 0x4208, 0x4228, 0x0000, 0x0841, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x41e7, 0x39e7, 0x41e7, 0x8431, 0x9492, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2379,19 +2379,19 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xf7df, 0xffbf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffdf, 0x0020, 0x0020, 0x0000, 0xf7be, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffdf, 0x73cf, 0x0020, 0x7bd0, 0xffdf, 0xffff, 0xffff, 0xffff, + 0xffff, 0x4a89, 0x4a89, 0x4a89, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xf7bf, 0x0021, 0x0821, 0x0000, 0x4ad4, 0x52f5, 0x52f4, 0x52f4, 0x52f5, 0x5314, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0841, 0x0861, 0x4228, 0x4208, 0x4207, - 0x4207, 0x0861, 0x0000, 0x738e, 0x6b6d, 0x4a69, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0xf7be, 0x6b4d, 0x1082, 0x10a2, 0xf79e, - 0x0000, 0x0000, 0x0000, 0x0000, 0xffdf, 0x0861, 0x0000, 0x0000, - 0x0040, 0x0841, 0x0841, 0x0020, 0x0861, 0xef5d, 0x0000, 0x0020, - 0xf79e, 0xc618, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x7280, - 0xee21, 0x0820, 0x1060, 0xf6a2, 0x1060, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0841, 0x4228, 0x4228, 0x0000, 0x0841, 0x39e7, + 0x4207, 0x0861, 0x0000, 0x738e, 0x6b6d, 0x4a69, 0x0000, 0x6a0c, + 0x61ab, 0x6a0c, 0x7a8e, 0xef5d, 0x830f, 0x82ef, 0x82ef, 0xef5d, + 0x830f, 0x7a8e, 0x722d, 0x82cf, 0xef5d, 0x82cf, 0x6a0c, 0x722d, + 0x722d, 0x82af, 0x7aae, 0x82ef, 0x82cf, 0xef5d, 0x7a6e, 0x82cf, + 0xef5d, 0x82cf, 0x720c, 0x722d, 0x69cc, 0x720d, 0x69cc, 0x722d, + 0x722d, 0x828e, 0x7a4d, 0x7a6e, 0x71ec, 0x720c, 0x7a2a, 0xee20, + 0x7a49, 0x7a4b, 0x720a, 0x828a, 0xee20, 0x824b, 0x69cb, 0x71cc, + 0x698b, 0x71cc, 0x0841, 0x4228, 0x4228, 0x0000, 0x0841, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x31a6, 0x2124, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2418,26 +2418,25 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0841, 0xffdf, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffdf, - 0xffdf, 0xf79e, 0xe6dc, 0xc4da, 0x18e3, 0x734e, 0xffdf, 0xffff, + 0x0841, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffdf, 0xffdf, 0xb556, 0x18e3, 0xb556, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffbf, - 0xc57f, 0xa45a, 0x0804, 0x4271, 0x4a70, 0x5315, 0x4ab4, 0x4ad4, + 0xffff, 0x7bd0, 0x0804, 0x4271, 0x4a70, 0x5315, 0x4ab4, 0x4ad4, 0x4ad3, 0x52f4, 0x5315, 0x5335, 0x0000, 0x0000, 0x0000, 0x0000, 0x9cd3, 0xad55, 0x62eb, 0x5269, 0x4a49, 0x4208, 0x4208, 0x4208, - 0x4208, 0x0861, 0x0000, 0x738e, 0x6b6d, 0x4a49, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0xf7be, 0x6b4d, 0x0020, 0x0000, 0x18e3, - 0xc618, 0x0000, 0x0841, 0xce39, 0xffff, 0xe75c, 0x0020, 0x2124, - 0xbe17, 0xc638, 0xce59, 0xce79, 0xd6db, 0x7bcf, 0x0000, 0x0000, - 0x6b4d, 0xe71c, 0xd6ba, 0xdedb, 0xd69a, 0xce79, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1060, - 0x3940, 0xbca0, 0xee20, 0x49a0, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0861, 0x4228, 0x4228, 0x0000, 0x0841, 0x39e7, + 0x4208, 0x0861, 0x0000, 0x738e, 0x6b6d, 0x4a49, 0x0000, 0x69ab, + 0x69ab, 0x69ab, 0x7a6d, 0xef5d, 0x7a8e, 0x722d, 0x722d, 0x7a8e, + 0xef5d, 0x7a4d, 0x722d, 0x82af, 0xef5d, 0x82ae, 0x720d, 0x71ec, + 0x7a2d, 0x7a6e, 0x828e, 0x82ae, 0x82cf, 0xef5d, 0x7a4d, 0x7a4d, + 0xef5d, 0x82ae, 0x7a6e, 0x7a6d, 0x7a4d, 0x7a0d, 0x71cc, 0x69ab, + 0x71ab, 0x71cc, 0x71ac, 0x71ab, 0x698b, 0x698b, 0x71ca, 0x7a29, + 0xee20, 0x8249, 0x8249, 0xee20, 0x7a29, 0x71ca, 0x718b, 0x698b, + 0x698b, 0x698b, 0x0861, 0x52aa, 0x4228, 0x0000, 0x0841, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x41e7, 0x4228, 0x4228, 0x83d1, 0x8c32, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a69, - 0xf77e, 0x5aaa, 0x31a6, 0x1065, 0x0000, 0x72b3, 0x7af2, 0x8bd3, - 0x8af6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xf77e, 0x5aaa, 0x31a6, 0x1065, 0x0000, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2458,28 +2457,26 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0841, 0xffdf, 0xffff, 0xffdf, 0xf79e, 0xf79e, 0xf7be, 0xffff, - 0xffff, 0xffff, 0xffdf, 0xf71f, 0x0020, 0x4189, 0x9c18, 0xffff, - 0xffff, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x0821, 0x0841, 0x0842, 0x52f5, 0x5314, 0x52f4, 0x4ab3, 0x0000, - 0x10a6, 0x4ab3, 0x5315, 0x5335, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0841, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0x0861, 0xb556, 0xffff, + 0xffff, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x73af, + 0x0821, 0x0841, 0x5b15, 0x5315, 0x5b55, 0x5b55, 0x52f4, 0x52f4, + 0x4ab3, 0x52d4, 0x5315, 0x5335, 0x0000, 0x0000, 0x0000, 0x0000, 0xad76, 0xbdd7, 0x5acb, 0x4228, 0x4228, 0x3a08, 0x4207, 0x4208, - 0x4228, 0x1082, 0x0000, 0x736d, 0x6b2c, 0x4a28, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0821, 0xe71c, 0x4a89, 0x0000, 0x0000, 0x0000, - 0xe71b, 0x0000, 0x0841, 0xe73c, 0xef5d, 0xef7d, 0x0020, 0x3186, - 0xdefb, 0xdefb, 0xdefb, 0xdefb, 0xe6fb, 0x0020, 0x0000, 0x0000, - 0x0020, 0xdedb, 0xef5d, 0xef7d, 0xe73c, 0xe71b, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xdd60, 0xe640, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1082, 0x4228, 0x4208, 0x0000, 0x0841, 0x39e7, + 0x4228, 0x1082, 0x0000, 0x736d, 0x6b2c, 0x4a28, 0x0000, 0x698b, + 0x698b, 0x698b, 0x7a0d, 0xef5d, 0x7a2d, 0x71cc, 0x71cc, 0x7a2d, + 0xef5d, 0x7a2d, 0x7a2d, 0xef5d, 0xef5d, 0xef5d, 0x7a0d, 0x7a0c, + 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0x824d, 0x79ec, 0x79ec, + 0x824d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0xef5d, 0x79cc, 0x718b, + 0x718b, 0x718b, 0x718b, 0x716b, 0x716b, 0x718b, 0x718a, 0x79ca, + 0x8209, 0xee20, 0xee20, 0x8209, 0x79aa, 0x718a, 0x716b, 0x716b, + 0x716b, 0x716b, 0x1082, 0x52aa, 0x4208, 0x0000, 0x0841, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x4208, 0x4208, 0x83f2, 0x9453, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x0000, 0x4a69, - 0xef7e, 0x52aa, 0x3186, 0x1044, 0x0000, 0x7b52, 0x7351, 0x5acb, - 0x93b7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xef7e, 0x52aa, 0x3186, 0x1044, 0x0000, 0x2124, 0x2124, 0x2124, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2498,26 +2495,29 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0841, 0xffdf, 0xffff, 0xffff, 0x2945, 0x0020, 0x0861, 0xe73c, - 0xffff, 0xffff, 0xffff, 0xffff, 0xf7be, 0xce59, 0x0020, 0x0861, - 0x73af, 0xffdf, 0xffff, 0xffff, 0xf79e, 0x10a2, 0x0020, 0x0843, - 0x52f5, 0x4ab4, 0x4ad4, 0x52f4, 0x52f4, 0x5b35, 0x0020, 0x0000, - 0x0000, 0x0843, 0x4ad5, 0x5314, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0841, 0x1021, 0x0020, 0x0861, 0x0841, 0x39e7, 0x4208, 0x4208, - 0x4228, 0x1082, 0x0000, 0x6b6d, 0x630c, 0x4228, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0861, 0x41e7, 0x4208, 0x0000, 0x0841, 0x39e7, + 0x0841, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0x0861, + 0x7bd0, 0xffdf, 0xffff, 0xffff, 0x7bd0, 0x10a2, 0x0020, 0x5316, + 0x5316, 0x4ad5, 0x4af5, 0x5314, 0x5b15, 0x4a91, 0x0000, 0x0000, + 0x4a91, 0x52d4, 0x4ad5, 0x5314, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0841, 0x1021, 0x0020, 0x0861, 0x0841, 0x39e7, 0x4208, 0x4208, + 0x4228, 0x1082, 0x0000, 0x6b6d, 0x630c, 0x4228, 0x0000, 0x794a, + 0x718b, 0x716b, 0x71ac, 0x79cc, 0x71ac, 0x718b, 0x718b, 0x71ab, + 0x79cc, 0x79cc, 0x79cc, 0x7a0d, 0x824d, 0x7a0d, 0x79cc, 0x79cc, + 0x7a0c, 0x822d, 0x824d, 0x822d, 0x7a0d, 0x79cc, 0x718b, 0x718b, + 0x79cc, 0x7a0d, 0x822d, 0x822d, 0x822d, 0x79ec, 0x79ab, 0x716b, + 0x716b, 0x716b, 0x716b, 0x716b, 0x716b, 0x716b, 0x716b, 0x716a, + 0x79aa, 0x81c9, 0x81c9, 0x79aa, 0x796a, 0x716a, 0x714a, 0x714a, + 0x714a, 0x714a, 0x0861, 0x5aca, 0x4208, 0x0000, 0x0841, 0x39e7, 0x39e7, 0x39e7, 0x39c7, 0x0861, 0x1082, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, - 0x0000, 0x0000, 0x0000, 0x8315, 0x8353, 0x8393, 0x0000, 0x4a29, + 0x0000, 0x0000, 0x0000, 0x0841, 0x0841, 0x2124, 0x0000, 0x4a29, 0xef7e, 0x528a, 0x3166, 0x1865, 0x0000, 0x2925, 0x2124, 0x2945, - 0x2945, 0x2123, 0x9395, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, + 0x2945, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2538,26 +2538,26 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0841, 0xffdf, 0xffff, 0xffdf, 0x0000, 0x0000, 0x0000, 0x0020, + 0x0841, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, - 0xad35, 0x0000, 0x18c3, 0x1082, 0x0000, 0x5b17, 0x5af7, 0x52f5, - 0x5315, 0x52f4, 0x52d4, 0x52d4, 0x4ad4, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0842, 0x52f5, 0x5314, 0x0000, 0x0000, 0x0000, 0x0000, + 0xb556, 0x0000, 0x18c3, 0x1082, 0x0000, 0x5b38, 0x5b18, 0x5316, + 0x5336, 0x5315, 0x52f5, 0x52f4, 0x52f5, 0x0000, 0x0000, 0x0000, + 0x0000, 0x52f4, 0x52f5, 0x5314, 0x0000, 0x0000, 0x0000, 0x0000, 0xa534, 0xad56, 0x5aeb, 0x4228, 0x4207, 0x39e7, 0x4208, 0x4208, - 0x4228, 0x1082, 0x0000, 0x6b4d, 0x632c, 0x4a69, 0x0020, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1082, 0x4208, 0x4228, 0x0000, 0x0861, 0x39e7, + 0x4228, 0x1082, 0x0000, 0x6b4d, 0x632c, 0x4a69, 0x0020, 0x0861, + 0x794a, 0x716b, 0x716b, 0x716b, 0x716b, 0x716b, 0x716b, 0x716b, + 0x716b, 0x716b, 0x716b, 0x716b, 0x716b, 0x716b, 0x716a, 0x714a, + 0x714a, 0x714a, 0x714a, 0x714a, 0x714a, 0x714a, 0x714a, 0x714a, + 0x714a, 0x714a, 0x714a, 0x714a, 0x794a, 0x794a, 0x794a, 0x794a, + 0x794a, 0x794a, 0x794a, 0x794a, 0x794a, 0x794a, 0x794a, 0x794a, + 0x794a, 0x794a, 0x794a, 0x794a, 0x794a, 0x794a, 0x794a, 0x794a, + 0x794a, 0x794a, 0x1082, 0x4208, 0x4228, 0x0000, 0x0861, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x4208, 0x4228, 0x4a49, 0x94b2, 0x9cd3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x624e, 0xa3f8, - 0xadb6, 0xacb7, 0xb438, 0x2985, 0x2124, 0x18e3, 0x0000, 0x4208, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x0841, + 0x0841, 0x0841, 0x0841, 0x2985, 0x2124, 0x18e3, 0x0000, 0x4208, 0xf77e, 0x526a, 0x2946, 0x1886, 0x0020, 0x2925, 0x2104, 0x2124, - 0x2124, 0x2124, 0x2123, 0x6b0e, 0x9bb6, 0xab7a, 0x0000, 0x0000, + 0x2124, 0x2124, 0x2123, 0x0000, 0x0000, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2578,26 +2578,26 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0841, 0xffdf, 0xffdf, 0xf7be, 0x0000, 0x0000, 0x0000, 0x0020, + 0x0841, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x9cd3, 0x0841, 0x0000, 0x0000, 0x0821, 0x52d6, 0x52b6, 0x4ad5, - 0x2989, 0x52f5, 0x52f4, 0x52f4, 0x52f4, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0863, 0x5b36, 0x5334, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0x0000, 0x0000, 0x5316, 0x5b56, 0x5b76, 0x5315, + 0x5315, 0x4ad4, 0x52f5, 0x5314, 0x52f5, 0x0000, 0x0000, 0x0000, + 0x0000, 0x4ad4, 0x5b36, 0x5334, 0x0000, 0x0000, 0x0000, 0x0000, 0x9492, 0x9cd4, 0x6b4d, 0x4208, 0x4207, 0x41e7, 0x4208, 0x4208, 0x4208, 0x0861, 0x0000, 0x6b6d, 0x6b4d, 0x528a, 0x0020, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x18a2, 0x4228, 0x4a49, 0x0000, 0x0841, 0x39e7, + 0x0861, 0x794a, 0x794a, 0x794a, 0x794a, 0x794a, 0x794a, 0x794a, + 0x794a, 0x794a, 0x794a, 0x794a, 0x794a, 0x794a, 0x794a, 0x794a, + 0x794a, 0x794a, 0x794a, 0x794a, 0x794a, 0x794a, 0x794a, 0x794a, + 0x794a, 0x794a, 0x794a, 0x794a, 0x794a, 0x792a, 0x792a, 0x792a, + 0x792a, 0x792a, 0x792a, 0x792a, 0x792a, 0x792a, 0x792a, 0x792a, + 0x792a, 0x792a, 0x792a, 0x792a, 0x792a, 0x792a, 0x792a, 0x792a, + 0x794a, 0x0000, 0x18a2, 0x4228, 0x4a49, 0x0000, 0x0841, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x4208, 0x8431, 0x8c51, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0821, 0x0821, 0x0841, 0x6a30, 0xa379, - 0x9cb4, 0x5a8b, 0x3969, 0x3186, 0x2945, 0x2104, 0x0000, 0x4229, + 0x0000, 0x0000, 0x0000, 0x0821, 0x0821, 0x0841, 0x0841, 0x0841, + 0x0841, 0x5a8b, 0x3969, 0x3186, 0x2945, 0x2104, 0x0000, 0x4229, 0xef7e, 0x5269, 0x2945, 0x1885, 0x0000, 0x0000, 0x0000, 0x2124, - 0x2124, 0x2124, 0x2944, 0x4a49, 0x520b, 0xab9a, 0x0821, 0x0000, + 0x2124, 0x2124, 0x2944, 0x4a49, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2618,11 +2618,11 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0841, 0xffdf, 0xffff, 0xffdf, 0x31a6, 0x0020, 0x0841, 0x0841, + 0x0841, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffdf, 0xf79e, 0x1082, 0x39ad, 0xa39e, 0x52d6, 0x52d5, 0x0000, - 0x0000, 0x5b35, 0x52f4, 0x52f4, 0x5314, 0x2108, 0x0000, 0x0000, - 0x296c, 0x52f5, 0x5b36, 0x5b55, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffdf, 0xf79e, 0x1082, 0x39ae, 0x5316, 0x5b16, 0x4ab2, 0x0000, + 0x0000, 0x4a91, 0x52f5, 0x5314, 0x52f5, 0x4a91, 0x0000, 0x0021, + 0x4a91, 0x4ad4, 0x5b36, 0x5b55, 0x0000, 0x0000, 0x0000, 0x0000, 0x8c31, 0x9472, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x0861, 0x0000, 0x738e, 0x6b6d, 0x4208, 0x8410, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2634,10 +2634,10 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x3186, 0x7bcf, 0x4208, 0x4228, 0x0000, 0x0841, 0x39e7, 0x39e7, 0x41e7, 0x41e7, 0x39e7, 0x39c7, 0x39e7, 0x8410, 0x8431, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xb37b, 0xa378, 0x9414, 0x9454, 0x41e9, 0x3186, + 0x0000, 0x0000, 0x0841, 0x0841, 0x0841, 0x0841, 0x41e9, 0x3186, 0x2965, 0x3186, 0x31a6, 0x31a6, 0x18c3, 0x0020, 0x0020, 0x4a49, 0xef7d, 0x5269, 0x2945, 0x1063, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2945, 0x2945, 0x2945, 0x2945, 0x2965, 0x2965, 0x8353, 0x8315, + 0x2945, 0x2945, 0x2945, 0x2945, 0x2965, 0x0000, 0x0000, 0x0000, 0x0821, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2658,11 +2658,11 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0021, 0xf7df, 0xffff, 0xffff, 0xffdf, 0xe73c, 0xdedb, 0xe73c, + 0x0021, 0xf7df, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xf79e, 0x1082, 0x314c, 0x82db, 0x6b9a, 0x0000, 0x0000, - 0x0000, 0x0000, 0x52d3, 0x52f4, 0x52f4, 0x52f4, 0x4290, 0x4a91, - 0x52f4, 0x52f4, 0x5315, 0x5334, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xf79e, 0x1082, 0x314c, 0x5316, 0x5316, 0x0000, 0x0000, + 0x0000, 0x0000, 0x5315, 0x5314, 0x52f5, 0x4ad3, 0x52d4, 0x5b56, + 0x4af4, 0x4ad4, 0x5315, 0x5334, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0841, 0x10a2, 0x18c3, 0x4228, 0x4208, 0x4208, 0x4208, 0x0861, 0x0000, 0x738e, 0x6b4d, 0x39e7, 0x41e7, 0x52aa, 0x738d, 0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x73ae, 0x738e, @@ -2673,12 +2673,12 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x738d, 0x738e, 0x73ae, 0x738e, 0x6b6d, 0x6b4c, 0x6b4c, 0x6b6d, 0x7bce, 0x738e, 0x4228, 0x4207, 0x4208, 0x0000, 0x0841, 0x39e7, 0x41e8, 0x4208, 0x4208, 0x2925, 0x18c3, 0x0000, 0x0000, 0x0820, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9b75, - 0x93d4, 0x9434, 0x41c8, 0x41c9, 0x39c8, 0x3167, 0x3186, 0x3186, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, + 0x0841, 0x0841, 0x0000, 0x0000, 0x39c8, 0x3167, 0x3186, 0x3186, 0x3165, 0x1082, 0x0020, 0x0020, 0x2965, 0x528a, 0x0000, 0x3187, 0xcd9b, 0x5269, 0x2945, 0x0001, 0x0000, 0x2925, 0x3166, 0x0000, - 0x0020, 0x0020, 0x2945, 0x2945, 0x2944, 0x2124, 0x18a3, 0x20e4, - 0x6a70, 0x6a51, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0020, 0x0020, 0x2945, 0x2945, 0x2944, 0x2124, 0x18a3, 0x0000, + 0x0000, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2698,10 +2698,10 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0821, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xf79e, 0x1082, 0x312b, 0x7ada, 0x635a, 0x0820, 0x0000, - 0x0000, 0x0000, 0x4ad3, 0x52d4, 0x52f4, 0x52f4, 0x5314, 0x5315, + 0x0821, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xe6fc, + 0x0000, 0x0000, 0xe6fc, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xf79e, 0x1082, 0x312b, 0x5316, 0x5316, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4af5, 0x52f4, 0x52f5, 0x52f4, 0x5314, 0x5315, 0x52f5, 0x52f5, 0x52f5, 0x5313, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0841, 0x0820, 0x4228, 0x4208, 0x4208, 0x4208, 0x0862, 0x0000, 0x6b6d, 0x630c, 0x39e7, 0x39e7, 0x5b0b, @@ -2713,12 +2713,12 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x8c51, 0x8c51, 0x8c50, 0x8c50, 0x8c30, 0x8c50, 0x8c51, 0x8c51, 0x8c71, 0x738e, 0x4208, 0x4208, 0x4228, 0x0000, 0x0861, 0x4208, 0x41e7, 0x41e7, 0x4208, 0x2104, 0x18c3, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xbb7b, - 0xbbf9, 0xa477, 0x39c6, 0x3186, 0x3186, 0x3186, 0x31a6, 0x31a6, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0841, + 0x0841, 0x0841, 0x39c6, 0x3186, 0x3186, 0x3186, 0x31a6, 0x31a6, 0x31a6, 0x0841, 0x0000, 0x0000, 0x2124, 0x5269, 0x0000, 0x2907, 0xbc7d, 0x528a, 0x2965, 0x0021, 0x0000, 0x2945, 0x39c7, 0x0000, 0x0820, 0x0020, 0x2945, 0x2124, 0x2124, 0x2124, 0x1082, 0x10a2, - 0x9357, 0x8b18, 0x0021, 0x0821, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0841, 0x0000, 0x0021, 0x0821, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2738,11 +2738,11 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0841, 0xffdf, 0xffde, 0xffdf, 0xffdf, 0xffdf, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xf79e, 0x1082, 0x312c, 0x82ba, 0x6317, 0x0000, 0x0000, - 0x0020, 0x3a0d, 0x52f4, 0x52f4, 0x52d4, 0x52f4, 0x52f4, 0x5315, - 0x5315, 0x5315, 0x5315, 0x5313, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0841, 0xffdf, 0xffde, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xf79e, 0x1082, 0x312c, 0x5316, 0x5316, 0x4ab2, 0x0000, + 0x0021, 0x4a91, 0x4ad4, 0x52f4, 0x52f5, 0x5b55, 0x52f4, 0x52f4, + 0x4ab3, 0x52d4, 0x5315, 0x5313, 0x0000, 0x0000, 0x0000, 0x0000, 0xad55, 0xa515, 0x632c, 0x4a49, 0x4a49, 0x4228, 0x4208, 0x4208, 0x4228, 0x1082, 0x0000, 0x6b6d, 0x632c, 0x39e7, 0x39e7, 0x4208, 0x39e7, 0x41e7, 0x41e7, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x39e7, @@ -2753,12 +2753,12 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x4208, 0x4208, 0x4208, 0x39e7, 0x39e7, 0x4208, 0x4228, 0x0020, 0x0861, 0x4208, 0x41e8, 0x4208, 0x4208, 0x4228, 0x4208, 0x4207, 0x8c31, 0x9472, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xcbde, 0x2984, - 0x39e7, 0x39c7, 0x39a6, 0x3186, 0x3186, 0x3186, 0x3186, 0x31a6, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x0000, + 0x0000, 0x1904, 0x39a6, 0x3186, 0x3186, 0x3186, 0x3186, 0x31a6, 0x10a2, 0x3186, 0x4a29, 0x0000, 0x39c7, 0x5aaa, 0x4a49, 0x39c7, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, 0x39e7, 0x39e7, 0x0020, 0x20e5, 0x20e5, 0x0000, 0x2144, 0x2104, 0x0000, 0x0000, 0x0000, - 0x0801, 0x0821, 0x0021, 0x9b1a, 0x30a8, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0841, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2778,11 +2778,11 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0841, 0xffdf, 0xffdf, 0xfffe, 0x0001, 0x0000, 0x8235, 0xffbf, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xf7be, 0x1082, 0x318c, 0x8b1a, 0x52d4, 0x52f4, 0x0000, - 0x0000, 0x52d4, 0x52f4, 0x52f4, 0x52f4, 0x52d3, 0x0842, 0x0000, - 0x0021, 0x52d5, 0x5b36, 0x5355, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0841, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xf7be, 0x1082, 0x318c, 0x5316, 0x5316, 0x4af4, 0x52f5, + 0x5b77, 0x4b15, 0x4ad4, 0x52f4, 0x52f5, 0x4a91, 0x0000, 0x0000, + 0x4a91, 0x52d4, 0x5b36, 0x5355, 0x0000, 0x0000, 0x0000, 0x0000, 0xa515, 0xa515, 0x4a49, 0x4a49, 0x4228, 0x4208, 0x4208, 0x4208, 0x4228, 0x0861, 0x0000, 0x6b6d, 0x6b2c, 0x41e7, 0x39e7, 0x4208, 0x4207, 0x41e7, 0x41e7, 0x39e7, 0x39e7, 0x4207, 0x4207, 0x4207, @@ -2793,12 +2793,12 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x41e8, 0x4208, 0x4208, 0x4207, 0x41e8, 0x4207, 0x3a07, 0x41e7, 0x39e7, 0x41e7, 0x41e7, 0x4208, 0x4a49, 0x0000, 0x0841, 0x41e7, 0x41e7, 0x41e7, 0x4208, 0x4208, 0x4208, 0x4228, 0x9472, 0x94b3, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6a11, 0x7b10, - 0x83f2, 0x3186, 0x31a6, 0x31a6, 0x31a6, 0x31a6, 0x3186, 0x3186, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x1904, + 0x1904, 0x0000, 0x0841, 0x31a6, 0x31a6, 0x31a6, 0x3186, 0x3186, 0x0841, 0x5acb, 0x83d0, 0x0000, 0x18c3, 0xa534, 0x7bcf, 0x8c30, 0x8c30, 0x4228, 0x39c7, 0x3165, 0x3165, 0x0020, 0x18a2, 0x0820, 0x39e9, 0x39a8, 0x0000, 0x1062, 0x6045, 0xd04c, 0xf08f, 0xf0cf, - 0xf930, 0xf930, 0xd8ed, 0x1064, 0x49cc, 0x6290, 0x0000, 0x0000, + 0xf930, 0xf930, 0xd8ed, 0x1064, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2818,11 +2818,11 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0841, 0xffdf, 0xffff, 0x2946, 0x0020, 0x0000, 0x0000, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xf79e, 0x1082, 0x316c, 0x8b1a, 0x5315, 0x52f4, 0x4ad3, - 0x52d3, 0x52f4, 0x52f4, 0x52f4, 0x5314, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1063, 0x5b36, 0x5b35, 0x0020, 0x0000, 0x0000, 0x0000, + 0x0841, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xe6fc, + 0x0000, 0x0000, 0xe6fc, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xf79e, 0x1082, 0x316c, 0x5316, 0x5316, 0x5315, 0x4af4, + 0x52f4, 0x5314, 0x52f4, 0x52f4, 0x52f5, 0x0000, 0x0000, 0x0000, + 0x0000, 0x52f4, 0x5b36, 0x5b35, 0x0020, 0x0000, 0x0000, 0x0000, 0xa535, 0xad35, 0x4228, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4228, 0x0862, 0x0000, 0x6b6d, 0x632c, 0x39e7, 0x39e7, 0x41e7, 0x41e7, 0x4207, 0x41e7, 0x41e7, 0x4207, 0x41e7, 0x4207, 0x41e8, @@ -2833,12 +2833,12 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x4208, 0x4208, 0x4208, 0x4208, 0x4207, 0x4207, 0x41e7, 0x41e7, 0x39e7, 0x41e7, 0x4207, 0x4208, 0x4228, 0x0000, 0x0841, 0x4207, 0x4207, 0x4208, 0x4208, 0x4208, 0x4208, 0x4228, 0x9472, 0x9cd3, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x412b, 0xd41d, - 0x8b13, 0x31c5, 0x31a6, 0x31a6, 0x31a6, 0x3186, 0x3186, 0x31a6, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x18e3, + 0x18e3, 0x18e3, 0x0000, 0x0841, 0x31a6, 0x3186, 0x3186, 0x31a6, 0x1082, 0x6b4e, 0x8c12, 0x0020, 0x0020, 0x0020, 0xffdf, 0xd69a, 0x9cb3, 0x62eb, 0x5acb, 0x4208, 0x39e7, 0x0000, 0x0820, 0x0020, 0x39c8, 0x41e9, 0x0000, 0x0000, 0xffbf, 0xe86e, 0xf8ce, 0xf8ee, - 0xf8cf, 0xf8cf, 0xf0ce, 0x0000, 0x41ca, 0x93b7, 0x0000, 0x0000, + 0xf8cf, 0xf8cf, 0xf0ce, 0x0000, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2858,11 +2858,11 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0841, 0xffdf, 0xffff, 0x2966, 0x0000, 0x0000, 0x0000, 0x0000, - 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffdf, 0xffff, 0xffff, - 0xffff, 0xf79e, 0x1082, 0x296b, 0x82db, 0x5335, 0x5315, 0x52f4, - 0x52f4, 0x52d4, 0x52f4, 0x52f4, 0x5314, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1885, 0x52f5, 0x5314, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0841, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, + 0xffff, 0xf79e, 0x1082, 0x296b, 0x5316, 0x5316, 0x5336, 0x5315, + 0x5314, 0x52d4, 0x52f4, 0x52f4, 0x52f5, 0x0000, 0x0000, 0x0000, + 0x0000, 0x4ad4, 0x52f5, 0x5314, 0x0000, 0x0000, 0x0000, 0x0000, 0xad35, 0xa535, 0x4208, 0x41e7, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x0861, 0x0000, 0x6b4d, 0x630c, 0x41e7, 0x41e7, 0x4207, 0x4208, 0x4208, 0x4208, 0x4207, 0x4207, 0x4207, 0x4207, 0x4207, @@ -2873,12 +2873,12 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x4208, 0x4208, 0x4208, 0x4207, 0x4208, 0x4207, 0x4207, 0x41e7, 0x4207, 0x4208, 0x4208, 0x4208, 0x4228, 0x0000, 0x0841, 0x4207, 0x4208, 0x4208, 0x4207, 0x4208, 0x4208, 0x4208, 0x8c52, 0x94b2, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x38cb, 0x0841, - 0x1082, 0xbc5b, 0x524c, 0x39c6, 0x31a6, 0x3186, 0x3186, 0x31a6, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x18e3, + 0x18e3, 0x18e3, 0x1904, 0x0000, 0x0841, 0x3186, 0x3186, 0x31a6, 0x39c7, 0x0840, 0xa4f6, 0x83f1, 0x5acc, 0x31a6, 0x0020, 0x0841, 0x0020, 0x0020, 0x0020, 0x0000, 0x0020, 0x0800, 0x0020, 0x3186, 0x39a7, 0x0000, 0x0000, 0x0000, 0xf0d0, 0xff3d, 0xf86d, 0xf0ce, - 0xf8ce, 0xf0ae, 0xf951, 0x0000, 0x0000, 0x3186, 0x626f, 0x9b58, + 0xf8ce, 0xf0ae, 0xf951, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2898,11 +2898,11 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0020, 0xd5de, 0xe6df, 0xc618, 0x2104, 0x0000, 0x10a2, 0x0000, - 0xffdf, 0xffdf, 0xffdf, 0x41e9, 0x0020, 0x0020, 0x6213, 0xffdf, - 0xffff, 0xf79e, 0x1082, 0x318b, 0x8b1b, 0x5b35, 0x5b55, 0x1907, - 0x1906, 0x4ab3, 0x52d4, 0x52d4, 0x52d4, 0x0000, 0x0000, 0x0000, - 0x18e8, 0x4231, 0x52f5, 0x52f3, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0020, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xf79e, 0x1082, 0x318b, 0x5316, 0x5316, 0x5b75, 0x5314, + 0x52f4, 0x4ab3, 0x52d4, 0x52d4, 0x52f5, 0x52f5, 0x0000, 0x0021, + 0x4a91, 0x4ad4, 0x52f5, 0x52f3, 0x0000, 0x0000, 0x0000, 0x0000, 0xad35, 0xa515, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x0861, 0x0000, 0x6b2c, 0x630c, 0x4208, 0x4207, 0x4208, 0x4208, 0x4208, 0x4208, 0x4207, 0x4207, 0x4208, 0x41e7, 0x41e7, @@ -2913,13 +2913,13 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4207, 0x4208, 0x4207, 0x39e7, 0x4208, 0x0000, 0x0841, 0x39e7, 0x4207, 0x4207, 0x4208, 0x4208, 0x4208, 0x4207, 0x8c31, 0x8c72, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x38cb, 0x18e3, - 0x2104, 0x3127, 0x72f3, 0xbcdb, 0x2965, 0x3186, 0x31a6, 0x3186, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x18e3, + 0x2104, 0x18e3, 0x18e3, 0x18e3, 0x0000, 0x0841, 0x31a6, 0x3186, 0x3186, 0x31a6, 0x0841, 0x5aac, 0x8bf2, 0xbd77, 0x62cf, 0x732f, 0x420a, 0x2125, 0x2125, 0x20e4, 0x20e3, 0x6b6e, 0x632d, 0x4209, 0x0841, 0x0020, 0x0841, 0x0800, 0x4843, 0xe88b, 0xda0e, 0xd12b, - 0x8826, 0x8026, 0x3803, 0x0000, 0x0040, 0x2945, 0x31c6, 0x2144, - 0x59cd, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x8826, 0x8026, 0x3803, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2938,11 +2938,11 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0021, 0xbc3e, 0xabfe, 0xf79e, 0x1082, 0x0020, 0xdebb, 0xffdf, - 0xffff, 0xffff, 0xffdf, 0x0000, 0x0000, 0x0000, 0x0001, 0xffff, - 0xffff, 0xf79e, 0x1082, 0x316b, 0x831a, 0x5af5, 0x5314, 0x0000, - 0x0000, 0x294a, 0x52d4, 0x52d4, 0x52f4, 0x52f4, 0x0000, 0x0020, - 0x4272, 0x5b56, 0x5336, 0x52f3, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0021, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xf79e, 0x1082, 0x316b, 0x5315, 0x5315, 0x4a91, 0x0000, + 0x0000, 0x4a91, 0x52d4, 0x52d4, 0x4ad3, 0x52f5, 0x52d4, 0x5b56, + 0x4af4, 0x4ad4, 0x5336, 0x52f3, 0x0000, 0x0000, 0x0000, 0x0000, 0xa535, 0xa515, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x0861, 0x0000, 0x6b2c, 0x630c, 0x4207, 0x4207, 0x4207, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, @@ -2953,13 +2953,12 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4207, 0x39e7, 0x39e7, 0x39e7, 0x39e7, 0x0000, 0x0841, 0x41e7, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4207, 0x8c51, 0x9492, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x38ec, 0x20e3, - 0x2104, 0x2925, 0x0000, 0x9b96, 0x9394, 0x39e7, 0x39a7, 0x3186, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x18e3, + 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x0000, 0x0841, 0x3186, 0x3165, 0x3186, 0x10a2, 0x10a2, 0x5a8c, 0xe67e, 0x8bd5, 0x9434, 0x83d3, 0x7350, 0x734f, 0x6b4d, 0x630c, 0x5acc, 0x630d, 0x0000, 0x0020, 0x0020, 0x41e7, 0x0020, 0x0800, 0xd88a, 0xc849, 0xc049, - 0x8805, 0x9006, 0x0000, 0x0020, 0x0841, 0x2945, 0x9434, 0x93d3, - 0x69d0, 0x0821, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x8805, 0x9006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2978,9 +2977,10 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0821, 0x0000, 0xa39d, 0xef5f, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffdf, 0x0000, 0x0020, 0x0020, 0x0000, 0xffff, - 0xffdf, 0xef7d, 0x0861, 0x292a, 0x7ada, 0x5b58, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffdf, 0xef7d, 0x0861, 0x292a, 0x5315, 0x52f5, 0x0000, 0x0000, 0x0000, 0x0000, 0x52f4, 0x52f4, 0x52f4, 0x5314, 0x52d4, 0x4ad3, 0x4af4, 0x5335, 0x3970, 0x30ac, 0x0000, 0x0000, 0x0000, 0x0000, 0xa535, 0xa515, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, @@ -2993,13 +2993,13 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4207, 0x41e7, 0x41e7, 0x3a07, 0x39e7, 0x39e7, 0x4208, 0x0020, 0x0841, 0x4208, 0x39e7, 0x4208, 0x4208, 0x4208, 0x4208, 0x4207, 0x8c51, 0x9492, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x40ec, 0x2124, - 0x2104, 0x18e3, 0x18c3, 0x0841, 0x0862, 0xbcdb, 0xac36, 0x9c74, - 0x31a6, 0x31a6, 0x3186, 0x3186, 0x18c3, 0x0841, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x2124, + 0x18e3, 0x18e3, 0x18c3, 0x18e3, 0x18e3, 0x1904, 0x0000, 0x0000, + 0x18e3, 0x31a6, 0x3186, 0x3186, 0x18c3, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x39c7, 0x39c6, 0x31a6, 0x20e4, 0x10a2, 0x0800, 0x0800, 0x0800, - 0x0800, 0x0800, 0x0841, 0x94b3, 0x83f2, 0x8393, 0x0000, 0x0000, - 0x388b, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0800, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3018,9 +3018,9 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xa3bc, 0xde7e, 0xddff, 0xf75f, 0xffdf, - 0xffff, 0xffff, 0xffdf, 0x0000, 0x0000, 0x0000, 0x0000, 0xf7be, - 0xffdf, 0xef7d, 0x0862, 0x292b, 0x82fa, 0x6359, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffdf, 0xef7d, 0x0862, 0x292b, 0x52f5, 0x52f5, 0x0000, 0x0000, 0x0000, 0x0000, 0x4ad4, 0x52f4, 0x52f4, 0x52f4, 0x5314, 0x4af4, 0x4ab3, 0x3a32, 0x0001, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0xa535, 0xa515, 0x41e7, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, @@ -3033,13 +3033,13 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x4228, 0x4228, 0x4228, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4208, 0x4228, 0x4228, 0x4228, 0x4a49, 0x0020, 0x0841, 0x4208, 0x39e7, 0x4207, 0x4208, 0x4208, 0x4208, 0x4207, 0x8c51, 0x9492, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x40ed, 0x2124, - 0x20e4, 0x20e3, 0x18e3, 0x0841, 0x0041, 0x7b34, 0xc4da, 0xacb6, - 0x31a6, 0x3186, 0x3185, 0x3186, 0x2965, 0x2944, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x2124, + 0x20e4, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x0841, + 0x0000, 0x18e3, 0x3185, 0x3186, 0x2965, 0x2944, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2945, 0x2124, 0x31a6, - 0x31c7, 0x39c7, 0x31a6, 0x31a6, 0x39c7, 0x0000, 0x0000, 0x0000, - 0x0020, 0x0000, 0x9c75, 0xacd6, 0x93f4, 0x628e, 0x0000, 0x0000, - 0x388b, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x31c7, 0x39c7, 0x31a6, 0x31a6, 0x39c7, 0x18e3, 0x18e3, 0x0000, + 0x0000, 0x0000, 0x18e3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3058,10 +3058,10 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x412c, 0x7a79, 0xbcde, 0xbcbc, - 0xffff, 0xffff, 0xffff, 0xf7be, 0x0000, 0x0840, 0xffff, 0xffff, - 0xffff, 0xf79e, 0x1082, 0x396c, 0x831a, 0x52f5, 0x4ad3, 0x0000, - 0x0021, 0x42b3, 0x4ad4, 0x52f4, 0x52f4, 0x5315, 0x5335, 0x212d, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xf79e, 0x1082, 0x396c, 0x52f5, 0x52f5, 0x4a91, 0x0000, + 0x0021, 0x4a91, 0x4ad4, 0x52f4, 0x52f4, 0x5315, 0x5335, 0x212d, 0x2089, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa515, 0xa515, 0x4207, 0x4208, 0x4208, 0x4208, 0x4208, 0x39e7, 0x0000, 0x0000, 0x0000, 0x18a3, 0x18c3, 0x10a2, 0x1082, 0x1082, @@ -3074,12 +3074,12 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x18a3, 0x18a2, 0x10a2, 0x1061, 0x0861, 0x0000, 0x0000, 0x0000, 0x4208, 0x4208, 0x4208, 0x4228, 0x4208, 0x39e7, 0x8c11, 0x9492, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20c5, - 0x18e3, 0x18e3, 0x20e3, 0x18e3, 0x18e3, 0x2104, 0x0841, 0x0001, - 0x93d5, 0x4208, 0x3186, 0x3186, 0x31a6, 0x39c7, 0x39a6, 0x31a6, + 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x18e3, + 0x0841, 0x0000, 0x18e3, 0x3186, 0x31a6, 0x39c7, 0x39a6, 0x31a6, 0x31a6, 0x31a6, 0x31a6, 0x31a6, 0x31a6, 0x31a6, 0x31a6, 0x31a6, - 0x31a6, 0x3186, 0x31a6, 0x39c7, 0x39c7, 0x8c11, 0x8c12, 0x8bf2, - 0x9335, 0x92f4, 0x38ea, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x388b, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x31a6, 0x3186, 0x18e3, 0x18e3, 0x0000, 0x0000, 0x0000, 0x18e3, + 0x18e3, 0x18e3, 0x18e3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0841, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3098,9 +3098,9 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x931b, 0xc51e, 0xbcdc, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xf79e, 0x1082, 0x398c, 0x7afa, 0x4ad3, 0x4ad3, 0x52d4, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xf79e, 0x1082, 0x398c, 0x52f5, 0x52f5, 0x4ad3, 0x52d4, 0x5b56, 0x4af4, 0x4ad4, 0x4ad3, 0x5314, 0x1006, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad55, 0xad36, 0x4208, 0x4208, 0x4208, 0x4208, 0x39c7, 0x39e7, @@ -3114,12 +3114,13 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x4228, 0x4208, 0x4208, 0x4208, 0x4208, 0x4207, 0x8c13, 0x9c94, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x18e3, 0x18e3, 0x18e3, 0x2104, 0x2104, 0x18e3, - 0x0000, 0x7b51, 0xabf9, 0x7bcf, 0x6b4d, 0x39c7, 0x31a6, 0x31a6, + 0x0000, 0x0000, 0x18e3, 0x18e3, 0x18e3, 0x2104, 0x18e3, 0x18e3, + 0x18e3, 0x0841, 0x0000, 0x18e3, 0x31a6, 0x39c7, 0x31a6, 0x31a6, 0x31a6, 0x31a6, 0x31a6, 0x31a6, 0x3186, 0x31a6, 0x31a6, 0x39c6, - 0x31a6, 0x2945, 0x9492, 0x9cd3, 0xad54, 0x61cf, 0x0000, 0x0000, + 0x31a6, 0x0000, 0x0000, 0x0000, 0x18e3, 0x18e3, 0x18e3, 0x18e3, + 0x18e3, 0x18e3, 0x18e3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0841, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x386b, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3138,9 +3139,8 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x931b, 0xb4bd, 0xbcde, 0xffff, 0xffdf, 0xffdf, 0xffdf, 0xffdf, - 0xffff, 0xf7de, 0x0881, 0x398c, 0x831a, 0x5314, 0x52d4, 0x4ad3, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffdf, 0xffdf, + 0xffff, 0xf7de, 0x0881, 0x398c, 0x52f5, 0x52f5, 0x52d4, 0x4ad3, 0x4ad4, 0x4af4, 0x4b15, 0x31d0, 0x31b0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xb576, 0xb577, 0x41e7, 0x39e7, 0x4208, 0x4228, 0x39c7, 0x4208, @@ -3151,15 +3151,15 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0001, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x39e7, 0x39e7, 0x4208, 0x4208, 0x4228, 0x4a28, 0xa417, 0xa477, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20e4, 0x20e4, 0x1904, 0x2104, 0x18e3, 0x18e3, - 0x0000, 0x72ee, 0xac19, 0xbd17, 0x6b6f, 0x31a6, 0x31a6, 0x31a6, - 0x31a6, 0x39a6, 0x31a6, 0x31a6, 0x3186, 0x2965, 0x3185, 0x3186, - 0x41c9, 0x3146, 0x9493, 0x9492, 0x9cd3, 0x38aa, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, - 0x386c, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x18e3, 0x18e3, 0x0841, 0x0000, 0x18e3, 0x31a6, 0x31a6, 0x31a6, + 0x31a6, 0x39a6, 0x31a6, 0x31a6, 0x3186, 0x2965, 0x18e3, 0x0000, + 0x0000, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x18e3, + 0x18e3, 0x18e3, 0x18e3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0841, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3179,27 +3179,27 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2087, 0x9b3e, 0xd53f, 0xd5bf, 0xf6df, 0xffdf, - 0xffff, 0xde3e, 0x0861, 0x218a, 0x5b15, 0x52f4, 0x52f4, 0x4ad4, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, + 0xffff, 0xffff, 0x0861, 0x218a, 0x5b15, 0x52f4, 0x52f4, 0x4ad4, 0x4ad4, 0x4212, 0x20ac, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x1864, 0x18a3, 0x18c3, 0x18c3, 0x18c3, 0x18c3, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa301, 0x0000, 0x0000, - 0x9b01, 0x0000, 0x0000, 0xab61, 0x3100, 0x0000, 0xab20, 0x51c1, - 0x0000, 0x8260, 0x7a60, 0x0000, 0x7200, 0x5160, 0x0020, 0x30c0, - 0x1880, 0x0000, 0x8a60, 0x9281, 0x0000, 0xb341, 0xb342, 0x0000, - 0x7aa1, 0x9ae0, 0x0820, 0x0820, 0x9ae0, 0x0000, 0x0000, 0x92a0, - 0x0000, 0x0000, 0x38e0, 0x0000, 0x0000, 0x7200, 0x7240, 0x0020, - 0x0000, 0x8a60, 0x0000, 0x4120, 0x7a20, 0x0000, 0x0000, 0x8200, - 0x0000, 0x0000, 0xa2e1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x18c3, 0x18c3, 0x10a3, 0x18c3, 0x18e4, 0x2104, 0x0001, 0x0020, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xab20, 0x51c1, 0x0000, + 0xab20, 0x51c1, 0x0000, 0xab20, 0x51c1, 0x0000, 0xab20, 0x51c1, + 0x0000, 0xab20, 0x51c1, 0x0000, 0xab20, 0x51c1, 0x0000, 0xab20, + 0x51c1, 0x0000, 0xab20, 0x51c1, 0x0000, 0xab20, 0x51c1, 0x0000, + 0xab20, 0x51c1, 0x0000, 0xab20, 0x51c1, 0x0000, 0xab20, 0x51c1, + 0x0000, 0xab20, 0x51c1, 0x0000, 0xab20, 0x51c1, 0x0000, 0xab20, + 0x51c1, 0x0000, 0xab20, 0x51c1, 0x0000, 0xab20, 0x51c1, 0x0000, + 0xab20, 0x51c1, 0x0000, 0xab20, 0x51c1, 0x0000, 0x0000, 0x0000, + 0x0000, 0x18c3, 0x10a3, 0x18c3, 0x18e4, 0x2104, 0x0001, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x20c5, 0x20e4, 0x20e4, 0x18e3, 0x18e3, - 0x18e3, 0x2103, 0x2124, 0x0841, 0x72d2, 0xb419, 0x2123, 0x31a6, - 0x39a6, 0x39a6, 0x31a6, 0x3186, 0x31a6, 0xad36, 0x9473, 0x9453, - 0xa3f7, 0xb41a, 0x0021, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x18e3, 0x2103, 0x18e3, 0x18e3, 0x0000, 0x18e3, 0x18e3, 0x31a6, + 0x39a6, 0x31a6, 0x31a6, 0x18e3, 0x0000, 0x0000, 0x0000, 0x18e3, + 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x382c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3219,25 +3219,25 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x20c8, 0x8339, 0xbcde, 0xbcde, - 0xb47e, 0xb47e, 0x0841, 0x218b, 0x4a93, 0x52f4, 0x4ab4, 0x28ec, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0841, 0x218b, 0x4a93, 0x52f4, 0x4ab4, 0x28ec, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0841, 0x18c3, - 0x2945, 0x2965, 0x2945, 0x0020, 0x0000, 0xfe21, 0x0000, 0x0000, - 0xfe82, 0x0000, 0x0000, 0xfea2, 0x3920, 0x0000, 0xf5c0, 0x82e1, - 0x0840, 0xf620, 0xff42, 0x0860, 0xffe1, 0xe661, 0x0840, 0xf681, - 0xd4e1, 0x0820, 0xeec2, 0xeee3, 0x0840, 0xf5a0, 0xff01, 0x0820, - 0xfe82, 0xfea2, 0x0000, 0x0000, 0xfe61, 0x0000, 0x0000, 0xee02, - 0x0820, 0x0000, 0xf601, 0x0020, 0x0000, 0xfe61, 0xc4c1, 0x0020, - 0x1060, 0xed60, 0x0000, 0x6220, 0xf642, 0x0000, 0x0000, 0xfec4, - 0x0000, 0x0000, 0xfe20, 0x0000, 0x0000, 0x18e3, 0x18e3, 0x2124, - 0x1082, 0x1082, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x2945, 0x2965, 0x2945, 0x0020, 0x0000, 0xf5c0, 0x82e1, 0x0000, + 0xf5c0, 0x82e1, 0x0000, 0xf5c0, 0x82e1, 0x0000, 0xf5c0, 0x82e1, + 0x0000, 0xf5c0, 0x82e1, 0x0000, 0xf5c0, 0x82e1, 0x0000, 0xf5c0, + 0x82e1, 0x0000, 0xf5c0, 0x82e1, 0x0000, 0xf5c0, 0x82e1, 0x0000, + 0xf5c0, 0x82e1, 0x0000, 0xf5c0, 0x82e1, 0x0000, 0xf5c0, 0x82e1, + 0x0000, 0xf5c0, 0x82e1, 0x0000, 0xf5c0, 0x82e1, 0x0000, 0xf5c0, + 0x82e1, 0x0000, 0xf5c0, 0x82e1, 0x0000, 0xf5c0, 0x82e1, 0x0000, + 0xf5c0, 0x82e1, 0x0000, 0xf5c0, 0x82e1, 0x0000, 0x0000, 0x0000, + 0x0000, 0x1082, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0800, 0x0000, 0x18e4, 0x18e3, 0x18e3, - 0x2104, 0x2104, 0x2124, 0x2945, 0x18e3, 0x0000, 0xce5b, 0xbdb7, - 0xb5b6, 0xad55, 0xad35, 0xad35, 0xacf6, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x2104, 0x2104, 0x2124, 0x18e3, 0x18e3, 0x0000, 0x18e3, 0x31a6, + 0x31a6, 0x18e3, 0x0000, 0x0000, 0x18e3, 0x18e3, 0x18e3, 0x18e3, + 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x386c, 0x386c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3259,25 +3259,25 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x20a8, 0x82fa, 0xb47f, 0xbcbe, - 0xac5e, 0xac3e, 0x0841, 0x21ac, 0x4ab4, 0x3a11, 0x294e, 0x28ac, + 0x0000, 0x0000, 0x0000, 0x0000, 0x20a8, 0x0000, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0841, 0x21ac, 0x4ab4, 0x3a11, 0x294e, 0x28ac, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x0020, 0x0000, 0x0020, 0x10a2, - 0x2945, 0x2945, 0x2925, 0x0020, 0x0000, 0xf5c0, 0x0000, 0x0000, - 0xfe41, 0x0000, 0x0000, 0xfe41, 0x4160, 0x0000, 0xf5c0, 0x72a0, - 0x0840, 0xf600, 0xfee2, 0x0860, 0xffc2, 0xe600, 0x0840, 0xee01, - 0xd501, 0x0840, 0xee41, 0xeec1, 0x0840, 0xe580, 0xfec0, 0x0840, - 0xfe81, 0xf621, 0x0000, 0x0000, 0xf600, 0x0000, 0x0000, 0xeda2, - 0x0840, 0x0000, 0xf602, 0x0840, 0x0000, 0xf641, 0x9bc1, 0x0000, - 0x0840, 0xed60, 0x0000, 0x6220, 0xf622, 0x0000, 0x0000, 0xf662, - 0x0000, 0x0000, 0xf5e0, 0x0000, 0x0000, 0x18e3, 0x2124, 0x2924, - 0x0861, 0x0840, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x2945, 0x2945, 0x2925, 0x0020, 0x0000, 0xf5c0, 0x82e1, 0x0000, + 0xf5c0, 0x82e1, 0x0000, 0xf5c0, 0x82e1, 0x0000, 0xf5c0, 0x82e1, + 0x0000, 0xf5c0, 0x82e1, 0x0000, 0xf5c0, 0x82e1, 0x0000, 0xf5c0, + 0x82e1, 0x0000, 0xf5c0, 0x82e1, 0x0000, 0xf5c0, 0x82e1, 0x0000, + 0xf5c0, 0x82e1, 0x0000, 0xf5c0, 0x82e1, 0x0000, 0xf5c0, 0x82e1, + 0x0000, 0xf5c0, 0x82e1, 0x0000, 0xf5c0, 0x82e1, 0x0000, 0xf5c0, + 0x82e1, 0x0000, 0xf5c0, 0x82e1, 0x0000, 0xf5c0, 0x82e1, 0x0000, + 0xf5c0, 0x82e1, 0x0000, 0xf5c0, 0x82e1, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0840, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18e4, 0x18e3, 0x20e4, - 0x2104, 0x2104, 0x2104, 0x2104, 0x2124, 0x0000, 0xc5b9, 0xad36, - 0xad35, 0x9cd4, 0x9cb4, 0xa4b5, 0xa456, 0x0000, 0x0020, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x2104, 0x2104, 0x2104, 0x2104, 0x2124, 0x18e3, 0x0000, 0x0841, + 0x0000, 0x0000, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x18e3, + 0x18e3, 0x18e3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x2047, 0x2848, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3299,24 +3299,24 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0xa27c, 0xa27c, 0xa27c, 0xa27c, 0xa25c, 0x9a5c, 0x9a3c, 0x9a5c, 0x9a5c, 0x9a5c, 0xa25c, 0xa27c, 0xa27c, 0xa27c, 0x9a7c, 0x9a7c, 0xa27c, 0x9a7c, 0x9a7c, 0x9a5b, 0x925b, 0x923a, 0x81d8, 0x81f7, - 0x6974, 0x6133, 0x58f1, 0x0000, 0x0000, 0x0000, 0x0020, 0x6a79, - 0x6236, 0x7b19, 0x1087, 0x18ea, 0x20cb, 0x0001, 0x0000, 0x0000, + 0x6974, 0x6133, 0x58f1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1807, 0x300b, 0x300b, 0x300a, 0x404d, 0x404d, 0x484e, 0x484e, 0x484e, 0x484e, 0x486e, 0x486e, 0x486d, 0x382c, 0x2829, 0x2809, 0x300b, 0x1806, 0x1005, 0x0000, 0x1062, 0x1082, - 0x2945, 0x2945, 0x2945, 0x0020, 0x0000, 0xf5e1, 0x0000, 0x0000, - 0xfe41, 0x0000, 0x0000, 0xf620, 0x4160, 0x0000, 0xf5e1, 0x8320, - 0x1060, 0xf621, 0xfe81, 0x0840, 0xff81, 0xd580, 0x0840, 0xede0, - 0xcd01, 0x0840, 0xee61, 0xf701, 0x0840, 0xe580, 0xfec0, 0x0820, - 0xe5c1, 0xf5e0, 0x0000, 0x0000, 0xf620, 0x0820, 0x0000, 0xe5c4, - 0x0840, 0x0000, 0xf600, 0x0020, 0x0000, 0xf600, 0x9bc0, 0x0000, - 0x1060, 0xed80, 0x0000, 0x6240, 0xf621, 0x0000, 0x0000, 0xee21, - 0x0000, 0x0000, 0xfe40, 0x0000, 0x0020, 0x2124, 0x2124, 0x2124, - 0x0020, 0x0020, 0x0000, 0x0002, 0x1005, 0x302a, 0x2829, 0x2809, + 0x2945, 0x2945, 0x2945, 0x0020, 0x0000, 0xf5e1, 0x8320, 0x0000, + 0xf5e1, 0x8320, 0x0000, 0xf5e1, 0x8320, 0x0000, 0xf5e1, 0x8320, + 0x0000, 0xf5e1, 0x8320, 0x0000, 0xf5e1, 0x8320, 0x0000, 0xf5e1, + 0x8320, 0x0000, 0xf5e1, 0x8320, 0x0000, 0xf5e1, 0x8320, 0x0000, + 0xf5e1, 0x8320, 0x0000, 0xf5e1, 0x8320, 0x0000, 0xf5e1, 0x8320, + 0x0000, 0xf5e1, 0x8320, 0x0000, 0xf5e1, 0x8320, 0x0000, 0xf5e1, + 0x8320, 0x0000, 0xf5e1, 0x8320, 0x0000, 0xf5e1, 0x8320, 0x0000, + 0xf5e1, 0x8320, 0x0000, 0xf5e1, 0x8320, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0020, 0x0000, 0x0002, 0x1005, 0x302a, 0x2829, 0x2809, 0x302a, 0x404d, 0x404d, 0x402c, 0x382c, 0x382c, 0x382c, 0x382c, 0x384c, 0x2829, 0x2829, 0x0000, 0x0000, 0x0000, 0x0000, 0x18a5, - 0x2104, 0x2104, 0x1903, 0x18e3, 0x18e3, 0x18c3, 0x0000, 0x9c36, - 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x2104, 0x2104, 0x1903, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x0000, + 0x0000, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x384c, 0x406d, 0x408e, 0x6954, 0x6113, 0x89d9, 0x9a3b, 0x9a7c, 0x9a7c, 0x9a5c, 0x9a5c, 0x9a5c, 0x9a5c, @@ -3340,23 +3340,23 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x48ce, 0x48ce, 0x48ce, 0x48ef, 0x48ce, 0x48ef, 0x48ef, 0x48ef, 0x490f, 0x48ee, 0x48ce, 0x40cd, 0x40cd, 0x40ad, 0x388b, 0x38ab, 0x38ab, 0x308a, 0x2868, 0x0000, 0x0000, 0x0000, 0x0020, 0x1846, - 0x1844, 0x1865, 0x0000, 0x0000, 0x0801, 0x0020, 0x0000, 0x0000, + 0x1844, 0x1865, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0803, 0x2006, 0x1805, 0x1004, 0x1806, 0x2007, 0x2007, 0x2007, 0x2007, 0x2007, 0x2028, 0x2028, 0x2007, 0x1806, 0x1805, 0x1806, 0x1806, 0x0803, 0x0803, 0x0000, 0x0020, 0x0020, - 0x0861, 0x1082, 0x10a2, 0x0020, 0x0000, 0x8300, 0x0020, 0x0000, - 0x7aa0, 0x0000, 0x0000, 0x7ae0, 0x1880, 0x0000, 0x9320, 0x5a20, - 0x0820, 0x8b00, 0x9b80, 0x0020, 0x9b80, 0x6a60, 0x0020, 0x6a60, - 0x6220, 0x0020, 0x9b40, 0x9b60, 0x0020, 0x8320, 0x9340, 0x0000, - 0x6280, 0x7260, 0x0000, 0x0000, 0x8b20, 0x0840, 0x0020, 0x82c0, - 0x0020, 0x0000, 0x7aa0, 0x0000, 0x0000, 0x6200, 0x4180, 0x0000, - 0x0820, 0x7aa0, 0x0000, 0x18a0, 0x72a0, 0x0000, 0x0000, 0x9b60, - 0x0020, 0x0000, 0x8b60, 0x0000, 0x0000, 0x1082, 0x1082, 0x1082, + 0x0861, 0x1082, 0x10a2, 0x0020, 0x0000, 0x9320, 0x5a20, 0x0000, + 0x9320, 0x5a20, 0x0000, 0x9320, 0x5a20, 0x0000, 0x9320, 0x5a20, + 0x0000, 0x9320, 0x5a20, 0x0000, 0x9320, 0x5a20, 0x0000, 0x9320, + 0x5a20, 0x0000, 0x9320, 0x5a20, 0x0000, 0x9320, 0x5a20, 0x0000, + 0x9320, 0x5a20, 0x0000, 0x9320, 0x5a20, 0x0000, 0x9320, 0x5a20, + 0x0000, 0x9320, 0x5a20, 0x0000, 0x9320, 0x5a20, 0x0000, 0x9320, + 0x5a20, 0x0000, 0x9320, 0x5a20, 0x0000, 0x9320, 0x5a20, 0x0000, + 0x9320, 0x5a20, 0x0000, 0x9320, 0x5a20, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0803, 0x1005, 0x1004, 0x1004, 0x1004, 0x1806, 0x2006, 0x2006, 0x1806, 0x1805, 0x1806, 0x1806, 0x1806, 0x1005, 0x1805, 0x0000, 0x0000, 0x0000, 0x0000, 0x0801, - 0x0841, 0x18c3, 0x18c3, 0x10c2, 0x10a2, 0x18a2, 0x0000, 0x524b, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0841, 0x18c3, 0x18c3, 0x10c2, 0x10a2, 0x18a2, 0x18e3, 0x18e3, + 0x0000, 0x18e3, 0x18e3, 0x18e3, 0x18e3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2007, 0x2027, 0x1847, 0x386c, 0x3069, 0x38ac, 0x490e, 0x490f, 0x48ef, 0x48ef, 0x48ef, 0x48ef, 0x48ce, @@ -3395,8 +3395,8 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0841, 0x0861, 0x1082, 0x10a2, 0x18c3, 0x0861, 0x4a09, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0841, 0x0861, 0x1082, 0x10a2, 0x18c3, 0x0861, 0x18e3, + 0x0000, 0x18e3, 0x18e3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3539,14 +3539,14 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7de, 0x0020, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xffdf, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9472, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xf79e, 0x0841, 0x0820, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0021, 0xa4f4, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0021, 0xa4f4, 0xa4f4, 0xa4f4, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, @@ -3573,7 +3573,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa27c, 0x30a7, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xffff, 0xffdf, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x9492, 0xffdf, 0xffbf, 0xffdf, 0xffff, 0xffdf, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, @@ -3584,9 +3584,9 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffdf, 0xffde, 0xf7ff, 0xffff, 0xffff, 0x0020, 0x0000, 0x0000, + 0xffdf, 0xffde, 0xf7ff, 0x31a6, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, - 0xffff, 0xffff, 0xf7be, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0xf7be, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, @@ -3596,7 +3596,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0xf8f2, 0xf891, 0xf851, 0xf851, 0xf871, 0xf8d1, 0xf8f2, 0xf8b1, 0xf8b2, 0xf912, 0xf933, 0xf933, 0xf8f2, 0xf892, 0xf891, 0xf871, 0xf8b2, 0xf892, 0xf8b3, 0xf8f3, 0xf913, 0xf913, 0xf933, 0xf933, - 0xf8d2, 0xfe7d, 0xf8d3, 0xf132, 0xffff, 0xffff, 0x0000, 0x0000, + 0xf8d2, 0xf933, 0xf8d3, 0xf132, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xffff, 0xffff, 0xf0f2, 0xe891, 0xf071, 0xf091, 0xf0f2, 0xf912, 0xf932, 0xf8f2, 0xf892, 0xf872, 0xf872, 0xf8d2, 0xf912, 0xf932, 0xf912, 0xf8b2, @@ -3614,17 +3614,17 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa25c, 0x30a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xffff, 0xffff, - 0xffff, 0x3eff, 0x775f, 0x6f3f, 0x673f, 0x7f5f, 0x977f, 0x977f, + 0x069f, 0x3eff, 0x775f, 0x6f3f, 0x673f, 0x7f5f, 0x977f, 0x977f, 0x877f, 0x977f, 0x7f5f, 0x7f5f, 0x6f5f, 0x6f5f, 0x6f5f, 0x775f, 0x573f, 0x4f1f, 0x573f, 0x3eff, 0x6f3f, 0x36df, 0x4f3f, 0x6f5f, 0x1edf, 0x16df, 0x7f5f, 0x5f5f, 0x5f3f, 0x4f1f, 0x7f7f, 0x8f5f, 0x1eff, 0xa79f, 0x373f, 0x369e, 0xb79f, 0xffff, 0x10c3, 0x2945, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf7be, 0xffff, 0xa79f, + 0x0000, 0x0000, 0x0000, 0x0000, 0x9472, 0xf7be, 0xffff, 0xa79f, 0x9f7f, 0x875f, 0x775f, 0x6f1f, 0x9f7f, 0x6f3f, 0x675f, 0xb79f, 0x9f7f, 0x9f7f, 0xa79f, 0x675f, 0x7f5f, 0xa79f, 0x6f5f, 0x6f5f, 0x775f, 0x8f9f, 0x777f, 0x7f7f, 0x877f, 0x877f, 0x977f, 0x6f5f, 0x7f7f, 0x877f, 0x6f3f, 0x775f, 0x6f7f, 0x6f5f, 0x773f, 0x773f, - 0x4eff, 0x4f1f, 0x2eff, 0xffff, 0xffff, 0x0820, 0x0000, 0x0000, + 0x4eff, 0x4f1f, 0x2eff, 0xffff, 0x31a6, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x1061, 0x0842, 0xffdf, 0xffff, 0xdfdf, 0x6f3f, 0x875f, 0x8f7f, 0xaf7f, 0x7f7f, 0x677f, 0x8f7f, 0x7f5f, 0x875f, 0x7f9f, 0x877f, 0x8f7f, 0x877f, @@ -3659,12 +3659,12 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x673f, 0xffff, 0x0ebf, 0xefff, 0x0e9e, 0xe7df, 0x9f5f, 0x0e1d, 0xefff, 0xffff, 0x0ebf, 0xf7ff, 0xa79f, 0xf7ff, 0x0ebf, 0x069f, 0xdfdf, 0x063d, 0x067e, 0xe7df, 0x269f, 0x0ebf, 0xf7df, 0xffff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf7be, 0xffff, 0x9fdf, + 0x0000, 0x0000, 0x0000, 0x0000, 0x9472, 0xf7be, 0xffff, 0x9fdf, 0xa79f, 0xe7df, 0xb7bf, 0xcfbf, 0x16be, 0xefdf, 0xf7ff, 0x16ff, 0xefff, 0x6f1f, 0xd7df, 0xe7df, 0xd7df, 0x067d, 0xefdf, 0x1eff, 0x8f5f, 0x673f, 0xe7df, 0xe7df, 0x067f, 0xe7bf, 0x36ff, 0xe7bf, 0x067f, 0x065e, 0xefdf, 0x36df, 0x26ff, 0xdfdf, 0x067f, 0x0e7e, - 0xd7df, 0x2edf, 0xf7df, 0x0e9f, 0x065f, 0xef9e, 0x0000, 0x0000, + 0xd7df, 0x2edf, 0xf7df, 0x0e9f, 0x065f, 0xef9e, 0x31a6, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf7be, 0xe7df, 0xefdf, 0x0e7f, 0x2edf, 0xefdf, 0x169f, 0xe7df, 0x169e, 0xf7ff, 0xc79f, 0x0e9e, 0xdfdf, 0xcfbf, 0x069e, 0xe7df, 0x0ebf, 0xcfbf, @@ -3674,14 +3674,14 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0xafbf, 0xce79, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x738e, 0xffdf, 0xf071, 0xf2f5, 0xfb15, 0xf933, 0xff1d, 0xf8f2, 0xfb17, 0xf891, 0xff7f, 0xf1d2, 0xf912, 0xfd5b, 0xfa13, 0xf993, 0xfe1d, - 0xfa74, 0xf973, 0xf993, 0xf8f2, 0xf8f2, 0xf953, 0xf871, 0xff7f, + 0xfa74, 0xf973, 0xff7f, 0xf8f2, 0xf8f2, 0xff7f, 0xf871, 0xff7f, 0xf973, 0xfc38, 0xff9e, 0xf0d2, 0xfb37, 0xf953, 0xffff, 0xfc17, 0xf913, 0xffff, 0xfe7c, 0xf911, 0xff7e, 0xf0f1, 0xeb75, 0xf79e, 0x0821, 0x0840, 0x0000, 0x0000, 0x0000, 0x0841, 0xf7be, 0xffbf, - 0xf132, 0xf973, 0xfc79, 0xf953, 0xf8f2, 0xf912, 0xf8f2, 0xf8d2, - 0xf0b1, 0xf912, 0xf0d1, 0xf932, 0xf932, 0xf932, 0xf932, 0xf933, - 0xf913, 0xf913, 0xf913, 0xf933, 0xf933, 0xf933, 0xf953, 0xf973, - 0xf953, 0xf953, 0xf933, 0xf8f2, 0xf8b2, 0xf8f2, 0xf8b2, 0xf810, + 0xf132, 0xf973, 0xff7f, 0xf953, 0xff7f, 0xf912, 0xff7f, 0xf9b4, + 0xf0b1, 0xff7f, 0xf0d1, 0xf932, 0xff7f, 0xf932, 0xff7f, 0xf933, + 0xf9b4, 0xf913, 0xf913, 0xff7f, 0xf9b4, 0xf933, 0xff7f, 0xf9b4, + 0xf953, 0xf9b4, 0xff7f, 0xf8f2, 0xff7f, 0xf8f2, 0xff7f, 0xf810, 0xfe7b, 0xf953, 0xf173, 0xfe3d, 0xffbf, 0x0841, 0x0000, 0x0000, 0x0000, 0x302a, 0x488f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3693,7 +3693,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x81b9, 0x1864, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xf7df, 0xa77f, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9492, 0xf7df, 0x069f, 0x067f, 0x069f, 0x069f, 0x06bf, 0x067f, 0x06bf, 0x06bf, 0x0e9f, 0x067f, 0x067f, 0x067e, 0x069f, 0x06bf, 0x0ebf, 0x06bf, 0x069f, 0x069f, 0x069f, 0x0ebf, 0x069f, 0x069f, 0x065e, 0x065e, 0x067e, @@ -3704,7 +3704,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x06bf, 0x065e, 0x065e, 0x065e, 0x067e, 0x06bf, 0x06bf, 0x0edf, 0x0edf, 0x0ebf, 0x06bf, 0x069f, 0x067f, 0x063e, 0x067e, 0x069f, 0x06bf, 0x06bf, 0x06bf, 0x0edf, 0x0ebf, 0x069f, 0x067e, 0x065e, - 0x069f, 0x06bf, 0x06df, 0x06bf, 0x067f, 0x05ff, 0x95fa, 0xcdbe, + 0x069f, 0x06bf, 0x06df, 0x06bf, 0x067f, 0x05ff, 0x95fa, 0x0020, 0x0020, 0x0020, 0x0000, 0x0020, 0x7c0f, 0xf77d, 0x36bf, 0x0e5f, 0x063e, 0x0e9f, 0x0e9f, 0x067f, 0x067e, 0x067e, 0x069f, 0x069f, 0x0e9f, 0x06df, 0x069f, 0x065e, 0x069f, 0x069f, 0x0ebf, 0x06bf, @@ -3733,7 +3733,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa31f, 0x92bd, 0x1885, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xffff, 0xbfbf, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9492, 0xffff, 0x069f, 0x065e, 0x16bf, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x067f, 0x067e, 0x067f, 0x069f, 0x069f, 0x06bf, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x06bf, @@ -3744,7 +3744,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x069f, 0x067e, 0x067e, 0x067f, 0x069f, 0x06bf, 0x0ebf, 0x06bf, 0x0ebf, 0x069f, 0x069f, 0x06bf, 0x069f, 0x067f, 0x067e, 0x069f, 0x06bf, 0x06bf, 0x06bf, 0x069f, 0x067f, 0x067f, 0x067f, 0x069f, - 0x069f, 0x069f, 0x069f, 0x069f, 0x067f, 0x067f, 0xad7d, 0xad7f, + 0x069f, 0x069f, 0x069f, 0x069f, 0x067f, 0x067f, 0xad7d, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x7c11, 0xffff, 0x4f1f, 0xe7de, 0x065e, 0x067f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x067f, 0x069f, 0x06bf, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, @@ -3773,19 +3773,19 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2046, 0xa2bd, 0x0821, 0x0020, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x1082, 0xf7ff, 0x2e7e, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x9492, 0xf7ff, 0x2e7e, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069e, 0x067e, 0x069f, 0x06bf, 0x06bf, 0x067e, 0x067e, 0x069f, 0x06bf, 0x06bf, 0x069f, 0x069f, 0x069f, 0x06bf, 0x06df, 0x06bf, 0x06bf, 0x069f, 0x067e, 0x065e, 0x067f, 0x069f, 0x067f, 0x069f, 0x069f, 0x06bf, 0x06bf, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x067f, - 0xa55f, 0x0020, 0x0000, 0x0020, 0xf7bf, 0x977f, 0x065e, 0x067f, + 0xa55f, 0x0020, 0x0000, 0x9472, 0xf7bf, 0x977f, 0x065e, 0x067f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x067e, 0x067f, 0x06bf, 0x0ebf, 0x0ebf, 0x0ebf, 0x06bf, 0x067e, 0x067e, 0x067e, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x06bf, 0x069f, 0x067f, 0x067f, 0x069f, 0x069f, - 0x069f, 0x069f, 0x067f, 0x067f, 0x069f, 0x069f, 0x143f, 0x853f, - 0x0000, 0x0000, 0x0020, 0xf7be, 0xffdf, 0x0e5d, 0x067e, 0x069f, + 0x069f, 0x069f, 0x067f, 0x067f, 0x069f, 0x069f, 0x143f, 0x0020, + 0x0000, 0x0000, 0x0020, 0x7c11, 0xffdf, 0x0e5d, 0x067e, 0x069f, 0x069f, 0x067f, 0x067f, 0x069f, 0x069f, 0x06bf, 0x069f, 0x067f, 0x069f, 0x069f, 0x06bf, 0x06bf, 0x06bf, 0x067e, 0x067e, 0x067e, 0x069e, 0x06bf, 0x06bf, 0x06bf, 0x069f, 0x069f, 0x06bf, 0x06bf, @@ -3813,18 +3813,18 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2866, 0xaafd, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffdf, 0xe7df, 0x06bf, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x067f, 0x06bf, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x06bf, 0x06bf, 0xf7ff, 0xf7ff, 0xf7df, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7df, 0xf7df, 0xffdf, 0xe7bf, 0x069f, 0x067f, 0x067f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x065f, - 0x52d7, 0x0000, 0x0000, 0x4208, 0xf7df, 0x3e7e, 0x065e, 0x067f, + 0x52d7, 0x0000, 0x0000, 0x9472, 0xf7df, 0x3e7e, 0x065e, 0x067f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x06bf, 0x36bf, 0xe7bf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xf7df, 0xf7df, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0x06bf, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, - 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x06bf, 0x5d5f, 0x8c3c, + 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x06bf, 0x5d5f, 0x0020, 0x0000, 0x0020, 0x0000, 0xffff, 0x5eff, 0x06bf, 0x06bf, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x067e, 0x0e9f, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffff, @@ -3853,18 +3853,18 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2887, 0xa2dd, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0xffff, 0xd7df, 0x0e9f, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0xffff, 0x067f, 0x0e9f, 0x067f, 0x067f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x06bf, 0x06bf, 0x0ebf, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xf7df, 0x06bf, 0x067e, 0x067f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x065e, 0x061f, - 0x841c, 0x0000, 0x0000, 0x736e, 0xf7be, 0x4edf, 0x067e, 0x067f, + 0x841c, 0x0000, 0x0000, 0x9472, 0xf7be, 0x4edf, 0x067e, 0x067f, 0x067f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x067e, 0x46df, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffff, 0xf7df, 0x065e, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, - 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x84be, 0x841a, + 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x84be, 0x0020, 0x0000, 0x0020, 0x0000, 0xf7df, 0x5ede, 0x069f, 0x06bf, 0x069f, 0x067f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x06bf, 0x06bf, 0x069f, 0x16df, 0xffdf, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffdf, @@ -3881,7 +3881,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x8b5c, 0x937c, 0x937c, 0x937d, 0x939d, 0x937d, 0x937d, 0x937d, 0x937d, 0x937d, 0x937d, 0x937d, 0x937d, 0x937d, 0x937d, 0x937d, 0x937d, 0x937d, 0x937d, 0x935d, 0x935d, 0x8b3d, 0x935d, 0x939d, - 0x9b7c, 0xf913, 0xf913, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, + 0x9b7c, 0xff7e, 0xf913, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf953, 0xc2fa, 0xa45e, 0x0021, 0x0000, 0x0000, 0x0000, 0xa27c, 0x0821, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3893,7 +3893,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2887, 0xa2bd, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xffff, 0xf7ff, 0x0e9f, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xffff, 0x067f, 0x0e9f, 0x067f, 0x067f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x0e9f, 0xf7df, 0x6b4c, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, @@ -3901,13 +3901,13 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x067f, 0x05fd, 0x66df, 0x0000, 0x0000, 0x0841, 0xef9e, 0x065e, 0x069f, 0x069f, 0x069f, 0x069f, 0x067f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x0e7e, - 0xe7df, 0xffbe, 0x0000, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, + 0x069f, 0xffbe, 0x0000, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0000, 0x0020, 0x0020, 0x0000, 0xefbf, 0x063e, 0x069f, 0x069f, 0x069f, 0x069f, - 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x9c7f, 0x1085, + 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x9c7f, 0x0020, 0x0000, 0x0000, 0x0021, 0xf7df, 0x4edf, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x067e, - 0xffff, 0xffdf, 0x0020, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, + 0x069f, 0xffdf, 0x0020, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3920,7 +3920,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0021, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2146, 0xffff, 0xf953, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf932, 0xf933, 0xf953, 0xc0f2, 0xa39c, 0x93fa, 0x0020, 0x0000, 0x0000, 0x0000, 0xa25c, 0x0821, 0x0000, 0x0000, 0x0000, @@ -3933,7 +3933,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2888, 0xa29d, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0861, 0xf7df, 0xbfdf, 0x065d, + 0x0000, 0x0000, 0x0000, 0x0000, 0x9492, 0xf7df, 0x067f, 0x065d, 0x067f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x0e7e, 0xefdf, 0x41e7, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3941,13 +3941,13 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x0e3e, 0xbf1f, 0x0000, 0x0000, 0x0000, 0xf7bf, 0x067e, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x06bf, 0x0e9e, - 0xffff, 0xe73c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0x732d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xefbf, 0x063d, 0x067f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x06bf, 0x069f, 0x067f, 0x063e, 0x8c1e, 0x0862, 0x0000, 0x0020, 0x1082, 0xf7df, 0x16bf, 0x065e, 0x069f, 0x069f, - 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x067e, 0x3efe, - 0xbe39, 0x6b8d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x067e, 0x069f, + 0x069f, 0xffbf, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3955,7 +3955,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0020, 0xce9a, 0xff1e, 0xf0d2, 0xf0f2, 0xf912, 0xf912, 0xf912, + 0x0020, 0xce9a, 0xff1e, 0xf933, 0xf933, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf932, 0xe932, 0xc8b0, 0x9bbd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3981,13 +3981,13 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x067f, 0x069f, 0x069f, 0x069f, 0x06bf, 0x06bf, 0x0e5f, 0xff3f, 0x0000, 0x0000, 0x0000, 0xf7df, 0x067f, 0x069f, 0x069f, 0x067f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x0e7e, - 0xffbf, 0x94d6, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffbf, 0x732d, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, - 0x0841, 0x732d, 0xefdf, 0x065e, 0x069f, 0x069f, 0x069f, 0x069f, + 0x0841, 0xffdf, 0x065f, 0x065e, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x06bf, 0x051e, 0x941d, 0x0000, 0x0020, 0x0820, 0x52aa, 0xf7df, 0x065f, 0x065e, 0x067e, 0x069f, - 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x06bf, 0xefbf, - 0xdebb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x06bf, 0x069f, + 0xdebb, 0x6354, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3995,12 +3995,12 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, - 0x1082, 0xf79e, 0xea35, 0xf0d1, 0xf8f2, 0xf912, 0xf912, 0xf8f2, + 0x1082, 0xf79e, 0xea35, 0xf933, 0xf8f2, 0xf912, 0xf912, 0xf8f2, 0xf912, 0xf912, 0xf912, 0xf912, 0xf933, 0xc8d0, 0xb8af, 0x937d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a69, 0xf77e, 0xe80e, 0xf112, 0xf912, 0xf912, 0xf912, 0xf912, 0xf932, 0xf932, 0xf932, 0xf912, 0xf132, 0xd0b0, 0xa3fd, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa7d, 0x1043, 0x0000, 0x0000, 0x0000, @@ -4013,20 +4013,20 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2887, 0xa29c, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0020, 0xef7d, 0xf7df, 0x067f, 0x069f, + 0x0000, 0x0000, 0x0000, 0x0020, 0x9492, 0xf7df, 0x067f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x067f, 0x069f, 0x069f, 0x05ff, 0x0e1f, 0xd63f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9cb3, 0xf7be, 0xffdf, 0x0e7f, 0x067f, 0x067f, 0x069f, 0x067f, 0x067f, 0x069f, 0x069f, 0x069f, 0x06bf, 0x069f, 0xbdbf, 0xb53d, - 0x0820, 0x0020, 0x0841, 0xffff, 0x065e, 0x067f, 0x067f, 0x069f, + 0x0820, 0x0020, 0x9472, 0xffff, 0x065e, 0x067f, 0x067f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x0dfd, - 0xff1f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xffdf, - 0xf7be, 0xffdf, 0x0e3d, 0x065f, 0x067f, 0x067f, 0x067f, 0x069f, + 0xffbf, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x0000, + 0xffdf, 0x065f, 0x0e3d, 0x065f, 0x067f, 0x067f, 0x067f, 0x069f, 0x069f, 0x069f, 0x069f, 0x06bf, 0x0ebf, 0x04ff, 0xac7d, 0x0000, 0x0000, 0x0020, 0xf79e, 0x0e9f, 0x069f, 0x069f, 0x067f, 0x067f, - 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x06bf, 0x7d5e, + 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x06bf, 0xffbf, 0x7356, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -4035,7 +4035,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, - 0xffdf, 0xebd7, 0xf112, 0xf0f2, 0xf8f2, 0xf8f2, 0xf912, 0xf8f2, + 0xffdf, 0xebd7, 0xf933, 0xf933, 0xf8f2, 0xf8f2, 0xf912, 0xf8f2, 0xf912, 0xf912, 0xf912, 0xf912, 0xf8f2, 0xa0af, 0xa8ae, 0x9b9e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -4053,20 +4053,20 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0x308b, 0xa2dd, 0x0001, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0020, 0xf7be, 0xffff, 0x069f, 0x069f, + 0x0000, 0x0000, 0x0000, 0x0000, 0x9492, 0xffff, 0x069f, 0x069f, 0x069f, 0x069f, 0x069f, 0x067f, 0x067f, 0x067f, 0x067f, 0x067f, 0x05df, 0x0d9f, 0xffbf, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0xbdf9, 0xf7ff, 0xffff, 0x0e9f, 0x069f, 0x067f, 0x067f, 0x067f, 0x067f, 0x067f, 0x069f, 0x069f, 0x069f, 0x067f, 0xc59f, 0xb4fe, - 0x0020, 0x0000, 0x0020, 0xffff, 0x063e, 0x065f, 0x067f, 0x069f, + 0x0020, 0x0000, 0x9472, 0xffff, 0x063e, 0x065f, 0x067f, 0x069f, 0x069f, 0x069f, 0x069f, 0x067f, 0x067f, 0x069f, 0x069f, 0x0ddd, - 0xdeff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, - 0xffff, 0xffff, 0x067f, 0x067f, 0x067f, 0x067f, 0x067f, 0x067f, + 0xffbf, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffdf, + 0x065f, 0x067f, 0x067f, 0x067f, 0x067f, 0x067f, 0x067f, 0x067f, 0x069f, 0x069f, 0x069f, 0x069f, 0x0e9f, 0x151f, 0xbd7e, 0x0000, 0x0000, 0x0000, 0xf79e, 0x06bf, 0x069f, 0x067f, 0x067f, 0x067f, - 0x067f, 0x067f, 0x067f, 0x067f, 0x069f, 0x069f, 0x065e, 0x7cfe, + 0x067f, 0x067f, 0x067f, 0x067f, 0x069f, 0x069f, 0x065e, 0xffbf, 0x6354, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -4075,7 +4075,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, - 0xffdf, 0xf357, 0xf112, 0xf912, 0xf8f2, 0xf8f2, 0xf912, 0xf912, + 0xffdf, 0xf357, 0xf933, 0xf912, 0xf8f2, 0xf8f2, 0xf912, 0xf912, 0xf912, 0xf912, 0xf8f2, 0xf912, 0xf912, 0xa8b0, 0xb0af, 0xac5f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -4093,19 +4093,19 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa29d, 0x410b, 0xaa7e, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0841, 0xffff, 0xffff, 0x069f, 0x069f, + 0x0000, 0x0000, 0x0000, 0x9492, 0xffff, 0x069f, 0x069f, 0x069f, 0x067f, 0x067f, 0x065f, 0x065f, 0x065f, 0x067f, 0x069f, 0x06bf, 0x0e9f, 0x5efe, 0xb47c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x31a6, 0xffdf, 0xf7ff, 0xdfdf, 0x065e, 0x069f, 0x069f, 0x067f, 0x067f, 0x067f, 0x069f, 0x069f, 0x067f, 0x067f, 0x067f, 0x065e, 0xb4bf, 0x9bdd, - 0x0000, 0x0000, 0x0020, 0xffff, 0x065f, 0x067f, 0x067f, 0x067f, - 0x067f, 0x067f, 0x069f, 0x069f, 0x069f, 0x067f, 0x065f, 0x3eff, - 0xdefe, 0x0821, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffdf, 0xf7df, 0xffdf, + 0x0000, 0x0000, 0x9472, 0xffff, 0x065f, 0x067f, 0x067f, 0x067f, + 0x067f, 0x067f, 0x069f, 0x069f, 0x069f, 0x067f, 0x065f, 0xffbf, + 0x732d, 0x0821, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x732d, 0xffdf, 0x065f, 0x065e, 0x065f, 0x067f, 0x067f, 0x067f, 0x065f, 0x067f, 0x069f, 0x067f, 0x067f, 0x065f, 0x067e, 0x065f, 0x9cdd, 0x0000, 0x0020, - 0x0840, 0xffdf, 0xf7df, 0x069f, 0x067f, 0x067f, 0x067f, 0x067f, + 0x0840, 0x7c11, 0xf7df, 0x069f, 0x067f, 0x067f, 0x067f, 0x067f, 0x067f, 0x067f, 0x067f, 0x067f, 0x067f, 0x065f, 0x067f, 0xf75e, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffdf, 0xf7be, 0xf7df, 0xf7df, 0xf7df, 0xf7df, @@ -4115,10 +4115,10 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x2965, 0xf7be, 0xffbf, 0xffbf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffbf, 0xffbf, 0xffdf, 0xffbf, - 0xffdf, 0xf0d2, 0xf112, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, + 0xffdf, 0xf933, 0xf933, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf8f2, 0xf8f2, 0xf912, 0xb45f, 0xbcdf, 0x0021, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffde, 0xffbf, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9cb3, 0xffde, 0xffbf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffbf, 0xf57a, 0xf932, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf932, 0xf932, @@ -4133,32 +4133,32 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9a1b, 0x5972, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0xffff, 0x4efe, 0x067e, 0x063f, 0x05ff, - 0x05ff, 0x05ff, 0x059f, 0x05ff, 0x051f, 0x05bf, 0x051f, 0x063f, + 0x0000, 0x0000, 0x0020, 0x9492, 0xffff, 0x039f, 0x069f, 0x039f, + 0x069f, 0x039f, 0x069f, 0x039f, 0x069f, 0x039f, 0x069f, 0x039f, 0x7e5f, 0xf7bf, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x39c7, 0xffff, 0xf7ff, 0x063f, - 0x063f, 0x061f, 0x061f, 0x063f, 0x061f, 0x065f, 0x061f, 0x067f, - 0x04df, 0x069f, 0x04ff, 0x065e, 0x03bd, 0x037d, 0x9c3f, 0x0000, - 0x0020, 0x9cd3, 0xffff, 0x063f, 0x061f, 0x05df, 0x05df, 0x053e, - 0x05bf, 0x05df, 0x053f, 0x057f, 0x05df, 0x057f, 0x051e, 0xf7be, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffdf, 0x05fe, 0x05fe, 0x05de, - 0x061f, 0x061f, 0x061f, 0x05ff, 0x061f, 0x063f, 0x04df, 0x04df, - 0x067f, 0x05bf, 0x05ff, 0x043d, 0x0d1f, 0x9c7e, 0x0000, 0x0820, - 0x0840, 0xffff, 0xffdf, 0x063f, 0x063f, 0x063f, 0x05bf, 0x05df, - 0x05bf, 0x063f, 0x065f, 0x05ff, 0x049e, 0x047d, 0xffff, 0x10a2, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0841, 0xffff, 0xf7df, 0x05fe, 0x065f, 0x065f, 0x065f, 0x063e, - 0x061e, 0x063e, 0x065e, 0x065f, 0x065f, 0x065f, 0x069f, 0x069f, - 0x067f, 0x063e, 0x065f, 0x065f, 0x065f, 0x061e, 0x05ff, 0xf7de, + 0x039f, 0x069f, 0x039f, 0x069f, 0x039f, 0x069f, 0x039f, 0x069f, + 0x039f, 0x069f, 0x039f, 0x069f, 0x039f, 0x069f, 0x9c3f, 0x0000, + 0x0020, 0x9cd3, 0xffff, 0x039f, 0x069f, 0x039f, 0x069f, 0x039f, + 0x069f, 0x039f, 0x069f, 0x039f, 0x069f, 0x039f, 0x069f, 0xf7be, + 0x732d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x732d, 0xf7df, 0x041e, 0x041e, + 0x041e, 0x041e, 0x041e, 0x041e, 0x041e, 0x041e, 0x041e, 0x041e, + 0x041e, 0x041e, 0x041e, 0x041e, 0x0d1f, 0x9c7e, 0x0000, 0x0820, + 0x0840, 0x7c11, 0xffdf, 0x069f, 0x039f, 0x069f, 0x039f, 0x069f, + 0x039f, 0x069f, 0x039f, 0x069f, 0x039f, 0x069f, 0xffff, 0x6354, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0841, 0xffff, 0xf7df, 0x069f, 0x039f, 0x069f, 0x039f, 0x069f, + 0x039f, 0x069f, 0x039f, 0x069f, 0x039f, 0x069f, 0x039f, 0x069f, + 0x039f, 0x069f, 0x039f, 0x069f, 0x039f, 0x069f, 0x039f, 0xf7de, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xffff, 0xffff, 0xf8b3, 0xf913, 0xf933, 0xf913, 0xf8b3, 0xf893, 0xf872, 0xf872, - 0xf8b2, 0xf8d3, 0xf8f3, 0xf8f3, 0xf913, 0xf913, 0xf8d2, 0xf873, - 0xf8b2, 0xf112, 0xf912, 0xf112, 0xf912, 0xf912, 0xf912, 0xf913, + 0xf8b2, 0xf8d3, 0xf8f3, 0xf8f3, 0xf913, 0xf913, 0xf933, 0xf933, + 0xf933, 0xf933, 0xf933, 0xf933, 0xf912, 0xf912, 0xf912, 0xf913, 0xf932, 0xf913, 0xf913, 0xf8d1, 0xa35d, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0x0020, 0xffff, 0xffff, 0xf872, 0xf873, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xf872, 0xf873, 0xf892, 0xf8b2, 0xf8d2, 0xf8b2, 0xf8b2, 0xf8b2, 0xf8d3, 0xf8d3, 0xf8d2, 0xf8d2, 0xf8d2, 0xf8f3, 0xf8b2, 0xf872, 0xf872, 0xf8f3, 0xf933, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, @@ -4173,32 +4173,32 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9a1b, 0x5951, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0841, 0xffff, 0x46de, 0x067f, 0x04be, 0x051f, - 0x053f, 0x04df, 0x051f, 0x059f, 0x04df, 0x057f, 0x04bf, 0x055f, + 0x0000, 0x0000, 0x0841, 0x9492, 0xffff, 0x039f, 0x039f, 0x039f, + 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x55ff, 0xef9e, 0x0861, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0841, 0x3186, 0xefdf, 0xe7df, 0x063f, - 0x05bf, 0x055e, 0x057e, 0x057f, 0x057f, 0x057f, 0x057f, 0x063f, - 0x047f, 0x0e7f, 0x04ff, 0x061e, 0x03dd, 0x039d, 0x93fe, 0x0000, - 0x0020, 0x9472, 0xffff, 0x069f, 0x059e, 0x053f, 0x051f, 0x04bf, - 0x051f, 0x04ff, 0x04df, 0x04df, 0x053f, 0x053e, 0x04ff, 0xf79e, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0020, 0x0020, 0x0861, 0xffff, 0xf7ff, 0x367e, 0x05df, 0x05bf, - 0x05bf, 0x05bf, 0x047f, 0x04df, 0x059f, 0x059f, 0x047f, 0x045f, - 0x067f, 0x059f, 0x04df, 0x045d, 0x051f, 0x9c3e, 0x0000, 0x0000, - 0x0820, 0xffff, 0xffdf, 0x063f, 0x057f, 0x057f, 0x04ff, 0x051f, - 0x051f, 0x055f, 0x059f, 0x057f, 0x049f, 0x047f, 0xf7df, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0841, 0xffdf, 0xf7ff, 0x05ff, 0x063f, 0x061f, 0x05ff, 0x05de, - 0x05df, 0x05ff, 0x05ff, 0x063f, 0x065f, 0x065f, 0x065f, 0x065f, - 0x065f, 0x061f, 0x061f, 0x05ff, 0x05ff, 0x05de, 0x05be, 0xffde, + 0x0000, 0x0000, 0x0000, 0x0841, 0x3186, 0xefdf, 0xe7df, 0x039f, + 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, + 0x039f, 0x039f, 0x039f, 0x039f, 0x03dd, 0x039d, 0x93fe, 0x0000, + 0x0020, 0x9472, 0xffff, 0x069f, 0x039f, 0x039f, 0x039f, 0x039f, + 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0xf79e, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0020, 0x0020, 0x0861, 0x732d, 0xf7ff, 0x041e, 0x041e, 0x041e, + 0x041e, 0x041e, 0x041e, 0x041e, 0x041e, 0x041e, 0x041e, 0x041e, + 0x041e, 0x041e, 0x041e, 0x041e, 0x051f, 0x9c3e, 0x0000, 0x0000, + 0x0820, 0xef9f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, + 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0xf7df, 0x6354, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0841, 0xffdf, 0xf7ff, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, + 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, + 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0xffde, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xffdf, 0xffff, 0xf133, 0xf133, 0xf933, 0xf933, 0xf933, 0xf913, 0xf913, 0xf913, - 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, 0xf913, 0xf0f2, - 0xf112, 0xf912, 0xf0f2, 0xf8f2, 0xf912, 0xf912, 0xf912, 0xf912, + 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, + 0xf933, 0xf933, 0xf933, 0xf933, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf914, 0xf933, 0xd8f0, 0x9bde, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0x0841, 0xffdf, 0xffff, 0xf933, 0xf913, + 0x0000, 0x0000, 0x0000, 0xffff, 0xf913, 0xf913, 0xf913, 0xf913, 0xf913, 0xf913, 0xf913, 0xf912, 0xf913, 0xf913, 0xf933, 0xf913, 0xf913, 0xf913, 0xf913, 0xf933, 0xf933, 0xf913, 0xf8f3, 0xf913, 0xf913, 0xf913, 0xf912, 0xf912, 0xf912, 0xf932, 0xf912, 0xf912, @@ -4213,32 +4213,32 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa25b, 0x6171, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0841, 0xffff, 0x2ebf, 0x0edf, 0x063f, 0x063e, - 0x063f, 0x065f, 0x067f, 0x069f, 0x067f, 0x067f, 0x069f, 0x069f, + 0x0000, 0x0000, 0x0841, 0xffff, 0x2ebf, 0x0edf, 0x041e, 0x063e, + 0x063f, 0x065f, 0x041e, 0x069f, 0x067f, 0x067f, 0x041e, 0x069f, 0x7edf, 0xf79e, 0x1082, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, - 0x0020, 0x0020, 0x0841, 0xffff, 0xf7df, 0x057e, 0x065f, 0x067f, - 0x069f, 0x067f, 0x063f, 0x069f, 0x067f, 0x063f, 0x067f, 0x067f, - 0x067f, 0x069f, 0x067f, 0x067f, 0x051e, 0x2c1e, 0x0000, 0x0000, - 0x0841, 0xffff, 0xffff, 0x061e, 0x065f, 0x067f, 0x067f, 0x067f, - 0x065f, 0x063e, 0x063f, 0x065f, 0x067f, 0x069f, 0x061f, 0xf79e, + 0x0020, 0x0020, 0x0841, 0xffff, 0xf7df, 0x057e, 0x065f, 0x041e, + 0x069f, 0x067f, 0x063f, 0x041e, 0x067f, 0x063f, 0x067f, 0x041e, + 0x067f, 0x069f, 0x041e, 0x067f, 0x051e, 0x2c1e, 0x0000, 0x0000, + 0x0841, 0x9472, 0xffff, 0x061e, 0x041e, 0x067f, 0x067f, 0x067f, + 0x065f, 0x041e, 0x063f, 0x065f, 0x067f, 0x041e, 0x061f, 0xf79e, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, - 0x0841, 0x18e3, 0xefbf, 0xf7df, 0x169f, 0x0e3f, 0x065f, 0x063f, - 0x063f, 0x063f, 0x067f, 0x067f, 0x065f, 0x065f, 0x065f, 0x065f, - 0x067f, 0x067f, 0x065f, 0x065f, 0x15ff, 0xc55f, 0x0000, 0x0020, - 0x0020, 0xffff, 0xffff, 0x067f, 0x063f, 0x063f, 0x063f, 0x061f, - 0x061e, 0x061e, 0x065f, 0x065f, 0x069f, 0x065f, 0xf7bf, 0x0000, + 0x0841, 0x732d, 0x732d, 0xf7df, 0x041e, 0x0e3f, 0x065f, 0x041e, + 0x063f, 0x063f, 0x067f, 0x041e, 0x065f, 0x065f, 0x065f, 0x041e, + 0x067f, 0x041e, 0x065f, 0x065f, 0x041e, 0xc55f, 0x0000, 0x0020, + 0x0020, 0xef9f, 0x063f, 0x067f, 0x063f, 0x063f, 0x063f, 0x061f, + 0x061e, 0x061e, 0x065f, 0x065f, 0x069f, 0x065f, 0xf7bf, 0x6354, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0841, 0xffff, 0xffff, 0x0e5f, 0x065f, 0x065f, 0x063f, 0x065f, - 0x06bf, 0x063f, 0x065f, 0x065f, 0x067f, 0x067f, 0x065f, 0x065f, - 0x063f, 0x065f, 0x061f, 0x061e, 0x061f, 0x065f, 0x0e1f, 0xffff, + 0x0841, 0xffff, 0xffff, 0x0e5f, 0x065f, 0x039f, 0x063f, 0x065f, + 0x039f, 0x063f, 0x065f, 0x039f, 0x067f, 0x067f, 0x039f, 0x065f, + 0x063f, 0x039f, 0x061f, 0x061e, 0x039f, 0x065f, 0x0e1f, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xffdf, 0xffbf, 0xf933, 0xf933, 0xf913, 0xf913, 0xf913, 0xf913, 0xf933, 0xf913, - 0xf933, 0xf933, 0xf913, 0xf913, 0xf913, 0xf8f2, 0xf8f2, 0xf912, - 0xf912, 0xf912, 0xf112, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, + 0xf933, 0xf933, 0xf913, 0xf913, 0xf913, 0xf8f2, 0xf8f2, 0xf933, + 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, 0xf912, 0xf8f3, 0xaa17, 0xa9f5, 0xa41d, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0020, 0xa514, 0xff7e, 0xf150, 0xf953, 0xf932, 0xf932, + 0x0000, 0x0000, 0xffff, 0xf913, 0xf913, 0xf913, 0xf932, 0xf932, 0xf112, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf913, 0xf913, 0xf933, 0xf933, 0xf912, 0xf912, 0xf913, 0xf912, 0xf912, 0xf912, 0xf912, 0xf933, 0xf933, @@ -4253,32 +4253,32 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa25c, 0x5950, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0xffdf, 0x04dc, 0x057e, 0x05df, 0x045f, - 0x04bf, 0x055f, 0x0cff, 0x045f, 0x063f, 0x041e, 0x041e, 0x043f, + 0x0000, 0x0000, 0x0020, 0xffff, 0x04dc, 0x041e, 0x041e, 0x041e, + 0x041e, 0x041e, 0x041e, 0x045f, 0x041e, 0x041e, 0x041e, 0x043f, 0x9e7f, 0xffff, 0xe71c, 0xdefb, 0xdefb, 0xe73c, 0xef5d, 0xe75c, - 0xe73c, 0xe71c, 0xef3c, 0xa73e, 0x2e3f, 0x059e, 0x053f, 0x04ff, - 0x049f, 0x041f, 0x067f, 0x045f, 0x047f, 0x067f, 0x03fe, 0x041e, - 0x05fe, 0x045e, 0x047f, 0x043f, 0x2d3e, 0xa4fd, 0x0000, 0x0000, - 0x0841, 0xffff, 0xffff, 0x05ff, 0x059f, 0x051f, 0x041f, 0x05df, - 0x049e, 0x05fe, 0x041e, 0x053f, 0x065f, 0x041f, 0x03de, 0xffdf, + 0xe73c, 0xe71c, 0xef3c, 0xa73e, 0x2e3f, 0x041e, 0x041e, 0x041e, + 0x041e, 0x041e, 0x041e, 0x041e, 0x041e, 0x041e, 0x041e, 0x041e, + 0x041e, 0x041e, 0x047f, 0x043f, 0x2d3e, 0xa4fd, 0x0000, 0x0000, + 0x0841, 0x9472, 0xffff, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, + 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0xffdf, 0xdefb, 0xe71c, 0xe71c, 0xdefb, 0xdefb, 0xdefb, 0xe71b, 0xdf1b, - 0xdefb, 0xe71c, 0x1ddf, 0x1d9f, 0x0d1f, 0x045f, 0x045f, 0x041e, - 0x053e, 0x059f, 0x041f, 0x05ff, 0x055f, 0x05bf, 0x03fe, 0x03de, - 0x039e, 0x04df, 0x061f, 0x035f, 0x5cfe, 0xabde, 0x0000, 0x0020, - 0x0820, 0xffff, 0xffff, 0x0e7f, 0x051f, 0x043e, 0x05de, 0x055e, - 0x039e, 0x047e, 0x04ff, 0x0c1f, 0x04bf, 0x043e, 0xf7bf, 0x0000, + 0xdefb, 0xe71c, 0xf7df, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, + 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, + 0x039f, 0x039f, 0x061f, 0x035f, 0x5cfe, 0xabde, 0x0000, 0x0020, + 0x0820, 0xef9f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, + 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0xf7bf, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x10a2, 0xffff, 0x359e, 0x04ff, 0x045e, 0x03fc, 0x03dc, 0x041d, - 0x051f, 0x043f, 0x045f, 0x061f, 0x045f, 0x04ff, 0x051f, 0x04de, - 0x043d, 0x03fd, 0x045d, 0x045d, 0x047f, 0x0dbf, 0x7f1f, 0x9cf3, + 0x10a2, 0xffff, 0x359e, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, + 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, + 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x7f1f, 0xef5c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xffdf, 0xf438, 0xf112, 0xf913, 0xf913, 0xf913, 0xf913, 0xf913, 0xf913, 0xf913, 0xf933, 0xf933, 0xf913, 0xf913, 0xf912, 0xf8f2, 0xf8f2, 0xf912, - 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf0f2, 0xf912, + 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf912, 0xf933, 0xf912, 0xf173, 0xcdde, 0x620f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xbdd6, 0xd679, 0xee7b, 0xf9d2, 0xf953, 0xf932, 0xf912, 0xf912, + 0x0000, 0xd679, 0xf913, 0xf913, 0xf913, 0xf913, 0xf912, 0xf912, 0xf913, 0xf912, 0xf912, 0xf913, 0xf913, 0xf912, 0xf8f2, 0xf912, 0xf913, 0xf913, 0xf913, 0xf913, 0xf913, 0xf933, 0xf933, 0xf913, 0xf913, 0xf912, 0xf912, 0xf912, 0xf912, 0xf913, 0xf933, 0xf973, @@ -4293,32 +4293,32 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa25c, 0x594f, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xf7df, 0x05fe, 0x067f, 0x06ff, 0x0c5f, + 0x0000, 0x0000, 0x9492, 0xffff, 0x05fe, 0x041e, 0x06ff, 0x0c5f, 0x0d7f, 0x0e5f, 0x0cbf, 0x041f, 0x05fe, 0x04fe, 0x05bd, 0x041e, 0x865e, 0xdf9f, 0xe79f, 0xdf9f, 0xdf9f, 0xefbf, 0xefbf, 0xe77f, - 0xdf7f, 0xdf7f, 0xe79f, 0x6ebf, 0x05ff, 0x03bd, 0x04be, 0x051f, + 0xdf7f, 0xdf7f, 0xe79f, 0x6ebf, 0x05ff, 0x03bd, 0x04be, 0x041e, 0x043f, 0x041f, 0x0f1f, 0x0bdf, 0x0c5f, 0x06bf, 0x03de, 0x03de, 0x063e, 0x041e, 0x051f, 0x0cbf, 0x34df, 0xbd7d, 0x0000, 0x0020, - 0x0840, 0xffff, 0xffff, 0x063f, 0x05bf, 0x055f, 0x041f, 0x05de, + 0x0840, 0xf7ff, 0x03df, 0x063f, 0x05bf, 0x055f, 0x041f, 0x05de, 0x045f, 0x06bf, 0x03ff, 0x055f, 0x063f, 0x047f, 0x047f, 0xe7bf, 0xdf9f, 0xd77f, 0xdf7f, 0xe79f, 0xe79f, 0xdf7f, 0xe79f, 0xefbf, 0xe7bf, 0xcf7f, 0x053e, 0x04ff, 0x04ff, 0x053f, 0x051f, 0x0d7f, 0x065f, 0x065f, 0x03ff, 0x06df, 0x057f, 0x065f, 0x03be, 0x039e, - 0x039f, 0x057f, 0x171f, 0x039f, 0x543d, 0x941a, 0x0000, 0x0000, - 0x0020, 0xffdf, 0xffff, 0x0edf, 0x0d9f, 0x03df, 0x05ff, 0x059f, - 0x041f, 0x063f, 0x0e3f, 0x059f, 0x059f, 0x053f, 0xf7bf, 0x0000, + 0x039f, 0x057f, 0x039f, 0x039f, 0x039f, 0x941a, 0x0000, 0x0000, + 0x0020, 0xef9f, 0x039f, 0x039f, 0x0d9f, 0x03df, 0x05ff, 0x039f, + 0x041f, 0x063f, 0x0e3f, 0x039f, 0x059f, 0x039f, 0xf7bf, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf7df, 0x055e, 0x063f, 0x061f, 0x067f, 0x061f, 0x063f, 0x053f, 0x0e9f, 0x0e5f, 0x0e7f, 0x04df, 0x055e, 0x05be, 0x063e, - 0x053e, 0x03ff, 0x05df, 0x051f, 0x05df, 0x059f, 0x869e, 0xb5b6, + 0x053e, 0x03ff, 0x05df, 0x051f, 0x05df, 0x059f, 0x869e, 0xef5c, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffdf, 0xf133, 0xf932, 0xf8f2, 0xf8f3, 0xf933, 0xf953, 0xf933, 0xf8f2, 0xf8f2, - 0xf8f3, 0xf913, 0xf0f3, 0xf0d2, 0xf8d3, 0xf8f3, 0xf933, 0xf933, - 0xf933, 0xf912, 0xf0f2, 0xf0f2, 0xf0f2, 0xf913, 0xf8f3, 0xf0f3, + 0xf8f3, 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, + 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, 0xd954, 0xeebf, 0x93b5, 0x18c3, 0x0020, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0861, - 0xd6bb, 0xff9f, 0xfc18, 0xf0b2, 0xf113, 0xf112, 0xf0f2, 0xf112, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, + 0xd6bb, 0xf913, 0xf913, 0xf913, 0xf913, 0xf112, 0xf0f2, 0xf112, 0xf0f2, 0xf913, 0xf8f3, 0xf0f3, 0xf0f3, 0xf8f2, 0xf0f3, 0xf913, 0xf0f2, 0xf8f3, 0xf113, 0xf913, 0xf913, 0xf133, 0xf933, 0xf933, 0xf912, 0xf8d2, 0xf8d2, 0xf8d2, 0xf913, 0xf933, 0xf933, 0xf1b4, @@ -4333,32 +4333,32 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa27c, 0x6150, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0020, 0xce79, 0xf7df, 0x039d, 0x03ff, 0x041f, 0x041f, + 0x0000, 0x0020, 0x9492, 0xffff, 0x039d, 0x03ff, 0x041f, 0x041f, 0x03ff, 0x03df, 0x03bf, 0x039f, 0x037e, 0x039e, 0x03be, 0x03ff, 0x03df, 0x03df, 0x03ff, 0x03ff, 0x03ff, 0x03df, 0x03df, 0x03bf, 0x03be, 0x03be, 0x039f, 0x039f, 0x037f, 0x037f, 0x037e, 0x039f, 0x03bf, 0x03df, 0x03df, 0x03ff, 0x03ff, 0x03ff, 0x03bf, 0x03de, 0x03de, 0x03de, 0x03ff, 0x0bfe, 0xb51e, 0x0841, 0x0020, 0x0020, - 0x0841, 0xffff, 0xffff, 0x039e, 0x039f, 0x03bf, 0x039f, 0x03df, + 0x0841, 0xf7ff, 0x03df, 0x039e, 0x039f, 0x03bf, 0x039f, 0x03df, 0x03df, 0x03bf, 0x03bf, 0x039f, 0x03bf, 0x03ff, 0x041f, 0x03df, 0x03bf, 0x039e, 0x03be, 0x03bf, 0x03bf, 0x03be, 0x03bf, 0x03df, 0x039f, 0x037f, 0x037f, 0x037f, 0x039e, 0x039e, 0x03df, 0x03ff, 0x03df, 0x03df, 0x03bf, 0x03bf, 0x03bf, 0x039f, 0x037e, 0x035e, - 0x03de, 0x03be, 0x0b9e, 0xbd5d, 0x0000, 0x0020, 0x0000, 0x0000, - 0x0000, 0xef9f, 0x0cfe, 0x039f, 0x039f, 0x039f, 0x039f, 0x03bf, + 0x03de, 0x03be, 0x0b9e, 0x03be, 0xbd3e, 0x0020, 0x0000, 0x0000, + 0x7c11, 0xef9f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x03bf, 0x03df, 0x03ff, 0x03ff, 0x03de, 0x039e, 0x02de, 0xef9e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xf79e, 0xefff, 0x03fd, 0x041e, 0x041f, 0x041f, 0x041f, 0x03ff, 0x03ff, 0x03df, 0x03bf, 0x03bf, 0x039f, 0x039e, 0x037e, 0x039e, - 0x03bf, 0x03ff, 0x041f, 0x041f, 0x03ff, 0x055f, 0xffff, 0x0841, + 0x03bf, 0x03ff, 0x041f, 0x041f, 0x03ff, 0x055f, 0xffff, 0x6354, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0xffff, 0xd0f3, 0xd0d2, 0xd8b2, 0xd0b2, 0xd8d3, 0xd8b3, 0xd8d3, 0xd8b2, 0xd0b2, 0xd0d2, 0xd0d2, 0xd0d2, 0xd0d3, 0xd8b2, 0xd0d3, 0xd0b3, 0xd0b3, 0xd0b3, 0xd0b3, 0xd8b2, 0xc8d2, 0xc8b2, 0xd0d2, 0xc8d2, 0xc8d2, 0xc8f2, 0xe914, 0xe317, 0xffff, 0x0861, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0820, 0x0861, 0xf7be, - 0xff9f, 0xf071, 0xf0b2, 0xe8d2, 0xe8d2, 0xe8d2, 0xd8d3, 0xe0f3, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0xf7be, + 0xf913, 0xf913, 0xf913, 0xf913, 0xe8d2, 0xe8d2, 0xd8d3, 0xe0f3, 0xd8d3, 0xe0b3, 0xe0b3, 0xd8b2, 0xd0b2, 0xd8b2, 0xd0b2, 0xd0b3, 0xd0b2, 0xc8b2, 0xd0b2, 0xd8b3, 0xd8d3, 0xe0d3, 0xd8b3, 0xd8b3, 0xd8b2, 0xd092, 0xd8b2, 0xd092, 0xd893, 0xe093, 0xb936, 0x93bd, @@ -4373,35 +4373,35 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa27d, 0x6150, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0020, 0xc638, 0xf7df, 0x041f, 0x16df, 0x0c5f, 0x067f, + 0x0000, 0x0020, 0x9492, 0xffff, 0x041f, 0x16df, 0x0c5f, 0x067f, 0x077f, 0x049e, 0x057e, 0x061f, 0x063f, 0x041f, 0x041f, 0x06bf, 0x161f, 0x16df, 0x049f, 0x069f, 0x075f, 0x03df, 0x043f, 0x06bf, 0x045f, 0x05ff, 0x043e, 0x049f, 0x03ff, 0x0f7f, 0x0edf, 0x041f, 0x069f, 0x063e, 0x03ff, 0x067f, 0x0ebf, 0x0c3f, 0x1f9f, 0x1f9f, 0x03ff, 0x03df, 0x039e, 0xbcfd, 0x9c77, 0x0020, 0x0000, 0x0020, - 0x0841, 0xffdf, 0xf7ff, 0x03fe, 0x069e, 0x059f, 0x03ff, 0x06bf, + 0x9472, 0xf7ff, 0x03df, 0x03fe, 0x069e, 0x059f, 0x03ff, 0x06bf, 0x05ff, 0x03bf, 0x071f, 0x057f, 0x03ff, 0x06df, 0x16df, 0x03ff, 0x06ff, 0x059e, 0x06de, 0x039e, 0x047f, 0x0eff, 0x0e5f, 0x03bf, 0x04df, 0x06bf, 0x03bf, 0x03ff, 0x06df, 0x03fe, 0x067f, 0x047f, 0x0f7f, 0x0f5f, 0x041f, 0x05df, 0x175f, 0x03bf, 0x3f9f, 0x2f5f, - 0x03ff, 0x03be, 0x7b7d, 0xac5d, 0x0000, 0x0000, 0x0020, 0x0020, - 0x0020, 0xe79f, 0x057e, 0x069e, 0x05de, 0x061f, 0x043f, 0x0bdf, - 0x0f1f, 0x03df, 0x045f, 0x069e, 0x031d, 0x02be, 0xef7e, 0x0000, + 0x03ff, 0x065f, 0x065f, 0xac5d, 0x0000, 0x0000, 0x0020, 0x0020, + 0x7c11, 0xe79f, 0x057e, 0x069e, 0x039f, 0x061f, 0x043f, 0x0bdf, + 0x039f, 0x03df, 0x045f, 0x039f, 0x031d, 0x02be, 0xef7e, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xf7be, 0xf7df, 0x0bdd, 0x03de, 0x03df, 0x03ff, 0x0bff, 0x0bdf, 0x03be, 0x03be, 0x03fe, 0x063f, 0x055f, 0x051f, 0x071f, 0x039e, - 0x047f, 0x0edf, 0x0cbf, 0x0e5f, 0x05bf, 0x059f, 0xffbe, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x3986, 0xff9e, 0xd092, - 0xd892, 0xe893, 0xe092, 0xe092, 0xe0b3, 0xe0b2, 0xe0b3, 0xd8b2, - 0xd8b2, 0xd8b2, 0xe0b3, 0xe0b3, 0xe093, 0xd8b3, 0xf0b2, 0xf0f3, - 0xf0d2, 0xf0b2, 0xf0b2, 0xf8d2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0d2, - 0xf0f2, 0xf0f2, 0xf0f2, 0xe0b0, 0xde7d, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xf77d, 0xffbf, - 0xf8d2, 0xf112, 0xf0f2, 0xf0f2, 0xf0d2, 0xf0d2, 0xf0d2, 0xf0f3, - 0xf0d3, 0xf0f3, 0xf0f3, 0xe072, 0xd892, 0xd892, 0xd892, 0xd092, + 0x047f, 0x0edf, 0x0cbf, 0x0e5f, 0x05bf, 0x059f, 0xffbe, 0x6354, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x3986, 0xff9e, 0xf0b2, + 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, + 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, + 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, + 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xde7d, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xf913, + 0xf8d2, 0xf913, 0xf913, 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, + 0xf933, 0xf933, 0xf0f3, 0xe072, 0xd892, 0xd892, 0xd892, 0xd092, 0xe0b2, 0xd892, 0xe0b3, 0xe093, 0xe0b3, 0xe8b3, 0xd892, 0xe092, - 0xe892, 0xe092, 0xe092, 0xd892, 0xd871, 0xb39d, 0xac3d, 0x93d9, + 0xe892, 0xe092, 0xe092, 0xd892, 0xf933, 0xb39d, 0xac3d, 0x93d9, 0x0021, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8218, 0xaa9e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -4413,33 +4413,33 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0021, 0x0000, 0xa29e, 0x5950, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0020, 0xf7be, 0xffff, 0x03df, 0x03ff, 0x03ff, 0x03df, + 0x0000, 0x0020, 0x9492, 0xffff, 0x03df, 0x03ff, 0x03ff, 0x03df, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03df, 0x03df, 0x03ff, 0x03ff, 0x03df, 0x03ff, 0x03df, 0x03de, 0x03de, 0x03df, 0x03ff, 0x03ff, 0x03ff, 0x03ff, 0x03ff, 0x03ff, 0x03ff, 0x041f, 0x03ff, 0x03df, 0x03df, 0x03df, 0x03df, 0x03ff, 0x03ff, 0x041f, 0x043f, 0x041f, 0x0c1f, 0xbd7e, 0xacdd, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0841, 0xffff, 0xd77f, 0x03bf, 0x03df, 0x03df, 0x03df, 0x03df, + 0x9472, 0xf7ff, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03bf, 0x03bf, 0x03df, 0x03df, 0x03df, 0x03df, 0x03bf, 0x03bf, 0x03bf, 0x03be, 0x03be, 0x03df, 0x03ff, 0x03ff, 0x03df, 0x03bf, 0x039f, 0x03bf, 0x03bf, 0x03bf, 0x03df, 0x03df, 0x03df, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03be, 0x039e, 0x03df, 0x03ff, 0x0bff, - 0xb4fd, 0x20c6, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0040, + 0x03be, 0x03be, 0xbd3e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0040, 0xef7e, 0x04bd, 0x049f, 0x03bf, 0x03bf, 0x039f, 0x03df, 0x03df, - 0x03bf, 0x03bf, 0x03bf, 0x03df, 0x043e, 0x2c9f, 0x3873, 0x0001, + 0x03bf, 0x03bf, 0x03bf, 0x03df, 0x043e, 0xffbf, 0x6354, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0021, 0xd61f, 0xcdde, 0xc5de, 0xc59e, 0xbd5e, 0xbd7e, 0xcdde, 0xcdde, 0xc57f, 0xcd5f, 0x039d, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03df, - 0x03df, 0x03ff, 0x03df, 0x03df, 0x03df, 0x03bf, 0xffbe, 0x0000, + 0x03df, 0x03ff, 0x03df, 0x03df, 0x03df, 0x03bf, 0xffbe, 0x6354, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0021, 0x92fc, 0x933d, 0x935d, 0x937d, 0x9bbd, 0x9b9d, 0x937d, 0x935d, 0x937d, 0x9b9d, 0x9b7d, 0x937c, 0x935c, 0x937d, 0x9bbd, 0x9c1d, 0xa3fd, 0x929b, 0xd0b1, 0xc8b2, 0xc8b2, 0xc8d2, 0xc8b2, 0xd0b2, 0xd0b2, 0xd092, 0xc892, 0xc8d2, 0xc8b1, 0xc8d1, 0xc0d3, 0x9c1f, 0x0021, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0020, 0x7bef, 0xf77e, 0xf872, 0xf913, - 0xf0f2, 0xf0f2, 0xf0f2, 0xe0d2, 0xe8f3, 0xf0d2, 0xe8d2, 0xe8d3, - 0xf0d3, 0xc8b0, 0xba38, 0xa3be, 0xa3fd, 0xa41d, 0x9bdd, 0x9bbd, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf77e, 0xf913, 0xf933, + 0xf913, 0xf913, 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, + 0xf933, 0xc8b0, 0xba38, 0xa3be, 0xa3fd, 0xa41d, 0x9bdd, 0x9bbd, 0x9bbd, 0xa3dd, 0xa3dd, 0xa3bd, 0xa3bd, 0xa3bd, 0x9bbd, 0x9b9d, 0x9b7d, 0x9b9d, 0x9bdd, 0x9b9c, 0x935c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -4453,20 +4453,20 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xab5f, 0x7215, 0x79f6, 0x38ea, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0820, 0xf7df, 0xffff, 0x03ff, 0x03df, 0x03df, 0x03bf, + 0x0000, 0x0820, 0x9492, 0xffff, 0x03ff, 0x03df, 0x03df, 0x03bf, 0x03df, 0x03df, 0x03bf, 0x03bf, 0x03bf, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03ff, 0x03ff, 0x03ff, 0x03ff, 0x03ff, 0x03ff, 0x03df, 0x03df, 0x03ff, 0x03ff, 0x03ff, 0x03ff, 0x03de, 0x03de, 0x2bdf, 0x2bff, 0x445f, 0x6a6e, 0x49ea, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0861, 0xffff, 0xf7bf, 0x03df, 0x03df, 0x03df, 0x03bf, 0x03df, + 0x9472, 0xf7ff, 0x03df, 0x03df, 0x03df, 0x03df, 0x03bf, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x039f, 0x0b5f, 0x03bf, 0x03df, 0x03bf, 0x037e, 0x237f, 0x33ff, 0x4c1f, - 0x49ee, 0x1083, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, + 0xbd3e, 0xbd3e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xef9e, 0x047f, 0x049f, 0x03df, 0x03bf, 0x03ff, 0x039f, 0x039f, - 0x03bf, 0x03bf, 0x03bf, 0x03df, 0x24de, 0x6d7e, 0x0804, 0x0000, + 0x03bf, 0x03bf, 0x03bf, 0x03df, 0x24de, 0xffbf, 0x6354, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1888, 0x2907, 0x2927, 0x2906, 0x20c5, 0x18c5, 0x20e5, 0x3147, 0xf79f, 0xe71f, 0x039d, 0x039f, 0x03bf, 0x137f, 0x0b9f, 0x03df, @@ -4477,7 +4477,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x1024, 0x1024, 0x1003, 0x1003, 0x1023, 0x1844, 0x20c6, 0xc51c, 0xd9f4, 0xc8b1, 0xd0b2, 0xd0b2, 0xd0b2, 0xd8b2, 0xd0b2, 0xd092, 0xd0b2, 0xc8b2, 0xd0d2, 0xd8d3, 0xc0f3, 0x9c1f, 0x0021, 0x0000, - 0x0000, 0x0000, 0x0020, 0x7bef, 0xbd76, 0xf478, 0xe871, 0xe8b2, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xf913, 0xf913, 0xf913, 0xd8f2, 0xe8d2, 0xe8f2, 0xf0d2, 0xe0f2, 0xe8d2, 0xe0b2, 0xe8d3, 0xe0d3, 0xb299, 0x79af, 0x28a7, 0x20a6, 0x2066, 0x2065, 0x2065, 0x2086, 0x2086, 0x2065, 0x1865, 0x1845, 0x1844, 0x1844, 0x1844, @@ -4493,31 +4493,31 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa2bf, 0xa27d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xffbe, 0xffdf, 0x0bdf, 0x03df, 0x03bf, 0x03bf, + 0x0000, 0x0000, 0x9492, 0xffff, 0x0bdf, 0x03df, 0x03bf, 0x03bf, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03bf, 0x03df, 0x03df, 0x03be, 0x03be, 0x03de, 0x03df, 0x03ff, 0x03ff, 0x03de, 0x03de, 0x03de, 0x03df, 0x03ff, 0x03df, 0x03df, 0x03de, 0x03de, 0x03df, 0x03ff, 0x03ff, 0x03df, 0x03be, 0x03bd, 0x03de, 0xb4be, 0xacde, 0xb4fe, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1082, 0xffdf, 0xe79f, 0x03df, 0x03df, 0x03bf, 0x03bf, 0x03bf, + 0x9472, 0xf7ff, 0x03df, 0x03df, 0x03df, 0x03bf, 0x03bf, 0x03bf, 0x03df, 0x03df, 0x03df, 0x03bf, 0x03bf, 0x03bf, 0x03be, 0x039d, 0x03be, 0x03df, 0x03df, 0x03df, 0x03bf, 0x039e, 0x039f, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x039f, 0x03bf, 0x03bf, 0x03df, 0x03bf, 0x02ff, 0xacdf, 0xb4ff, 0xbd3e, 0x0821, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0xf7bf, 0x03ff, 0x03ff, 0x03bf, 0x03df, 0x03bf, 0x039f, 0x039f, - 0x039f, 0x039f, 0x03bf, 0x03df, 0x4cde, 0xf7df, 0x0041, 0x0000, + 0x039f, 0x039f, 0x03bf, 0x03df, 0x4cde, 0xf7df, 0x6354, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0041, 0xf7be, 0xffdf, 0x0b9e, 0x039f, 0x03bf, 0x039f, 0x03bf, 0x03bf, - 0x03bf, 0x03bf, 0x03bf, 0x03be, 0x03be, 0x839e, 0xffff, 0x0841, + 0x03bf, 0x03bf, 0x03bf, 0x03be, 0x03be, 0x839e, 0xef5c, 0x0841, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0021, 0xf77e, - 0xe2b6, 0xe0b3, 0xf0f3, 0xd0b3, 0xd0b3, 0xd892, 0xc0b1, 0xc8d2, - 0xf0b2, 0xd8d3, 0xd8f3, 0xe133, 0xb8f2, 0x9c1f, 0x0021, 0x0000, - 0x0000, 0x0000, 0x0000, 0xffff, 0xffdf, 0xe8d1, 0xe0d1, 0xe0d2, + 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, + 0xf0b2, 0xd8d3, 0xf0b2, 0xe133, 0xb8f2, 0x9c1f, 0x0021, 0x0000, + 0x0000, 0x0000, 0x4a69, 0xffff, 0xf913, 0xf913, 0xf913, 0xe0d2, 0xc8d2, 0xd0d2, 0xc8d3, 0xe8f3, 0xe0f3, 0xc8d2, 0xd0d3, 0xd0d3, 0xd0b3, 0xac3f, 0x3149, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -4533,7 +4533,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa2de, 0xa29d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0020, 0xf7be, 0xffdf, 0x0c1d, 0x03df, 0x03df, 0x03df, 0x03df, + 0x0020, 0x9492, 0xffff, 0x0c1d, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03bf, 0x03bf, 0x035e, 0xb4ff, 0xb4fe, 0xbd1e, 0xbd3e, 0xbd1e, 0xbcfe, 0xb4fe, 0xb4fe, 0xb4fe, 0xb4de, 0xb4de, 0xb4de, 0xb4de, 0xb4fe, 0xb4fe, 0xb4fe, @@ -4543,22 +4543,22 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x03df, 0x03df, 0x03df, 0x03bf, 0x03bf, 0x03bf, 0xb53f, 0xb4de, 0xbd1e, 0xc57e, 0xbd7f, 0xbd1e, 0xbcfe, 0x035e, 0x039f, 0x039f, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, - 0x03bf, 0x03bf, 0x039f, 0xe73e, 0xf79f, 0x1062, 0x0841, 0x0841, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8410, + 0x03bf, 0x03bf, 0x039f, 0xbd3e, 0xbd3e, 0x1062, 0x0841, 0x0841, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0bdf, 0x03df, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x0bbf, 0x551e, 0xffff, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0xffdf, 0x035f, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, - 0x03bf, 0x03bf, 0x03bf, 0x03df, 0x03de, 0xde9f, 0xde9f, 0x0020, + 0x03bf, 0x03bf, 0x03bf, 0x03df, 0x03de, 0xef5c, 0x6354, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xd67a, 0xffff, 0xf153, 0xf153, 0xf133, 0xf133, 0xf112, 0xf912, 0xf912, 0xf912, - 0xf913, 0xf133, 0xf113, 0xc891, 0xac1e, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xf79e, 0xf071, 0xf133, 0xf112, 0xf0f2, 0xf0f2, - 0xf0f2, 0xf0f2, 0xf0f2, 0xf0f2, 0xf913, 0xf933, 0xf113, 0xf913, + 0xf0b2, 0xf0b2, 0xf0b2, 0xc891, 0xac1e, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xf79e, 0xf071, 0xf133, 0xf112, 0xf933, 0xf933, + 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, 0xf933, 0xa35d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -4573,7 +4573,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa2de, 0xa2dc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0020, 0xffff, 0xffdf, 0x199f, 0x199f, 0x19bf, 0x197f, 0x195f, + 0x0020, 0x9492, 0xffff, 0x199f, 0x199f, 0x19bf, 0x197f, 0x195f, 0x193f, 0x09ff, 0x099f, 0x197f, 0x0a1f, 0x119f, 0x115f, 0x847f, 0x51ed, 0x522c, 0x520b, 0x520c, 0x520c, 0x49cb, 0x49cb, 0x51ec, 0x49cb, 0x49cb, 0x49ec, 0x49cb, 0x49cb, 0x51ec, 0x49cc, 0x49ab, @@ -4584,20 +4584,20 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x5a4c, 0x5a2c, 0x520c, 0x520b, 0x49eb, 0x543e, 0x027f, 0x197e, 0x197e, 0x197e, 0x117f, 0x119f, 0x197f, 0x199f, 0x197f, 0x199f, 0x199f, 0x117f, 0x115e, 0x63dd, 0xb5be, 0xa514, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbdd7, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffbf, 0x113f, 0x197e, 0x191f, 0x10fe, 0x191f, 0x193f, 0x193f, - 0x195f, 0x199f, 0x197f, 0x195f, 0x639e, 0xffff, 0x0841, 0x0000, + 0x195f, 0x199f, 0x197f, 0x195f, 0x639e, 0xffff, 0x6354, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0xffdf, 0x00fe, 0x197e, 0x197f, 0x195f, 0x193f, 0x193f, 0x213f, - 0x211f, 0x211f, 0x295f, 0x315e, 0x29ff, 0xb49e, 0xbd5f, 0x0000, + 0x211f, 0x211f, 0x295f, 0x315e, 0x29ff, 0xef5c, 0x6354, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0821, 0xdefb, 0xffff, 0xd0b2, 0xc8b1, 0xc8d1, 0xd0d1, 0xd0d2, 0xd8b2, 0xd8b2, 0xd8b2, 0xd0d1, 0xc8b1, 0xc0b1, 0xb8b1, 0xac3e, 0x0000, 0x0000, 0x0000, - 0x0020, 0x0000, 0xf79e, 0xb80f, 0xc8b1, 0xd0b2, 0xd8b2, 0xd8b2, + 0x0020, 0x4a69, 0xf79e, 0xb80f, 0xc8b1, 0xd0b2, 0xd8b2, 0xd8b2, 0xd0d2, 0xd0d1, 0xd0b1, 0xd0d2, 0xd8b2, 0xd8f2, 0xd8d2, 0xd090, 0x9b3e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -4613,31 +4613,31 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa2bd, 0xaadd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xf7be, 0xef9f, 0x383e, 0x303f, 0x301f, 0x301e, 0x301d, + 0x0000, 0x9492, 0xffff, 0x383e, 0x303f, 0x301f, 0x301e, 0x301d, 0x301e, 0x287f, 0x283e, 0x281d, 0x283e, 0x301f, 0x303f, 0xc59f, 0x1042, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9472, 0xf7bf, 0x201e, 0x307f, 0x301d, 0x301f, 0x301e, 0x301e, 0x305e, 0x303f, 0x301e, 0x301e, 0x305e, 0x28bf, 0xb4de, 0x6b13, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc55f, 0x119f, 0x287d, 0x285d, 0x301d, 0x301e, 0x301e, 0x301e, 0x301e, 0x301e, 0x301e, - 0x301e, 0x303e, 0x301d, 0x309f, 0x9d1f, 0xffff, 0x0841, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xce59, + 0x301e, 0x303e, 0x301d, 0x309f, 0x9d1f, 0xbd3e, 0x0841, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf7bf, 0x283e, 0x303d, 0x281d, 0x281d, 0x301e, 0x301e, 0x301e, 0x301e, 0x301e, 0x301d, 0x301d, 0x6a9d, 0xf7df, 0x0861, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0841, 0x0000, 0xffdf, 0x181e, 0x301e, 0x301e, 0x301e, 0x301e, 0x301e, 0x381e, - 0x381e, 0x381e, 0x381f, 0x385f, 0x407f, 0xa3de, 0x93be, 0x0000, + 0x381e, 0x381e, 0x381f, 0x385f, 0x407f, 0xef5c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0861, 0xd69a, 0xffff, 0xb8b1, 0xb891, 0xc092, 0xc892, 0xc092, 0xc092, 0xc072, 0xc092, 0xc091, 0xc091, 0xb891, 0xb870, 0xac5e, 0x0000, 0x0020, 0x0020, - 0x0000, 0x0000, 0xff9e, 0xb00e, 0xc091, 0xc872, 0xc892, 0xc892, + 0x0000, 0x4a69, 0xff9e, 0xb00e, 0xc091, 0xc872, 0xc892, 0xc892, 0xc892, 0xc092, 0xc072, 0xc892, 0xc892, 0xc092, 0xc092, 0xb070, 0x9bff, 0x0842, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, @@ -4653,31 +4653,31 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa2de, 0xaafd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0840, 0xf7bf, 0xffff, 0x0b9f, 0x037f, 0x037f, 0x039f, 0x039f, + 0x0840, 0x9492, 0xffff, 0x0b9f, 0x037f, 0x037f, 0x039f, 0x039f, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03df, 0x031f, 0xb4de, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x1061, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x9472, 0xf7bf, 0x03bf, 0x0bff, 0x0bbf, 0x03bf, 0x039f, 0x037f, 0x039f, 0x03bf, 0x03bf, 0x03df, 0x03df, 0x039e, 0xb49e, 0x5a70, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0021, 0xef5f, 0x8d1e, 0x035f, 0x037f, 0x037f, 0x037f, 0x037f, 0x037f, 0x037f, 0x039f, - 0x037f, 0x037f, 0x039f, 0x0bbf, 0x0b9f, 0x029f, 0xf79e, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf7df, - 0xf7bf, 0x039e, 0x037f, 0x039f, 0x0bbf, 0x039f, 0x039f, 0x039f, + 0x037f, 0x037f, 0x039f, 0x0bbf, 0x0b9f, 0x029f, 0xbd3e, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xbd3f, 0x039e, 0x037f, 0x039f, 0x0bbf, 0x039f, 0x039f, 0x039f, 0x039f, 0x037f, 0x037f, 0x039f, 0x037f, 0x0b3f, 0xffdf, 0xffdf, 0xf7be, 0xf7be, 0xf7bf, 0xf7bf, 0xf7be, 0xf7be, 0xf7be, 0xf7bf, 0xffdf, 0xf7df, 0xf7be, 0xf7be, 0xf7df, 0xffdf, 0xf7bf, 0xf79e, 0xd65f, 0x03bf, 0x03df, 0x037f, 0x039f, 0x037f, 0x037f, 0x037f, - 0x039f, 0x039f, 0x0b9f, 0x0b7f, 0xeeff, 0xa476, 0x0020, 0x0000, + 0x039f, 0x039f, 0x0b9f, 0x0b7f, 0xeeff, 0x6354, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x1082, 0xffff, 0xffbe, 0xffdf, 0xffdf, 0xf7be, 0xffbf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffde, 0xffdf, 0xffdf, 0xf7be, 0xffbe, 0xffdf, 0xffdf, 0xffdf, - 0xffdf, 0xffdf, 0xf7de, 0xf7be, 0xffdf, 0xffbf, 0xd991, 0xd891, - 0xc8b1, 0xe8f2, 0xf913, 0xf133, 0xf133, 0xe8d3, 0xf0f3, 0xf113, - 0xe0b3, 0xf154, 0xc892, 0xd071, 0xabfe, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0861, 0xf79e, 0xf0d4, 0xf0f3, 0xf113, 0xf133, 0xf133, + 0xffdf, 0xffdf, 0xf7de, 0xf7be, 0xffdf, 0xffbf, 0xd991, 0xf0b2, + 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, + 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xabfe, 0x0000, 0x0000, 0x0000, + 0x0000, 0x9cb3, 0xf79e, 0xf0d4, 0xf0f3, 0xf113, 0xf133, 0xf133, 0xf132, 0xf933, 0xf953, 0xf953, 0xe0f2, 0xc8b2, 0xf8f3, 0xf0d3, 0xf7df, 0xffdf, 0xffff, 0xffdf, 0xf7be, 0xf7be, 0xffbe, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, @@ -4693,31 +4693,31 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaade, 0xaadd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0841, 0xffdf, 0xffff, 0x037f, 0x035f, 0x035f, 0x039f, 0x03df, + 0x0841, 0x9492, 0xffff, 0x037f, 0x035f, 0x035f, 0x039f, 0x03df, 0x03df, 0x03ff, 0x03ff, 0x03df, 0x03ff, 0x03df, 0x02bf, 0xac7e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x2925, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x9472, 0xffff, 0x0c1f, 0x0c3f, 0x03df, 0x039f, 0x039f, 0x039f, 0x03ff, 0x041f, 0x041f, 0x03ff, 0x03df, 0x03be, 0xb49e, 0x5a90, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffbf, 0xc5bf, 0x02bf, 0x037f, 0x037f, 0x037f, 0x037f, 0x03bf, 0x03df, 0x037f, - 0x037f, 0x039f, 0x03bf, 0x03bf, 0x037f, 0x01fe, 0xf7bf, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xffff, - 0xffff, 0x0bdf, 0x0bdf, 0x03bf, 0x03bf, 0x039f, 0x037f, 0x039f, + 0x037f, 0x039f, 0x03bf, 0x03bf, 0x037f, 0x01fe, 0xbd3e, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, + 0xbd3f, 0x0bdf, 0x0bdf, 0x03bf, 0x03bf, 0x039f, 0x037f, 0x039f, 0x039f, 0x039f, 0x03bf, 0x03df, 0x03df, 0x0abf, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffdf, 0xf7bf, 0xffff, 0xffff, 0xffff, 0xdedf, 0x03ff, 0x041f, 0x03df, 0x03bf, 0x03bf, 0x03bf, 0x03bf, - 0x03bf, 0x03bf, 0x03bf, 0x035f, 0xff9f, 0xa4b6, 0x0020, 0x0000, + 0x03bf, 0x03bf, 0x03bf, 0x035f, 0xff9f, 0x6354, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x2124, 0xffff, 0xffff, 0xffff, 0xffbf, 0xffbf, 0xffbf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xd172, 0xd892, - 0xd8b2, 0xf133, 0xf934, 0xf114, 0xf0d3, 0xe0b3, 0xf113, 0xf133, - 0xe0b3, 0xf114, 0xc891, 0xc86f, 0xa39e, 0x0000, 0x0000, 0x0000, - 0x0000, 0x10a2, 0xffbf, 0xf0f4, 0xf113, 0xf0d3, 0xf0d2, 0xf0b2, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xd172, 0xf0b2, + 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, + 0xf0b2, 0xf0b2, 0xf0b2, 0xf0b2, 0xa39e, 0x0000, 0x0000, 0x0000, + 0x0000, 0x9cb3, 0xffbf, 0xf0f4, 0xf113, 0xf0d3, 0xf0d2, 0xf0b2, 0xf0f2, 0xf933, 0xf133, 0xf113, 0xd8b2, 0xc8b2, 0xf934, 0xe133, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffbf, 0xffdf, 0xffdf, 0xffff, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, @@ -4733,31 +4733,31 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaabf, 0xa29d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0841, 0xf7be, 0xffdf, 0x303b, 0x301c, 0x301d, 0x301d, 0x301d, + 0x0841, 0x9492, 0xffff, 0x303b, 0x301c, 0x301d, 0x301d, 0x301d, 0x301d, 0x301e, 0x283e, 0x303e, 0x301d, 0x281e, 0x081b, 0xacbd, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xe6fc, - 0xffdf, 0x303d, 0x301d, 0x281c, 0x301d, 0x301d, 0x301e, 0x301e, + 0x531d, 0x303d, 0x301d, 0x281c, 0x301d, 0x301d, 0x301e, 0x301e, 0x283e, 0x283d, 0x303d, 0x283c, 0x287d, 0xb49e, 0x49ed, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xacb5, 0xef9f, 0x387a, 0x301c, 0x301c, 0x301d, 0x281e, 0x281d, 0x301d, - 0x301d, 0x301d, 0x281e, 0x281d, 0x301c, 0x281b, 0x381e, 0xe71e, - 0x0841, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xef3d, - 0x181b, 0x283e, 0x285d, 0x285d, 0x303d, 0x301d, 0x301d, 0x301d, + 0x301d, 0x301d, 0x281e, 0x281d, 0x301c, 0x281b, 0x381e, 0xbd3e, + 0x0841, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x0000, + 0xbd3f, 0x283e, 0x285d, 0x285d, 0x303d, 0x301d, 0x301d, 0x301d, 0x301e, 0x303d, 0x305d, 0x305d, 0x303d, 0x303d, 0x301c, 0x303d, 0x303d, 0x383d, 0x303d, 0x301c, 0x303d, 0x301c, 0x303d, 0x303d, 0x381d, 0x381d, 0x303e, 0x303d, 0x303d, 0x303d, 0x303e, 0x303e, 0x303d, 0x303d, 0x305d, 0x303e, 0x303e, 0x303d, 0x303e, 0x303d, - 0x303d, 0x303d, 0x283e, 0x203d, 0xb47f, 0x8374, 0x0020, 0x0000, + 0x303d, 0x303d, 0x283e, 0x203d, 0xb47f, 0x6354, 0x0020, 0x0000, 0x0000, 0x0000, 0x0020, 0xf7be, 0xee5c, 0xc092, 0xb871, 0xb871, 0xb891, 0xb891, 0xb892, 0xb891, 0xb892, 0xb892, 0xb892, 0xb891, 0xb891, 0xb891, 0xb891, 0xb891, 0xb891, 0xb891, 0xb891, 0xb091, 0xb091, 0xb091, 0xb091, 0xb892, 0xb892, 0xb892, 0xb871, 0xb891, 0xb892, 0xb892, 0xb892, 0xb892, 0xb8b1, 0xb891, 0xb8b2, 0xc0b2, 0xc092, 0xb8b2, 0xb0b2, 0xaa15, 0x9b5e, 0x0000, 0x0020, 0x0020, - 0x0020, 0xffdf, 0xf79e, 0xb872, 0xb891, 0xb871, 0xb891, 0xb891, + 0x0020, 0xffdf, 0xb872, 0xb872, 0xb891, 0xb871, 0xb891, 0xb891, 0xb892, 0xb892, 0xb892, 0xb892, 0xb891, 0xb892, 0xb892, 0xb892, 0xb892, 0xb091, 0xb091, 0xb091, 0xb891, 0xb892, 0xb892, 0xb891, 0xb892, 0xb892, 0xb891, 0xb891, 0xb891, 0xb891, 0xb891, 0xb891, @@ -4784,20 +4784,20 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0021, 0x5193, 0xd6ff, 0x303d, 0x301d, 0x301d, 0x11ff, 0x127f, 0x301e, 0x20df, 0x301e, 0x0b9f, 0x205f, 0x283e, 0x11ff, 0x205f, 0x40db, - 0xf77e, 0x6b4d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, - 0x5a1f, 0x311e, 0x28fe, 0x0bff, 0x123f, 0x11bf, 0x301e, 0x281e, + 0xbd3e, 0x6b4d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x8b9b, 0x311e, 0x28fe, 0x0bff, 0x123f, 0x11bf, 0x301e, 0x281e, 0x039f, 0x303f, 0x28be, 0x211f, 0x285e, 0x2bff, 0x303d, 0x1c9f, 0x2b1f, 0x301c, 0x287e, 0x287d, 0x1c1f, 0x301d, 0x225f, 0x14bf, 0x303d, 0x213f, 0x12ff, 0x207f, 0x209f, 0x137f, 0x303e, 0x283e, 0x037f, 0x301e, 0x209e, 0x03ff, 0x383f, 0x213f, 0x035f, 0x303f, - 0x213f, 0x201f, 0x219f, 0x205f, 0xbcdf, 0x8354, 0x0000, 0x0000, + 0x213f, 0x201f, 0x219f, 0x205f, 0xbcdf, 0x6354, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf79e, 0xf65c, 0xb091, 0xc071, 0xc071, 0xb891, 0xb891, 0xb891, 0xb892, 0xb892, 0xb892, 0xb891, 0xb892, 0xb891, 0xb891, 0xb891, 0xb891, 0xb891, 0xb871, 0xb871, 0xc091, 0xb891, 0xb091, 0xb891, 0xb892, 0xb892, 0xb892, 0xb891, 0xb891, 0xb892, 0xb892, 0xb892, 0xb891, 0xb891, 0xb891, 0xb892, 0xb892, 0xb8b2, 0xb8b2, 0xa8b2, 0xa236, 0x9b7d, 0x0000, 0x0000, 0x0000, - 0x0000, 0xffdf, 0xd86f, 0xb891, 0xb891, 0xb871, 0xb871, 0xb891, + 0x0000, 0xffdf, 0xb872, 0xb891, 0xb891, 0xb871, 0xb871, 0xb891, 0xb892, 0xb891, 0xb892, 0xb892, 0xb891, 0xb891, 0xb892, 0xb892, 0xb891, 0xb091, 0xb091, 0xb891, 0xb892, 0xb891, 0xb891, 0xb891, 0xb891, 0xb891, 0xb891, 0xb891, 0xb891, 0xb891, 0xb891, 0xb891, @@ -4813,31 +4813,31 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8a3a, 0xa2fd, 0x8217, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, - 0xbdb7, 0xdf9f, 0x4b9f, 0x301f, 0x303e, 0x303e, 0x301d, 0x287e, + 0xbdb7, 0xffff, 0x4b9f, 0x301f, 0x303e, 0x303e, 0x301d, 0x287e, 0x195f, 0x301e, 0x11ff, 0x099f, 0x301e, 0x49fd, 0x625d, 0x6293, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x736e, 0xffff, - 0xb5fe, 0x281d, 0x303d, 0x11bf, 0x303f, 0x283e, 0x113f, 0x303e, + 0x303d, 0x281d, 0x303d, 0x11bf, 0x303f, 0x283e, 0x113f, 0x303e, 0x283f, 0x025f, 0x301e, 0x313e, 0x529e, 0x82d4, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7b91, 0xc5bd, 0x513c, 0x389c, 0x301d, 0x197f, 0x11bf, 0x301e, 0x20ff, 0x303e, 0x0a9f, 0x283f, 0x303f, 0x02bf, 0x285d, 0x383c, - 0xd69f, 0x734f, 0x18c3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, - 0x6a7e, 0x735c, 0x285f, 0x11ff, 0x20df, 0x303e, 0x301e, 0x301e, + 0xd69f, 0x734f, 0x18c3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x8b9b, 0x301d, 0x285f, 0x11ff, 0x20df, 0x303e, 0x301e, 0x301e, 0x0a1f, 0x303f, 0x303e, 0x11bf, 0x285e, 0x1a3f, 0x301d, 0x1adf, 0x223f, 0x303d, 0x287e, 0x289d, 0x12ff, 0x303d, 0x321f, 0x1bbf, 0x303d, 0x289e, 0x11ff, 0x283f, 0x285e, 0x0a9f, 0x303e, 0x301f, 0x0a3f, 0x301e, 0x285e, 0x123f, 0x301f, 0x287f, 0x11ff, 0x301f, - 0x28de, 0x301e, 0x207e, 0x493c, 0xc51f, 0x5a6f, 0x0000, 0x0000, + 0x28de, 0x301e, 0x207e, 0x493c, 0xc51f, 0x6354, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xffdf, 0xf67d, 0xb871, 0xc071, 0xc071, 0xc071, 0xc071, 0xb871, 0xb871, 0xb892, 0xb892, 0xb891, 0xb891, 0xb891, 0xb891, 0xb891, 0xb891, 0xb871, 0xb871, 0xb871, 0xc091, 0xb891, 0xb891, 0xb891, 0xb891, 0xb892, 0xb892, 0xb891, 0xb872, 0xb892, 0xb892, 0xb892, 0xb892, 0xb892, 0xb892, 0xb892, 0xb892, 0xb892, 0xc092, 0x99b5, 0x7974, 0x6213, 0x0000, 0x0000, 0x0000, - 0x5acc, 0xffff, 0xd0b1, 0xc092, 0xc092, 0xb871, 0xb871, 0xb871, + 0x0000, 0xffff, 0xb872, 0xc092, 0xc092, 0xb871, 0xb871, 0xb871, 0xb891, 0xb891, 0xb871, 0xb891, 0xb891, 0xb892, 0xb892, 0xb892, 0xb891, 0xb891, 0xb891, 0xb892, 0xb891, 0xb891, 0xb891, 0xb891, 0xb871, 0xb892, 0xb891, 0xb871, 0xb871, 0xb871, 0xb871, 0xb891, @@ -4853,19 +4853,19 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9a1b, 0x92db, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, - 0xf7bf, 0x38bd, 0x303e, 0x303e, 0x303e, 0x301d, 0x301d, 0x303d, + 0xffff, 0x38bd, 0x303e, 0x303e, 0x303e, 0x301d, 0x301d, 0x303d, 0x303e, 0x301e, 0x303e, 0x303d, 0x301d, 0xbd3f, 0xb51e, 0x0021, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xffff, 0xffff, - 0x305d, 0x303d, 0x303d, 0x303e, 0x303e, 0x303e, 0x303e, 0x303e, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x9472, 0xffff, + 0x303d, 0x303d, 0x303d, 0x303e, 0x303e, 0x303e, 0x303e, 0x303e, 0x303e, 0x303d, 0x301c, 0x627e, 0xbd5e, 0x0862, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbd7f, 0x945f, 0x303c, 0x301c, 0x303d, 0x303d, 0x303e, 0x303e, 0x303e, 0x303d, 0x303e, 0x303e, 0x303d, 0x303d, - 0x307d, 0xa4fe, 0xffff, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, - 0xac9b, 0x8b9b, 0x201d, 0x303e, 0x303e, 0x303d, 0x303e, 0x303e, + 0x307d, 0xa4fe, 0xbd3e, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x8b9b, 0x201d, 0x303e, 0x303e, 0x303d, 0x303e, 0x303e, 0x303e, 0x303e, 0x303e, 0x305e, 0x303e, 0x303d, 0x303d, 0x305e, 0x305e, 0x303d, 0x303d, 0x305d, 0x305d, 0x303d, 0x305d, 0x303d, 0x303d, 0x303d, 0x305e, 0x303e, 0x303e, 0x305e, 0x303e, 0x303e, @@ -4877,7 +4877,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0xb891, 0xb091, 0xb891, 0xb891, 0xb891, 0xb891, 0xb891, 0xb892, 0xb892, 0xb891, 0xb891, 0xb891, 0xb891, 0xb892, 0xb892, 0xb891, 0xb091, 0xc051, 0xac3e, 0x1003, 0x0020, 0x0000, 0x0000, 0x0000, - 0xffff, 0xffff, 0xc092, 0xc092, 0xc092, 0xb872, 0xb892, 0xb871, + 0x0000, 0xffff, 0xc092, 0xc092, 0xc092, 0xb872, 0xb892, 0xb871, 0xb871, 0xb871, 0xb871, 0xb871, 0xb891, 0xb892, 0xb892, 0xb892, 0xb892, 0xb891, 0xb892, 0xb892, 0xb891, 0xb891, 0xb891, 0xb891, 0xb892, 0xb891, 0xb892, 0xb871, 0xb891, 0xb871, 0xb871, 0xb891, @@ -4893,19 +4893,19 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9a1b, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xf7bf, 0x183e, 0x303d, 0x301d, 0x301e, 0x301d, 0x301d, 0x301d, + 0xffff, 0x183e, 0x303d, 0x301d, 0x301e, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0xbd1e, 0xacbe, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x9472, 0xffff, 0x303d, 0x303d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0x303d, 0x383d, 0x303d, 0x301c, 0x625d, 0xb4de, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc57e, 0xcdff, 0x303c, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0x381d, 0x381d, 0x383d, 0x303d, 0x381e, 0x303e, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0020, 0xa4bd, 0x69fd, 0x383e, 0x383e, 0x383e, 0x381e, + 0x0000, 0x0020, 0xa4bd, 0x301d, 0x383e, 0x383e, 0x383e, 0x381e, 0x381d, 0x381d, 0x383d, 0x383d, 0x383d, 0x383d, 0x383d, 0x383d, 0x383d, 0x383d, 0x383d, 0x383d, 0x383d, 0x383d, 0x383d, 0x383d, 0x383d, 0x383d, 0x383d, 0x383d, 0x383d, 0x383d, 0x383d, 0x383d, @@ -4917,7 +4917,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0xb891, 0xb891, 0xb891, 0xb871, 0xb871, 0xb871, 0xb891, 0xb891, 0xb872, 0xb871, 0xb871, 0xb872, 0xb872, 0xb871, 0xb091, 0xb091, 0xbc1e, 0x51af, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xffff, 0xffdf, 0xb871, 0xb891, 0xc072, 0xc072, 0xb872, 0xb871, + 0x0000, 0xffdf, 0xb871, 0xb891, 0xc072, 0xc072, 0xb872, 0xb871, 0xb871, 0xb871, 0xb871, 0xb871, 0xb871, 0xb891, 0xb891, 0xb891, 0xb871, 0xb891, 0xb891, 0xb891, 0xb871, 0xb871, 0xb871, 0xb871, 0xb891, 0xb891, 0xb871, 0xb871, 0xb871, 0xb871, 0xb871, 0xb891, @@ -4933,31 +4933,31 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9a5c, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xf79e, 0x181d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, + 0xffff, 0x181d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301f, 0xc57e, 0xb4de, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xf7bf, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x9472, 0xffff, 0x303e, 0x303d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0x303d, 0x301e, 0x625d, 0xb4be, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1083, 0x394b, 0xc57f, 0x281e, 0x303d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0x381d, 0x301e, - 0x301d, 0x303d, 0x38dd, 0xe73c, 0xf79e, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0020, 0x1083, 0xcdff, 0xbd3f, 0x495c, 0x301e, 0x301d, + 0x301d, 0x303d, 0x38dd, 0xbd3e, 0x734f, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0020, 0x1083, 0x8b9b, 0x301d, 0x495c, 0x301e, 0x301d, 0x301d, 0x381d, 0x381d, 0x381d, 0x381d, 0x303d, 0x301d, 0x303d, 0x303d, 0x301d, 0x301d, 0x381d, 0x303d, 0x301d, 0x303d, 0x303d, 0x381d, 0x383d, 0x301d, 0x301d, 0x383d, 0x301d, 0x301d, 0x301d, 0x303d, 0x383d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, 0x301d, - 0x301d, 0x301e, 0x303e, 0xc57f, 0xc55f, 0x0000, 0x0000, 0x0000, + 0x301d, 0x301e, 0x303e, 0xc57f, 0x6354, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf7bf, 0x98ae, 0xb851, 0xb871, 0xc072, 0xc072, 0xc072, 0xb872, 0xb871, 0xb872, 0xb871, 0xb872, 0xb872, 0xb871, 0xb871, 0xb871, 0xb871, 0xb871, 0xb871, 0xb871, 0xb871, 0xb871, 0xb871, 0xb871, 0xb872, 0xb872, 0xb871, 0xb871, 0xb872, 0xb872, 0xb872, 0xb871, 0xb871, 0xb872, 0xb872, 0xb891, 0xa3bd, 0xa35b, 0x41ad, 0x18a4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xf79e, 0xf71e, 0xc072, 0xc072, 0xc072, 0xc072, 0xb872, 0xb872, + 0x0000, 0xf71e, 0xc072, 0xc072, 0xc072, 0xc072, 0xb872, 0xb872, 0xb871, 0xb871, 0xb871, 0xb871, 0xb872, 0xb871, 0xb871, 0xb872, 0xb872, 0xb872, 0xb872, 0xb871, 0xb871, 0xb871, 0xb871, 0xb872, 0xb871, 0xb871, 0xb872, 0xb872, 0xb872, 0xb871, 0xb871, 0xb871, @@ -4973,31 +4973,31 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa29c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, - 0xef7e, 0x413d, 0x48dc, 0x48bd, 0x48dd, 0x48dd, 0x48dd, 0x48dd, + 0xffff, 0x413d, 0x48dc, 0x48bd, 0x48dd, 0x48dd, 0x48dd, 0x48dd, 0x48fd, 0x48fd, 0x48dc, 0x491d, 0x599d, 0xc57f, 0xb51f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xf7bf, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xf7bf, 0x389c, 0x389c, 0x40be, 0x48bd, 0x409d, 0x40bc, 0x40bd, 0x40bd, 0x40bd, 0x409c, 0x40dd, 0x513d, 0x6abc, 0xb4de, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1062, 0xacbc, 0x48dd, 0x40bc, 0x40bd, 0x40bc, 0x40bd, 0x40bd, 0x48bd, 0x40bd, 0x40bd, 0x40bc, 0x40bc, - 0x40bc, 0x40bc, 0x40dd, 0xde7e, 0xf79f, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xbd1c, 0xa45b, 0x6a3c, 0x40db, 0x40bc, + 0x40bc, 0x40bc, 0x40dd, 0xde7e, 0xbd3e, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xa45b, 0x6a3c, 0x301d, 0x40bc, 0x40dd, 0x48dd, 0x48fd, 0x48fd, 0x48fd, 0x48fd, 0x48dd, 0x40dd, 0x40dd, 0x48dd, 0x48fd, 0x491d, 0x491d, 0x491d, 0x491d, 0x48fd, 0x48fd, 0x48fd, 0x48dd, 0x48fd, 0x48fd, 0x491d, 0x491d, 0x491d, 0x491d, 0x48fd, 0x48fd, 0x48fd, 0x48fd, 0x48fd, 0x48fd, 0x48fd, - 0x48fd, 0x48fd, 0x491c, 0xac9e, 0xb51f, 0x0000, 0x0000, 0x0000, + 0x48fd, 0x48fd, 0x491c, 0xac9e, 0x6354, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xef7e, 0x9010, 0xa8d2, 0xb0f2, 0xb113, 0xb0f3, 0xb112, 0xb112, 0xb112, 0xb0f2, 0xb0f2, 0xb0f2, 0xb112, 0xb112, 0xb0f2, 0xb0f2, 0xb0f2, 0xb0f2, 0xa8f2, 0xa8f2, 0xa912, 0xb112, 0xb112, 0xa912, 0xa932, 0xa932, 0xa912, 0xa912, 0xa8f2, 0xb112, 0xb112, 0xa8f1, 0xa8f2, 0xb112, 0xb133, 0xa0d1, 0x8b7b, 0x7b5a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xf79f, 0xf6dd, 0xb8f2, 0xb0f2, 0xb112, 0xb0f2, 0xa8d2, 0xb0f2, + 0x0000, 0xf6dd, 0xb8f2, 0xb0f2, 0xb112, 0xb0f2, 0xa8d2, 0xb0f2, 0xb0f2, 0xb0f2, 0xb112, 0xb112, 0xb0f2, 0xb0f2, 0xb0f1, 0xa8f2, 0xb112, 0xb112, 0xa912, 0xa912, 0xa912, 0xa8f2, 0xa912, 0xa912, 0xa912, 0xa912, 0xa912, 0xa932, 0xa932, 0xa912, 0xa912, 0xa911, @@ -5025,7 +5025,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xac3d, 0xa41e, 0xa41e, 0xac5e, 0xac3e, 0xac3e, 0xac3e, 0xa43e, 0xa43e, 0xac3e, 0xac5e, 0xac1e, 0xa3fe, 0xac1f, 0xac5e, 0xb49f, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x6270, 0xa3fe, 0xa41e, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8b9b, 0x8b9b, 0xa41e, 0xac5e, 0xac9e, 0xac9e, 0xac7e, 0xac7e, 0xac7e, 0xac7e, 0xac5e, 0xac7f, 0xac7f, 0xac7f, 0xac7f, 0xac7e, 0xac7e, 0xa45e, 0xac5e, 0xac5e, 0xac5e, 0xa43e, 0xac3e, 0xa43e, 0xac3e, 0xac3e, 0xac5e, @@ -5037,7 +5037,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0xa3fe, 0xa3fe, 0xa3fe, 0x9bfe, 0x9bfe, 0x9bfe, 0x9bde, 0x9bdd, 0x9bdd, 0x93bd, 0x93bd, 0x9bdd, 0x9bfd, 0x520f, 0x0021, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xbcbe, 0xabfe, 0x9bbe, 0x9b9e, 0x9b9e, 0x939e, 0x9bbe, 0x9bbe, + 0x0000, 0x0000, 0x9bbe, 0x9b9e, 0x9b9e, 0x939e, 0x9bbe, 0x9bbe, 0x9bde, 0x9bde, 0x9bde, 0x9bde, 0x9bde, 0x9bde, 0x9bde, 0x9bde, 0x9bde, 0x9bde, 0x9bde, 0x9bbe, 0x9bde, 0x9bde, 0x9bde, 0x9bbd, 0x9bbe, 0x9bde, 0x9bfe, 0xa3fe, 0xa3fe, 0x9bfe, 0xa3fe, 0xa3fe, @@ -5299,7 +5299,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x2085, 0xba1b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0821, 0x0821, 0x0000, 0xc1dd, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0821, 0x0821, 0x0000, 0xc1dd, 0xc937, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0xc198, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5316,10 +5316,10 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0xc999, 0x0020, 0x0821, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0001, 0x0821, 0xc9db, 0x0000, 0x0020, + 0x0000, 0x0000, 0x0000, 0x810c, 0xc159, 0x0801, 0x0000, 0x0020, 0x0821, 0x0801, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0821, 0x0000, 0xb23c, 0x0821, 0x0801, 0x0000, 0x0000, + 0x0000, 0x0821, 0x810c, 0xb23c, 0x0821, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x70b4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0801, 0x0001, 0x0000, 0x0000, 0x0000, @@ -5334,12 +5334,12 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x50ee, 0x588e, 0x2005, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x993a, 0x2005, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x8933, 0x78f2, 0x58ac, 0x0000, 0x0020, 0x0000, + 0x0000, 0x0000, 0x0801, 0x78f2, 0x0801, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xa9d3, 0xb974, 0x2825, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xb974, 0xc937, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x790c, 0x50ca, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5356,12 +5356,12 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc976, 0x48e7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x70ed, 0x9192, 0x0801, + 0x0000, 0x0000, 0x0000, 0x0000, 0x810c, 0xc159, 0x0802, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2826, 0x30a9, 0x8171, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x810c, 0xc159, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x382a, 0x408b, 0x58f2, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3068, 0x7054, 0x3068, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5374,12 +5374,12 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x8056, 0x402b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x993a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, - 0x0000, 0x0821, 0xc13c, 0xa158, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0821, 0xe1db, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xc918, 0xb956, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xc918, 0xc937, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc8f5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5393,16 +5393,16 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0801, 0xe239, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd197, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x68ab, 0x68ab, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd99a, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x810c, 0xd99a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2825, 0xc159, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8096, 0x7054, + 0x0000, 0x0000, 0x0000, 0x0000, 0x810c, 0xc159, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3068, 0x3068, 0x7054, + 0x3068, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5419,29 +5419,29 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x2045, 0xd9db, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xc136, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xc136, 0xc937, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xe1f7, 0x4046, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xe1f7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0820, 0x2023, 0x894f, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0820, 0x2023, 0xd175, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x78ce, 0xa171, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xea38, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0800, 0xe279, 0x710b, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0800, 0xe279, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd9d8, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc196, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x810c, 0xc196, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd1fa, 0x9112, - 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x810c, 0xd1fa, 0x0000, + 0x0802, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3068, 0x8075, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5453,18 +5453,18 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x38aa, 0x8115, 0x2826, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x993a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xca18, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0801, 0xd1b8, 0x3867, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x5088, - 0x68ac, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xc937, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x790b, 0xc953, 0x1842, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xc953, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x78cb, 0x78ec, 0x40a7, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xd175, 0x40a7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb0f3, 0xa970, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5476,13 +5476,13 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x60ca, 0x810c, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4888, - 0x710d, 0x9151, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x810c, + 0xc196, 0x0802, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x810c, 0xc95a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2846, 0x3827, - 0x9996, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, - 0x1804, 0x68f3, 0x408a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x1804, 0x68f3, 0x0802, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5493,36 +5493,36 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x3067, 0x608e, 0x8937, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x3067, 0x993a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x588a, 0xd9ba, - 0xc1d8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x0801, 0xd9ba, + 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0801, 0xe1db, 0xf1de, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0801, 0x0000, 0xf1de, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xd957, 0x992f, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xd957, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xd175, 0xca14, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xca14, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0xe195, 0x2802, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd955, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1001, 0xb912, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x1001, 0xd9b5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc994, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xc9b7, 0xd1b8, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x810c, 0xc196, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0801, - 0xc199, 0x0000, 0x1823, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x810c, + 0xc95a, 0x0000, 0x1823, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x586f, 0x584e, 0x3068, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x584e, 0x3068, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5533,36 +5533,36 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xc1bf, 0x3047, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x993a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe1dd, 0xb9d7, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe1dd, 0x0801, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd99a, 0xe9db, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd99a, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xe978, 0xa130, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xe978, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xd956, 0xc234, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xd956, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0xd9b5, 0x4045, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd954, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xd934, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xd9b5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe176, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xda39, 0xf1da, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x810c, 0xc196, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, - 0x0801, 0xc959, 0x688f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0801, 0xc959, 0x0802, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1824, 0xa8bb, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x1824, 0x586f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5573,9 +5573,9 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x993a, 0x993a, 0x0001, 0x0020, 0x0000, 0x0000, + 0x0000, 0x0000, 0x480f, 0x993a, 0x0001, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0801, 0x694e, 0xe17d, 0x0001, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0801, 0x0801, 0xe17d, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc937, 0x0000, 0x0000, @@ -5584,25 +5584,25 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0xe196, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xd997, 0xb1b3, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xd997, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0xd954, 0x4024, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0801, 0xd9d5, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xd134, 0xd9b5, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xd134, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd1b6, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xd996, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x810c, 0xc196, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1022, 0xc95b, 0xd15b, 0x0821, 0x0000, 0x0000, 0x0000, + 0x0000, 0x1022, 0xc95b, 0x0802, 0x0821, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0001, 0xa95b, 0xb15d, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0001, 0x586f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5613,15 +5613,15 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x80b6, 0x913a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x993a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0820, 0xe1ff, 0xd9fe, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0820, 0x0801, 0xd9fe, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0x0000, 0xe1b7, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0020, 0x0000, 0xc937, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xf1d7, 0xb952, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xf1d7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0xd1b5, 0x0801, 0x0020, 0x0000, 0x0000, @@ -5631,18 +5631,18 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0801, 0xe216, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0xd974, 0xe1b5, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0020, 0x0000, 0xe1b5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd9d6, 0x2823, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0801, 0xea78, 0x1001, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x810c, 0xe1d7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xc199, 0xc9fb, 0x0000, 0x0020, 0x0000, + 0x0000, 0x0000, 0x0000, 0xc199, 0x0802, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0802, 0x0001, 0xa17c, 0x60d1, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0802, 0x586f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5653,15 +5653,15 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1003, - 0x3009, 0x9939, 0x0001, 0x0000, 0x0001, 0x0000, 0x0801, 0x1003, + 0x3009, 0x993a, 0x0001, 0x0000, 0x0001, 0x0000, 0x0801, 0x1003, 0x1002, 0x0802, 0x0801, 0x0801, 0x0801, 0x1002, 0x1002, 0x1002, - 0x0802, 0x0000, 0x2043, 0xb977, 0xc979, 0x0001, 0x0000, 0x0001, + 0x0802, 0x0000, 0x2043, 0xe1db, 0x0801, 0x0001, 0x0000, 0x0001, 0x0801, 0x0801, 0x0802, 0x0801, 0x0802, 0x1803, 0x1002, 0x1002, 0x1002, 0x1002, 0x1002, 0x1802, 0x1803, 0x1803, 0x1002, 0x1001, - 0x1002, 0x1002, 0x1822, 0x2003, 0xe1f7, 0x1022, 0x1001, 0x0801, + 0x1002, 0x1002, 0x1822, 0xc937, 0x0000, 0x1022, 0x1001, 0x0801, 0x0801, 0x0801, 0x1002, 0x1802, 0x1803, 0x1802, 0x1802, 0x1802, 0x1002, 0x1001, 0x1001, 0x1002, 0x1802, 0x1803, 0x2003, 0x1802, - 0x1001, 0xe997, 0xa130, 0x1001, 0x1022, 0x1802, 0x1802, 0x1002, + 0x1001, 0xe997, 0x0000, 0x1001, 0x1022, 0x1802, 0x1802, 0x1002, 0x1002, 0x1002, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1002, 0x1002, 0x1002, 0x1802, 0x1802, 0x2003, 0x2023, 0xd1d6, 0x0800, 0x1002, 0x1001, 0x1002, @@ -5671,18 +5671,18 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1002, 0x1001, 0xd1b5, 0x0000, 0x1022, 0x1002, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1002, - 0x1802, 0x2003, 0x2803, 0xc974, 0xd9b5, 0x1802, 0x1001, 0x1802, + 0x1802, 0x2003, 0x2803, 0x0000, 0xd9b5, 0x1802, 0x1001, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1002, 0x1802, 0x2003, 0x2003, 0x1802, 0xd9d6, 0x2824, 0x1001, 0x1001, 0x1002, 0x2003, 0x2003, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1802, 0x1002, 0x1002, 0x1002, - 0x1001, 0x1002, 0x0800, 0xe1d7, 0x2803, 0x0801, 0x1001, 0x1002, + 0x1001, 0x1002, 0x0800, 0x0000, 0x810c, 0xe1d7, 0x1001, 0x1002, 0x2003, 0x2003, 0x2003, 0x1802, 0x1001, 0x1001, 0x1001, 0x1002, 0x1002, 0x1002, 0x1002, 0x1002, 0x0801, 0x0801, 0x0801, 0x0801, - 0x0801, 0x0802, 0x0801, 0xa978, 0x9934, 0x0000, 0x0801, 0x0801, + 0x0801, 0x0802, 0x0801, 0x0801, 0x9934, 0x0000, 0x0801, 0x0801, 0x0802, 0x1002, 0x1003, 0x1002, 0x0801, 0x0801, 0x0801, 0x0801, - 0x1002, 0x0802, 0x0802, 0x0000, 0x0000, 0x0000, 0x88f7, 0x586f, + 0x1002, 0x0802, 0x0802, 0x0000, 0x0000, 0x0000, 0x586f, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5692,16 +5692,16 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0801, 0x480f, - 0x78b6, 0x0821, 0x0802, 0x0801, 0x2006, 0x1805, 0x1806, 0x3828, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0801, 0x0000, + 0x993a, 0x0821, 0x0802, 0x0801, 0x2006, 0x1805, 0x1806, 0x3828, 0x3829, 0x3829, 0x3829, 0x3008, 0x3008, 0x4029, 0x482a, 0x502b, - 0x502b, 0x3808, 0xe1db, 0x0000, 0x0000, 0x1003, 0x1003, 0x2807, - 0x3007, 0x3007, 0x3828, 0x3028, 0x3828, 0x606b, 0x586b, 0x504a, + 0x502b, 0x3808, 0xe1db, 0x606b, 0x606b, 0x606b, 0x606b, 0x606b, + 0x606b, 0x606b, 0x606b, 0x606b, 0x606b, 0x606b, 0x586b, 0x504a, 0x688b, 0x606b, 0x606a, 0x606b, 0x708c, 0x708c, 0x78ad, 0x708c, - 0x688b, 0x688b, 0x688b, 0xd9d7, 0x9930, 0x502a, 0x586b, 0x584a, + 0x688b, 0x688b, 0xc937, 0x586b, 0x9930, 0x502a, 0x586b, 0x584a, 0x688b, 0x608b, 0x688b, 0x688c, 0x708d, 0x788d, 0x78ad, 0x80ce, 0x78ad, 0x80ad, 0x80cd, 0x88ce, 0x90ce, 0x90ce, 0x90ce, 0x888d, - 0xd195, 0xe197, 0xb973, 0x608a, 0x708c, 0x88ce, 0x88ce, 0x80ad, + 0xd195, 0x90ef, 0x90ef, 0x608a, 0x708c, 0x88ce, 0x88ce, 0x80ad, 0x70ac, 0x70ac, 0x78ac, 0x80ad, 0x88ce, 0x98ef, 0x90ef, 0x90ef, 0x90ce, 0x90ee, 0x90cf, 0x90ce, 0x88ce, 0x80ad, 0x80ad, 0x80ad, 0x88ce, 0x90cf, 0xd216, 0xd1d5, 0x808e, 0x88ee, 0x88ee, 0x88ef, @@ -5709,21 +5709,20 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x90ef, 0x90ef, 0x90ef, 0x88ce, 0x88cd, 0x80cd, 0x80cd, 0xe1d6, 0xb972, 0x98ef, 0x90ee, 0x88ce, 0x90ef, 0x90ef, 0x90ef, 0x90ef, 0x90ef, 0x90ee, 0x90ef, 0x90ef, 0x90ef, 0x90ef, 0x88ce, 0x88ce, - 0xa931, 0x914f, 0xa110, 0x9910, 0x990f, 0x990f, 0x98ef, 0x90ef, + 0xd9b5, 0x914f, 0xa110, 0x9910, 0x990f, 0x990f, 0x98ef, 0x90ef, 0x90ef, 0x90ef, 0x90ef, 0x90ef, 0x90ef, 0x90ee, 0x90ee, 0x88ce, - 0x88ce, 0x88ee, 0x90ee, 0x98f0, 0xa952, 0xb993, 0x88cf, 0x90ef, + 0x88ce, 0x88ee, 0x90ee, 0x98f0, 0xa952, 0xd9b5, 0x88cf, 0x90ef, 0x90ef, 0x90ef, 0x90ef, 0x90ee, 0x90ee, 0x90ee, 0x90ee, 0x88ee, 0x88ee, 0x90ee, 0x90ee, 0x90ef, 0x88ce, 0x80ad, 0x78cc, 0x708c, - 0x78ac, 0x708c, 0xd1d5, 0xc174, 0xb993, 0x88ce, 0x90ef, 0x90ef, + 0x78ac, 0x708c, 0x708c, 0xc174, 0x90ef, 0x90ef, 0x90ef, 0x90ef, 0x90ef, 0x88ee, 0x80ce, 0x80ed, 0x80ee, 0x80cd, 0x88ce, 0x88ce, 0x80ce, 0x80cd, 0x80cd, 0x78cd, 0x78cd, 0x70cc, 0x78cd, 0x80ce, - 0x686b, 0x688c, 0x606b, 0xda37, 0xd9f6, 0x78cd, 0x80ed, 0x80ee, + 0x686b, 0x688c, 0x606b, 0x688c, 0x688c, 0x810c, 0xe1d7, 0x80ee, 0x88ef, 0x90ef, 0x88ce, 0x80ce, 0x80cd, 0x70ac, 0x68ab, 0x70cc, 0x584b, 0x606c, 0x606c, 0x608b, 0x4049, 0x4849, 0x4849, 0x484a, 0x2807, 0x2005, 0x1805, 0x0803, 0x1802, 0xd97a, 0x4049, 0x586c, 0x604c, 0x606c, 0x584b, 0x506a, 0x3829, 0x4029, 0x3809, 0x382a, - 0x380a, 0x3008, 0x2808, 0x1806, 0x1003, 0x0000, 0x0001, 0x0000, - 0x300b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x380a, 0x3008, 0x2808, 0x1806, 0x1003, 0x0000, 0x0001, 0x586f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5732,13 +5731,14 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2809, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x3009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x710e, 0xf21d, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0801, 0xf21d, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, - 0x0800, 0x0000, 0xd196, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0800, 0xc937, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0xd9d6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5749,21 +5749,21 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x68eb, 0x3829, 0x0802, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x60ea, 0xb1b3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xd9b5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2043, 0xb973, 0x0000, 0x0020, + 0x0000, 0x0000, 0x0000, 0x0000, 0x2043, 0xd9b5, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x912f, 0xc994, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xc994, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc9d5, 0x0000, 0x0800, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x810c, 0xe1d7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0xe1fa, 0x814f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0xe1fa, 0x0802, + 0x0802, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2008, 0x2829, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x586f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5772,13 +5772,13 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2007, 0x0001, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2007, 0x3009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1823, - 0x90d1, 0xb997, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xe1db, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2023, 0xc934, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xc937, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1001, 0xc174, 0x0801, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5789,21 +5789,22 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x704b, 0x2806, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x592a, 0xb933, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xb1b3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1022, 0xb973, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x1022, 0xd9b5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0x70ec, 0xc913, 0x1822, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0020, 0x0000, 0xc913, 0x1822, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0801, 0xc114, 0x1803, 0x1001, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0801, 0x0801, 0x0000, 0x810c, + 0xe1d7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0802, 0xc95a, + 0x0802, 0x0802, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb175, 0x60ac, - 0x1022, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x586f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2007, 0x2008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5812,13 +5813,12 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1807, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0001, 0xd15d, - 0x3867, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0801, 0xc976, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc937, + 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd196, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5829,7 +5829,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc995, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xda18, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xb1b3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc174, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5837,13 +5837,13 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc174, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb976, 0x58eb, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0801, 0x0801, 0x0000, + 0x810c, 0xe1d7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xc95a, 0x0802, 0x0802, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xc95a, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2809, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5854,34 +5854,25 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x8935, 0xa159, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0801, 0xa159, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x4069, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1002, 0x504b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x586d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x484b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x500b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x70ae, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x484a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2045, 0x3027, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x6831, 0x6872, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5890,39 +5881,29 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0802, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0001, 0x0001, 0x0001, 0x0802, 0x0802, 0x0802, 0x0001, 0x0001, - 0x0801, 0x0802, 0x0001, 0x0001, 0x1806, 0x406c, 0x488d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1804, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2004, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0801, 0x1002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0821, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0801, 0x0001, 0x0001, 0x1806, 0x406c, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0822, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1803, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2006, 0x3029, 0x1805, 0x0802, 0x0000, 0x0001, 0x0802, - 0x0802, 0x0802, 0x0802, 0x0803, 0x0802, 0x0802, 0x0801, 0x0802, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5933,8 +5914,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1003, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x0803, 0x0803, - 0x1004, 0x1805, 0x1005, 0x1806, 0x300b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5958,11 +5937,10 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xaa7b, 0xaabd, 0xaadc, 0xa2bc, 0xaa9c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x380c, 0x1805, 0x0803, 0x1004, 0x1004, - 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5973,8 +5951,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1003, 0x0803, 0x0803, 0x0803, 0x0803, 0x0803, 0x0803, - 0x0803, 0x0803, 0x5030, 0x1806, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5982,6 +5958,7 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xaa9d, 0xa2dc, 0xaadd, 0xa2dc, 0xaabc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6000,9 +5977,8 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xa23c, 0xa29c, 0xaadc, 0xaadc, 0xb27e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0802, 0x2808, 0x0802, 0x0803, - 0x0803, 0x0803, 0x0803, 0x0803, 0x0803, 0x0803, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6014,35 +5990,15 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1004, 0x282a, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x028b, 0x0a09, 0x0229, 0x028a, 0x02ab, 0x034f, - 0x0000, 0x0000, 0x0020, 0x026a, 0x01e8, 0x01e8, 0x0229, 0x028b, - 0x034d, 0x0000, 0x0020, 0x0269, 0x022a, 0x024a, 0x028b, 0x02ab, - 0x028b, 0x0020, 0x0020, 0x0aec, 0x024a, 0x024a, 0x024a, 0x0229, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x028b, 0x026b, 0x02ac, - 0x02ad, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0229, 0x0229, 0x024a, 0x026b, 0x0020, - 0x0000, 0x0000, 0x0020, 0x026a, 0x026a, 0x024a, 0x024a, 0x0000, - 0x0000, 0x0020, 0x02ed, 0x030c, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0186, 0x026b, 0x0041, 0x0000, 0x0147, 0x0229, 0x0229, 0x0209, - 0x0000, 0x0020, 0x032d, 0x02ab, 0x0020, 0x0000, 0x0187, 0x0209, - 0x0000, 0x0000, 0x0000, 0x0209, 0x02ab, 0x026a, 0x028b, 0x028a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0124, 0x0167, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0208, 0x01e8, 0x01e8, 0x0229, - 0x0000, 0x0000, 0x0000, 0x0020, 0x02aa, 0x026b, 0x01e8, 0x00e5, - 0x0000, 0x0000, 0x0000, 0x0a49, 0x0a29, 0x0249, 0x026a, 0x0105, - 0x0020, 0x0000, 0x0000, 0x0269, 0x0208, 0x01e9, 0x0082, 0x0000, - 0x0020, 0x026a, 0x0000, 0x0000, 0x0000, 0x01a7, 0x0000, 0x0000, - 0x0000, 0x0000, 0x026a, 0x0229, 0x024a, 0x026b, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0801, 0x280b, 0x2008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xa25d, 0xaafc, 0xaafd, 0xaabc, 0xaa7c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6054,35 +6010,14 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1004, 0x300b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0020, 0x071d, 0x06be, 0x069d, 0x06de, 0x16de, 0x07bf, - 0x0041, 0x0000, 0x0000, 0x06fe, 0x06de, 0x067d, 0x067d, 0x06de, - 0x07df, 0x0021, 0x0041, 0x06fd, 0x06de, 0x06de, 0x06bf, 0x069d, - 0x06bd, 0x0041, 0x0020, 0x0fff, 0x0edf, 0x06de, 0x069d, 0x067c, - 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x06fe, 0x06dd, 0x06fe, - 0x075f, 0x0041, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0020, 0x065b, 0x06dd, 0x069c, 0x071e, 0x071f, 0x0020, - 0x0000, 0x0000, 0x0061, 0x071f, 0x06de, 0x06de, 0x071f, 0x0020, - 0x0000, 0x0021, 0x071f, 0x073f, 0x0000, 0x0000, 0x0000, 0x0020, - 0x030d, 0x0ebe, 0x0061, 0x0000, 0x0475, 0x069e, 0x06bf, 0x065d, - 0x0021, 0x0000, 0x073f, 0x06df, 0x0041, 0x0020, 0x0cd6, 0x06be, - 0x0021, 0x0000, 0x0000, 0x065a, 0x16fe, 0x06fe, 0x06bd, 0x06bd, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, - 0x06dd, 0x075f, 0x0021, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0x0020, 0x071e, 0x069c, 0x069c, 0x073e, - 0x0040, 0x0000, 0x0020, 0x0041, 0x073f, 0x06fe, 0x06dd, 0x061c, - 0x0000, 0x0000, 0x0020, 0x06bd, 0x069d, 0x06de, 0x06fe, 0x0433, - 0x0841, 0x0020, 0x0061, 0x06de, 0x06de, 0x069e, 0x01a7, 0x0020, - 0x0000, 0x0edd, 0x0000, 0x0000, 0x0000, 0x06bd, 0x0000, 0x0000, - 0x0020, 0x0000, 0x0ede, 0x06fe, 0x069d, 0x06bd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0800, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x280b, 0x2007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1023, 0xaa9c, + 0x0821, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa7c, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6093,36 +6028,8 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x280a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0xe9d4, 0xf173, 0xf153, 0xf153, - 0xf193, 0xf1d4, 0xf1b4, 0xf153, 0xe932, 0xf173, 0xf133, 0xe912, - 0xe952, 0xe973, 0xf173, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0020, 0x0f3e, 0x077f, 0x0021, 0x0041, 0x0061, 0x075f, - 0x069f, 0x0021, 0x0000, 0x06bd, 0x0000, 0x0020, 0x0021, 0x0020, - 0x0000, 0x0000, 0x0000, 0x0020, 0x0062, 0x075f, 0x079f, 0x0041, - 0x0020, 0x0000, 0x0020, 0x0fff, 0x075f, 0x0061, 0x0041, 0x0020, - 0x06be, 0x069c, 0x0020, 0x0000, 0x06de, 0x0020, 0x0020, 0x0041, - 0x061d, 0x06be, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0041, 0x0598, 0x073f, 0x0061, 0x0041, 0x0041, 0x0041, 0x0000, - 0x0000, 0x0000, 0x0e9d, 0x0000, 0x0041, 0x0061, 0x028c, 0x06bd, - 0x0020, 0x0021, 0x06be, 0x06be, 0x06be, 0x00e3, 0x0041, 0x053a, - 0x06be, 0x06be, 0x0020, 0x0000, 0x0041, 0x02ce, 0x075f, 0x0020, - 0x0000, 0x0000, 0x06fe, 0x06fe, 0x075f, 0x00c3, 0x0d37, 0x069e, - 0x0020, 0x0000, 0x06be, 0x073f, 0x0062, 0x0021, 0x0020, 0x0020, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0041, 0x16dc, - 0x0000, 0x0370, 0x173f, 0x0041, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x00c3, 0x16bd, 0x0082, 0x0020, 0x0041, 0x0041, - 0x0125, 0x0020, 0x0000, 0x06de, 0x0000, 0x0021, 0x0000, 0x06bd, - 0x077f, 0x0041, 0x0020, 0x06bd, 0x0209, 0x0041, 0x0021, 0x075f, - 0x06de, 0x0041, 0x0000, 0x0082, 0x16bd, 0x0022, 0x0000, 0x0000, - 0x0000, 0x06de, 0x069d, 0x03f3, 0x0020, 0x06fe, 0x0020, 0x0021, - 0x06df, 0x06de, 0x0020, 0x0041, 0x0041, 0x0021, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0xf154, 0xf173, 0xf193, - 0xf1d4, 0xf1b4, 0xf153, 0xf133, 0xf173, 0xf1d4, 0xf1f4, 0xf1b4, - 0xf173, 0xf153, 0xf173, 0xf1b3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1807, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6131,38 +6038,12 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0800, 0xa27d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xa27c, 0x1023, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2009, 0x0801, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0800, 0x5846, 0x5066, 0x5046, 0x5046, - 0x5046, 0x5847, 0x6047, 0x5846, 0x4825, 0xf173, 0xe932, 0x5046, - 0x4845, 0x4825, 0x4826, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0020, 0x075f, 0x077f, 0x0cf7, 0x0d18, 0x1559, 0x06fe, - 0x01c9, 0x0000, 0x0000, 0x06fe, 0x05b8, 0x0579, 0x0538, 0x0041, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0021, 0x073e, 0x07bf, 0x0000, - 0x0000, 0x0000, 0x0020, 0x07df, 0x06fe, 0x0c54, 0x0cf8, 0x1559, - 0x06df, 0x024a, 0x0020, 0x0000, 0x069d, 0x0000, 0x0000, 0x0020, - 0x061b, 0x069d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0041, 0x0578, 0x071f, 0x0041, 0x0000, 0x0d17, 0x0538, 0x0146, - 0x0000, 0x0000, 0x06dd, 0x032d, 0x0391, 0x0c54, 0x0d17, 0x06be, - 0x0020, 0x0021, 0x06df, 0x073f, 0x0944, 0x06de, 0x0599, 0x04f9, - 0x024a, 0x065c, 0x0020, 0x0000, 0x0020, 0x026c, 0x0f5f, 0x0000, - 0x0000, 0x0000, 0x073f, 0x06ff, 0x0390, 0x0517, 0x05fa, 0x065d, - 0x0020, 0x0000, 0x073f, 0x077f, 0x0041, 0x028e, 0x0414, 0x04d7, - 0x0209, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x01e8, - 0x069c, 0x067e, 0x0041, 0x0041, 0x0020, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x00a3, 0x06de, 0x0041, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x06bd, 0x0000, 0x0000, 0x0000, 0x06bd, - 0x07bf, 0x0041, 0x0041, 0x0ede, 0x0209, 0x0000, 0x0000, 0x075f, - 0x06de, 0x0041, 0x0000, 0x0062, 0x16dd, 0x0001, 0x0000, 0x0000, - 0x0000, 0x0ede, 0x0143, 0x0ebe, 0x0c95, 0x06ff, 0x0000, 0x0020, - 0x073f, 0x0f1f, 0x0020, 0x0000, 0x0c96, 0x04f8, 0x0538, 0x0020, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4025, 0x5065, 0x5066, - 0x5086, 0xf9d4, 0xf9b5, 0x4845, 0x4845, 0x5046, 0x5046, 0x4845, - 0x4045, 0x4845, 0x5046, 0x4025, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2027, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6173,36 +6054,17 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2007, 0x2027, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6087, 0xc92f, 0xd170, 0xd9b1, 0xd991, 0xc94f, 0xc94f, 0xc94f, - 0xc970, 0xc970, 0x4024, 0x0000, 0x0000, 0x3825, 0x4026, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0020, 0x06fd, 0x071f, 0x07bf, 0x077f, 0x06be, 0x0599, - 0x0000, 0x0000, 0x0000, 0x0ede, 0x01e7, 0x01e8, 0x0269, 0x0021, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0021, 0x073f, 0x07ff, 0x0020, - 0x0000, 0x0000, 0x0020, 0x07bf, 0x06de, 0x065c, 0x063d, 0x0f1f, - 0x0083, 0x0820, 0x0020, 0x0000, 0x06bd, 0x0000, 0x0000, 0x0000, - 0x061b, 0x069e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0041, 0x0598, 0x0f1f, 0x0020, 0x0000, 0x0b0d, 0x06ff, 0x022a, - 0x0020, 0x0000, 0x06fe, 0x06df, 0x06ff, 0x06bd, 0x06de, 0x069d, - 0x0020, 0x0021, 0x073f, 0x07df, 0x0041, 0x0146, 0x06bd, 0x00a3, - 0x00a3, 0x067c, 0x0041, 0x0000, 0x0020, 0x022b, 0x0f1f, 0x0000, - 0x0020, 0x0000, 0x073f, 0x06be, 0x0020, 0x02ac, 0x067d, 0x069d, - 0x0021, 0x0020, 0x075f, 0x075f, 0x0041, 0x00a3, 0x0209, 0x069e, - 0x02ed, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x06de, - 0x030d, 0x073f, 0x05ba, 0x05bb, 0x00c4, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x00a3, 0x0ede, 0x0041, 0x0000, 0x0000, 0x0020, - 0x0020, 0x0000, 0x0000, 0x069d, 0x0000, 0x0000, 0x0000, 0x06be, - 0x0fff, 0x0041, 0x0021, 0x0edd, 0x01a7, 0x0000, 0x0000, 0x073f, - 0x071f, 0x0041, 0x0000, 0x0041, 0x0ebd, 0x0000, 0x0020, 0x0020, - 0x0000, 0x06de, 0x0000, 0x0187, 0x069e, 0x069d, 0x0000, 0x0020, - 0x071f, 0x0f1f, 0x0000, 0x0000, 0x02ac, 0x075f, 0x079f, 0x0020, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1023, 0xa29c, + 0x0821, 0x0000, 0x0000, 0x0000, 0x0000, 0xa29c, 0xab5e, 0xab1f, + 0xab1f, 0xab3f, 0xab1f, 0xab3f, 0xab3e, 0xab1e, 0xab3e, 0xb33f, + 0xb35f, 0xb33f, 0xb35f, 0xb35f, 0xb33e, 0xab3e, 0xab3e, 0xb35f, + 0xb35f, 0xb35f, 0xb35f, 0xb33f, 0xb33f, 0xb33f, 0xb33f, 0xb33f, + 0xb33f, 0xb33f, 0xb33f, 0xb33f, 0xb33f, 0xb33f, 0xb33e, 0xab3e, + 0xab1e, 0xab1e, 0xab3e, 0xb33f, 0xab3f, 0xab1e, 0xab1e, 0xab1e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x786a, 0x80ab, 0x0000, 0x0000, 0x0000, 0xd0ef, 0xc92e, - 0xd150, 0xd990, 0xd170, 0xc14f, 0xb94e, 0xc16f, 0xc970, 0x78ca, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0802, 0x1806, 0x2008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6211,38 +6073,19 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xab1f, 0xb33f, 0xb31e, 0xab3f, 0xb35f, 0xab3e, 0xab1e, 0xab3e, + 0xb33f, 0xb33f, 0xab1e, 0xab1e, 0xab1e, 0xaafe, 0xaafe, 0xab1e, + 0xb33e, 0xb35f, 0xb35f, 0xb33e, 0xb33e, 0xab3e, 0xab3e, 0xb33e, + 0xab1e, 0xab3e, 0xb33f, 0xb35f, 0xb35f, 0xb33f, 0xb33e, 0xb31e, + 0xb33f, 0xab3e, 0xab3e, 0xab1e, 0xab3e, 0xab3e, 0xa2fd, 0xa2fd, + 0xa33e, 0xa31b, 0xa2bd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xa25c, 0x1023, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x280a, 0x280b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x788a, 0xf1d4, 0xf1f4, 0xf1f3, 0xf1b3, 0xf193, 0xf193, 0xf1d3, - 0xf1b3, 0xe993, 0x3803, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0020, 0x071e, 0x071f, 0x0000, 0x0041, 0x061d, 0x06fd, - 0x0020, 0x0000, 0x0000, 0x06dd, 0x0000, 0x0041, 0x0041, 0x0061, - 0x0041, 0x0000, 0x0000, 0x0000, 0x0021, 0x075f, 0x07ff, 0x0020, - 0x0000, 0x0000, 0x0020, 0x07bf, 0x071f, 0x0020, 0x0041, 0x073f, - 0x067d, 0x0020, 0x0000, 0x0000, 0x069d, 0x0000, 0x0000, 0x0000, - 0x05fc, 0x0e5d, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0020, 0x0558, 0x06be, 0x0020, 0x0000, 0x0021, 0x06ff, 0x01e8, - 0x0020, 0x0000, 0x0edd, 0x0000, 0x0020, 0x0061, 0x020a, 0x069d, - 0x0020, 0x0021, 0x075f, 0x07ff, 0x0021, 0x0083, 0x0579, 0x0000, - 0x00a3, 0x069d, 0x0041, 0x0000, 0x0021, 0x02ad, 0x071f, 0x0040, - 0x0000, 0x0000, 0x071e, 0x06de, 0x0020, 0x0000, 0x06df, 0x06be, - 0x0021, 0x0000, 0x06bd, 0x06ff, 0x0041, 0x0000, 0x0061, 0x167d, - 0x02cc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x067e, - 0x0061, 0x0209, 0x067e, 0x03b1, 0x0020, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x00c4, 0x169d, 0x0061, 0x0000, 0x0000, 0x00e3, - 0x022a, 0x0020, 0x0000, 0x067d, 0x0000, 0x0000, 0x0000, 0x06be, - 0x0f9f, 0x0021, 0x0020, 0x06bd, 0x01a7, 0x0020, 0x0020, 0x075f, - 0x0efe, 0x0021, 0x0000, 0x0020, 0x0e9d, 0x0000, 0x0020, 0x0020, - 0x0000, 0x067d, 0x0000, 0x0021, 0x06fe, 0x06de, 0x0000, 0x0020, - 0x063c, 0x065c, 0x0000, 0x0020, 0x0000, 0x073f, 0x075e, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe932, 0xf194, - 0xf1d4, 0xf1f4, 0xf1d3, 0xf193, 0xf1b3, 0xf1f4, 0xf1d4, 0x88cb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x280a, 0x280b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6253,36 +6096,161 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0001, 0x2008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0823, 0x9a1c, + 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x9a3c, 0xaabe, 0xb31e, + 0xaadd, 0xaabd, 0xb2bd, 0xb2dd, 0xaadd, 0xb2dd, 0xb2dd, 0xb2dd, + 0xb2dd, 0xb2dd, 0xb2fd, 0xb2dd, 0xb2fd, 0xb2dd, 0xb2dd, 0xb2fd, + 0xb2fd, 0xb2fd, 0xb2dd, 0xb2dd, 0xb2dd, 0xb2dd, 0xb2dd, 0xb2dd, + 0xb2dd, 0xb2dd, 0xb2dd, 0xb2dd, 0xb2dd, 0xaadd, 0xb2bd, 0xb2bd, + 0xaabd, 0xaabd, 0xb2bd, 0xb2dd, 0xb2dd, 0xaadd, 0xaabc, 0xaabd, + 0xab1e, 0xab1e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xab1e, 0xab1e, + 0xaabe, 0xb2dd, 0xb2fd, 0xb2dd, 0xb2dd, 0xaabd, 0xb2dd, 0xb2bd, + 0xaabd, 0xb2dd, 0xaabd, 0xaabd, 0xaabc, 0xaabd, 0xaabd, 0xaadd, + 0xaadd, 0xb2dd, 0xb2dd, 0xb2dd, 0xb2dd, 0xaadd, 0xaadd, 0xaadd, + 0xaadd, 0xb2dd, 0xaabd, 0xb2dd, 0xb2dd, 0xb2dd, 0xaabd, 0xaabd, + 0xb2bd, 0xaabd, 0xaadd, 0xaabd, 0xaabd, 0xaabc, 0xaabc, 0xaadc, + 0xaadd, 0xaabc, 0x9a5c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x9a1b, 0x0822, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0823, 0x9a5b, + 0x0821, 0x0000, 0x0000, 0x0000, 0x0000, 0x9a1c, 0x0000, 0x0001, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x8218, 0x9a1b, 0x1003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x9a1c, 0x81d7, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x9a5b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, + 0x9a5b, 0x0822, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1825, + 0xaafc, 0xa2fd, 0x9adb, 0x9adb, 0xaafd, 0x0001, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x1844, 0xa2fc, 0x9adc, 0x9adb, 0x9adb, 0x9afc, 0x9adb, + 0x92db, 0x92db, 0x92db, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x8258, 0x8258, 0x8278, 0x8a7a, 0x8a99, 0x8a99, 0x92ba, 0x9adb, + 0x9adb, 0x92da, 0x92da, 0x9afb, 0x929b, 0x929b, 0x0802, 0x0801, + 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x1023, 0xaafd, 0x9afc, 0x92ba, 0x9abb, 0x9add, + 0x0802, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xb2fe, 0xab1e, 0xaafd, 0xaafd, 0xbadf, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0801, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xb2fe, 0xaafe, 0xaadd, 0xaadd, 0xaabe, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0020, 0x06de, 0x06fe, 0x0000, 0x0000, 0x0000, 0x06fe, - 0x07df, 0x0020, 0x0000, 0x06fe, 0x0efe, 0x0ebe, 0x06de, 0x06bd, - 0x075f, 0x0021, 0x0000, 0x0000, 0x0041, 0x071f, 0x075f, 0x0000, - 0x0000, 0x0000, 0x0020, 0x07bf, 0x06ff, 0x0020, 0x0000, 0x0000, - 0x067c, 0x063b, 0x0000, 0x0000, 0x0020, 0x0ede, 0x06be, 0x06bd, - 0x05bb, 0x0041, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0020, 0x030f, 0x069d, 0x065c, 0x069d, 0x073f, 0x0021, - 0x0000, 0x0000, 0x0edd, 0x0000, 0x0000, 0x0020, 0x0209, 0x06ff, - 0x0061, 0x0021, 0x0eff, 0x077f, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00c4, 0x0ebd, 0x0061, 0x0000, 0x0494, 0x06be, 0x06de, 0x065c, - 0x0020, 0x0000, 0x06fd, 0x06fe, 0x0020, 0x0020, 0x0559, 0x069d, - 0x0020, 0x0000, 0x0020, 0x06fe, 0x06de, 0x0ede, 0x0ede, 0x0146, - 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0063, - 0x069d, 0x067d, 0x0000, 0x069d, 0x032e, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0x0000, 0x06fe, 0x06de, 0x069d, 0x073d, - 0x0020, 0x0000, 0x0000, 0x0000, 0x06bd, 0x06bd, 0x06bd, 0x065e, - 0x0000, 0x0000, 0x0020, 0x069c, 0x06bd, 0x06de, 0x06be, 0x03f1, - 0x0020, 0x0000, 0x0041, 0x06be, 0x06fe, 0x06be, 0x0168, 0x0020, - 0x0000, 0x06bd, 0x0000, 0x0020, 0x0062, 0x0efd, 0x0041, 0x0000, - 0x0020, 0x0000, 0x0ebd, 0x06de, 0x06be, 0x06de, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6293,23 +6261,18 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1806, 0x1005, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6322,7 +6285,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x1004, 0x1026, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6333,7 +6295,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2008, 0x1004, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6362,7 +6323,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1005, 0x2009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6373,7 +6333,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1806, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6402,7 +6361,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6413,7 +6371,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0802, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6427,8 +6384,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, - 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6442,7 +6397,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6467,9 +6421,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5a20, 0x0000, 0x0000, 0x0000, 0x5a40, 0x0000, 0x0020, 0x5201, - 0x6240, 0x0000, 0x0000, 0x5a40, 0x0020, 0x0000, 0x0000, 0x72c0, - 0x0860, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6507,9 +6458,26 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xfe20, 0x0820, 0x0020, 0x1040, 0xfec0, 0x0820, 0x0820, 0xe581, - 0xed81, 0x0000, 0x0000, 0xf6c1, 0x1080, 0x0020, 0x0820, 0xfec1, - 0x1880, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0020, 0x071d, 0x06be, 0x069d, 0x06de, 0x16de, 0x07bf, + 0x0041, 0x0000, 0x0000, 0x06fe, 0x06de, 0x067d, 0x067d, 0x06de, + 0x07df, 0x0021, 0x0041, 0x06fd, 0x06de, 0x06de, 0x06bf, 0x069d, + 0x06bd, 0x0041, 0x0020, 0x0fff, 0x0edf, 0x06de, 0x069d, 0x067c, + 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x06fe, 0x06dd, 0x06fe, + 0x075f, 0x0041, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0020, 0x065b, 0x06dd, 0x069c, 0x071e, 0x071f, 0x0020, + 0x0000, 0x0000, 0x0061, 0x071f, 0x06de, 0x06de, 0x071f, 0x0020, + 0x0000, 0x0021, 0x071f, 0x073f, 0x0000, 0x0000, 0x0000, 0x0020, + 0x030d, 0x0ebe, 0x0061, 0x0000, 0x0475, 0x069e, 0x06bf, 0x065d, + 0x0021, 0x0000, 0x073f, 0x06df, 0x0041, 0x0020, 0x0cd6, 0x06be, + 0x0021, 0x0000, 0x0000, 0x065a, 0x16fe, 0x06fe, 0x06bd, 0x06bd, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, + 0x06dd, 0x075f, 0x0021, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0020, 0x0020, 0x071e, 0x069c, 0x069c, 0x073e, + 0x0209, 0x0000, 0x0020, 0x0041, 0x073f, 0x06fe, 0x06dd, 0x061c, + 0x0000, 0x0000, 0x0020, 0x06bd, 0x069d, 0x06de, 0x06fe, 0x0433, + 0x0841, 0x0020, 0x0061, 0x06de, 0x06de, 0x069e, 0x01a7, 0x0020, + 0x0000, 0x0edd, 0x0000, 0x0000, 0x0000, 0x06bd, 0x0000, 0x0000, + 0x0020, 0x0000, 0x0ede, 0x06fe, 0x069d, 0x06bd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6530,6 +6498,26 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0020, 0x0f3e, 0x077f, 0x0021, 0x0041, 0x0061, 0x075f, + 0x069f, 0x0021, 0x0000, 0x06bd, 0x0000, 0x0020, 0x0021, 0x0020, + 0x0000, 0x0000, 0x0000, 0x0020, 0x0062, 0x075f, 0x079f, 0x0041, + 0x0020, 0x0000, 0x0020, 0x0fff, 0x075f, 0x0061, 0x0041, 0x0020, + 0x06be, 0x069c, 0x0020, 0x0000, 0x06de, 0x0209, 0x0020, 0x0041, + 0x0000, 0x06be, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0041, 0x0598, 0x073f, 0x0061, 0x0041, 0x0041, 0x0041, 0x0000, + 0x0000, 0x0000, 0x0e9d, 0x020a, 0x0041, 0x0061, 0x0061, 0x06bd, + 0x0020, 0x0021, 0x06be, 0x0391, 0x06be, 0x00e3, 0x0041, 0x053a, + 0x06be, 0x06be, 0x0020, 0x0000, 0x0041, 0x02ce, 0x075f, 0x0020, + 0x0000, 0x0000, 0x06fe, 0x06fe, 0x075f, 0x00c3, 0x0d37, 0x069e, + 0x0020, 0x0000, 0x06be, 0x073f, 0x0062, 0x0021, 0x0020, 0x0020, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0041, 0x16dc, + 0x0000, 0x0370, 0x173f, 0x0041, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x00c3, 0x16bd, 0x0082, 0x0082, 0x0041, 0x0041, + 0x0000, 0x0020, 0x0000, 0x06de, 0x0209, 0x0021, 0x0000, 0x0000, + 0x077f, 0x0041, 0x0020, 0x06bd, 0x0209, 0x0041, 0x0021, 0x075f, + 0x06de, 0x0041, 0x0000, 0x0082, 0x16bd, 0x0022, 0x0000, 0x0000, + 0x0000, 0x06de, 0x069d, 0x03f3, 0x0020, 0x06fe, 0x0020, 0x0021, + 0x06df, 0x06de, 0x0020, 0x0041, 0x0041, 0x0021, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6547,12 +6535,29 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xfe41, 0x0840, 0x0020, 0x1880, 0xfec1, 0x0820, 0x0820, 0xf6a1, - 0xdd21, 0x0000, 0x0820, 0xff22, 0x1880, 0x0820, 0x0840, 0xfec2, - 0x1080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0020, 0x075f, 0x077f, 0x020a, 0x020a, 0x020a, 0x06fe, + 0x01c9, 0x0000, 0x0000, 0x06fe, 0x05b8, 0x0579, 0x0538, 0x0041, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0021, 0x073e, 0x07bf, 0x0000, + 0x0000, 0x0000, 0x0020, 0x07df, 0x06fe, 0x020a, 0x020a, 0x020a, + 0x06df, 0x024a, 0x0020, 0x0000, 0x069d, 0x0209, 0x0000, 0x0020, + 0x0000, 0x069d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0041, 0x0578, 0x071f, 0x0041, 0x0000, 0x0d17, 0x0538, 0x0146, + 0x0000, 0x0000, 0x06dd, 0x020a, 0x0061, 0x0061, 0x0061, 0x06be, + 0x0020, 0x0021, 0x06df, 0x0391, 0x0944, 0x06de, 0x0599, 0x04f9, + 0x024a, 0x065c, 0x0020, 0x0000, 0x0020, 0x026c, 0x0f5f, 0x0000, + 0x0000, 0x0000, 0x073f, 0x06ff, 0x0390, 0x0517, 0x05fa, 0x065d, + 0x0020, 0x0000, 0x073f, 0x077f, 0x0041, 0x028e, 0x0414, 0x04d7, + 0x0209, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x01e8, + 0x069c, 0x067e, 0x0041, 0x0041, 0x0020, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x00a3, 0x06de, 0x0082, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x06bd, 0x0209, 0x0000, 0x0000, 0x0000, + 0x07bf, 0x0041, 0x0041, 0x0ede, 0x0209, 0x0000, 0x0000, 0x0209, + 0x06de, 0x0041, 0x0000, 0x0062, 0x16dd, 0x0001, 0x0000, 0x0000, + 0x0000, 0x0ede, 0x0143, 0x0ebe, 0x0c95, 0x06ff, 0x0000, 0x0020, + 0x073f, 0x0f1f, 0x0020, 0x0000, 0x0c96, 0x04f8, 0x0538, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6573,11 +6578,73 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0020, 0x06fd, 0x071f, 0x07bf, 0x077f, 0x06be, 0x0599, + 0x0000, 0x0000, 0x0000, 0x0ede, 0x01e7, 0x01e8, 0x0269, 0x0021, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0021, 0x073f, 0x07ff, 0x0020, + 0x0000, 0x0000, 0x0020, 0x07bf, 0x06de, 0x065c, 0x063d, 0x0f1f, + 0x0083, 0x0820, 0x0020, 0x0000, 0x06bd, 0x0209, 0x0000, 0x0000, + 0x0000, 0x069e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0041, 0x0598, 0x0f1f, 0x0020, 0x0000, 0x0b0d, 0x06ff, 0x022a, + 0x0020, 0x0000, 0x06fe, 0x06df, 0x06ff, 0x06bd, 0x06de, 0x069d, + 0x0020, 0x0021, 0x073f, 0x0391, 0x0041, 0x0146, 0x06bd, 0x00a3, + 0x00a3, 0x067c, 0x0041, 0x0000, 0x0020, 0x022b, 0x0f1f, 0x0000, + 0x0020, 0x0000, 0x073f, 0x06be, 0x0020, 0x02ac, 0x067d, 0x069d, + 0x0021, 0x0020, 0x075f, 0x075f, 0x0041, 0x00a3, 0x0209, 0x069e, + 0x02ed, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x06de, + 0x030d, 0x073f, 0x05ba, 0x05bb, 0x00c4, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x00a3, 0x0ede, 0x0082, 0x0000, 0x0000, 0x0020, + 0x0020, 0x0000, 0x0000, 0x069d, 0x0209, 0x0000, 0x0000, 0x0000, + 0x0fff, 0x0041, 0x0021, 0x0edd, 0x01a7, 0x0000, 0x0000, 0x0209, + 0x071f, 0x0041, 0x0000, 0x0041, 0x0ebd, 0x0000, 0x0020, 0x0020, + 0x0000, 0x06de, 0x0000, 0x0187, 0x069e, 0x069d, 0x0000, 0x0020, + 0x071f, 0x0f1f, 0x0000, 0x0000, 0x02ac, 0x075f, 0x079f, 0x0020, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0020, 0x071e, 0x071f, 0x0000, 0x0041, 0x061d, 0x06fd, + 0x0020, 0x0000, 0x0000, 0x06dd, 0x0000, 0x0041, 0x0041, 0x0061, + 0x0041, 0x0000, 0x0000, 0x0000, 0x0021, 0x075f, 0x07ff, 0x0020, + 0x0000, 0x0000, 0x0020, 0x07bf, 0x071f, 0x0020, 0x0041, 0x073f, + 0x067d, 0x0020, 0x0000, 0x0000, 0x069d, 0x0209, 0x0000, 0x0000, + 0x0000, 0x0e5d, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0020, 0x0558, 0x06be, 0x0020, 0x0000, 0x0021, 0x06ff, 0x01e8, + 0x0020, 0x0000, 0x0edd, 0x020a, 0x0020, 0x0061, 0x020a, 0x069d, + 0x0020, 0x0021, 0x075f, 0x0391, 0x0021, 0x0083, 0x0579, 0x0000, + 0x00a3, 0x069d, 0x0041, 0x0000, 0x0021, 0x02ad, 0x071f, 0x0040, + 0x0000, 0x0000, 0x071e, 0x06de, 0x0020, 0x0000, 0x06df, 0x06be, + 0x0021, 0x0000, 0x06bd, 0x06ff, 0x0041, 0x0000, 0x0061, 0x167d, + 0x02cc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x067e, + 0x0061, 0x0209, 0x067e, 0x03b1, 0x0020, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x00c4, 0x169d, 0x0082, 0x0082, 0x0000, 0x0000, + 0x0000, 0x0020, 0x0000, 0x067d, 0x0209, 0x0000, 0x0000, 0x0000, + 0x0f9f, 0x0021, 0x0020, 0x06bd, 0x01a7, 0x0020, 0x0020, 0x075f, + 0x0efe, 0x0021, 0x0000, 0x0020, 0x0e9d, 0x0000, 0x0020, 0x0020, + 0x0000, 0x067d, 0x0000, 0x0021, 0x06fe, 0x06de, 0x0000, 0x0020, + 0x063c, 0x065c, 0x0000, 0x0020, 0x0000, 0x073f, 0x075e, 0x0020, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xaa7b, 0xaabd, 0xaadc, 0xa2bc, 0xaa9c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6587,9 +6654,61 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0020, 0x06de, 0x06fe, 0x0000, 0x0000, 0x0000, 0x06fe, + 0x07df, 0x0020, 0x0000, 0x06fe, 0x0efe, 0x0ebe, 0x06de, 0x06bd, + 0x075f, 0x0021, 0x0000, 0x0000, 0x0041, 0x071f, 0x075f, 0x0000, + 0x0000, 0x0000, 0x0020, 0x07bf, 0x06ff, 0x0020, 0x0000, 0x0000, + 0x067c, 0x063b, 0x0000, 0x0000, 0x0020, 0x0ede, 0x06be, 0x06bd, + 0x05bb, 0x0041, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0020, 0x030f, 0x069d, 0x065c, 0x069d, 0x073f, 0x0021, + 0x0000, 0x0000, 0x0edd, 0x020a, 0x0000, 0x0020, 0x0209, 0x06ff, + 0x0061, 0x0021, 0x0eff, 0x0391, 0x0000, 0x0000, 0x0000, 0x0000, + 0x00c4, 0x0ebd, 0x0061, 0x0000, 0x0494, 0x06be, 0x06de, 0x065c, + 0x0020, 0x0000, 0x06fd, 0x06fe, 0x0020, 0x0020, 0x0559, 0x069d, + 0x0020, 0x0000, 0x0020, 0x06fe, 0x06de, 0x0ede, 0x0ede, 0x0146, + 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0063, + 0x069d, 0x067d, 0x0000, 0x069d, 0x032e, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0020, 0x0000, 0x06fe, 0x06de, 0x069d, 0x073d, + 0x0209, 0x0000, 0x0000, 0x0000, 0x06bd, 0x06bd, 0x06bd, 0x065e, + 0x0000, 0x0000, 0x0020, 0x069c, 0x06bd, 0x06de, 0x06be, 0x03f1, + 0x0020, 0x0000, 0x0041, 0x06be, 0x06fe, 0x06be, 0x0168, 0x0020, + 0x0000, 0x06bd, 0x0000, 0x0020, 0x0062, 0x0efd, 0x0041, 0x0000, + 0x0020, 0x0000, 0x0ebd, 0x06de, 0x06be, 0x06de, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, - 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6598,7 +6717,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xaa9d, 0xa2dc, 0xaadd, 0xa2dc, 0xaabc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6617,7 +6735,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xa23c, 0xa29c, 0xaadc, 0xaadc, 0xb27e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6626,10 +6743,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xedc0, 0xe5a0, - 0xe580, 0xe5a0, 0xede0, 0xede0, 0xe5c0, 0xe5a0, 0xedc0, 0xee00, - 0xf600, 0xf600, 0xedc0, 0xe580, 0xdd60, 0xe580, 0xf600, 0xf600, - 0xede0, 0xe580, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6638,7 +6751,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xa25d, 0xaafc, 0xaafd, 0xaabc, 0xaa7c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6656,8 +6768,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1023, 0xaa9c, - 0x0821, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa7c, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6666,10 +6776,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfec2, 0x0020, 0x0000, - 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, - 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, - 0x0000, 0x0000, 0xdd40, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6678,8 +6784,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0800, 0xa27d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xa27c, 0x1023, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6696,30 +6800,12 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1023, 0xa29c, - 0x0821, 0x0000, 0x0000, 0x0000, 0x0000, 0xa29c, 0xab5e, 0xab1f, - 0xab1f, 0xab3f, 0xab1f, 0xab3f, 0xab3e, 0xab1e, 0xab3e, 0xb33f, - 0xb35f, 0xb33f, 0xb35f, 0xb35f, 0xb33e, 0xab3e, 0xab3e, 0xb35f, - 0xb35f, 0xb35f, 0xb35f, 0xb33f, 0xb33f, 0xb33f, 0xb33f, 0xb33f, - 0xb33f, 0xb33f, 0xb33f, 0xb33f, 0xb33f, 0xb33f, 0xb33e, 0xab3e, - 0xab1e, 0xab1e, 0xab3e, 0xb33f, 0xab3f, 0xab1e, 0xab1e, 0xa2fe, - 0xa29e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xff02, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xdd60, 0x0000, 0x0820, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbb5f, - 0xab1f, 0xb33f, 0xb31e, 0xab3f, 0xb35f, 0xab3e, 0xab1e, 0xab3e, - 0xb33f, 0xb33f, 0xab1e, 0xab1e, 0xab1e, 0xaafe, 0xaafe, 0xab1e, - 0xb33e, 0xb35f, 0xb35f, 0xb33e, 0xb33e, 0xab3e, 0xab3e, 0xb33e, - 0xab1e, 0xab3e, 0xb33f, 0xb35f, 0xb35f, 0xb33f, 0xb33e, 0xb31e, - 0xb33f, 0xab3e, 0xab3e, 0xab1e, 0xab3e, 0xab3e, 0xa2fd, 0xa2fd, - 0xa33e, 0xa31b, 0xa2bd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xa25c, 0x1023, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6736,36 +6822,17 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0823, 0x9a1c, - 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x9a3c, 0xaabe, 0xb31e, - 0xaadd, 0xaabd, 0xb2bd, 0xb2dd, 0xaadd, 0xb2dd, 0xb2dd, 0xb2dd, - 0xb2dd, 0xb2dd, 0xb2fd, 0xb2dd, 0xb2fd, 0xb2dd, 0xb2dd, 0xb2fd, - 0xb2fd, 0xb2fd, 0xb2dd, 0xb2dd, 0xb2dd, 0xb2dd, 0xb2dd, 0xb2dd, - 0xb2dd, 0xb2dd, 0xb2dd, 0xb2dd, 0xb2dd, 0xaadd, 0xb2bd, 0xb2bd, - 0xaabd, 0xaabd, 0xb2bd, 0xb2dd, 0xb2dd, 0xaadd, 0xaabc, 0xaabd, - 0xa27d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x8380, 0xeda0, 0xfdc0, 0x0000, 0xfea0, 0x0820, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, 0x0820, 0x0020, 0x0000, - 0x0000, 0x0000, 0x0840, 0x0840, 0x0820, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xe5c0, 0x0000, 0xf640, 0xede0, 0xfe20, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb27e, - 0xaabe, 0xb2dd, 0xb2fd, 0xb2dd, 0xb2dd, 0xaabd, 0xb2dd, 0xb2bd, - 0xaabd, 0xb2dd, 0xaabd, 0xaabd, 0xaabc, 0xaabd, 0xaabd, 0xaadd, - 0xaadd, 0xb2dd, 0xb2dd, 0xb2dd, 0xb2dd, 0xaadd, 0xaadd, 0xaadd, - 0xaadd, 0xb2dd, 0xaabd, 0xb2dd, 0xb2dd, 0xb2dd, 0xaabd, 0xaabd, - 0xb2bd, 0xaabd, 0xaadd, 0xaabd, 0xaabd, 0xaabc, 0xaabc, 0xaadc, - 0xaadd, 0xaabc, 0x9a5c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x9a1b, 0x0822, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6776,30 +6843,20 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0823, 0x9a5b, - 0x0821, 0x0000, 0x0000, 0x0000, 0x0000, 0x9a1c, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x8218, 0x9a1b, 0x1003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0xfe80, 0x0820, 0x0000, - 0x0000, 0x0000, 0x0020, 0x1060, 0xf601, 0xf620, 0xedc0, 0xeda0, - 0xf600, 0xfe20, 0xfe41, 0xf622, 0x3980, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xe5c1, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x9a1c, 0x81d7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x9a5b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, - 0x9a5b, 0x0822, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6815,31 +6872,17 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1825, - 0xaafc, 0xa2fd, 0x9adb, 0x9adb, 0xaafd, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1844, 0xa2fc, 0x9adc, 0x9adb, 0x9adb, 0x9afc, 0x9adb, - 0x92db, 0x92db, 0x92db, 0x92ba, 0x8a9a, 0x8279, 0x829a, 0x829a, - 0x7a99, 0x7258, 0x7258, 0x7258, 0x6a36, 0x61f5, 0x5152, 0x5174, - 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0xfe81, 0x0820, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x2901, 0xf5e0, - 0xfe20, 0xfe20, 0xfe20, 0xfe41, 0xfe61, 0x2900, 0x0000, 0x0000, - 0x0000, 0x0000, 0xede1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x5971, 0x5150, 0x5972, 0x59b4, 0x7216, 0x7237, 0x7237, 0x7216, - 0x8258, 0x8258, 0x8278, 0x8a7a, 0x8a99, 0x8a99, 0x92ba, 0x9adb, - 0x9adb, 0x92da, 0x92da, 0x9afb, 0x9afb, 0x92da, 0x0802, 0x0801, - 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1023, 0xaafd, 0x9afc, 0x92ba, 0x9abb, 0x9add, - 0x0802, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6856,32 +6899,24 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x9a9c, 0x9a7c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xb2fe, 0xab1e, 0xaafd, 0xaafd, 0xbadf, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0802, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0801, 0xaafd, 0xa2dd, 0xa2dc, 0xa2dd, 0xa2dd, 0xa2bd, - 0x9abd, 0xa2bd, 0x9abd, 0x929b, 0x929b, 0x8a7b, 0x929b, 0x8a7b, - 0x827a, 0x7a59, 0x8259, 0x7a79, 0x7258, 0x69d6, 0x5131, 0x5974, - 0x0000, 0x3120, 0x4180, 0x51a0, 0x0000, 0xfec2, 0x0820, 0x0000, - 0x0000, 0x0000, 0x5160, 0x4180, 0x6200, 0x0000, 0x0000, 0x0840, - 0xf622, 0xfe40, 0xfe20, 0xfe20, 0xfe40, 0x2920, 0x0000, 0x0000, - 0x0000, 0x0020, 0xf641, 0x0000, 0x49a0, 0x5180, 0x51e0, 0x0000, - 0x6994, 0x5952, 0x6173, 0x61b4, 0x7216, 0x7217, 0x7a38, 0x7a18, - 0x8259, 0x8259, 0x8a5a, 0x927c, 0x929b, 0x929b, 0x9abc, 0xa2dd, - 0xa2dd, 0xa2dd, 0x9a9c, 0xa2bc, 0xa2dd, 0xaabd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0xb2fe, 0xaafe, 0xaadd, 0xaadd, 0xaabe, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x1844, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9a5b, 0x9a7c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6904,19 +6939,24 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xaabe, 0xa2bc, 0x9a7c, 0xa27d, 0xa2bd, 0xaafd, + 0xa2dd, 0xa29d, 0xa27c, 0xa27c, 0xa29d, 0xa29d, 0xa29d, 0xa27d, + 0xa29d, 0xa29d, 0xa29d, 0xa27d, 0xa27d, 0xa27d, 0xa27d, 0xa27c, + 0xa27c, 0xa25c, 0x9a5c, 0x9a5c, 0x9a5c, 0x9a5c, 0x9a5c, 0x9a5c, + 0x9a3c, 0x9a5b, 0x9a7c, 0x9a9b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x9c20, 0xede0, 0xfe20, 0x0000, 0xfee2, 0x0820, 0x0000, - 0x0000, 0x0840, 0xee60, 0xf620, 0xfe40, 0xf621, 0x0040, 0x0840, - 0xf622, 0xfe40, 0xfe20, 0xfe20, 0xfe20, 0x20e0, 0x0000, 0x0000, - 0x0020, 0x0020, 0xf661, 0x0000, 0xbd00, 0xc4e0, 0xd540, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0801, 0x9a1d, 0x9a5c, + 0xa27c, 0xa27c, 0xa27c, 0xa25c, 0xa25c, 0xa27c, 0xa27c, 0xa27c, + 0xa27c, 0xa27d, 0xa27d, 0xa27d, 0xa27d, 0xa27c, 0xa27d, 0xa27d, + 0xa27d, 0xa27d, 0xa27d, 0xa27c, 0xa27c, 0xa27c, 0xa27c, 0xa27c, + 0xa27c, 0xa29c, 0xa2bc, 0xa29b, 0xa27c, 0xa29c, 0xa2bc, 0xa29d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6939,6 +6979,24 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x28a9, 0xa2dc, 0x9a9b, 0x30e9, 0x30c8, 0x30a8, + 0x2887, 0x2087, 0x2086, 0x2087, 0x2087, 0x2887, 0x2066, 0x2066, + 0x2066, 0x2887, 0x2887, 0x2087, 0x2067, 0x2066, 0x2066, 0x2066, + 0x2066, 0x2066, 0x2066, 0x2066, 0x2066, 0x2066, 0x2066, 0x2066, + 0x2066, 0x2066, 0x2086, 0x28c8, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, + 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x929b, 0x0000, 0x1865, + 0x1865, 0x1866, 0x2066, 0x2066, 0x2066, 0x2066, 0x2066, 0x2066, + 0x2066, 0x2087, 0x2087, 0x2087, 0x2066, 0x2066, 0x2087, 0x2887, + 0x2087, 0x2086, 0x2066, 0x2067, 0x2887, 0x2887, 0x2887, 0x2887, + 0x2087, 0x2087, 0x2066, 0x2066, 0x28a7, 0x9a7b, 0x9abc, 0x40ac, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6946,10 +7004,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0xfec1, 0x0820, 0x0000, - 0x0000, 0x0840, 0xf660, 0xede0, 0xfe20, 0xfe40, 0x0840, 0x6220, - 0xfe41, 0xfe41, 0xfe41, 0xfe41, 0x51e0, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xee21, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6965,38 +7019,72 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x1805, 0x1806, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x1003, 0x0803, 0x0802, 0x0802, + 0x0802, 0x0802, 0x0802, 0x0802, 0x0802, 0x0802, 0x0802, 0x0801, + 0x0001, 0x0801, 0x0802, 0x0801, 0x0802, 0x0802, 0x0802, 0x0801, + 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0802, 0x0801, 0x0802, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0802, 0x0802, 0x0802, 0x0801, 0x0802, 0x0802, 0x0801, 0x0801, + 0x0801, 0x0802, 0x0802, 0x0803, 0x1003, 0x1003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1004, 0x1004, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x9a9c, 0x9a7c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0xfe80, 0x0820, 0x0000, - 0x0000, 0x0000, 0x1880, 0x18c0, 0x49e0, 0x0000, 0x1040, 0xf600, - 0xfe40, 0xfe41, 0xfe41, 0xfe20, 0x0020, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xe5e1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9a5b, 0x9a7c, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -7018,26 +7106,10 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaabe, - 0xa2bc, 0x9a7c, 0xa27d, 0xa2bd, 0xaafd, 0xa2dd, 0xa29d, 0xa27c, - 0xa27c, 0xa29d, 0xa29d, 0xa29d, 0xa27d, 0xa29d, 0xa29d, 0xa29d, - 0xa27d, 0xa27d, 0xa27d, 0xa27d, 0xa27c, 0xa27c, 0xa25c, 0x9a5c, - 0x9a5c, 0x9a5c, 0x9a5c, 0x9a5c, 0x9a5c, 0x9a3c, 0x9a5b, 0x9a7c, - 0x9a9b, 0x9a3b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xa420, 0xf5e0, 0xfdc0, 0x0000, 0xfe80, 0x0820, 0x0000, - 0x0000, 0x0840, 0xf723, 0xee02, 0x0820, 0x8b61, 0xfe00, 0xfe20, - 0xfe40, 0xfe40, 0xfe20, 0x0020, 0x0820, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xee01, 0x0000, 0xe620, 0xfe20, 0xfea1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0001, 0x9a1d, 0x9a1d, - 0x9a5c, 0xa27c, 0xa27c, 0xa27c, 0xa25c, 0xa25c, 0xa27c, 0xa27c, - 0xa27c, 0xa27c, 0xa27d, 0xa27d, 0xa27d, 0xa27d, 0xa27c, 0xa27d, - 0xa27d, 0xa27d, 0xa27d, 0xa27d, 0xa27c, 0xa27c, 0xa27c, 0xa27c, - 0xa27c, 0xa27c, 0xa29c, 0xa2bc, 0xa29b, 0xa27c, 0xa29c, 0xa2bc, - 0xa29d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -7058,26 +7130,10 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x28a9, - 0xa2dc, 0x9a9b, 0x30e9, 0x30c8, 0x30a8, 0x2887, 0x2087, 0x2086, - 0x2087, 0x2087, 0x2887, 0x2066, 0x2066, 0x2066, 0x2887, 0x2887, - 0x2087, 0x2067, 0x2066, 0x2066, 0x2066, 0x2066, 0x2066, 0x2066, - 0x2066, 0x2066, 0x2066, 0x2066, 0x2066, 0x2066, 0x2066, 0x2086, - 0x28c8, 0x9a5b, 0x8a17, 0x0802, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0820, 0x0840, 0x0820, 0x0000, 0xfe80, 0x0820, 0x0000, - 0x0000, 0x0820, 0xff02, 0xfea1, 0x0820, 0x0000, 0xa3e1, 0xfe20, - 0xfe40, 0xf620, 0x0820, 0x0000, 0x7ac0, 0xe600, 0x0020, 0x0000, - 0x0000, 0x0000, 0xf641, 0x0000, 0x0840, 0x0840, 0x0840, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0020, 0x1844, 0x81f7, 0x9a5c, 0x28c8, - 0x1865, 0x1865, 0x1866, 0x2066, 0x2066, 0x2066, 0x2066, 0x2066, - 0x2066, 0x2066, 0x2087, 0x2087, 0x2087, 0x2066, 0x2066, 0x2087, - 0x2887, 0x2087, 0x2086, 0x2066, 0x2067, 0x2887, 0x2887, 0x2887, - 0x2887, 0x2087, 0x2087, 0x2066, 0x2066, 0x28a7, 0x9a7b, 0x9abc, - 0x40ac, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -7099,24 +7155,16 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1805, 0x1806, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0xaa9e, 0xa27d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe80, 0x0820, 0x0000, - 0x0000, 0x0820, 0xfec1, 0xfe41, 0xfe80, 0x0000, 0x0000, 0xfea0, - 0xfe61, 0x18a0, 0x0000, 0x0000, 0xfe61, 0xff20, 0x0020, 0x0000, - 0x0000, 0x0000, 0xee01, 0x0000, 0x0000, 0x0000, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0801, 0x9a3c, 0xb2df, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1004, 0x1004, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -7143,16 +7191,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0821, 0x1863, 0xa27c, 0xa29c, 0xa2bb, 0xa29b, 0x9a5b, - 0x9a5b, 0x923a, 0x925b, 0x925a, 0x8a39, 0x8a39, 0x8219, 0x8219, - 0x79b8, 0x7197, 0x7197, 0x79b7, 0x71b6, 0x6975, 0x5913, 0x6114, - 0x0000, 0x8bc0, 0xe5a0, 0xeda0, 0x0000, 0xfea1, 0x0820, 0x0000, - 0x0000, 0x0820, 0xf680, 0xfe20, 0xf620, 0xbc42, 0x0020, 0x20c0, - 0xf642, 0x0840, 0x0840, 0xede1, 0xfe20, 0xfea0, 0x0020, 0x0000, - 0x0000, 0x0000, 0xf641, 0x0000, 0xe640, 0xf620, 0xfe80, 0x0820, - 0x60f3, 0x50f1, 0x50f2, 0x6975, 0x7196, 0x6995, 0x6975, 0x7176, - 0x81f8, 0x8a19, 0x81f8, 0x8a19, 0x89fa, 0x923a, 0x9a5b, 0x9a3b, - 0x9a5b, 0x9a7b, 0x9a5b, 0x9a5a, 0x9a1b, 0x0802, 0x0001, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -7183,16 +7221,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1003, 0x0803, 0x0802, 0x0802, 0x0802, - 0x0802, 0x0802, 0x0802, 0x0802, 0x0802, 0x0802, 0x0801, 0x0001, - 0x0801, 0x0802, 0x0801, 0x0802, 0x0802, 0x0802, 0x0801, 0x0001, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfea2, 0x0840, 0x0000, - 0x0000, 0x0000, 0x51c0, 0xfe00, 0xfe40, 0xfe40, 0xac40, 0x0020, - 0x1080, 0xa3a0, 0xfe80, 0xfe40, 0xf620, 0x0000, 0x0000, 0x0000, - 0x0020, 0x0001, 0xf640, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0802, 0x0801, 0x0802, 0x0001, 0x0001, 0x0001, 0x0001, 0x0802, - 0x0802, 0x0802, 0x0801, 0x0802, 0x0802, 0x0801, 0x0801, 0x0801, - 0x0802, 0x0802, 0x0803, 0x1003, 0x1003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -7226,10 +7254,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0020, 0x0820, 0x0840, 0x0000, 0xfea1, 0x0820, 0x0000, - 0x0000, 0x0000, 0x49a0, 0xfe20, 0xfe81, 0xfe60, 0xac00, 0x0020, - 0x0000, 0x8300, 0xfe80, 0xfe80, 0xfe61, 0x0020, 0x0000, 0x0000, - 0x0000, 0x0000, 0xf620, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -7266,10 +7290,8 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x9c00, 0xedc1, 0xfe40, 0x0000, 0xfe60, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xdda0, 0x0000, 0xfe41, 0xede1, 0xff02, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -7306,10 +7328,8 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0840, 0x20a0, 0x18a0, 0x0000, 0xf640, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0xdd80, 0x0000, 0x2900, 0x2900, 0x28e0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -7346,10 +7366,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfea1, 0x0860, 0x0840, - 0x0840, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0840, - 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, - 0x0840, 0x0840, 0xe5a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -7386,10 +7402,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0xe5c2, 0xf5c0, - 0xeda0, 0xe580, 0xeda0, 0xf5c0, 0xf5e0, 0xf5e0, 0xf5c0, 0xedc0, - 0xf5c0, 0xeda0, 0xf5e0, 0xf5e0, 0xf5e0, 0xeda0, 0xe580, 0xedc0, - 0xf600, 0xedc1, 0x0840, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -7426,10 +7438,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x0820, - 0x0000, 0x0000, 0x0020, 0x0840, 0x0860, 0x0840, 0x0000, 0x0000, - 0x0000, 0x0020, 0x1040, 0x1060, 0x0860, 0x0020, 0x0000, 0x0000, - 0x0000, 0x0840, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -7466,10 +7474,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18a0, - 0xfe60, 0x0020, 0x0020, 0x1060, 0xfe40, 0x0020, 0x0020, 0xf6a0, - 0xe581, 0x0020, 0x0820, 0xfec1, 0x18a0, 0x0020, 0x0000, 0xfe20, - 0x18a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -7506,10 +7510,6 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20c0, - 0xfe81, 0x0840, 0x0020, 0x0840, 0xee00, 0x0820, 0x0020, 0xfee1, - 0xfe00, 0x0000, 0x0000, 0xf660, 0x1060, 0x0000, 0x0020, 0xfea0, - 0x20a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -7547,9 +7547,9 @@ const uint16_t prg32_splash_logo[] PRG32_FLASH_RODATA = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1080, - 0xdd60, 0x0000, 0x0000, 0x0840, 0xb460, 0x0020, 0x0000, 0xd560, - 0xb3e0, 0x0000, 0x0000, 0xc501, 0x0840, 0x0000, 0x0000, 0xe581, - 0x1880, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, diff --git a/components/prg32/assets/prg32_title.png b/components/prg32/assets/prg32_title.png new file mode 100644 index 0000000..22533e0 Binary files /dev/null and b/components/prg32/assets/prg32_title.png differ diff --git a/components/prg32/prg32_setup_store.c b/components/prg32/prg32_setup_store.c index 27f638f..e9983a1 100644 --- a/components/prg32/prg32_setup_store.c +++ b/components/prg32/prg32_setup_store.c @@ -10,6 +10,7 @@ #include #include #include +#include "esp_crt_bundle.h" #if CONFIG_PRG32_DISPLAY_QEMU_RGB #define STORE_MAX_GAMES 40 @@ -210,6 +211,7 @@ static int fetch_catalog(const char *base_url, const char *query, char *status, .method = HTTP_METHOD_GET, .timeout_ms = PRG32_STORE_HTTP_TIMEOUT_MS, .keep_alive_enable = false, + .crt_bundle_attach = esp_crt_bundle_attach, }; esp_http_client_handle_t client = esp_http_client_init(&config); if (!client) { @@ -474,6 +476,7 @@ static int stream_download(const char *base_url, const store_game_t *game, .url = url, .method = HTTP_METHOD_GET, .timeout_ms = PRG32_STORE_HTTP_TIMEOUT_MS, + .crt_bundle_attach = esp_crt_bundle_attach, }; esp_http_client_handle_t client = esp_http_client_init(&config); if (!client) { @@ -695,8 +698,7 @@ void prg32_setup_store_run(void) { prg32_input_wait_released(MENU_CANCEL); return; } - if (((input & PRG32_BTN_SELECT) && !(last & PRG32_BTN_SELECT)) || - ((input & PRG32_BTN_B) && !(last & PRG32_BTN_B))) { + if ((input & MENU_ACCEPT) && !(last & MENU_ACCEPT)) { prg32_input_wait_released(MENU_ACCEPT); if (choice == 0) { char found[PRG32_STORE_URL_MAX_LEN]; diff --git a/components/prg32/prg32_store.c b/components/prg32/prg32_store.c index faf6bc7..f1e0f62 100644 --- a/components/prg32/prg32_store.c +++ b/components/prg32/prg32_store.c @@ -7,6 +7,7 @@ #include #include #include +#include "esp_crt_bundle.h" #if !CONFIG_PRG32_DISPLAY_QEMU_RGB #include "mdns.h" @@ -222,6 +223,7 @@ int prg32_store_ping(const char *base_url, char *out_name, size_t name_len) { .timeout_ms = PRG32_STORE_HTTP_TIMEOUT_MS, .event_handler = capture_http, .user_data = &capture, + .crt_bundle_attach = esp_crt_bundle_attach, }; esp_http_client_handle_t client = esp_http_client_init(&config); if (!client) { diff --git a/components/prg32_audio/Kconfig b/components/prg32_audio/Kconfig index 8db2dff..f29d0fd 100644 --- a/components/prg32_audio/Kconfig +++ b/components/prg32_audio/Kconfig @@ -42,26 +42,6 @@ config PRG32_AUDIO_MAX_VOICES help Number of simultaneous sample/synth voices. Mono defaults to 8. -config PRG32_AUDIO_I2S_BCLK_GPIO - int "I2S BCLK GPIO" - depends on PRG32_AUDIO_ENABLED - default 4 - -config PRG32_AUDIO_I2S_LRCLK_GPIO - int "I2S LRCLK/WS GPIO" - depends on PRG32_AUDIO_ENABLED - default 11 -config PRG32_AUDIO_I2S_DATA_GPIO - int "I2S DATA/DIN GPIO" - depends on PRG32_AUDIO_ENABLED - default 23 - -config PRG32_AUDIO_I2S_SD_GPIO - int "I2S SD/shutdown GPIO" - depends on PRG32_AUDIO_ENABLED - default -1 - help - Optional amplifier shutdown/control GPIO. Set to -1 when not wired. endmenu diff --git a/components/prg32_audio/audio_synth.c b/components/prg32_audio/audio_synth.c index c72dc6a..637b275 100644 --- a/components/prg32_audio/audio_synth.c +++ b/components/prg32_audio/audio_synth.c @@ -68,10 +68,12 @@ void prg32_audio_synth_start(prg32_audio_voice_t *voice, uint8_t note, uint32_t sample_rate) { prg32_audio_synth_voice_t *synth = &voice->synth_state; uint16_t id = instrument->sample_id; + /* Decode the PRG32_AUDIO_SYNTH_ID layout from prg32_audio.h: + * bits 11:10 resonance, 9:6 cutoff, 5:2 pulse width, 1:0 waveform. */ synth->waveform = id & 0x03u; - synth->resonance = (id >> 4) & 0x07u; - synth->cutoff = (id >> 7) & 0x07u; - uint32_t pulse_position = ((id >> 10) & 0x0fu) + 1u; + synth->resonance = (id >> 10) & 0x03u; + synth->cutoff = (id >> 6) & 0x0fu; + uint32_t pulse_position = ((id >> 2) & 0x0fu) + 1u; synth->pulse_threshold = (uint32_t)(((uint64_t)pulse_position << 32) / 17u); synth->phase_increment = note_phase_increment(note, sample_rate); synth->lfsr = SYNTH_LFSR_SEED; @@ -169,14 +171,17 @@ static int32_t filter_sample(prg32_audio_synth_voice_t *synth, int32_t input) { 3616, 4512, 5536, 6688, 7936, 9280, 10752, 12288, }; static const uint16_t damping_q15[4] = {32767, 24576, 16384, 8192}; + /* Mask the indices so a corrupted voice can never read past a table. */ + uint8_t cutoff = synth->cutoff & 0x0fu; + uint8_t resonance = synth->resonance & 0x03u; int32_t low = synth->filter_low; int32_t band = synth->filter_band; low = clamp_filter((int64_t)low + - (((int64_t)cutoff_q15[synth->cutoff] * band) >> 15)); + (((int64_t)cutoff_q15[cutoff] * band) >> 15)); int32_t high = clamp_filter((int64_t)input - low - - (((int64_t)damping_q15[synth->resonance] * band) >> 15)); + (((int64_t)damping_q15[resonance] * band) >> 15)); band = clamp_filter((int64_t)band + - (((int64_t)cutoff_q15[synth->cutoff] * high) >> 15)); + (((int64_t)cutoff_q15[cutoff] * high) >> 15)); synth->filter_low = low; synth->filter_band = band; if (low > 32767) return 32767; diff --git a/components/prg32_audio/audio_tracker.c b/components/prg32_audio/audio_tracker.c index 049fd26..cd37ab5 100644 --- a/components/prg32_audio/audio_tracker.c +++ b/components/prg32_audio/audio_tracker.c @@ -1,5 +1,8 @@ #include "audio_internal.h" +/* Upper bound on events executed by one tracker step without waiting. */ +#define PRG32_AUDIO_TRACKER_MAX_EVENTS_PER_STEP 256u + static uint32_t tick_ms(void) { uint16_t bpm = g_prg32_audio.tracker.tempo_bpm; if (bpm == 0) { @@ -90,7 +93,6 @@ void prg32_audio_tracker_step(uint32_t elapsed_ms) { } prg32_audio_track_slot_t *track = &g_prg32_audio.tracks[tracker->track_id]; tracker->tick_accum += elapsed_ms; - uint32_t ms_per_tick = tick_ms(); // DEBUG LOG static int log_div = 0; @@ -101,12 +103,26 @@ void prg32_audio_tracker_step(uint32_t elapsed_ms) { (unsigned long)tracker->event_index); } - while (tracker->active && tracker->tick_accum >= ms_per_tick) { - tracker->tick_accum -= ms_per_tick; + /* Only waiting consumes ticks. While next_delta is zero, events are + * fetched and executed in the same tick, so delta-0 NOTE_ONs form a chord. + * The per-step cap stops a malformed track (for example a delta-0 JUMP to + * itself) from spinning forever; remaining events resume on the next step. */ + uint32_t events_this_step = 0; + while (tracker->active) { if (tracker->next_delta > 0) { + /* Recomputed per tick so SET_TEMPO takes effect immediately. */ + uint32_t ms_per_tick = tick_ms(); + if (tracker->tick_accum < ms_per_tick) { + break; + } + tracker->tick_accum -= ms_per_tick; tracker->next_delta--; continue; } + if (events_this_step >= PRG32_AUDIO_TRACKER_MAX_EVENTS_PER_STEP) { + break; + } + events_this_step++; if (tracker->event_index >= track->event_count) { tracker->active = false; printf("TRACKER STOPPED: END OF TRACK\n"); diff --git a/dependencies.lock b/dependencies.lock index 41ff581..0243a43 100644 --- a/dependencies.lock +++ b/dependencies.lock @@ -10,7 +10,7 @@ dependencies: type: service version: 1.8.0 espressif/mdns: - component_hash: 3ba256ac95e07c274be53cbd73f06cb846c403b61e8fbdf1be57bdb79db7a63e + component_hash: b679eafd0acae2066e2645bd91d073e33ca5be515e2545cd3c4e55a3e3bce3cb dependencies: - name: idf require: private @@ -18,7 +18,7 @@ dependencies: source: registry_url: https://components.espressif.com/ type: service - version: 1.12.0 + version: 1.13.1 idf: source: type: idf diff --git a/docs/agents/assembly_guidelines.md b/docs/agents/assembly_guidelines.md index e88b47a..fdabe25 100644 --- a/docs/agents/assembly_guidelines.md +++ b/docs/agents/assembly_guidelines.md @@ -20,9 +20,6 @@ When adding a game: 3. Add a local `README.md` with controls and learning goals. 4. Update `examples/games/README.md`. 5. Update the example list in `README.md`. -6. Add `PRG32_GAME__ASCII` and `PRG32_GAME__GRAPHICS` identifiers in - `main/prg32_config.h` if the examples list uses selection constants. -7. Add `PRG32_GAME__C` when a C version is provided. Assembly conventions: diff --git a/docs/agents/hardware_guidelines.md b/docs/agents/hardware_guidelines.md index b3f238b..0971c72 100644 --- a/docs/agents/hardware_guidelines.md +++ b/docs/agents/hardware_guidelines.md @@ -6,7 +6,7 @@ ESP32-C6 is the main RISC-V teaching MCU. Do not document it as a general USB HI host for arbitrary gamepads. Multiplayer uses the ESP32-C6 native Wi-Fi radio. - When hardware or wiring configurations change, always update `docs/hardware/hardware.md` - to match the new canonical configuration in `main/prg32_config.h`. `docs/hardware/hardware.md` + to match the new canonical configuration in `idf.py menuconfig` (or `Kconfig`). `docs/hardware/hardware.md` must remain the single authoritative documentation for pinouts and wiring. - Automatically update the [bill of materials and buying guide](../hardware/where_to_buy.md) in the same change, following the [hardware maintenance rules](../hardware/AGENTS.md), diff --git a/docs/agents/vscode_setup.md b/docs/agents/vscode_setup.md index f002675..1ead54b 100644 --- a/docs/agents/vscode_setup.md +++ b/docs/agents/vscode_setup.md @@ -14,7 +14,7 @@ Tasks should remain simple wrappers around: - `idf.py menuconfig` - `idf.py build` - `idf.py flash monitor` -- `idf.py -B build-qemu -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu qemu --graphics monitor` +- `idf.py -B build-qemu -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu" qemu --graphics monitor` - `idf.py -B build-qemu gdb` - `tools/qemu.sh` and `tools/qemu.ps1` - `python3 -m prg32 cartridge build ...` diff --git a/docs/cartridge_store/cartridge_store.md b/docs/cartridge_store/cartridge_store.md index b773fdb..ba3d80c 100644 --- a/docs/cartridge_store/cartridge_store.md +++ b/docs/cartridge_store/cartridge_store.md @@ -164,12 +164,22 @@ The store advertises `_prg32store._tcp` on port `5080`. Bare IPv4 addresses are expanded to `http://
:5080`. #### Hardcoding the Store URL -For fixed classroom deployments, you can bake the store URL directly into the firmware. Set `CONFIG_PRG32_STORE_URL` in `menuconfig` or append it to the relevant `sdkconfig.defaults` file before building: +For fixed classroom deployments, you can bake the store URL directly into the firmware. Set `CONFIG_PRG32_STORE_URL` in `menuconfig` or append it to the relevant `profiles/sdkconfig.defaults` file before building: ```text CONFIG_PRG32_STORE_URL="http://192.168.1.42:5080" ``` +You can also set or clear the Cartridge Store URL locally using the Python CLI, which updates your `profiles/sdkconfig.defaults.local` file without modifying tracked files: + +```bash +# Set the Cartridge Store URL +python3 -m prg32 store set-url "http://192.168.1.42:5080" + +# Clear the local URL override +python3 -m prg32 store clear-url +``` + ### Host Tools Configuration (Python) When using the host-side Python tooling (e.g., publishing or downloading from your PC), you can pass the configuration as CLI flags (`--store-url` and `--token`) or save them in a JSON config file to avoid typing them every time. CLI flags override the JSON config. @@ -408,7 +418,7 @@ Firmware clients uses compact REST calls: | `TOO LARGE` during download | Cartridge exceeds slot partition | Re-flash with a larger partition, or use a smaller cartridge | | `401` from `prg32_game.py publish` | Missing or invalid API token | Add `--token` or set `store_token` in `~/.prg32/config.json` | | Published game is not visible | Upload is pending editor review | Ask an editor to verify the submission in Cartridge Store | -| QEMU build shows `NOT FOUND` for mDNS | Expected: mDNS is unavailable in QEMU | Set `CONFIG_PRG32_STORE_URL` in `sdkconfig.defaults.qemu` | +| QEMU build shows `NOT FOUND` for mDNS | Expected: mDNS is unavailable in QEMU | Set `CONFIG_PRG32_STORE_URL` in `profiles/sdkconfig.defaults.qemu` | ### Common Missing Tool Fixes @@ -417,8 +427,8 @@ Firmware clients uses compact REST calls: | `idf.py: command not found` | ESP-IDF shell not exported | Run `. $HOME/esp-idf/export.sh` or use ESP-IDF PowerShell | | `missing tool: riscv32-esp-elf-gcc` | ESP-IDF toolchain missing or not on `PATH` | Run `./install.sh esp32c3,esp32c6`, then export ESP-IDF | | `ninja: command not found` | Host build tool missing | Install Ninja with the platform package manager | -| QEMU build cannot find virtual RGB component | Wrong target or defaults | Use `esp32c3` and `sdkconfig.defaults.qemu` | -| Physical display is black | QEMU build flashed to board or wrong pins | Rebuild `build-esp32c6` with `sdkconfig.defaults`; check `main/prg32_config.h` | +| QEMU build cannot find virtual RGB component | Wrong target or defaults | Use `esp32c3` and `profiles/sdkconfig.defaults.qemu` | +| Physical display is black | QEMU build flashed to board or wrong pins | Rebuild `build-esp32c6` with `profiles/sdkconfig.defaults`; check `idf.py menuconfig` | | Upload cannot reach board | Host is not on PRG32 Wi-Fi or wrong URL | Connect to `PRG32` AP and use `http://192.168.4.1` | | Store publish returns `401` | Missing or invalid token | Ask for the classroom token or omit auth only on open stores | | Store publish returns `400` | Bad manifest or zip layout | Check `manifest.json` and `unzip -l` output | diff --git a/docs/cartridge_store/score_api.md b/docs/cartridge_store/score_api.md index 4bf2128..280796f 100644 --- a/docs/cartridge_store/score_api.md +++ b/docs/cartridge_store/score_api.md @@ -14,13 +14,9 @@ Local scoreboard records persist in the dedicated `scores` NVS partition and are not erased when a cartridge slot is replaced. ## Enable Wi-Fi -Edit `main/prg32_config.h`: - -```c -#define PRG32_WIFI_SCORES_ENABLE 1 -#define PRG32_WIFI_SSID "your-network" -#define PRG32_WIFI_PASSWORD "your-password" -``` +Enable Wi-Fi scores and set your SSID/Password through `idf.py menuconfig` -> `PRG32 Framework`: +- `PRG32 Firmware Features -> Enable Wi-Fi Scores API` +- `Wi-Fi Configuration -> Wi-Fi SSID / Password` Then build and flash normally with ESP-IDF. diff --git a/docs/hardware/AGENTS.md b/docs/hardware/AGENTS.md index 9e206e7..e43bd29 100644 --- a/docs/hardware/AGENTS.md +++ b/docs/hardware/AGENTS.md @@ -13,7 +13,7 @@ hardware documentation; update affected entries in the same change. - Cross-check the bill of materials with [hardware.md](hardware.md), [the PCB reference](../pcb/README.md), [audio documentation](../tools/audio.md), and the canonical firmware configuration in - [main/prg32_config.h](../../main/prg32_config.h) and + [components/prg32/Kconfig](../../components/prg32/Kconfig) and [audio Kconfig](../../components/prg32_audio/Kconfig). - Keep baseline mono quantities, total stereo quantities and optional items explicit. Check electrical compatibility and mechanical fit separately. diff --git a/docs/hardware/hardware.md b/docs/hardware/hardware.md index e66dce3..61e86b8 100644 --- a/docs/hardware/hardware.md +++ b/docs/hardware/hardware.md @@ -128,7 +128,7 @@ See the [bill of materials](where_to_buy.md) for the resistor and footprint. ## Software Configuration -These pins match `main/prg32_config.h` for the ESP32-C6 physical ILI9341 build. +These pins match the default `idf.py menuconfig` settings for the ESP32-C6 physical ILI9341 build. The firmware enables the internal pull-up on every button input, so a pressed button connects its GPIO to GND. START and SELECT are names for the same @@ -141,7 +141,7 @@ buzzer is wired or initialized. Audio uses the I2S amplifier described below. The LCD backlight defaults to active-high. If a specific breakout uses an active-low backlight transistor, set `PRG32_LCD_BACKLIGHT_ACTIVE_LEVEL` to `0` -in `main/prg32_config.h`. +in `idf.py menuconfig`. ### Onboard RGB LED diff --git a/docs/hardware/ili9341.md b/docs/hardware/ili9341.md index 0de8af1..cab5095 100644 --- a/docs/hardware/ili9341.md +++ b/docs/hardware/ili9341.md @@ -49,7 +49,7 @@ If the real display is black: 4. Confirm `CONFIG_PRG32_DISPLAY_ILI9341=y` in `build-esp32c6/config/sdkconfig.h`. 5. If the backlight is off, try setting - `PRG32_LCD_BACKLIGHT_ACTIVE_LEVEL` to `0` in `main/prg32_config.h`. + `PRG32_LCD_BACKLIGHT_ACTIVE_LEVEL` to `0` in `idf.py menuconfig`. 6. If the backlight is on but pixels are unstable, try lowering `PRG32_LCD_SPI_CLOCK_HZ`. The available clock frequencies are obtained by dividing the theoretical maximum of 80 MHz by small integers. If you are working on a breadboard with unstable wiring, you can try lowering the clock frequency from 40MHz (`40000000`) down to 27MHz (`27000000`) or 20MHz (`20000000`). @@ -87,8 +87,8 @@ If the real display is black: or custom text in the physical top/bottom bands without changing the 320x200 game coordinate system. - Physical builds default to `CONFIG_PRG32_DISPLAY_ILI9341`. -- QEMU builds use `sdkconfig.defaults.qemu` and `CONFIG_PRG32_DISPLAY_QEMU_RGB`. -- `main/prg32_config.h` disables physical pins, buzzer, and real Wi-Fi +- QEMU builds use `profiles/sdkconfig.defaults.qemu` and `CONFIG_PRG32_DISPLAY_QEMU_RGB`. +- `main/prg32_config.h` overrides Kconfig defaults to disable physical pins and real Wi-Fi multiplayer transport when the QEMU display backend is selected. - `components/prg32/idf_component.yml` and CMake only pull `esp_lcd_qemu_rgb` for the ESP32-C3 emulator target. diff --git a/docs/learn/labs/lab_03_graphics.md b/docs/learn/labs/lab_03_graphics.md index 1d46f93..23f2584 100644 --- a/docs/learn/labs/lab_03_graphics.md +++ b/docs/learn/labs/lab_03_graphics.md @@ -39,7 +39,7 @@ virtual screen. For QEMU: ```bash -idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu qemu --graphics monitor +idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu" qemu --graphics monitor ``` Optional extension: build your rectangle game as a `.prg32` cartridge and diff --git a/docs/learn/labs/lab_05_scores_and_multiplayer.md b/docs/learn/labs/lab_05_scores_and_multiplayer.md index f5636ec..bddb544 100644 --- a/docs/learn/labs/lab_05_scores_and_multiplayer.md +++ b/docs/learn/labs/lab_05_scores_and_multiplayer.md @@ -25,7 +25,7 @@ curl -X POST http://localhost:5000/api/scores \ -d '{"game":"pong","player":"Ada","score":42}' ``` -3. Enable Wi-Fi scores in `main/prg32_config.h` if using board networking. +3. Enable Wi-Fi scores in `idf.py menuconfig` (`PRG32 Firmware Features -> Enable Wi-Fi Scores API`) if using board networking. 4. Submit a local score with `prg32_score_submit`. 5. Start the multiplayer relay in another terminal: @@ -36,7 +36,7 @@ npm install npm start ``` -6. Configure `PRG32_MULTIPLAYER_SERVER_URL` in `main/prg32_config.h` to point at +6. Configure `PRG32_MULTIPLAYER_SERVER_URL` in `idf.py menuconfig` (`PRG32 Firmware Features -> Multiplayer Server URL`) to point at the server host. 7. In a small C cartridge, call: diff --git a/docs/learn/teaching_with_prg32.md b/docs/learn/teaching_with_prg32.md index 9d8098a..27c312b 100644 --- a/docs/learn/teaching_with_prg32.md +++ b/docs/learn/teaching_with_prg32.md @@ -114,9 +114,9 @@ On Windows, build a portable cartridge with `--portable`, then stage it with On Linux or MacOS: ```bash -./scripts/qemu/build_qemu.sh -./scripts/qemu/qemu_inject_cartridge.sh -./scripts/qemu/launch_qemu.sh +python3 -m prg32 qemu build +python3 -m prg32 qemu upload +python3 -m prg32 qemu run ``` ## Comparing Assembly And C diff --git a/docs/learn/tutorial.md b/docs/learn/tutorial.md index d6ec020..5fa1c80 100644 --- a/docs/learn/tutorial.md +++ b/docs/learn/tutorial.md @@ -15,7 +15,7 @@ thing, and explain what changed. Run the VS Code task `PRG32: set target esp32c6`, then run `PRG32: build`. These tasks use the dedicated `build-esp32c6` directory and -`sdkconfig.defaults`, so they keep the real ILI9341 board build separate from +`profiles/sdkconfig.defaults`, so they keep the real ILI9341 board build separate from QEMU. Flash with `PRG32: flash monitor`. On the physical ESP32-C6 board, the monitor diff --git a/docs/learn/tutorial_c_game.md b/docs/learn/tutorial_c_game.md index 88edb94..a5fb0b5 100644 --- a/docs/learn/tutorial_c_game.md +++ b/docs/learn/tutorial_c_game.md @@ -101,22 +101,22 @@ void app_main(void) { Build for hardware: ```bash -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults set-target esp32c6 -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults build -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults flash monitor +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults set-target esp32c6 +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults build +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults flash monitor ``` Or build for QEMU: On Windows: ```bash -idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu set-target esp32c3 -idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu qemu --graphics monitor +idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu" set-target esp32c3 +idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu" qemu --graphics monitor ``` On Linux or MacOS: ```bash -./scripts/qemu/build_qemu.sh +python3 -m prg32 qemu build ``` Restore the default `main/CMakeLists.txt` and `main/main.c` after the lab. @@ -147,9 +147,9 @@ On Windows, build a portable cartridge with `--portable` and stage it with On Linux or MacOS: ```bash -./scripts/qemu/build_qemu.sh -./scripts/qemu/qemu_inject_cartridge.sh -./scripts/qemu/launch_qemu.sh +python3 -m prg32 qemu build +python3 -m prg32 qemu upload +python3 -m prg32 qemu run ``` ## 6. Move to Tiles and Platform Games diff --git a/docs/learn/tutorial_graphic_game.md b/docs/learn/tutorial_graphic_game.md index 5571067..d1dccbb 100644 --- a/docs/learn/tutorial_graphic_game.md +++ b/docs/learn/tutorial_graphic_game.md @@ -183,12 +183,12 @@ For a desktop graphics test, run: On Windows: ```bash -idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu qemu --graphics monitor +idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu" qemu --graphics monitor ``` On Linux or MacOS: ```bash -./scripts/qemu/build_qemu.sh +python3 -m prg32 qemu build ``` QEMU is best for: diff --git a/docs/measurement/metrics_api.md b/docs/measurement/metrics_api.md index 68ee0db..3e1bcc1 100644 --- a/docs/measurement/metrics_api.md +++ b/docs/measurement/metrics_api.md @@ -180,11 +180,11 @@ with the normal board defaults: ```bash idf.py -B build-esp32c6-metrics \ -D SDKCONFIG=build-esp32c6-metrics/sdkconfig \ - -D SDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.defaults.metrics" \ + -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.esp32c6;profiles/sdkconfig.defaults.metrics" \ set-target esp32c6 idf.py -B build-esp32c6-metrics \ -D SDKCONFIG=build-esp32c6-metrics/sdkconfig \ - -D SDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.defaults.metrics" \ + -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.esp32c6;profiles/sdkconfig.defaults.metrics" \ build ``` @@ -323,7 +323,7 @@ plots when `matplotlib` is installed. - For reproducible scientific measurements, use - `sdkconfig.defaults;sdkconfig.defaults.metrics` as described in + `profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.esp32c6;profiles/sdkconfig.defaults.metrics` as described in [Scientific Measurement Tutorial](scientific_measurement_tutorial.md). ## Development Guide diff --git a/docs/measurement/scientific_measurement_tutorial.md b/docs/measurement/scientific_measurement_tutorial.md index 009d8cf..6fd693d 100644 --- a/docs/measurement/scientific_measurement_tutorial.md +++ b/docs/measurement/scientific_measurement_tutorial.md @@ -79,16 +79,16 @@ Use the normal ESP32-C6 defaults plus the metrics profile: ```bash idf.py -B build-esp32c6-metrics \ -D SDKCONFIG=build-esp32c6-metrics/sdkconfig \ - -D SDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.defaults.metrics" \ + -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.esp32c6;profiles/sdkconfig.defaults.metrics" \ set-target esp32c6 idf.py -B build-esp32c6-metrics \ -D SDKCONFIG=build-esp32c6-metrics/sdkconfig \ - -D SDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.defaults.metrics" \ + -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.esp32c6;profiles/sdkconfig.defaults.metrics" \ build ``` -Set these values in `sdkconfig.defaults.metrics` or through `menuconfig`: +Set these values in `profiles/sdkconfig.defaults.metrics` or through `menuconfig`: ```text CONFIG_PRG32_METRICS_ENABLE=y @@ -110,7 +110,7 @@ For ESP32-C6 hardware: ```bash idf.py -B build-esp32c6-metrics \ -D SDKCONFIG=build-esp32c6-metrics/sdkconfig \ - -D SDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.defaults.metrics" \ + -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.esp32c6;profiles/sdkconfig.defaults.metrics" \ flash monitor ``` @@ -120,13 +120,13 @@ On Windows: ```bash idf.py -B build-qemu \ -D SDKCONFIG=build-qemu/sdkconfig \ - -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu \ + -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu" \ qemu --graphics monitor ``` On Linux or MacOS: ```bash -./scripts/qemu/build_qemu.sh +python3 -m prg32 qemu build ``` Wait until the runtime splash and setup screen are visible. Note the IP address @@ -169,8 +169,8 @@ python3 -m prg32 qemu upload \ On Linux or MacOS: ```bash -./scripts/qemu/qemu_inject_cartridge.sh -./scripts/qemu/launch_qemu.sh +python3 -m prg32 qemu upload +python3 -m prg32 qemu run ``` ## 7. Run The Measurement @@ -373,7 +373,7 @@ For results, include: Attach or archive: - repository commit hash -- `sdkconfig` or `sdkconfig.defaults.metrics` +- `sdkconfig` or `profiles/sdkconfig.defaults.metrics` - cartridge source and `.prg32` image - metrics database or exported CSV files - screenshot BMP/PNG files diff --git a/docs/performance_test.md b/docs/performance_test.md index 06d3f9c..d3398bb 100644 --- a/docs/performance_test.md +++ b/docs/performance_test.md @@ -518,7 +518,6 @@ cartridges/myperformancetest/ |-- README.md |-- src/ | `-- myperformancetest.c -|-- scripts/ | `-- build.sh `-- dist/ generated packages ``` diff --git a/docs/repository_structure.md b/docs/repository_structure.md index 35be96b..c4ac783 100644 --- a/docs/repository_structure.md +++ b/docs/repository_structure.md @@ -20,8 +20,9 @@ This document outlines the high-level layout of the PRG32 repository. | `-- assets/ Screenshots and 30-second audiovisual previews |-- components/ | |-- prg32/ ESP-IDF component implementing the core PRG32 API (indexed/RGB565 graphics, input, network, cartridge loader) -| | `-- prg32_random.c Uniform bounded random-number API -| `-- prg32_audio/ ESP-IDF audio component; audio_synth.c holds the private SID-like oscillator, ADSR, noise, and filter core +| | |-- prg32_random.c Uniform bounded random-number API +| | `-- Kconfig Firmware configuration options (menuconfig) +| `-- prg32_audio/ ESP-IDF audio component; audio_synth.c holds the private SID-like oscillator, ADSR, noise, and filter core; ; audio_tracker.c runs tracker event timing |-- docs/ Manuals, tutorials, hardware docs, and labs | |-- agents/ Guidelines for autonomous coding agents | |-- cartridge_store/ CartridgeStore API and ScoreServer API documentation @@ -50,8 +51,9 @@ This document outlines the high-level layout of the PRG32 repository. | |-- qemu/ Emulator launch, staging, and automated smoke testing | |-- store/ CartridgeStore integration (publishing, formatting, metadata) | `-- utilities/ Common utility functions for logging, environment checks, and partitions -|-- scripts/ Shell/PowerShell scripts for common CI and local workflows (QEMU, flashing) -|-- sdkconfig* Default configuration files for ESP32-C6 hardware and QEMU emulator builds +|-- profiles/ Default configuration files and partition tables +| |-- partitions_prg32.csv Partition table defining resident firmware layout and cartridge slots +| `-- sdkconfig.defaults* Default configuration files for ESP32-C6 hardware and QEMU emulator builds |-- tests/ Host-side unit tests for Python tooling and documentation validation |-- tools/ Developer scripts, including real QEMU cartridge preview capture and media validation |-- .vscode/ Student-ready VS Code tasks and debug configurations @@ -59,6 +61,5 @@ This document outlines the high-level layout of the PRG32 repository. |-- CMakeLists.txt Top-level CMake project definition |-- CONTRIBUTING.md Guidelines for human contributors |-- CONTRIBUTORS.md Academic contributor metadata -|-- partitions_prg32.csv Partition table defining resident firmware layout and cartridge slots `-- PRG32.code-workspace VS Code workspace configuration ``` diff --git a/docs/software/abi.md b/docs/software/abi.md index 54423ff..7a55c3b 100644 --- a/docs/software/abi.md +++ b/docs/software/abi.md @@ -212,7 +212,9 @@ SID-like synthesis is ABI-neutral: bit 15 of the existing instrument descriptor layout, tracker event, or AUDIO block version changed. Portable cartridges built before synthesis therefore remain compatible, and ordinary sample IDs retain PCM semantics. The encoding is defined in the -[audio guide](../tools/audio.md#sid-like-procedural-instruments). +[audio guide](../tools/audio.md#sid-like-procedural-instruments). The later +[synth ID decoder fix](../tools/audio.md#synth-id-decoder-fix) and delta-0 +tracker timing fix change runtime behaviour only, not the ABI. ## RGB LED ABI Calls diff --git a/docs/software/api.md b/docs/software/api.md index 3e647ee..99ba123 100644 --- a/docs/software/api.md +++ b/docs/software/api.md @@ -34,14 +34,11 @@ bodies compact because they run on constrained hardware. The board API is served by the PRG32 firmware when Wi-Fi support is enabled. It is used by host tools, labs, and setup workflows. -Enable Wi-Fi in `main/prg32_config.h` or through project configuration: +Enable Wi-Fi features through project configuration (`idf.py menuconfig -> PRG32 framework -> PRG32 Firmware Features`): -```c -#define PRG32_WIFI_ENABLE 1 -#define PRG32_WIFI_SCORES_ENABLE 1 -#define PRG32_WIFI_SSID "your-network" -#define PRG32_WIFI_PASSWORD "your-password" -``` +- **Enable Game Upload (SoftAP + HTTP)** +- **Enable Wi-Fi Scores API** +- **Wi-Fi SSID / Password** (under Wi-Fi Configuration) The board can also run as an access point. In that mode the usual URL is: diff --git a/docs/software/audio_track_internals.md b/docs/software/audio_track_internals.md index 08c7570..afc5eb3 100644 --- a/docs/software/audio_track_internals.md +++ b/docs/software/audio_track_internals.md @@ -33,16 +33,18 @@ This is where the actual track data is interpreted. Inside `audio_tracker.c`, `p 1. It adds `elapsed_ms` to `tracker->tick_accum`. 2. It enters a `while` loop that runs as long as the track is active. -3. Inside the loop, it calculates `ms_per_tick` based on the tracker's current tempo (BPM). If `tick_accum < ms_per_tick`, it breaks out of the loop. Calculating this inside the loop ensures dynamic tempo changes take effect instantly. Inside this `while` loop, the tracker handles timing and event execution: -- **If it's waiting:** If `tracker->next_delta > 0`, it subtracts `ms_per_tick` from `tick_accum`, decrements `next_delta`, and loops. (This is how it waits between notes). -- **If it's time to play:** If `tracker->next_delta == 0`, it fetches the next `prg32_audio_event_t` from the track data. +- **If it's waiting:** If `tracker->next_delta > 0`, it calculates `ms_per_tick` from the current tempo (BPM). If `tick_accum < ms_per_tick`, it breaks out of the loop and waits for the next call. Otherwise it subtracts `ms_per_tick` from `tick_accum`, decrements `next_delta`, and loops. Calculating `ms_per_tick` for every tick ensures `SET_TEMPO` takes effect instantly. Waiting is the **only** thing that consumes ticks. +- **If it's time to play:** If `tracker->next_delta == 0`, it fetches the next `prg32_audio_event_t` from the track data without consuming any time. - It sets `tracker->next_delta = event.delta_ticks`. This establishes the wait time *after* the current event. -- It calls `execute_event(&event)` to actually perform the action. +- It calls `execute_event(&event)` to actually perform the action (or handles `JUMP`/`END` itself). > [!NOTE] -> Because it evaluates `next_delta == 0` first without consuming a tick, multiple events with `delta_ticks = 0` (like a chord) are processed instantly in the exact same real-time tick. +> Because fetching an event consumes no time, multiple events with `delta_ticks = 0` (like a chord) are processed in the exact same tick. The first events of a track run on the very first `prg32_audio_tracker_step` call after `prg32_audio_play_track`. + +> [!IMPORTANT] +> One step executes at most `PRG32_AUDIO_TRACKER_MAX_EVENTS_PER_STEP` (256) events. This protects the audio task from malformed tracks, such as a delta-0 `JUMP` to itself, that would otherwise never wait. Any remaining events resume on the next step. ## 4. Executing Events (`execute_event`) diff --git a/docs/software/cartridges.md b/docs/software/cartridges.md index 9643e39..e6ac508 100644 --- a/docs/software/cartridges.md +++ b/docs/software/cartridges.md @@ -41,7 +41,7 @@ icon without making the cartridge itself more expensive to start. ### Flash Layout & Slots -`partitions_prg32.csv` is used by both hardware and QEMU builds: +`profiles/partitions_prg32.csv` is used by both hardware and QEMU builds: ```text factory: resident PRG32 firmware @@ -490,6 +490,9 @@ This is intentionally a classroom loader, not a general dynamic linker. - Cartridge package size is 128 KiB. - For details on executable Cartridge RAM limits and expanding the cartridge limits using profiles, see the [PRG32 Profiles](/docs/usage/profiles.md) documentation. +- `cartridge build` and `qemu upload` check executable RAM against the 64 KiB + default profile. Pass `--cart-ram-kib 32` to target the classroom profile; + see [Matching Host Tools to the Profile](/docs/usage/profiles.md#matching-host-tools-to-the-profile). ## Development Guide @@ -507,5 +510,8 @@ This is intentionally a classroom loader, not a general dynamic linker. cartridge instructions from high-speed internal RAM (IRAM). - Keep `PRG32_CART_RAM_SIZE` small enough for classroom examples unless the partition/RAM plan is intentionally revised. -- Keep `partitions_prg32.csv`, `sdkconfig.defaults`, and `sdkconfig.defaults.qemu` +- When changing the default `PRG32_CART_RAM_PROFILE` in Kconfig or the + `sdkconfig.defaults*` files, update `DEFAULT_CART_RAM_KIB` in + `prg32/utilities/env_variables.py` so host-side checks match the firmware. +- Keep `profiles/partitions_prg32.csv`, `sdkconfig.defaults`, and `sdkconfig.defaults.qemu` in sync when changing cartridge slots. diff --git a/docs/software/framework_manual.md b/docs/software/framework_manual.md index fe27176..9f42dbe 100644 --- a/docs/software/framework_manual.md +++ b/docs/software/framework_manual.md @@ -123,7 +123,7 @@ Display backend selection: Use the QEMU defaults file when running on a desktop: ```bash -idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu qemu --graphics monitor +idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu" qemu --graphics monitor ``` When the QEMU backend is selected, `main/prg32_config.h` disables physical GPIO @@ -275,10 +275,12 @@ Important constants: configured by `CONFIG_PRG32_CART_RAM_PROFILE`. Physical ESP32-C6 and QEMU builds default to the 64 KiB extended profile. The optional `PRG32_CART_RAM_LARGE_128` profile reserves 128 KiB on ESP32-C6 when built - with `sdkconfig.defaults.esp32c6_128k`; it requires matching rebuilt + with `profiles/sdkconfig.defaults.esp32c6_128k`; it requires matching rebuilt cartridges and raises the stored-image limit to 128 KiB. The window remains static because legacy cartridges are linked to the exported `prg32_cart_exec` address; portable cartridges use the ABI table. + Host tools assume the 64 KiB window unless told otherwise with + `--cart-ram-kib`; see [PRG32 Profiles](../usage/profiles.md#matching-host-tools-to-the-profile). - `PRG32_CART_SLOT_COUNT`: number of persistent flash cartridge slots. Important functions: @@ -332,8 +334,8 @@ status bands, and small classroom sketches through the same cartridge ABI used by student games. Normal images autoload their only stored cartridge, or the saved default when -multiple cartridges are present. `PRG32_BOOT_SETUP_MODE` in -`main/prg32_config.h` can force setup on every boot for custom classroom +multiple cartridges are present. `PRG32_BOOT_SETUP_MODE` in `idf.py menuconfig` +(`PRG32 Firmware Features -> Boot Setup Mode`) can force setup on every boot for custom classroom images. If `PRG32_PIN_SETUP` is wired, holding it low during boot also forces setup mode. @@ -386,7 +388,7 @@ npm install npm start ``` -Configure the board-side endpoint in `main/prg32_config.h` with +Configure the board-side endpoint in `idf.py menuconfig` (`PRG32 Firmware Features -> Multiplayer Server URL`) with `PRG32_MULTIPLAYER_SERVER_URL`. QEMU exposes the same API with an offline local stub: `prg32_multiplayer_available()` returns true, `join` succeeds for a non-empty signature, and peer snapshots are empty by default. @@ -593,7 +595,7 @@ PRG32 exposes a small addressable RGB LED API: The reference ILI9341 wiring uses GPIO8 for LCD D/C. Many ESP32-C6 development boards also use GPIO8 for the onboard RGB LED, so `PRG32_PIN_RGB_LED` defaults -to `-1` in `main/prg32_config.h`. Set it only when the LED pin is free on the +to `-1` in `idf.py menuconfig`. Set it only when the LED pin is free on the chosen board wiring. ## Development Guide @@ -611,7 +613,7 @@ When editing framework code: - Keep dependencies in `components/prg32/CMakeLists.txt`. - Keep `REQUIRES` and `PRIV_REQUIRES` independent of `CONFIG_*` choices; ESP-IDF expands component requirements before configuration-dependent source choices. -- Keep app-specific pin and feature config in `main/prg32_config.h`. +- Configure app-specific pins and features using `idf.py menuconfig` (under PRG32 framework). - Preserve `prg32_init()` as the one-call framework initializer. - Do not expose ESP-IDF-only types in the public ABI unless absolutely needed. - Return simple `int` status codes for APIs called from assembly. diff --git a/docs/tools/audio.md b/docs/tools/audio.md index e1d3ef4..0d499b9 100644 --- a/docs/tools/audio.md +++ b/docs/tools/audio.md @@ -329,6 +329,29 @@ saving rather than zero-cost audio. Pulse width, cutoff, and pan are fixed for the life of a note. Automatic LFOs, ring modulation, and oscillator sync are not currently implemented. +### Synth ID Decoder Fix + +Earlier firmware decoded the synth ID with a layout that did not match the +table above: resonance from bits 6:4, cutoff from bits 9:7, and pulse width +from bits 13:10. Cutoff could never exceed index 7 (about 300 Hz at 22050 Hz), +so every synth voice sounded muffled, and a resonance of 4..7 read past the +four-entry damping table. `PRG32_AUDIO_SYNTH_PULSE(8, 15, 0)`, for example, +decoded as resonance 6. + +The firmware now decodes exactly the documented layout, and the filter masks +its table indices defensively. Instruments built with the +`PRG32_AUDIO_SYNTH_*` macros, `tools/prg32_audio_model.py`, or an equivalent +encoder (such as `cartridges/bachdemo`) now sound as designed. Cartridges +whose `sample_id` values were hand-tuned for the old decoder (for example the +SpaceBeltMadness `audio/sbm_audio.json` generated by its +`tools/compose_soundtrack.py`) will sound different and should re-encode their +instruments with the documented layout. + +This is a behaviour fix, not an ABI change: no function index, prototype, +descriptor, event, or AUDIO block layout changed, so the ABI hash, version, +and feature bits stay the same (see +[ABI compatibility rules](../agents/cartridge_abi_compatibility.md)). + ## Tracker Events Event records are four bytes: @@ -337,6 +360,18 @@ Event records are four bytes: delta_ticks, command, arg0, arg1 ``` +`delta_ticks` is the wait *after* an event, in tracker ticks (one tick is a +16th note: `60000 / (bpm * 4)` ms). Events separated by `delta_ticks = 0` +run in the same tick, so consecutive delta-0 `NOTE_ON` events form a chord. +Only waiting consumes time; see +[How `prg32_audio_play_track` Works](../software/audio_track_internals.md) +for the step algorithm. + +Earlier firmware charged one tick for every event, even with +`delta_ticks = 0`, which turned chords into arpeggios and stretched every +track by one tick per event. Tracks that compensated for that (for example by +using delta 0 for "next 16th note") now play faster and should be re-timed. + Initial commands: | Command | Meaning | @@ -369,7 +404,7 @@ No sound: because the firmware failed to start I2S - confirm speaker wires are on speaker outputs - confirm audio is enabled in Kconfig -- confirm the build uses `sdkconfig.defaults`, not `sdkconfig.defaults.qemu` +- confirm the build uses `profiles/sdkconfig.defaults`, not `profiles/sdkconfig.defaults.qemu` - confirm the selected GPIOs do not conflict with display or joystick wiring Only one stereo speaker works: diff --git a/docs/usage/configuration.md b/docs/usage/configuration.md index 42e57bb..b8cd523 100644 --- a/docs/usage/configuration.md +++ b/docs/usage/configuration.md @@ -10,12 +10,12 @@ idf.py menuconfig When you save changes in `menuconfig`, they are stored in the `sdkconfig` file located at the root of the project. - **`sdkconfig`**: Contains your local configuration. This file is dynamically generated and represents your current build state. It is usually ignored by version control. -- **`sdkconfig.defaults`**: Contains the permanent default configurations for the repository. These defaults act as a baseline whenever a new `sdkconfig` file is generated (for example, after a fresh Git clone, or if you delete your local `sdkconfig` and run a build). Your local `sdkconfig` will override the repository defaults. - - If you want a change (e.g., changing the fallback default audio mode) to be applied universally to all new builds, you must manually copy the relevant setting from your local `sdkconfig` into `sdkconfig.defaults`. -- **`sdkconfig.defaults.qemu`**: Contains the default configuration overrides specifically for QEMU emulator builds. +- **`profiles/sdkconfig.defaults`**: Contains the permanent default configurations for the repository. These defaults act as a baseline whenever a new `sdkconfig` file is generated (for example, after a fresh Git clone, or if you delete your local `sdkconfig` and run a build). Your local `sdkconfig` will override the repository defaults. + - If you want a change (e.g., changing the fallback default audio mode) to be applied universally to all new builds, you must manually copy the relevant setting from your local `sdkconfig` into `profiles/sdkconfig.defaults`. +- **`profiles/sdkconfig.defaults.qemu`**: Contains the default configuration overrides specifically for QEMU emulator builds. ## Runtime Configuration (NVS) -While `menuconfig` and `sdkconfig.defaults` provide the baseline compile-time configuration, the PRG32 framework also allows certain system settings (such as master volume or audio output modes) to be configured dynamically by the user via the on-device Setup Menu. +While `menuconfig` and `profiles/sdkconfig.defaults` provide the baseline compile-time configuration, the PRG32 framework also allows certain system settings (such as master volume or audio output modes) to be configured dynamically by the user via the on-device Setup Menu. -These user preferences are stored in the ESP32-C6's Non-Volatile Storage (NVS) under the `prg32` namespace. At boot time, any valid setting found in NVS will take precedence and dynamically override the compile-time default. If you wipe the NVS flash or if a setting is unconfigured, the system automatically falls back to your `sdkconfig.defaults` values. +These user preferences are stored in the ESP32-C6's Non-Volatile Storage (NVS) under the `prg32` namespace. At boot time, any valid setting found in NVS will take precedence and dynamically override the compile-time default. If you wipe the NVS flash or if a setting is unconfigured, the system automatically falls back to your `profiles/sdkconfig.defaults` values. diff --git a/docs/usage/getting_started.md b/docs/usage/getting_started.md index e8d94ba..74d1c73 100644 --- a/docs/usage/getting_started.md +++ b/docs/usage/getting_started.md @@ -184,8 +184,12 @@ python3 -m prg32 cartridge build \ --out ../work/hello_world/hello_world.prg32 ``` -Boot up the ESP32C6 to the setup menu and make sure that your computer and the board are connected to the **same WiFi**. To do this, you can set up an Access Point on the ESP32C6, or you can connect to a local WiFi network. See the [Network](network.md) documentation file for more information. +Boot up the ESP32C6 to the setup menu and make sure that your computer and the board are connected to the **same WiFi**. +> [!TIP] +> You can pre-configure your board's Wi-Fi connection *before* building the firmware by running: +> `python3 -m prg32 wifi set --ssid "YourSSID" --password "YourPwd" --mode sta` +> This avoids having to configure it on the physical board's screen. Upload the cartridge to the board. ``` python3 -m prg32 esp32c6 upload ../work/hello_world/hello_world.prg32 diff --git a/docs/usage/network.md b/docs/usage/network.md index 1ab3e50..fbe6500 100644 --- a/docs/usage/network.md +++ b/docs/usage/network.md @@ -21,7 +21,7 @@ The chosen network settings are stored persistently in non-volatile storage (NVS ## Technical Details -When running in Access Point mode (`PRG32_WIFI_MODE_AP` or `PRG32_WIFI_MODE_APSTA`), the default classroom values configured in `main/prg32_config.h` are: +When running in Access Point mode (`PRG32_WIFI_MODE_AP` or `PRG32_WIFI_MODE_APSTA`), the default classroom values configured in `idf.py menuconfig` are: - **SSID:** `PRG32` - **Password:** `prg32game` @@ -33,27 +33,27 @@ In Station mode (`PRG32_WIFI_MODE_STA`), the IP address will be assigned by the QEMU builds keep physical Wi-Fi disabled by default (`CONFIG_PRG32_DISPLAY_QEMU_RGB`), but games can still compile against the same API and exercise setup screens. However, mDNS, CartridgeStore downloads, and multiplayer capabilities generally require specific forwarding or bridging on the virtual QEMU network to function, or they rely on local configuration overrides. -## Advanced: Hardcoding Wi-Fi Credentials +## Advanced: Pre-configuring Wi-Fi Credentials For advanced users or developers who frequently flash the firmware, it can be tedious to manually configure the network via the setup menu on every full wipe. -You can automatically provide your infrastructure Wi-Fi credentials at compile time by using the environment header: +You can use the PRG32 Python tooling to set your Wi-Fi credentials *before* building. These credentials will be securely merged into your local build environment without touching tracked source files. -1. Copy `main/prg32_env_example.h` and rename the copy to `main/prg32_env.h`. -2. Edit `main/prg32_env.h` and replace the placeholder values with your actual network credentials: +To set your Wi-Fi configuration, run the following command in the PRG32 root: -```c -#ifndef PRG32_ENV_H -#define PRG32_ENV_H - -#define PRG32_WIFI_SSID "YOUR_WIFI_SSID" -#define PRG32_WIFI_PASSWORD "YOUR_WIFI_PASSWORD" - -#endif +```bash +python3 -m prg32 wifi set --ssid "YOUR_WIFI_SSID" --password "YOUR_WIFI_PASSWORD" --mode sta ``` -This ensures your board automatically connects to the designated Wi-Fi when running in `PRG32_WIFI_MODE_STA` or `PRG32_WIFI_MODE_APSTA`, keeping your development process streamlined. +- `--mode`: Can be `sta` / `infrastructure` (connect to an existing network) or `ap` (create your own access point). +- The tooling saves this to `profiles/sdkconfig.defaults.local`, which is ignored by Git, ensuring you don't accidentally commit your network password. +- You only need to run this command once. It will be remembered for all future builds. +To clear the credentials and return to the default behavior: + +```bash +python3 -m prg32 wifi clear +``` ## Development Guide > [!IMPORTANT] diff --git a/docs/usage/profiles.md b/docs/usage/profiles.md index 67f9da8..c0bbac4 100644 --- a/docs/usage/profiles.md +++ b/docs/usage/profiles.md @@ -1,15 +1,21 @@ # PRG32 Profiles -PRG32 uses different RAM profiles to adjust how much internal executable RAM the resident firmware reserves for uploadable cartridges. The active profile dictates the cartridge size limits and the available drawing features. +PRG32 uses different SDK configuration profiles to adjust how the resident firmware is built. While some profiles adjust the available RAM for uploadable cartridges, others configure the framework for different hardware targets (like the QEMU emulator) or enable runtime features like metrics streaming. The active profile dictates the cartridge size limits, available drawing features, and the target platform. -## Default Profiles +## Base Profiles - **Classroom Profile (32 KiB)**: An optional smaller window for builds that prioritize resident-runtime heap. - **Extended Profile (64 KiB)**: The default for physical ESP32-C6 and QEMU builds. The default stored package limit is also 64 KiB. +- **QEMU Emulator Profile**: The default used by QEMU emulator builds (`profiles/sdkconfig.defaults.qemu`). It configures the system for the emulator (using `esp32c3` as the target, enabling the RGB display, UART input, and failure on real hardware) and extends cartridge RAM to 64 KiB. Use with: + ```bash + idf.py -B build-qemu -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu" set-target esp32c3 + ``` -## 128 KiB ESP32-C6 Profile +## Optional Profiles + +### 128 KiB ESP32-C6 Profile (`sdkconfig.defaults.esp32c6_128k`) The optional physical-board profile reserves 128 KiB of executable cartridge RAM and uses the ILI9341 low-memory renderer: the persistent framebuffer is @@ -19,11 +25,41 @@ during LCD transfer. This keeps the game coordinate system unchanged. Full ```bash idf.py -B build-esp32c6-128k \ - -D SDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.defaults.esp32c6_128k" \ + -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.esp32c6;profiles/sdkconfig.defaults.esp32c6_128k" \ set-target esp32c6 idf.py -B build-esp32c6-128k build ``` -Then use that firmware ELF or its `/api/runtime` response when building and -uploading large cartridges. The setup resource screen reports `CART RAM` so -the active profile can be checked on the board. +Then build large cartridges with `--cart-ram-kib 128` (see below). Board +uploads check the limit against the firmware's `/api/runtime` response. The +setup resource screen reports `CART RAM` so the active profile can be checked +on the board. + +## Matching Host Tools to the Profile + +Host tools reject a cartridge whose executable memory (`mem_size`: code, data, +and `.bss`) is larger than the target's cartridge RAM window. Portable +`cartridge build` runs and QEMU staging cannot ask a running firmware for +its window, so they choose the limit as follows: + +| Command | Limit used | +|---|---| +| `python3 -m prg32 cartridge build` | `--cart-ram-kib`, else 64 KiB (the default extended profile) | +| `python3 -m prg32 qemu upload` | `--cart-ram-kib`, else `CONFIG_PRG32_CART_RAM_KIB` from the `sdkconfig` next to `--flash` (normally `build-qemu/sdkconfig`), else 64 KiB | +| `python3 -m prg32 esp32c6 upload` | `cart_ram_size` reported by the board's `/api/runtime` | + +`--cart-ram-kib` accepts 16 to 128, the same range as the Kconfig custom +profile. The value in `prg32/utilities/env_variables.py` +(`DEFAULT_CART_RAM_KIB`) must match the Kconfig `PRG32_CART_RAM_KIB` default. + +To keep a cartridge within the classroom profile, build it with the +32 KiB limit: + +```bash +python3 -m prg32 cartridge build game.S --out build/game.prg32 \ + --name game --entry-prefix game --cart-ram-kib 32 +``` + +For a QEMU firmware built with the classroom profile, `qemu upload` picks up +32 KiB from `build-qemu/sdkconfig`; pass `--cart-ram-kib 32` when staging into +a flash image with no `sdkconfig` next to it. diff --git a/docs/usage/qemu.md b/docs/usage/qemu.md index ca5339d..9a5b760 100644 --- a/docs/usage/qemu.md +++ b/docs/usage/qemu.md @@ -6,7 +6,7 @@ PRG32 can run on a desktop with Espressif QEMU and show the 320x240 PRG32 screen While the physical PRG32 board uses an ESP32-C6 target with an ILI9341 SPI display, the QEMU emulator targets the **ESP32-C3** using a virtual RGB display backend (`CONFIG_PRG32_DISPLAY_QEMU_RGB`). This is because Espressif's maintained RISC-V QEMU graphics path requires the ESP32-C3. -- **Separate Build Environment**: QEMU uses a separate build directory (`build-qemu`) and defaults file (`sdkconfig.defaults.qemu`) to ensure physical board configurations remain untouched. +- **Separate Build Environment**: QEMU uses a separate build directory (`build-qemu`) and defaults file (`profiles/sdkconfig.defaults.qemu`) to ensure physical board configurations remain untouched. - **Unified ABI**: Both physical and QEMU targets share the same 32-bit RISC-V calling convention and PRG32 ABI. Only the display backend changes. - **Screen Resolution**: Framework screens use the full 320x240 resolution, while game code draws into a centered 320x200 viewport. diff --git a/docs/usage/setup_verification.md b/docs/usage/setup_verification.md index 04e63c5..c30ebe2 100644 --- a/docs/usage/setup_verification.md +++ b/docs/usage/setup_verification.md @@ -15,7 +15,7 @@ python3 -m prg32 doctor The `doctor` tool verifies: - Whether the **ESP-IDF** toolchain is properly loaded (e.g., `idf.py` is in your `PATH`). - Whether the **RISC-V compiler** (`riscv32-esp-elf-gcc`) is available. -- Whether the **partitions file** (`partitions_prg32.csv`) exists and can be parsed correctly for cartridge slots. +- Whether the **partitions file** (`profiles/partitions_prg32.csv`) exists and can be parsed correctly for cartridge slots. If any of these checks fail, ensure you have sourced the ESP-IDF export script (e.g., `. ~/esp-idf/export.sh`) before attempting to build the project. diff --git a/docs/usage/tooling.md b/docs/usage/tooling.md index 495065f..ab8303c 100644 --- a/docs/usage/tooling.md +++ b/docs/usage/tooling.md @@ -45,7 +45,19 @@ These scripts are used to prepare and flashing single-file firmwares. They are u - `build`: build QEMU and generate the flash image. Use the `--skip-target` option to decrease compilation time if the ESP32C3 target was already set (e.g. from a previous build). - `run`: run the QEMU emulator environment - `build-and-run`: build QEMU, generate flash image, and run the emulator. Also supports the `--skip-target` option. -- `upload`: upload a cartridge to QEMU +- `upload`: upload a cartridge to QEMU. `--cart-ram-kib` sets the executable + RAM limit; by default it is read from `build-qemu/sdkconfig`, else 64 KiB + (see [PRG32 Profiles](profiles.md#matching-host-tools-to-the-profile)). + +Two interactive helpers wrap `cartridge build` and QEMU staging for the +graphics versions of the example games in `examples/games/`: + +- `python3 -m prg32.qemu.load_cart |list`: build one game and stage it + into `build-qemu/qemu_flash.bin`. +- `python3 -m prg32.qemu.start`: a menu that builds, stages, and runs a game. + +Both call `inject_cartridge()` in `prg32/qemu/upload_qemu.py`, the same +validation and staging code used by `qemu upload`. Checked-in cartridge preview videos are recorded from real QEMU execution with `python3 tools/capture_cartridge_previews.py`. See @@ -55,7 +67,9 @@ playfield cropping, UART audio capture, and regeneration details. For a complete workflow of making a cartridge run on QEMU, see [docs/qemu.md](qemu.md). ## Cartridge Tasks (`cartridge`) - `build`: build a portable ABI-table `.prg32` cartridge from assembly or C - source code. Firmware-specific build options are rejected. + source code. Firmware-specific build options are rejected. `--cart-ram-kib` + sets the executable RAM limit (default 64; use 32 for the classroom profile, + see [PRG32 Profiles](profiles.md#matching-host-tools-to-the-profile)). - `summary`: print the PRG32 cartridge summary (ABI, feature bits, etc.) For detailed instructions and examples on building cartridges, see [docs/cartridges.md](/docs/software/cartridges.md). diff --git a/docs/usage/troubleshooting.md b/docs/usage/troubleshooting.md index ca3316a..befab2e 100644 --- a/docs/usage/troubleshooting.md +++ b/docs/usage/troubleshooting.md @@ -34,9 +34,9 @@ Here are common issues and solutions when working with the PRG32 framework. ## Cartridge and Partition Issues - **Cartridge upload fails**: The emulator flash image might be missing, or the cartridge is too large. Run QEMU once to generate `build-qemu/qemu_flash.bin`, then rerun your upload command. -- **Partition mismatch errors**: Run `python3 -m prg32 doctor` and verify `partitions_prg32.csv` plus the selected cartridge slot. +- **Partition mismatch errors**: Run `python3 -m prg32 doctor` and verify `profiles/partitions_prg32.csv` plus the selected cartridge slot. - **A staged cartridge opens setup instead of starting**: Check that - `PRG32_BOOT_SETUP_MODE` is `0` in `main/prg32_config.h`, rebuild the firmware, + `PRG32_BOOT_SETUP_MODE` is `0` in `idf.py menuconfig` (under PRG32 Firmware Features), rebuild the firmware, and inspect the serial line `prg32_init: cartridge autoload failed`. A Store-ready package should load without copying its metadata or artwork into temporary RAM; an out-of-memory error here indicates an older firmware build. diff --git a/examples/features/README.md b/examples/features/README.md index 08f0855..1623b10 100644 --- a/examples/features/README.md +++ b/examples/features/README.md @@ -90,16 +90,16 @@ Use either the assembly symbols or the C symbols in `app_main`, not both. Build for hardware: ```bash -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults set-target esp32c6 -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults build -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults flash monitor +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults set-target esp32c6 +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults build +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults flash monitor ``` Or build for QEMU: ```bash -idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu set-target esp32c3 -idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu qemu --graphics monitor +idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu" set-target esp32c3 +idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu" qemu --graphics monitor ``` Restore the default `main/CMakeLists.txt` and `main/main.c` before committing. diff --git a/examples/features/audio_mono_beep/README.md b/examples/features/audio_mono_beep/README.md index d3a1aad..79feffe 100644 --- a/examples/features/audio_mono_beep/README.md +++ b/examples/features/audio_mono_beep/README.md @@ -11,8 +11,8 @@ square-wave sample. No cartridge audio assets are required. 3. Build and flash: ```bash -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults set-target esp32c6 -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults build flash monitor +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults set-target esp32c6 +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults build flash monitor ``` Checkpoint: one speaker plays a short beep, then the display keeps refreshing. diff --git a/examples/features/audio_mono_sample/README.md b/examples/features/audio_mono_sample/README.md index f4abfea..ada1a54 100644 --- a/examples/features/audio_mono_sample/README.md +++ b/examples/features/audio_mono_sample/README.md @@ -16,8 +16,8 @@ cartridge AUDIO block. ## Run Embedded In Firmware ```bash -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults set-target esp32c6 -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults build flash monitor +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults set-target esp32c6 +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults build flash monitor ``` Checkpoint: the mono speaker repeats a short click. If there is no sound, run diff --git a/examples/features/audio_mono_tracker/README.md b/examples/features/audio_mono_tracker/README.md index 73214a0..cad62e8 100644 --- a/examples/features/audio_mono_tracker/README.md +++ b/examples/features/audio_mono_tracker/README.md @@ -12,8 +12,8 @@ as instrument 0, and a short event list plays a repeating three-note melody. ## Run ```bash -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults set-target esp32c6 -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults build flash monitor +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults set-target esp32c6 +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults build flash monitor ``` Checkpoint: the melody loops while the main task keeps refreshing the display. diff --git a/examples/features/audio_stereo_music/README.md b/examples/features/audio_stereo_music/README.md index 44e0f52..1411fd5 100644 --- a/examples/features/audio_stereo_music/README.md +++ b/examples/features/audio_stereo_music/README.md @@ -6,8 +6,8 @@ effects alternate between left and right. ## Run ```bash -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults set-target esp32c6 -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults build flash monitor +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults set-target esp32c6 +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults build flash monitor ``` Checkpoint: the melody appears in the center image and short effects jump diff --git a/examples/features/audio_stereo_pan_test/README.md b/examples/features/audio_stereo_pan_test/README.md index 9ccd056..6d94d8d 100644 --- a/examples/features/audio_stereo_pan_test/README.md +++ b/examples/features/audio_stereo_pan_test/README.md @@ -14,8 +14,8 @@ Wire both MAX98357A boards to the same BCLK, LRCLK, and DATA lines. Configure one board for left-channel output and the other for right-channel output. ```bash -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults set-target esp32c6 -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults build flash monitor +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults set-target esp32c6 +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults build flash monitor ``` Checkpoint: the serial monitor labels match the speaker that plays. If left and diff --git a/examples/features/splash_screen/README.md b/examples/features/splash_screen/README.md index a678c38..ee60383 100644 --- a/examples/features/splash_screen/README.md +++ b/examples/features/splash_screen/README.md @@ -43,8 +43,8 @@ For the C version, use `../examples/features/splash_screen/c/demo.c` and the Build: ```bash -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults set-target esp32c6 -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults build flash monitor +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults set-target esp32c6 +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults build flash monitor ``` Checkpoint: the first splash pauses briefly, then the draw helper keeps a diff --git a/examples/games/README.md b/examples/games/README.md index c46e9a3..993806d 100644 --- a/examples/games/README.md +++ b/examples/games/README.md @@ -144,16 +144,16 @@ and add `../examples/games/platformer/graphics/game.S` to `SRCS`. ### 3. Build for the Physical ESP32-C6 Board ```bash -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults set-target esp32c6 -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults build -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults flash monitor +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults set-target esp32c6 +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults build +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults flash monitor ``` ### 4. Or Build for QEMU Graphics Testing ```bash -idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu set-target esp32c3 -idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu qemu --graphics monitor +idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu" set-target esp32c3 +idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu" qemu --graphics monitor ``` QEMU shows the graphics viewport in a desktop window. Use the monitor terminal @@ -182,9 +182,9 @@ once. ### 1. Build and Flash the Resident Firmware ```bash -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults set-target esp32c6 -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults build -idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults flash monitor +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults set-target esp32c6 +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults build +idf.py -B build-esp32c6 -D SDKCONFIG=build-esp32c6/sdkconfig -D SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults flash monitor ``` The board starts the `PRG32` Wi-Fi access point by default for cartridge uploads. @@ -244,14 +244,14 @@ cartridge directly into the emulator flash image. ### 1. Build QEMU Firmware ```bash -idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu set-target esp32c3 -idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu build +idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu" set-target esp32c3 +idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu" build ``` ### 2. Run QEMU Once to Create the Flash Image ```bash -idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu qemu --graphics monitor +idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu" qemu --graphics monitor ``` Stop QEMU after the first successful launch. This creates @@ -288,7 +288,7 @@ python3 -m prg32 qemu upload \ ### 5. Run QEMU Again ```bash -idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu qemu --graphics monitor +idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu" qemu --graphics monitor ``` The resident firmware loads the staged cartridge from the QEMU flash image. diff --git a/main/prg32_config.h b/main/prg32_config.h index 75b552a..e67093f 100644 --- a/main/prg32_config.h +++ b/main/prg32_config.h @@ -3,50 +3,21 @@ #include "sdkconfig.h" -/* Example game identifiers used by lab builds that opt into examples/games. */ -#define PRG32_GAME_PONG_ASCII 1 -#define PRG32_GAME_PONG_GRAPHICS 2 -#define PRG32_GAME_BREAKOUT_ASCII 3 -#define PRG32_GAME_BREAKOUT_GRAPHICS 4 -#define PRG32_GAME_INVADERS_ASCII 5 -#define PRG32_GAME_INVADERS_GRAPHICS 6 -#define PRG32_GAME_PACMAN_ASCII 7 -#define PRG32_GAME_PACMAN_GRAPHICS 8 -#define PRG32_GAME_ASTEROIDS_ASCII 9 -#define PRG32_GAME_ASTEROIDS_GRAPHICS 10 -#define PRG32_GAME_TETRIS_ASCII 11 -#define PRG32_GAME_TETRIS_GRAPHICS 12 -#define PRG32_GAME_TETRIS_C 13 -#define PRG32_GAME_PLATFORMER_ASCII 14 -#define PRG32_GAME_PLATFORMER_GRAPHICS 15 -#define PRG32_GAME_PLATFORMER_C 16 -#define PRG32_GAME_PONG_C 17 -#define PRG32_GAME_BREAKOUT_C 18 -#define PRG32_GAME_INVADERS_C 19 -#define PRG32_GAME_PACMAN_C 20 -#define PRG32_GAME_ASTEROIDS_C 21 -#define PRG32_GAME_RAYCASTER_ASCII 22 -#define PRG32_GAME_RAYCASTER_GRAPHICS 23 -#define PRG32_GAME_RAYCASTER_C 24 -#define PRG32_GAME_WING_ASCII 25 -#define PRG32_GAME_WING_GRAPHICS 26 -#define PRG32_GAME_WING_C 27 -#define PRG32_GAME_FROGGER_ASCII 28 -#define PRG32_GAME_FROGGER_GRAPHICS 29 -#define PRG32_GAME_FROGGER_C 30 -#define PRG32_GAME_PRG32_BOUNCE_ASCII 31 -#define PRG32_GAME_PRG32_BOUNCE_GRAPHICS 32 -#define PRG32_GAME_PRG32_BOUNCE_C 33 - /* Runtime console mode. */ #define PRG32_MODE_UART_ONLY 0 #define PRG32_MODE_LCD_ONLY 1 #define PRG32_MODE_UART_LCD_MIRROR 2 +#ifdef CONFIG_PRG32_DEFAULT_MODE_UART_ONLY +#define PRG32_DEFAULT_MODE PRG32_MODE_UART_ONLY +#elif defined(CONFIG_PRG32_DEFAULT_MODE_LCD_ONLY) +#define PRG32_DEFAULT_MODE PRG32_MODE_LCD_ONLY +#else #define PRG32_DEFAULT_MODE PRG32_MODE_UART_LCD_MIRROR +#endif #ifndef PRG32_DEBUG -#define PRG32_DEBUG 0 +#define PRG32_DEBUG CONFIG_PRG32_DEBUG #endif #if CONFIG_PRG32_DISPLAY_QEMU_RGB @@ -87,41 +58,41 @@ #else /* Physical ESP32-C6 build. */ // Display ILI9341 -#define PRG32_PIN_LCD_MOSI 7 -#define PRG32_PIN_LCD_MISO 2 -#define PRG32_PIN_LCD_SCLK 6 -#define PRG32_PIN_LCD_CS 10 -#define PRG32_PIN_LCD_DC 1 -#define PRG32_PIN_LCD_RST 0 -#define PRG32_PIN_LCD_BL 5 - -#define PRG32_LCD_SPI_CLOCK_HZ 27000000 -#define PRG32_LCD_BACKLIGHT_ACTIVE_LEVEL 1 -#define PRG32_LCD_BOOT_TEST_MS 0 -#define PRG32_LCD_SOFT_SPI 0 -#define PRG32_BOOT_SIGNAL_ENABLE 0 -#define PRG32_BOOT_DIAGNOSTIC_DELAY_MS 0 +#define PRG32_PIN_LCD_MOSI CONFIG_PRG32_PIN_LCD_MOSI +#define PRG32_PIN_LCD_MISO CONFIG_PRG32_PIN_LCD_MISO +#define PRG32_PIN_LCD_SCLK CONFIG_PRG32_PIN_LCD_SCLK +#define PRG32_PIN_LCD_CS CONFIG_PRG32_PIN_LCD_CS +#define PRG32_PIN_LCD_DC CONFIG_PRG32_PIN_LCD_DC +#define PRG32_PIN_LCD_RST CONFIG_PRG32_PIN_LCD_RST +#define PRG32_PIN_LCD_BL CONFIG_PRG32_PIN_LCD_BL + +#define PRG32_LCD_SPI_CLOCK_HZ CONFIG_PRG32_LCD_SPI_CLOCK_HZ +#define PRG32_LCD_BACKLIGHT_ACTIVE_LEVEL CONFIG_PRG32_LCD_BACKLIGHT_ACTIVE_LEVEL +#define PRG32_LCD_BOOT_TEST_MS CONFIG_PRG32_LCD_BOOT_TEST_MS +#define PRG32_LCD_SOFT_SPI CONFIG_PRG32_LCD_SOFT_SPI +#define PRG32_BOOT_SIGNAL_ENABLE CONFIG_PRG32_BOOT_SIGNAL_ENABLE +#define PRG32_BOOT_DIAGNOSTIC_DELAY_MS CONFIG_PRG32_BOOT_DIAGNOSTIC_DELAY_MS // Joystick -#define PRG32_PIN_BTN_UP 3 -#define PRG32_PIN_BTN_DOWN 13 -#define PRG32_PIN_BTN_LEFT 18 -#define PRG32_PIN_BTN_RIGHT 19 -#define PRG32_PIN_BTN_START 20 -#define PRG32_PIN_BTN_A 21 -#define PRG32_PIN_BTN_B 22 +#define PRG32_PIN_BTN_UP CONFIG_PRG32_PIN_BTN_UP +#define PRG32_PIN_BTN_DOWN CONFIG_PRG32_PIN_BTN_DOWN +#define PRG32_PIN_BTN_LEFT CONFIG_PRG32_PIN_BTN_LEFT +#define PRG32_PIN_BTN_RIGHT CONFIG_PRG32_PIN_BTN_RIGHT +#define PRG32_PIN_BTN_START CONFIG_PRG32_PIN_BTN_START +#define PRG32_PIN_BTN_A CONFIG_PRG32_PIN_BTN_A +#define PRG32_PIN_BTN_B CONFIG_PRG32_PIN_BTN_B /* Enter setup by holding A+B during boot; no dedicated setup GPIO is wired. */ -#define PRG32_PIN_SETUP -1 +#define PRG32_PIN_SETUP CONFIG_PRG32_PIN_SETUP // Buzzer is deactivated -#define PRG32_PIN_BUZZER -1 +#define PRG32_PIN_BUZZER CONFIG_PRG32_PIN_BUZZER /* * Many ESP32-C6 boards route the onboard addressable RGB LED to GPIO8. The * reference PRG32 ILI9341 harness uses GPIO1 for LCD D/C, leaving GPIO8 free. */ -#define PRG32_PIN_RGB_LED 8 +#define PRG32_PIN_RGB_LED CONFIG_PRG32_PIN_RGB_LED /* * Uploadable game cartridges. @@ -131,7 +102,11 @@ * QEMU builds keep Wi-Fi disabled and use python3 -m prg32 to patch the * emulator flash image. */ +#ifdef CONFIG_PRG32_GAME_UPLOAD_ENABLE #define PRG32_GAME_UPLOAD_ENABLE 1 +#else +#define PRG32_GAME_UPLOAD_ENABLE 0 +#endif #endif @@ -142,32 +117,34 @@ #define PRG32_PIN_AUDIO_SD CONFIG_PRG32_AUDIO_I2S_SD_GPIO #define PRG32_AUDIO_SAMPLE_RATE CONFIG_PRG32_AUDIO_SAMPLE_RATE #define PRG32_AUDIO_MAX_VOICES CONFIG_PRG32_AUDIO_MAX_VOICES -#define PRG32_AUDIO_DEFAULT_VOLUME_PCT 70 +#define PRG32_AUDIO_DEFAULT_VOLUME_PCT CONFIG_PRG32_AUDIO_DEFAULT_VOLUME_PCT /* QEMU uses UART 1 to direct audio to python listener */ -#define PRG32_QEMU_UART_1_TX 4 -#define PRG32_QEMU_UART_1_RX 5 +#define PRG32_QEMU_UART_1_TX CONFIG_PRG32_QEMU_UART_1_TX +#define PRG32_QEMU_UART_1_RX CONFIG_PRG32_QEMU_UART_1_RX /* Wifi Configuration */ /* Optional Wi-Fi score REST API. Fill credentials before flashing. */ +#ifndef PRG32_WIFI_SCORES_ENABLE +#ifdef CONFIG_PRG32_WIFI_SCORES_ENABLE +#define PRG32_WIFI_SCORES_ENABLE 1 +#else #define PRG32_WIFI_SCORES_ENABLE 0 - -#if __has_include("prg32_env.h") -#include "prg32_env.h" #endif - -#ifndef PRG32_WIFI_SSID -#define PRG32_WIFI_SSID "YOUR_WIFI_SSID" -#endif -#ifndef PRG32_WIFI_PASSWORD -#define PRG32_WIFI_PASSWORD "YOUR_WIFI_PASSWORD" #endif + +#define PRG32_WIFI_SSID CONFIG_PRG32_WIFI_SSID +#define PRG32_WIFI_PASSWORD CONFIG_PRG32_WIFI_PASSWORD #define PRG32_SCORE_MAX 16 #define PRG32_IDLE_HEARTBEAT_MS 5000 /* Optional cartridge multiplayer service over Wi-Fi STA + WebSocket. */ +#ifdef CONFIG_PRG32_MULTIPLAYER_ENABLE #define PRG32_MULTIPLAYER_ENABLE 1 -#define PRG32_MULTIPLAYER_SERVER_URL "ws://192.168.4.2:8081" +#else +#define PRG32_MULTIPLAYER_ENABLE 0 +#endif +#define PRG32_MULTIPLAYER_SERVER_URL CONFIG_PRG32_MULTIPLAYER_SERVER_URL #define PRG32_MULTIPLAYER_SEND_PERIOD_MS 50 #define PRG32_MULTIPLAYER_PEER_TIMEOUT_MS 3000 @@ -178,23 +155,28 @@ #endif #define PRG32_WIFI_STA_ENABLE \ - (PRG32_WIFI_SCORES_ENABLE || PRG32_MULTIPLAYER_TRANSPORT_ENABLE) -#define PRG32_WIFI_AP_ENABLE PRG32_GAME_UPLOAD_ENABLE + (PRG32_WIFI_SCORES_ENABLE || PRG32_MULTIPLAYER_TRANSPORT_ENABLE || CONFIG_PRG32_WIFI_BOOT_MODE_STA) +#define PRG32_WIFI_AP_ENABLE (PRG32_GAME_UPLOAD_ENABLE || CONFIG_PRG32_WIFI_BOOT_MODE_AP) + +#if CONFIG_PRG32_DISPLAY_QEMU_RGB +#define PRG32_WIFI_ENABLE 0 +#else #define PRG32_WIFI_ENABLE (PRG32_WIFI_STA_ENABLE || PRG32_WIFI_AP_ENABLE) +#endif /* Autoload the sole/default cartridge. Hold A+B at boot to enter setup; * setup also opens when no unambiguous cartridge can boot. Classroom images * may set this to 1 to force setup on every boot. */ -#define PRG32_BOOT_SETUP_MODE 0 -#define PRG32_WIFI_AP_SSID "PRG32" -#define PRG32_WIFI_AP_PASSWORD "prg32game" -#define PRG32_WIFI_AP_CHANNEL 6 -#define PRG32_WIFI_AP_MAX_CONN 4 -#define PRG32_WIFI_COUNTRY_CODE "IT" -#define PRG32_WIFI_STA_LEGACY_PROTOCOLS 1 +#define PRG32_BOOT_SETUP_MODE CONFIG_PRG32_BOOT_SETUP_MODE +#define PRG32_WIFI_AP_SSID CONFIG_PRG32_WIFI_SSID +#define PRG32_WIFI_AP_PASSWORD CONFIG_PRG32_WIFI_PASSWORD +#define PRG32_WIFI_AP_CHANNEL CONFIG_PRG32_WIFI_AP_CHANNEL +#define PRG32_WIFI_AP_MAX_CONN CONFIG_PRG32_WIFI_AP_MAX_CONN +#define PRG32_WIFI_COUNTRY_CODE CONFIG_PRG32_WIFI_COUNTRY_CODE +#define PRG32_WIFI_STA_LEGACY_PROTOCOLS CONFIG_PRG32_WIFI_STA_LEGACY_PROTOCOLS /* CartridgeStore integration constants. */ #define PRG32_STORE_URL_MAX_LEN 128 -#define PRG32_STORE_SERVER_URL "http://193.205.230.7:5080/" +#define PRG32_STORE_SERVER_URL CONFIG_PRG32_STORE_URL #define PRG32_STORE_MDNS_SERVICE "_prg32store" #define PRG32_STORE_MDNS_PROTO "_tcp" #define PRG32_STORE_MDNS_TIMEOUT_MS 3000 @@ -209,8 +191,12 @@ * optional harness provides a distinct SELECT input on GPIO20. */ #ifndef PRG32_ENABLE_SEPARATE_SELECT_PIN +#ifdef CONFIG_PRG32_ENABLE_SEPARATE_SELECT_PIN +#define PRG32_ENABLE_SEPARATE_SELECT_PIN 1 +#else #define PRG32_ENABLE_SEPARATE_SELECT_PIN 0 #endif +#endif #if CONFIG_PRG32_DISPLAY_QEMU_RGB #define PRG32_PIN_BTN_SELECT PRG32_PIN_BTN_START diff --git a/main/prg32_env_example.h b/main/prg32_env_example.h deleted file mode 100644 index 86a723e..0000000 --- a/main/prg32_env_example.h +++ /dev/null @@ -1,14 +0,0 @@ -/* -Rename this file "prg32_env.h" and replace the dummy values with your own. -This file is used to store environment variables that are not required for the -system to build or run, but are used to automatically proivde WiFi credentials -for convenience. -*/ - -#ifndef PRG32_ENV_H -#define PRG32_ENV_H - -#define PRG32_WIFI_SSID "YOUR_WIFI_SSID" -#define PRG32_WIFI_PASSWORD "YOUR_WIFI_PASSWORD" - -#endif \ No newline at end of file diff --git a/platformio.ini b/platformio.ini index 5831db3..1101e1c 100644 --- a/platformio.ini +++ b/platformio.ini @@ -14,9 +14,9 @@ board = esp32-c6-devkitc-1 board_build.mcu = esp32c6 board_build.f_cpu = 160000000L board_upload.flash_size = 4MB -board_build.partitions = partitions_prg32.csv +board_build.partitions = profiles/partitions_prg32.csv board_build.cmake_extra_args = - -DSDKCONFIG_DEFAULTS=sdkconfig.defaults + -DSDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults monitor_speed = 115200 monitor_dtr = 0 monitor_rts = 0 diff --git a/prg32/cartridge/build_cartridge.py b/prg32/cartridge/build_cartridge.py index fdcbf2d..e3e6fc9 100644 --- a/prg32/cartridge/build_cartridge.py +++ b/prg32/cartridge/build_cartridge.py @@ -9,7 +9,7 @@ from prg32.utilities.logging import * from prg32.utilities.env_variables import * -from prg32.utilities.runtime_handler import parse_nm, run +from prg32.utilities.runtime_handler import parse_nm, resolve_cart_ram_size, run from prg32.abi.abi_generated import ABI_HASH, ABI_MAJOR, ABI_MINOR, FEATURE_BITS, IMPORT_NAMES def write_linker(path: Path, load_addr: int, init_symbol: str) -> None: path.write_text( @@ -149,27 +149,19 @@ def build_cartridge_core(source: str, audio_block : str | None = None, runtime_url: str | None = None, firmware_elf : str | None = None, - name: str | None = None) -> None: - + name: str | None = None, + cart_ram_size: int = FALLBACK_CART_RAM_SIZE) -> None: + if not portable or legacy_absolute_imports or runtime_url or firmware_elf: raise SystemExit( "firmware-specific cartridge builds are no longer supported; " "build a portable ABI-table cartridge instead" ) - - runtime = { - "cart_load_addr": 0x40800000, - "cart_ram_size": FALLBACK_CART_RAM_SIZE, - } - load_addr = int(runtime["cart_load_addr"]) - if "cart_ram_size" not in runtime: - print( - "warning: runtime did not report cart_ram_size; " - f"using fallback {FALLBACK_CART_RAM_SIZE} bytes", - file=sys.stderr, - ) - ram_size = int(runtime.get("cart_ram_size", FALLBACK_CART_RAM_SIZE)) + # Portable builds have no runtime to query, so the executable RAM limit + # comes from the selected firmware profile (--cart-ram-kib, default 64). + load_addr = FALLBACK_CART_LOAD_ADDR + ram_size = int(cart_ram_size) req_features = feature_mask(required_features) opt_features = feature_mask(optional_features) @@ -285,7 +277,11 @@ def build_cartridge_core(source: str, end = linked_symbols["__cart_end"] mem_size = end - start if mem_size <= 0 or mem_size > ram_size: - raise SystemExit(f"cartridge needs {mem_size} bytes, runtime has {ram_size}") + raise SystemExit( + f"cartridge needs {mem_size} bytes, runtime has {ram_size} " + f"({ram_size // 1024} KiB cartridge RAM profile; " + "see --cart-ram-kib)" + ) if len(code) > mem_size: raise SystemExit("internal error: binary is larger than cartridge memory") @@ -360,6 +356,9 @@ def build_cartridge_cli(args: argparse.Namespace) -> None: if build_dir: env['CPATH'] = f"{build_dir}/config:{build_dir}:{env.get('CPATH','')}" + cart_ram_size, ram_source = resolve_cart_ram_size(getattr(args, "cart_ram_kib", None)) + log_info(f"Cartridge RAM limit: {cart_ram_size} bytes ({ram_source})") + build_cartridge_core(source=args.source, out=args.out, entry_prefix=args.entry_prefix, @@ -374,5 +373,6 @@ def build_cartridge_cli(args: argparse.Namespace) -> None: audio_block=args.audio_block, runtime_url=args.runtime_url, firmware_elf=firmware_elf, - name=args.name + name=args.name, + cart_ram_size=cart_ram_size, ) diff --git a/prg32/esp32c6/prepare_firmware.py b/prg32/esp32c6/prepare_firmware.py index d5f169c..ce77432 100644 --- a/prg32/esp32c6/prepare_firmware.py +++ b/prg32/esp32c6/prepare_firmware.py @@ -18,7 +18,7 @@ def prepare_firmware_esp32c6(args: argparse.Namespace) -> None: "-D", f"SDKCONFIG={args.build_dir}/sdkconfig", "-D", - "SDKCONFIG_DEFAULTS=sdkconfig.defaults", + "SDKCONFIG_DEFAULTS=profiles/sdkconfig.defaults", "build", ], cwd=ROOT_DIR) if not flasher_args.exists(): diff --git a/prg32/prg32.py b/prg32/prg32.py index 1956e79..444c482 100755 --- a/prg32/prg32.py +++ b/prg32/prg32.py @@ -6,7 +6,8 @@ import sys from prg32.utilities.env_variables import * from prg32.utilities.environment_check import doctor -from prg32.utilities.runtime_handler import runtime +from prg32.utilities.runtime_handler import parse_cart_ram_kib, runtime +from prg32.utilities.tests_runner import run_tests from prg32.cartridge.build_cartridge import build_cartridge_cli @@ -26,8 +27,10 @@ from prg32.store.store_api import store_discover, store_list, store_download from prg32.store.publish import publish, pack_bundle, publish_bundle from prg32.store.utils import ARCHITECTURE_PROFILES +from prg32.store.config_cli import store_set_url, store_clear_url from prg32.abi.abi_gen import abi_gen_cmd, abi_check_cmd +from prg32.wifi.wifi_cli import wifi_set, wifi_clear def main(argv: list[str]) -> int: parser = argparse.ArgumentParser(description=__doc__) @@ -143,6 +146,10 @@ def main(argv: list[str]) -> int: p.add_argument("--flash", default=QEMU_IMAGE, help="Path to the QEMU flash image") p.add_argument("--partitions", default=str(DEFAULT_PARTITION_TABLE), help="Path to the partition table CSV") p.add_argument("--slot", default=DEFAULT_CART_SLOT, help="Partition slot to stage into") + p.add_argument("--cart-ram-kib", type=parse_cart_ram_kib, default=None, + help="Executable cartridge RAM of the QEMU firmware in KiB " + "(default: CONFIG_PRG32_CART_RAM_KIB from the sdkconfig next to --flash, " + f"else {DEFAULT_CART_RAM_KIB}; use {CLASSROOM_CART_RAM_KIB} for the classroom profile)") p.set_defaults(func=upload_qemu) @@ -177,6 +184,9 @@ def main(argv: list[str]) -> int: p.add_argument("--march", default="rv32imc_zicsr_zifencei", help="RISC-V architecture string") p.add_argument("--mabi", default="ilp32", help="RISC-V ABI string") p.add_argument("--tool-prefix", default="riscv32-esp-elf-", help="Prefix for the RISC-V GCC toolchain") + p.add_argument("--cart-ram-kib", type=parse_cart_ram_kib, default=None, + help=f"Executable cartridge RAM of the target firmware in KiB (default: {DEFAULT_CART_RAM_KIB}, " + f"the extended profile; use {CLASSROOM_CART_RAM_KIB} for the classroom profile)") arch_group = p.add_mutually_exclusive_group(required=False) arch_group.add_argument("--architecture", choices=["esp32c6", "qemu"], help="Target architecture (esp32c6 or qemu)") arch_group.add_argument("--firmware-elf", help="Deprecated: firmware-specific cartridge builds are unsupported") @@ -276,6 +286,27 @@ def main(argv: list[str]) -> int: p.add_argument("--token", help="Authentication token for the store") p.set_defaults(func=publish_bundle) + p = store_sub.add_parser("set-url", help="Set the local CartridgeStore URL for local builds", usage="%(prog)s URL") + p.add_argument("url", help="URL of the CartridgeStore") + p.set_defaults(func=store_set_url) + + p = store_sub.add_parser("clear-url", help="Clear the local CartridgeStore URL") + p.set_defaults(func=store_clear_url) + + # ========================================== + # 'wifi' Subcommand Menu + # ========================================== + wifi_p = sub.add_parser("wifi", help="Manage local WiFi configuration", description="Manage local WiFi credentials and mode (AP or INFRASTRUCTURE) for the next firmware build.") + wifi_sub = wifi_p.add_subparsers(dest="sub_cmd", required=True) + + p = wifi_sub.add_parser("set", help="Set local WiFi credentials and mode", description="Configure the local WiFi SSID, password, and operating mode (Access Point or Infrastructure).") + p.add_argument("--ssid", required=True, help="Network SSID (name of the network)") + p.add_argument("--password", default="", help="Network password (minimum 8 characters for WPA2, leave empty for open networks)") + p.add_argument("--mode", type=str.lower, choices=["ap", "sta", "infrastructure"], default="ap", help="WiFi boot mode: 'ap' (create an Access Point) or 'infrastructure' / 'sta' (connect to an existing network). Default: ap") + p.set_defaults(func=wifi_set) + + p = wifi_sub.add_parser("clear", help="Clear local WiFi credentials", description="Remove any local WiFi overrides so the firmware uses its default behavior.") + p.set_defaults(func=wifi_clear) p = sub.add_parser("doctor", help="check local toolchain prerequisites", usage="%(prog)s [options]") p.add_argument("--partitions", default=str(DEFAULT_PARTITION_TABLE), help="Path to the partition table CSV") @@ -294,6 +325,9 @@ def main(argv: list[str]) -> int: p.add_argument("--tool-prefix", default="riscv32-esp-elf-", help="Prefix for the toolchain") p.set_defaults(func=runtime) + p = sub.add_parser("test", help="run unit tests and smoke tests", usage="%(prog)s [options]") + p.set_defaults(func=run_tests) + args = parser.parse_args(argv) args.func(args) return 0 diff --git a/prg32/qemu/load_cart.py b/prg32/qemu/load_cart.py index a612981..5d629a4 100644 --- a/prg32/qemu/load_cart.py +++ b/prg32/qemu/load_cart.py @@ -5,7 +5,7 @@ from prg32.utilities.logging import * from prg32.utilities.environment_check import check_python, load_idf_env, validate_project_layout, ensure_qemu_flash, ensure_qemu_efuse, ensure_qemu_firmware from prg32.qemu.upload_qemu import inject_cartridge -from prg32.utilities.env_variables import GAMES_DIR, BUILD_DIR +from prg32.utilities.env_variables import GAMES_DIR, QEMU_BUILD_DIR def list_games(): @@ -40,7 +40,7 @@ def main(argv=None): ensure_qemu_firmware() source_file = Path(GAMES_DIR) / arg / "graphics" / "game.S" - cart_file = Path(BUILD_DIR) / f"{arg}.prg32" + cart_file = Path(QEMU_BUILD_DIR) / f"{arg}.prg32" subprocess.check_call([ sys.executable, "-m", "prg32", "cartridge", "build", str(source_file), "--portable", "--entry-prefix", diff --git a/prg32/qemu/run_qemu.py b/prg32/qemu/run_qemu.py index a7bf409..7014606 100644 --- a/prg32/qemu/run_qemu.py +++ b/prg32/qemu/run_qemu.py @@ -3,7 +3,7 @@ import subprocess import os import sys -from prg32.utilities.env_variables import BUILD_DIR, SDKCONFIG, SDKCONFIG_DEFAULTS, QEMU_IMAGE, QEMU_EFUSE +from prg32.utilities.env_variables import QEMU_BUILD_DIR, QEMU_SDKCONFIG, QEMU_SDKCONFIG_DEFAULTS, QEMU_IMAGE, QEMU_EFUSE from prg32.utilities.logging import * @@ -15,7 +15,7 @@ def ensure_idf_env(): def ensure_qemu_flash(): step(f"Ensuring QEMU flash image exists ({QEMU_IMAGE})") - p = Path(BUILD_DIR) + p = Path(QEMU_BUILD_DIR) p.mkdir(parents=True, exist_ok=True) flash = Path(QEMU_IMAGE) if not flash.exists(): @@ -39,17 +39,17 @@ def ensure_qemu_efuse(): def build_qemu_firmware(): step("Configuring QEMU target (esp32c3)") - subprocess.check_call(["idf.py", "-B", BUILD_DIR, "-D", f"SDKCONFIG={SDKCONFIG}", "-D", f"SDKCONFIG_DEFAULTS={SDKCONFIG_DEFAULTS}", "set-target", "esp32c3"]) + subprocess.check_call(["idf.py", "-B", QEMU_BUILD_DIR, "-D", f"SDKCONFIG={QEMU_SDKCONFIG}", "-D", f"SDKCONFIG_DEFAULTS={QEMU_SDKCONFIG_DEFAULTS}", "set-target", "esp32c3"]) step("Building QEMU firmware") - subprocess.check_call(["idf.py", "-B", BUILD_DIR, "-D", f"SDKCONFIG={SDKCONFIG}", "-D", f"SDKCONFIG_DEFAULTS={SDKCONFIG_DEFAULTS}", "build"]) - if not Path(f"{BUILD_DIR}/PRG32.elf").exists(): - die(f"Missing {BUILD_DIR}/PRG32.elf after build.") + subprocess.check_call(["idf.py", "-B", QEMU_BUILD_DIR, "-D", f"SDKCONFIG={QEMU_SDKCONFIG}", "-D", f"SDKCONFIG_DEFAULTS={QEMU_SDKCONFIG_DEFAULTS}", "build"]) + if not Path(f"{QEMU_BUILD_DIR}/PRG32.elf").exists(): + die(f"Missing {QEMU_BUILD_DIR}/PRG32.elf after build.") log_ok("Firmware build ready") def generate_flash_image(): step("Generating QEMU flash image") - cwd = Path(BUILD_DIR) + cwd = Path(QEMU_BUILD_DIR) subprocess.check_call([sys.executable, "-m", "esptool", "--chip=esp32c3", "merge_bin", "--output=qemu_flash.bin", "--fill-flash-size=4MB", "@flash_args"], cwd=str(cwd)) diff --git a/prg32/qemu/run_qemu_demo.py b/prg32/qemu/run_qemu_demo.py index 40ed5ee..aa41f47 100644 --- a/prg32/qemu/run_qemu_demo.py +++ b/prg32/qemu/run_qemu_demo.py @@ -7,7 +7,7 @@ def main(): QEMU_BUILD_DIR = "build-qemu" QEMU_SDKCONFIG = f"{QEMU_BUILD_DIR}/sdkconfig" - QEMU_DEFAULTS = "sdkconfig.defaults.qemu" + QEMU_DEFAULTS = "profiles/sdkconfig.defaults.qemu" DEMO_SOURCE = "examples/games/asteroids/graphics/game.S" DEMO_PREFIX = "asteroids_graphics" DEMO_CART = f"{QEMU_BUILD_DIR}/asteroids.prg32" diff --git a/prg32/qemu/smoke_test.py b/prg32/qemu/smoke_test.py index 691aada..22809bc 100644 --- a/prg32/qemu/smoke_test.py +++ b/prg32/qemu/smoke_test.py @@ -22,7 +22,7 @@ def main(): ROOT = Path(__file__).resolve().parents[2] QEMU_BUILD_DIR = "build-qemu" QEMU_SDKCONFIG = f"{QEMU_BUILD_DIR}/sdkconfig" - QEMU_DEFAULTS = "sdkconfig.defaults.qemu" + QEMU_DEFAULTS = "profiles/sdkconfig.defaults.qemu" require_cmd("python3", "Install Python 3 and retry.") require_cmd("idf.py", "Run: . $HOME/esp-idf/export.sh") # riscv toolchain optional diff --git a/prg32/qemu/start.py b/prg32/qemu/start.py index b2b856f..515e144 100644 --- a/prg32/qemu/start.py +++ b/prg32/qemu/start.py @@ -6,7 +6,7 @@ from prg32.utilities.environment_check import check_python, load_idf_env, validate_project_layout, ensure_qemu_flash, ensure_qemu_efuse, ensure_qemu_firmware from prg32.qemu.launch_qemu import launch_qemu from prg32.qemu.upload_qemu import inject_cartridge -from prg32.utilities.env_variables import GAMES_DIR, BUILD_DIR +from prg32.utilities.env_variables import GAMES_DIR, QEMU_BUILD_DIR def discover_games(): @@ -32,7 +32,7 @@ def print_game_menu(games): def run_game_flow(game_name: str): source_file = Path(GAMES_DIR) / game_name / "graphics" / "game.S" - cart_file = Path(BUILD_DIR) / f"{game_name}.prg32" + cart_file = Path(QEMU_BUILD_DIR) / f"{game_name}.prg32" ensure_qemu_efuse() subprocess.check_call([ sys.executable, "-m", "prg32", "cartridge", "build", diff --git a/prg32/qemu/upload_qemu.py b/prg32/qemu/upload_qemu.py index e4ae5ed..75f1b0f 100644 --- a/prg32/qemu/upload_qemu.py +++ b/prg32/qemu/upload_qemu.py @@ -6,11 +6,20 @@ from prg32.utilities.env_variables import * from prg32.utilities.logging import * from prg32.utilities.partition_handler import read_partition_slot -from prg32.utilities.runtime_handler import validate_cartridge_contract, ensure_cart_max_size +from prg32.utilities.runtime_handler import ( + ensure_cart_max_size, + resolve_cart_ram_size, + validate_cartridge_contract, +) -def upload_qemu(args: argparse.Namespace) -> None: - flash = Path(args.flash) - cart = Path(args.cartridge) +def inject_cartridge(cartridge: str, + flash: str = QEMU_IMAGE, + partitions: str = str(DEFAULT_PARTITION_TABLE), + slot: str = DEFAULT_CART_SLOT, + cart_ram_kib: int | None = None) -> None: + """Validate a .prg32 cartridge and write it into a QEMU flash slot.""" + flash = Path(flash) + cart = Path(cartridge) if not cart.exists(): die(f"Error: File does not exist: {cart}") @@ -18,13 +27,24 @@ def upload_qemu(args: argparse.Namespace) -> None: die(f"Error: Input file must be a .prg32 file (got: {cart})") data = cart.read_bytes() ensure_cart_max_size(data) - validate_cartridge_contract(data, context="QEMU staging") + # QEMU has no /api/runtime during staging. Use --cart-ram-kib, else the + # profile recorded in the sdkconfig next to the flash image, else 64 KiB. + cart_ram_size, ram_source = resolve_cart_ram_size( + cart_ram_kib, + flash.parent / "sdkconfig", + ) + log_info(f"Cartridge RAM limit: {cart_ram_size} bytes ({ram_source})") + validate_cartridge_contract( + data, + runtime={"cart_ram_size": cart_ram_size}, + context="QEMU staging", + ) - partitions = Path(args.partitions) - cart_offset, cart_size = read_partition_slot(partitions, args.slot) + partitions = Path(partitions) + cart_offset, cart_size = read_partition_slot(partitions, slot) if len(data) > cart_size: raise SystemExit( - f"cartridge is larger than {args.slot} ({cart_size} bytes from {partitions})" + f"cartridge is larger than {slot} ({cart_size} bytes from {partitions})" ) if not flash.exists(): raise SystemExit(f"QEMU flash image not found: {flash}") @@ -35,12 +55,22 @@ def upload_qemu(args: argparse.Namespace) -> None: if size < required: raise SystemExit( "QEMU flash image is smaller than " - f"{args.slot} requirements ({required} bytes needed)" + f"{slot} requirements ({required} bytes needed)" ) step(f"Injecting cartridge '{cart.name}' into QEMU flash...") f.seek(cart_offset) f.write(b"\xff" * cart_size) f.seek(cart_offset) f.write(data) - log_ok(f"'{args.cartridge}' susccessfuly staged into {flash} at {args.slot}") + log_ok(f"'{cartridge}' successfully staged into {flash} at {slot}") log_info(f"(offset=0x{cart_offset:06x}, size={cart_size})") + +def upload_qemu(args: argparse.Namespace) -> None: + """CLI entry for `python3 -m prg32 qemu upload`.""" + inject_cartridge( + args.cartridge, + flash=args.flash, + partitions=args.partitions, + slot=args.slot, + cart_ram_kib=getattr(args, "cart_ram_kib", None), + ) diff --git a/prg32/store/config_cli.py b/prg32/store/config_cli.py new file mode 100644 index 0000000..aeb4ec8 --- /dev/null +++ b/prg32/store/config_cli.py @@ -0,0 +1,22 @@ +import argparse +from prg32.utilities.logging import step, log_ok, log_info +from prg32.utilities.local_config import set_local_config, remove_local_config, LOCAL_CONFIG_FILE + +def store_set_url(args: argparse.Namespace): + url = args.url + + step("Setting local CartridgeStore URL...") + + updates = { + "CONFIG_PRG32_STORE_URL": f'"{url}"' + } + + set_local_config(updates) + + log_ok(f"Saved CartridgeStore URL to {LOCAL_CONFIG_FILE}") + log_info("This setting will be automatically applied on your next build.") + +def store_clear_url(args: argparse.Namespace): + step("Clearing local CartridgeStore URL...") + remove_local_config(["CONFIG_PRG32_STORE_URL"]) + log_ok("Cleared CartridgeStore URL from local configuration.") diff --git a/prg32/utilities/env_variables.py b/prg32/utilities/env_variables.py index e87e879..3010f14 100644 --- a/prg32/utilities/env_variables.py +++ b/prg32/utilities/env_variables.py @@ -13,7 +13,7 @@ ESP32C6_IMAGE = f"{ESP32C6_BUILD_DIR}/PRG32.bin" ESP32C6_ELF = f"{ESP32C6_BUILD_DIR}/PRG32.elf" ESP32C6_SDKCONFIG = f"{ESP32C6_BUILD_DIR}/sdkconfig" -ESP32C6_SDKCONFIG_DEFAULTS = "sdkconfig.defaults" +ESP32C6_SDKCONFIG_DEFAULTS = "profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.esp32c6" # QEMU environment variables QEMU_BUILD_DIR = "build-qemu" @@ -21,10 +21,10 @@ QEMU_EFUSE = f"{QEMU_BUILD_DIR}/qemu_efuse.bin" QEMU_ELF = f"{QEMU_BUILD_DIR}/PRG32.elf" QEMU_SDKCONFIG= f"{QEMU_BUILD_DIR}/sdkconfig" -QEMU_SDKCONFIG_DEFAULTS = "sdkconfig.defaults.qemu" +QEMU_SDKCONFIG_DEFAULTS = "profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu" # Metrics variables -METRICS_SDKCONFIG_DEFAULTS = "sdkconfig.defaults.metrics" +METRICS_SDKCONFIG_DEFAULTS = "profiles/sdkconfig.defaults.metrics" # Target Defaults TARGET_DEFAULTS = { @@ -50,9 +50,18 @@ PRG32_IMPORT_MODEL_LEGACY_ABSOLUTE = 0 PRG32_IMPORT_MODEL_ABI_TABLE = 1 AUDIO_BLOCK_MAGIC = b"AUD0" -DEFAULT_PARTITION_TABLE = ROOT_DIR / "partitions_prg32.csv" +DEFAULT_PARTITION_TABLE = ROOT_DIR / "profiles/partitions_prg32.csv" DEFAULT_CART_SLOT = "cart0" -FALLBACK_CART_RAM_SIZE = 32 * 1024 +# Executable cartridge RAM window, mirroring Kconfig PRG32_CART_RAM_KIB. +# The default firmware profile (sdkconfig.defaults and sdkconfig.defaults.qemu) +# is CONFIG_PRG32_CART_RAM_EXTENDED, a 64 KiB window. Host tools use this value +# when no runtime information is available; pass --cart-ram-kib 32 to target +# the classroom profile. +DEFAULT_CART_RAM_KIB = 64 +CLASSROOM_CART_RAM_KIB = 32 +MIN_CART_RAM_KIB = 16 +MAX_CART_RAM_KIB = 128 +FALLBACK_CART_RAM_SIZE = DEFAULT_CART_RAM_KIB * 1024 FALLBACK_CART_LOAD_ADDR = 0x40800000 FLASH_SIZE = 4 * 1024 * 1024 diff --git a/prg32/utilities/local_config.py b/prg32/utilities/local_config.py new file mode 100644 index 0000000..676be04 --- /dev/null +++ b/prg32/utilities/local_config.py @@ -0,0 +1,57 @@ +import os +from prg32.utilities.env_variables import ROOT_DIR + +LOCAL_CONFIG_FILE = ROOT_DIR / "profiles" / "sdkconfig.defaults.local" + +def set_local_config(updates: dict): + lines = [] + if LOCAL_CONFIG_FILE.exists(): + with open(LOCAL_CONFIG_FILE, "r") as f: + lines = f.readlines() + + new_lines = [] + for line in lines: + line = line.strip() + if not line or line.startswith("#"): + new_lines.append(line) + continue + + key = line.split("=")[0] + if key in updates: + val = updates.pop(key) + if val is not None: + new_lines.append(f"{key}={val}") + else: + new_lines.append(line) + + for key, val in updates.items(): + if val is not None: + new_lines.append(f"{key}={val}") + + with open(LOCAL_CONFIG_FILE, "w") as f: + for line in new_lines: + if line: + f.write(line + "\n") + +def remove_local_config(keys: list): + if not LOCAL_CONFIG_FILE.exists(): + return + + with open(LOCAL_CONFIG_FILE, "r") as f: + lines = f.readlines() + + new_lines = [] + for line in lines: + line = line.strip() + if not line or line.startswith("#"): + new_lines.append(line) + continue + + key = line.split("=")[0] + if key not in keys: + new_lines.append(line) + + with open(LOCAL_CONFIG_FILE, "w") as f: + for line in new_lines: + if line: + f.write(line + "\n") diff --git a/prg32/utilities/runtime_handler.py b/prg32/utilities/runtime_handler.py index 3c17368..d098394 100644 --- a/prg32/utilities/runtime_handler.py +++ b/prg32/utilities/runtime_handler.py @@ -88,6 +88,47 @@ def fetch_runtime(url: str) -> dict: except urllib.error.URLError as exc: raise SystemExit(f"failed to read runtime from {endpoint}: {exc}") from exc +def parse_cart_ram_kib(text: str) -> int: + """argparse type for --cart-ram-kib, using the Kconfig custom-profile range.""" + try: + kib = int(text, 0) + except ValueError as exc: + raise argparse.ArgumentTypeError(f"invalid KiB value: {text!r}") from exc + if kib < MIN_CART_RAM_KIB or kib > MAX_CART_RAM_KIB: + raise argparse.ArgumentTypeError( + f"cartridge RAM must be between {MIN_CART_RAM_KIB} and " + f"{MAX_CART_RAM_KIB} KiB (got {kib})" + ) + return kib + +def cart_ram_kib_from_sdkconfig(path: Path) -> int | None: + """Read CONFIG_PRG32_CART_RAM_KIB from a generated sdkconfig, if present.""" + if not path.is_file(): + return None + for line in path.read_text(encoding="utf-8", errors="replace").splitlines(): + line = line.strip() + if line.startswith("CONFIG_PRG32_CART_RAM_KIB="): + try: + return int(line.split("=", 1)[1], 0) + except ValueError: + return None + return None + +def resolve_cart_ram_size(cart_ram_kib: int | None, + sdkconfig: Path | None = None) -> tuple[int, str]: + """Choose the executable cartridge RAM size in bytes and describe its source. + + Priority: explicit --cart-ram-kib, then CONFIG_PRG32_CART_RAM_KIB from the + given sdkconfig, then the default firmware profile (64 KiB). + """ + if cart_ram_kib is not None: + return cart_ram_kib * 1024, "--cart-ram-kib" + if sdkconfig is not None: + sdk_kib = cart_ram_kib_from_sdkconfig(sdkconfig) + if sdk_kib is not None: + return sdk_kib * 1024, str(sdkconfig) + return FALLBACK_CART_RAM_SIZE, "default firmware profile" + def ensure_cart_max_size(data: bytes) -> None: if len(data) > 64 * 1024: raise SystemExit( diff --git a/prg32/utilities/tests_runner.py b/prg32/utilities/tests_runner.py new file mode 100644 index 0000000..d322afc --- /dev/null +++ b/prg32/utilities/tests_runner.py @@ -0,0 +1,37 @@ +import subprocess +import sys +from pathlib import Path +from prg32.utilities.logging import log_info, log_error, log_ok, step, die + +def run_tests(args) -> None: + step("Running Python unit tests") + + env = {} + import os + env.update(os.environ) + env["PYTHONPYCACHEPREFIX"] = "/tmp/prg32-pycache" + + try: + subprocess.check_call( + [sys.executable, "-m", "unittest", "discover", "-s", "tests"], + env=env + ) + log_ok("Unit tests passed") + except subprocess.CalledProcessError: + log_error("Unit tests failed") + sys.exit(1) + + step("Running QEMU smoke test") + smoke_test_path = Path("prg32/qemu/smoke_test.py") + if smoke_test_path.exists(): + try: + subprocess.check_call([sys.executable, str(smoke_test_path)]) + log_ok("Smoke test passed") + except subprocess.CalledProcessError: + log_error("Smoke test failed") + sys.exit(1) + else: + log_error(f"Smoke test script not found at {smoke_test_path}") + sys.exit(1) + + log_ok("All tests passed successfully.") diff --git a/prg32/wifi/__init__.py b/prg32/wifi/__init__.py new file mode 100644 index 0000000..8c46bf6 --- /dev/null +++ b/prg32/wifi/__init__.py @@ -0,0 +1 @@ +"""WiFi helper scripts package.""" diff --git a/prg32/wifi/wifi_cli.py b/prg32/wifi/wifi_cli.py new file mode 100644 index 0000000..c44c9bf --- /dev/null +++ b/prg32/wifi/wifi_cli.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 + +import argparse +import os +from prg32.utilities.logging import step, log_ok, log_info, die +from prg32.utilities.env_variables import ROOT_DIR +from prg32.utilities.local_config import set_local_config, remove_local_config, LOCAL_CONFIG_FILE + +def wifi_set(args: argparse.Namespace): + ssid = args.ssid + password = args.password + mode = args.mode + + if len(password) > 0 and len(password) < 8: + die("WPA2 requires a password of at least 8 characters.") + + step("Setting local WiFi configuration...") + + updates = {} + if mode == "ap": + updates["CONFIG_PRG32_WIFI_BOOT_MODE_AP"] = "y" + updates["CONFIG_PRG32_WIFI_BOOT_MODE_STA"] = "n" + elif mode in ["sta", "infrastructure"]: + updates["CONFIG_PRG32_WIFI_BOOT_MODE_AP"] = "n" + updates["CONFIG_PRG32_WIFI_BOOT_MODE_STA"] = "y" + + updates["CONFIG_PRG32_WIFI_SSID"] = f'"{ssid}"' + updates["CONFIG_PRG32_WIFI_PASSWORD"] = f'"{password}"' + + set_local_config(updates) + + log_ok(f"Saved WiFi configuration to {LOCAL_CONFIG_FILE}") + log_info("These settings will be automatically applied on your next build.") + +def wifi_clear(args: argparse.Namespace): + step("Clearing local WiFi configuration...") + remove_local_config([ + "CONFIG_PRG32_WIFI_BOOT_MODE_AP", + "CONFIG_PRG32_WIFI_BOOT_MODE_STA", + "CONFIG_PRG32_WIFI_SSID", + "CONFIG_PRG32_WIFI_PASSWORD" + ]) + log_ok("Cleared WiFi settings from local configuration.") diff --git a/partitions_prg32.csv b/profiles/partitions_prg32.csv similarity index 100% rename from partitions_prg32.csv rename to profiles/partitions_prg32.csv diff --git a/sdkconfig.defaults b/profiles/sdkconfig.defaults similarity index 64% rename from sdkconfig.defaults rename to profiles/sdkconfig.defaults index 79e4520..43c045c 100644 --- a/sdkconfig.defaults +++ b/profiles/sdkconfig.defaults @@ -1,5 +1,5 @@ CONFIG_PARTITION_TABLE_CUSTOM=y -CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions_prg32.csv" +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="profiles/partitions_prg32.csv" CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y CONFIG_ESPTOOLPY_FLASHSIZE="4MB" CONFIG_ESP_CONSOLE_UART_DEFAULT=y @@ -13,12 +13,16 @@ CONFIG_PRG32_AUDIO_ENABLED=y CONFIG_PRG32_AUDIO_SAMPLE_RATE=22050 CONFIG_PRG32_AUDIO_MODE_MONO=y CONFIG_PRG32_AUDIO_MAX_VOICES=8 -CONFIG_PRG32_AUDIO_I2S_BCLK_GPIO=4 -CONFIG_PRG32_AUDIO_I2S_LRCLK_GPIO=11 -CONFIG_PRG32_AUDIO_I2S_DATA_GPIO=23 -CONFIG_PRG32_AUDIO_I2S_SD_GPIO=-1 CONFIG_PRG32_SPLASH_ENABLED=y CONFIG_PRG32_SPLASH_DURATION_MS=1000 CONFIG_PRG32_SPLASH_SOUND_ENABLED=y CONFIG_ESP_SYSTEM_MEMPROT_FEATURE=n CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT=n +CONFIG_PRG32_WIFI_BOOT_MODE_AP=y +CONFIG_PRG32_WIFI_SSID="PRG32" +CONFIG_PRG32_WIFI_PASSWORD="prg32game" +CONFIG_PRG32_STORE_URL="https://store.prg32.uniparthenope.it/" +CONFIG_PRG32_CART_RAM_KIB=64 +CONFIG_PRG32_CART_MAX_KIB=64 +# CONFIG_PRG32_CART_RAM_CLASSROOM is not set +CONFIG_PRG32_CART_RAM_EXTENDED=y diff --git a/profiles/sdkconfig.defaults.esp32c6 b/profiles/sdkconfig.defaults.esp32c6 new file mode 100644 index 0000000..2093c96 --- /dev/null +++ b/profiles/sdkconfig.defaults.esp32c6 @@ -0,0 +1,9 @@ +CONFIG_ESP_CONSOLE_UART_DEFAULT=y +# CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG is not set +CONFIG_ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG=y +# CONFIG_ESP_CONSOLE_SECONDARY_NONE is not set +CONFIG_PRG32_DISPLAY_ILI9341=y +CONFIG_PRG32_AUDIO_I2S_BCLK_GPIO=4 +CONFIG_PRG32_AUDIO_I2S_LRCLK_GPIO=11 +CONFIG_PRG32_AUDIO_I2S_DATA_GPIO=23 +CONFIG_PRG32_AUDIO_I2S_SD_GPIO=-1 diff --git a/sdkconfig.defaults.esp32c6_128k b/profiles/sdkconfig.defaults.esp32c6_128k similarity index 62% rename from sdkconfig.defaults.esp32c6_128k rename to profiles/sdkconfig.defaults.esp32c6_128k index f5d23b8..14f443c 100644 --- a/sdkconfig.defaults.esp32c6_128k +++ b/profiles/sdkconfig.defaults.esp32c6_128k @@ -1,4 +1,4 @@ -# ESP32-C6 large-cartridge profile. Combine this after sdkconfig.defaults. +# ESP32-C6 large-cartridge profile. Combine this after profiles/sdkconfig.defaults. # Rebuild both the resident firmware and every cartridge after selecting it. CONFIG_PRG32_CART_RAM_LARGE_128=y CONFIG_PRG32_CART_MAX_KIB=128 diff --git a/sdkconfig.defaults.metrics b/profiles/sdkconfig.defaults.metrics similarity index 57% rename from sdkconfig.defaults.metrics rename to profiles/sdkconfig.defaults.metrics index f7252cf..030e85e 100644 --- a/sdkconfig.defaults.metrics +++ b/profiles/sdkconfig.defaults.metrics @@ -1,5 +1,5 @@ -# Optional profiling/lab profile. Use together with sdkconfig.defaults: -# idf.py -D SDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.defaults.metrics" build +# Optional profiling/lab profile. Use together with profiles/sdkconfig.defaults: +# idf.py -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.metrics" build CONFIG_PRG32_METRICS_ENABLE=y CONFIG_PRG32_METRICS_SERVER_URL="http://192.168.4.2:8080" CONFIG_PRG32_METRICS_BOARD_ID="prg32-board" diff --git a/sdkconfig.defaults.qemu b/profiles/sdkconfig.defaults.qemu similarity index 56% rename from sdkconfig.defaults.qemu rename to profiles/sdkconfig.defaults.qemu index e136e09..decf7ab 100644 --- a/sdkconfig.defaults.qemu +++ b/profiles/sdkconfig.defaults.qemu @@ -1,6 +1,4 @@ -# Use with: idf.py -B build-qemu -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu set-target esp32c3 -CONFIG_PARTITION_TABLE_CUSTOM=y -CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions_prg32.csv" +# Use with: idf.py -B build-qemu -D SDKCONFIG_DEFAULTS="profiles/sdkconfig.defaults;profiles/sdkconfig.defaults.qemu" set-target esp32c3 CONFIG_PRG32_DISPLAY_QEMU_RGB=y CONFIG_PRG32_QEMU_FAIL_ON_REAL_HW=y CONFIG_PRG32_QEMU_UART_INPUT=y @@ -13,6 +11,3 @@ CONFIG_PRG32_AUDIO_MODE_MONO=y CONFIG_PRG32_AUDIO_MAX_VOICES=8 CONFIG_PRG32_SPLASH_ENABLED=y CONFIG_PRG32_SPLASH_DURATION_MS=900 -CONFIG_PRG32_SPLASH_SOUND_ENABLED=y -CONFIG_ESP_SYSTEM_MEMPROT_FEATURE=n -CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT=n diff --git a/scripts/cartridge/build_cartridge.sh b/scripts/cartridge/build_cartridge.sh deleted file mode 100755 index d8a83fb..0000000 --- a/scripts/cartridge/build_cartridge.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env bash - -# Script that builds an assembly file into a .prg32 cartridge binary - -# If BUILDCARTRIDGE_SH_INCLUDED is already set, stop reading this file -if [ -n "${BUILDCARTRIDGE_SH_INCLUDED:-}" ]; then - return 0 2>/dev/null || exit 0 -fi -readonly BUILDCARTRIDGE_SH_INCLUDED=1 - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" -. "$ROOT_DIR/scripts/utilities/env_variables.sh" -. "$ROOT_DIR/scripts/utilities/logging.sh" - -build_cartridge() { - local source_path="$1" - local out_path="$2" - local entry_prefix="${3:-$(basename "$(dirname "$(dirname "$source_path")")")_graphics}" - - # Validation - [[ -f "$source_path" ]] || die "Missing game source: $source_path" - - # Extract game name dynamically from the output file (e.g., "pong.prg32" -> "pong") - local filename - filename=$(basename "$out_path") - local game_name="${filename%.*}" - - log_info "Building cartridge: $game_name" - - # 3. Execute the compilation - CPATH="$BUILD_DIR/config:$BUILD_DIR:${CPATH:+:$CPATH}" \ - python3 -m prg32 cartridge build \ - "$source_path" \ - --portable \ - --entry-prefix "$entry_prefix" \ - --name "$game_name" \ - --out "$out_path" - - [[ -s "$out_path" ]] || die "Cartridge build failed: $out_path was not created or is empty" - log_ok "Cartridge created: $out_path" -} - -print_usage() { - echo "Usage: $0 [entry_prefix]" -} - -main() { - set -e - - # Expecting exactly 2 arguments now - if [ "$#" -lt 2 ] || [ "$#" -gt 3 ]; then - print_usage - exit 1 - fi - - build_cartridge "$@" -} - -# Only run main if the script is being executed directly, not sourced -if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then - main "$@" -fi diff --git a/scripts/esp32c6/ci_smoke_test.sh b/scripts/esp32c6/ci_smoke_test.sh deleted file mode 100755 index 762f17b..0000000 --- a/scripts/esp32c6/ci_smoke_test.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" -cd "$ROOT_DIR" - -export PYTHONPYCACHEPREFIX="${PYTHONPYCACHEPREFIX:-/tmp/prg32-pycache}" - -echo "[CI] Checking whitespace" -git diff --check - -echo "[CI] Compiling Python tools" -python3 -m py_compile \ - python3 -m prg32 \ - tools/prg32_metrics_paper.py - -echo "[CI] Running unit tests" -python3 -m unittest discover -s tests - -echo "[CI] Running host-only cartridge doctor" -python3 -m prg32 doctor --host-only - -echo "[CI] Host smoke test passed" diff --git a/scripts/esp32c6/flash.sh b/scripts/esp32c6/flash.sh deleted file mode 100755 index 4eed708..0000000 --- a/scripts/esp32c6/flash.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash -set -e -idf.py set-target esp32c6 -idf.py build -idf.py flash monitor diff --git a/scripts/qemu/build_qemu.ps1 b/scripts/qemu/build_qemu.ps1 deleted file mode 100644 index 860b69a..0000000 --- a/scripts/qemu/build_qemu.ps1 +++ /dev/null @@ -1,5 +0,0 @@ -$ErrorActionPreference = "Stop" - -idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu set-target esp32c3 -Write-Host "QEMU input: focus this terminal; arrows or W/A/S/D = joystick 1, Enter/Space = SELECT, J/Z = A, K/X = B" -idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu qemu --graphics monitor diff --git a/scripts/qemu/build_qemu.sh b/scripts/qemu/build_qemu.sh deleted file mode 100755 index 2e8790f..0000000 --- a/scripts/qemu/build_qemu.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash - -# If BUILDQEMU_SH_INCLUDED is already set, stop reading this file -if [ -n "${BUILDQEMU_SH_INCLUDED:-}" ]; then - return 0 2>/dev/null || exit 0 -fi -readonly BUILDQEMU_SH_INCLUDED=1 - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" -. "$ROOT_DIR/scripts/utilities/env_variables.sh" -. "$ROOT_DIR/scripts/utilities/logging.sh" - -build_qemu() { - step "Configuring QEMU target (esp32c3)" - idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu set-target esp32c3 - - step "Building QEMU firmware and flash_image" - idf.py -B build-qemu -D SDKCONFIG=build-qemu/sdkconfig -D SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu qemu --graphics monitor - - [[ -f "$BUILD_DIR/PRG32.elf" ]] || die "Missing $BUILD_DIR/PRG32.elf after build." - log_info "Firmware build ready" - step "Running QEMU" -} - -main() { - set -e - build_qemu -} - -# Only run main if the script is being executed directly, not sourced -if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then - main "$@" -fi \ No newline at end of file diff --git a/scripts/qemu/launch_qemu.sh b/scripts/qemu/launch_qemu.sh deleted file mode 100755 index 42638db..0000000 --- a/scripts/qemu/launch_qemu.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env bash - -# If LAUNCHQEMU_SH_INCLUDED is already set, stop reading this file -if [ -n "${LAUNCHQEMU_SH_INCLUDED:-}" ]; then - return 0 2>/dev/null || exit 0 -fi -readonly LAUNCHQEMU_SH_INCLUDED=1 - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" -. "$ROOT_DIR/scripts/utilities/env_variables.sh" -. "$ROOT_DIR/scripts/utilities/logging.sh" - -launch_qemu() { - log_info "Launching QEMU" - log_info "Press Ctrl + ] to exit" - exec qemu-system-riscv32 \ - -M esp32c3 \ - -m 4M \ - -drive "file=$QEMU_IMAGE,if=mtd,format=raw" \ - -drive "file=$QEMU_EFUSE,if=none,format=raw,id=efuse" \ - -global "driver=nvram.esp32c3.efuse,property=drive,value=efuse" \ - -global "driver=timer.esp32c3.timg,property=wdt_disable,value=true" \ - -nic user,model=open_eth \ - -display sdl \ - -serial mon:stdio -} - -main() { - set -e - launch_qemu -} - -# Only run main if the script is being executed directly, not sourced -if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then - main "$@" -fi \ No newline at end of file diff --git a/scripts/qemu/load_cart.sh b/scripts/qemu/load_cart.sh deleted file mode 100755 index 40c2d12..0000000 --- a/scripts/qemu/load_cart.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" -. "$ROOT_DIR/scripts/utilities/env_variables.sh" -. "$ROOT_DIR/scripts/utilities/logging.sh" -. "$ROOT_DIR/scripts/utilities/environment_check.sh" -. "$ROOT_DIR/scripts/qemu/build_qemu.sh" -. "$ROOT_DIR/scripts/cartridge/build_cartridge.sh" - -require_cmd() { - local cmd="$1" - local hint="$2" - if ! command -v "$cmd" >/dev/null 2>&1; then - fail "$cmd not found. $hint" - fi -} - -list_games() { - step "Listing available games" - local found=0 - local d - for d in "$GAMES_DIR"/*; do - if [[ -d "$d" && -f "$d/graphics/game.S" ]]; then - basename "$d" - found=1 - fi - done - - if [[ "$found" -eq 0 ]]; then - fail "No games found under $GAMES_DIR" - fi -} - -usage() { - cat <<'USAGE' -Usage: - ./scripts/load_cart.sh - ./scripts/load_cart.sh list - -Examples: - ./scripts/load_cart.sh pong - ./scripts/load_cart.sh list -USAGE -} - -main() { - cd "$ROOT_DIR" - - if [[ "$#" -ne 1 ]]; then - usage - exit 1 - fi - - local arg="$1" - if [[ "$arg" == "list" ]]; then - list_games - exit 0 - fi - - check_python - load_idf_env - validate_project_layout - ensure_qemu_flash - ensure_qemu_efuse - ensure_qemu_firmware - - # 1. Explicitly construct the source and destination paths - local source_file="$GAMES_DIR/$arg/graphics/game.S" - local cart_file="$BUILD_DIR/${arg}.prg32" - - # 2. Invoke the updated build_cartridge with both arguments - build_cartridge "$source_file" "$cart_file" - - # 3. Inject the compiled cartridge binary - inject_cartridge "$cart_file" -} - -main "$@" \ No newline at end of file diff --git a/scripts/qemu/qemu_inject_cartridge.sh b/scripts/qemu/qemu_inject_cartridge.sh deleted file mode 100755 index 765f2ce..0000000 --- a/scripts/qemu/qemu_inject_cartridge.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env bash - -# If INJECTQEMU_SH_INCLUDED is already set, stop reading this file -if [ -n "${INJECTQEMU_SH_INCLUDED:-}" ]; then - return 0 2>/dev/null || exit 0 -fi -readonly INJECTQEMU_SH_INCLUDED=1 - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" -. "$ROOT_DIR/scripts/utilities/env_variables.sh" -. "$ROOT_DIR/scripts/utilities/logging.sh" - -inject_cartridge() { -local cart_path="$1" - - # Ensure the file exists and has the correct extension - if [[ ! -f "$cart_path" ]]; then - die "Error: File does not exist: $cart_path" - fi - - if [[ "$cart_path" != *.prg32 ]]; then - die "Error: Input file must be a .prg32 file (got: $cart_path)" - fi - - # Extract the file name for cleaner logging output - local file_name - file_name=$(basename "$cart_path") - - # Perform the injection - log_info "Injecting cartridge '$file_name' into QEMU flash..." - python3 -m prg32 qemu upload "$cart_path" --flash "$QEMU_IMAGE" - - log_ok "Cartridge '$file_name' successfully staged in QEMU flash" -} - -print_usage() { - echo "Usage: $0 " -} - -main() { -if [ "$#" -ne 1 ]; then - print_usage - exit 1 - fi - - inject_cartridge "$1" -} - -# Only run main if the script is being executed directly, not sourced -if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then - main "$@" -fi diff --git a/scripts/qemu/run_qemu.sh b/scripts/qemu/run_qemu.sh deleted file mode 100755 index 3ef77f4..0000000 --- a/scripts/qemu/run_qemu.sh +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" -BUILD_DIR="build-qemu" -SDKCONFIG="$BUILD_DIR/sdkconfig" -SDKCONFIG_DEFAULTS="sdkconfig.defaults.qemu" -FLASH_IMAGE="$BUILD_DIR/qemu_flash.bin" -QEMU_EFUSE="$BUILD_DIR/qemu_efuse.bin" -FLASH_SIZE=$((4 * 1024 * 1024)) - -step() { - echo "[STEP] $1" -} - -info() { - echo "[INFO] $1" -} - -fail() { - echo "[FAIL] $1" >&2 - exit 1 -} - -require_cmd() { - local cmd="$1" - local hint="$2" - if ! command -v "$cmd" >/dev/null 2>&1; then - fail "$cmd not found. $hint" - fi -} - -ensure_idf_env() { - step "Checking ESP-IDF environment" - if [[ -z "${IDF_PATH:-}" ]]; then - fail "IDF_PATH is not set. Source ESP-IDF first (for example: . \$HOME/esp-idf/export.sh)." - fi - - require_cmd idf.py "Source ESP-IDF first (for example: . \$HOME/esp-idf/export.sh)." -} - -ensure_qemu_flash() { - step "Ensuring QEMU flash image exists ($FLASH_IMAGE)" - - if [[ ! -f "$FLASH_IMAGE" ]]; then - info "Creating 4MB QEMU flash image" - mkdir -p "$BUILD_DIR" - dd if=/dev/zero of="$FLASH_IMAGE" bs=1048576 count=4 >/dev/null 2>&1 || \ - fail "Failed to create $FLASH_IMAGE" - fi - - local size - size="$(wc -c < "$FLASH_IMAGE" | tr -d '[:space:]')" - if [[ "$size" != "$FLASH_SIZE" ]]; then - fail "$FLASH_IMAGE has size $size bytes, expected $FLASH_SIZE bytes (4MB)." - fi - - info "QEMU flash image ready (4MB)" -} - -ensure_qemu_efuse() { - step "Ensuring QEMU efuse image exists ($QEMU_EFUSE)" - - if [[ ! -f "$QEMU_EFUSE" ]]; then - python3 - "$QEMU_EFUSE" <<'PY' || fail "Failed to create $QEMU_EFUSE" -from pathlib import Path -import importlib.util -import os -import sys - -out_path = Path(sys.argv[1]) -qemu_ext_path = Path(os.environ["IDF_PATH"]) / "tools" / "idf_py_actions" / "qemu_ext.py" -spec = importlib.util.spec_from_file_location("qemu_ext", qemu_ext_path) -module = importlib.util.module_from_spec(spec) -assert spec and spec.loader -spec.loader.exec_module(module) -out_path.write_bytes(module.QEMU_TARGETS["esp32c3"].default_efuse) -PY - fi - - info "QEMU efuse image ready" -} - -build_qemu_firmware() { - step "Configuring QEMU target (esp32c3)" - idf.py -B "$BUILD_DIR" -D "SDKCONFIG=$SDKCONFIG" -D "SDKCONFIG_DEFAULTS=$SDKCONFIG_DEFAULTS" set-target esp32c3 - - step "Building QEMU firmware" - idf.py -B "$BUILD_DIR" -D "SDKCONFIG=$SDKCONFIG" -D "SDKCONFIG_DEFAULTS=$SDKCONFIG_DEFAULTS" build - - [[ -f "$BUILD_DIR/PRG32.elf" ]] || fail "Missing $BUILD_DIR/PRG32.elf after build." - info "Firmware build ready" -} - -generate_flash_image() { - step "Generating QEMU flash image" - ( - cd "$BUILD_DIR" - python3 -m esptool --chip=esp32c3 merge_bin --output=qemu_flash.bin --fill-flash-size=4MB @flash_args - ) || fail "Failed to generate $FLASH_IMAGE" -} - -run_qemu() { - step "Starting QEMU" - echo - echo "Focus this terminal for input:" - echo " arrows or W/A/S/D = joystick 1, Enter/Space = SELECT" - echo " J/Z = A button, K/X = B button" - echo "Press Ctrl + ] to exit QEMU monitor." - echo - exec qemu-system-riscv32 \ - -M esp32c3 \ - -m 4M \ - -drive "file=$FLASH_IMAGE,if=mtd,format=raw" \ - -drive "file=$QEMU_EFUSE,if=none,format=raw,id=efuse" \ - -global "driver=nvram.esp32c3.efuse,property=drive,value=efuse" \ - -global "driver=timer.esp32c3.timg,property=wdt_disable,value=true" \ - -nic user,model=open_eth \ - -display sdl \ - -serial mon:stdio -} - -main() { - cd "$ROOT_DIR" - ensure_idf_env - build_qemu_firmware - ensure_qemu_flash - ensure_qemu_efuse - generate_flash_image - run_qemu -} - -main "$@" diff --git a/scripts/qemu/run_qemu_demo.sh b/scripts/qemu/run_qemu_demo.sh deleted file mode 100755 index 10e7c62..0000000 --- a/scripts/qemu/run_qemu_demo.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" -QEMU_BUILD_DIR="build-qemu" -QEMU_SDKCONFIG="$QEMU_BUILD_DIR/sdkconfig" -QEMU_DEFAULTS="sdkconfig.defaults.qemu" -DEMO_SOURCE="examples/games/asteroids/graphics/game.S" -DEMO_PREFIX="asteroids_graphics" -DEMO_CART="$QEMU_BUILD_DIR/asteroids.prg32" -DEMO_FLASH="$QEMU_BUILD_DIR/qemu_flash.bin" - -fail() { - echo "[FAIL] $1" >&2 - exit 1 -} - -info() { - echo "[INFO] $1" -} - -require_cmd() { - if ! command -v "$1" >/dev/null 2>&1; then - fail "$1 not found. $2" - fi -} - -require_cmd idf.py "Run: . \$HOME/esp-idf/export.sh" -require_cmd python3 "Install Python 3 and retry." -require_cmd riscv32-esp-elf-gcc "Run: . \$HOME/esp-idf/export.sh" - -if [[ -z "${IDF_PATH:-}" ]]; then - fail "ESP-IDF is not sourced (IDF_PATH is empty). Run: . \$HOME/esp-idf/export.sh" -fi - -cd "$ROOT_DIR" - -info "Configuring QEMU target (esp32c3)" -idf.py -B "$QEMU_BUILD_DIR" -D "SDKCONFIG=$QEMU_SDKCONFIG" -D "SDKCONFIG_DEFAULTS=$QEMU_DEFAULTS" set-target esp32c3 - -info "Building QEMU firmware" -idf.py -B "$QEMU_BUILD_DIR" -D "SDKCONFIG=$QEMU_SDKCONFIG" -D "SDKCONFIG_DEFAULTS=$QEMU_DEFAULTS" build - -if [[ ! -f "$QEMU_BUILD_DIR/PRG32.elf" ]]; then - fail "Missing $QEMU_BUILD_DIR/PRG32.elf after build" -fi - -info "Building demo cartridge" -python3 -m prg32 cartridge build \ - "$DEMO_SOURCE" \ - --portable \ - --entry-prefix "$DEMO_PREFIX" \ - --name asteroids \ - --out "$DEMO_CART" - -if [[ ! -f "$DEMO_FLASH" ]]; then - fail "Missing $DEMO_FLASH. Run QEMU once first with tools/qemu.sh." -fi - -info "Staging demo cartridge into QEMU flash" -python3 -m prg32 qemu upload "$DEMO_CART" --flash "$DEMO_FLASH" - -info "Starting QEMU screen" -info "Input: arrows or W/A/S/D = joystick 1, Enter/Space = SELECT, J/Z = A, K/X = B" -exec idf.py -B "$QEMU_BUILD_DIR" -D "SDKCONFIG=$QEMU_SDKCONFIG" -D "SDKCONFIG_DEFAULTS=$QEMU_DEFAULTS" qemu --graphics monitor diff --git a/scripts/qemu/smoke_test.sh b/scripts/qemu/smoke_test.sh deleted file mode 100755 index b861400..0000000 --- a/scripts/qemu/smoke_test.sh +++ /dev/null @@ -1,118 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" -QEMU_BUILD_DIR="build-qemu" -QEMU_SDKCONFIG="$QEMU_BUILD_DIR/sdkconfig" -QEMU_DEFAULTS="sdkconfig.defaults.qemu" -cd "$ROOT_DIR" - -ok() { - echo "[OK] $1" -} - -fail() { - echo "[FAIL] $1" - exit 1 -} - -warn() { - echo "[WARN] $1" -} - -if ! command -v python3 >/dev/null 2>&1; then - fail "python3 not found (install Python 3 and retry)" -fi - -if ! command -v idf.py >/dev/null 2>&1; then - fail "idf.py not found (run: source ESP-IDF export.sh)" -fi - -if ! command -v riscv32-esp-elf-gcc >/dev/null 2>&1; then - warn "riscv32-esp-elf-gcc not found (run: source ESP-IDF export.sh)" -fi - -run_step() { - local name="$1" - shift - if "$@"; then - ok "$name" - else - fail "$name" - fi -} - -run_step "doctor" python3 -m prg32 doctor - -run_step "set-target-esp32c3" \ - idf.py -B "$QEMU_BUILD_DIR" -D "SDKCONFIG=$QEMU_SDKCONFIG" -D "SDKCONFIG_DEFAULTS=$QEMU_DEFAULTS" set-target esp32c3 - -run_step "build-firmware" \ - idf.py -B "$QEMU_BUILD_DIR" -D "SDKCONFIG=$QEMU_SDKCONFIG" -D "SDKCONFIG_DEFAULTS=$QEMU_DEFAULTS" build - -if [[ ! -f "$QEMU_BUILD_DIR/PRG32.elf" ]]; then - fail "build-firmware (missing $QEMU_BUILD_DIR/PRG32.elf)" -fi -ok "firmware-artifact" - -run_step "build-demo-cartridge" \ - python3 -m prg32 cartridge build \ - examples/games/pong/graphics/game.S \ - --portable \ - --entry-prefix pong_graphics \ - --name pong \ - --out "$QEMU_BUILD_DIR/pong.prg32" - -if [[ ! -f "$QEMU_BUILD_DIR/pong.prg32" ]]; then - fail "build-demo-cartridge (missing $QEMU_BUILD_DIR/pong.prg32)" -fi -ok "cartridge-artifact" - -if python3 - <<'PY' -import subprocess -import time -import sys - -cmd = [ - "idf.py", - "-B", "build-qemu", - "-D", "SDKCONFIG=build-qemu/sdkconfig", - "-D", "SDKCONFIG_DEFAULTS=sdkconfig.defaults.qemu", - "qemu", - "--graphics", - "monitor", -] - -p = subprocess.Popen(cmd) -try: - time.sleep(8) - if p.poll() is not None: - raise SystemExit(f"qemu exited early with code {p.returncode}") -finally: - if p.poll() is None: - p.terminate() - try: - p.wait(timeout=5) - except subprocess.TimeoutExpired: - p.kill() - p.wait(timeout=5) -PY -then - ok "qemu-launch-check" -else - warn "qemu-launch-check failed (non-blocking)" -fi - -if [[ ! -f "$QEMU_BUILD_DIR/qemu_flash.bin" ]]; then - fail "qemu-flash-image missing (run QEMU once with build-qemu/sdkconfig)" -fi -ok "qemu-flash-image" - -run_step "stage-cartridge-qemu" \ - python3 -m prg32 qemu upload \ - "$QEMU_BUILD_DIR/pong.prg32" \ - --flash "$QEMU_BUILD_DIR/qemu_flash.bin" - -ok "smoke-test-complete" -echo "=== SMOKE TEST PASSED ===" -echo "Firmware build, cartridge build, and QEMU staging are functional." diff --git a/scripts/qemu/start.sh b/scripts/qemu/start.sh deleted file mode 100755 index aafb94f..0000000 --- a/scripts/qemu/start.sh +++ /dev/null @@ -1,118 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# Get the PRG32 Directory -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" -. "$ROOT_DIR/scripts/utilities/env_variables.sh" -. "$ROOT_DIR/scripts/utilities/environment_check.sh" -. "$ROOT_DIR/scripts/utilities/logging.sh" -. "$ROOT_DIR/scripts/qemu/launch_qemu.sh" -. "$ROOT_DIR/scripts/qemu/qemu_inject_cartridge.sh" -. "$ROOT_DIR/scripts/cartridge/build_cartridge.sh" - - -discover_games() { - GAMES=() - - local d - for d in "$GAMES_DIR"/*; do - if [[ -d "$d" ]]; then - GAMES+=("$(basename "$d")") - fi - done - - if [[ "${#GAMES[@]}" -eq 0 ]]; then - die "No games found in $GAMES_DIR" - fi -} - -print_game_menu() { - local i - - echo - echo "Available games:" - for i in "${!GAMES[@]}"; do - printf "[%d] %s\n" "$((i + 1))" "${GAMES[$i]}" - done - echo - echo "Type a number to run a game" - echo "Type r to rerun last game" - echo "Type q to quit" -} - -run_game_flow() { - local game_name="$1" -# 1. Construct the explicit paths for source and destination - local source_file="$GAMES_DIR/$game_name/graphics/game.S" - local cart_file="$BUILD_DIR/${game_name}.prg32" - - ensure_qemu_efuse - - # 2. Invoke the fixed build_cartridge with both arguments - build_cartridge "$source_file" "$cart_file" - - # 3. Inject the compiled cartridge binary - inject_cartridge "$cart_file" - - launch_qemu -} - -main_loop() { - local last_game="" - local input="" - local idx="" - - while true; do - discover_games - print_game_menu - - if [[ -n "$last_game" ]]; then - printf "Selection (last: %s): " "$last_game" - else - printf "Selection: " - fi - - IFS= read -r input - - case "$input" in - q|Q) - log_info "Goodbye" - exit 0 - ;; - r|R) - if [[ -z "$last_game" ]]; then - log_error "No previously run game. Select a game number first." - continue - fi - run_game_flow "$last_game" - ;; - ''|*[!0-9]*) - log_error "Invalid input: $input" - ;; - *) - idx="$((input - 1))" - if (( idx < 0 || idx >= ${#GAMES[@]} )); then - log_error "Invalid selection number: $input" - continue - fi - last_game="${GAMES[$idx]}" - run_game_flow "$last_game" - ;; - esac - done -} - -main() { - cd "$ROOT_DIR" - log_info "PRG32 QEMU launcher starting" - - check_python - load_idf_env - validate_project_layout - ensure_qemu_flash - ensure_qemu_efuse - ensure_qemu_firmware - main_loop -} - -main "$@" diff --git a/scripts/utilities/env_variables.sh b/scripts/utilities/env_variables.sh deleted file mode 100644 index 6a542ae..0000000 --- a/scripts/utilities/env_variables.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash - -# Script that sets environment variables needed by other scripts. - -# If ENVVARS_SH_INCLUDED is already set, stop reading this file -if [ -n "${ENVVARS_SH_INCLUDED:-}" ]; then - return 0 2>/dev/null || exit 0 -fi -readonly ENVVARS_SH_INCLUDED=1 - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" -export BUILD_DIR="build-qemu" -export GAMES_DIR="examples/games" -export GAME_TOOL="python3 -m prg32" -export QEMU_IMAGE="$BUILD_DIR/qemu_flash.bin" -export QEMU_EFUSE="$BUILD_DIR/qemu_efuse.bin" -export QEMU_ELF="$BUILD_DIR/PRG32.elf" -export SDKCONFIG="$BUILD_DIR/sdkconfig" -export SDKCONFIG_DEFAULTS="sdkconfig.defaults.qemu" -export FLASH_SIZE=$((4 * 1024 * 1024)) \ No newline at end of file diff --git a/scripts/utilities/environment_check.sh b/scripts/utilities/environment_check.sh deleted file mode 100644 index 2efbb10..0000000 --- a/scripts/utilities/environment_check.sh +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/env bash - -# Various utilities to check or create files when needed for other scripts. - -# If ENVCHECK_SH_INCLUDED is already set, stop reading this file -if [ -n "${ENVCHECK_SH_INCLUDED:-}" ]; then - return 0 2>/dev/null || exit 0 -fi -readonly ENVCHECK_SH_INCLUDED=1 - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" -. "$ROOT_DIR/scripts/utilities/env_variables.sh" - -find_idf_root() { - step "Checking ESP-IDF path" - local candidate - - if [[ -n "${IDF_PATH:-}" && -f "$IDF_PATH/export.sh" ]]; then - printf '%s\n' "$IDF_PATH" - return 0 - fi - - for candidate in "$HOME/esp-idf" "$HOME/Desktop/esp-idf"; do - if [[ -f "$candidate/export.sh" ]]; then - printf '%s\n' "$candidate" - return 0 - fi - done - - # Error - return 1 -} - -check_qemu_runtime_deps() { - local qemu_output - if ! qemu_output="$(qemu-system-riscv32 -machine help 2>&1)"; then - if [[ "$qemu_output" == *"libslirp"* ]]; then - log_error "qemu-system-riscv32 failed due to missing libslirp." - cat <<'EOF_FIX' -Run: -brew install libslirp -EOF_FIX - exit 1 - fi - die "qemu-system-riscv32 failed to start: $qemu_output" - fi - log_ok "qemu-system-riscv32 runtime check passed" -} - -validate_project_layout() { - [[ -f "$GAME_TOOL" ]] || die "Missing $GAME_TOOL. Run this script from the PRG32 repository root." - [[ -d "$GAMES_DIR" ]] || die "Missing $GAMES_DIR. Run this script from the PRG32 repository root." - - if [[ ! -d "$BUILD_DIR" ]]; then - log_info "$BUILD_DIR is missing; creating it" - mkdir -p "$BUILD_DIR" - fi - - log_ok "Project layout looks valid" -} - -load_idf_env() { - # Helper function to prevent repeating the validation checks - _has_idf_tools() { - command -v idf.py >/dev/null 2>&1 && command -v riscv32-esp-elf-gcc >/dev/null 2>&1 - } - - if _has_idf_tools; then - log_ok "ESP-IDF already loaded" - return 0 - fi - - local idf_root - if ! idf_root="$(find_idf_root)"; then - fail "ESP-IDF not loaded and no local checkout was found." - cat <<'EOF_FIX' -Run one of these commands after installing ESP-IDF: -. ~/esp-idf/export.sh -. ~/Desktop/esp-idf/export.sh -EOF_FIX - exit 1 - fi - - log_info "Loading ESP-IDF from $idf_root" - # shellcheck disable=SC1090 - source "$idf_root/export.sh" - - # Re-use the helper function after sourcing - if ! _has_idf_tools; then - die "ESP-IDF export loaded from $idf_root, but essential tools (idf.py or riscv32-esp-elf-gcc) are still unavailable." - fi - - log_ok "ESP-IDF environment loaded" - - check_qemu_runtime_deps -} - -check_python() { - if ! command -v python3 >/dev/null 2>&1; then - die "python3 not found. Install Python 3 first (for example: brew install python)." - fi - log_ok "python3 detected" -} - -# If the flash image doesn't exist, an empty flash image is generated -ensure_qemu_flash() { - step "Ensuring QEMU flash image exists ($QEMU_IMAGE)" - - if [[ ! -f "$QEMU_IMAGE" ]]; then - log_info "Creating 4MB QEMU flash image" - mkdir -p "$BUILD_DIR" - dd if=/dev/zero of="$QEMU_IMAGE" bs=1048576 count=4 >/dev/null 2>&1 || \ - fail "Failed to create $QEMU_IMAGE" - fi - - local size - size="$(wc -c < "$QEMU_IMAGE" | tr -d '[:space:]')" - if [[ "$size" != "$FLASH_SIZE" ]]; then - fail "$QEMU_IMAGE has size $size bytes, expected $FLASH_SIZE bytes (4MB)." - fi - - log_info "QEMU flash image ready (4MB)" -} - -ensure_qemu_efuse() { - step "Ensuring QEMU efuse image exists ($QEMU_EFUSE)" - - if [[ ! -f "$QEMU_EFUSE" ]]; then - python3 - "$QEMU_EFUSE" <<'PY' || fail "Failed to create $QEMU_EFUSE" -from pathlib import Path -import importlib.util -import os -import sys - -out_path = Path(sys.argv[1]) -qemu_ext_path = Path(os.environ["IDF_PATH"]) / "tools" / "idf_py_actions" / "qemu_ext.py" -spec = importlib.util.spec_from_file_location("qemu_ext", qemu_ext_path) -module = importlib.util.module_from_spec(spec) -assert spec and spec.loader -spec.loader.exec_module(module) -out_path.write_bytes(module.QEMU_TARGETS["esp32c3"].default_efuse) -PY - fi - - log_info "QEMU efuse image ready" -} - -ensure_qemu_firmware() { - if [[ -f "$QEMU_ELF" ]]; then - log_ok "QEMU firmware already built ($QEMU_ELF)" - return - fi - - log_info "QEMU firmware missing; running initial build" - idf.py -B "$BUILD_DIR" -D "SDKCONFIG=$SDKCONFIG" -D "SDKCONFIG_DEFAULTS=$SDKCONFIG_DEFAULTS" set-target esp32c3 - idf.py -B "$BUILD_DIR" -D "SDKCONFIG=$SDKCONFIG" -D "SDKCONFIG_DEFAULTS=$SDKCONFIG_DEFAULTS" build - - [[ -f "$QEMU_ELF" ]] || die "Build finished but $QEMU_ELF is still missing." - log_ok "QEMU firmware build complete" -} \ No newline at end of file diff --git a/scripts/utilities/logging.sh b/scripts/utilities/logging.sh deleted file mode 100644 index 482be40..0000000 --- a/scripts/utilities/logging.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bash - -# Logging utilities for other scripts. - -# If LOGGING_SH_INCLUDED is already set, stop reading this file -if [ -n "${LOGGING_SH_INCLUDED:-}" ]; then - return 0 2>/dev/null || exit 0 -fi -readonly LOGGING_SH_INCLUDED=1 - -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" -COLOR_RESET="" -COLOR_RED="" -COLOR_GREEN="" -COLOR_YELLOW="" - -# Only outputs color if not writing to file and colors are supported by the terminal -if [[ -t 1 ]] && command -v tput >/dev/null 2>&1; then - if [[ "$(tput colors 2>/dev/null || echo 0)" -ge 8 ]]; then - COLOR_RESET="$(tput sgr0)" - COLOR_RED="$(tput setaf 1)" - COLOR_GREEN="$(tput setaf 2)" - COLOR_YELLOW="$(tput setaf 3)" - fi -fi - -log_info() { - echo "${COLOR_YELLOW}[INFO]${COLOR_RESET} $1" -} - -log_ok() { - echo "${COLOR_GREEN}[OK]${COLOR_RESET} $1" -} - -log_error() { - echo "${COLOR_RED}[ERROR]${COLOR_RESET} $1" >&2 -} - -step() { - echo "${COLOR_YELLOW}[INFO]${COLOR_RESET} $1" -} - -fail() { - echo "[FAIL] $1" >&2 -} - -die() { - log_error "$1" - exit 1 -} \ No newline at end of file diff --git a/sdkconfig b/sdkconfig deleted file mode 100644 index 57982a2..0000000 --- a/sdkconfig +++ /dev/null @@ -1,2302 +0,0 @@ -# -# Automatically generated file. DO NOT EDIT. -# Espressif IoT Development Framework (ESP-IDF) 5.4.1 Project Configuration -# -CONFIG_SOC_ADC_SUPPORTED=y -CONFIG_SOC_DEDICATED_GPIO_SUPPORTED=y -CONFIG_SOC_UART_SUPPORTED=y -CONFIG_SOC_GDMA_SUPPORTED=y -CONFIG_SOC_AHB_GDMA_SUPPORTED=y -CONFIG_SOC_GPTIMER_SUPPORTED=y -CONFIG_SOC_PCNT_SUPPORTED=y -CONFIG_SOC_MCPWM_SUPPORTED=y -CONFIG_SOC_TWAI_SUPPORTED=y -CONFIG_SOC_ETM_SUPPORTED=y -CONFIG_SOC_PARLIO_SUPPORTED=y -CONFIG_SOC_BT_SUPPORTED=y -CONFIG_SOC_IEEE802154_SUPPORTED=y -CONFIG_SOC_ASYNC_MEMCPY_SUPPORTED=y -CONFIG_SOC_USB_SERIAL_JTAG_SUPPORTED=y -CONFIG_SOC_TEMP_SENSOR_SUPPORTED=y -CONFIG_SOC_PHY_SUPPORTED=y -CONFIG_SOC_WIFI_SUPPORTED=y -CONFIG_SOC_SUPPORTS_SECURE_DL_MODE=y -CONFIG_SOC_ULP_SUPPORTED=y -CONFIG_SOC_LP_CORE_SUPPORTED=y -CONFIG_SOC_EFUSE_KEY_PURPOSE_FIELD=y -CONFIG_SOC_EFUSE_SUPPORTED=y -CONFIG_SOC_RTC_FAST_MEM_SUPPORTED=y -CONFIG_SOC_RTC_MEM_SUPPORTED=y -CONFIG_SOC_I2S_SUPPORTED=y -CONFIG_SOC_RMT_SUPPORTED=y -CONFIG_SOC_SDM_SUPPORTED=y -CONFIG_SOC_GPSPI_SUPPORTED=y -CONFIG_SOC_LEDC_SUPPORTED=y -CONFIG_SOC_I2C_SUPPORTED=y -CONFIG_SOC_SYSTIMER_SUPPORTED=y -CONFIG_SOC_SUPPORT_COEXISTENCE=y -CONFIG_SOC_AES_SUPPORTED=y -CONFIG_SOC_MPI_SUPPORTED=y -CONFIG_SOC_SHA_SUPPORTED=y -CONFIG_SOC_HMAC_SUPPORTED=y -CONFIG_SOC_DIG_SIGN_SUPPORTED=y -CONFIG_SOC_ECC_SUPPORTED=y -CONFIG_SOC_FLASH_ENC_SUPPORTED=y -CONFIG_SOC_SECURE_BOOT_SUPPORTED=y -CONFIG_SOC_SDIO_SLAVE_SUPPORTED=y -CONFIG_SOC_BOD_SUPPORTED=y -CONFIG_SOC_APM_SUPPORTED=y -CONFIG_SOC_PMU_SUPPORTED=y -CONFIG_SOC_PAU_SUPPORTED=y -CONFIG_SOC_LP_TIMER_SUPPORTED=y -CONFIG_SOC_LP_AON_SUPPORTED=y -CONFIG_SOC_LP_PERIPHERALS_SUPPORTED=y -CONFIG_SOC_LP_I2C_SUPPORTED=y -CONFIG_SOC_ULP_LP_UART_SUPPORTED=y -CONFIG_SOC_CLK_TREE_SUPPORTED=y -CONFIG_SOC_ASSIST_DEBUG_SUPPORTED=y -CONFIG_SOC_WDT_SUPPORTED=y -CONFIG_SOC_SPI_FLASH_SUPPORTED=y -CONFIG_SOC_RNG_SUPPORTED=y -CONFIG_SOC_LIGHT_SLEEP_SUPPORTED=y -CONFIG_SOC_DEEP_SLEEP_SUPPORTED=y -CONFIG_SOC_MODEM_CLOCK_SUPPORTED=y -CONFIG_SOC_PM_SUPPORTED=y -CONFIG_SOC_XTAL_SUPPORT_40M=y -CONFIG_SOC_AES_SUPPORT_DMA=y -CONFIG_SOC_AES_GDMA=y -CONFIG_SOC_AES_SUPPORT_AES_128=y -CONFIG_SOC_AES_SUPPORT_AES_256=y -CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y -CONFIG_SOC_ADC_DIG_IIR_FILTER_SUPPORTED=y -CONFIG_SOC_ADC_MONITOR_SUPPORTED=y -CONFIG_SOC_ADC_DMA_SUPPORTED=y -CONFIG_SOC_ADC_PERIPH_NUM=1 -CONFIG_SOC_ADC_MAX_CHANNEL_NUM=7 -CONFIG_SOC_ADC_ATTEN_NUM=4 -CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=1 -CONFIG_SOC_ADC_PATT_LEN_MAX=8 -CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12 -CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=12 -CONFIG_SOC_ADC_DIGI_IIR_FILTER_NUM=2 -CONFIG_SOC_ADC_DIGI_MONITOR_NUM=2 -CONFIG_SOC_ADC_DIGI_RESULT_BYTES=4 -CONFIG_SOC_ADC_DIGI_DATA_BYTES_PER_CONV=4 -CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=83333 -CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=611 -CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=12 -CONFIG_SOC_ADC_RTC_MAX_BITWIDTH=12 -CONFIG_SOC_ADC_CALIBRATION_V1_SUPPORTED=y -CONFIG_SOC_ADC_SELF_HW_CALI_SUPPORTED=y -CONFIG_SOC_ADC_CALIB_CHAN_COMPENS_SUPPORTED=y -CONFIG_SOC_ADC_TEMPERATURE_SHARE_INTR=y -CONFIG_SOC_ADC_SHARED_POWER=y -CONFIG_SOC_BROWNOUT_RESET_SUPPORTED=y -CONFIG_SOC_SHARED_IDCACHE_SUPPORTED=y -CONFIG_SOC_CACHE_FREEZE_SUPPORTED=y -CONFIG_SOC_CPU_CORES_NUM=1 -CONFIG_SOC_CPU_INTR_NUM=32 -CONFIG_SOC_CPU_HAS_FLEXIBLE_INTC=y -CONFIG_SOC_INT_PLIC_SUPPORTED=y -CONFIG_SOC_CPU_HAS_CSR_PC=y -CONFIG_SOC_CPU_BREAKPOINTS_NUM=4 -CONFIG_SOC_CPU_WATCHPOINTS_NUM=4 -CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=0x80000000 -CONFIG_SOC_CPU_HAS_PMA=y -CONFIG_SOC_CPU_IDRAM_SPLIT_USING_PMP=y -CONFIG_SOC_CPU_PMP_REGION_GRANULARITY=4 -CONFIG_SOC_DS_SIGNATURE_MAX_BIT_LEN=3072 -CONFIG_SOC_DS_KEY_PARAM_MD_IV_LENGTH=16 -CONFIG_SOC_DS_KEY_CHECK_MAX_WAIT_US=1100 -CONFIG_SOC_AHB_GDMA_VERSION=1 -CONFIG_SOC_GDMA_NUM_GROUPS_MAX=1 -CONFIG_SOC_GDMA_PAIRS_PER_GROUP_MAX=3 -CONFIG_SOC_GDMA_SUPPORT_ETM=y -CONFIG_SOC_GDMA_SUPPORT_SLEEP_RETENTION=y -CONFIG_SOC_ETM_GROUPS=1 -CONFIG_SOC_ETM_CHANNELS_PER_GROUP=50 -CONFIG_SOC_ETM_SUPPORT_SLEEP_RETENTION=y -CONFIG_SOC_GPIO_PORT=1 -CONFIG_SOC_GPIO_PIN_COUNT=31 -CONFIG_SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER=y -CONFIG_SOC_GPIO_FLEX_GLITCH_FILTER_NUM=8 -CONFIG_SOC_GPIO_SUPPORT_ETM=y -CONFIG_SOC_GPIO_SUPPORT_RTC_INDEPENDENT=y -CONFIG_SOC_GPIO_SUPPORT_DEEPSLEEP_WAKEUP=y -CONFIG_SOC_LP_IO_CLOCK_IS_INDEPENDENT=y -CONFIG_SOC_GPIO_IN_RANGE_MAX=30 -CONFIG_SOC_GPIO_OUT_RANGE_MAX=30 -CONFIG_SOC_GPIO_DEEP_SLEEP_WAKE_VALID_GPIO_MASK=0 -CONFIG_SOC_GPIO_DEEP_SLEEP_WAKE_SUPPORTED_PIN_CNT=8 -CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0x000000007FFFFF00 -CONFIG_SOC_GPIO_SUPPORT_FORCE_HOLD=y -CONFIG_SOC_GPIO_SUPPORT_HOLD_IO_IN_DSLP=y -CONFIG_SOC_GPIO_SUPPORT_HOLD_SINGLE_IO_IN_DSLP=y -CONFIG_SOC_GPIO_CLOCKOUT_BY_GPIO_MATRIX=y -CONFIG_SOC_CLOCKOUT_HAS_SOURCE_GATE=y -CONFIG_SOC_GPIO_CLOCKOUT_CHANNEL_NUM=3 -CONFIG_SOC_RTCIO_PIN_COUNT=8 -CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y -CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y -CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y -CONFIG_SOC_DEDIC_GPIO_OUT_CHANNELS_NUM=8 -CONFIG_SOC_DEDIC_GPIO_IN_CHANNELS_NUM=8 -CONFIG_SOC_DEDIC_PERIPH_ALWAYS_ENABLE=y -CONFIG_SOC_I2C_NUM=2 -CONFIG_SOC_HP_I2C_NUM=1 -CONFIG_SOC_I2C_FIFO_LEN=32 -CONFIG_SOC_I2C_CMD_REG_NUM=8 -CONFIG_SOC_I2C_SUPPORT_SLAVE=y -CONFIG_SOC_I2C_SUPPORT_HW_FSM_RST=y -CONFIG_SOC_I2C_SUPPORT_HW_CLR_BUS=y -CONFIG_SOC_I2C_SUPPORT_XTAL=y -CONFIG_SOC_I2C_SUPPORT_RTC=y -CONFIG_SOC_I2C_SUPPORT_10BIT_ADDR=y -CONFIG_SOC_I2C_SLAVE_SUPPORT_BROADCAST=y -CONFIG_SOC_I2C_SLAVE_CAN_GET_STRETCH_CAUSE=y -CONFIG_SOC_I2C_SLAVE_SUPPORT_I2CRAM_ACCESS=y -CONFIG_SOC_I2C_SLAVE_SUPPORT_SLAVE_UNMATCH=y -CONFIG_SOC_I2C_SUPPORT_SLEEP_RETENTION=y -CONFIG_SOC_LP_I2C_NUM=1 -CONFIG_SOC_LP_I2C_FIFO_LEN=16 -CONFIG_SOC_I2S_NUM=1 -CONFIG_SOC_I2S_HW_VERSION_2=y -CONFIG_SOC_I2S_SUPPORTS_ETM=y -CONFIG_SOC_I2S_SUPPORTS_XTAL=y -CONFIG_SOC_I2S_SUPPORTS_PLL_F160M=y -CONFIG_SOC_I2S_SUPPORTS_PCM=y -CONFIG_SOC_I2S_SUPPORTS_PDM=y -CONFIG_SOC_I2S_SUPPORTS_PDM_TX=y -CONFIG_SOC_I2S_PDM_MAX_TX_LINES=2 -CONFIG_SOC_I2S_SUPPORTS_TDM=y -CONFIG_SOC_I2S_SUPPORT_SLEEP_RETENTION=y -CONFIG_SOC_LEDC_SUPPORT_PLL_DIV_CLOCK=y -CONFIG_SOC_LEDC_SUPPORT_XTAL_CLOCK=y -CONFIG_SOC_LEDC_TIMER_NUM=4 -CONFIG_SOC_LEDC_CHANNEL_NUM=6 -CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=20 -CONFIG_SOC_LEDC_SUPPORT_FADE_STOP=y -CONFIG_SOC_LEDC_GAMMA_CURVE_FADE_SUPPORTED=y -CONFIG_SOC_LEDC_GAMMA_CURVE_FADE_RANGE_MAX=16 -CONFIG_SOC_LEDC_FADE_PARAMS_BIT_WIDTH=10 -CONFIG_SOC_LEDC_SUPPORT_SLEEP_RETENTION=y -CONFIG_SOC_MMU_PAGE_SIZE_CONFIGURABLE=y -CONFIG_SOC_MMU_PAGE_SIZE_8KB_SUPPORTED=y -CONFIG_SOC_MMU_PERIPH_NUM=1 -CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=1 -CONFIG_SOC_MMU_DI_VADDR_SHARED=y -CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 -CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 -CONFIG_SOC_PCNT_GROUPS=1 -CONFIG_SOC_PCNT_UNITS_PER_GROUP=4 -CONFIG_SOC_PCNT_CHANNELS_PER_UNIT=2 -CONFIG_SOC_PCNT_THRES_POINT_PER_UNIT=2 -CONFIG_SOC_PCNT_SUPPORT_RUNTIME_THRES_UPDATE=y -CONFIG_SOC_PCNT_SUPPORT_SLEEP_RETENTION=y -CONFIG_SOC_RMT_GROUPS=1 -CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=2 -CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP=2 -CONFIG_SOC_RMT_CHANNELS_PER_GROUP=4 -CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL=48 -CONFIG_SOC_RMT_SUPPORT_RX_PINGPONG=y -CONFIG_SOC_RMT_SUPPORT_RX_DEMODULATION=y -CONFIG_SOC_RMT_SUPPORT_TX_ASYNC_STOP=y -CONFIG_SOC_RMT_SUPPORT_TX_LOOP_COUNT=y -CONFIG_SOC_RMT_SUPPORT_TX_LOOP_AUTO_STOP=y -CONFIG_SOC_RMT_SUPPORT_TX_SYNCHRO=y -CONFIG_SOC_RMT_SUPPORT_TX_CARRIER_DATA_ONLY=y -CONFIG_SOC_RMT_SUPPORT_XTAL=y -CONFIG_SOC_RMT_SUPPORT_RC_FAST=y -CONFIG_SOC_RMT_SUPPORT_SLEEP_RETENTION=y -CONFIG_SOC_MCPWM_GROUPS=1 -CONFIG_SOC_MCPWM_TIMERS_PER_GROUP=3 -CONFIG_SOC_MCPWM_OPERATORS_PER_GROUP=3 -CONFIG_SOC_MCPWM_COMPARATORS_PER_OPERATOR=2 -CONFIG_SOC_MCPWM_GENERATORS_PER_OPERATOR=2 -CONFIG_SOC_MCPWM_TRIGGERS_PER_OPERATOR=2 -CONFIG_SOC_MCPWM_GPIO_FAULTS_PER_GROUP=3 -CONFIG_SOC_MCPWM_CAPTURE_TIMERS_PER_GROUP=y -CONFIG_SOC_MCPWM_CAPTURE_CHANNELS_PER_TIMER=3 -CONFIG_SOC_MCPWM_GPIO_SYNCHROS_PER_GROUP=3 -CONFIG_SOC_MCPWM_SWSYNC_CAN_PROPAGATE=y -CONFIG_SOC_MCPWM_SUPPORT_ETM=y -CONFIG_SOC_MCPWM_CAPTURE_CLK_FROM_GROUP=y -CONFIG_SOC_MCPWM_SUPPORT_SLEEP_RETENTION=y -CONFIG_SOC_PARLIO_GROUPS=1 -CONFIG_SOC_PARLIO_TX_UNITS_PER_GROUP=1 -CONFIG_SOC_PARLIO_RX_UNITS_PER_GROUP=1 -CONFIG_SOC_PARLIO_TX_UNIT_MAX_DATA_WIDTH=16 -CONFIG_SOC_PARLIO_RX_UNIT_MAX_DATA_WIDTH=16 -CONFIG_SOC_PARLIO_TX_RX_SHARE_INTERRUPT=y -CONFIG_SOC_PARLIO_SUPPORT_SLEEP_RETENTION=y -CONFIG_SOC_MPI_MEM_BLOCKS_NUM=4 -CONFIG_SOC_MPI_OPERATIONS_NUM=3 -CONFIG_SOC_RSA_MAX_BIT_LEN=3072 -CONFIG_SOC_SHA_DMA_MAX_BUFFER_SIZE=3968 -CONFIG_SOC_SHA_SUPPORT_DMA=y -CONFIG_SOC_SHA_SUPPORT_RESUME=y -CONFIG_SOC_SHA_GDMA=y -CONFIG_SOC_SHA_SUPPORT_SHA1=y -CONFIG_SOC_SHA_SUPPORT_SHA224=y -CONFIG_SOC_SHA_SUPPORT_SHA256=y -CONFIG_SOC_SDM_GROUPS=1 -CONFIG_SOC_SDM_CHANNELS_PER_GROUP=4 -CONFIG_SOC_SDM_CLK_SUPPORT_PLL_F80M=y -CONFIG_SOC_SDM_CLK_SUPPORT_XTAL=y -CONFIG_SOC_SPI_PERIPH_NUM=2 -CONFIG_SOC_SPI_MAX_CS_NUM=6 -CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64 -CONFIG_SOC_SPI_SUPPORT_DDRCLK=y -CONFIG_SOC_SPI_SLAVE_SUPPORT_SEG_TRANS=y -CONFIG_SOC_SPI_SUPPORT_CD_SIG=y -CONFIG_SOC_SPI_SUPPORT_CONTINUOUS_TRANS=y -CONFIG_SOC_SPI_SUPPORT_SLAVE_HD_VER2=y -CONFIG_SOC_SPI_SUPPORT_SLEEP_RETENTION=y -CONFIG_SOC_SPI_SUPPORT_CLK_XTAL=y -CONFIG_SOC_SPI_SUPPORT_CLK_PLL_F80M=y -CONFIG_SOC_SPI_SUPPORT_CLK_RC_FAST=y -CONFIG_SOC_SPI_SCT_SUPPORTED=y -CONFIG_SOC_SPI_SCT_REG_NUM=14 -CONFIG_SOC_SPI_SCT_BUFFER_NUM_MAX=y -CONFIG_SOC_SPI_SCT_CONF_BITLEN_MAX=0x3FFFA -CONFIG_SOC_MEMSPI_IS_INDEPENDENT=y -CONFIG_SOC_SPI_MAX_PRE_DIVIDER=16 -CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_WAIT_IDLE=y -CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_SUSPEND=y -CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_RESUME=y -CONFIG_SOC_SPI_MEM_SUPPORT_IDLE_INTR=y -CONFIG_SOC_SPI_MEM_SUPPORT_SW_SUSPEND=y -CONFIG_SOC_SPI_MEM_SUPPORT_CHECK_SUS=y -CONFIG_SOC_SPI_MEM_SUPPORT_WRAP=y -CONFIG_SOC_MEMSPI_SRC_FREQ_80M_SUPPORTED=y -CONFIG_SOC_MEMSPI_SRC_FREQ_40M_SUPPORTED=y -CONFIG_SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED=y -CONFIG_SOC_SYSTIMER_COUNTER_NUM=2 -CONFIG_SOC_SYSTIMER_ALARM_NUM=3 -CONFIG_SOC_SYSTIMER_BIT_WIDTH_LO=32 -CONFIG_SOC_SYSTIMER_BIT_WIDTH_HI=20 -CONFIG_SOC_SYSTIMER_FIXED_DIVIDER=y -CONFIG_SOC_SYSTIMER_SUPPORT_RC_FAST=y -CONFIG_SOC_SYSTIMER_INT_LEVEL=y -CONFIG_SOC_SYSTIMER_ALARM_MISS_COMPENSATE=y -CONFIG_SOC_SYSTIMER_SUPPORT_ETM=y -CONFIG_SOC_LP_TIMER_BIT_WIDTH_LO=32 -CONFIG_SOC_LP_TIMER_BIT_WIDTH_HI=16 -CONFIG_SOC_TIMER_GROUPS=2 -CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=1 -CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=54 -CONFIG_SOC_TIMER_GROUP_SUPPORT_XTAL=y -CONFIG_SOC_TIMER_GROUP_SUPPORT_RC_FAST=y -CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=2 -CONFIG_SOC_TIMER_SUPPORT_ETM=y -CONFIG_SOC_TIMER_SUPPORT_SLEEP_RETENTION=y -CONFIG_SOC_MWDT_SUPPORT_XTAL=y -CONFIG_SOC_MWDT_SUPPORT_SLEEP_RETENTION=y -CONFIG_SOC_TWAI_CONTROLLER_NUM=2 -CONFIG_SOC_TWAI_CLK_SUPPORT_XTAL=y -CONFIG_SOC_TWAI_BRP_MIN=2 -CONFIG_SOC_TWAI_BRP_MAX=32768 -CONFIG_SOC_TWAI_SUPPORTS_RX_STATUS=y -CONFIG_SOC_TWAI_SUPPORT_SLEEP_RETENTION=y -CONFIG_SOC_EFUSE_DIS_DOWNLOAD_ICACHE=y -CONFIG_SOC_EFUSE_DIS_PAD_JTAG=y -CONFIG_SOC_EFUSE_DIS_USB_JTAG=y -CONFIG_SOC_EFUSE_DIS_DIRECT_BOOT=y -CONFIG_SOC_EFUSE_SOFT_DIS_JTAG=y -CONFIG_SOC_EFUSE_DIS_ICACHE=y -CONFIG_SOC_EFUSE_BLOCK9_KEY_PURPOSE_QUIRK=y -CONFIG_SOC_SECURE_BOOT_V2_RSA=y -CONFIG_SOC_SECURE_BOOT_V2_ECC=y -CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=3 -CONFIG_SOC_EFUSE_REVOKE_BOOT_KEY_DIGESTS=y -CONFIG_SOC_SUPPORT_SECURE_BOOT_REVOKE_KEY=y -CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=64 -CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES=y -CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_128=y -CONFIG_SOC_APM_CTRL_FILTER_SUPPORTED=y -CONFIG_SOC_APM_LP_APM0_SUPPORTED=y -CONFIG_SOC_CRYPTO_DPA_PROTECTION_SUPPORTED=y -CONFIG_SOC_UART_NUM=3 -CONFIG_SOC_UART_HP_NUM=2 -CONFIG_SOC_UART_LP_NUM=1 -CONFIG_SOC_UART_FIFO_LEN=128 -CONFIG_SOC_LP_UART_FIFO_LEN=16 -CONFIG_SOC_UART_BITRATE_MAX=5000000 -CONFIG_SOC_UART_SUPPORT_PLL_F80M_CLK=y -CONFIG_SOC_UART_SUPPORT_RTC_CLK=y -CONFIG_SOC_UART_SUPPORT_XTAL_CLK=y -CONFIG_SOC_UART_SUPPORT_WAKEUP_INT=y -CONFIG_SOC_UART_HAS_LP_UART=y -CONFIG_SOC_UART_SUPPORT_SLEEP_RETENTION=y -CONFIG_SOC_UART_SUPPORT_FSM_TX_WAIT_SEND=y -CONFIG_SOC_COEX_HW_PTI=y -CONFIG_SOC_EXTERNAL_COEX_ADVANCE=y -CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21 -CONFIG_SOC_WIFI_LIGHT_SLEEP_CLK_WIDTH=12 -CONFIG_SOC_PM_SUPPORT_WIFI_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_BEACON_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_BT_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_EXT1_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_EXT1_WAKEUP_MODE_PER_PIN=y -CONFIG_SOC_PM_SUPPORT_CPU_PD=y -CONFIG_SOC_PM_SUPPORT_MODEM_PD=y -CONFIG_SOC_PM_SUPPORT_XTAL32K_PD=y -CONFIG_SOC_PM_SUPPORT_RC32K_PD=y -CONFIG_SOC_PM_SUPPORT_RC_FAST_PD=y -CONFIG_SOC_PM_SUPPORT_VDDSDIO_PD=y -CONFIG_SOC_PM_SUPPORT_TOP_PD=y -CONFIG_SOC_PM_SUPPORT_HP_AON_PD=y -CONFIG_SOC_PM_SUPPORT_MAC_BB_PD=y -CONFIG_SOC_PM_SUPPORT_RTC_PERIPH_PD=y -CONFIG_SOC_PM_SUPPORT_PMU_MODEM_STATE=y -CONFIG_SOC_PM_SUPPORT_DEEPSLEEP_CHECK_STUB_ONLY=y -CONFIG_SOC_PM_CPU_RETENTION_BY_SW=y -CONFIG_SOC_PM_MODEM_RETENTION_BY_REGDMA=y -CONFIG_SOC_PM_RETENTION_HAS_CLOCK_BUG=y -CONFIG_SOC_EXT_MEM_CACHE_TAG_IN_CPU_DOMAIN=y -CONFIG_SOC_PM_PAU_LINK_NUM=4 -CONFIG_SOC_PM_PAU_REGDMA_LINK_MULTI_ADDR=y -CONFIG_SOC_PM_PAU_REGDMA_LINK_WIFIMAC=y -CONFIG_SOC_PM_PAU_REGDMA_UPDATE_CACHE_BEFORE_WAIT_COMPARE=y -CONFIG_SOC_PM_RETENTION_MODULE_NUM=32 -CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y -CONFIG_SOC_MODEM_CLOCK_IS_INDEPENDENT=y -CONFIG_SOC_CLK_XTAL32K_SUPPORTED=y -CONFIG_SOC_CLK_OSC_SLOW_SUPPORTED=y -CONFIG_SOC_CLK_RC32K_SUPPORTED=y -CONFIG_SOC_RCC_IS_INDEPENDENT=y -CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_FAST_RC=y -CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_XTAL=y -CONFIG_SOC_TEMPERATURE_SENSOR_INTR_SUPPORT=y -CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_ETM=y -CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION=y -CONFIG_SOC_TEMPERATURE_SENSOR_UNDER_PD_TOP_DOMAIN=y -CONFIG_SOC_RNG_CLOCK_IS_INDEPENDENT=y -CONFIG_SOC_WIFI_HW_TSF=y -CONFIG_SOC_WIFI_FTM_SUPPORT=y -CONFIG_SOC_WIFI_GCMP_SUPPORT=y -CONFIG_SOC_WIFI_WAPI_SUPPORT=y -CONFIG_SOC_WIFI_CSI_SUPPORT=y -CONFIG_SOC_WIFI_MESH_SUPPORT=y -CONFIG_SOC_WIFI_HE_SUPPORT=y -CONFIG_SOC_WIFI_MAC_VERSION_NUM=2 -CONFIG_SOC_BLE_SUPPORTED=y -CONFIG_SOC_BLE_MESH_SUPPORTED=y -CONFIG_SOC_ESP_NIMBLE_CONTROLLER=y -CONFIG_SOC_BLE_50_SUPPORTED=y -CONFIG_SOC_BLE_DEVICE_PRIVACY_SUPPORTED=y -CONFIG_SOC_BLE_POWER_CONTROL_SUPPORTED=y -CONFIG_SOC_BLE_PERIODIC_ADV_ENH_SUPPORTED=y -CONFIG_SOC_BLUFI_SUPPORTED=y -CONFIG_SOC_BLE_MULTI_CONN_OPTIMIZATION=y -CONFIG_SOC_BLE_USE_WIFI_PWR_CLK_WORKAROUND=y -CONFIG_SOC_PHY_COMBO_MODULE=y -CONFIG_SOC_CAPS_NO_RESET_BY_ANA_BOD=y -CONFIG_SOC_LP_CORE_SINGLE_INTERRUPT_VECTOR=y -CONFIG_SOC_LP_CORE_SUPPORT_ETM=y -CONFIG_SOC_DEBUG_HAVE_OCD_STUB_BINS=y -CONFIG_IDF_CMAKE=y -CONFIG_IDF_TOOLCHAIN="gcc" -CONFIG_IDF_TOOLCHAIN_GCC=y -CONFIG_IDF_TARGET_ARCH_RISCV=y -CONFIG_IDF_TARGET_ARCH="riscv" -CONFIG_IDF_TARGET="esp32c6" -CONFIG_IDF_INIT_VERSION="5.3.0" -CONFIG_IDF_TARGET_ESP32C6=y -CONFIG_IDF_FIRMWARE_CHIP_ID=0x000D - -# -# Build type -# -CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y -# CONFIG_APP_BUILD_TYPE_RAM is not set -CONFIG_APP_BUILD_GENERATE_BINARIES=y -CONFIG_APP_BUILD_BOOTLOADER=y -CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y -# CONFIG_APP_REPRODUCIBLE_BUILD is not set -# CONFIG_APP_NO_BLOBS is not set -# end of Build type - -# -# Bootloader config -# - -# -# Bootloader manager -# -CONFIG_BOOTLOADER_COMPILE_TIME_DATE=y -CONFIG_BOOTLOADER_PROJECT_VER=1 -# end of Bootloader manager - -CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x0 -CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y -# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set -# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set - -# -# Log -# -# CONFIG_BOOTLOADER_LOG_LEVEL_NONE is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set -CONFIG_BOOTLOADER_LOG_LEVEL_INFO=y -# CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set -CONFIG_BOOTLOADER_LOG_LEVEL=3 - -# -# Format -# -# CONFIG_BOOTLOADER_LOG_COLORS is not set -CONFIG_BOOTLOADER_LOG_TIMESTAMP_SOURCE_CPU_TICKS=y -# end of Format -# end of Log - -# -# Serial Flash Configurations -# -# CONFIG_BOOTLOADER_FLASH_DC_AWARE is not set -CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y -# end of Serial Flash Configurations - -# CONFIG_BOOTLOADER_FACTORY_RESET is not set -# CONFIG_BOOTLOADER_APP_TEST is not set -CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE=y -CONFIG_BOOTLOADER_WDT_ENABLE=y -# CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set -CONFIG_BOOTLOADER_WDT_TIME_MS=9000 -# CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set -# CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set -# CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON is not set -# CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set -CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0 -# CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set -# end of Bootloader config - -# -# Security features -# -CONFIG_SECURE_BOOT_V2_RSA_SUPPORTED=y -CONFIG_SECURE_BOOT_V2_ECC_SUPPORTED=y -CONFIG_SECURE_BOOT_V2_PREFERRED=y -# CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set -# CONFIG_SECURE_BOOT is not set -# CONFIG_SECURE_FLASH_ENC_ENABLED is not set -CONFIG_SECURE_ROM_DL_MODE_ENABLED=y -# end of Security features - -# -# Application manager -# -CONFIG_APP_COMPILE_TIME_DATE=y -# CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set -# CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set -# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set -CONFIG_APP_RETRIEVE_LEN_ELF_SHA=9 -# end of Application manager - -CONFIG_ESP_ROM_HAS_CRC_LE=y -CONFIG_ESP_ROM_HAS_CRC_BE=y -CONFIG_ESP_ROM_HAS_JPEG_DECODE=y -CONFIG_ESP_ROM_UART_CLK_IS_XTAL=y -CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=3 -CONFIG_ESP_ROM_HAS_RETARGETABLE_LOCKING=y -CONFIG_ESP_ROM_GET_CLK_FREQ=y -CONFIG_ESP_ROM_HAS_RVFPLIB=y -CONFIG_ESP_ROM_HAS_HAL_WDT=y -CONFIG_ESP_ROM_HAS_HAL_SYSTIMER=y -CONFIG_ESP_ROM_HAS_HEAP_TLSF=y -CONFIG_ESP_ROM_TLSF_CHECK_PATCH=y -CONFIG_ESP_ROM_MULTI_HEAP_WALK_PATCH=y -CONFIG_ESP_ROM_HAS_LAYOUT_TABLE=y -CONFIG_ESP_ROM_HAS_SPI_FLASH=y -CONFIG_ESP_ROM_HAS_REGI2C_BUG=y -CONFIG_ESP_ROM_HAS_NEWLIB=y -CONFIG_ESP_ROM_HAS_NEWLIB_NORMAL_FORMAT=y -CONFIG_ESP_ROM_REV0_HAS_NO_ECDSA_INTERFACE=y -CONFIG_ESP_ROM_WDT_INIT_PATCH=y -CONFIG_ESP_ROM_NEEDS_SET_CACHE_MMU_SIZE=y -CONFIG_ESP_ROM_RAM_APP_NEEDS_MMU_INIT=y -CONFIG_ESP_ROM_HAS_SW_FLOAT=y -CONFIG_ESP_ROM_USB_OTG_NUM=-1 -CONFIG_ESP_ROM_HAS_VERSION=y -CONFIG_ESP_ROM_SUPPORT_DEEP_SLEEP_WAKEUP_STUB=y -CONFIG_ESP_ROM_HAS_OUTPUT_PUTC_FUNC=y - -# -# Boot ROM Behavior -# -CONFIG_BOOT_ROM_LOG_ALWAYS_ON=y -# CONFIG_BOOT_ROM_LOG_ALWAYS_OFF is not set -# CONFIG_BOOT_ROM_LOG_ON_GPIO_HIGH is not set -# CONFIG_BOOT_ROM_LOG_ON_GPIO_LOW is not set -# end of Boot ROM Behavior - -# -# Serial flasher config -# -# CONFIG_ESPTOOLPY_NO_STUB is not set -# CONFIG_ESPTOOLPY_FLASHMODE_QIO is not set -# CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set -CONFIG_ESPTOOLPY_FLASHMODE_DIO=y -# CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set -CONFIG_ESPTOOLPY_FLASH_SAMPLE_MODE_STR=y -CONFIG_ESPTOOLPY_FLASHMODE="dio" -CONFIG_ESPTOOLPY_FLASHFREQ_80M=y -# CONFIG_ESPTOOLPY_FLASHFREQ_40M is not set -# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set -CONFIG_ESPTOOLPY_FLASHFREQ="80m" -# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y -# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE="4MB" -# CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE is not set -CONFIG_ESPTOOLPY_BEFORE_RESET=y -# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set -CONFIG_ESPTOOLPY_BEFORE="default_reset" -CONFIG_ESPTOOLPY_AFTER_RESET=y -# CONFIG_ESPTOOLPY_AFTER_NORESET is not set -CONFIG_ESPTOOLPY_AFTER="hard_reset" -CONFIG_ESPTOOLPY_MONITOR_BAUD=115200 -# end of Serial flasher config - -# -# Partition Table -# -# CONFIG_PARTITION_TABLE_SINGLE_APP is not set -# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set -# CONFIG_PARTITION_TABLE_TWO_OTA is not set -# CONFIG_PARTITION_TABLE_TWO_OTA_LARGE is not set -CONFIG_PARTITION_TABLE_CUSTOM=y -CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions_prg32.csv" -CONFIG_PARTITION_TABLE_FILENAME="partitions_prg32.csv" -CONFIG_PARTITION_TABLE_OFFSET=0x8000 -CONFIG_PARTITION_TABLE_MD5=y -# end of Partition Table - -# -# Compiler options -# -CONFIG_COMPILER_OPTIMIZATION_DEBUG=y -# CONFIG_COMPILER_OPTIMIZATION_SIZE is not set -# CONFIG_COMPILER_OPTIMIZATION_PERF is not set -# CONFIG_COMPILER_OPTIMIZATION_NONE is not set -CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y -# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set -# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set -CONFIG_COMPILER_ASSERT_NDEBUG_EVALUATE=y -# CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB is not set -CONFIG_COMPILER_FLOAT_LIB_FROM_RVFPLIB=y -CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2 -# CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT is not set -CONFIG_COMPILER_HIDE_PATHS_MACROS=y -# CONFIG_COMPILER_CXX_EXCEPTIONS is not set -# CONFIG_COMPILER_CXX_RTTI is not set -CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y -# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set -# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set -# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set -# CONFIG_COMPILER_NO_MERGE_CONSTANTS is not set -# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set -# CONFIG_COMPILER_SAVE_RESTORE_LIBCALLS is not set -CONFIG_COMPILER_DISABLE_DEFAULT_ERRORS=y -# CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set -# CONFIG_COMPILER_DISABLE_GCC13_WARNINGS is not set -# CONFIG_COMPILER_DISABLE_GCC14_WARNINGS is not set -# CONFIG_COMPILER_DUMP_RTL_FILES is not set -CONFIG_COMPILER_RT_LIB_GCCLIB=y -CONFIG_COMPILER_RT_LIB_NAME="gcc" -# CONFIG_COMPILER_ORPHAN_SECTIONS_WARNING is not set -CONFIG_COMPILER_ORPHAN_SECTIONS_PLACE=y -# CONFIG_COMPILER_STATIC_ANALYZER is not set -# end of Compiler options - -# -# Component config -# - -# -# Application Level Tracing -# -# CONFIG_APPTRACE_DEST_JTAG is not set -CONFIG_APPTRACE_DEST_NONE=y -# CONFIG_APPTRACE_DEST_UART1 is not set -# CONFIG_APPTRACE_DEST_UART2 is not set -CONFIG_APPTRACE_DEST_UART_NONE=y -CONFIG_APPTRACE_UART_TASK_PRIO=1 -CONFIG_APPTRACE_LOCK_ENABLE=y -# end of Application Level Tracing - -# -# Bluetooth -# -# CONFIG_BT_ENABLED is not set -CONFIG_BT_ALARM_MAX_NUM=50 -# end of Bluetooth - -# -# Console Library -# -# CONFIG_CONSOLE_SORTED_HELP is not set -# end of Console Library - -# -# Driver Configurations -# - -# -# TWAI Configuration -# -# CONFIG_TWAI_ISR_IN_IRAM is not set -# end of TWAI Configuration - -# -# Legacy ADC Driver Configuration -# -# CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_ADC_SKIP_LEGACY_CONFLICT_CHECK is not set - -# -# Legacy ADC Calibration Configuration -# -# CONFIG_ADC_CALI_SUPPRESS_DEPRECATE_WARN is not set -# end of Legacy ADC Calibration Configuration -# end of Legacy ADC Driver Configuration - -# -# Legacy MCPWM Driver Configurations -# -# CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_MCPWM_SKIP_LEGACY_CONFLICT_CHECK is not set -# end of Legacy MCPWM Driver Configurations - -# -# Legacy Timer Group Driver Configurations -# -# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_GPTIMER_SKIP_LEGACY_CONFLICT_CHECK is not set -# end of Legacy Timer Group Driver Configurations - -# -# Legacy RMT Driver Configurations -# -# CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_RMT_SKIP_LEGACY_CONFLICT_CHECK is not set -# end of Legacy RMT Driver Configurations - -# -# Legacy I2S Driver Configurations -# -# CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_I2S_SKIP_LEGACY_CONFLICT_CHECK is not set -# end of Legacy I2S Driver Configurations - -# -# Legacy PCNT Driver Configurations -# -# CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_PCNT_SKIP_LEGACY_CONFLICT_CHECK is not set -# end of Legacy PCNT Driver Configurations - -# -# Legacy SDM Driver Configurations -# -# CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_SDM_SKIP_LEGACY_CONFLICT_CHECK is not set -# end of Legacy SDM Driver Configurations - -# -# Legacy Temperature Sensor Driver Configurations -# -# CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_TEMP_SENSOR_SKIP_LEGACY_CONFLICT_CHECK is not set -# end of Legacy Temperature Sensor Driver Configurations -# end of Driver Configurations - -# -# eFuse Bit Manager -# -# CONFIG_EFUSE_CUSTOM_TABLE is not set -# CONFIG_EFUSE_VIRTUAL is not set -CONFIG_EFUSE_MAX_BLK_LEN=256 -# end of eFuse Bit Manager - -# -# ESP-TLS -# -CONFIG_ESP_TLS_USING_MBEDTLS=y -CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y -# CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set -# CONFIG_ESP_TLS_SERVER_SESSION_TICKETS is not set -# CONFIG_ESP_TLS_SERVER_CERT_SELECT_HOOK is not set -# CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set -# CONFIG_ESP_TLS_PSK_VERIFICATION is not set -# CONFIG_ESP_TLS_INSECURE is not set -# end of ESP-TLS - -# -# ADC and ADC Calibration -# -# CONFIG_ADC_ONESHOT_CTRL_FUNC_IN_IRAM is not set -# CONFIG_ADC_CONTINUOUS_ISR_IRAM_SAFE is not set -# CONFIG_ADC_ENABLE_DEBUG_LOG is not set -# end of ADC and ADC Calibration - -# -# Wireless Coexistence -# -CONFIG_ESP_COEX_ENABLED=y -CONFIG_ESP_COEX_SW_COEXIST_ENABLE=y -# CONFIG_ESP_COEX_EXTERNAL_COEXIST_ENABLE is not set -# CONFIG_ESP_COEX_POWER_MANAGEMENT is not set -# CONFIG_ESP_COEX_GPIO_DEBUG is not set -# end of Wireless Coexistence - -# -# Common ESP-related -# -CONFIG_ESP_ERR_TO_NAME_LOOKUP=y -# end of Common ESP-related - -# -# ESP-Driver:GPIO Configurations -# -# CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set -# end of ESP-Driver:GPIO Configurations - -# -# ESP-Driver:GPTimer Configurations -# -CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y -# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set -# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set -# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:GPTimer Configurations - -# -# ESP-Driver:I2C Configurations -# -# CONFIG_I2C_ISR_IRAM_SAFE is not set -# CONFIG_I2C_ENABLE_DEBUG_LOG is not set -# CONFIG_I2C_ENABLE_SLAVE_DRIVER_VERSION_2 is not set -# end of ESP-Driver:I2C Configurations - -# -# ESP-Driver:I2S Configurations -# -# CONFIG_I2S_ISR_IRAM_SAFE is not set -# CONFIG_I2S_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:I2S Configurations - -# -# ESP-Driver:LEDC Configurations -# -# CONFIG_LEDC_CTRL_FUNC_IN_IRAM is not set -# end of ESP-Driver:LEDC Configurations - -# -# ESP-Driver:MCPWM Configurations -# -# CONFIG_MCPWM_ISR_IRAM_SAFE is not set -# CONFIG_MCPWM_CTRL_FUNC_IN_IRAM is not set -# CONFIG_MCPWM_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:MCPWM Configurations - -# -# ESP-Driver:Parallel IO Configurations -# -# CONFIG_PARLIO_ENABLE_DEBUG_LOG is not set -# CONFIG_PARLIO_ISR_IRAM_SAFE is not set -# end of ESP-Driver:Parallel IO Configurations - -# -# ESP-Driver:PCNT Configurations -# -# CONFIG_PCNT_CTRL_FUNC_IN_IRAM is not set -# CONFIG_PCNT_ISR_IRAM_SAFE is not set -# CONFIG_PCNT_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:PCNT Configurations - -# -# ESP-Driver:RMT Configurations -# -# CONFIG_RMT_ISR_IRAM_SAFE is not set -# CONFIG_RMT_RECV_FUNC_IN_IRAM is not set -# CONFIG_RMT_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:RMT Configurations - -# -# ESP-Driver:Sigma Delta Modulator Configurations -# -# CONFIG_SDM_CTRL_FUNC_IN_IRAM is not set -# CONFIG_SDM_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:Sigma Delta Modulator Configurations - -# -# ESP-Driver:SPI Configurations -# -# CONFIG_SPI_MASTER_IN_IRAM is not set -CONFIG_SPI_MASTER_ISR_IN_IRAM=y -# CONFIG_SPI_SLAVE_IN_IRAM is not set -CONFIG_SPI_SLAVE_ISR_IN_IRAM=y -# end of ESP-Driver:SPI Configurations - -# -# ESP-Driver:Temperature Sensor Configurations -# -# CONFIG_TEMP_SENSOR_ENABLE_DEBUG_LOG is not set -# CONFIG_TEMP_SENSOR_ISR_IRAM_SAFE is not set -# end of ESP-Driver:Temperature Sensor Configurations - -# -# ESP-Driver:UART Configurations -# -# CONFIG_UART_ISR_IN_IRAM is not set -# end of ESP-Driver:UART Configurations - -# -# ESP-Driver:USB Serial/JTAG Configuration -# -CONFIG_USJ_ENABLE_USB_SERIAL_JTAG=y -# end of ESP-Driver:USB Serial/JTAG Configuration - -# -# Ethernet -# -CONFIG_ETH_ENABLED=y -CONFIG_ETH_USE_SPI_ETHERNET=y -# CONFIG_ETH_SPI_ETHERNET_DM9051 is not set -# CONFIG_ETH_SPI_ETHERNET_W5500 is not set -# CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL is not set -# CONFIG_ETH_USE_OPENETH is not set -# CONFIG_ETH_TRANSMIT_MUTEX is not set -# end of Ethernet - -# -# Event Loop Library -# -# CONFIG_ESP_EVENT_LOOP_PROFILING is not set -CONFIG_ESP_EVENT_POST_FROM_ISR=y -CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y -# end of Event Loop Library - -# -# GDB Stub -# -CONFIG_ESP_GDBSTUB_ENABLED=y -# CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME is not set -CONFIG_ESP_GDBSTUB_SUPPORT_TASKS=y -CONFIG_ESP_GDBSTUB_MAX_TASKS=32 -# end of GDB Stub - -# -# ESP HID -# -CONFIG_ESPHID_TASK_SIZE_BT=2048 -CONFIG_ESPHID_TASK_SIZE_BLE=4096 -# end of ESP HID - -# -# ESP HTTP client -# -CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y -# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set -# CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH is not set -# CONFIG_ESP_HTTP_CLIENT_ENABLE_CUSTOM_TRANSPORT is not set -CONFIG_ESP_HTTP_CLIENT_EVENT_POST_TIMEOUT=2000 -# end of ESP HTTP client - -# -# HTTP Server -# -CONFIG_HTTPD_MAX_REQ_HDR_LEN=512 -CONFIG_HTTPD_MAX_URI_LEN=512 -CONFIG_HTTPD_ERR_RESP_NO_DELAY=y -CONFIG_HTTPD_PURGE_BUF_LEN=32 -# CONFIG_HTTPD_LOG_PURGE_DATA is not set -# CONFIG_HTTPD_WS_SUPPORT is not set -# CONFIG_HTTPD_QUEUE_WORK_BLOCKING is not set -CONFIG_HTTPD_SERVER_EVENT_POST_TIMEOUT=2000 -# end of HTTP Server - -# -# ESP HTTPS OTA -# -# CONFIG_ESP_HTTPS_OTA_DECRYPT_CB is not set -# CONFIG_ESP_HTTPS_OTA_ALLOW_HTTP is not set -CONFIG_ESP_HTTPS_OTA_EVENT_POST_TIMEOUT=2000 -# end of ESP HTTPS OTA - -# -# ESP HTTPS server -# -# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set -CONFIG_ESP_HTTPS_SERVER_EVENT_POST_TIMEOUT=2000 -# end of ESP HTTPS server - -# -# Hardware Settings -# - -# -# Chip revision -# -CONFIG_ESP32C6_REV_MIN_0=y -# CONFIG_ESP32C6_REV_MIN_1 is not set -CONFIG_ESP32C6_REV_MIN_FULL=0 -CONFIG_ESP_REV_MIN_FULL=0 - -# -# Maximum Supported ESP32-C6 Revision (Rev v0.99) -# -CONFIG_ESP32C6_REV_MAX_FULL=99 -CONFIG_ESP_REV_MAX_FULL=99 -CONFIG_ESP_EFUSE_BLOCK_REV_MIN_FULL=0 -CONFIG_ESP_EFUSE_BLOCK_REV_MAX_FULL=99 - -# -# Maximum Supported ESP32-C6 eFuse Block Revision (eFuse Block Rev v0.99) -# -# end of Chip revision - -# -# MAC Config -# -CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_IEEE802154=y -CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES_FOUR=y -CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES=4 -# CONFIG_ESP32C6_UNIVERSAL_MAC_ADDRESSES_TWO is not set -CONFIG_ESP32C6_UNIVERSAL_MAC_ADDRESSES_FOUR=y -CONFIG_ESP32C6_UNIVERSAL_MAC_ADDRESSES=4 -# CONFIG_ESP_MAC_USE_CUSTOM_MAC_AS_BASE_MAC is not set -# end of MAC Config - -# -# Sleep Config -# -# CONFIG_ESP_SLEEP_POWER_DOWN_FLASH is not set -CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND=y -# CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU is not set -CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND=y -CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=0 -# CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION is not set -# CONFIG_ESP_SLEEP_DEBUG is not set -CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y -# end of Sleep Config - -# -# RTC Clock Config -# -CONFIG_RTC_CLK_SRC_INT_RC=y -# CONFIG_RTC_CLK_SRC_EXT_CRYS is not set -# CONFIG_RTC_CLK_SRC_EXT_OSC is not set -# CONFIG_RTC_CLK_SRC_USE_DANGEROUS_RC32K_ALLOWED is not set -CONFIG_RTC_CLK_CAL_CYCLES=1024 -# end of RTC Clock Config - -# -# Peripheral Control -# -CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y -# end of Peripheral Control - -# -# ETM Configuration -# -# CONFIG_ETM_ENABLE_DEBUG_LOG is not set -# end of ETM Configuration - -# -# GDMA Configurations -# -CONFIG_GDMA_CTRL_FUNC_IN_IRAM=y -# CONFIG_GDMA_ISR_IRAM_SAFE is not set -# CONFIG_GDMA_ENABLE_DEBUG_LOG is not set -# end of GDMA Configurations - -# -# Main XTAL Config -# -CONFIG_XTAL_FREQ_40=y -CONFIG_XTAL_FREQ=40 -# end of Main XTAL Config - -CONFIG_ESP_SPI_BUS_LOCK_ISR_FUNCS_IN_IRAM=y -# end of Hardware Settings - -# -# ESP-Driver:LCD Controller Configurations -# -# CONFIG_LCD_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:LCD Controller Configurations - -# -# ESP-MM: Memory Management Configurations -# -# end of ESP-MM: Memory Management Configurations - -# -# ESP NETIF Adapter -# -CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120 -# CONFIG_ESP_NETIF_PROVIDE_CUSTOM_IMPLEMENTATION is not set -CONFIG_ESP_NETIF_TCPIP_LWIP=y -# CONFIG_ESP_NETIF_LOOPBACK is not set -CONFIG_ESP_NETIF_USES_TCPIP_WITH_BSD_API=y -CONFIG_ESP_NETIF_REPORT_DATA_TRAFFIC=y -# CONFIG_ESP_NETIF_RECEIVE_REPORT_ERRORS is not set -# CONFIG_ESP_NETIF_L2_TAP is not set -# CONFIG_ESP_NETIF_BRIDGE_EN is not set -# CONFIG_ESP_NETIF_SET_DNS_PER_DEFAULT_NETIF is not set -# end of ESP NETIF Adapter - -# -# Partition API Configuration -# -# end of Partition API Configuration - -# -# PHY -# -CONFIG_ESP_PHY_ENABLED=y -CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y -# CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set -CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20 -CONFIG_ESP_PHY_MAX_TX_POWER=20 -# CONFIG_ESP_PHY_REDUCE_TX_POWER is not set -# CONFIG_ESP_PHY_ENABLE_CERT_TEST is not set -CONFIG_ESP_PHY_RF_CAL_PARTIAL=y -# CONFIG_ESP_PHY_RF_CAL_NONE is not set -# CONFIG_ESP_PHY_RF_CAL_FULL is not set -CONFIG_ESP_PHY_CALIBRATION_MODE=0 -# CONFIG_ESP_PHY_PLL_TRACK_DEBUG is not set -# CONFIG_ESP_PHY_RECORD_USED_TIME is not set -# end of PHY - -# -# Power Management -# -# CONFIG_PM_ENABLE is not set -# CONFIG_PM_SLP_IRAM_OPT is not set -CONFIG_PM_SLP_DEFAULT_PARAMS_OPT=y -CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y -# CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP is not set -# end of Power Management - -# -# ESP PSRAM -# - -# -# ESP Ringbuf -# -# CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH is not set -# end of ESP Ringbuf - -# -# ESP Security Specific -# - -# -# Crypto DPA Protection -# -CONFIG_ESP_CRYPTO_DPA_PROTECTION_AT_STARTUP=y -CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL_LOW=y -# CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL_MEDIUM is not set -# CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL_HIGH is not set -CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL=1 -# end of Crypto DPA Protection -# end of ESP Security Specific - -# -# ESP System Settings -# -# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80 is not set -# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_120 is not set -CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160=y -CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=160 -# CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set -CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y -# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set -# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set -CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0 -CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE=y -CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK=y -CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP=y -# CONFIG_ESP_SYSTEM_USE_EH_FRAME is not set - -# -# Memory protection -# -CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT=y -# CONFIG_ESP_SYSTEM_PMP_LP_CORE_RESERVE_MEM_EXECUTABLE is not set -# end of Memory protection - -CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 -CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304 -CONFIG_ESP_MAIN_TASK_STACK_SIZE=3584 -CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y -# CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set -CONFIG_ESP_MAIN_TASK_AFFINITY=0x0 -CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048 -CONFIG_ESP_CONSOLE_UART_DEFAULT=y -# CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG is not set -# CONFIG_ESP_CONSOLE_UART_CUSTOM is not set -# CONFIG_ESP_CONSOLE_NONE is not set -# CONFIG_ESP_CONSOLE_SECONDARY_NONE is not set -CONFIG_ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG=y -CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG_ENABLED=y -CONFIG_ESP_CONSOLE_UART=y -CONFIG_ESP_CONSOLE_UART_NUM=0 -CONFIG_ESP_CONSOLE_ROM_SERIAL_PORT_NUM=0 -CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 -CONFIG_ESP_INT_WDT=y -CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 -CONFIG_ESP_TASK_WDT_EN=y -CONFIG_ESP_TASK_WDT_INIT=y -# CONFIG_ESP_TASK_WDT_PANIC is not set -CONFIG_ESP_TASK_WDT_TIMEOUT_S=5 -CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y -# CONFIG_ESP_PANIC_HANDLER_IRAM is not set -# CONFIG_ESP_DEBUG_STUBS_ENABLE is not set -# CONFIG_ESP_DEBUG_INCLUDE_OCD_STUB_BINS is not set -CONFIG_ESP_DEBUG_OCDAWARE=y -CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_4=y - -# -# Brownout Detector -# -CONFIG_ESP_BROWNOUT_DET=y -CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7=y -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set -CONFIG_ESP_BROWNOUT_DET_LVL=7 -# end of Brownout Detector - -CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y -CONFIG_ESP_SYSTEM_HW_STACK_GUARD=y -CONFIG_ESP_SYSTEM_BBPLL_RECALIB=y -CONFIG_ESP_SYSTEM_HW_PC_RECORD=y -# end of ESP System Settings - -# -# IPC (Inter-Processor Call) -# -CONFIG_ESP_IPC_TASK_STACK_SIZE=1024 -# end of IPC (Inter-Processor Call) - -# -# ESP Timer (High Resolution Timer) -# -# CONFIG_ESP_TIMER_PROFILING is not set -CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y -CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER=y -CONFIG_ESP_TIMER_TASK_STACK_SIZE=3584 -CONFIG_ESP_TIMER_INTERRUPT_LEVEL=1 -# CONFIG_ESP_TIMER_SHOW_EXPERIMENTAL is not set -CONFIG_ESP_TIMER_TASK_AFFINITY=0x0 -CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0=y -CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y -# CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD is not set -CONFIG_ESP_TIMER_IMPL_SYSTIMER=y -# end of ESP Timer (High Resolution Timer) - -# -# Wi-Fi -# -CONFIG_ESP_WIFI_ENABLED=y -CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=10 -CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=32 -# CONFIG_ESP_WIFI_STATIC_TX_BUFFER is not set -CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER=y -CONFIG_ESP_WIFI_TX_BUFFER_TYPE=1 -CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER_NUM=32 -CONFIG_ESP_WIFI_STATIC_RX_MGMT_BUFFER=y -# CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUFFER is not set -CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUF=0 -CONFIG_ESP_WIFI_RX_MGMT_BUF_NUM_DEF=5 -# CONFIG_ESP_WIFI_CSI_ENABLED is not set -CONFIG_ESP_WIFI_AMPDU_TX_ENABLED=y -CONFIG_ESP_WIFI_TX_BA_WIN=6 -CONFIG_ESP_WIFI_AMPDU_RX_ENABLED=y -CONFIG_ESP_WIFI_RX_BA_WIN=6 -CONFIG_ESP_WIFI_NVS_ENABLED=y -CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN=752 -CONFIG_ESP_WIFI_MGMT_SBUF_NUM=32 -CONFIG_ESP_WIFI_IRAM_OPT=y -CONFIG_ESP_WIFI_EXTRA_IRAM_OPT=y -CONFIG_ESP_WIFI_RX_IRAM_OPT=y -CONFIG_ESP_WIFI_ENABLE_WPA3_SAE=y -CONFIG_ESP_WIFI_ENABLE_SAE_PK=y -CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT=y -CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y -CONFIG_ESP_WIFI_SLP_IRAM_OPT=y -CONFIG_ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME=50 -CONFIG_ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME=10 -CONFIG_ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME=15 -# CONFIG_ESP_WIFI_FTM_ENABLE is not set -CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y -# CONFIG_ESP_WIFI_GCMP_SUPPORT is not set -CONFIG_ESP_WIFI_GMAC_SUPPORT=y -CONFIG_ESP_WIFI_SOFTAP_SUPPORT=y -# CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set -CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=7 -CONFIG_ESP_WIFI_MBEDTLS_CRYPTO=y -CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y -# CONFIG_ESP_WIFI_WAPI_PSK is not set -# CONFIG_ESP_WIFI_SUITE_B_192 is not set -# CONFIG_ESP_WIFI_11KV_SUPPORT is not set -# CONFIG_ESP_WIFI_MBO_SUPPORT is not set -# CONFIG_ESP_WIFI_DPP_SUPPORT is not set -# CONFIG_ESP_WIFI_11R_SUPPORT is not set -# CONFIG_ESP_WIFI_WPS_SOFTAP_REGISTRAR is not set -# CONFIG_ESP_WIFI_ENABLE_WIFI_TX_STATS is not set -# CONFIG_ESP_WIFI_ENABLE_WIFI_RX_STATS is not set -CONFIG_ESP_WIFI_TX_HETB_QUEUE_NUM=3 - -# -# WPS Configuration Options -# -# CONFIG_ESP_WIFI_WPS_STRICT is not set -# CONFIG_ESP_WIFI_WPS_PASSPHRASE is not set -# end of WPS Configuration Options - -# CONFIG_ESP_WIFI_DEBUG_PRINT is not set -# CONFIG_ESP_WIFI_TESTING_OPTIONS is not set -CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=y -# CONFIG_ESP_WIFI_ENT_FREE_DYNAMIC_BUFFER is not set -# end of Wi-Fi - -# -# Core dump -# -# CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH is not set -# CONFIG_ESP_COREDUMP_ENABLE_TO_UART is not set -CONFIG_ESP_COREDUMP_ENABLE_TO_NONE=y -# end of Core dump - -# -# FAT Filesystem support -# -CONFIG_FATFS_VOLUME_COUNT=2 -CONFIG_FATFS_LFN_NONE=y -# CONFIG_FATFS_LFN_HEAP is not set -# CONFIG_FATFS_LFN_STACK is not set -# CONFIG_FATFS_SECTOR_512 is not set -CONFIG_FATFS_SECTOR_4096=y -# CONFIG_FATFS_CODEPAGE_DYNAMIC is not set -CONFIG_FATFS_CODEPAGE_437=y -# CONFIG_FATFS_CODEPAGE_720 is not set -# CONFIG_FATFS_CODEPAGE_737 is not set -# CONFIG_FATFS_CODEPAGE_771 is not set -# CONFIG_FATFS_CODEPAGE_775 is not set -# CONFIG_FATFS_CODEPAGE_850 is not set -# CONFIG_FATFS_CODEPAGE_852 is not set -# CONFIG_FATFS_CODEPAGE_855 is not set -# CONFIG_FATFS_CODEPAGE_857 is not set -# CONFIG_FATFS_CODEPAGE_860 is not set -# CONFIG_FATFS_CODEPAGE_861 is not set -# CONFIG_FATFS_CODEPAGE_862 is not set -# CONFIG_FATFS_CODEPAGE_863 is not set -# CONFIG_FATFS_CODEPAGE_864 is not set -# CONFIG_FATFS_CODEPAGE_865 is not set -# CONFIG_FATFS_CODEPAGE_866 is not set -# CONFIG_FATFS_CODEPAGE_869 is not set -# CONFIG_FATFS_CODEPAGE_932 is not set -# CONFIG_FATFS_CODEPAGE_936 is not set -# CONFIG_FATFS_CODEPAGE_949 is not set -# CONFIG_FATFS_CODEPAGE_950 is not set -CONFIG_FATFS_CODEPAGE=437 -CONFIG_FATFS_FS_LOCK=0 -CONFIG_FATFS_TIMEOUT_MS=10000 -CONFIG_FATFS_PER_FILE_CACHE=y -# CONFIG_FATFS_USE_FASTSEEK is not set -CONFIG_FATFS_USE_STRFUNC_NONE=y -# CONFIG_FATFS_USE_STRFUNC_WITHOUT_CRLF_CONV is not set -# CONFIG_FATFS_USE_STRFUNC_WITH_CRLF_CONV is not set -CONFIG_FATFS_VFS_FSTAT_BLKSIZE=0 -# CONFIG_FATFS_IMMEDIATE_FSYNC is not set -# CONFIG_FATFS_USE_LABEL is not set -CONFIG_FATFS_LINK_LOCK=y -# end of FAT Filesystem support - -# -# FreeRTOS -# - -# -# Kernel -# -# CONFIG_FREERTOS_SMP is not set -CONFIG_FREERTOS_UNICORE=y -CONFIG_FREERTOS_HZ=100 -CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y -# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set -# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set -CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y -CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 -CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536 -# CONFIG_FREERTOS_USE_IDLE_HOOK is not set -# CONFIG_FREERTOS_USE_TICK_HOOK is not set -CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 -# CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY is not set -CONFIG_FREERTOS_USE_TIMERS=y -CONFIG_FREERTOS_TIMER_SERVICE_TASK_NAME="Tmr Svc" -# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU0 is not set -CONFIG_FREERTOS_TIMER_TASK_NO_AFFINITY=y -CONFIG_FREERTOS_TIMER_SERVICE_TASK_CORE_AFFINITY=0x7FFFFFFF -CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 -CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 -CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 -CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 -CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES=1 -# CONFIG_FREERTOS_USE_TRACE_FACILITY is not set -# CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES is not set -# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set -# CONFIG_FREERTOS_USE_APPLICATION_TASK_TAG is not set -# end of Kernel - -# -# Port -# -CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y -# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set -CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y -# CONFIG_FREERTOS_TASK_PRE_DELETION_HOOK is not set -# CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set -CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y -CONFIG_FREERTOS_ISR_STACKSIZE=1536 -CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y -CONFIG_FREERTOS_TICK_SUPPORT_SYSTIMER=y -CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL1=y -# CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL3 is not set -CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER=y -# CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set -# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set -# end of Port - -# -# Extra -# -# end of Extra - -CONFIG_FREERTOS_PORT=y -CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF -CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y -CONFIG_FREERTOS_DEBUG_OCDAWARE=y -CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y -CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH=y -CONFIG_FREERTOS_NUMBER_OF_CORES=1 -# end of FreeRTOS - -# -# Hardware Abstraction Layer (HAL) and Low Level (LL) -# -CONFIG_HAL_ASSERTION_EQUALS_SYSTEM=y -# CONFIG_HAL_ASSERTION_DISABLE is not set -# CONFIG_HAL_ASSERTION_SILENT is not set -# CONFIG_HAL_ASSERTION_ENABLE is not set -CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2 -CONFIG_HAL_SYSTIMER_USE_ROM_IMPL=y -CONFIG_HAL_WDT_USE_ROM_IMPL=y -CONFIG_HAL_SPI_MASTER_FUNC_IN_IRAM=y -CONFIG_HAL_SPI_SLAVE_FUNC_IN_IRAM=y -# end of Hardware Abstraction Layer (HAL) and Low Level (LL) - -# -# Heap memory debugging -# -CONFIG_HEAP_POISONING_DISABLED=y -# CONFIG_HEAP_POISONING_LIGHT is not set -# CONFIG_HEAP_POISONING_COMPREHENSIVE is not set -CONFIG_HEAP_TRACING_OFF=y -# CONFIG_HEAP_TRACING_STANDALONE is not set -# CONFIG_HEAP_TRACING_TOHOST is not set -# CONFIG_HEAP_USE_HOOKS is not set -# CONFIG_HEAP_TASK_TRACKING is not set -# CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set -CONFIG_HEAP_TLSF_USE_ROM_IMPL=y -# end of Heap memory debugging - -# -# IEEE 802.15.4 -# -CONFIG_IEEE802154_ENABLED=y -CONFIG_IEEE802154_RX_BUFFER_SIZE=20 -# CONFIG_IEEE802154_CCA_CARRIER is not set -CONFIG_IEEE802154_CCA_ED=y -# CONFIG_IEEE802154_CCA_CARRIER_OR_ED is not set -# CONFIG_IEEE802154_CCA_CARRIER_AND_ED is not set -CONFIG_IEEE802154_CCA_MODE=1 -CONFIG_IEEE802154_CCA_THRESHOLD=-60 -CONFIG_IEEE802154_PENDING_TABLE_SIZE=20 -# CONFIG_IEEE802154_MULTI_PAN_ENABLE is not set -# CONFIG_IEEE802154_TIMING_OPTIMIZATION is not set -# CONFIG_IEEE802154_DEBUG is not set -# end of IEEE 802.15.4 - -# -# Log -# - -# -# Log Level -# -# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set -# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set -# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set -CONFIG_LOG_DEFAULT_LEVEL_INFO=y -# CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set -# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set -CONFIG_LOG_DEFAULT_LEVEL=3 -CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y -# CONFIG_LOG_MAXIMUM_LEVEL_DEBUG is not set -# CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set -CONFIG_LOG_MAXIMUM_LEVEL=3 - -# -# Level Settings -# -# CONFIG_LOG_MASTER_LEVEL is not set -CONFIG_LOG_DYNAMIC_LEVEL_CONTROL=y -# CONFIG_LOG_TAG_LEVEL_IMPL_NONE is not set -# CONFIG_LOG_TAG_LEVEL_IMPL_LINKED_LIST is not set -CONFIG_LOG_TAG_LEVEL_IMPL_CACHE_AND_LINKED_LIST=y -# CONFIG_LOG_TAG_LEVEL_CACHE_ARRAY is not set -CONFIG_LOG_TAG_LEVEL_CACHE_BINARY_MIN_HEAP=y -CONFIG_LOG_TAG_LEVEL_IMPL_CACHE_SIZE=31 -# end of Level Settings -# end of Log Level - -# -# Format -# -CONFIG_LOG_COLORS=y -CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y -# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set -# end of Format -# end of Log - -# -# LWIP -# -CONFIG_LWIP_ENABLE=y -CONFIG_LWIP_LOCAL_HOSTNAME="espressif" -# CONFIG_LWIP_NETIF_API is not set -CONFIG_LWIP_TCPIP_TASK_PRIO=18 -# CONFIG_LWIP_TCPIP_CORE_LOCKING is not set -# CONFIG_LWIP_CHECK_THREAD_SAFETY is not set -CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# CONFIG_LWIP_L2_TO_L3_COPY is not set -# CONFIG_LWIP_IRAM_OPTIMIZATION is not set -# CONFIG_LWIP_EXTRA_IRAM_OPTIMIZATION is not set -CONFIG_LWIP_TIMERS_ONDEMAND=y -CONFIG_LWIP_ND6=y -# CONFIG_LWIP_FORCE_ROUTER_FORWARDING is not set -CONFIG_LWIP_MAX_SOCKETS=10 -# CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set -# CONFIG_LWIP_SO_LINGER is not set -CONFIG_LWIP_SO_REUSE=y -CONFIG_LWIP_SO_REUSE_RXTOALL=y -# CONFIG_LWIP_SO_RCVBUF is not set -# CONFIG_LWIP_NETBUF_RECVINFO is not set -CONFIG_LWIP_IP_DEFAULT_TTL=64 -CONFIG_LWIP_IP4_FRAG=y -CONFIG_LWIP_IP6_FRAG=y -# CONFIG_LWIP_IP4_REASSEMBLY is not set -# CONFIG_LWIP_IP6_REASSEMBLY is not set -CONFIG_LWIP_IP_REASS_MAX_PBUFS=10 -# CONFIG_LWIP_IP_FORWARD is not set -# CONFIG_LWIP_STATS is not set -CONFIG_LWIP_ESP_GRATUITOUS_ARP=y -CONFIG_LWIP_GARP_TMR_INTERVAL=60 -CONFIG_LWIP_ESP_MLDV6_REPORT=y -CONFIG_LWIP_MLDV6_TMR_INTERVAL=40 -CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 -CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y -# CONFIG_LWIP_DHCP_DOES_ACD_CHECK is not set -# CONFIG_LWIP_DHCP_DOES_NOT_CHECK_OFFERED_IP is not set -# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set -CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y -# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set -CONFIG_LWIP_DHCP_OPTIONS_LEN=68 -CONFIG_LWIP_NUM_NETIF_CLIENT_DATA=0 -CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1 - -# -# DHCP server -# -CONFIG_LWIP_DHCPS=y -CONFIG_LWIP_DHCPS_LEASE_UNIT=60 -CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 -CONFIG_LWIP_DHCPS_STATIC_ENTRIES=y -CONFIG_LWIP_DHCPS_ADD_DNS=y -# end of DHCP server - -# CONFIG_LWIP_AUTOIP is not set -CONFIG_LWIP_IPV4=y -CONFIG_LWIP_IPV6=y -# CONFIG_LWIP_IPV6_AUTOCONFIG is not set -CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 -# CONFIG_LWIP_IPV6_FORWARD is not set -# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -CONFIG_LWIP_NETIF_LOOPBACK=y -CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 - -# -# TCP -# -CONFIG_LWIP_MAX_ACTIVE_TCP=16 -CONFIG_LWIP_MAX_LISTENING_TCP=16 -CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y -CONFIG_LWIP_TCP_MAXRTX=12 -CONFIG_LWIP_TCP_SYNMAXRTX=12 -CONFIG_LWIP_TCP_MSS=1440 -CONFIG_LWIP_TCP_TMR_INTERVAL=250 -CONFIG_LWIP_TCP_MSL=60000 -CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=20000 -CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5760 -CONFIG_LWIP_TCP_WND_DEFAULT=5760 -CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -CONFIG_LWIP_TCP_ACCEPTMBOX_SIZE=6 -CONFIG_LWIP_TCP_QUEUE_OOSEQ=y -CONFIG_LWIP_TCP_OOSEQ_TIMEOUT=6 -CONFIG_LWIP_TCP_OOSEQ_MAX_PBUFS=4 -# CONFIG_LWIP_TCP_SACK_OUT is not set -CONFIG_LWIP_TCP_OVERSIZE_MSS=y -# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set -# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set -CONFIG_LWIP_TCP_RTO_TIME=1500 -# end of TCP - -# -# UDP -# -CONFIG_LWIP_MAX_UDP_PCBS=16 -CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 -# end of UDP - -# -# Checksums -# -# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set -# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set -CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y -# end of Checksums - -CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y -# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set -CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF -CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 -CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -CONFIG_LWIP_IPV6_ND6_NUM_PREFIXES=5 -CONFIG_LWIP_IPV6_ND6_NUM_ROUTERS=3 -CONFIG_LWIP_IPV6_ND6_NUM_DESTINATIONS=10 -# CONFIG_LWIP_PPP_SUPPORT is not set -# CONFIG_LWIP_SLIP_SUPPORT is not set - -# -# ICMP -# -CONFIG_LWIP_ICMP=y -# CONFIG_LWIP_MULTICAST_PING is not set -# CONFIG_LWIP_BROADCAST_PING is not set -# end of ICMP - -# -# LWIP RAW API -# -CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API - -# -# SNTP -# -CONFIG_LWIP_SNTP_MAX_SERVERS=1 -# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set -CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000 -CONFIG_LWIP_SNTP_STARTUP_DELAY=y -CONFIG_LWIP_SNTP_MAXIMUM_STARTUP_DELAY=5000 -# end of SNTP - -# -# DNS -# -CONFIG_LWIP_DNS_MAX_HOST_IP=1 -CONFIG_LWIP_DNS_MAX_SERVERS=3 -# CONFIG_LWIP_FALLBACK_DNS_SERVER_SUPPORT is not set -# CONFIG_LWIP_DNS_SETSERVER_WITH_NETIF is not set -# end of DNS - -CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7 -CONFIG_LWIP_ESP_LWIP_ASSERT=y - -# -# Hooks -# -# CONFIG_LWIP_HOOK_TCP_ISN_NONE is not set -CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT=y -# CONFIG_LWIP_HOOK_TCP_ISN_CUSTOM is not set -CONFIG_LWIP_HOOK_IP6_ROUTE_NONE=y -# CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT is not set -# CONFIG_LWIP_HOOK_IP6_ROUTE_CUSTOM is not set -CONFIG_LWIP_HOOK_ND6_GET_GW_NONE=y -# CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT is not set -# CONFIG_LWIP_HOOK_ND6_GET_GW_CUSTOM is not set -CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE=y -# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_DEFAULT is not set -# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM is not set -CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y -# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set -# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set -CONFIG_LWIP_HOOK_DNS_EXT_RESOLVE_NONE=y -# CONFIG_LWIP_HOOK_DNS_EXT_RESOLVE_CUSTOM is not set -CONFIG_LWIP_HOOK_IP6_INPUT_NONE=y -# CONFIG_LWIP_HOOK_IP6_INPUT_DEFAULT is not set -# CONFIG_LWIP_HOOK_IP6_INPUT_CUSTOM is not set -# end of Hooks - -# CONFIG_LWIP_DEBUG is not set -# end of LWIP - -# -# mbedTLS -# -CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y -# CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set -# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set -CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y -CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384 -CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096 -# CONFIG_MBEDTLS_DYNAMIC_BUFFER is not set -# CONFIG_MBEDTLS_DEBUG is not set - -# -# mbedTLS v3.x related -# -# CONFIG_MBEDTLS_SSL_PROTO_TLS1_3 is not set -# CONFIG_MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH is not set -# CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set -# CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set -CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE=y -CONFIG_MBEDTLS_PKCS7_C=y -# end of mbedTLS v3.x related - -# -# Certificate Bundle -# -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN is not set -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set -# CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEPRECATED_LIST is not set -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200 -# end of Certificate Bundle - -# CONFIG_MBEDTLS_ECP_RESTARTABLE is not set -CONFIG_MBEDTLS_CMAC_C=y -CONFIG_MBEDTLS_HARDWARE_AES=y -CONFIG_MBEDTLS_AES_USE_INTERRUPT=y -CONFIG_MBEDTLS_AES_INTERRUPT_LEVEL=0 -CONFIG_MBEDTLS_GCM_SUPPORT_NON_AES_CIPHER=y -CONFIG_MBEDTLS_HARDWARE_MPI=y -CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI=y -CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y -CONFIG_MBEDTLS_MPI_INTERRUPT_LEVEL=0 -CONFIG_MBEDTLS_HARDWARE_SHA=y -CONFIG_MBEDTLS_HARDWARE_ECC=y -CONFIG_MBEDTLS_ECC_OTHER_CURVES_SOFT_FALLBACK=y -CONFIG_MBEDTLS_ROM_MD5=y -# CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set -# CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set -CONFIG_MBEDTLS_HAVE_TIME=y -# CONFIG_MBEDTLS_PLATFORM_TIME_ALT is not set -# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set -CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y -CONFIG_MBEDTLS_SHA512_C=y -# CONFIG_MBEDTLS_SHA3_C is not set -CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y -# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set -# CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set -# CONFIG_MBEDTLS_TLS_DISABLED is not set -CONFIG_MBEDTLS_TLS_SERVER=y -CONFIG_MBEDTLS_TLS_CLIENT=y -CONFIG_MBEDTLS_TLS_ENABLED=y - -# -# TLS Key Exchange Methods -# -# CONFIG_MBEDTLS_PSK_MODES is not set -CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y -# end of TLS Key Exchange Methods - -CONFIG_MBEDTLS_SSL_RENEGOTIATION=y -CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y -# CONFIG_MBEDTLS_SSL_PROTO_GMTSSL1_1 is not set -# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set -CONFIG_MBEDTLS_SSL_ALPN=y -CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y -CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y - -# -# Symmetric Ciphers -# -CONFIG_MBEDTLS_AES_C=y -# CONFIG_MBEDTLS_CAMELLIA_C is not set -# CONFIG_MBEDTLS_DES_C is not set -# CONFIG_MBEDTLS_BLOWFISH_C is not set -# CONFIG_MBEDTLS_XTEA_C is not set -CONFIG_MBEDTLS_CCM_C=y -CONFIG_MBEDTLS_GCM_C=y -# CONFIG_MBEDTLS_NIST_KW_C is not set -# end of Symmetric Ciphers - -# CONFIG_MBEDTLS_RIPEMD160_C is not set - -# -# Certificates -# -CONFIG_MBEDTLS_PEM_PARSE_C=y -CONFIG_MBEDTLS_PEM_WRITE_C=y -CONFIG_MBEDTLS_X509_CRL_PARSE_C=y -CONFIG_MBEDTLS_X509_CSR_PARSE_C=y -# end of Certificates - -CONFIG_MBEDTLS_ECP_C=y -CONFIG_MBEDTLS_PK_PARSE_EC_EXTENDED=y -CONFIG_MBEDTLS_PK_PARSE_EC_COMPRESSED=y -# CONFIG_MBEDTLS_DHM_C is not set -CONFIG_MBEDTLS_ECDH_C=y -CONFIG_MBEDTLS_ECDSA_C=y -# CONFIG_MBEDTLS_ECJPAKE_C is not set -CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y -CONFIG_MBEDTLS_ECP_NIST_OPTIM=y -CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM=y -# CONFIG_MBEDTLS_POLY1305_C is not set -# CONFIG_MBEDTLS_CHACHA20_C is not set -# CONFIG_MBEDTLS_HKDF_C is not set -# CONFIG_MBEDTLS_THREADING_C is not set -CONFIG_MBEDTLS_ERROR_STRINGS=y -CONFIG_MBEDTLS_FS_IO=y -# end of mbedTLS - -# -# ESP-MQTT Configurations -# -CONFIG_MQTT_PROTOCOL_311=y -# CONFIG_MQTT_PROTOCOL_5 is not set -CONFIG_MQTT_TRANSPORT_SSL=y -CONFIG_MQTT_TRANSPORT_WEBSOCKET=y -CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y -# CONFIG_MQTT_MSG_ID_INCREMENTAL is not set -# CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set -# CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set -# CONFIG_MQTT_USE_CUSTOM_CONFIG is not set -# CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set -# CONFIG_MQTT_CUSTOM_OUTBOX is not set -# end of ESP-MQTT Configurations - -# -# Newlib -# -CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y -# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set -# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set -# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set -# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set -CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y -# CONFIG_NEWLIB_NANO_FORMAT is not set -CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y -# CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC is not set -# CONFIG_NEWLIB_TIME_SYSCALL_USE_HRT is not set -# CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set -# end of Newlib - -# -# NVS -# -# CONFIG_NVS_ENCRYPTION is not set -# CONFIG_NVS_ASSERT_ERROR_CHECK is not set -# CONFIG_NVS_LEGACY_DUP_KEYS_COMPATIBILITY is not set -# end of NVS - -# -# OpenThread -# -# CONFIG_OPENTHREAD_ENABLED is not set - -# -# OpenThread Spinel -# -# CONFIG_OPENTHREAD_SPINEL_ONLY is not set -# end of OpenThread Spinel -# end of OpenThread - -# -# Protocomm -# -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0=y -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1=y -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2=y -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_PATCH_VERSION=y -# end of Protocomm - -# -# PThreads -# -CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5 -CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 -CONFIG_PTHREAD_STACK_MIN=768 -CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1 -CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread" -# end of PThreads - -# -# MMU Config -# -CONFIG_MMU_PAGE_SIZE_64KB=y -CONFIG_MMU_PAGE_MODE="64KB" -CONFIG_MMU_PAGE_SIZE=0x10000 -# end of MMU Config - -# -# Main Flash configuration -# - -# -# SPI Flash behavior when brownout -# -CONFIG_SPI_FLASH_BROWNOUT_RESET_XMC=y -CONFIG_SPI_FLASH_BROWNOUT_RESET=y -# end of SPI Flash behavior when brownout - -# -# Optional and Experimental Features (READ DOCS FIRST) -# - -# -# Features here require specific hardware (READ DOCS FIRST!) -# -# CONFIG_SPI_FLASH_AUTO_SUSPEND is not set -CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50 -# CONFIG_SPI_FLASH_FORCE_ENABLE_XMC_C_SUSPEND is not set -# end of Optional and Experimental Features (READ DOCS FIRST) -# end of Main Flash configuration - -# -# SPI Flash driver -# -# CONFIG_SPI_FLASH_VERIFY_WRITE is not set -# CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set -CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y -# CONFIG_SPI_FLASH_ROM_IMPL is not set -CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y -# CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set -# CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set -# CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set -CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y -CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20 -CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=1 -CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192 -# CONFIG_SPI_FLASH_SIZE_OVERRIDE is not set -# CONFIG_SPI_FLASH_CHECK_ERASE_TIMEOUT_DISABLED is not set -# CONFIG_SPI_FLASH_OVERRIDE_CHIP_DRIVER_LIST is not set - -# -# Auto-detect flash chips -# -CONFIG_SPI_FLASH_VENDOR_XMC_SUPPORTED=y -# CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP is not set -# CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP is not set -# CONFIG_SPI_FLASH_SUPPORT_GD_CHIP is not set -# CONFIG_SPI_FLASH_SUPPORT_WINBOND_CHIP is not set -# CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP is not set -# CONFIG_SPI_FLASH_SUPPORT_TH_CHIP is not set -# end of Auto-detect flash chips - -CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y -# end of SPI Flash driver - -# -# SPIFFS Configuration -# -CONFIG_SPIFFS_MAX_PARTITIONS=3 - -# -# SPIFFS Cache Configuration -# -CONFIG_SPIFFS_CACHE=y -CONFIG_SPIFFS_CACHE_WR=y -# CONFIG_SPIFFS_CACHE_STATS is not set -# end of SPIFFS Cache Configuration - -CONFIG_SPIFFS_PAGE_CHECK=y -CONFIG_SPIFFS_GC_MAX_RUNS=10 -# CONFIG_SPIFFS_GC_STATS is not set -CONFIG_SPIFFS_PAGE_SIZE=256 -CONFIG_SPIFFS_OBJ_NAME_LEN=32 -# CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set -CONFIG_SPIFFS_USE_MAGIC=y -CONFIG_SPIFFS_USE_MAGIC_LENGTH=y -CONFIG_SPIFFS_META_LENGTH=4 -CONFIG_SPIFFS_USE_MTIME=y - -# -# Debug Configuration -# -# CONFIG_SPIFFS_DBG is not set -# CONFIG_SPIFFS_API_DBG is not set -# CONFIG_SPIFFS_GC_DBG is not set -# CONFIG_SPIFFS_CACHE_DBG is not set -# CONFIG_SPIFFS_CHECK_DBG is not set -# CONFIG_SPIFFS_TEST_VISUALISATION is not set -# end of Debug Configuration -# end of SPIFFS Configuration - -# -# TCP Transport -# - -# -# Websocket -# -CONFIG_WS_TRANSPORT=y -CONFIG_WS_BUFFER_SIZE=1024 -# CONFIG_WS_DYNAMIC_BUFFER is not set -# end of Websocket -# end of TCP Transport - -# -# Ultra Low Power (ULP) Co-processor -# -# CONFIG_ULP_COPROC_ENABLED is not set - -# -# ULP Debugging Options -# -# end of ULP Debugging Options -# end of Ultra Low Power (ULP) Co-processor - -# -# Unity unit testing library -# -CONFIG_UNITY_ENABLE_FLOAT=y -CONFIG_UNITY_ENABLE_DOUBLE=y -# CONFIG_UNITY_ENABLE_64BIT is not set -# CONFIG_UNITY_ENABLE_COLOR is not set -CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y -# CONFIG_UNITY_ENABLE_FIXTURE is not set -# CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set -# end of Unity unit testing library - -# -# Virtual file system -# -CONFIG_VFS_SUPPORT_IO=y -CONFIG_VFS_SUPPORT_DIR=y -CONFIG_VFS_SUPPORT_SELECT=y -CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT=y -# CONFIG_VFS_SELECT_IN_RAM is not set -CONFIG_VFS_SUPPORT_TERMIOS=y -CONFIG_VFS_MAX_COUNT=8 - -# -# Host File System I/O (Semihosting) -# -CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1 -# end of Host File System I/O (Semihosting) - -CONFIG_VFS_INITIALIZE_DEV_NULL=y -# end of Virtual file system - -# -# Wear Levelling -# -# CONFIG_WL_SECTOR_SIZE_512 is not set -CONFIG_WL_SECTOR_SIZE_4096=y -CONFIG_WL_SECTOR_SIZE=4096 -# end of Wear Levelling - -# -# Wi-Fi Provisioning Manager -# -CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16 -CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30 -CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN=y -# CONFIG_WIFI_PROV_STA_FAST_SCAN is not set -# end of Wi-Fi Provisioning Manager - -# -# PRG32 framework -# -CONFIG_PRG32_DISPLAY_ILI9341=y -CONFIG_PRG32_SPLASH_ENABLED=y -CONFIG_PRG32_SPLASH_DURATION_MS=900 -CONFIG_PRG32_SPLASH_SOUND_ENABLED=y -# CONFIG_PRG32_CART_RAM_CLASSROOM is not set -CONFIG_PRG32_CART_RAM_EXTENDED=y -# CONFIG_PRG32_CART_RAM_LARGE_128 is not set -# CONFIG_PRG32_CART_RAM_CUSTOM is not set -CONFIG_PRG32_CART_RAM_KIB=64 -CONFIG_PRG32_CART_MAX_KIB=64 - -# -# Performance metrics -# -# CONFIG_PRG32_METRICS_ENABLE is not set -# end of Performance metrics - -# -# CartridgeStore integration -# -CONFIG_PRG32_STORE_URL="" -# end of CartridgeStore integration -# end of PRG32 framework - -# -# PRG32 Audio -# -CONFIG_PRG32_AUDIO_ENABLED=y -CONFIG_PRG32_AUDIO_SAMPLE_RATE=22050 -CONFIG_PRG32_AUDIO_MODE_MONO=y -# CONFIG_PRG32_AUDIO_MODE_STEREO is not set -CONFIG_PRG32_AUDIO_MAX_VOICES=6 -CONFIG_PRG32_AUDIO_I2S_BCLK_GPIO=4 -CONFIG_PRG32_AUDIO_I2S_LRCLK_GPIO=11 -CONFIG_PRG32_AUDIO_I2S_DATA_GPIO=23 -CONFIG_PRG32_AUDIO_I2S_SD_GPIO=-1 -# end of PRG32 Audio - -# -# ESP WebSocket client -# -# CONFIG_ESP_WS_CLIENT_ENABLE_DYNAMIC_BUFFER is not set -# CONFIG_ESP_WS_CLIENT_SEPARATE_TX_LOCK is not set -# end of ESP WebSocket client - -# -# mDNS -# -CONFIG_MDNS_MAX_INTERFACES=3 -CONFIG_MDNS_MAX_SERVICES=10 -CONFIG_MDNS_TASK_PRIORITY=1 -CONFIG_MDNS_ACTION_QUEUE_LEN=16 -CONFIG_MDNS_TASK_STACK_SIZE=4096 -# CONFIG_MDNS_TASK_AFFINITY_NO_AFFINITY is not set -CONFIG_MDNS_TASK_AFFINITY_CPU0=y -CONFIG_MDNS_TASK_AFFINITY=0x0 - -# -# MDNS Memory Configuration -# -CONFIG_MDNS_TASK_CREATE_FROM_INTERNAL=y -CONFIG_MDNS_MEMORY_ALLOC_INTERNAL=y -# CONFIG_MDNS_MEMORY_CUSTOM_IMPL is not set -# end of MDNS Memory Configuration - -CONFIG_MDNS_SERVICE_ADD_TIMEOUT_MS=2000 -CONFIG_MDNS_TIMER_PERIOD_MS=100 -# CONFIG_MDNS_NETWORKING_SOCKET is not set -# CONFIG_MDNS_SKIP_SUPPRESSING_OWN_QUERIES is not set -# CONFIG_MDNS_ENABLE_DEBUG_PRINTS is not set -CONFIG_MDNS_ENABLE_CONSOLE_CLI=y -# CONFIG_MDNS_RESPOND_REVERSE_QUERIES is not set -CONFIG_MDNS_MULTIPLE_INSTANCE=y - -# -# MDNS Predefined interfaces -# -CONFIG_MDNS_PREDEF_NETIF_STA=y -CONFIG_MDNS_PREDEF_NETIF_AP=y -CONFIG_MDNS_PREDEF_NETIF_ETH=y -# end of MDNS Predefined interfaces -# end of mDNS -# end of Component config - -# CONFIG_IDF_EXPERIMENTAL_FEATURES is not set - -# Deprecated options for backward compatibility -# CONFIG_APP_BUILD_TYPE_ELF_RAM is not set -# CONFIG_NO_BLOBS is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set -CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y -# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set -CONFIG_LOG_BOOTLOADER_LEVEL=3 -# CONFIG_APP_ROLLBACK_ENABLE is not set -# CONFIG_FLASH_ENCRYPTION_ENABLED is not set -# CONFIG_FLASHMODE_QIO is not set -# CONFIG_FLASHMODE_QOUT is not set -CONFIG_FLASHMODE_DIO=y -# CONFIG_FLASHMODE_DOUT is not set -CONFIG_MONITOR_BAUD=115200 -CONFIG_OPTIMIZATION_LEVEL_DEBUG=y -CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y -CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y -# CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set -# CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set -CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y -# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set -# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set -CONFIG_OPTIMIZATION_ASSERTION_LEVEL=2 -# CONFIG_CXX_EXCEPTIONS is not set -CONFIG_STACK_CHECK_NONE=y -# CONFIG_STACK_CHECK_NORM is not set -# CONFIG_STACK_CHECK_STRONG is not set -# CONFIG_STACK_CHECK_ALL is not set -# CONFIG_WARN_WRITE_STRINGS is not set -# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set -CONFIG_ESP32_APPTRACE_DEST_NONE=y -CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y -CONFIG_SW_COEXIST_ENABLE=y -CONFIG_ESP32_WIFI_SW_COEXIST_ENABLE=y -CONFIG_ESP_WIFI_SW_COEXIST_ENABLE=y -# CONFIG_EXTERNAL_COEX_ENABLE is not set -# CONFIG_ESP_WIFI_EXTERNAL_COEXIST_ENABLE is not set -# CONFIG_MCPWM_ISR_IN_IRAM is not set -# CONFIG_EVENT_LOOP_PROFILING is not set -CONFIG_POST_EVENTS_FROM_ISR=y -CONFIG_POST_EVENTS_FROM_IRAM_ISR=y -CONFIG_GDBSTUB_SUPPORT_TASKS=y -CONFIG_GDBSTUB_MAX_TASKS=32 -# CONFIG_OTA_ALLOW_HTTP is not set -# CONFIG_ESP_SYSTEM_PD_FLASH is not set -CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y -# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set -CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 -CONFIG_ESP32_PHY_MAX_TX_POWER=20 -# CONFIG_REDUCE_PHY_TX_POWER is not set -# CONFIG_ESP32_REDUCE_PHY_TX_POWER is not set -CONFIG_ESP_SYSTEM_PM_POWER_DOWN_CPU=y -CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 -CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304 -CONFIG_MAIN_TASK_STACK_SIZE=3584 -CONFIG_CONSOLE_UART_DEFAULT=y -# CONFIG_CONSOLE_UART_CUSTOM is not set -# CONFIG_CONSOLE_UART_NONE is not set -# CONFIG_ESP_CONSOLE_UART_NONE is not set -CONFIG_CONSOLE_UART=y -CONFIG_CONSOLE_UART_NUM=0 -CONFIG_CONSOLE_UART_BAUDRATE=115200 -CONFIG_INT_WDT=y -CONFIG_INT_WDT_TIMEOUT_MS=300 -CONFIG_TASK_WDT=y -CONFIG_ESP_TASK_WDT=y -# CONFIG_TASK_WDT_PANIC is not set -CONFIG_TASK_WDT_TIMEOUT_S=5 -CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y -# CONFIG_ESP32_DEBUG_STUBS_ENABLE is not set -CONFIG_BROWNOUT_DET=y -CONFIG_BROWNOUT_DET_LVL_SEL_7=y -# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set -CONFIG_BROWNOUT_DET_LVL=7 -CONFIG_IPC_TASK_STACK_SIZE=1024 -CONFIG_TIMER_TASK_STACK_SIZE=3584 -CONFIG_ESP32_WIFI_ENABLED=y -CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 -CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 -# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set -CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y -CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 -CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 -# CONFIG_ESP32_WIFI_CSI_ENABLED is not set -CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y -CONFIG_ESP32_WIFI_TX_BA_WIN=6 -CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y -CONFIG_ESP32_WIFI_RX_BA_WIN=6 -CONFIG_ESP32_WIFI_NVS_ENABLED=y -CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 -CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 -CONFIG_ESP32_WIFI_IRAM_OPT=y -CONFIG_ESP32_WIFI_RX_IRAM_OPT=y -CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y -CONFIG_ESP32_WIFI_ENABLE_WPA3_OWE_STA=y -CONFIG_WPA_MBEDTLS_CRYPTO=y -CONFIG_WPA_MBEDTLS_TLS_CLIENT=y -# CONFIG_WPA_WAPI_PSK is not set -# CONFIG_WPA_SUITE_B_192 is not set -# CONFIG_WPA_11KV_SUPPORT is not set -# CONFIG_WPA_MBO_SUPPORT is not set -# CONFIG_WPA_DPP_SUPPORT is not set -# CONFIG_WPA_11R_SUPPORT is not set -# CONFIG_WPA_WPS_SOFTAP_REGISTRAR is not set -# CONFIG_WPA_WPS_STRICT is not set -# CONFIG_WPA_DEBUG_PRINT is not set -# CONFIG_WPA_TESTING_OPTIONS is not set -# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set -# CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set -CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y -CONFIG_TIMER_TASK_PRIORITY=1 -CONFIG_TIMER_TASK_STACK_DEPTH=2048 -CONFIG_TIMER_QUEUE_LENGTH=10 -# CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set -# CONFIG_HAL_ASSERTION_SILIENT is not set -# CONFIG_L2_TO_L3_COPY is not set -CONFIG_ESP_GRATUITOUS_ARP=y -CONFIG_GARP_TMR_INTERVAL=60 -CONFIG_TCPIP_RECVMBOX_SIZE=32 -CONFIG_TCP_MAXRTX=12 -CONFIG_TCP_SYNMAXRTX=12 -CONFIG_TCP_MSS=1440 -CONFIG_TCP_MSL=60000 -CONFIG_TCP_SND_BUF_DEFAULT=5760 -CONFIG_TCP_WND_DEFAULT=5760 -CONFIG_TCP_RECVMBOX_SIZE=6 -CONFIG_TCP_QUEUE_OOSEQ=y -CONFIG_TCP_OVERSIZE_MSS=y -# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set -# CONFIG_TCP_OVERSIZE_DISABLE is not set -CONFIG_UDP_RECVMBOX_SIZE=6 -CONFIG_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y -# CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set -CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF -# CONFIG_PPP_SUPPORT is not set -CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 -CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 -CONFIG_ESP32_PTHREAD_STACK_MIN=768 -CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1 -CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" -CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y -# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set -# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set -CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y -CONFIG_SUPPORT_TERMIOS=y -CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1 -# End of deprecated options diff --git a/tests/test_prg32.py b/tests/test_prg32.py index 2f91fbb..7316f32 100644 --- a/tests/test_prg32.py +++ b/tests/test_prg32.py @@ -45,7 +45,7 @@ def test_parse_partition_size_units(self) -> None: def test_read_partition_slot(self) -> None: offset, size = partition_handler.read_partition_slot( - ROOT / "partitions_prg32.csv", + ROOT / "profiles/partitions_prg32.csv", "cart0", ) self.assertEqual(offset, 0x210000) @@ -291,9 +291,137 @@ def test_upload_qemu_stages_cartridge_at_partition_offset(self) -> None: self.assertEqual(erased, b"\xff" * len(erased)) +def portable_header(mem_size: int, code_size: int = 4) -> bytes: + """Pack a minimal portable v2 header that declares mem_size bytes of RAM.""" + return env_variables.CART_HEADER_V2.pack( + env_variables.CART_MAGIC, + env_variables.CART_ABI_MAJOR, + env_variables.CART_ABI_MINOR, + env_variables.CART_HEADER_V2.size, + env_variables.PRG32_CART_FLAG_ABI_TABLE, + env_variables.FALLBACK_CART_LOAD_ADDR, + code_size, mem_size, 0, 0, 0, 0, + b"ram" + b"\0" * 29, + ABI_HASH, + 0, 0, 0, 0, 0, + env_variables.PRG32_IMPORT_MODEL_ABI_TABLE, + ) + + +class CartRamProfileTests(unittest.TestCase): + # A cartridge that fits the 64 KiB extended profile but not the + # 32 KiB classroom profile. + MEM_SIZE_40_KIB = 40 * 1024 + + def test_fallback_matches_default_firmware_profile(self) -> None: + self.assertEqual(env_variables.DEFAULT_CART_RAM_KIB, 64) + self.assertEqual(env_variables.FALLBACK_CART_RAM_SIZE, 64 * 1024) + for defaults in ("profiles/sdkconfig.defaults", "profiles/sdkconfig.defaults.qemu"): + text = (ROOT / defaults).read_text(encoding="utf-8") + self.assertIn("CONFIG_PRG32_CART_RAM_EXTENDED=y", text, defaults) + + def test_contract_uses_64_kib_without_runtime_info(self) -> None: + data = portable_header(self.MEM_SIZE_40_KIB) + b"\0\0\0\0" + runtime_handler.validate_cartridge_contract(data) + with self.assertRaisesRegex(SystemExit, "executable RAM"): + runtime_handler.validate_cartridge_contract( + data, + runtime={"cart_ram_size": 32 * 1024}, + ) + + def test_parse_cart_ram_kib_uses_kconfig_range(self) -> None: + self.assertEqual(runtime_handler.parse_cart_ram_kib("32"), 32) + self.assertEqual(runtime_handler.parse_cart_ram_kib("128"), 128) + for bad in ("8", "256", "big"): + with self.assertRaises(argparse.ArgumentTypeError): + runtime_handler.parse_cart_ram_kib(bad) + + def test_resolve_prefers_option_then_sdkconfig_then_default(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + sdkconfig = Path(tmp) / "sdkconfig" + self.assertEqual( + runtime_handler.resolve_cart_ram_size(None, sdkconfig)[0], + 64 * 1024, + ) + sdkconfig.write_text( + "CONFIG_PRG32_CART_RAM_CLASSROOM=y\n" + "CONFIG_PRG32_CART_RAM_KIB=32\n", + encoding="utf-8", + ) + self.assertEqual( + runtime_handler.resolve_cart_ram_size(None, sdkconfig), + (32 * 1024, str(sdkconfig)), + ) + self.assertEqual( + runtime_handler.resolve_cart_ram_size(128, sdkconfig)[0], + 128 * 1024, + ) + + def _stage(self, tmp_path: Path, cart_ram_kib: int | None) -> None: + flash = tmp_path / "qemu_flash.bin" + cart = tmp_path / "big.prg32" + partitions = tmp_path / "partitions.csv" + flash.write_bytes(b"\x00" * 512) + cart.write_bytes(portable_header(self.MEM_SIZE_40_KIB) + b"\0\0\0\0") + partitions.write_text("cart0, data, 0x40, 0x10, 256,\n", encoding="utf-8") + upload_qemu.upload_qemu(argparse.Namespace( + flash=str(flash), + cartridge=str(cart), + partitions=str(partitions), + slot="cart0", + cart_ram_kib=cart_ram_kib, + )) + + def test_qemu_upload_accepts_extended_cartridge_by_default(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + self._stage(Path(tmp), None) + + def test_qemu_upload_honours_classroom_option_and_sdkconfig(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + with self.assertRaisesRegex(SystemExit, "executable RAM"): + self._stage(Path(tmp), 32) + with tempfile.TemporaryDirectory() as tmp: + (Path(tmp) / "sdkconfig").write_text( + "CONFIG_PRG32_CART_RAM_KIB=32\n", encoding="utf-8" + ) + with self.assertRaisesRegex(SystemExit, "executable RAM"): + self._stage(Path(tmp), None) + # An explicit option overrides the sdkconfig profile. + self._stage(Path(tmp), 64) + + +class ModuleImportTests(unittest.TestCase): + def test_every_prg32_module_imports(self) -> None: + # Catches stale imports left behind by tooling refactors, such as + # helpers importing names that env_variables no longer defines. + import importlib + import pkgutil + import prg32 + + for module in pkgutil.walk_packages(prg32.__path__, "prg32."): + with self.subTest(module=module.name): + importlib.import_module(module.name) + + def test_inject_cartridge_is_shared_by_qemu_helpers(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + tmp_path = Path(tmp) + flash = tmp_path / "qemu_flash.bin" + cart = tmp_path / "game.prg32" + partitions = tmp_path / "partitions.csv" + flash.write_bytes(b"\x00" * 256) + cart.write_bytes(portable_header(4) + b"\0\0\0\0") + partitions.write_text("cart0, data, 0x40, 0x10, 128,\n", encoding="utf-8") + upload_qemu.inject_cartridge( + str(cart), + flash=str(flash), + partitions=str(partitions), + ) + self.assertEqual(flash.read_bytes()[0x10:0x14], b"PRG2") + + class DoctorTests(unittest.TestCase): def test_host_only_doctor_does_not_require_esp_idf(self) -> None: - rc = prg32_main(["doctor", "--host-only", "--partitions", str(ROOT / "partitions_prg32.csv")]) + rc = prg32_main(["doctor", "--host-only", "--partitions", str(ROOT / "profiles/partitions_prg32.csv")]) self.assertEqual(rc, 0) diff --git a/tests/test_prg32_audio_engine.py b/tests/test_prg32_audio_engine.py new file mode 100644 index 0000000..ccbb662 --- /dev/null +++ b/tests/test_prg32_audio_engine.py @@ -0,0 +1,175 @@ +"""Host tests of the firmware synth decoder and tracker timing. + +The real ``audio_synth.c`` and ``audio_tracker.c`` are compiled with a host C +compiler. Small stub headers replace ESP-IDF and FreeRTOS, and the test file +records the mixer calls that the tracker makes. +""" + +from pathlib import Path +import shutil +import subprocess +import tempfile + +import pytest + + +ROOT = Path(__file__).resolve().parents[1] +AUDIO = ROOT / "components" / "prg32_audio" + +STUB_HEADERS = { + "sdkconfig.h": "", + "freertos/FreeRTOS.h": "#include \n", + "freertos/semphr.h": "typedef void *SemaphoreHandle_t;\n", + "freertos/task.h": "typedef void *TaskHandle_t;\n", +} + +TEST_SOURCE = r""" +#include +#include +#include "audio_internal.h" + +prg32_audio_state_t g_prg32_audio; + +/* Mixer stubs: record NOTE_ON order and the tick it happened on. */ +static int note_count; +static uint8_t note_channels[64]; +static uint32_t note_ticks[64]; +static uint32_t current_tick; + +void prg32_audio_lock(void) {} +void prg32_audio_unlock(void) {} +void prg32_audio_note_on(uint8_t channel, uint8_t instrument, uint8_t note, + uint8_t volume) { + (void)instrument; (void)note; (void)volume; + if (note_count < 64) { + note_channels[note_count] = channel; + note_ticks[note_count] = current_tick; + } + note_count++; +} +void prg32_audio_note_off(uint8_t channel) { (void)channel; } +void prg32_audio_set_channel_volume(uint8_t channel, uint8_t volume) { + (void)channel; (void)volume; +} +void prg32_audio_set_channel_pan(uint8_t channel, int8_t pan) { + (void)channel; (void)pan; +} +int prg32_audio_play_sample(uint16_t sample_id, uint8_t volume, + uint16_t pitch) { + (void)sample_id; (void)volume; (void)pitch; + return 0; +} + +static void load_track(const prg32_audio_event_t *events, uint32_t count) { + memset(&g_prg32_audio, 0, sizeof(g_prg32_audio)); + g_prg32_audio.tracker.tempo_bpm = 125; /* 60000 / (125 * 4) = 120 ms */ + g_prg32_audio.tracks[0].events = events; + g_prg32_audio.tracks[0].event_count = count; + g_prg32_audio.tracks[0].present = true; + note_count = 0; + current_tick = 0; + prg32_audio_play_track(0); +} + +static void test_synth_decoding(void) { + for (unsigned wave = 0; wave < 4; wave++) { + for (unsigned pulse = 0; pulse < 16; pulse++) { + for (unsigned cutoff = 0; cutoff < 16; cutoff++) { + for (unsigned res = 0; res < 4; res++) { + prg32_instrument_desc_t desc = {0}; + prg32_audio_voice_t voice = {0}; + desc.sample_id = PRG32_AUDIO_SYNTH_ID(wave, pulse, + cutoff, res); + prg32_audio_synth_start(&voice, &desc, 60, 22050); + assert(voice.synth_state.waveform == wave); + assert(voice.synth_state.cutoff == cutoff); + assert(voice.synth_state.resonance == res); + assert(voice.synth_state.pulse_threshold == + (uint32_t)(((uint64_t)(pulse + 1u) << 32) / 17u)); + } + } + } + } + /* The example from the bug report used to decode resonance 6. */ + prg32_instrument_desc_t desc = {0}; + prg32_audio_voice_t voice = {0}; + desc.sample_id = PRG32_AUDIO_SYNTH_PULSE(8, 15, 0); + prg32_audio_synth_start(&voice, &desc, 60, 22050); + assert(voice.synth_state.cutoff == 15); + assert(voice.synth_state.resonance == 0); +} + +static void test_delta_zero_events_share_a_tick(void) { + /* A three-note chord, a four-tick wait, then one more note. */ + static const prg32_audio_event_t events[] = { + {0, PRG32_AUDIO_CMD_NOTE_ON, 0, 60}, + {0, PRG32_AUDIO_CMD_NOTE_ON, 1, 64}, + {4, PRG32_AUDIO_CMD_NOTE_ON, 2, 67}, + {0, PRG32_AUDIO_CMD_NOTE_ON, 3, 72}, + {0, PRG32_AUDIO_CMD_END, 0, 0}, + }; + load_track(events, 5); + + /* The first step plays the whole chord without waiting for a tick. */ + prg32_audio_tracker_step(1); + assert(note_count == 3); + for (int i = 0; i < 3; i++) { + assert(note_channels[i] == i); + assert(note_ticks[i] == 0); + } + + /* The next note arrives only after exactly four 120 ms ticks. */ + for (current_tick = 1; current_tick <= 4; current_tick++) { + assert(note_count == 3); + prg32_audio_tracker_step(120); + } + assert(note_count == 4); + assert(note_channels[3] == 3); + assert(note_ticks[3] == 4); + assert(!g_prg32_audio.tracker.active); +} + +static void test_delta_zero_jump_loop_is_capped(void) { + static const prg32_audio_event_t events[] = { + {0, PRG32_AUDIO_CMD_NOTE_ON, 0, 60}, + {0, PRG32_AUDIO_CMD_JUMP, 0, 0}, + }; + load_track(events, 2); + prg32_audio_tracker_step(1); /* must return instead of spinning */ + assert(note_count == 128); /* 256 events: NOTE_ON, JUMP, NOTE_ON, ... */ + assert(g_prg32_audio.tracker.active); +} + +int main(void) { + test_synth_decoding(); + test_delta_zero_events_share_a_tick(); + test_delta_zero_jump_loop_is_capped(); + return 0; +} +""" + + +def test_audio_synth_decoder_and_tracker_timing() -> None: + compiler = shutil.which("cc") + if compiler is None: + pytest.skip("host C compiler unavailable") + + with tempfile.TemporaryDirectory() as directory: + temporary = Path(directory) + for name, text in STUB_HEADERS.items(): + header = temporary / name + header.parent.mkdir(parents=True, exist_ok=True) + header.write_text(text, encoding="utf-8") + (temporary / "test.c").write_text(TEST_SOURCE, encoding="utf-8") + executable = temporary / "audio-engine-test" + subprocess.run( + [compiler, "-std=c99", "-Wall", "-Wextra", "-Werror", + "-I", str(temporary), + "-I", str(AUDIO), + "-I", str(AUDIO / "include"), + str(AUDIO / "audio_synth.c"), + str(AUDIO / "audio_tracker.c"), + str(temporary / "test.c"), "-o", str(executable)], + check=True, + ) + subprocess.run([str(executable)], check=True, stdout=subprocess.DEVNULL) diff --git a/tests/test_prg32_random.py b/tests/test_prg32_random.py index 5d540a2..186d611 100644 --- a/tests/test_prg32_random.py +++ b/tests/test_prg32_random.py @@ -4,17 +4,16 @@ import shutil import subprocess import tempfile - -import pytest +import unittest ROOT = Path(__file__).resolve().parents[1] -def test_random_number_range_and_rejection_sampling() -> None: +def check_random_number_range_and_rejection_sampling() -> None: compiler = shutil.which("cc") if compiler is None: - pytest.skip("host C compiler unavailable") + raise unittest.SkipTest("host C compiler unavailable") with tempfile.TemporaryDirectory() as directory: temporary = Path(directory) @@ -69,3 +68,8 @@ def test_random_number_range_and_rejection_sampling() -> None: check=True, ) subprocess.run([str(executable)], check=True) + + +class RandomNumberTests(unittest.TestCase): + def test_random_number_range_and_rejection_sampling(self) -> None: + check_random_number_range_and_rejection_sampling() diff --git a/tests/test_prg32_sprite_render.py b/tests/test_prg32_sprite_render.py index cb552ce..20f1b8a 100644 --- a/tests/test_prg32_sprite_render.py +++ b/tests/test_prg32_sprite_render.py @@ -3,17 +3,17 @@ import shutil import subprocess from pathlib import Path - -import pytest +import tempfile +import unittest ROOT = Path(__file__).resolve().parents[1] -def test_sprite_rendering_is_pixel_exact(tmp_path: Path) -> None: +def check_sprite_rendering_is_pixel_exact(tmp_path: Path) -> None: compiler = shutil.which("cc") if compiler is None: - pytest.skip("a host C compiler is required") + raise unittest.SkipTest("a host C compiler is required") harness = tmp_path / "sprite_render_test.c" harness.write_text( r''' @@ -102,3 +102,9 @@ def test_sprite_rendering_is_pixel_exact(tmp_path: Path) -> None: check=True, ) subprocess.run([str(executable)], check=True) + + +class SpriteRenderTests(unittest.TestCase): + def test_sprite_rendering_is_pixel_exact(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + check_sprite_rendering_is_pixel_exact(Path(tmp))