Merged with default stable

Mon, 25 Nov 2019 19:41:50 +0100

author
Michiel Broek <mbroek@mbse.eu>
date
Mon, 25 Nov 2019 19:41:50 +0100
branch
stable
changeset 73
baa34eaca140
parent 66
f066fdeb9650 (current diff)
parent 72
ff7f7b47d699 (diff)

Merged with default

--- a/Makefile	Fri Jul 05 16:17:04 2019 +0200
+++ b/Makefile	Mon Nov 25 19:41:50 2019 +0100
@@ -3,7 +3,7 @@
 # project subdirectory.
 #
 
-PROJECT_VER := "0.3.5"
+PROJECT_VER := "0.3.7"
 PROJECT_NAME := brewboard
 
 include $(IDF_PATH)/make/project.mk
--- a/image/version.txt	Fri Jul 05 16:17:04 2019 +0200
+++ b/image/version.txt	Mon Nov 25 19:41:50 2019 +0100
@@ -1,1 +1,1 @@
-0.3.5
+0.3.6
--- a/main/config.h	Fri Jul 05 16:17:04 2019 +0200
+++ b/main/config.h	Mon Nov 25 19:41:50 2019 +0100
@@ -27,7 +27,7 @@
 #include "driver/i2c.h"
 #include "esp_log.h"
 #include "esp_spiffs.h"
-#include "esp_event_loop.h"
+#include "esp_event.h"
 #include "esp_wifi.h"
 #include "esp_wifi_types.h"
 #include "esp_system.h"
--- a/main/recipes.c	Fri Jul 05 16:17:04 2019 +0200
+++ b/main/recipes.c	Mon Nov 25 19:41:50 2019 +0100
@@ -776,7 +776,7 @@
 			    recipe.Addition[i].Type = ADDITION_HOP;
 			}
 
-			EditFloat((char *)"Koel temperatuur", &recipe.CoolTemp, 10, 30, 2);
+			EditFloat((char *)"Koel temperatuur", &recipe.CoolTemp, 10, 45, 2);
 			recipe.CoolTemp = ((int)(recipe.CoolTemp * 4)) / 4.0;
 			EditFloat((char *)"Spoelwater temperatuur", &recipe.SpargeTemp, 75, 98, 2);
 			recipe.SpargeTemp = ((int)(recipe.SpargeTemp * 4)) / 4.0;
