main/task_user.c

changeset 26
8a3696620c0a
parent 25
cc7c423f03fb
child 27
8bb63daa7b46
--- a/main/task_user.c	Fri Nov 08 10:57:46 2019 +0100
+++ b/main/task_user.c	Fri Nov 08 22:40:15 2019 +0100
@@ -33,7 +33,7 @@
 extern SemaphoreHandle_t		xSemaphoreWiFi;			///< WiFi lock semaphore
 extern int				count_pub;			///< Published MQTT messages in transit
 extern int				Main_Loop1;			///< Main measure loop
-
+extern int				update_running;			///< If update is running
 
 const int TASK_USER_COLD = BIT0;					///< System cold start
 const int TASK_USER_WAKEUP = BIT1;					///< System wakeup from deepsleep
@@ -55,7 +55,7 @@
 {
     SecsCount++;
     if ((SecsCount % 60) == 0) {
-	if (Main_Loop1 == ML1_DONE)
+	if (Main_Loop1 == ML1_DONE && update_running == 0)
 	    Main_Loop1 = ML1_INIT;
     }
 
@@ -390,9 +390,9 @@
     	sprintf(buf, "%.2f bar", units[no].pressure / 1000.0);
     	w = u8g2_GetUTF8Width(&u8g2, buf);
     	u8g2_DrawUTF8(&u8g2, (128 - w) / 2,63, buf);
+	u8g2_SendBuffer(&u8g2);
 
 	xSemaphoreGive(xSemaphoreUnits);
-	u8g2_SendBuffer(&u8g2);
     } else {
 	ESP_LOGE(TAG, "screen_unit(%d) lock error", no);
     }
@@ -445,8 +445,8 @@
     	u8g2_DrawStr(&u8g2, 1, 43, buf);
     	snprintf(buf, 65, "Online %s", wifi_state->STA_online ? "Yes":"No");
     	u8g2_DrawStr(&u8g2, 1, 59, buf);
+	u8g2_SendBuffer(&u8g2);
 	xSemaphoreGive(xSemaphoreWiFi);
-	u8g2_SendBuffer(&u8g2);
     } else {
 	ESP_LOGE(TAG, "screen_wifi() lock error");
     }
@@ -468,12 +468,17 @@
 
 void screen_network()
 {
-    screen_top("Network Status");
-    menu_line(0, 1, 25, "IP   %s", wifi_state->STA_ip);
-    menu_line(0, 1, 37, "Mask %s", wifi_state->STA_nm);
-    menu_line(0, 1, 49, "GW   %s", wifi_state->STA_gw);
-    menu_line(0, 1, 61, "Name %s", config.hostname);
-    u8g2_SendBuffer(&u8g2);
+    if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) {
+    	screen_top("Network Status");
+    	menu_line(0, 1, 25, "IP   %s", wifi_state->STA_ip);
+    	menu_line(0, 1, 37, "Mask %s", wifi_state->STA_nm);
+    	menu_line(0, 1, 49, "GW   %s", wifi_state->STA_gw);
+    	menu_line(0, 1, 61, "Name %s", config.hostname);
+    	u8g2_SendBuffer(&u8g2);
+        xSemaphoreGive(xSemaphoreWiFi);
+    } else {
+        ESP_LOGE(TAG, "screen_network() lock error");
+    }
 }
 
 
@@ -521,6 +526,21 @@
 
 
 
+void screen_updating(char *m1, char *m2)
+{
+    screen_top("Updating ...");
+    u8g2_SetFont(&u8g2, u8g2_font_unifont_t_symbols);
+    if (m1) {
+	u8g2_DrawUTF8(&u8g2,2,30, m1);
+    }
+    if (m2) {
+	u8g2_DrawUTF8(&u8g2,2,55, m2);
+    }
+    u8g2_SendBuffer(&u8g2);
+}
+
+
+
 /**
  * @brief Interrupt service routine for the rotary pushbutton.
  */
@@ -665,6 +685,10 @@
                 screen_update();
                 break;
 
+	    case ML2_DO_UPDATE:
+		ESP_LOGI(TAG, "Loop user: Do update");
+		break;
+
             case ML2_SETUP_UNIT1:
             case ML2_SETUP_UNIT2:
             case ML2_SETUP_UNIT3:
@@ -859,6 +883,15 @@
 		}
 		break;
 
+	case ML2_UPDATE:
+		New_Loop2 = ML2_DO_UPDATE;
+		break;
+
+	case ML2_DO_UPDATE:
+		bin_update();
+		New_Loop2 = ML2_UPDATE;
+		break;
+
 	default:
 		break;
     }

mercurial