Shorter lock times.

Tue, 12 Nov 2019 10:36:53 +0100

author
Michiel Broek <mbroek@mbse.eu>
date
Tue, 12 Nov 2019 10:36:53 +0100
changeset 30
8b630bf52092
parent 29
106464d4c727
child 31
1f507aba6561

Shorter lock times.

main/task_user.c file | annotate | diff | comparison | revisions
main/u8g2_esp32_hal.h file | annotate | diff | comparison | revisions
--- a/main/task_user.c	Mon Nov 11 20:12:55 2019 +0100
+++ b/main/task_user.c	Tue Nov 12 10:36:53 2019 +0100
@@ -38,7 +38,7 @@
 const int TASK_USER_COLD = BIT0;					///< System cold start
 const int TASK_USER_WAKEUP = BIT1;					///< System wakeup from deepsleep
 const int TASK_USER_BUSY = BIT2;					///< User interface is busy doing something.
-
+const int TASK_USER_REFRESH = BIT3;					///< Refresh requested
 
 
 /**
@@ -344,26 +344,31 @@
 {
     char	buf[65];
     int		i;
-
-    screen_top("CO2 meter %s", app_desc->version);
+    uint32_t	temperature = 0, pressure[3];
 
     if (xSemaphoreTake(xSemaphoreUnits, 25) == pdTRUE) {
-
-    	u8g2_SetFont(&u8g2, u8g2_font_t0_22b_tf);
-    	sprintf(buf, "%.1f °C", units[0].temperature / 1000.0);
-    	u8g2_uint_t w = u8g2_GetUTF8Width(&u8g2, buf);
-    	u8g2_DrawUTF8(&u8g2, (128 - w) / 2,40, buf);
-    	u8g2_SetFont(&u8g2, u8g2_font_t0_18b_tf);
-
+	temperature = units[0].temperature;
 	for (i = 0; i < 3; i++) {
-    	    sprintf(buf, "%.1f", units[i].pressure / 1000.0);
-    	    w = u8g2_GetUTF8Width(&u8g2, buf);
-    	    u8g2_DrawUTF8(&u8g2, ((42 - w) / 2) + i * 43,63, buf);
+	    pressure[i] = units[i].pressure;
 	}
 	xSemaphoreGive(xSemaphoreUnits);
     } else {
 	ESP_LOGE(TAG, "screen_main() lock error");
     }
+
+    screen_top("CO2 meter %s", app_desc->version);
+    u8g2_SetFont(&u8g2, u8g2_font_t0_22b_tf);
+    sprintf(buf, "%.1f °C", temperature / 1000.0);
+    u8g2_uint_t w = u8g2_GetUTF8Width(&u8g2, buf);
+    u8g2_DrawUTF8(&u8g2, (128 - w) / 2,40, buf);
+    u8g2_SetFont(&u8g2, u8g2_font_t0_18b_tf);
+
+    for (i = 0; i < 3; i++) {
+	sprintf(buf, "%.1f", pressure[i] / 1000.0);
+	w = u8g2_GetUTF8Width(&u8g2, buf);
+	u8g2_DrawUTF8(&u8g2, ((42 - w) / 2) + i * 43,63, buf);
+    }
+
     u8g2_SendBuffer(&u8g2);
     u8g2_SetPowerSave(&u8g2, 0); // wake up display
 }
@@ -377,25 +382,29 @@
 void screen_unit(int no)
 {
     char        buf[65];
+    int		mode = 0;
+    uint32_t	temperature = 0, pressure = 0;
 
     if (xSemaphoreTake(xSemaphoreUnits, 35) == pdTRUE) {
-
-	screen_top("Meter %d %s", no + 1, units[no].mode ? "Aan":"Uit");
-
-    	u8g2_SetFont(&u8g2, u8g2_font_t0_22b_tf);
-    	sprintf(buf, "%.1f °C", units[no].temperature / 1000.0);
-    	u8g2_uint_t w = u8g2_GetUTF8Width(&u8g2, buf);
-    	u8g2_DrawUTF8(&u8g2, (128 - w) / 2,40, buf);
-
-    	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);
-
+	mode = units[no].mode;
+	temperature = units[no].temperature;
+	pressure = units[no].pressure;
 	xSemaphoreGive(xSemaphoreUnits);
     } else {
 	ESP_LOGE(TAG, "screen_unit(%d) lock error", no);
     }
+
+    screen_top("Meter %d %s", no + 1, mode ? "Aan":"Uit");
+
+    u8g2_SetFont(&u8g2, u8g2_font_t0_22b_tf);
+    sprintf(buf, "%.1f °C", temperature / 1000.0);
+    u8g2_uint_t w = u8g2_GetUTF8Width(&u8g2, buf);
+    u8g2_DrawUTF8(&u8g2, (128 - w) / 2,40, buf);
+
+    sprintf(buf, "%.2f bar", pressure / 1000.0);
+    w = u8g2_GetUTF8Width(&u8g2, buf);
+    u8g2_DrawUTF8(&u8g2, (128 - w) / 2,63, buf);
+    u8g2_SendBuffer(&u8g2);
 }
 
 
@@ -436,20 +445,25 @@
 void screen_wifi()
 {
     char	buf[65];
+    int8_t	rssi = 0;
+    bool	online = false;
 
     if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) {
-    	screen_top("WiFi Status");
     	snprintf(buf, 65, "SSID %s", wifi_state->STA_ssid);
-    	u8g2_DrawStr(&u8g2, 1, 28, buf);
-    	snprintf(buf, 65, "RSSI %d", wifi_state->STA_rssi);
-    	u8g2_DrawStr(&u8g2, 1, 43, buf);
-    	snprintf(buf, 65, "Verbonden %s", wifi_state->STA_online ? "Ja":"Nee");
-    	u8g2_DrawStr(&u8g2, 1, 59, buf);
-	u8g2_SendBuffer(&u8g2);
+	rssi = wifi_state->STA_rssi;
+	online = wifi_state->STA_online;
 	xSemaphoreGive(xSemaphoreWiFi);
     } else {
 	ESP_LOGE(TAG, "screen_wifi() lock error");
     }
+
+    screen_top("WiFi Status");
+    u8g2_DrawStr(&u8g2, 1, 28, buf);
+    snprintf(buf, 65, "RSSI %d", rssi);
+    u8g2_DrawStr(&u8g2, 1, 43, buf);
+    snprintf(buf, 65, "Verbonden %s", online ? "Ja":"Nee");
+    u8g2_DrawStr(&u8g2, 1, 59, buf);
+    u8g2_SendBuffer(&u8g2);
 }
 
 
@@ -468,17 +482,23 @@
 
 void screen_network()
 {
+    char	ip[17], nm[17], gw[17];
+
     if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) {
-    	screen_top("Netwerk 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, "Naam %s", config.hostname);
-    	u8g2_SendBuffer(&u8g2);
+	strcpy(ip, wifi_state->STA_ip);
+	strcpy(nm, wifi_state->STA_nm);
+	strcpy(gw, wifi_state->STA_gw);
         xSemaphoreGive(xSemaphoreWiFi);
     } else {
         ESP_LOGE(TAG, "screen_network() lock error");
     }
+
+    screen_top("Netwerk Status");
+    menu_line(0, 1, 25, "IP   %s", ip);
+    menu_line(0, 1, 37, "Mask %s", nm);
+    menu_line(0, 1, 49, "GW   %s", gw);
+    menu_line(0, 1, 61, "Naam %s", config.hostname);
+    u8g2_SendBuffer(&u8g2);
 }
 
 
@@ -755,13 +775,8 @@
  */
 void user_refresh(void)
 {
-    switch (Main_Loop2) {
-	case ML2_USER:  screen_main(); break;
-	case ML2_UNIT1: screen_unit(0); break;
-	case ML2_UNIT2: screen_unit(1); break;
-	case ML2_UNIT3: screen_unit(2); break;
-	case ML2_WIFI: screen_wifi(); break;
-    }
+    if (UserTimer)
+	xEventGroupSetBits(xEventGroupUser, TASK_USER_REFRESH);
 }
 
 