--- a/main/task_tft.c	Fri Jul 05 16:17:04 2019 +0200
+++ b/main/task_tft.c	Mon Nov 25 19:41:50 2019 +0100
@@ -492,7 +492,7 @@
 {
     char	msg[96];
 
-    ESP_LOGI(TAG, "Initialize TFT/Touch task");
+    ESP_LOGI(TAG, "Starting TFT/Touch");
 
     /*
      * Task loop. Read touchscreen events.
--- a/main/task_wifi.c	Fri Jul 05 16:17:04 2019 +0200
+++ b/main/task_wifi.c	Mon Nov 25 19:41:50 2019 +0100
@@ -144,51 +144,54 @@
 
 
 
-esp_err_t task_wifi_EventHandler(void *ctx, system_event_t *event)
+static void wifi_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data)
 {
-    switch(event->event_id) {
-	case SYSTEM_EVENT_SCAN_DONE:
+    switch(event_id) {
+	case WIFI_EVENT_SCAN_DONE:
 		// Get the results so the memory used is freed.
 		ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&ap_num, accessp_records));
 		_wifi_Scanned = ap_num;
 		_wifi_ScanDone = true;
 		break;
 
-	case SYSTEM_EVENT_STA_START:
+	case WIFI_EVENT_STA_START:
 		// Set the configured hostname for the dhcp client.
 		ESP_ERROR_CHECK(tcpip_adapter_set_hostname(TCPIP_ADAPTER_IF_STA, config.hostname));   
 		esp_wifi_connect();
 		break;
 
-	//   SYSTEM_EVENT_STA_STOP		3
-	case SYSTEM_EVENT_STA_CONNECTED: {
-		const system_event_sta_connected_t *connected = &event->event_info.connected;
-            	ESP_LOGI(TAG, "Event STA connected, ssid:%s, ssid_len:%d, bssid:" MACSTR ", channel:%d, authmode:%s",
-                       connected->ssid, connected->ssid_len, MAC2STR(connected->bssid), connected->channel, apsec[connected->authmode]);
+	case WIFI_EVENT_STA_CONNECTED: {
+		system_event_sta_connected_t* event = (wifi_event_sta_connected_t*) event_data;
 		wifi_ap_record_t ap_info;
-		esp_wifi_sta_get_ap_info(&ap_info);
+                esp_wifi_sta_get_ap_info(&ap_info);
+            	ESP_LOGI(TAG, "Event STA connected, ssid:%s, bssid:" MACSTR ", channel:%d, rssi: %d, authmode:%s",
+                       ap_info.ssid, MAC2STR(ap_info.bssid), event->channel, ap_info.rssi, apsec[event->authmode]);
 		if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) {
 		    wifi_state->STA_connected = true;
 		    wifi_state->STA_rssi = ap_info.rssi;
 		    sprintf(wifi_state->STA_ssid, "%s", ap_info.ssid);
 		    xSemaphoreGive(xSemaphoreWiFi);
-		}
+		} else {
+                    ESP_LOGE(TAG, "wifi_event_handler() lock error WIFI_EVENT_STA_CONNECTED");
+                }
 		xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED);
 		xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED);
 		break;
 	}
-	case SYSTEM_EVENT_STA_DISCONNECTED: {
-		const system_event_sta_disconnected_t *disconnected = &event->event_info.disconnected;
+	case WIFI_EVENT_STA_DISCONNECTED: {
+		wifi_event_sta_disconnected_t* disconnected = (wifi_event_sta_disconnected_t*) event_data;
 		wifi_ap_record_t    ap;
 
             	ESP_LOGW(TAG, "Event STA disconnected, ssid:%s, ssid_len:%d, bssid:" MACSTR ", reason:%d",
                        disconnected->ssid, disconnected->ssid_len, MAC2STR(disconnected->bssid), disconnected->reason);
-		if (xSemaphoreTake(xSemaphoreWiFi, 10) == pdTRUE) {
+		if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) {
 		    wifi_state->STA_connected = false;
 		    wifi_state->STA_online = false;
 		    wifi_state->STA_rssi = 0;
 		    xSemaphoreGive(xSemaphoreWiFi);
-		}
+		} else {
+                    ESP_LOGE(TAG, "wifi_event_handler() lock error WIFI_EVENT_STA_DISCONNECTED");
+                }
 		xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED);
 		xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED);
 		sntp_stop();
@@ -233,116 +236,126 @@
 		}
 		break;
 	}
-	//   SYSTEM_EVENT_STA_AUTHMODE_CHANGE	6
-	case SYSTEM_EVENT_STA_GOT_IP:
-		xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_HAS_IP);
-		tcpip_adapter_ip_info_t ip;
-		memset(&ip, 0, sizeof(tcpip_adapter_ip_info_t));
-		if (tcpip_adapter_get_ip_info(ESP_IF_WIFI_STA, &ip) == 0) {
-		    if (xSemaphoreTake(xSemaphoreWiFi, 10) == pdTRUE) {
-			wifi_state->STA_online = true;
-		    	snprintf(wifi_state->STA_ip, 16, IPSTR, IP2STR(&ip.ip));
-			snprintf(wifi_state->STA_nm, 16, IPSTR, IP2STR(&ip.netmask));
-			snprintf(wifi_state->STA_gw, 16, IPSTR, IP2STR(&ip.gw));
-		    	xSemaphoreGive(xSemaphoreWiFi);
-		    }
-		}
-		/*
-		 * There doesn't seem to be support for configuring NTP via DHCP so
-		 * we need to hardcode the ntp servers. The preffered server can be
-		 * set via the setup screen. It should be on your LAN, else leave it
-		 * empty. And if you are on a different lan someday, there is no extra
-		 * delay because the hostname will not be found. 
-		 */
-		sntp_stop();
-		if (strlen(config.ntp_server))
-		    sntp_setservername(0, config.ntp_server);
-		sntp_setservername(1, (char *)"pool.ntp.org"); // Will get you servers nearby
-                sntp_set_sync_mode(SNTP_SYNC_MODE_IMMED);
-                sntp_set_time_sync_notification_cb(time_sync_notification_cb);
-                sntp_init();
-#if 0
-		if (strlen(config.ntp_server))
-                    ESP_LOGI(TAG, "NTP server %s", sntp_getservername(0));
-		ESP_LOGI(TAG, "NTP server %s", sntp_getservername(1));
-#endif
-		break;
-
-	case SYSTEM_EVENT_STA_LOST_IP:
-		ESP_LOGW(TAG, "Lost IP address");
-		xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_HAS_IP);
-		if (xSemaphoreTake(xSemaphoreWiFi, 10) == pdTRUE) {
-		    wifi_state->STA_ip[0] = '\0';
-		    wifi_state->STA_nm[0] = '\0';
-		    wifi_state->STA_gw[0] = '\0';
-		    wifi_state->STA_online = false;
-		    xSemaphoreGive(xSemaphoreWiFi);
-		}
-		sntp_stop();
-		break;
-
-	//   SYSTEM_EVENT_STA_WPS_ER_SUCCESS	9
-	//   SYSTEM_EVENT_STA_WPS_ER_FAILED	10
-	//   SYSTEM_EVENT_STA_WPS_ER_TIMEOUT	11
-	//   SYSTEM_EVENT_STA_WPS_ER_PIN	12
-
-    	case SYSTEM_EVENT_AP_START:
+    	case WIFI_EVENT_AP_START:
     		xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_AP_STARTED);
 		if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) {
 		    wifi_state->AP_active = true;
 		    wifi_state->AP_clients = 0;
 		    xSemaphoreGive(xSemaphoreWiFi);
-		}
+		} else {
+                    ESP_LOGE(TAG, "wifi_event_handler() lock error WIFI_EVENT_AP_START");
+                }
 		break;
 
