[nextion] Optimize settings memory usage with compile-time defines (#9350)

Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
This commit is contained in:
Edward Firmo 2025-07-07 11:15:13 +02:00 committed by GitHub
parent 83512b88c4
commit 4e25b6da7b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 31 additions and 62 deletions

View File

@ -172,9 +172,11 @@ async def to_code(config):
cg.add(var.set_auto_wake_on_touch(config[CONF_AUTO_WAKE_ON_TOUCH])) cg.add(var.set_auto_wake_on_touch(config[CONF_AUTO_WAKE_ON_TOUCH]))
cg.add(var.set_exit_reparse_on_start(config[CONF_EXIT_REPARSE_ON_START])) if config[CONF_EXIT_REPARSE_ON_START]:
cg.add_define("USE_NEXTION_CONFIG_EXIT_REPARSE_ON_START")
cg.add(var.set_skip_connection_handshake(config[CONF_SKIP_CONNECTION_HANDSHAKE])) if config[CONF_SKIP_CONNECTION_HANDSHAKE]:
cg.add_define("USE_NEXTION_CONFIG_SKIP_CONNECTION_HANDSHAKE")
if max_commands_per_loop := config.get(CONF_MAX_COMMANDS_PER_LOOP): if max_commands_per_loop := config.get(CONF_MAX_COMMANDS_PER_LOOP):
cg.add_define("USE_NEXTION_MAX_COMMANDS_PER_LOOP") cg.add_define("USE_NEXTION_MAX_COMMANDS_PER_LOOP")

View File

@ -51,24 +51,19 @@ bool Nextion::check_connect_() {
if (this->connection_state_.is_connected_) if (this->connection_state_.is_connected_)
return true; return true;
// Check if the handshake should be skipped for the Nextion connection #ifdef USE_NEXTION_CONFIG_SKIP_CONNECTION_HANDSHAKE
if (this->skip_connection_handshake_) { ESP_LOGW(TAG, "Connected (no handshake)"); // Log the connection status without handshake
// Log the connection status without handshake this->is_connected_ = true; // Set the connection status to true
ESP_LOGW(TAG, "Connected (no handshake)"); return true; // Return true indicating the connection is set
// Set the connection status to true #else // USE_NEXTION_CONFIG_SKIP_CONNECTION_HANDSHAKE
this->connection_state_.is_connected_ = true;
// Return true indicating the connection is set
return true;
}
if (this->comok_sent_ == 0) { if (this->comok_sent_ == 0) {
this->reset_(false); this->reset_(false);
this->connection_state_.ignore_is_setup_ = true; this->connection_state_.ignore_is_setup_ = true;
this->send_command_("boguscommand=0"); // bogus command. needed sometimes after updating this->send_command_("boguscommand=0"); // bogus command. needed sometimes after updating
if (this->exit_reparse_on_start_) { #ifdef USE_NEXTION_CONFIG_EXIT_REPARSE_ON_START
this->send_command_("DRAKJHSUYDGBNCJHGJKSHBDN"); this->send_command_("DRAKJHSUYDGBNCJHGJKSHBDN");
} #endif // USE_NEXTION_CONFIG_EXIT_REPARSE_ON_START
this->send_command_("connect"); this->send_command_("connect");
this->comok_sent_ = App.get_loop_component_start_time(); this->comok_sent_ = App.get_loop_component_start_time();
@ -94,7 +89,7 @@ bool Nextion::check_connect_() {
for (size_t i = 0; i < response.length(); i++) { for (size_t i = 0; i < response.length(); i++) {
ESP_LOGN(TAG, "resp: %s %d %d %c", response.c_str(), i, response[i], response[i]); ESP_LOGN(TAG, "resp: %s %d %d %c", response.c_str(), i, response[i], response[i]);
} }
#endif #endif // NEXTION_PROTOCOL_LOG
ESP_LOGW(TAG, "Not connected"); ESP_LOGW(TAG, "Not connected");
comok_sent_ = 0; comok_sent_ = 0;
@ -130,6 +125,7 @@ bool Nextion::check_connect_() {
this->connection_state_.ignore_is_setup_ = false; this->connection_state_.ignore_is_setup_ = false;
this->dump_config(); this->dump_config();
return true; return true;
#endif // USE_NEXTION_CONFIG_SKIP_CONNECTION_HANDSHAKE
} }
void Nextion::reset_(bool reset_nextion) { void Nextion::reset_(bool reset_nextion) {
@ -144,21 +140,22 @@ void Nextion::reset_(bool reset_nextion) {
void Nextion::dump_config() { void Nextion::dump_config() {
ESP_LOGCONFIG(TAG, "Nextion:"); ESP_LOGCONFIG(TAG, "Nextion:");
if (this->skip_connection_handshake_) { #ifdef USE_NEXTION_CONFIG_SKIP_CONNECTION_HANDSHAKE
ESP_LOGCONFIG(TAG, " Skip handshake: %s", YESNO(this->skip_connection_handshake_)); ESP_LOGCONFIG(TAG, " Skip handshake: YES");
} else { #else // USE_NEXTION_CONFIG_SKIP_CONNECTION_HANDSHAKE
ESP_LOGCONFIG(TAG,
" Device Model: %s\n"
" FW Version: %s\n"
" Serial Number: %s\n"
" Flash Size: %s",
this->device_model_.c_str(), this->firmware_version_.c_str(), this->serial_number_.c_str(),
this->flash_size_.c_str());
}
ESP_LOGCONFIG(TAG, ESP_LOGCONFIG(TAG,
" Wake On Touch: %s\n" " Device Model: %s\n"
" Exit reparse: %s", " FW Version: %s\n"
YESNO(this->connection_state_.auto_wake_on_touch_), YESNO(this->exit_reparse_on_start_)); " Serial Number: %s\n"
" Flash Size: %s\n"
#ifdef USE_NEXTION_CONFIG_EXIT_REPARSE_ON_START
" Exit reparse: YES\n"
#endif // USE_NEXTION_CONFIG_EXIT_REPARSE_ON_START
" Wake On Touch: %s",
this->device_model_.c_str(), this->firmware_version_.c_str(), this->serial_number_.c_str(),
this->flash_size_.c_str(), YESNO(this->auto_wake_on_touch_));
#endif // USE_NEXTION_CONFIG_SKIP_CONNECTION_HANDSHAKE
#ifdef USE_NEXTION_MAX_COMMANDS_PER_LOOP #ifdef USE_NEXTION_MAX_COMMANDS_PER_LOOP
ESP_LOGCONFIG(TAG, " Max commands per loop: %u", this->max_commands_per_loop_); ESP_LOGCONFIG(TAG, " Max commands per loop: %u", this->max_commands_per_loop_);
#endif // USE_NEXTION_MAX_COMMANDS_PER_LOOP #endif // USE_NEXTION_MAX_COMMANDS_PER_LOOP

View File

@ -932,21 +932,6 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe
*/ */
void set_backlight_brightness(float brightness); void set_backlight_brightness(float brightness);
/**
* Sets whether the Nextion display should skip the connection handshake process.
* @param skip_handshake True or false. When skip_connection_handshake is true,
* the connection will be established without performing the handshake.
* This can be useful when using Nextion Simulator.
*
* Example:
* ```cpp
* it.set_skip_connection_handshake(true);
* ```
*
* When set to true, the display will be marked as connected without performing a handshake.
*/
void set_skip_connection_handshake(bool skip_handshake) { this->skip_connection_handshake_ = skip_handshake; }
/** /**
* Sets Nextion mode between sleep and awake * Sets Nextion mode between sleep and awake
* @param True or false. Sleep=true to enter sleep mode or sleep=false to exit sleep mode. * @param True or false. Sleep=true to enter sleep mode or sleep=false to exit sleep mode.
@ -1236,20 +1221,6 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe
*/ */
void set_auto_wake_on_touch(bool auto_wake_on_touch); void set_auto_wake_on_touch(bool auto_wake_on_touch);
/**
* Sets if Nextion should exit the active reparse mode before the "connect" command is sent
* @param exit_reparse_on_start True or false. When exit_reparse_on_start is true, the exit reparse command
* will be sent before requesting the connection from Nextion.
*
* Example:
* ```cpp
* it.set_exit_reparse_on_start(true);
* ```
*
* The display will be requested to leave active reparse mode before setup.
*/
void set_exit_reparse_on_start(bool exit_reparse_on_start) { this->exit_reparse_on_start_ = exit_reparse_on_start; }
/** /**
* @brief Retrieves the number of commands pending in the Nextion command queue. * @brief Retrieves the number of commands pending in the Nextion command queue.
* *
@ -1292,7 +1263,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe
* the Nextion display. A connection is considered established when: * the Nextion display. A connection is considered established when:
* *
* - The initial handshake with the display is completed successfully, or * - The initial handshake with the display is completed successfully, or
* - The handshake is skipped via skip_connection_handshake_ flag * - The handshake is skipped via USE_NEXTION_CONFIG_SKIP_CONNECTION_HANDSHAKE flag
* *
* The connection status is particularly useful when: * The connection status is particularly useful when:
* - Troubleshooting communication issues * - Troubleshooting communication issues
@ -1358,8 +1329,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe
#ifdef USE_NEXTION_CONF_START_UP_PAGE #ifdef USE_NEXTION_CONF_START_UP_PAGE
uint8_t start_up_page_ = 255; uint8_t start_up_page_ = 255;
#endif // USE_NEXTION_CONF_START_UP_PAGE #endif // USE_NEXTION_CONF_START_UP_PAGE
bool exit_reparse_on_start_ = false; bool auto_wake_on_touch_ = true;
bool skip_connection_handshake_ = false;
/** /**
* Manually send a raw command to the display and don't wait for an acknowledgement packet. * Manually send a raw command to the display and don't wait for an acknowledgement packet.