43 extern SemaphoreHandle_t xSemaphoreWiFi; ///< WiFi lock semaphore |
43 extern SemaphoreHandle_t xSemaphoreWiFi; ///< WiFi lock semaphore |
44 extern int count_pub; ///< Published MQTT messages in transit |
44 extern int count_pub; ///< Published MQTT messages in transit |
45 extern int Main_Loop1; ///< Main measure loop |
45 extern int Main_Loop1; ///< Main measure loop |
46 extern int update_running; ///< If update is running |
46 extern int update_running; ///< If update is running |
47 extern int num_sensors; ///< Detected DS18B20 sensors |
47 extern int num_sensors; ///< Detected DS18B20 sensors |
48 extern strConfig_t config; |
|
49 extern wifiStation_t wifiStation; |
48 extern wifiStation_t wifiStation; |
|
49 extern char hostname[]; |
|
50 |
50 |
51 |
51 const int TASK_USER_COLD = BIT0; ///< System cold start |
52 const int TASK_USER_COLD = BIT0; ///< System cold start |
52 const int TASK_USER_WAKEUP = BIT1; ///< System wakeup from deepsleep |
53 const int TASK_USER_WAKEUP = BIT1; ///< System wakeup from deepsleep |
53 const int TASK_USER_BUSY = BIT2; ///< User interface is busy doing something. |
54 const int TASK_USER_BUSY = BIT2; ///< User interface is busy doing something. |
54 const int TASK_USER_REFRESH = BIT3; ///< Refresh requested |
55 const int TASK_USER_REFRESH = BIT3; ///< Refresh requested |
531 |
532 |
532 /** |
533 /** |
533 * @brief The WiFi setup menu. |
534 * @brief The WiFi setup menu. |
534 * @param sub The submenu entry to hilite. |
535 * @param sub The submenu entry to hilite. |
535 */ |
536 */ |
536 void screen_wifi_setup(int sub) |
537 /*void screen_wifi_setup(int sub) |
537 { |
538 { |
538 screen_top("WiFi AP setup"); |
539 screen_top("WiFi AP setup"); |
539 menu_line(sub == 0, 1, 25, "Lijst AP"); |
540 menu_line(sub == 0, 1, 25, "Lijst AP"); |
540 menu_line(sub == 1, 1, 37, "Nieuw AP"); |
541 menu_line(sub == 1, 1, 37, "Nieuw AP"); |
541 menu_line(sub == 2, 1, 49, "Terug"); |
542 menu_line(sub == 2, 1, 49, "Terug"); |
542 u8g2_SendBuffer(&u8g2); |
543 u8g2_SendBuffer(&u8g2); |
543 } |
544 }*/ |
544 |
545 |
545 |
546 |
546 |
547 |
547 /** |
548 /** |
548 * @brief Show the list if WiFi Access Points. |
549 * @brief Show the list if WiFi Access Points. |
549 * @param sub The sub entry line. |
550 * @param sub The sub entry line. |
550 * @param offset The offset in the list. |
551 * @param offset The offset in the list. |
551 */ |
552 */ |
552 void screen_list_aps(int sub, int offset) |
553 /*void screen_list_aps(int sub, int offset) |
553 { |
554 { |
554 int i; |
555 int i; |
555 wifiStation_t ap; |
556 wifiStation_t ap; |
556 uint8_t *dst = (uint8_t *)≈ |
557 uint8_t *dst = (uint8_t *)≈ |
557 FILE *f; |
558 FILE *f; |
584 } |
585 } |
585 if ((i + offset) == num_ssids) |
586 if ((i + offset) == num_ssids) |
586 menu_line(sub == i, 1, 25 + (i * 12), "Terug"); |
587 menu_line(sub == i, 1, 25 + (i * 12), "Terug"); |
587 } |
588 } |
588 u8g2_SendBuffer(&u8g2); |
589 u8g2_SendBuffer(&u8g2); |
589 } |
590 }*/ |
590 |
591 |
591 |
592 |
592 |
593 |
593 /** |
594 /** |
594 * @brief Edit WiFi AP menu. |
595 * @brief Edit WiFi AP menu. |
595 * @param sub The menu entry to hilite. |
596 * @param sub The menu entry to hilite. |
596 */ |
597 */ |
597 void screen_edit_ap(int sub) |
598 /*void screen_edit_ap(int sub) |
598 { |
599 { |
599 screen_top("WiFi wijzig AP"); |
600 screen_top("WiFi wijzig AP"); |
600 menu_line(sub == 0, 1, 25, "SSID %s", editAP.SSID); |
601 menu_line(sub == 0, 1, 25, "SSID %s", editAP.SSID); |
601 menu_line(sub == 1, 1, 37, "PSK %s", editAP.Password); |
602 menu_line(sub == 1, 1, 37, "PSK %s", editAP.Password); |
602 menu_line(sub == 2, 1, 49, "Opslaan"); |
603 menu_line(sub == 2, 1, 49, "Opslaan"); |
603 if (edit_ssid >= 0) { |
604 if (edit_ssid >= 0) { |
604 menu_line(sub == 3, 1, 61, "Verwijder"); |
605 menu_line(sub == 3, 1, 61, "Verwijder"); |
605 } |
606 } |
606 u8g2_SendBuffer(&u8g2); |
607 u8g2_SendBuffer(&u8g2); |
607 } |
608 }*/ |
608 |
609 |
609 |
610 |
610 |
611 |
611 /** |
612 /** |
612 * @brief The network status screen. |
613 * @brief The network status screen. |
626 |
627 |
627 screen_top("Netwerk Status"); |
628 screen_top("Netwerk Status"); |
628 menu_line(0, 1, 25, "IP %s", ip); |
629 menu_line(0, 1, 25, "IP %s", ip); |
629 menu_line(0, 1, 37, "Mask %s", nm); |
630 menu_line(0, 1, 37, "Mask %s", nm); |
630 menu_line(0, 1, 49, "GW %s", gw); |
631 menu_line(0, 1, 49, "GW %s", gw); |
631 menu_line(0, 1, 61, "Naam %s", config.hostname); |
632 menu_line(0, 1, 61, "Naam %s", hostname); |
632 u8g2_SendBuffer(&u8g2); |
|
633 } |
|
634 |
|
635 |
|
636 |
|
637 /** |
|
638 * @brief The network setup menu. |
|
639 * @param sub The menu entry to hilite. |
|
640 */ |
|
641 void screen_network_setup(int sub) |
|
642 { |
|
643 screen_top("Netwerk setup"); |
|
644 menu_line(sub == 0, 1, 25, "Naam %s", config.hostname); |
|
645 menu_line(sub == 1, 1, 37, "NTP %s", config.ntp_server); |
|
646 menu_line(sub == 2, 1, 49, "Terug"); |
|
647 u8g2_SendBuffer(&u8g2); |
633 u8g2_SendBuffer(&u8g2); |
648 } |
634 } |
649 |
635 |
650 |
636 |
651 |
637 |
653 * @brief MQTT status |
639 * @brief MQTT status |
654 */ |
640 */ |
655 void screen_mqtt() |
641 void screen_mqtt() |
656 { |
642 { |
657 screen_top("MQTT Status"); |
643 screen_top("MQTT Status"); |
658 menu_line(0, 1, 25, "serv %s", config.mqtt_server); |
644 menu_line(0, 1, 25, "serv %s", CONFIG_MQTT_SERVER); |
659 menu_line(0, 1, 37, "port %d", config.mqtt_port); |
645 menu_line(0, 1, 37, "port %d", CONFIG_MQTT_PORT); |
660 menu_line(0, 1, 49, "user %s", config.mqtt_user); |
646 menu_line(0, 1, 49, "user %s", CONFIG_MQTT_USER); |
661 u8g2_SendBuffer(&u8g2); |
|
662 } |
|
663 |
|
664 |
|
665 |
|
666 /** |
|
667 * @brief MQTT setup menu. |
|
668 * @param sub The submenu entry to hilite. |
|
669 */ |
|
670 void screen_mqtt_setup(int sub) |
|
671 { |
|
672 screen_top("MQTT Setup"); |
|
673 menu_line(sub == 0, 1, 25, "serv %s", config.mqtt_server); |
|
674 menu_line(sub == 1, 1, 37, "port %d", config.mqtt_port); |
|
675 menu_line(sub == 2, 1, 49, "user %s", config.mqtt_user); |
|
676 menu_line(sub == 3, 1, 61, "Terug"); |
|
677 u8g2_SendBuffer(&u8g2); |
647 u8g2_SendBuffer(&u8g2); |
678 } |
648 } |
679 |
649 |
680 |
650 |
681 |
651 |
989 case ML2_SEL_SENSOR1: |
938 case ML2_SEL_SENSOR1: |
990 case ML2_SEL_SENSOR2: |
939 case ML2_SEL_SENSOR2: |
991 case ML2_SEL_SENSOR3: if (rotate_to_sub(event.state.position, num_sensors, &SubMenu, &SubOffset)) |
940 case ML2_SEL_SENSOR3: if (rotate_to_sub(event.state.position, num_sensors, &SubMenu, &SubOffset)) |
992 screen_list_sensors(Main_Loop2 - ML2_SEL_SENSOR1, SubMenu, SubOffset); |
941 screen_list_sensors(Main_Loop2 - ML2_SEL_SENSOR1, SubMenu, SubOffset); |
993 break; |
942 break; |
994 case ML2_SETUP_WIFI: if (rotate_to_sub(event.state.position, 2, &SubMenu, &SubOffset)) |
|
995 screen_wifi_setup(SubMenu); |
|
996 break; |
|
997 case ML2_LIST_APS: if (rotate_to_sub(event.state.position, num_ssids, &SubMenu, &SubOffset)) |
|
998 screen_list_aps(SubMenu, SubOffset); |
|
999 break; |
|
1000 case ML2_EDIT_AP: if (edit_ssid < 0) { |
|
1001 if (rotate_to_sub(event.state.position, 2, &SubMenu, &SubOffset)) |
|
1002 screen_edit_ap(SubMenu); |
|
1003 } else { |
|
1004 if (rotate_to_sub(event.state.position, 3, &SubMenu, &SubOffset)) |
|
1005 screen_edit_ap(SubMenu); |
|
1006 } |
|
1007 break; |
|
1008 case ML2_SETUP_MQTT: if (rotate_to_sub(event.state.position, 3, &SubMenu, &SubOffset)) |
|
1009 screen_mqtt_setup(SubMenu); |
|
1010 break; |
|
1011 case ML2_SETUP_NETWORK: if (rotate_to_sub(event.state.position, 2, &SubMenu, &SubOffset)) |
|
1012 screen_network_setup(SubMenu); |
|
1013 break; |
|
1014 default: |
943 default: |
1015 ESP_LOGI(TAG, "Event: position %ld, direction %s", event.state.position, |
944 ESP_LOGI(TAG, "Event: position %ld, direction %s", event.state.position, |
1016 event.state.direction ? (event.state.direction == ROTARY_ENCODER_DIRECTION_CLOCKWISE ? "CW":"CCW"):"NOT_SET"); |
945 event.state.direction ? (event.state.direction == ROTARY_ENCODER_DIRECTION_CLOCKWISE ? "CW":"CCW"):"NOT_SET"); |
1017 } |
946 } |
1018 } |
947 } |
1119 SubOffset = 0; |
1047 SubOffset = 0; |
1120 } |
1048 } |
1121 break; |
1049 break; |
1122 |
1050 |
1123 case ML2_WIFI: |
1051 case ML2_WIFI: |
1124 New_Loop2 = ML2_SETUP_WIFI; |
|
1125 break; |
|
1126 |
|
1127 case ML2_SETUP_WIFI: |
|
1128 if (SubMenu == 0) { |
|
1129 New_Loop2 = ML2_LIST_APS; |
|
1130 } else if (SubMenu == 1) { |
|
1131 edit_ssid = -1; |
|
1132 editAP.SSID[0] = '\0'; |
|
1133 editAP.Password[0] = '\0'; |
|
1134 SubMenu = SubOffset = 0; |
|
1135 New_Loop2 = ML2_EDIT_AP; |
|
1136 } else if (SubMenu == 2) { |
|
1137 New_Loop2 = ML2_WIFI; |
|
1138 } |
|
1139 break; |
|
1140 |
|
1141 case ML2_LIST_APS: |
|
1142 if ((SubMenu + SubOffset) < num_ssids) { |
|
1143 edit_ssid = SubMenu + SubOffset; |
|
1144 memcpy(editAP.SSID, APs[edit_ssid].SSID, 32); |
|
1145 memcpy(editAP.Password, APs[edit_ssid].Password, 64); |
|
1146 SubMenu = SubOffset = 0; |
|
1147 New_Loop2 = ML2_EDIT_AP; |
|
1148 } else { |
|
1149 New_Loop2 = ML2_SETUP_WIFI; |
|
1150 SubMenu = SubOffset = 0; |
|
1151 } |
|
1152 break; |
|
1153 |
|
1154 case ML2_EDIT_AP: |
|
1155 ESP_LOGI(TAG, " ML2_EDIT_AP: SubMenu %d edit_ssid %d", SubMenu, edit_ssid); |
|
1156 if (SubMenu == 0) { |
|
1157 rotary_editer("SSID", editAP.SSID, "", 16, EDIT_TYPE_TEXT); |
|
1158 screen_edit_ap(SubMenu); |
|
1159 } else if (SubMenu == 1) { |
|
1160 rotary_editer("PSK", editAP.Password, "", 16, EDIT_TYPE_TEXT); |
|
1161 screen_edit_ap(SubMenu); |
|
1162 } else if (SubMenu == 2 || SubMenu == 3) { |
|
1163 update_running = 1; // Block measurements |
|
1164 if (edit_ssid < 0) |
|
1165 New_Loop2 = ML2_SETUP_WIFI; |
|
1166 else |
|
1167 New_Loop2 = ML2_LIST_APS; |
|
1168 |
|
1169 if (edit_ssid >= 0) { |
|
1170 ESP_LOGI(TAG, "Remove %s", APs[edit_ssid].SSID); |
|
1171 remove_station((uint8_t *)APs[edit_ssid].SSID); |
|
1172 } |
|
1173 if (SubMenu == 2) { |
|
1174 ESP_LOGI(TAG, "Add %s %s", editAP.SSID, editAP.Password); |
|
1175 add_station((uint8_t *)editAP.SSID, (uint8_t *)editAP.Password); |
|
1176 } |
|
1177 } |
|
1178 update_running = 0; |
|
1179 break; |
1052 break; |
1180 |
1053 |
1181 case ML2_NETWORK: |
1054 case ML2_NETWORK: |
1182 New_Loop2 = ML2_SETUP_NETWORK; |
1055 break; |
1183 break; |
|
1184 |
|
1185 case ML2_SETUP_NETWORK: |
|
1186 if (SubMenu == 0) { |
|
1187 rotary_editer("Hostnaam", config.hostname, "", 16, EDIT_TYPE_TEXT); |
|
1188 screen_network_setup(SubMenu); |
|
1189 } else if (SubMenu == 1) { |
|
1190 rotary_editer("NTP server", config.ntp_server, "", 16, EDIT_TYPE_TEXT); |
|
1191 screen_network_setup(SubMenu); |
|
1192 } else if (SubMenu == 2) { |
|
1193 ESP_LOGI(TAG, "Hostname `%s`", config.hostname); |
|
1194 ESP_LOGI(TAG, "NTP server `%s`", config.ntp_server); |
|
1195 write_config(); |
|
1196 New_Loop2 = ML2_NETWORK; |
|
1197 } |
|
1198 break; |
|
1199 |
1056 |
1200 case ML2_MQTT: |
1057 case ML2_MQTT: |
1201 New_Loop2 = ML2_SETUP_MQTT; |
|
1202 break; |
|
1203 |
|
1204 case ML2_SETUP_MQTT: |
|
1205 if (SubMenu == 0) { |
|
1206 rotary_editer("MQTT server", config.mqtt_server, "", 16, EDIT_TYPE_TEXT); |
|
1207 screen_mqtt_setup(SubMenu); |
|
1208 } else if (SubMenu == 1) { |
|
1209 sprintf(txt, "%d", config.mqtt_port); |
|
1210 rotary_editer("MQTT server poort", txt, "", 6, EDIT_TYPE_INT); |
|
1211 config.mqtt_port = atoi(txt); |
|
1212 screen_mqtt_setup(SubMenu); |
|
1213 } else if (SubMenu == 2) { |
|
1214 rotary_editer("MQTT user", config.mqtt_user, "", 16, EDIT_TYPE_TEXT); |
|
1215 rotary_editer("MQTT password", config.mqtt_pwd, "", 16, EDIT_TYPE_TEXT); |
|
1216 screen_mqtt_setup(SubMenu); |
|
1217 } else if (SubMenu == 3) { |
|
1218 ESP_LOGI(TAG, "mqtt_server %s:%d", config.mqtt_server, config.mqtt_port); |
|
1219 ESP_LOGI(TAG, "mqtt_user/pass `%s/%s`", config.mqtt_user, config.mqtt_pwd); |
|
1220 write_config(); |
|
1221 New_Loop2 = ML2_MQTT; |
|
1222 } |
|
1223 break; |
1058 break; |
1224 |
1059 |
1225 case ML2_UPDATE: |
1060 case ML2_UPDATE: |
1226 bin_update(); |
1061 bin_update(); |
1227 screen_update(); |
1062 screen_update(); |