main/task_user.c

changeset 33
331e7f700971
parent 32
7717ac1d2f7f
child 34
495b7eafbf5a
equal deleted inserted replaced
32:7717ac1d2f7f 33:331e7f700971
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
703 } 720 }
704 ESP_ERROR_CHECK(rotary_encoder_reset(&rinfo)); 721 ESP_ERROR_CHECK(rotary_encoder_reset(&rinfo));
705 rc = true; 722 rc = true;
706 } 723 }
707 724
708 printf("rotate_to_sub(%d, %d, %d, %d)\n", pos, max, sub, offset);
709 *cursub = sub; 725 *cursub = sub;
710 *curoffset = offset; 726 *curoffset = offset;
711 return rc; 727 return rc;
712 } 728 }
713 729
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;

mercurial