|
@@ -68,7 +68,6 @@ static struct {
|
|
|
ota_type_t ota_type;
|
|
|
char * ota_write_data;
|
|
|
char * bin_data;
|
|
|
- char * http_client_write_buf;
|
|
|
bool bOTAStarted;
|
|
|
size_t buffer_size;
|
|
|
uint8_t lastpct;
|
|
@@ -83,7 +82,7 @@ static struct {
|
|
|
} ota_status;
|
|
|
|
|
|
struct timeval tv;
|
|
|
-static esp_http_client_config_t ota_config;
|
|
|
+static esp_http_client_config_t http_client_config;
|
|
|
|
|
|
void _printMemStats(){
|
|
|
ESP_LOGD(TAG,"Heap internal:%zu (min:%zu) external:%zu (min:%zu)",
|
|
@@ -283,7 +282,7 @@ esp_err_t _http_event_handler(esp_http_client_event_t *evt)
|
|
|
}
|
|
|
|
|
|
esp_err_t init_config(ota_thread_parms_t * p_ota_thread_parms){
|
|
|
- memset(&ota_config, 0x00, sizeof(ota_config));
|
|
|
+ memset(&http_client_config, 0x00, sizeof(http_client_config));
|
|
|
sendMessaging(MESSAGING_INFO,"Initializing...");
|
|
|
loc_displayer_progressbar(0);
|
|
|
ota_status.ota_type= OTA_TYPE_INVALID;
|
|
@@ -307,13 +306,14 @@ esp_err_t init_config(ota_thread_parms_t * p_ota_thread_parms){
|
|
|
}
|
|
|
switch (ota_status.ota_type) {
|
|
|
case OTA_TYPE_HTTP:
|
|
|
- ota_config.cert_pem =get_certificate();
|
|
|
- ota_config.event_handler = _http_event_handler;
|
|
|
- ota_config.disable_auto_redirect=true;
|
|
|
- ota_config.skip_cert_common_name_check = false;
|
|
|
- ota_config.url = strdup(p_ota_thread_parms->url);
|
|
|
- ota_config.max_redirection_count = 3;
|
|
|
- ota_config.buffer_size = ota_status.buffer_size;
|
|
|
+ http_client_config.cert_pem =get_certificate();
|
|
|
+ http_client_config.event_handler = _http_event_handler;
|
|
|
+ http_client_config.disable_auto_redirect=true;
|
|
|
+ http_client_config.skip_cert_common_name_check = false;
|
|
|
+ http_client_config.url = strdup(p_ota_thread_parms->url);
|
|
|
+ http_client_config.max_redirection_count = 3;
|
|
|
+ // buffer size below is for http read chunks
|
|
|
+ http_client_config.buffer_size = 1024 ;
|
|
|
break;
|
|
|
case OTA_TYPE_BUFFER:
|
|
|
ota_status.bin_data = p_ota_thread_parms->bin;
|
|
@@ -430,15 +430,16 @@ static esp_err_t _http_handle_response_code(esp_http_client_handle_t http_client
|
|
|
ESP_LOGD(TAG, "Redirection done, checking if we need to read the data. ");
|
|
|
if (process_again(status_code)) {
|
|
|
//ESP_LOGD(TAG, "We have to read some more data. Allocating buffer size %u",ota_config.buffer_size+1);
|
|
|
- char * local_buff = heap_caps_malloc(ota_status.buffer_size+1, (MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT));
|
|
|
+ //char * local_buff = heap_caps_malloc(ota_status.buffer_size+1, (MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT));
|
|
|
+
|
|
|
+// if(local_buff==NULL){
|
|
|
+// ESP_LOGE(TAG,"Failed to allocate internal memory buffer for http processing");
|
|
|
+// return ESP_ERR_NO_MEM;
|
|
|
+// }
|
|
|
|
|
|
- if(local_buff==NULL){
|
|
|
- ESP_LOGE(TAG,"Failed to allocate internal memory buffer for http processing");
|
|
|
- return ESP_ERR_NO_MEM;
|
|
|
- }
|
|
|
while (1) {
|
|
|
- ESP_LOGD(TAG, "Buffer successfully allocated. Reading data chunk. ");
|
|
|
- int data_read = esp_http_client_read(http_client, local_buff, ota_status.buffer_size);
|
|
|
+ ESP_LOGD(TAG, "Reading data chunk. ");
|
|
|
+ int data_read = esp_http_client_read(http_client, ota_status.ota_write_data, ota_status.buffer_size);
|
|
|
if (data_read < 0) {
|
|
|
ESP_LOGE(TAG, "Error: SSL data read error");
|
|
|
err= ESP_FAIL;
|
|
@@ -449,7 +450,7 @@ static esp_err_t _http_handle_response_code(esp_http_client_handle_t http_client
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
- FREE_RESET(local_buff);
|
|
|
+ //FREE_RESET(local_buff);
|
|
|
}
|
|
|
|
|
|
return err;
|
|
@@ -459,21 +460,21 @@ static esp_err_t _http_connect(esp_http_client_handle_t http_client)
|
|
|
esp_err_t err = ESP_FAIL;
|
|
|
int status_code, header_ret;
|
|
|
do {
|
|
|
- ESP_LOGD(TAG, "connecting the http client. ");
|
|
|
+ ESP_LOGI(TAG, "connecting the http client. ");
|
|
|
err = esp_http_client_open(http_client, 0);
|
|
|
if (err != ESP_OK) {
|
|
|
ESP_LOGE(TAG, "Failed to open HTTP connection: %s", esp_err_to_name(err));
|
|
|
sendMessaging(MESSAGING_ERROR,"Failed to open HTTP connection: %s", esp_err_to_name(err));
|
|
|
return err;
|
|
|
}
|
|
|
- ESP_LOGD(TAG, "Fetching headers");
|
|
|
+ ESP_LOGI(TAG, "Fetching headers");
|
|
|
header_ret = esp_http_client_fetch_headers(http_client);
|
|
|
if (header_ret < 0) {
|
|
|
// Error found
|
|
|
sendMessaging(MESSAGING_ERROR,"Header fetch failed");
|
|
|
return header_ret;
|
|
|
}
|
|
|
- ESP_LOGD(TAG, "HTTP Header fetch completed, found content length of %d",header_ret);
|
|
|
+ ESP_LOGI(TAG, "HTTP Header fetch completed, found content length of %d",header_ret);
|
|
|
status_code = esp_http_client_get_status_code(http_client);
|
|
|
ESP_LOGD(TAG, "HTTP status code was %d",status_code);
|
|
|
|
|
@@ -515,7 +516,7 @@ esp_err_t ota_buffer_all(){
|
|
|
esp_err_t err=ESP_OK;
|
|
|
if (ota_status.ota_type == OTA_TYPE_HTTP){
|
|
|
GDS_TextLine(display, 2, GDS_TEXT_LEFT, GDS_TEXT_CLEAR | GDS_TEXT_UPDATE, "Downloading file");
|
|
|
- ota_http_client = esp_http_client_init(&ota_config);
|
|
|
+ ota_http_client = esp_http_client_init(&http_client_config);
|
|
|
if (ota_http_client == NULL) {
|
|
|
sendMessaging(MESSAGING_ERROR,"Error: Failed to initialize HTTP connection.");
|
|
|
return ESP_FAIL;
|
|
@@ -567,7 +568,6 @@ esp_err_t ota_header_check(){
|
|
|
|
|
|
ota_status.configured = esp_ota_get_boot_partition();
|
|
|
ota_status.running = esp_ota_get_running_partition();
|
|
|
- ota_status.update_partition = esp_ota_get_next_update_partition(NULL);
|
|
|
ota_status.last_invalid_app= esp_ota_get_last_invalid_partition();
|
|
|
ota_status.ota_partition = _get_ota_partition(ESP_PARTITION_SUBTYPE_APP_OTA_0);
|
|
|
|
|
@@ -624,6 +624,7 @@ void ota_task(void *pvParameter)
|
|
|
ESP_LOGD(TAG, "HTTP ota Thread started");
|
|
|
_printMemStats();
|
|
|
|
|
|
+ ota_status.update_partition = esp_ota_get_next_update_partition(NULL);
|
|
|
|
|
|
ESP_LOGI(TAG,"Initializing OTA configuration");
|
|
|
err = init_config(pvParameter);
|