forked from xiaozhi/xiaozhi-esp32
bump to 0.8.0
This commit is contained in:
21
main/ota.cc
21
main/ota.cc
@@ -69,6 +69,19 @@ void Ota::CheckVersion() {
|
||||
ESP_LOGE(TAG, "Failed to parse JSON response");
|
||||
return;
|
||||
}
|
||||
|
||||
cJSON *mqtt = cJSON_GetObjectItem(root, "mqtt");
|
||||
if (mqtt != NULL) {
|
||||
cJSON *item = NULL;
|
||||
cJSON_ArrayForEach(item, mqtt) {
|
||||
if (item->type == cJSON_String) {
|
||||
mqtt_config_[item->string] = item->valuestring;
|
||||
ESP_LOGI(TAG, "MQTT config: %s = %s", item->string, item->valuestring);
|
||||
}
|
||||
}
|
||||
has_mqtt_config_ = true;
|
||||
}
|
||||
|
||||
cJSON *firmware = cJSON_GetObjectItem(root, "firmware");
|
||||
if (firmware == NULL) {
|
||||
ESP_LOGE(TAG, "Failed to get firmware object");
|
||||
@@ -148,12 +161,12 @@ void Ota::Upgrade(const std::string& firmware_url) {
|
||||
return;
|
||||
}
|
||||
|
||||
char buffer[4096];
|
||||
std::vector<char> buffer(4096);
|
||||
size_t total_read = 0, recent_read = 0;
|
||||
auto last_calc_time = esp_timer_get_time();
|
||||
while (true) {
|
||||
taskYIELD(); // Avoid watchdog timeout
|
||||
int ret = http->Read(buffer, sizeof(buffer));
|
||||
int ret = http->Read(buffer.data(), buffer.size());
|
||||
if (ret < 0) {
|
||||
ESP_LOGE(TAG, "Failed to read HTTP data: %s", esp_err_to_name(ret));
|
||||
delete http;
|
||||
@@ -179,7 +192,7 @@ void Ota::Upgrade(const std::string& firmware_url) {
|
||||
|
||||
|
||||
if (!image_header_checked) {
|
||||
image_header.append(buffer, ret);
|
||||
image_header.append(buffer.data(), ret);
|
||||
if (image_header.size() >= sizeof(esp_image_header_t) + sizeof(esp_image_segment_header_t) + sizeof(esp_app_desc_t)) {
|
||||
esp_app_desc_t new_app_info;
|
||||
memcpy(&new_app_info, image_header.data() + sizeof(esp_image_header_t) + sizeof(esp_image_segment_header_t), sizeof(esp_app_desc_t));
|
||||
@@ -202,7 +215,7 @@ void Ota::Upgrade(const std::string& firmware_url) {
|
||||
image_header_checked = true;
|
||||
}
|
||||
}
|
||||
auto err = esp_ota_write(update_handle, buffer, ret);
|
||||
auto err = esp_ota_write(update_handle, buffer.data(), ret);
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "Failed to write OTA data: %s", esp_err_to_name(err));
|
||||
esp_ota_abort(update_handle);
|
||||
|
||||
Reference in New Issue
Block a user