# HG changeset patch # User Michiel Broek # Date 1573551413 -3600 # Node ID 8b630bf52092b05375f0027c611cb2a2156fc5ed # Parent 106464d4c72747ca14948a1a1ab36241c1ea72cb Shorter lock times. diff -r 106464d4c727 -r 8b630bf52092 main/task_user.c --- 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(); diff -r 106464d4c727 -r 8b630bf52092 main/u8g2_esp32_hal.h --- 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;