-	case SYSTEM_EVENT_AP_STOP:
+	case WIFI_EVENT_AP_STOP:
 		xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_AP_STARTED);
 		if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) {
 		    wifi_state->AP_active = false;
 		    wifi_state->AP_clients = 0;
 		    xSemaphoreGive(xSemaphoreWiFi);
-		}
+		} else {
+                    ESP_LOGE(TAG, "wifi_event_handler() lock error WIFI_EVENT_AP_STOP");
+                }
 		break;
 
-    	case SYSTEM_EVENT_AP_STACONNECTED: {
+    	case WIFI_EVENT_AP_STACONNECTED: {
 		if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) {
 		    wifi_state->AP_clients++;
 		    xSemaphoreGive(xSemaphoreWiFi);
-		}
-		const system_event_ap_staconnected_t *staconnected = &event->event_info.sta_connected;
+		} else {
+                    ESP_LOGE(TAG, "wifi_event_handler() lock error WIFI_EVENT_AP_STACONNECTED");
+                }
+		wifi_event_ap_staconnected_t* staconnected = (wifi_event_ap_staconnected_t*) event_data;
+//		const system_event_ap_staconnected_t *staconnected = &event->event_info.sta_connected;
             	ESP_LOGI(TAG, "Event AP connected, mac:" MACSTR ", aid:%d, conns:%d",
                        MAC2STR(staconnected->mac), staconnected->aid, wifi_state->AP_clients);
 		break;
 	}
-    	case SYSTEM_EVENT_AP_STADISCONNECTED: {
+    	case WIFI_EVENT_AP_STADISCONNECTED: {
 		if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) {
 		    if (wifi_state->AP_clients > 0)
 		    	wifi_state->AP_clients--;
 		    else
 		    	wifi_state->AP_clients = 0;
 		    xSemaphoreGive(xSemaphoreWiFi);
-		}
-		const system_event_ap_stadisconnected_t *stadisconnected = &event->event_info.sta_disconnected;
+		} else {
+                    ESP_LOGE(TAG, "wifi_event_handler() lock error WIFI_EVENT_AP_STADISCONNECTED");
+                }
+		wifi_event_ap_stadisconnected_t* stadisconnected = (wifi_event_ap_stadisconnected_t*) event_data;
+//		const system_event_ap_stadisconnected_t *stadisconnected = &event->event_info.sta_disconnected;
             	ESP_LOGI(TAG, "Event AP disconnected, mac:" MACSTR ", aid:%d, conns:%d",
                        MAC2STR(stadisconnected->mac), stadisconnected->aid, wifi_state->AP_clients);
 		break;
 	}
