main/task_user.c

changeset 32
7717ac1d2f7f
parent 30
8b630bf52092
child 33
331e7f700971
equal deleted inserted replaced
31:1f507aba6561 32:7717ac1d2f7f
13 uint32_t SecsCount = 0; ///< Seconds counter 13 uint32_t SecsCount = 0; ///< Seconds counter
14 uint32_t UserTimer = 0; ///< User inactive timeout 14 uint32_t UserTimer = 0; ///< User inactive timeout
15 int Main_Loop2 = -1; ///< Effective menu 15 int Main_Loop2 = -1; ///< Effective menu
16 int New_Loop2 = ML2_INIT; ///< New menu 16 int New_Loop2 = ML2_INIT; ///< New menu
17 int SubMenu = 0; ///< Submenu number 17 int SubMenu = 0; ///< Submenu number
18 int SubOffset = 0; ///< Submenu offset
18 u8g2_t u8g2; ///< A structure which will contain all the data for one display 19 u8g2_t u8g2; ///< A structure which will contain all the data for one display
19 rotary_encoder_info_t rinfo = { 0 }; ///< Rotary encoder record 20 rotary_encoder_info_t rinfo = { 0 }; ///< Rotary encoder record
20 rotary_encoder_event_t event = { 0 }; 21 rotary_encoder_event_t event = { 0 };
21 QueueHandle_t event_queue; 22 QueueHandle_t event_queue;
22 static xQueueHandle gpio_evt_queue = NULL; ///< Rotary pushbutton queue 23 static xQueueHandle gpio_evt_queue = NULL; ///< Rotary pushbutton queue
23 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
26 int num_ssids = 0; ///< Number of SSIDs we know
24 27
25 extern const esp_app_desc_t *app_desc; 28 extern const esp_app_desc_t *app_desc;
26 extern unit_t units[3]; ///< Pressure test units 29 extern unit_t units[3]; ///< Pressure test units
27 extern SemaphoreHandle_t xSemaphoreUnits; ///< Units lock semaphore 30 extern SemaphoreHandle_t xSemaphoreUnits; ///< Units lock semaphore
28 extern DS18B20_State *ds18b20_state; ///< DS18B20 state 31 extern DS18B20_State *ds18b20_state; ///< DS18B20 state
468 471
469 472
470 473
471 void screen_wifi_setup(int sub) 474 void screen_wifi_setup(int sub)
472 { 475 {
473 screen_top("WiFi Setup"); 476 screen_top("WiFi AP setup");
474 menu_line(sub == 0, 2, 25, "Connect"); 477 menu_line(sub == 0, 2, 25, "Lijst AP");
475 menu_line(sub == 1, 2, 37, "New"); 478 menu_line(sub == 1, 2, 37, "Nieuw AP");
476 menu_line(sub == 2, 2, 49, "Delete"); 479 menu_line(sub == 2, 2, 49, "Terug");
477 menu_line(sub == 3, 2, 61, "Return"); 480 u8g2_SendBuffer(&u8g2);
481 }
482
483
484
485 void screen_list_aps(int sub, int offset)
486 {
487 int i;
488 struct strStations ap;
489 uint8_t *dst = (uint8_t *)&ap;
490 FILE *f;
491 size_t bytes;
492
493 num_ssids = 0;
494 memset(dst, 0, sizeof(ap));
495 f = fopen("/spiffs/etc/stations.conf", "r+");
496 if (f) {
497 while (1) {
498 bytes = fread(dst, 1, sizeof(ap), f);
499 if (bytes < sizeof(ap)) {
500 fclose(f);
501 break;
502 }
503 memcpy(SSIDs[num_ssids], ap.SSID, 32);
504 num_ssids++;
505 }
506 }
507 printf("loaded %d SSIDs sub %d offset %d\n", num_ssids, sub, offset);
508
509 screen_top("WiFi AP lijst");
510 if (num_ssids == 0) {
511 menu_line(0, 1, 25, "Geen AP's");
512 } else {
513 for (i = 0; i < num_ssids; i++) {
514 menu_line(sub == i, 1, 25 + (i * 12), SSIDs[i + offset]);
515 if (i == 3)
516 break;
517 }
518 if (i < 4)
519 menu_line(sub == i, 1, 25 + (i * 12), "Terug");
520 }
478 u8g2_SendBuffer(&u8g2); 521 u8g2_SendBuffer(&u8g2);
479 } 522 }
480 523
481 524
482 525
618 661
619 662
620 /** 663 /**
621 * @brief Rotate subscreens numbers. 664 * @brief Rotate subscreens numbers.
622 * @param pos The new position, positive, negative or zero. 665 * @param pos The new position, positive, negative or zero.
623 * @param min The lowest number. If already at the lowest, select the highest.
624 * @param max The highest number. If already at the highest, select the lowest. 666 * @param max The highest number. If already at the highest, select the lowest.
625 * @param cursub The subscreen number by reference. This is updated with the new number. 667 * @param cursub The subscreen number by reference. This is updated with the new number.
626 * @return Returns true if a new number is selected, false if nothing changed. 668 * @return Returns true if a new number is selected, false if nothing changed.
627 */ 669 */
628 bool rotate_to_sub(rotary_encoder_position_t pos, int min, int max, int *cursub) 670 bool rotate_to_sub(rotary_encoder_position_t pos, int max, int *cursub, int *curoffset)
629 { 671 {
630 int sub = *cursub; 672 int sub = *cursub;
631 bool rc = false; 673 int offset = *curoffset;
674 bool rc = false;
632 675
633 if (pos > 0) { 676 if (pos > 0) {
634 if (sub < max) 677 if ((sub + offset) < max) {
635 sub++; 678 if (sub < 3) {
636 else 679 sub++;
637 sub = min; 680 } else {
681 offset++;
682 }
683 } else {
684 sub = offset = 0;
685 }
638 ESP_ERROR_CHECK(rotary_encoder_reset(&rinfo)); 686 ESP_ERROR_CHECK(rotary_encoder_reset(&rinfo));
639 rc = true; 687 rc = true;
640 } else if (pos < 0) { 688 } else if (pos < 0) {
641 if (sub > min) 689 if ((sub + offset) > 0) {
642 sub--; 690 if (offset > 0) {
643 else 691 offset--;
644 sub = max; 692 } else {
693 sub--;
694 }
695 } else {
696 if (max > 3) {
697 offset = max - 3;
698 sub = 3;
699 } else {
700 sub = max;
701 offset = 0;
702 }
703 }
645 ESP_ERROR_CHECK(rotary_encoder_reset(&rinfo)); 704 ESP_ERROR_CHECK(rotary_encoder_reset(&rinfo));
646 rc = true; 705 rc = true;
647 } 706 }
648 707
708 printf("rotate_to_sub(%d, %d, %d, %d)\n", pos, max, sub, offset);
649 *cursub = sub; 709 *cursub = sub;
710 *curoffset = offset;
650 return rc; 711 return rc;
651 } 712 }
652 713
653 714
654 715
678 case ML2_WIFI: 739 case ML2_WIFI:
679 ESP_LOGI(TAG, "Loop user: WiFi"); 740 ESP_LOGI(TAG, "Loop user: WiFi");
680 screen_wifi(); 741 screen_wifi();
681 break; 742 break;
682 743
744 case ML2_SETUP_WIFI:
745 ESP_LOGI(TAG, "Loop user: WiFi setup");
746 screen_wifi_setup(SubMenu);
747 break;
748
749 case ML2_LIST_APS:
750 ESP_LOGI(TAG, "Loop user: WiFi list APs");
751 SubMenu = SubOffset = 0;
752 screen_list_aps(SubMenu, SubOffset);
753 break;
754
683 case ML2_NETWORK: 755 case ML2_NETWORK:
684 ESP_LOGI(TAG, "Loop user: Network"); 756 ESP_LOGI(TAG, "Loop user: Network");
685 screen_network(); 757 screen_network();
686 break; 758 break;
687 759
707 779
708 case ML2_SETUP_UNIT1: 780 case ML2_SETUP_UNIT1:
709 case ML2_SETUP_UNIT2: 781 case ML2_SETUP_UNIT2:
710 case ML2_SETUP_UNIT3: 782 case ML2_SETUP_UNIT3:
711 ESP_LOGI(TAG, "Loop user: Setup Unit %d", Main_Loop2 - ML2_SETUP_UNIT1); 783 ESP_LOGI(TAG, "Loop user: Setup Unit %d", Main_Loop2 - ML2_SETUP_UNIT1);
712 SubMenu = 0; 784 SubMenu = SubOffset = 0;
713 screen_unit_setup(Main_Loop2 - ML2_SETUP_UNIT1, SubMenu); 785 screen_unit_setup(Main_Loop2 - ML2_SETUP_UNIT1, SubMenu);
714 break; 786 break;
715 787
716 case ML2_ZERO_UNIT1: 788 case ML2_ZERO_UNIT1:
717 case ML2_ZERO_UNIT2: 789 case ML2_ZERO_UNIT2:
718 case ML2_ZERO_UNIT3: 790 case ML2_ZERO_UNIT3:
719 ESP_LOGI(TAG, "Loop user: Zero Unit %d", Main_Loop2 - ML2_ZERO_UNIT1); 791 ESP_LOGI(TAG, "Loop user: Zero Unit %d", Main_Loop2 - ML2_ZERO_UNIT1);
720 SubMenu = 0; 792 SubMenu = SubOffset = 0;
721 screen_unit_zero(Main_Loop2 - ML2_ZERO_UNIT1, SubMenu); 793 screen_unit_zero(Main_Loop2 - ML2_ZERO_UNIT1, SubMenu);
722 break; 794 break;
723 795
724 case ML2_INACTIVE: 796 case ML2_INACTIVE:
725 ESP_LOGI(TAG, "Loop user: Inactive"); 797 ESP_LOGI(TAG, "Loop user: Inactive");
746 case ML2_NETWORK: rotate_to_menu(event.state.position, ML2_MQTT, ML2_WIFI); break; 818 case ML2_NETWORK: rotate_to_menu(event.state.position, ML2_MQTT, ML2_WIFI); break;
747 case ML2_MQTT: rotate_to_menu(event.state.position, ML2_UPDATE, ML2_NETWORK); break; 819 case ML2_MQTT: rotate_to_menu(event.state.position, ML2_UPDATE, ML2_NETWORK); break;
748 case ML2_UPDATE: rotate_to_menu(event.state.position, ML2_UPDATE, ML2_MQTT); break; 820 case ML2_UPDATE: rotate_to_menu(event.state.position, ML2_UPDATE, ML2_MQTT); break;
749 case ML2_SETUP_UNIT1: 821 case ML2_SETUP_UNIT1:
750 case ML2_SETUP_UNIT2: 822 case ML2_SETUP_UNIT2:
751 case ML2_SETUP_UNIT3: if (rotate_to_sub(event.state.position, 0, 3, &SubMenu)) 823 case ML2_SETUP_UNIT3: if (rotate_to_sub(event.state.position, 3, &SubMenu, &SubOffset))
752 screen_unit_setup(Main_Loop2 - ML2_SETUP_UNIT1, SubMenu); 824 screen_unit_setup(Main_Loop2 - ML2_SETUP_UNIT1, SubMenu);
753 break; 825 break;
754 case ML2_ZERO_UNIT1: 826 case ML2_ZERO_UNIT1:
755 case ML2_ZERO_UNIT2: 827 case ML2_ZERO_UNIT2:
756 case ML2_ZERO_UNIT3: if (rotate_to_sub(event.state.position, 0, 1, &SubMenu)) 828 case ML2_ZERO_UNIT3: if (rotate_to_sub(event.state.position, 1, &SubMenu, &SubOffset))
757 screen_unit_zero(Main_Loop2 - ML2_ZERO_UNIT1, SubMenu); 829 screen_unit_zero(Main_Loop2 - ML2_ZERO_UNIT1, SubMenu);
758 break; 830 break;
759 case ML2_SETUP_MQTT: if (rotate_to_sub(event.state.position, 0, 3, &SubMenu)) 831 case ML2_SETUP_WIFI: if (rotate_to_sub(event.state.position, 2, &SubMenu, &SubOffset))
832 screen_wifi_setup(SubMenu);
833 break;
834 case ML2_LIST_APS: if (rotate_to_sub(event.state.position, num_ssids, &SubMenu, &SubOffset))
835 screen_list_aps(SubMenu, SubOffset);
836 break;
837 case ML2_SETUP_MQTT: if (rotate_to_sub(event.state.position, 3, &SubMenu, &SubOffset))
760 screen_mqtt_setup(SubMenu); 838 screen_mqtt_setup(SubMenu);
761 break; 839 break;
762 case ML2_SETUP_NETWORK: if (rotate_to_sub(event.state.position, 0, 2, &SubMenu)) 840 case ML2_SETUP_NETWORK: if (rotate_to_sub(event.state.position, 2, &SubMenu, &SubOffset))
763 screen_network_setup(SubMenu); 841 screen_network_setup(SubMenu);
764 break; 842 break;
765 default: 843 default:
766 ESP_LOGI(TAG, "Event: position %d, direction %s", event.state.position, 844 ESP_LOGI(TAG, "Event: position %d, direction %s", event.state.position,
767 event.state.direction ? (event.state.direction == ROTARY_ENCODER_DIRECTION_CLOCKWISE ? "CW":"CCW"):"NOT_SET"); 845 event.state.direction ? (event.state.direction == ROTARY_ENCODER_DIRECTION_CLOCKWISE ? "CW":"CCW"):"NOT_SET");
841 New_Loop2 = ML2_SETUP_UNIT1 + idx; 919 New_Loop2 = ML2_SETUP_UNIT1 + idx;
842 SubMenu = 1; 920 SubMenu = 1;
843 } 921 }
844 break; 922 break;
845 923
924 case ML2_WIFI:
925 New_Loop2 = ML2_SETUP_WIFI;
926 break;
927
928 case ML2_SETUP_WIFI:
929 if (SubMenu == 0) {
930 New_Loop2 = ML2_LIST_APS;
931 }
932 if (SubMenu == 1) {
933
934 }
935 if (SubMenu == 2) {
936 New_Loop2 = ML2_WIFI;
937 }
938 break;
939
940 case ML2_LIST_APS:
941 if ((SubMenu + SubOffset) < num_ssids) {
942 // Edit AP
943 } else {
944 New_Loop2 = ML2_SETUP_WIFI;
945 SubMenu = SubOffset = 0;
946 }
947 break;
948
846 case ML2_NETWORK: 949 case ML2_NETWORK:
847 New_Loop2 = ML2_SETUP_NETWORK; 950 New_Loop2 = ML2_SETUP_NETWORK;
848 break; 951 break;
849 952
850 case ML2_SETUP_NETWORK: 953 case ML2_SETUP_NETWORK:
989 while (UserTimer) { 1092 while (UserTimer) {
990 1093
991 menu_change(); 1094 menu_change();
992 1095
993 if (xEventGroupGetBits(xEventGroupUser) & TASK_USER_REFRESH) { 1096 if (xEventGroupGetBits(xEventGroupUser) & TASK_USER_REFRESH) {
1097 xEventGroupClearBits(xEventGroupUser, TASK_USER_REFRESH);
994 switch (Main_Loop2) { 1098 switch (Main_Loop2) {
995 case ML2_USER: screen_main(); break; 1099 case ML2_USER: screen_main(); break;
996 case ML2_UNIT1: screen_unit(0); break; 1100 case ML2_UNIT1: screen_unit(0); break;
997 case ML2_UNIT2: screen_unit(1); break; 1101 case ML2_UNIT2: screen_unit(1); break;
998 case ML2_UNIT3: screen_unit(2); break; 1102 case ML2_UNIT3: screen_unit(2); break;
999 case ML2_WIFI: screen_wifi(); break; 1103 case ML2_WIFI: screen_wifi(); break;
1000 } 1104 }
1001 xEventGroupClearBits(xEventGroupUser, TASK_USER_REFRESH);
1002 } 1105 }
1003 1106
1004 if (xQueueReceive(event_queue, &event, 100 / portTICK_PERIOD_MS) == pdTRUE) { 1107 if (xQueueReceive(event_queue, &event, 100 / portTICK_PERIOD_MS) == pdTRUE) {
1005 UserTimer = INACTIVITY; 1108 UserTimer = INACTIVITY;
1006 menu_rotary(); 1109 menu_rotary();

mercurial