20 rotary_encoder_info_t rinfo = { 0 }; ///< Rotary encoder record |
20 rotary_encoder_info_t rinfo = { 0 }; ///< Rotary encoder record |
21 rotary_encoder_event_t event = { 0 }; |
21 rotary_encoder_event_t event = { 0 }; |
22 QueueHandle_t event_queue; |
22 QueueHandle_t event_queue; |
23 static xQueueHandle gpio_evt_queue = NULL; ///< Rotary pushbutton queue |
23 static xQueueHandle gpio_evt_queue = NULL; ///< Rotary pushbutton queue |
24 static int PushDuration = 0; ///< Duration of the pushed button |
24 static int PushDuration = 0; ///< Duration of the pushed button |
25 char SSIDs[10][32]; ///< List of SSIDs we know |
25 struct strStations APs[10]; ///< List of APs we know |
|
26 int edit_ssid = 0; ///< SSID being edited |
26 int num_ssids = 0; ///< Number of SSIDs we know |
27 int num_ssids = 0; ///< Number of SSIDs we know |
|
28 struct strStations editAP; ///< Data of station to edit |
27 |
29 |
28 extern const esp_app_desc_t *app_desc; |
30 extern const esp_app_desc_t *app_desc; |
29 extern unit_t units[3]; ///< Pressure test units |
31 extern unit_t units[3]; ///< Pressure test units |
30 extern SemaphoreHandle_t xSemaphoreUnits; ///< Units lock semaphore |
32 extern SemaphoreHandle_t xSemaphoreUnits; ///< Units lock semaphore |
31 extern DS18B20_State *ds18b20_state; ///< DS18B20 state |
33 extern DS18B20_State *ds18b20_state; ///< DS18B20 state |
418 * @param sub The submenu index number. |
420 * @param sub The submenu index number. |
419 */ |
421 */ |
420 void screen_unit_zero(int no, int sub) |
422 void screen_unit_zero(int no, int sub) |
421 { |
423 { |
422 screen_top("Meter %d nulpunt", no + 1); |
424 screen_top("Meter %d nulpunt", no + 1); |
423 menu_line( 0, 2, 25, "Huidig %d", units[no].pressure_zero); |
425 menu_line( 0, 1, 25, "Huidig %d", units[no].pressure_zero); |
424 menu_line(sub == 0, 2, 37, "Nieuw %d", units[no].pressure_voltage / (adc_state->Batt_voltage / 1000)); |
426 menu_line(sub == 0, 1, 37, "Nieuw %d", units[no].pressure_voltage / (adc_state->Batt_voltage / 1000)); |
425 menu_line(sub == 1, 2, 49, "Terug"); |
427 menu_line(sub == 1, 1, 49, "Terug"); |
426 u8g2_SendBuffer(&u8g2); |
428 u8g2_SendBuffer(&u8g2); |
427 } |
429 } |
428 |
430 |
429 |
431 |
430 |
432 |
434 * @param sub The submenu index number. |
436 * @param sub The submenu index number. |
435 */ |
437 */ |
436 void screen_unit_setup(int no, int sub) |
438 void screen_unit_setup(int no, int sub) |
437 { |
439 { |
438 screen_top("Meter %d setup", no + 1); |
440 screen_top("Meter %d setup", no + 1); |
439 menu_line(sub == 0, 2, 25, "Werking %s", units[no].mode ? "Aan":"Uit"); |
441 menu_line(sub == 0, 1, 25, "Werking %s", units[no].mode ? "Aan":"Uit"); |
440 menu_line(sub == 1, 2, 37, "Nulpunt %d", units[no].pressure_zero); |
442 menu_line(sub == 1, 1, 37, "Nulpunt %d", units[no].pressure_zero); |
441 menu_line(sub == 2, 2, 49, "DS18B20 %s", units[no].temperature_rom_code); |
443 menu_line(sub == 2, 1, 49, "DS18B20 %s", units[no].temperature_rom_code); |
442 menu_line(sub == 3, 2, 61, "Terug"); |
444 menu_line(sub == 3, 1, 61, "Terug"); |
443 u8g2_SendBuffer(&u8g2); |
445 u8g2_SendBuffer(&u8g2); |
444 } |
446 } |
445 |
447 |
446 |
448 |
447 |
449 |
472 |
474 |
473 |
475 |
474 void screen_wifi_setup(int sub) |
476 void screen_wifi_setup(int sub) |
475 { |
477 { |
476 screen_top("WiFi AP setup"); |
478 screen_top("WiFi AP setup"); |
477 menu_line(sub == 0, 2, 25, "Lijst AP"); |
479 menu_line(sub == 0, 1, 25, "Lijst AP"); |
478 menu_line(sub == 1, 2, 37, "Nieuw AP"); |
480 menu_line(sub == 1, 1, 37, "Nieuw AP"); |
479 menu_line(sub == 2, 2, 49, "Terug"); |
481 menu_line(sub == 2, 1, 49, "Terug"); |
480 u8g2_SendBuffer(&u8g2); |
482 u8g2_SendBuffer(&u8g2); |
481 } |
483 } |
482 |
484 |
483 |
485 |
484 |
486 |
498 bytes = fread(dst, 1, sizeof(ap), f); |
500 bytes = fread(dst, 1, sizeof(ap), f); |
499 if (bytes < sizeof(ap)) { |
501 if (bytes < sizeof(ap)) { |
500 fclose(f); |
502 fclose(f); |
501 break; |
503 break; |
502 } |
504 } |
503 memcpy(SSIDs[num_ssids], ap.SSID, 32); |
505 memcpy(APs[num_ssids].SSID, ap.SSID, 32); |
|
506 memcpy(APs[num_ssids].Password, ap.Password, 64); |
504 num_ssids++; |
507 num_ssids++; |
505 } |
508 } |
506 } |
509 } |
507 printf("loaded %d SSIDs sub %d offset %d\n", num_ssids, sub, offset); |
510 //printf("loaded %d SSIDs sub %d offset %d\n", num_ssids, sub, offset); |
508 |
511 |
509 screen_top("WiFi AP lijst"); |
512 screen_top("WiFi AP lijst"); |
510 if (num_ssids == 0) { |
513 if (num_ssids == 0) { |
511 menu_line(0, 1, 25, "Geen AP's"); |
514 menu_line(0, 1, 25, "Geen AP's"); |
512 } else { |
515 } else { |
513 for (i = 0; i < num_ssids; i++) { |
516 for (i = 0; i < num_ssids; i++) { |
514 menu_line(sub == i, 1, 25 + (i * 12), SSIDs[i + offset]); |
517 menu_line(sub == i, 1, 25 + (i * 12), APs[i + offset].SSID); |
515 if (i == 3) |
518 if (i == 3) |
516 break; |
519 break; |
517 } |
520 } |
518 if (i < 4) |
521 if ((i + offset) == num_ssids) |
519 menu_line(sub == i, 1, 25 + (i * 12), "Terug"); |
522 menu_line(sub == i, 1, 25 + (i * 12), "Terug"); |
|
523 } |
|
524 u8g2_SendBuffer(&u8g2); |
|
525 } |
|
526 |
|
527 |
|
528 |
|
529 void screen_edit_ap(int sub) |
|
530 { |
|
531 screen_top("WiFi wijzig AP"); |
|
532 menu_line(sub == 0, 1, 25, "SSID %s", editAP.SSID); |
|
533 menu_line(sub == 1, 1, 37, "PSK %s", editAP.Password); |
|
534 menu_line(sub == 2, 1, 49, "Opslaan"); |
|
535 if (edit_ssid >= 0) { |
|
536 menu_line(sub == 3, 1, 61, "Verwijder"); |
520 } |
537 } |
521 u8g2_SendBuffer(&u8g2); |
538 u8g2_SendBuffer(&u8g2); |
522 } |
539 } |
523 |
540 |
524 |
541 |
547 |
564 |
548 |
565 |
549 void screen_network_setup(int sub) |
566 void screen_network_setup(int sub) |
550 { |
567 { |
551 screen_top("Netwerk setup"); |
568 screen_top("Netwerk setup"); |
552 menu_line(sub == 0, 2, 25, "Naam %s", config.hostname); |
569 menu_line(sub == 0, 1, 25, "Naam %s", config.hostname); |
553 menu_line(sub == 1, 2, 37, "NTP %s", config.ntp_server); |
570 menu_line(sub == 1, 1, 37, "NTP %s", config.ntp_server); |
554 menu_line(sub == 2, 2, 49, "Terug"); |
571 menu_line(sub == 2, 1, 49, "Terug"); |
555 u8g2_SendBuffer(&u8g2); |
572 u8g2_SendBuffer(&u8g2); |
556 } |
573 } |
557 |
574 |
558 |
575 |
559 |
576 |
569 |
586 |
570 |
587 |
571 void screen_mqtt_setup(int sub) |
588 void screen_mqtt_setup(int sub) |
572 { |
589 { |
573 screen_top("MQTT Setup"); |
590 screen_top("MQTT Setup"); |
574 menu_line(sub == 0, 2, 25, "serv %s", config.mqtt_server); |
591 menu_line(sub == 0, 1, 25, "serv %s", config.mqtt_server); |
575 menu_line(sub == 1, 2, 37, "port %d", config.mqtt_port); |
592 menu_line(sub == 1, 1, 37, "port %d", config.mqtt_port); |
576 menu_line(sub == 2, 2, 49, "user %s", config.mqtt_user); |
593 menu_line(sub == 2, 1, 49, "user %s", config.mqtt_user); |
577 menu_line(sub == 3, 2, 61, "Terug"); |
594 menu_line(sub == 3, 1, 61, "Terug"); |
578 u8g2_SendBuffer(&u8g2); |
595 u8g2_SendBuffer(&u8g2); |
579 } |
596 } |
580 |
597 |
581 |
598 |
582 |
599 |
748 |
764 |
749 case ML2_LIST_APS: |
765 case ML2_LIST_APS: |
750 ESP_LOGI(TAG, "Loop user: WiFi list APs"); |
766 ESP_LOGI(TAG, "Loop user: WiFi list APs"); |
751 SubMenu = SubOffset = 0; |
767 SubMenu = SubOffset = 0; |
752 screen_list_aps(SubMenu, SubOffset); |
768 screen_list_aps(SubMenu, SubOffset); |
|
769 break; |
|
770 |
|
771 case ML2_EDIT_AP: |
|
772 ESP_LOGI(TAG, "Loop user: WiFi edit AP"); |
|
773 screen_edit_ap(0); |
753 break; |
774 break; |
754 |
775 |
755 case ML2_NETWORK: |
776 case ML2_NETWORK: |
756 ESP_LOGI(TAG, "Loop user: Network"); |
777 ESP_LOGI(TAG, "Loop user: Network"); |
757 screen_network(); |
778 screen_network(); |
832 screen_wifi_setup(SubMenu); |
853 screen_wifi_setup(SubMenu); |
833 break; |
854 break; |
834 case ML2_LIST_APS: if (rotate_to_sub(event.state.position, num_ssids, &SubMenu, &SubOffset)) |
855 case ML2_LIST_APS: if (rotate_to_sub(event.state.position, num_ssids, &SubMenu, &SubOffset)) |
835 screen_list_aps(SubMenu, SubOffset); |
856 screen_list_aps(SubMenu, SubOffset); |
836 break; |
857 break; |
|
858 case ML2_EDIT_AP: if (edit_ssid < 0) { |
|
859 if (rotate_to_sub(event.state.position, 2, &SubMenu, &SubOffset)) |
|
860 screen_edit_ap(SubMenu); |
|
861 } else { |
|
862 if (rotate_to_sub(event.state.position, 3, &SubMenu, &SubOffset)) |
|
863 screen_edit_ap(SubMenu); |
|
864 } |
|
865 break; |
837 case ML2_SETUP_MQTT: if (rotate_to_sub(event.state.position, 3, &SubMenu, &SubOffset)) |
866 case ML2_SETUP_MQTT: if (rotate_to_sub(event.state.position, 3, &SubMenu, &SubOffset)) |
838 screen_mqtt_setup(SubMenu); |
867 screen_mqtt_setup(SubMenu); |
839 break; |
868 break; |
840 case ML2_SETUP_NETWORK: if (rotate_to_sub(event.state.position, 2, &SubMenu, &SubOffset)) |
869 case ML2_SETUP_NETWORK: if (rotate_to_sub(event.state.position, 2, &SubMenu, &SubOffset)) |
841 screen_network_setup(SubMenu); |
870 screen_network_setup(SubMenu); |
928 case ML2_SETUP_WIFI: |
957 case ML2_SETUP_WIFI: |
929 if (SubMenu == 0) { |
958 if (SubMenu == 0) { |
930 New_Loop2 = ML2_LIST_APS; |
959 New_Loop2 = ML2_LIST_APS; |
931 } |
960 } |
932 if (SubMenu == 1) { |
961 if (SubMenu == 1) { |
933 |
962 edit_ssid = -1; |
|
963 editAP.SSID[0] = '\0'; |
|
964 editAP.Password[0] = '\0'; |
|
965 SubMenu = SubOffset = 0; |
|
966 New_Loop2 = ML2_EDIT_AP; |
934 } |
967 } |
935 if (SubMenu == 2) { |
968 if (SubMenu == 2) { |
936 New_Loop2 = ML2_WIFI; |
969 New_Loop2 = ML2_WIFI; |
937 } |
970 } |
938 break; |
971 break; |
939 |
972 |
940 case ML2_LIST_APS: |
973 case ML2_LIST_APS: |
941 if ((SubMenu + SubOffset) < num_ssids) { |
974 if ((SubMenu + SubOffset) < num_ssids) { |
942 // Edit AP |
975 edit_ssid = SubMenu + SubOffset; |
|
976 memcpy(editAP.SSID, APs[edit_ssid].SSID, 32); |
|
977 memcpy(editAP.Password, APs[edit_ssid].Password, 64); |
|
978 SubMenu = SubOffset = 0; |
|
979 New_Loop2 = ML2_EDIT_AP; |
943 } else { |
980 } else { |
944 New_Loop2 = ML2_SETUP_WIFI; |
981 New_Loop2 = ML2_SETUP_WIFI; |
945 SubMenu = SubOffset = 0; |
982 SubMenu = SubOffset = 0; |
946 } |
983 } |
|
984 break; |
|
985 |
|
986 case ML2_EDIT_AP: |
|
987 if (SubMenu == 0) { |
|
988 rotary_editer("SSID", editAP.SSID, "", 16, EDIT_TYPE_TEXT); |
|
989 screen_edit_ap(SubMenu); |
|
990 } |
|
991 if (SubMenu == 1) { |
|
992 rotary_editer("PSK", editAP.Password, "", 16, EDIT_TYPE_TEXT); |
|
993 screen_edit_ap(SubMenu); |
|
994 } |
|
995 if (SubMenu == 2 || SubMenu == 3) { |
|
996 update_running = 1; // Block measurements |
|
997 int timeout = 600; |
|
998 if (edit_ssid < 0) |
|
999 New_Loop2 = ML2_SETUP_WIFI; |
|
1000 else |
|
1001 New_Loop2 = ML2_LIST_APS; |
|
1002 |
|
1003 for (;;) { |
|
1004 vTaskDelay(100 / portTICK_PERIOD_MS); |
|
1005 if (Main_Loop1 == ML1_DONE) |
|
1006 break; |
|
1007 if (timeout) |
|
1008 timeout--; |
|
1009 else { |
|
1010 ESP_LOGE(TAG, "Timout request stop"); |
|
1011 goto saveerr; |
|
1012 } |
|
1013 } |
|
1014 if (edit_ssid >= 0) { |
|
1015 ESP_LOGI(TAG, "Remove %s", APs[edit_ssid].SSID); |
|
1016 remove_station((uint8_t *)APs[edit_ssid].SSID); |
|
1017 } |
|
1018 if (SubMenu == 2) { |
|
1019 ESP_LOGI(TAG, "Add %s %s", editAP.SSID, editAP.Password); |
|
1020 add_station((uint8_t *)editAP.SSID, (uint8_t *)editAP.Password); |
|
1021 } |
|
1022 } |
|
1023 saveerr: |
|
1024 update_running = 0; |
947 break; |
1025 break; |
948 |
1026 |
949 case ML2_NETWORK: |
1027 case ML2_NETWORK: |
950 New_Loop2 = ML2_SETUP_NETWORK; |
1028 New_Loop2 = ML2_SETUP_NETWORK; |
951 break; |
1029 break; |