-	case SYSTEM_EVENT_AP_STAIPASSIGNED:
+	default:
+		ESP_LOGW(TAG, "Unknown WiFi event %d", event_id);
+        	break;
+    }
+}
+
+
+
+static void got_ip_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data)
+{
+    switch (event_id) {
+
+        case IP_EVENT_STA_GOT_IP:
+                xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_HAS_IP);
+		ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;
+                if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) {
+                    wifi_state->STA_online = true;
+                    snprintf(wifi_state->STA_ip, 16, "%s", ip4addr_ntoa(&event->ip_info.ip));
+                    snprintf(wifi_state->STA_nm, 16, "%s", ip4addr_ntoa(&event->ip_info.netmask));
+                    snprintf(wifi_state->STA_gw, 16, "%s", ip4addr_ntoa(&event->ip_info.gw));
+                    xSemaphoreGive(xSemaphoreWiFi);
+                } else {
+                    ESP_LOGE(TAG, "got_ip_event_handler() lock error IP_EVENT_STA_GOT_IP");
+            	}
+
+                /*
+                 * There doesn't seem to be support for configuring NTP via DHCP so
+                 * we need to hardcode the ntp servers. The preffered server can be
+                 * set via the setup screen. It should be on your LAN, else leave it
+                 * empty. And if you are on a different lan someday, there is no extra
+                 * delay because the hostname will not be found. 
+                 */
+                sntp_stop();
+                if (strlen(config.ntp_server))
+                    sntp_setservername(0, config.ntp_server);
+                sntp_setservername(1, (char *)"pool.ntp.org"); // Will get you servers nearby
+                sntp_set_sync_mode(SNTP_SYNC_MODE_IMMED);
+                sntp_set_time_sync_notification_cb(time_sync_notification_cb);
+                sntp_init();
+#if 0
+                if (strlen(config.ntp_server))
+                    ESP_LOGI(TAG, "NTP server %s", sntp_getservername(0));
+                ESP_LOGI(TAG, "NTP server %s", sntp_getservername(1));
+#endif
+                break;
+
+        case IP_EVENT_STA_LOST_IP:
+                ESP_LOGW(TAG, "Lost IP address");
+                xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_HAS_IP);
+                if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) {
+                    wifi_state->STA_ip[0] = '\0';
+                    wifi_state->STA_nm[0] = '\0';
+                    wifi_state->STA_gw[0] = '\0';
+                    wifi_state->STA_online = false;
+                    xSemaphoreGive(xSemaphoreWiFi);
+                } else {
+                    ESP_LOGE(TAG, "got_ip_event_handler() lock error IP_EVENT_STA_LOST_IP");
+            	}
+                sntp_stop();
+                break;
+
+	case IP_EVENT_AP_STAIPASSIGNED:
+		ESP_LOGI(TAG, "IP_EVENT_AP_STAIPASSIGNED");
 		break;
 
-	//   SYSTEM_EVENT_AP_PROBEREQRECVED	18
-	//   SYSTEM_EVENT_GOT_IP6		19
-	//   SYSTEM_EVENT_ETH_START		20
-	//   SYSTEM_EVENT_ETH_STOP		21
-	//   SYSTEM_EVENT_ETH_CONNECTED		22
-	//   SYSTEM_EVENT_ETH_DISCONNECTED	23
-	//   SYSTEM_EVENT_ETH_GOT_IP		24
-
-	default:
-		printf("Unknown event %d\n", event->event_id);
-        	break;
+        default:
+            ESP_LOGW(TAG, "Unknown IP event %d", event_id);
+            break;
     }
-    return ESP_OK;
 }
 
 
@@ -384,7 +397,7 @@
     xEventGroupWifi = xEventGroupCreate();
     /* initialize the tcp stack */
     tcpip_adapter_init();
-    ESP_ERROR_CHECK(esp_event_loop_init(task_wifi_EventHandler, NULL));
+    ESP_ERROR_CHECK(esp_event_loop_create_default());
 
     /*
      * memory allocation of objects used by the task 
@@ -429,11 +442,15 @@
      */
     wifi_init_config_t wifi_init_config = WIFI_INIT_CONFIG_DEFAULT();
     ESP_ERROR_CHECK(esp_wifi_init(&wifi_init_config));
+
+    ESP_ERROR_CHECK( esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL) );
+    ESP_ERROR_CHECK( esp_event_handler_register(IP_EVENT, ESP_EVENT_ANY_ID /*IP_EVENT_STA_GOT_IP*/, &got_ip_event_handler, NULL) );
+
     ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM));
     ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_APSTA));
     ESP_ERROR_CHECK(esp_wifi_set_bandwidth(WIFI_IF_AP, config.ap_bandwidth));
 
