From beb7f0bfb96cc000306cc439317753dbea9ab86a Mon Sep 17 00:00:00 2001 From: Mitchell M Date: Tue, 18 Mar 2025 12:32:35 -0500 Subject: [PATCH] Directly pull in the i2c_lcd driver --- main/drivers/i2c_lcd_pcf8574.c | 357 +++++++++++++++++++++++++++++++++ main/drivers/i2c_lcd_pcf8574.h | 112 +++++++++++ sdkconfig | 76 +++++-- 3 files changed, 524 insertions(+), 21 deletions(-) create mode 100644 main/drivers/i2c_lcd_pcf8574.c create mode 100644 main/drivers/i2c_lcd_pcf8574.h diff --git a/main/drivers/i2c_lcd_pcf8574.c b/main/drivers/i2c_lcd_pcf8574.c new file mode 100644 index 0000000..a859f1c --- /dev/null +++ b/main/drivers/i2c_lcd_pcf8574.c @@ -0,0 +1,357 @@ +/// \file i2c_lcd_pcf8574.c +/// \brief Liquid Crystal display driver with PCF8574 adapter for esp-idf +/// +/// \author Femi Olugbon, https://iamflinks.github.io +/// \copyright Copyright (c) 2024 by Femi Olugbon +/// +/// ChangeLog see: i2c_lcd_pcf8574.h + +#include +#include "i2c_lcd_pcf8574.h" +#include "esp_log.h" +#include "esp_check.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" + + +#define TAG "I2C_LCD_PCF8574" + +#define I2C_MASTER_TIMEOUT_MS 1000 + + +// private functions +static void lcd_send(i2c_lcd_pcf8574_handle_t* lcd, uint8_t value, bool is_data); +static void lcd_write_nibble(i2c_lcd_pcf8574_handle_t* lcd, uint8_t half_byte, bool is_data, i2c_cmd_handle_t cmd); +static void lcd_write_i2c(i2c_lcd_pcf8574_handle_t* lcd, uint8_t data, bool is_data, bool enable); + +void lcd_init(i2c_lcd_pcf8574_handle_t* lcd, uint8_t i2c_addr, i2c_port_t i2c_port) { + lcd->i2c_addr = i2c_addr; + lcd->i2c_port = i2c_port; + lcd->backlight = 0; + lcd->entrymode = 0x02; // Init the LCD with an internal reset + lcd->displaycontrol = 0x04; + lcd->rs_mask = 0x01; + lcd->rw_mask = 0x00; + lcd->enable_mask = 0x04; + lcd->data_mask[0] = 0x10; + lcd->data_mask[1] = 0x20; + lcd->data_mask[2] = 0x40; + lcd->data_mask[3] = 0x80; + lcd->backlight_mask = 0x08; +} // lcd_begin() + +void lcd_begin(i2c_lcd_pcf8574_handle_t* lcd, uint8_t cols, uint8_t rows) { + + // Ensure the cols and rows stay within max limit + lcd->cols = (cols > 80) ? 80 : cols; + lcd->lines = (rows > 4) ? 4 : rows; + + lcd->row_offsets[0] = 0x00; + lcd->row_offsets[1] = 0x40; + lcd->row_offsets[2] = 0x00 + cols; + lcd->row_offsets[3] = 0x40 + cols; + + // Initialize the LCD + lcd_write_i2c(lcd, 0x00, false, false); + esp_rom_delay_us(50000); + + // This follows after the reset mode + lcd->displaycontrol = 0x04; + lcd->entrymode = 0x02; + + // The following are the reset sequence: Please see "Initialization instruction in the PCF8574 datasheet." + i2c_cmd_handle_t cmd = i2c_cmd_link_create(); + i2c_master_start(cmd); + // We left-shift the device addres and add the read/write command + i2c_master_write_byte(cmd, (lcd->i2c_addr << 1) | I2C_MASTER_WRITE, true); + + lcd_write_nibble(lcd, 0x03, false, cmd); + i2c_master_stop(cmd); + i2c_master_cmd_begin(lcd->i2c_port, cmd, I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS); + i2c_cmd_link_delete(cmd); + esp_rom_delay_us(4500); + + cmd = i2c_cmd_link_create(); + i2c_master_start(cmd); + i2c_master_write_byte(cmd, (lcd->i2c_addr << 1) | I2C_MASTER_WRITE, true); + lcd_write_nibble(lcd, 0x03, false, cmd); + i2c_master_stop(cmd); + i2c_master_cmd_begin(lcd->i2c_port, cmd, I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS); + i2c_cmd_link_delete(cmd); + esp_rom_delay_us(200); + + cmd = i2c_cmd_link_create(); + i2c_master_start(cmd); + i2c_master_write_byte(cmd, (lcd->i2c_addr << 1) | I2C_MASTER_WRITE, true); + lcd_write_nibble(lcd, 0x03, false, cmd); + i2c_master_stop(cmd); + i2c_master_cmd_begin(lcd->i2c_port, cmd, I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS); + i2c_cmd_link_delete(cmd); + esp_rom_delay_us(200); + + // Set the data interface to 4-bit interface (PCF8574 uses 4-bit interface) + cmd = i2c_cmd_link_create(); + i2c_master_start(cmd); + i2c_master_write_byte(cmd, (lcd->i2c_addr << 1) | I2C_MASTER_WRITE, true); + lcd_write_nibble(lcd, 0x02, false, cmd); + i2c_master_stop(cmd); + i2c_master_cmd_begin(lcd->i2c_port, cmd, I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS); + i2c_cmd_link_delete(cmd); + + // Instruction: function set = 0x20 + lcd_send(lcd, 0x20 | (rows > 1 ? 0x08 : 0x00), false); + + // Set the display parameters (turn on display, clear, and set left to right) + lcd_display(lcd); + lcd_clear(lcd); + lcd_left_to_right(lcd); +} // lcd_begin() + +// Clear the display content +void lcd_clear(i2c_lcd_pcf8574_handle_t* lcd) { + // Instruction: Clear display = 0x01 + lcd_send(lcd, 0x01, false); + // Clearing the display takes a while: takes approx. 1.5ms + esp_rom_delay_us(1600); +} // lcd_clear() + +// Set the display to home +void lcd_home(i2c_lcd_pcf8574_handle_t* lcd) { + // Instruction: Return home = 0x02 + lcd_send(lcd, 0x02, false); + // Same as clearing the display: takes approx. 1.5ms + esp_rom_delay_us(1600); +} // lcd_home() + +// Set the cursor to a new position. +void lcd_set_cursor(i2c_lcd_pcf8574_handle_t* lcd, uint8_t col, uint8_t row) { + // Check the display boundaries + if (row >= lcd->lines) { + row = lcd->lines - 1; + } + if (col >= lcd->cols) { + col = lcd->cols - 1; + } + // Instruction: Set DDRAM address = 080 + lcd_send(lcd, 0x80 | (lcd->row_offsets[row] + col), false); +} // lcd_set_cursor() + +// Turn off the display: fast operation +void lcd_no_display(i2c_lcd_pcf8574_handle_t* lcd) { + // Display Control: Display on/off control = 0x04 + lcd->displaycontrol &= ~0x04; + // Instruction: Display mode: 0x08 + lcd_send(lcd, 0x08 | lcd->displaycontrol, false); +} // lcd_no_display() + +// Turn on the display: fast operation +void lcd_display(i2c_lcd_pcf8574_handle_t* lcd) { + // Display Control: Display on/off control = 0x04 + lcd->displaycontrol |= 0x04; + // Instruction: Display mode: 0x08 + lcd_send(lcd, 0x08 | lcd->displaycontrol, false); +} // lcd_display() + +// Turn on the cursor +void lcd_cursor(i2c_lcd_pcf8574_handle_t* lcd) { + // Display Control: Cursor on/off control = 0x02 + lcd->displaycontrol |= 0x02; + // Instruction: Display mode: 0x08 + lcd_send(lcd, 0x08 | lcd->displaycontrol, false); +} // lcd_cursor() + +// Turn off the cursor +void lcd_no_cursor(i2c_lcd_pcf8574_handle_t* lcd) { + // Display Control: Cursor on/off control = 0x02 + lcd->displaycontrol &= ~0x02; + // Instruction: Display mode: 0x08 + lcd_send(lcd, 0x08 | lcd->displaycontrol, false); +} // lcd_no_cursor() + +// Turn on the blinking +void lcd_blink(i2c_lcd_pcf8574_handle_t* lcd) { + // Display Control: Blink on/off control = 0x01 + lcd->displaycontrol |= 0x01; + // Instruction: Display mode: 0x08 + lcd_send(lcd, 0x08 | lcd->displaycontrol, false); +} // lcd_blink() + +// Turn off the blinking +void lcd_no_blink(i2c_lcd_pcf8574_handle_t* lcd) { + // Display Control: Blink on/off control = 0x01 + lcd->displaycontrol &= ~0x01; + // Instruction: Display mode: 0x08 + lcd_send(lcd, 0x08 | lcd->displaycontrol, false); +} // lcd_no_blink() + +// This command will scroll the display left by one step without changing the RAM +void lcd_scroll_display_left(i2c_lcd_pcf8574_handle_t* lcd) { + // Instruction: Cursor or display shift - 0x10 + // Instruction: Display mode: 0x08 + // Control: Left shift control = 0x00 + // 0x10 | 0x08 | 0x00 = 0x18 + lcd_send(lcd, 0x18, false); +} // lcd_scroll_display_left() + +// This command will scroll the display right by one step without changing the RAM +void lcd_scroll_display_right(i2c_lcd_pcf8574_handle_t* lcd) { + // Instruction: Cursor or display shift - 0x10 + // Instruction: Display mode: 0x08 + // Control: Left shift control = 0x04 + // 0x10 | 0x08 | 0x04 = 0x1C + lcd_send(lcd, 0x1C, false); +} // lcd_scroll_display_right() + +// Controlling the entry mode: This is for text that flows left to right +void lcd_left_to_right(i2c_lcd_pcf8574_handle_t* lcd) { + // Instruction: Entry mode set, set increment/decrement = 0x02 + lcd->entrymode |= 0x02; + lcd_send(lcd, 0x04 | lcd->entrymode, false); +} // lcd_left_to_right() + +// Controlling the entry mode: This is for text that flows right to left +void lcd_right_to_left(i2c_lcd_pcf8574_handle_t* lcd) { + // Instruction: Entry mode set, clear increment/decrement = 0x02 + lcd->entrymode &= ~0x02; + lcd_send(lcd, 0x04 | lcd->entrymode, false); +} // lcd_right_to_left() + +// This will justify the text to the right from the cursor +void lcd_autoscroll(i2c_lcd_pcf8574_handle_t* lcd) { + // Instruction: Entry mode set, set shift = 0x01 + lcd->entrymode |= 0x01; + lcd_send(lcd, 0x04 | lcd->entrymode, false); +} // lcd_autoscroll() + +// This will justify the text to the left from the cursor +void lcd_no_autoscroll(i2c_lcd_pcf8574_handle_t* lcd) { + // Instruction: Entry mode set, clear shift = 0x01 + lcd->entrymode &= ~0x01; + lcd_send(lcd, 0x04 | lcd->entrymode, false); +} // lcd_no_autoscroll() + +// Setting the backlight: It can only be turn on or off. +// Current backlight value is saved in the i2c_lcd_pcf8574_handle_t struct for further data transfers +void lcd_set_backlight(i2c_lcd_pcf8574_handle_t* lcd, uint8_t brightness) { + // Place the backlight value in the lcd struct + lcd->backlight = brightness; + // Send no data + lcd_write_i2c(lcd, 0x00, true, false); +} // lcd_set_backlight() + +// Custom character creation: allows us to create up to 8 custom characters in the CGRAM locations +void lcd_create_char(i2c_lcd_pcf8574_handle_t* lcd, uint8_t location, uint8_t charmap[]) { + location &= 0x7; // Only 8 locations are available + // Set the CGRAM address + lcd_send(lcd, 0x40 | (location << 3), false); + for (int i = 0; i < 8; i++) { + lcd_write(lcd, charmap[i]); + } +} // lcd_create_char() + +// Write a byte to the LCD +void lcd_write(i2c_lcd_pcf8574_handle_t* lcd, uint8_t value) { + lcd_send(lcd, value, true); +} // lcd_write() + +// Print characters to the LCD: cursor set or clear instruction must preceded this instruction, or it will write on the current text. +void lcd_print(i2c_lcd_pcf8574_handle_t* lcd, const char* str) { + while (*str) { + lcd_write(lcd, *str++); + } +} // lcd_print() + +// Additional function to print numbers as formatted string +void lcd_print_number(i2c_lcd_pcf8574_handle_t* lcd, uint8_t col, uint8_t row, uint8_t buf_len, const char *str, ...) { + // Ensure the buffer length is greater than zero + if (buf_len == 0) + { + ESP_LOGE(TAG, "Buffer length must be greater than 0"); + } + + // Create a buffer to hold the characters + char buffer[buf_len]; + + va_list args; + va_start(args, str); + + int chars_written = vsniprintf(buffer, buf_len, str, args); + + va_end(args); + + if (chars_written < 0) { + ESP_LOGE(TAG, "Encoding error in vsnprintf"); + } + + if ((size_t)chars_written >= buf_len) { + ESP_LOGW(TAG, "Buffer overflow: %d characters needed, but only %d available", chars_written + 1, buf_len); + } + + lcd_set_cursor(lcd, col, row); + lcd_print(lcd, buffer); + +} // lcd_print_number() + + +// Private functions: derived from the esp32 i2c_master driver + + +static void lcd_send(i2c_lcd_pcf8574_handle_t* lcd, uint8_t value, bool is_data) { + i2c_cmd_handle_t cmd = i2c_cmd_link_create(); + i2c_master_start(cmd); + i2c_master_write_byte(cmd, (lcd->i2c_addr << 1) | I2C_MASTER_WRITE, true); + lcd_write_nibble(lcd, (value >> 4 & 0x0F), is_data, cmd); + lcd_write_nibble(lcd, (value & 0x0F), is_data, cmd); + i2c_master_stop(cmd); + esp_err_t ret = i2c_master_cmd_begin(lcd->i2c_port, cmd, I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS); + i2c_cmd_link_delete(cmd); + + if (ret != ESP_OK) { + ESP_LOGE(TAG, "Failed to send data to LCD: %s", esp_err_to_name(ret)); + } +} // lcd_send() + +// Write a nibble / half byte with ACK +static void lcd_write_nibble(i2c_lcd_pcf8574_handle_t* lcd, uint8_t half_byte, bool is_data, i2c_cmd_handle_t cmd) { + + // Map the data to the given pin connections + uint8_t data = is_data ? lcd->rs_mask : 0; + + // Don't use rw_mask here + if (lcd->backlight > 0) { + data |= lcd->backlight_mask; + } + // Allow arbitrary pin configuration + if (half_byte & 0x01) data |= lcd->data_mask[0]; + if (half_byte & 0x02) data |= lcd->data_mask[1]; + if (half_byte & 0x04) data |= lcd->data_mask[2]; + if (half_byte & 0x08) data |= lcd->data_mask[3]; + + i2c_master_write_byte(cmd, data | lcd->enable_mask, true); + i2c_master_write_byte(cmd, data, true); +} // lcd_write_nibble() + +// Private function to change the PCF8574 pins to the given value. +static void lcd_write_i2c(i2c_lcd_pcf8574_handle_t* lcd, uint8_t data, bool is_data, bool enable) { + if (is_data) { + data |= lcd->rs_mask; + } + if (enable) { + data |= lcd->enable_mask; + } + if (lcd->backlight > 0) { + data |= lcd->backlight_mask; + } + + i2c_cmd_handle_t cmd = i2c_cmd_link_create(); + i2c_master_start(cmd); + i2c_master_write_byte(cmd, (lcd->i2c_addr << 1) | I2C_MASTER_WRITE, true); + i2c_master_write_byte(cmd, data, true); + i2c_master_stop(cmd); + esp_err_t ret = i2c_master_cmd_begin(lcd->i2c_port, cmd, I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS); + i2c_cmd_link_delete(cmd); + + if (ret != ESP_OK) { + ESP_LOGE(TAG, "Failed to write to LCD: %s", esp_err_to_name(ret)); + } +} // lcd_write_i2c() \ No newline at end of file diff --git a/main/drivers/i2c_lcd_pcf8574.h b/main/drivers/i2c_lcd_pcf8574.h new file mode 100644 index 0000000..b31a87c --- /dev/null +++ b/main/drivers/i2c_lcd_pcf8574.h @@ -0,0 +1,112 @@ +/// \file i2c_lcd_pcf8574.h +/// \brief Liquid Crystal display driver with PCF8574 adapter for esp-idf +/// +/// \author Femi Olugbon, https://iamflinks.github.io +/// \copyright Copyright (c) 2024 by Femi Olugbon +/// +/// The library work is lincensed under a BSD style license. +/// +/// \details +/// This library can drive a LCD based on the Hitachi's HD44790 display chip that is wired through a PCF8574 I2C converter. It uses the esp-idf i2c_driver component for communication. The library was adapted from the LiquidCrystal_PCF8574 (Mathias Hertel) and LiquidCrystal_I2C Arduino libraries. +/// +/// +/// ChangeLog: +/// =========== +/// * 07/22/2024 --> Created +/// * 07/23/2024 --> Added number printing functionality +/// + +#pragma once + +#ifndef I2C_LCD_PCF8574_H +#define I2C_LCD_PCF8574_H + +#include +#include +#include "esp_err.h" +#include "driver/i2c.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +#define LCD_MAX_ROWS 4 + +typedef struct +{ + uint8_t i2c_addr; + uint8_t backlight; + uint8_t cols; + uint8_t lines; + uint8_t entrymode; + uint8_t displaycontrol; + uint8_t row_offsets[LCD_MAX_ROWS]; + uint8_t rs_mask; + uint8_t rw_mask; + uint8_t enable_mask; + uint8_t backlight_mask; + uint8_t data_mask[4]; + i2c_port_t i2c_port; +} i2c_lcd_pcf8574_handle_t; + + +// Initialize the LCD +void lcd_init(i2c_lcd_pcf8574_handle_t* lcd, uint8_t i2c_addr, i2c_port_t i2c_port); + +// Begin using the LCD +void lcd_begin(i2c_lcd_pcf8574_handle_t* lcd, uint8_t cols, uint8_t rows); + +// Clear the LCD +void lcd_clear(i2c_lcd_pcf8574_handle_t* lcd); + +// Move cursor to home position +void lcd_home(i2c_lcd_pcf8574_handle_t* lcd); + +// Set cursor position +void lcd_set_cursor(i2c_lcd_pcf8574_handle_t* lcd, uint8_t col, uint8_t row); + +// Turn the display on/off +void lcd_no_display(i2c_lcd_pcf8574_handle_t* lcd); +void lcd_display(i2c_lcd_pcf8574_handle_t* lcd); + +// Turn the cursor on/off +void lcd_cursor(i2c_lcd_pcf8574_handle_t* lcd); +void lcd_no_cursor(i2c_lcd_pcf8574_handle_t* lcd); + +// Turn blinking cursor on/off +void lcd_blink(i2c_lcd_pcf8574_handle_t* lcd); +void lcd_no_blink(i2c_lcd_pcf8574_handle_t* lcd); + +// Scroll the display +void lcd_scroll_display_left(i2c_lcd_pcf8574_handle_t* lcd); +void lcd_scroll_display_right(i2c_lcd_pcf8574_handle_t* lcd); + +// Set the direction for text that flows automatically +void lcd_left_to_right(i2c_lcd_pcf8574_handle_t* lcd); +void lcd_right_to_left(i2c_lcd_pcf8574_handle_t* lcd); + +// Turn on/off autoscroll +void lcd_autoscroll(i2c_lcd_pcf8574_handle_t* lcd); +void lcd_no_autoscroll(i2c_lcd_pcf8574_handle_t* lcd); + +// Set backlight brightness +void lcd_set_backlight(i2c_lcd_pcf8574_handle_t* lcd, uint8_t brightness); + +// Create a custom character +void lcd_create_char(i2c_lcd_pcf8574_handle_t* lcd, uint8_t location, uint8_t charmap[]); + +// Write a character to the LCD +void lcd_write(i2c_lcd_pcf8574_handle_t* lcd, uint8_t value); + +// Print a string to the LCD +void lcd_print(i2c_lcd_pcf8574_handle_t* lcd, const char* str); + +void lcd_print_number(i2c_lcd_pcf8574_handle_t* lcd, uint8_t col, uint8_t row, uint8_t buf_len, const char *str, ...); + + +#ifdef __cplusplus +} +#endif // C++ extern + +#endif // I2C_LCD_PCF8574_H \ No newline at end of file diff --git a/sdkconfig b/sdkconfig index 241d0c9..ede7a54 100644 --- a/sdkconfig +++ b/sdkconfig @@ -1,6 +1,6 @@ # # Automatically generated file. DO NOT EDIT. -# Espressif IoT Development Framework (ESP-IDF) 5.2.2 Project Configuration +# Espressif IoT Development Framework (ESP-IDF) 5.2.5 Project Configuration # CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 @@ -188,6 +188,7 @@ CONFIG_SOC_RTCIO_PIN_COUNT=22 CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y +CONFIG_SOC_LP_IO_CLOCK_IS_INDEPENDENT=y CONFIG_SOC_SDM_GROUPS=y CONFIG_SOC_SDM_CHANNELS_PER_GROUP=8 CONFIG_SOC_SDM_CLK_SUPPORT_APB=y @@ -224,6 +225,8 @@ CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=54 CONFIG_SOC_TIMER_GROUP_SUPPORT_XTAL=y CONFIG_SOC_TIMER_GROUP_SUPPORT_APB=y CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=4 +CONFIG_SOC_LP_TIMER_BIT_WIDTH_LO=32 +CONFIG_SOC_LP_TIMER_BIT_WIDTH_HI=16 CONFIG_SOC_TOUCH_VERSION_2=y CONFIG_SOC_TOUCH_SENSOR_NUM=15 CONFIG_SOC_TOUCH_PROXIMITY_CHANNEL_NUM=3 @@ -542,6 +545,8 @@ CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y # 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 # end of Compiler options # @@ -576,6 +581,7 @@ CONFIG_BT_ALARM_MAX_NUM=50 # Legacy ADC Configuration # # CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_ADC_SKIP_LEGACY_CONFLICT_CHECK is not set # # Legacy ADC Calibration Configuration @@ -604,6 +610,7 @@ CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y # Temperature sensor Configuration # # CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_TEMP_SENSOR_SKIP_LEGACY_CONFLICT_CHECK is not set # CONFIG_TEMP_SENSOR_ENABLE_DEBUG_LOG is not set # end of Temperature sensor Configuration @@ -624,6 +631,7 @@ CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y # # CONFIG_SDM_CTRL_FUNC_IN_IRAM is not set # CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_SDM_SKIP_LEGACY_CONFLICT_CHECK is not set # CONFIG_SDM_ENABLE_DEBUG_LOG is not set # end of Sigma Delta Modulator Configuration @@ -634,6 +642,7 @@ 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_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_GPTIMER_SKIP_LEGACY_CONFLICT_CHECK is not set # CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set # end of GPTimer Configuration @@ -643,6 +652,7 @@ CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y # CONFIG_PCNT_CTRL_FUNC_IN_IRAM is not set # CONFIG_PCNT_ISR_IRAM_SAFE is not set # CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_PCNT_SKIP_LEGACY_CONFLICT_CHECK is not set # CONFIG_PCNT_ENABLE_DEBUG_LOG is not set # end of PCNT Configuration @@ -652,6 +662,7 @@ CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y # CONFIG_RMT_ISR_IRAM_SAFE is not set # CONFIG_RMT_RECV_FUNC_IN_IRAM is not set # CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_RMT_SKIP_LEGACY_CONFLICT_CHECK is not set # CONFIG_RMT_ENABLE_DEBUG_LOG is not set # end of RMT Configuration @@ -662,6 +673,7 @@ CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y # CONFIG_MCPWM_CTRL_FUNC_IN_IRAM is not set # CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set # CONFIG_MCPWM_ENABLE_DEBUG_LOG is not set +# CONFIG_MCPWM_SKIP_LEGACY_CONFLICT_CHECK is not set # end of MCPWM Configuration # @@ -669,6 +681,7 @@ CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y # # CONFIG_I2S_ISR_IRAM_SAFE is not set # CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_I2S_SKIP_LEGACY_CONFLICT_CHECK is not set # CONFIG_I2S_ENABLE_DEBUG_LOG is not set # end of I2S Configuration @@ -722,6 +735,7 @@ CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y # Wireless Coexistence # # CONFIG_ESP_COEX_EXTERNAL_COEXIST_ENABLE is not set +# CONFIG_ESP_COEX_GPIO_DEBUG is not set # end of Wireless Coexistence # @@ -759,6 +773,13 @@ 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 # @@ -810,6 +831,12 @@ CONFIG_ESP_REV_MIN_FULL=0 # CONFIG_ESP32S3_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=199 + +# +# Maximum Supported ESP32-S3 eFuse Block Revision (eFuse Block Rev v1.99) +# # end of Chip revision # @@ -900,6 +927,7 @@ CONFIG_ESP_NETIF_USES_TCPIP_WITH_BSD_API=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 # @@ -928,6 +956,7 @@ CONFIG_ESP_PHY_CALIBRATION_MODE=0 # Power Management # # CONFIG_PM_ENABLE is not set +# CONFIG_PM_SLP_IRAM_OPT is not set CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y CONFIG_PM_RESTORE_CACHE_TAGMEM_AFTER_LIGHT_SLEEP=y # end of Power Management @@ -1114,6 +1143,9 @@ 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 is not set +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 @@ -1211,6 +1243,7 @@ CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536 # 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_PRIORITY=1 CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 @@ -1405,6 +1438,9 @@ CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y # CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set # CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU1 is not set CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF +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_IPV6_MEMP_NUM_ND6_QUEUE=3 CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 @@ -1435,8 +1471,10 @@ CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000 # # 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 @@ -1460,6 +1498,8 @@ CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE=y 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 @@ -1521,6 +1561,7 @@ CONFIG_MBEDTLS_HAVE_TIME=y # 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 @@ -1597,6 +1638,7 @@ CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM=y # 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 # @@ -1645,25 +1687,10 @@ CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y # CONFIG_OPENTHREAD_ENABLED is not set # -# Thread Operational Dataset +# OpenThread Spinel # -CONFIG_OPENTHREAD_NETWORK_NAME="OpenThread-ESP" -CONFIG_OPENTHREAD_MESH_LOCAL_PREFIX="fd00:db8:a0:0::/64" -CONFIG_OPENTHREAD_NETWORK_CHANNEL=15 -CONFIG_OPENTHREAD_NETWORK_PANID=0x1234 -CONFIG_OPENTHREAD_NETWORK_EXTPANID="dead00beef00cafe" -CONFIG_OPENTHREAD_NETWORK_MASTERKEY="00112233445566778899aabbccddeeff" -CONFIG_OPENTHREAD_NETWORK_PSKC="104810e2315100afd6bc9215a6bfac53" -# end of Thread Operational Dataset - -CONFIG_OPENTHREAD_XTAL_ACCURACY=130 # CONFIG_OPENTHREAD_SPINEL_ONLY is not set -CONFIG_OPENTHREAD_RX_ON_WHEN_IDLE=y - -# -# Thread Address Query Config -# -# end of Thread Address Query Config +# end of OpenThread Spinel # end of OpenThread # @@ -1721,6 +1748,7 @@ CONFIG_SPI_FLASH_HPM_DC_AUTO=y # CONFIG_SPI_FLASH_HPM_DC_DISABLE is not set CONFIG_SPI_FLASH_SUSPEND_QVL_SUPPORTED=y # CONFIG_SPI_FLASH_AUTO_SUSPEND is not set +# 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 @@ -1841,13 +1869,20 @@ CONFIG_USB_HOST_HW_BUFFER_BIAS_BALANCED=y # CONFIG_USB_HOST_HW_BUFFER_BIAS_PERIODIC_OUT is not set # -# Root Hub configuration +# Hub Driver Configuration +# + +# +# Root Port configuration # CONFIG_USB_HOST_DEBOUNCE_DELAY_MS=250 CONFIG_USB_HOST_RESET_HOLD_MS=30 CONFIG_USB_HOST_RESET_RECOVERY_MS=30 CONFIG_USB_HOST_SET_ADDR_RECOVERY_MS=10 -# end of Root Hub configuration +# end of Root Port configuration + +# CONFIG_USB_HOST_HUBS_SUPPORTED is not set +# end of Hub Driver Configuration CONFIG_USB_OTG_SUPPORTED=y # CONFIG_USB_HOST_ENABLE_ENUM_FILTER_CALLBACK is not set @@ -1884,7 +1919,6 @@ CONFIG_WL_SECTOR_SIZE=4096 # CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16 CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30 -# CONFIG_WIFI_PROV_BLE_FORCE_ENCRYPTION is not set CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN=y # CONFIG_WIFI_PROV_STA_FAST_SCAN is not set # end of Wi-Fi Provisioning Manager