@@ -974,6 +989,18 @@
 	    while (UserTimer) {
 
 		menu_change();
+
+		if (xEventGroupGetBits(xEventGroupUser) & TASK_USER_REFRESH) {
+    		    switch (Main_Loop2) {
+        		case ML2_USER:  screen_main(); break;
+        		case ML2_UNIT1: screen_unit(0); break;
+        		case ML2_UNIT2: screen_unit(1); break;
+        		case ML2_UNIT3: screen_unit(2); break;
+        		case ML2_WIFI: screen_wifi(); break;
+    		    }
+		    xEventGroupClearBits(xEventGroupUser, TASK_USER_REFRESH);
+		}
+
 		if (xQueueReceive(event_queue, &event, 100 / portTICK_PERIOD_MS) == pdTRUE) {
 		    UserTimer = INACTIVITY;
 		    menu_rotary();
--- a/main/u8g2_esp32_hal.h	Mon Nov 11 20:12:55 2019 +0100
+++ b/main/u8g2_esp32_hal.h	Tue Nov 12 10:36:53 2019 +0100
@@ -1,8 +1,7 @@
-/*
- * u8g2_esp32_hal.h
- *
- *  Created on: Feb 12, 2017
- *      Author: kolban
+/**
+ * @file u8g2_esp32_hal.h
+ * @date Feb 12, 2017
+ * @author kolban
  */
 
 #ifndef U8G2_ESP32_HAL_H_
@@ -15,12 +14,12 @@
 
 #define U8G2_ESP32_HAL_UNDEFINED (-1)
 
-#define I2C_MASTER_NUM I2C_NUM_1           //  I2C port number for master dev
-#define I2C_MASTER_TX_BUF_DISABLE   0      //  I2C master do not need buffer
-#define I2C_MASTER_RX_BUF_DISABLE   0      //  I2C master do not need buffer
-#define I2C_MASTER_FREQ_HZ          50000  //  I2C master clock frequency
-#define ACK_CHECK_EN   0x1                 //  I2C master will check ack from slave
-#define ACK_CHECK_DIS  0x0                 //  I2C master will not check ack from slave
+#define I2C_MASTER_NUM I2C_NUM_1           ///<  I2C port number for master dev
+#define I2C_MASTER_TX_BUF_DISABLE   0      ///<  I2C master do not need buffer
+#define I2C_MASTER_RX_BUF_DISABLE   0      ///<  I2C master do not need buffer
+#define I2C_MASTER_FREQ_HZ          50000  ///<  I2C master clock frequency
+#define ACK_CHECK_EN   0x1                 ///<  I2C master will check ack from slave
+#define ACK_CHECK_DIS  0x0                 ///<  I2C master will not check ack from slave
 
 typedef struct {
 	gpio_num_t clk;

mercurial