-    // configure the softAP and start it */
+    /* configure the softAP and start it */
     wifi_config_t ap_config = {
 	.ap = {
 	    .ssid_len = 0,
--- a/main/updates.c	Fri Jul 05 16:17:04 2019 +0200
+++ b/main/updates.c	Mon Nov 25 19:41:50 2019 +0100
@@ -36,9 +36,6 @@
     TFT_setFont(DEJAVU18_FONT, NULL);
     _fg = TFT_CYAN;
     const esp_partition_t       *running = esp_ota_get_running_partition();
-    snprintf(temp, 63, "Running part.type %d sub %d,\r\nat offset 0x%08x\r\n",
-		running->type, running->subtype, running->address);
-    TFT_print(temp, 0, LASTY);
 
     /*
      * Don't use https because it costs more then 100K memory.
@@ -82,10 +79,11 @@
 	goto updateerr;
     }
 
-    TFT_print((char *)"Begin download.\r\n", 0, LASTY);
+    TFT_print((char *)"Begin firmware download.\r\n", 0, LASTY);
     ESP_LOGI(TAG, "Download update %s size %d", update.url, content_length);
     int binary_file_length = 0;
     /*deal with all receive packet*/
+    bool image_header_was_checked = false;
     while (1) {
 	int data_read = esp_http_client_read(client, ota_write_data, BUFFSIZE);
 	if (data_read < 0) {
@@ -93,13 +91,63 @@
 	    http_cleanup(client);
 	    goto updateerr;;
 	} else if (data_read > 0) {
+	    if (image_header_was_checked == false) {
+		esp_app_desc_t new_app_info;
+                if (data_read > sizeof(esp_image_header_t) + sizeof(esp_image_segment_header_t) + sizeof(esp_app_desc_t)) {
+                    // check current version with downloading
+                    memcpy(&new_app_info, &ota_write_data[sizeof(esp_image_header_t) + sizeof(esp_image_segment_header_t)], sizeof(esp_app_desc_t));
+
+                    esp_app_desc_t running_app_info;
+                    if (esp_ota_get_partition_description(running, &running_app_info) == ESP_OK) {
+                        ESP_LOGI(TAG, "Running firmware version: %s, %s %s", running_app_info.version, running_app_info.date, running_app_info.time);
+                    }
+
+                    const esp_partition_t* last_invalid_app = esp_ota_get_last_invalid_partition();
+                    esp_app_desc_t invalid_app_info;
+                    if (esp_ota_get_partition_description(last_invalid_app, &invalid_app_info) == ESP_OK) {
+                        ESP_LOGI(TAG, "Last invalid firmware version: %s", invalid_app_info.version);
+                    }
+
+                    // check current sha256 with last invalid partition
+                    if (last_invalid_app != NULL) {
+                        if (memcmp(invalid_app_info.app_elf_sha256, new_app_info.app_elf_sha256, 32) == 0) {
+                            ESP_LOGW(TAG, "New version is the same as invalid version.");
+                            ESP_LOGW(TAG, "Previously, there was an attempt to launch the firmware with %s version, but it failed.", invalid_app_info.version);
+                            ESP_LOGW(TAG, "The firmware has been rolled back to the previous version.");
+                            http_cleanup(client);
+			    goto updateok;
+                        }
+                    }
+
+		    if (memcmp(new_app_info.app_elf_sha256, running_app_info.app_elf_sha256, 32) == 0) {
+                        ESP_LOGI(TAG, "Current running version is the same as a new.");
+                        http_cleanup(client);
+			goto updateok;
+                    }
+
+                    image_header_was_checked = true;
+
+                    err = esp_ota_begin(update_partition, OTA_SIZE_UNKNOWN, &update_handle);
+                    if (err != ESP_OK) {
+                        ESP_LOGE(TAG, "esp_ota_begin failed (%s)", esp_err_to_name(err));
+                        http_cleanup(client);
+			goto updateerr;
+                    }
+                    ESP_LOGI(TAG, "Continue upgrade application");
+		    TFT_print((char *)"Download new version.\r\n", 0, LASTY);
+                } else {
+                    ESP_LOGE(TAG, "Received package is not fit len");
+                    http_cleanup(client);
+		    goto updateerr;
+                }
+	    }
 	    err = esp_ota_write( update_handle, (const void *)ota_write_data, data_read);
 	    if (err != ESP_OK) {
 		http_cleanup(client);
 		goto updateerr;;
 	    }
 	    binary_file_length += data_read;
-//	    ESP_LOGD(TAG, "Written image length %d", binary_file_length);
+	    ESP_LOGD(TAG, "Written image length %d", binary_file_length);
 	} else if (data_read == 0) {
 	    break;
 	}
@@ -108,6 +156,10 @@
     ESP_LOGI(TAG, "Download complete, binary data length: %d", binary_file_length);
     http_cleanup(client);
 
+    if (binary_file_length != content_length) {
+	ESP_LOGE(TAG, "Incomplete file");
+	goto updateerr;
+    }
     if (esp_ota_end(update_handle) != ESP_OK) {
 	ESP_LOGE(TAG, "esp_ota_end failed!");
 	goto updateerr;
@@ -115,14 +167,8 @@
     snprintf(temp, 63, "Received image %d bytes\r\n", binary_file_length);
     TFT_print(temp, 0, LASTY);
 
-    if (esp_partition_check_identity(esp_ota_get_running_partition(), update_partition) == true) {
-	ESP_LOGI(TAG, "Already the latest version");
-	TFT_print((char *)"Already the latest version.\r\n", LASTX, LASTY);
-	goto updateok;
-    }
-
     /*
-     * Here we have a different and hopefully newer version, install and boot it.
+     * Here we have new version, install and boot it.
      */
     err = esp_ota_set_boot_partition(update_partition);
     if (err != ESP_OK) {
@@ -134,7 +180,7 @@
     TFT_print((char *)"Rebooting ...", 0, LASTY);
     vTaskDelay(1000 / portTICK_PERIOD_MS);
     esp_restart();
-    return ;
+    return;
 
 updateerr:
     _fg = TFT_RED;
@@ -306,7 +352,6 @@
 	    fclose(f);
 	    goto spiffs_error;
 	}
-//	vTaskDelay(10 / portTICK_PERIOD_MS);
     }
     fclose(f);
     unlink("/spiffs/version.old");
@@ -316,7 +361,6 @@
 spiffs_error:
     _fg = TFT_RED;
     TFT_print((char *)"error\r\n", LASTX, LASTY);
-
 }
 
 
--- a/sdkconfig	Fri Jul 05 16:17:04 2019 +0200
+++ b/sdkconfig	Mon Nov 25 19:41:50 2019 +0100
@@ -4,6 +4,7 @@
 #
 CONFIG_IDF_TARGET_ESP32=y
 CONFIG_IDF_TARGET="esp32"
+CONFIG_IDF_FIRMWARE_CHIP_ID=0x0000
 
 #
 # SDK tool configuration
@@ -11,6 +12,11 @@
 CONFIG_SDK_TOOLPREFIX="xtensa-esp32-elf-"
 CONFIG_SDK_PYTHON="python"
 CONFIG_SDK_MAKE_WARN_UNDEFINED_VARIABLES=y
+CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y
+# CONFIG_APP_BUILD_TYPE_ELF_RAM is not set
+CONFIG_APP_BUILD_GENERATE_BINARIES=y
+CONFIG_APP_BUILD_BOOTLOADER=y
+CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y
 CONFIG_APP_COMPILE_TIME_DATE=y
 # CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set
 # CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set
@@ -27,6 +33,9 @@
 # CONFIG_BOOTLOADER_APP_TEST is not set
 # CONFIG_BOOTLOADER_WDT_ENABLE is not set
 # CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set
+# CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set
+CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0
+# CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set
 # CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set
 # CONFIG_SECURE_BOOT_ENABLED is not set
 # CONFIG_SECURE_FLASH_ENC_ENABLED is not set
@@ -86,8 +95,10 @@
 CONFIG_PARTITION_TABLE_FILENAME="partitions.csv"
 CONFIG_PARTITION_TABLE_OFFSET=0x8000
 CONFIG_PARTITION_TABLE_MD5=y
-CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y
-# CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set
+CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y
+# CONFIG_COMPILER_OPTIMIZATION_SIZE is not set
+# CONFIG_COMPILER_OPTIMIZATION_PERF is not set
+# CONFIG_COMPILER_OPTIMIZATION_NONE is not set
 CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y
 # CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set
 # CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set
@@ -111,12 +122,17 @@
 CONFIG_BTDM_CTRL_PINNED_TO_CORE=0
 CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF=1
 CONFIG_BT_RESERVE_DRAM=0
+CONFIG_COAP_MBEDTLS_PSK=y
+# CONFIG_COAP_MBEDTLS_PKI is not set
+# CONFIG_COAP_MBEDTLS_DEBUG is not set
+CONFIG_COAP_LOG_DEFAULT_LEVEL=0
 # CONFIG_ADC_FORCE_XPD_FSM is not set
 CONFIG_ADC_DISABLE_DAC=y
 # CONFIG_SPI_MASTER_IN_IRAM is not set
 CONFIG_SPI_MASTER_ISR_IN_IRAM=y
 # CONFIG_SPI_SLAVE_IN_IRAM is not set
 CONFIG_SPI_SLAVE_ISR_IN_IRAM=y
+# CONFIG_UART_ISR_IN_IRAM is not set
 # CONFIG_EFUSE_CUSTOM_TABLE is not set
 # CONFIG_EFUSE_VIRTUAL is not set
 # CONFIG_EFUSE_CODE_SCHEME_COMPAT_NONE is not set
@@ -124,6 +140,13 @@
 # CONFIG_EFUSE_CODE_SCHEME_COMPAT_REPEAT is not set
 CONFIG_EFUSE_MAX_BLK_LEN=192
 # CONFIG_ESP_TLS_SERVER is not set
+# CONFIG_ESP_TLS_PSK_VERIFICATION is not set
+CONFIG_ESP32_REV_MIN_0=y
+# CONFIG_ESP32_REV_MIN_1 is not set
+# CONFIG_ESP32_REV_MIN_2 is not set
+# CONFIG_ESP32_REV_MIN_3 is not set
+CONFIG_ESP32_REV_MIN=0
+CONFIG_ESP32_DPORT_WORKAROUND=y
 # CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set
 # CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set
 CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y
@@ -173,6 +196,8 @@
 # CONFIG_ESP32_NO_BLOBS is not set
 # CONFIG_ESP32_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set
 # CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE is not set
+CONFIG_ESP32_DPORT_DIS_INTERRUPT_LVL=5
+# CONFIG_ESP32_PANIC_HANDLER_IRAM is not set
 # CONFIG_PM_ENABLE is not set
 CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y
 CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y
@@ -210,6 +235,9 @@
 CONFIG_ETH_DMA_BUFFER_SIZE=512
 CONFIG_ETH_DMA_RX_BUFFER_NUM=10
 CONFIG_ETH_DMA_TX_BUFFER_NUM=10
+CONFIG_ETH_USE_SPI_ETHERNET=y
+CONFIG_ETH_SPI_ETHERNET_DM9051=y
+CONFIG_ETH_DM9051_INT_GPIO=4
 # CONFIG_ESP_EVENT_LOOP_PROFILING is not set
 CONFIG_ESP_EVENT_POST_FROM_ISR=y
 CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y
@@ -319,9 +347,7 @@
 CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
 CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
 CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
-CONFIG_FREERTOS_USE_TRACE_FACILITY=y
-CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
-# CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID is not set
+# CONFIG_FREERTOS_USE_TRACE_FACILITY is not set
 # CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set
 # CONFIG_FREERTOS_DEBUG_INTERNALS is not set
 CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y
@@ -353,10 +379,11 @@
 CONFIG_LWIP_SO_REUSE=y
 CONFIG_LWIP_SO_REUSE_RXTOALL=y
 # CONFIG_LWIP_SO_RCVBUF is not set
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
 # CONFIG_LWIP_IP_FRAG is not set
 # CONFIG_LWIP_IP_REASSEMBLY is not set
 # CONFIG_LWIP_STATS is not set
-CONFIG_LWIP_ETHARP_TRUST_IP_MAC=y
+# CONFIG_LWIP_ETHARP_TRUST_IP_MAC is not set
 CONFIG_LWIP_ESP_GRATUITOUS_ARP=y
 CONFIG_LWIP_GARP_TMR_INTERVAL=60
 CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
@@ -371,7 +398,7 @@
 CONFIG_LWIP_MAX_LISTENING_TCP=16
 CONFIG_LWIP_TCP_MAXRTX=12
 CONFIG_LWIP_TCP_SYNMAXRTX=6
-CONFIG_LWIP_TCP_MSS=1436
+CONFIG_LWIP_TCP_MSS=1440
 CONFIG_LWIP_TCP_MSL=60000
 CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
 CONFIG_LWIP_TCP_WND_DEFAULT=5744
@@ -400,6 +427,8 @@
 CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=16384
 # CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN is not set
 # CONFIG_MBEDTLS_DEBUG is not set
+# CONFIG_MBEDTLS_ECP_RESTARTABLE is not set
+# CONFIG_MBEDTLS_CMAC_C is not set
 CONFIG_MBEDTLS_HARDWARE_AES=y
 # CONFIG_MBEDTLS_HARDWARE_MPI is not set
 # CONFIG_MBEDTLS_HARDWARE_SHA is not set
@@ -412,7 +441,11 @@
 CONFIG_MBEDTLS_TLS_SERVER=y
 CONFIG_MBEDTLS_TLS_CLIENT=y
 CONFIG_MBEDTLS_TLS_ENABLED=y
-# CONFIG_MBEDTLS_PSK_MODES is not set
+CONFIG_MBEDTLS_PSK_MODES=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_PSK=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_PSK=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_PSK=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_RSA_PSK=y
 CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y
 CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA=y
 CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y
@@ -425,7 +458,7 @@
 CONFIG_MBEDTLS_SSL_PROTO_TLS1=y
 CONFIG_MBEDTLS_SSL_PROTO_TLS1_1=y
 CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y
-# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set
+CONFIG_MBEDTLS_SSL_PROTO_DTLS=y
 CONFIG_MBEDTLS_SSL_ALPN=y
 CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y
 CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y
@@ -477,14 +510,14 @@
 # CONFIG_OPENSSL_DEBUG is not set
 CONFIG_OPENSSL_ASSERT_DO_NOTHING=y
 # CONFIG_OPENSSL_ASSERT_EXIT is not set
-CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5
-CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072
-CONFIG_ESP32_PTHREAD_STACK_MIN=768
-CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y
-# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set
-# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set
-CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1
-CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread"
+CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5
+CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072
+CONFIG_PTHREAD_STACK_MIN=768
+CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY=y
+# CONFIG_PTHREAD_DEFAULT_CORE_0 is not set
+# CONFIG_PTHREAD_DEFAULT_CORE_1 is not set
+CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1
+CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread"
 # CONFIG_SPI_FLASH_VERIFY_WRITE is not set
 # CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set
 CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y
@@ -533,7 +566,7 @@
 CONFIG_WEBSOCKET_SERVER_TASK_STACK_DEPTH=7000
 CONFIG_WEBSOCKET_SERVER_TASK_PRIORITY=5
 CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16
-# CONFIG_WPA_ENTERPRISE is not set
+CONFIG_WPA_MBEDTLS_CRYPTO=y
 # CONFIG_LEGACY_INCLUDE_COMMON_HEADERS is not set
 
 # Deprecated options for backward compatibility
@@ -562,8 +595,8 @@
 # CONFIG_MONITOR_BAUD_OTHER is not set
 CONFIG_MONITOR_BAUD_OTHER_VAL=115200
 CONFIG_MONITOR_BAUD=115200
-CONFIG_OPTIMIZATION_LEVEL_DEBUG=y
-# CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set
+CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y
+# CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set
 CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y
 # CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set
 # CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set
@@ -653,7 +686,7 @@
 CONFIG_TCPIP_RECVMBOX_SIZE=32
 CONFIG_TCP_MAXRTX=12
 CONFIG_TCP_SYNMAXRTX=6
-CONFIG_TCP_MSS=1436
+CONFIG_TCP_MSS=1440
 CONFIG_TCP_MSL=60000
 CONFIG_TCP_SND_BUF_DEFAULT=5744
 CONFIG_TCP_WND_DEFAULT=5744
@@ -670,7 +703,14 @@
 # CONFIG_TCPIP_TASK_AFFINITY_CPU1 is not set
 CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF
 # CONFIG_PPP_SUPPORT is not set
-CONFIG_PTHREAD_STACK_MIN=768
+CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5
+CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072
+CONFIG_ESP32_PTHREAD_STACK_MIN=768
+CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y
+# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set
+# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set
+CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1
+CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread"
 CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y
 # CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set
 # CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set

mercurial