diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5fbd524ce..15361a6a2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,9 +10,9 @@ jobs: matrix: lua_ver: ['5.1', '5.3'] numbers: ['default', 'alternate'] - target: ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c6', 'esp32h2'] + target: ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32h2'] - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 @@ -31,7 +31,10 @@ jobs: shell: bash - name: Prepare default sdkconfig run: | + # Compose sdkconfig manually rather than overwrite checked in files cp sdkconfig.defaults sdkconfig + [ -e "sdkconfig.defaults.${{ matrix.target }}" ] && cat "sdkconfig.defaults.${{ matrix.target }}" >> sdkconfig || true + [ -e "sdkconfig.ci.${{ matrix.target }}" ] && cat "sdkconfig.ci.${{ matrix.target }}" >> sdkconfig || true shell: bash - name: Update config for Lua 5.1 if: ${{ matrix.lua_ver == '5.1' }} @@ -54,6 +57,10 @@ jobs: echo CONFIG_LUA_NUMBER_INT64=y >> sdkconfig echo CONFIG_LUA_NUMBER_DOUBLE=y >> sdkconfig shell: bash + - name: Show resulting sdkconfig + shell: bash + run: | + cat sdkconfig - name: Build firmware run: | make IDF_TARGET=${{ matrix.target }} diff --git a/.gitignore b/.gitignore index c0cc7b1e0..eb12f527a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ sdk/ cache/ -user_config.h server-ca.crt sdkconfig sdkconfig.old* @@ -13,6 +12,7 @@ bin version.txt managed_components/ dependencies.lock +.idf_tools_installed #ignore Eclipse project files .cproject diff --git a/components/base_nodemcu/CMakeLists.txt b/components/base_nodemcu/CMakeLists.txt index fdb2c3808..e589ccb84 100644 --- a/components/base_nodemcu/CMakeLists.txt +++ b/components/base_nodemcu/CMakeLists.txt @@ -2,6 +2,6 @@ idf_component_register( SRCS "ip_fmt.c" "user_main.c" INCLUDE_DIRS "include" REQUIRES "lua" - PRIV_REQUIRES "nvs_flash" "spiffs" "esp_netif" "driver" "vfs" + PRIV_REQUIRES "driver" "esp_netif" "esp_vfs_console" "nvs_flash" "vfs" "spiffs" LDFRAGMENTS "nodemcu.lf" ) diff --git a/components/base_nodemcu/user_main.c b/components/base_nodemcu/user_main.c index 64bdea5b6..8d3354938 100644 --- a/components/base_nodemcu/user_main.c +++ b/components/base_nodemcu/user_main.c @@ -14,8 +14,12 @@ #include "sdkconfig.h" #include "esp_system.h" #include "esp_event.h" -#include "esp_spiffs.h" #include "esp_netif.h" +#include "esp_vfs_dev.h" +#include "esp_vfs_cdcacm.h" +#include "esp_vfs_usb_serial_jtag.h" +#include "driver/uart_vfs.h" +#include "driver/usb_serial_jtag.h" #include "nvs_flash.h" #include "task/task.h" @@ -24,6 +28,10 @@ #include "freertos/FreeRTOS.h" #include "freertos/semphr.h" +#ifndef CONFIG_NODEMCU_AUTO_FORMAT_ON_BOOT +# define CONFIG_NODEMCU_AUTO_FORMAT_ON_BOOT 0 +#endif + // We don't get argument size data from the esp_event dispatch, so it's // not possible to copy and forward events from the default event queue @@ -94,7 +102,6 @@ static void start_lua () static void nodemcu_init(void) { - NODE_ERR("\n"); // Initialize platform first for lua modules. if( platform_init() != PLATFORM_OK ) { @@ -102,34 +109,8 @@ static void nodemcu_init(void) NODE_DBG("Can not init platform for modules.\n"); return; } - const char *label = CONFIG_NODEMCU_DEFAULT_SPIFFS_LABEL; - - esp_vfs_spiffs_conf_t spiffs_cfg = { - .base_path = "", - .partition_label = (label && label[0]) ? label : NULL, - .max_files = CONFIG_NODEMCU_MAX_OPEN_FILES, - .format_if_mount_failed = true, - }; - const char *reason = NULL; - switch(esp_vfs_spiffs_register(&spiffs_cfg)) - { - case ESP_OK: break; - case ESP_ERR_NO_MEM: - reason = "out of memory"; - break; - case ESP_ERR_INVALID_STATE: - reason = "already mounted, or encrypted"; - break; - case ESP_ERR_NOT_FOUND: - reason = "no SPIFFS partition found"; - break; - case ESP_FAIL: - reason = "failed to mount or format partition"; - break; - default: - reason = "unknown"; - break; - } + const char *reason = + platform_remount_default_fs(CONFIG_NODEMCU_AUTO_FORMAT_ON_BOOT); if (reason) printf("Failed to mount SPIFFS partition: %s\n", reason); } diff --git a/components/modules/CMakeLists.txt b/components/modules/CMakeLists.txt index 0fab0691b..85e897399 100644 --- a/components/modules/CMakeLists.txt +++ b/components/modules/CMakeLists.txt @@ -1,4 +1,6 @@ # Modules common to all chips +set(extra_requires +) set(wifi_modules "espnow.c" "wifi.c" @@ -64,6 +66,9 @@ if(IDF_TARGET STREQUAL "esp32") "touch.c" ${wifi_modules} ) + list(APPEND extra_requires + "driver_can" + ) elseif(IDF_TARGET STREQUAL "esp32s2") list(APPEND module_srcs "dac.c" @@ -81,6 +86,12 @@ elseif(IDF_TARGET STREQUAL "esp32c3") list(APPEND module_srcs ${wifi_modules} ) +elseif(IDF_TARGET STREQUAL "esp32c5") + list(APPEND module_srcs + "i2s.c" + "pulsecnt.c" + ${wifi_modules} + ) elseif(IDF_TARGET STREQUAL "esp32c6") list(APPEND module_srcs "dac.c" @@ -99,11 +110,11 @@ idf_component_register( "app_update" "base_nodemcu" "bt" - "driver_can" "esp_eth" "esp_http_client" "esp_http_server" "esp_hw_support" + "esp_vfs_console" "fatfs" "libsodium" "lua" @@ -118,6 +129,7 @@ idf_component_register( "u8g2" "ucg" "vfs" + ${extra_requires} ) # Match up all the module source files with their corresponding Kconfig diff --git a/components/modules/Kconfig b/components/modules/Kconfig index c393ab6b9..9da027eee 100644 --- a/components/modules/Kconfig +++ b/components/modules/Kconfig @@ -329,6 +329,18 @@ menu "NodeMCU modules" help Includes the WiFi module (recommended). + config NODEMCU_CMODULE_WIFI_STARTUP_DELAY + depends on NODEMCU_CMODULE_WIFI + depends on ESP_CONSOLE_USB_CDC + int "WiFi start-up delay (ms)" + default 500 + help + For some unknown reason there is an issue with allowing the + WiFi stack to initialise immediately when using a USB CDC + console (at least on the ESP32-S2). The workaround is to + delay the initialisation sequence by enough that whatever + else is needing to run gets to run first. + config NODEMCU_CMODULE_WS2812 bool "WS2812 module" default "n" diff --git a/components/modules/console.c b/components/modules/console.c index e115c9582..c95d692b8 100644 --- a/components/modules/console.c +++ b/components/modules/console.c @@ -8,7 +8,9 @@ #include "esp_vfs_dev.h" #include "esp_vfs_cdcacm.h" #include "esp_vfs_usb_serial_jtag.h" +#include "driver/uart_vfs.h" #include "driver/usb_serial_jtag.h" +#include "driver/usb_serial_jtag_vfs.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" @@ -111,9 +113,9 @@ static void console_init(void) #if CONFIG_ESP_CONSOLE_UART_DEFAULT || CONFIG_ESP_CONSOLE_UART_CUSTOM /* Based on console/advanced example */ - esp_vfs_dev_uart_port_set_rx_line_endings( + uart_vfs_dev_port_set_rx_line_endings( CONFIG_ESP_CONSOLE_UART_NUM, RX_LINE_ENDINGS_CFG); - esp_vfs_dev_uart_port_set_tx_line_endings( + uart_vfs_dev_port_set_tx_line_endings( CONFIG_ESP_CONSOLE_UART_NUM, TX_LINE_ENDINGS_CFG); /* Configure UART. Note that REF_TICK is used so that the baud rate remains @@ -135,20 +137,20 @@ static void console_init(void) uart_param_config(CONFIG_ESP_CONSOLE_UART_NUM, &uart_config); /* Tell VFS to use UART driver */ - esp_vfs_dev_uart_use_driver(CONFIG_ESP_CONSOLE_UART_NUM); + uart_vfs_dev_use_driver(CONFIG_ESP_CONSOLE_UART_NUM); #elif CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG /* Based on @pjsg's work */ - esp_vfs_dev_usb_serial_jtag_set_rx_line_endings(RX_LINE_ENDINGS_CFG); - esp_vfs_dev_usb_serial_jtag_set_tx_line_endings(TX_LINE_ENDINGS_CFG); + usb_serial_jtag_vfs_set_rx_line_endings(RX_LINE_ENDINGS_CFG); + usb_serial_jtag_vfs_set_tx_line_endings(TX_LINE_ENDINGS_CFG); usb_serial_jtag_driver_config_t usb_serial_jtag_config = USB_SERIAL_JTAG_DRIVER_CONFIG_DEFAULT(); /* Install USB-SERIAL-JTAG driver for interrupt-driven reads and write */ usb_serial_jtag_driver_install(&usb_serial_jtag_config); - esp_vfs_usb_serial_jtag_use_driver(); + usb_serial_jtag_vfs_use_driver(); #elif CONFIG_ESP_CONSOLE_USB_CDC /* Based on console/advanced_usb_cdc */ diff --git a/components/modules/eth.c b/components/modules/eth.c index 253935b1b..7ab7d8ffa 100644 --- a/components/modules/eth.c +++ b/components/modules/eth.c @@ -274,9 +274,9 @@ static int leth_init( lua_State *L ) eth_esp32_emac_config_t emac_cfg = ETH_ESP32_EMAC_DEFAULT_CONFIG(); - emac_cfg.smi_mdc_gpio_num = + emac_cfg.smi_gpio.mdc_num = opt_checkint_range( L, "mdc", -1, GPIO_NUM_0, GPIO_NUM_MAX-1 ); - emac_cfg.smi_mdio_gpio_num = + emac_cfg.smi_gpio.mdio_num = opt_checkint_range( L, "mdio", -1, GPIO_NUM_0, GPIO_NUM_MAX-1 ); eth_mac_config_t mac_cfg = ETH_MAC_DEFAULT_CONFIG(); diff --git a/components/modules/file.c b/components/modules/file.c index fae1c0bc6..73cf8584b 100644 --- a/components/modules/file.c +++ b/components/modules/file.c @@ -31,6 +31,11 @@ static int file_format( lua_State* L ) else{ NODE_ERR( "format done.\n" ); } + + const char *err = platform_remount_default_fs(false); + if (err) + return luaL_error(L, err); + return 0; } diff --git a/components/modules/heaptrace.c b/components/modules/heaptrace.c index d8f023eef..f4918dd66 100644 --- a/components/modules/heaptrace.c +++ b/components/modules/heaptrace.c @@ -16,7 +16,7 @@ static int lht_init(lua_State *L) heap_trace_stop(); free(buffer); - buffer = calloc(sizeof(heap_trace_record_t), records); + buffer = calloc(records, sizeof(heap_trace_record_t)); if (!buffer) return luaL_error(L, "out of memory"); diff --git a/components/modules/i2s.c b/components/modules/i2s.c index cd213c57d..49932f1db 100644 --- a/components/modules/i2s.c +++ b/components/modules/i2s.c @@ -161,9 +161,13 @@ static int node_i2s_start( lua_State *L ) pin_config.data_out_num = opt_checkint(L, "data_out_pin", I2S_PIN_NO_CHANGE); pin_config.data_in_num = opt_checkint(L, "data_in_pin", I2S_PIN_NO_CHANGE); // +#ifdef SOC_I2S_SUPPORTS_DAC i2s_dac_mode_t dac_mode = opt_checkint_range(L, "dac_mode", I2S_DAC_CHANNEL_DISABLE, 0, I2S_DAC_CHANNEL_MAX-1); +#endif // +#ifdef SOC_I2S_SUPPORTS_ADC adc1_channel_t adc1_channel = opt_checkint_range(L, "adc1_channel", ADC1_CHANNEL_MAX, ADC1_CHANNEL_0, ADC1_CHANNEL_MAX); +#endif // handle optional callback functions TX and RX lua_settop( L, top ); @@ -183,14 +187,18 @@ static int node_i2s_start( lua_State *L ) if (err != ESP_OK) luaL_error( L, "i2s can not start" ); +#ifdef SOC_I2S_SUPPORTS_DAC if (dac_mode != I2S_DAC_CHANNEL_DISABLE) { if (i2s_set_dac_mode( dac_mode ) != ESP_OK) luaL_error( L, "error setting dac mode" ); } +#endif +#ifdef SOC_I2S_SUPPORTS_ADC if (adc1_channel != ADC1_CHANNEL_MAX) { if (i2s_set_adc_mode( ADC_UNIT_1, adc1_channel ) != ESP_OK) luaL_error( L, "error setting adc1 mode" ); } +#endif if (i2s_set_pin(i2s_id, &pin_config) != ESP_OK) luaL_error( L, "error setting pins" ); @@ -331,14 +339,20 @@ LROT_BEGIN(i2s, NULL, 0) LROT_NUMENTRY( MODE_SLAVE, I2S_MODE_SLAVE ) LROT_NUMENTRY( MODE_TX, I2S_MODE_TX ) LROT_NUMENTRY( MODE_RX, I2S_MODE_RX ) +#ifdef SOC_I2S_SUPPORTS_DAC LROT_NUMENTRY( MODE_DAC_BUILT_IN, I2S_MODE_DAC_BUILT_IN ) +#endif +#ifdef SOC_I2S_SUPPORTS_ADC LROT_NUMENTRY( MODE_ADC_BUILT_IN, I2S_MODE_ADC_BUILT_IN ) +#endif LROT_NUMENTRY( MODE_PDM, I2S_MODE_PDM ) +#ifdef SOC_I2S_SUPPORTS_DAC LROT_NUMENTRY( DAC_CHANNEL_DISABLE, I2S_DAC_CHANNEL_DISABLE ) LROT_NUMENTRY( DAC_CHANNEL_RIGHT, I2S_DAC_CHANNEL_RIGHT_EN ) LROT_NUMENTRY( DAC_CHANNEL_LEFT, I2S_DAC_CHANNEL_LEFT_EN ) LROT_NUMENTRY( DAC_CHANNEL_BOTH, I2S_DAC_CHANNEL_BOTH_EN ) +#endif LROT_END(i2s, NULL, 0) int luaopen_i2s( lua_State *L ) { diff --git a/components/modules/node.c b/components/modules/node.c index 9979a3990..247a0531e 100644 --- a/components/modules/node.c +++ b/components/modules/node.c @@ -113,16 +113,19 @@ static int node_bootreason( lua_State *L) #if defined(CONFIG_IDF_TARGET_ESP32) || defined(CONFIG_IDF_TARGET_ESP32C6) case SDIO_RESET: #endif -#if defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32H2) +#if defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32C3) case GLITCH_RTC_RESET: #endif -#if defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32C6) || defined(CONFIG_IDF_TARGET_ESP32H2) +#if defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32C6) || defined(CONFIG_IDF_TARGET_ESP32H2) || defined(CONFIG_IDF_TARGET_ESP32C5) case EFUSE_RESET: #endif -#if defined(CONFIG_IDF_TARGET_ESP32C6) +#if defined(CONFIG_IDF_TARGET_ESP32C6) || defined(CONFIG_IDF_TARGET_ESP32C5) case JTAG_RESET: #endif -#if defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32C6) || defined(CONFIG_IDF_TARGET_ESP32H2) +#if defined(CONFIG_IDF_TARGET_ESP32H2) + case JTAG_CPU_RESET: +#endif +#if defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32C6) || defined(CONFIG_IDF_TARGET_ESP32H2) || defined(CONFIG_IDF_TARGET_ESP32C5) case USB_UART_CHIP_RESET: case USB_JTAG_CHIP_RESET: #endif @@ -131,7 +134,7 @@ static int node_bootreason( lua_State *L) #endif case TG0WDT_SYS_RESET: case TG1WDT_SYS_RESET: -#if !defined(CONFIG_IDF_TARGET_ESP32C6) +#if !defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32H2) case INTRUSION_RESET: #endif case RTCWDT_BROWN_OUT_RESET: @@ -281,7 +284,7 @@ static int node_sleep (lua_State *L) esp_sleep_enable_timer_wakeup(usecs); } -#if !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(CONFIG_IDF_TARGET_ESP32H2) +#if !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(CONFIG_IDF_TARGET_ESP32H2) && !defined(CONFIG_IDF_TARGET_ESP32C5) // touch option: boolean if (opt_checkbool(L, "touch", false)) { int err = esp_sleep_enable_touchpad_wakeup(); @@ -354,7 +357,7 @@ static int node_dsleep (lua_State *L) } } -#if !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(CONFIG_IDF_TARGET_ESP32H2) +#if !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(CONFIG_IDF_TARGET_ESP32H2) && !defined(CONFIG_IDF_TARGET_ESP32C5) bool pull = opt_checkbool(L, "pull", false); if (opt_get(L, "isolate", LUA_TTABLE)) { for (int i = 1; ; i++) { diff --git a/components/modules/wifi.c b/components/modules/wifi.c index f16b98331..81b86a0e8 100644 --- a/components/modules/wifi.c +++ b/components/modules/wifi.c @@ -93,22 +93,6 @@ static int wifi_stop (lua_State *L) 0 : luaL_error (L, "failed to stop wifi, code %d", err); } -#if defined(CONFIG_ESP_CONSOLE_USB_CDC) -// For some unknown reason, on an S2 with USB CDC console enabled, if we allow -// the esp_wifi_init() to run during initial startup, something Bad(tm) -// happens and the S2 fails to enumerate on the USB bus. However, if we defer -// the wifi initialisation, it starts up fine. This is an ugly workaround, but -// I'm out of ideas at this point. If I use a UART console, I see no errors -// even with the immediate init. -static task_handle_t th; -#endif - -static void do_esp_wifi_init(task_param_t p, task_prio_t) -{ - wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); - ESP_ERROR_CHECK(esp_wifi_init (&cfg)); -} - extern void wifi_ap_init (void); extern void wifi_sta_init (void); static int wifi_init (lua_State *L) @@ -117,11 +101,16 @@ static int wifi_init (lua_State *L) wifi_sta_init (); #if defined(CONFIG_ESP_CONSOLE_USB_CDC) - th = task_get_id(do_esp_wifi_init); - task_post_low(th, 0); -#else - do_esp_wifi_init(0, 0); +// For some unknown reason, on an S2 with USB CDC console enabled, if we allow +// the esp_wifi_init() to run during initial startup, something Bad(tm) +// happens and the S2 fails to enumerate on the USB bus. However, if we defer +// it by half a second or so, everything works. This is an ugly workaround, +// but I'm out of ideas at this point. + vTaskDelay(CONFIG_NODEMCU_CMODULE_WIFI_STARTUP_DELAY / portTICK_PERIOD_MS); #endif + wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); + ESP_ERROR_CHECK(esp_wifi_init (&cfg)); + return 0; } diff --git a/components/platform/CMakeLists.txt b/components/platform/CMakeLists.txt index 955f8dbb4..3166c3296 100644 --- a/components/platform/CMakeLists.txt +++ b/components/platform/CMakeLists.txt @@ -24,4 +24,5 @@ idf_component_register( "esp_rom" "lua" "soc" + "spiffs" ) diff --git a/components/platform/Kconfig b/components/platform/Kconfig index a2b21f7ab..fbf5ff8c7 100644 --- a/components/platform/Kconfig +++ b/components/platform/Kconfig @@ -37,6 +37,18 @@ menu "NodeMCU platform config" opened. Raising this limit will incur some extra memory overhead. + config NODEMCU_AUTO_FORMAT_ON_BOOT + bool "Auto-format SPIFFS on first boot" + default "y" if !ESP_CONSOLE_USB_CDC + default "n" if ESP_CONSOLE_USB_CDC + help + The traditional behavior of NodeMCU is to automatically format + the SPIFFS partition on first boot (or any other time the + filesystem is unmountable). When using USB CDC however, the + formatting can interfere with USB device enumeration, leading + to a failed boot. In that case, disable the auto-format and + use file.format() after startup instead. + config NODEMCU_EMBED_LFS bool "Embed LFS as part of the NodeMCU firmware" default "n" @@ -72,6 +84,7 @@ menu "NodeMCU platform config" default y if IDF_TARGET_ESP32S2 default y if IDF_TARGET_ESP32S3 default y if IDF_TARGET_ESP32C3 + default y if IDF_TARGET_ESP32C5 default y if IDF_TARGET_ESP32C6 default y if IDF_TARGET_ESP32H2 @@ -79,6 +92,8 @@ menu "NodeMCU platform config" bool default y if IDF_TARGET_ESP32 default y if IDF_TARGET_ESP32S3 + default y if IDF_TARGET_ESP32C5 + default y if IDF_TARGET_ESP32C6 config NODEMCU_UART_DRIVER_BUF_SIZE_RX0 int "RX buffer size for UART0" diff --git a/components/platform/include/platform.h b/components/platform/include/platform.h index 42ec933a6..f3e4e2dd8 100644 --- a/components/platform/include/platform.h +++ b/components/platform/include/platform.h @@ -272,4 +272,10 @@ bool platform_partition_info (uint8_t idx, platform_partition_t *info); void platform_print_deprecation_note( const char *msg, const char *time_frame); +/** + * Mount or remount the default SPIFFS filesystem. + * @returns An error message string if the operation failed. + */ +const char *platform_remount_default_fs(bool autoformat); + #endif diff --git a/components/platform/onewire.c b/components/platform/onewire.c index 36877b104..3745bdf42 100644 --- a/components/platform/onewire.c +++ b/components/platform/onewire.c @@ -65,6 +65,7 @@ sample code bearing this copyright. #include "driver/gpio.h" #include "rom/gpio.h" // for gpio_matrix_out() #include "soc/gpio_periph.h" +#include "hal/gpio_ll.h" #include "esp_log.h" #define TRUE (1==1) @@ -197,7 +198,7 @@ static int onewire_rmt_attach_pin( uint8_t gpio_num ) return PLATFORM_ERR; if (gpio_num != ow_rmt.gpio) { -#if !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(CONFIG_IDF_TARGET_ESP32H2) +#if !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(CONFIG_IDF_TARGET_ESP32H2) && !defined(CONFIG_IDF_TARGET_ESP32C5) // attach GPIO to previous pin if (gpio_num < 32) { GPIO.enable_w1ts = (0x1 << gpio_num); @@ -217,7 +218,7 @@ static int onewire_rmt_attach_pin( uint8_t gpio_num ) rmt_set_gpio( ow_rmt.rx, RMT_MODE_RX, gpio_num, false ); rmt_set_gpio( ow_rmt.tx, RMT_MODE_TX, gpio_num, false ); // force pin direction to input to enable path to RX channel - PIN_INPUT_ENABLE(GPIO_PIN_MUX_REG[gpio_num]); + gpio_ll_input_enable(&GPIO, gpio_num); ow_rmt.gpio = gpio_num; } diff --git a/components/platform/platform.c b/components/platform/platform.c index f5860bbde..a31840869 100644 --- a/components/platform/platform.c +++ b/components/platform/platform.c @@ -11,6 +11,7 @@ #include "lua.h" #include "rom/uart.h" #include "esp_log.h" +#include "esp_spiffs.h" #include "task/task.h" #include "linput.h" @@ -211,7 +212,7 @@ uint32_t platform_uart_setup( unsigned id, uint32_t baud, int databits, int pari uart_config_t cfg = { .baud_rate = baud, .flow_ctrl = flow_control, - .rx_flow_ctrl_thresh = UART_FIFO_LEN - 16, + .rx_flow_ctrl_thresh = UART_HW_FIFO_LEN(id) - 16, .source_clk = UART_SCLK_DEFAULT, }; @@ -672,3 +673,38 @@ void platform_print_deprecation_note( const char *msg, const char *time_frame) printf( "Warning, deprecated API! %s. It will be removed %s. See documentation for details.\n", msg, time_frame ); } + +const char *platform_remount_default_fs(bool autoformat) +{ + const char *label = CONFIG_NODEMCU_DEFAULT_SPIFFS_LABEL; + + if (esp_spiffs_mounted(label)) + esp_vfs_spiffs_unregister(label); + + esp_vfs_spiffs_conf_t spiffs_cfg = { + .base_path = "", + .partition_label = (label && label[0]) ? label : NULL, + .max_files = CONFIG_NODEMCU_MAX_OPEN_FILES, + .format_if_mount_failed = autoformat, + }; + const char *reason = NULL; + switch(esp_vfs_spiffs_register(&spiffs_cfg)) + { + case ESP_OK: + case ESP_ERR_INVALID_STATE: // already mounted (or encrypted) + break; + case ESP_ERR_NO_MEM: + reason = "out of memory"; + break; + case ESP_ERR_NOT_FOUND: + reason = "no SPIFFS partition found"; + break; + case ESP_FAIL: + reason = "failed to mount partition, use file.format() to reformat"; + break; + default: + reason = "unknown"; + break; + } + return reason; +} diff --git a/docs/modules/node.md b/docs/modules/node.md index 66772ee71..10cfe05cc 100644 --- a/docs/modules/node.md +++ b/docs/modules/node.md @@ -205,7 +205,7 @@ Returns information about hardware, software version and build configuration. If a `group` is given the return value will be a table containing the following elements: - for `group` = `"hw"` - - `chip_model` (string) one of "ESP32", "ESP32S2", "ESP32S3", "ESP32C3", "ESP32C2", "ESP32C6", "ESP32H2" + - `chip_model` (string) one of "ESP32", "ESP32S2", "ESP32S3", "ESP32C3", "ESP32C2", "ESP32C5", "ESP32C6", "ESP32H2" - `chip_features` (number) bit mask of chip feature flags - BIT(0), Chip has embedded flash memory - BIT(1), Chip has 2.4GHz WiFi diff --git a/sdk/esp32-esp-idf b/sdk/esp32-esp-idf index e7771c75b..cb3ac7429 160000 --- a/sdk/esp32-esp-idf +++ b/sdk/esp32-esp-idf @@ -1 +1 @@ -Subproject commit e7771c75bd1dbbfb7b3c5381be7e063b197c9734 +Subproject commit cb3ac7429c73b6e7c6d79ae05de480d4b6706770 diff --git a/sdkconfig.ci.esp32c3 b/sdkconfig.ci.esp32c3 new file mode 100644 index 000000000..61f1cf165 --- /dev/null +++ b/sdkconfig.ci.esp32c3 @@ -0,0 +1,7 @@ +CONFIG_USJ_ENABLE_USB_SERIAL_JTAG=y +# CONFIG_ESP_CONSOLE_UART_DEFAULT is not set +CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG=y +# CONFIG_ESP_CONSOLE_UART_CUSTOM is not set +# CONFIG_ESP_CONSOLE_NONE is not set +CONFIG_ESP_CONSOLE_SECONDARY_NONE=y +CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG_ENABLED=y diff --git a/sdkconfig.ci.esp32s2 b/sdkconfig.ci.esp32s2 new file mode 100644 index 000000000..9d21ad104 --- /dev/null +++ b/sdkconfig.ci.esp32s2 @@ -0,0 +1,6 @@ +# CONFIG_ESP_CONSOLE_UART_DEFAULT is not set +CONFIG_ESP_CONSOLE_USB_CDC=y +# CONFIG_ESP_CONSOLE_UART_CUSTOM is not set +# CONFIG_ESP_CONSOLE_NONE is not set +CONFIG_ESP_CONSOLE_USB_CDC_RX_BUF_SIZE=512 +