main/task_user.c

changeset 34
495b7eafbf5a
parent 33
331e7f700971
child 36
e2a43e7c4035
--- 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();

mercurial