diff -r 331e7f700971 -r 495b7eafbf5a main/task_user.c --- a/main/task_user.c Tue Nov 12 21:57:40 2019 +0100 +++ b/main/task_user.c Sun Nov 17 12:58:39 2019 +0100 @@ -26,6 +26,7 @@ int edit_ssid = 0; ///< SSID being edited int num_ssids = 0; ///< Number of SSIDs we know struct strStations editAP; ///< Data of station to edit +char sensors[DS18B20_MAX][17]; ///< Sensors to select extern const esp_app_desc_t *app_desc; extern unit_t units[3]; ///< Pressure test units @@ -39,6 +40,7 @@ extern int count_pub; ///< Published MQTT messages in transit extern int Main_Loop1; ///< Main measure loop extern int update_running; ///< If update is running +extern int num_sensors; ///< Detected DS18B20 sensors const int TASK_USER_COLD = BIT0; ///< System cold start const int TASK_USER_WAKEUP = BIT1; ///< System wakeup from deepsleep @@ -330,11 +332,14 @@ */ void screen_splash() { - screen_top("CO2 meter %s", app_desc->version); +// screen_top("CO2 meter %s", app_desc->version); - u8g2_SetFont(&u8g2, u8g2_font_t0_22b_tf); - u8g2_uint_t w = u8g2_GetUTF8Width(&u8g2, "Welkom"); - u8g2_DrawUTF8(&u8g2, (128 - w) / 2,50, "Welkom"); +// u8g2_SetFont(&u8g2, u8g2_font_t0_22b_tf); +// u8g2_uint_t w = u8g2_GetUTF8Width(&u8g2, "Welkom"); +// u8g2_DrawUTF8(&u8g2, (128 - w) / 2,50, "Welkom"); + +u8g2_SetDrawColor(&u8g2, 1); +u8g2_DrawBox(&u8g2, 0, 0, 128, 64); u8g2_SendBuffer(&u8g2); u8g2_SetPowerSave(&u8g2, 0); // wake up display @@ -430,6 +435,37 @@ +void screen_list_sensors(int no, int sub, int offset) +{ + int i; + + if (xSemaphoreTake(xSemaphoreDS18B20, 10) == pdTRUE) { + for (i = 0; i < ds18b20_state->num_sensors; i++) { + strncpy(sensors[i], ds18b20_state->sensor[i].rom_code, 17); + sensors[i][16] = '\0'; + } + xSemaphoreGive(xSemaphoreDS18B20); + } else { + ESP_LOGE(TAG, "screen_list_sensors() DS18B20 lock error"); + } + + screen_top("DS18B20 lijst"); + if (num_sensors == 0) { + menu_line(0, 1, 25, "Geen sensors"); + } else { + for (i = 0; i < num_sensors; i++) { + menu_line(sub == i, 1, 25 + (i * 12), sensors[i + offset]); + if (i == 3) + break; + } + if ((i + offset) == num_sensors) + menu_line(sub == i, 1, 25 + (i * 12), "Terug"); + } + u8g2_SendBuffer(&u8g2); +} + + + /** * @brief The unit setup screen. * @param no The unit index number. @@ -814,6 +850,14 @@ screen_unit_zero(Main_Loop2 - ML2_ZERO_UNIT1, SubMenu); break; + case ML2_SEL_SENSOR1: + case ML2_SEL_SENSOR2: + case ML2_SEL_SENSOR3: + ESP_LOGI(TAG, "Loop user: Select sensor %d", Main_Loop2 - ML2_SEL_SENSOR1); + SubMenu = SubOffset = 0; + screen_list_sensors(Main_Loop2 - ML2_SEL_SENSOR1, SubMenu, SubOffset); + break; + case ML2_INACTIVE: ESP_LOGI(TAG, "Loop user: Inactive"); u8g2_SetPowerSave(&u8g2, 1); // powersave display @@ -849,6 +893,11 @@ case ML2_ZERO_UNIT3: if (rotate_to_sub(event.state.position, 1, &SubMenu, &SubOffset)) screen_unit_zero(Main_Loop2 - ML2_ZERO_UNIT1, SubMenu); break; + case ML2_SEL_SENSOR1: + case ML2_SEL_SENSOR2: + case ML2_SEL_SENSOR3: if (rotate_to_sub(event.state.position, num_sensors, &SubMenu, &SubOffset)) + screen_list_sensors(Main_Loop2 - ML2_SEL_SENSOR1, SubMenu, SubOffset); + break; case ML2_SETUP_WIFI: if (rotate_to_sub(event.state.position, 2, &SubMenu, &SubOffset)) screen_wifi_setup(SubMenu); break; @@ -918,11 +967,13 @@ screen_unit_setup(idx, SubMenu); if (Main_Loop1 == ML1_DONE) Main_Loop1 = ML1_INIT; - } - if (SubMenu == 1) + } else if (SubMenu == 1) { New_Loop2 = ML2_ZERO_UNIT1 + idx; - if (SubMenu == 3) + } else if (SubMenu == 2) { + New_Loop2 = ML2_SEL_SENSOR1 + idx; + } else if (SubMenu == 3) { New_Loop2 = ML2_UNIT1 + idx; + } break; case ML2_ZERO_UNIT1: @@ -943,13 +994,26 @@ if (Main_Loop1 == ML1_DONE) Main_Loop1 = ML1_INIT; } - } - if (SubMenu == 1) { + } else if (SubMenu == 1) { New_Loop2 = ML2_SETUP_UNIT1 + idx; SubMenu = 1; } break; + case ML2_SEL_SENSOR1: + case ML2_SEL_SENSOR2: + case ML2_SEL_SENSOR3: + idx = Main_Loop2 - ML2_SEL_SENSOR1; + if ((SubMenu + SubOffset) < num_sensors) { + ESP_LOGI(TAG, "Select sensor %d %s for unit %d", SubMenu + SubOffset, sensors[SubMenu + SubOffset], idx + 1); + + } else { + New_Loop2 = ML2_SETUP_UNIT1 + idx; + SubMenu = 2; + SubOffset = 0; + } + break; + case ML2_WIFI: New_Loop2 = ML2_SETUP_WIFI; break; @@ -957,15 +1021,13 @@ case ML2_SETUP_WIFI: if (SubMenu == 0) { New_Loop2 = ML2_LIST_APS; - } - if (SubMenu == 1) { + } else if (SubMenu == 1) { edit_ssid = -1; editAP.SSID[0] = '\0'; editAP.Password[0] = '\0'; SubMenu = SubOffset = 0; New_Loop2 = ML2_EDIT_AP; - } - if (SubMenu == 2) { + } else if (SubMenu == 2) { New_Loop2 = ML2_WIFI; } break; @@ -987,12 +1049,10 @@ if (SubMenu == 0) { rotary_editer("SSID", editAP.SSID, "", 16, EDIT_TYPE_TEXT); screen_edit_ap(SubMenu); - } - if (SubMenu == 1) { + } else if (SubMenu == 1) { rotary_editer("PSK", editAP.Password, "", 16, EDIT_TYPE_TEXT); screen_edit_ap(SubMenu); - } - if (SubMenu == 2 || SubMenu == 3) { + } else if (SubMenu == 2 || SubMenu == 3) { update_running = 1; // Block measurements int timeout = 600; if (edit_ssid < 0) @@ -1032,12 +1092,10 @@ if (SubMenu == 0) { rotary_editer("Hostnaam", config.hostname, "", 16, EDIT_TYPE_TEXT); screen_network_setup(SubMenu); - } - if (SubMenu == 1) { + } else if (SubMenu == 1) { rotary_editer("NTP server", config.ntp_server, "", 16, EDIT_TYPE_TEXT); screen_network_setup(SubMenu); - } - if (SubMenu == 2) { + } else if (SubMenu == 2) { ESP_LOGI(TAG, "Hostname `%s`", config.hostname); ESP_LOGI(TAG, "NTP server `%s`", config.ntp_server); write_config(); @@ -1053,19 +1111,16 @@ if (SubMenu == 0) { rotary_editer("MQTT server", config.mqtt_server, "", 16, EDIT_TYPE_TEXT); screen_mqtt_setup(SubMenu); - } - if (SubMenu == 1) { + } else if (SubMenu == 1) { sprintf(txt, "%d", config.mqtt_port); rotary_editer("MQTT server poort", txt, "", 6, EDIT_TYPE_INT); config.mqtt_port = atoi(txt); screen_mqtt_setup(SubMenu); - } - if (SubMenu == 2) { + } else if (SubMenu == 2) { rotary_editer("MQTT user", config.mqtt_user, "", 16, EDIT_TYPE_TEXT); rotary_editer("MQTT password", config.mqtt_pwd, "", 16, EDIT_TYPE_TEXT); screen_mqtt_setup(SubMenu); - } - if (SubMenu == 3) { + } else if (SubMenu == 3) { ESP_LOGI(TAG, "mqtt_server %s:%d", config.mqtt_server, config.mqtt_port); ESP_LOGI(TAG, "mqtt_user/pass `%s/%s`", config.mqtt_user, config.mqtt_pwd); write_config();