Skip to content

Commit

Permalink
[nextion] Exit reparse before update TFT (esphome#6589)
Browse files Browse the repository at this point in the history
  • Loading branch information
edwardtfn authored Apr 29, 2024
1 parent 989a64b commit 05fbb26
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 3 deletions.
6 changes: 5 additions & 1 deletion esphome/components/nextion/nextion.h
Original file line number Diff line number Diff line change
Expand Up @@ -993,9 +993,13 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe

/**
* Upload the tft file and soft reset Nextion
* @param exit_reparse If true, the function exits reparse mode before uploading the TFT file. This parameter
* defaults to true, ensuring that the display is ready to receive and apply the new TFT file without needing
* to manually reset or reconfigure. Exiting reparse mode is recommended for most upload scenarios to ensure
* the display properly processes the uploaded file command.
* @return bool True: Transfer completed successfuly, False: Transfer failed.
*/
bool upload_tft();
bool upload_tft(bool exit_reparse = true);

void dump_config() override;

Expand Down
11 changes: 10 additions & 1 deletion esphome/components/nextion/nextion_upload_arduino.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,8 +141,9 @@ int Nextion::upload_by_chunks_(HTTPClient *http, int range_start) {
return range_end + 1;
}

bool Nextion::upload_tft() {
bool Nextion::upload_tft(bool exit_reparse) {
ESP_LOGD(TAG, "Nextion TFT upload requested");
ESP_LOGD(TAG, "Exit reparse: %s", YESNO(exit_reparse));
ESP_LOGD(TAG, "URL: %s", this->tft_url_.c_str());

if (this->is_updating_) {
Expand All @@ -157,6 +158,14 @@ bool Nextion::upload_tft() {

this->is_updating_ = true;

if (exit_reparse) {
ESP_LOGD(TAG, "Exiting Nextion reparse mode");
if (!this->set_protocol_reparse_mode(false)) {
ESP_LOGW(TAG, "Failed to request Nextion to exit reparse mode");
return false;
}
}

HTTPClient http;
http.setTimeout(15000); // Yes 15 seconds.... Helps 8266s along
bool begin_status = false;
Expand Down
11 changes: 10 additions & 1 deletion esphome/components/nextion/nextion_upload_idf.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -160,8 +160,9 @@ int Nextion::upload_range(const std::string &url, int range_start) {
return range_end + 1;
}

bool Nextion::upload_tft() {
bool Nextion::upload_tft(bool exit_reparse) {
ESP_LOGD(TAG, "Nextion TFT upload requested");
ESP_LOGD(TAG, "Exit reparse: %s", YESNO(exit_reparse));
ESP_LOGD(TAG, "url: %s", this->tft_url_.c_str());

if (this->is_updating_) {
Expand All @@ -176,6 +177,14 @@ bool Nextion::upload_tft() {

this->is_updating_ = true;

if (exit_reparse) {
ESP_LOGD(TAG, "Exiting Nextion reparse mode");
if (!this->set_protocol_reparse_mode(false)) {
ESP_LOGW(TAG, "Failed to request Nextion to exit reparse mode");
return false;
}
}

// Define the configuration for the HTTP client
ESP_LOGV(TAG, "Establishing connection to HTTP server");
ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size());
Expand Down

0 comments on commit 05fbb26

Please sign in to comment.