Upload TFT for ESP-IDF
Still pending some clean-up, but I would say this is a working version.
This commit is contained in:
@@ -466,6 +466,10 @@ script:
|
||||
.url = url.c_str(),
|
||||
};
|
||||
esp_http_client_handle_t client = esp_http_client_init(&config);
|
||||
char range_header[64];
|
||||
sprintf(range_header, "bytes=%d-%d", range_start, range_end);
|
||||
ESP_LOGD(TAG, "Requesting range: %s", range_header);
|
||||
esp_http_client_set_header(client, "Range", range_header);
|
||||
esp_err_t err;
|
||||
if ((err = esp_http_client_open(client, 0)) != ESP_OK) {
|
||||
ESP_LOGE(TAG, "Failed to open HTTP connection: %s", esp_err_to_name(err));
|
||||
@@ -473,10 +477,6 @@ script:
|
||||
esp_http_client_cleanup(client);
|
||||
return -1;
|
||||
}
|
||||
//char range_header[64];
|
||||
//sprintf(range_header, "bytes=%d-%d", range_start, range_end);
|
||||
//ESP_LOGD(TAG, "Requesting range: %s", range_header);
|
||||
//esp_http_client_set_header(client, "Range", range_header);
|
||||
int content_length = esp_http_client_fetch_headers(client);
|
||||
ESP_LOGD(TAG, "content_length = %d", content_length);
|
||||
int total_read_len = 0, read_len;
|
||||
@@ -499,10 +499,28 @@ script:
|
||||
tf_uart->write_array(buffer, read_len);
|
||||
ESP_LOGI(TAG, "Write to UART successful");
|
||||
recv_ret_string_(recv_string, 5000, true);
|
||||
if (recv_string[0] != 0x05) { // 0x05 == "ok"
|
||||
content_length_ -= read_len;
|
||||
ESP_LOGD(TAG, "Uploaded %0.1f %%, remaining %d bytes",
|
||||
100.0 * (tft_size_ - content_length_) / tft_size_,
|
||||
content_length_);
|
||||
if (recv_string[0] != 0x05) { // 0x05 == "ok"
|
||||
ESP_LOGD(TAG, "recv_string [%s]",
|
||||
format_hex_pretty(reinterpret_cast<const uint8_t *>(recv_string.data()), recv_string.size()).c_str());
|
||||
}
|
||||
// handle partial upload request
|
||||
if (recv_string[0] == 0x08 && recv_string.size() == 5) {
|
||||
uint32_t result = 0;
|
||||
for (int j = 0; j < 4; ++j) {
|
||||
result += static_cast<uint8_t>(recv_string[j + 1]) << (8 * j);
|
||||
}
|
||||
if (result > 0) {
|
||||
ESP_LOGD(TAG, "Nextion reported new range %d", result);
|
||||
content_length_ = tft_size_ - result;
|
||||
esp_http_client_cleanup(client);
|
||||
esp_http_client_close(client);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
recv_string.clear();
|
||||
} else if (read_len == 0) {
|
||||
ESP_LOGI(TAG, "End of HTTP response reached");
|
||||
@@ -517,6 +535,8 @@ script:
|
||||
delete[] buffer;
|
||||
ESP_LOGI(TAG, "Memory for buffer deallocated");
|
||||
}
|
||||
esp_http_client_cleanup(client);
|
||||
esp_http_client_close(client);
|
||||
return range_end + 1;
|
||||
};
|
||||
auto upload_tft_ = [&](const std::string &url, unsigned int update_baud_rate_) -> bool {
|
||||
|
||||
Reference in New Issue
Block a user