# HG changeset patch # User Michiel Broek # Date 1573574136 -3600 # Node ID 7717ac1d2f7fd7d6d42258786df6d3d8efea0dc1 # Parent 1f507aba656137f4735172e5a9c4369cd12aa936 Added WiFi list configured APs. Added offset to the menu rotary for large menus. diff -r 1f507aba6561 -r 7717ac1d2f7f main/config.h --- a/main/config.h Tue Nov 12 16:26:51 2019 +0100 +++ b/main/config.h Tue Nov 12 16:55:36 2019 +0100 @@ -104,6 +104,9 @@ ML2_ZERO_UNIT3, ///< Unit 3 set zero ML2_SETUP_NETWORK, ///< Network setup ML2_SETUP_MQTT, ///< MQTT setup + ML2_SETUP_WIFI, ///< WiFi setup + ML2_LIST_APS, ///< WiFi list APs + ML2_EDIT_AP, ///< WiFi edit AP ML2_INACTIVE, ///< Inactive reached, cleanup ML2_DONE ///< All done } ML2; diff -r 1f507aba6561 -r 7717ac1d2f7f main/task_user.c --- a/main/task_user.c Tue Nov 12 16:26:51 2019 +0100 +++ b/main/task_user.c Tue Nov 12 16:55:36 2019 +0100 @@ -15,12 +15,15 @@ int Main_Loop2 = -1; ///< Effective menu int New_Loop2 = ML2_INIT; ///< New menu int SubMenu = 0; ///< Submenu number +int SubOffset = 0; ///< Submenu offset u8g2_t u8g2; ///< A structure which will contain all the data for one display rotary_encoder_info_t rinfo = { 0 }; ///< Rotary encoder record rotary_encoder_event_t event = { 0 }; QueueHandle_t event_queue; static xQueueHandle gpio_evt_queue = NULL; ///< Rotary pushbutton queue static int PushDuration = 0; ///< Duration of the pushed button +char SSIDs[10][32]; ///< List of SSIDs we know +int num_ssids = 0; ///< Number of SSIDs we know extern const esp_app_desc_t *app_desc; extern unit_t units[3]; ///< Pressure test units @@ -470,11 +473,51 @@ void screen_wifi_setup(int sub) { - screen_top("WiFi Setup"); - menu_line(sub == 0, 2, 25, "Connect"); - menu_line(sub == 1, 2, 37, "New"); - menu_line(sub == 2, 2, 49, "Delete"); - menu_line(sub == 3, 2, 61, "Return"); + screen_top("WiFi AP setup"); + menu_line(sub == 0, 2, 25, "Lijst AP"); + menu_line(sub == 1, 2, 37, "Nieuw AP"); + menu_line(sub == 2, 2, 49, "Terug"); + u8g2_SendBuffer(&u8g2); +} + + + +void screen_list_aps(int sub, int offset) +{ + int i; + struct strStations ap; + uint8_t *dst = (uint8_t *)≈ + FILE *f; + size_t bytes; + + num_ssids = 0; + memset(dst, 0, sizeof(ap)); + f = fopen("/spiffs/etc/stations.conf", "r+"); + if (f) { + while (1) { + bytes = fread(dst, 1, sizeof(ap), f); + if (bytes < sizeof(ap)) { + fclose(f); + break; + } + memcpy(SSIDs[num_ssids], ap.SSID, 32); + num_ssids++; + } + } +printf("loaded %d SSIDs sub %d offset %d\n", num_ssids, sub, offset); + + screen_top("WiFi AP lijst"); + if (num_ssids == 0) { + menu_line(0, 1, 25, "Geen AP's"); + } else { + for (i = 0; i < num_ssids; i++) { + menu_line(sub == i, 1, 25 + (i * 12), SSIDs[i + offset]); + if (i == 3) + break; + } + if (i < 4) + menu_line(sub == i, 1, 25 + (i * 12), "Terug"); + } u8g2_SendBuffer(&u8g2); } @@ -620,33 +663,51 @@ /** * @brief Rotate subscreens numbers. * @param pos The new position, positive, negative or zero. - * @param min The lowest number. If already at the lowest, select the highest. * @param max The highest number. If already at the highest, select the lowest. * @param cursub The subscreen number by reference. This is updated with the new number. * @return Returns true if a new number is selected, false if nothing changed. */ -bool rotate_to_sub(rotary_encoder_position_t pos, int min, int max, int *cursub) +bool rotate_to_sub(rotary_encoder_position_t pos, int max, int *cursub, int *curoffset) { - int sub = *cursub; - bool rc = false; + int sub = *cursub; + int offset = *curoffset; + bool rc = false; if (pos > 0) { - if (sub < max) - sub++; - else - sub = min; + if ((sub + offset) < max) { + if (sub < 3) { + sub++; + } else { + offset++; + } + } else { + sub = offset = 0; + } ESP_ERROR_CHECK(rotary_encoder_reset(&rinfo)); rc = true; } else if (pos < 0) { - if (sub > min) - sub--; - else - sub = max; + if ((sub + offset) > 0) { + if (offset > 0) { + offset--; + } else { + sub--; + } + } else { + if (max > 3) { + offset = max - 3; + sub = 3; + } else { + sub = max; + offset = 0; + } + } ESP_ERROR_CHECK(rotary_encoder_reset(&rinfo)); rc = true; } +printf("rotate_to_sub(%d, %d, %d, %d)\n", pos, max, sub, offset); *cursub = sub; + *curoffset = offset; return rc; } @@ -680,6 +741,17 @@ screen_wifi(); break; + case ML2_SETUP_WIFI: + ESP_LOGI(TAG, "Loop user: WiFi setup"); + screen_wifi_setup(SubMenu); + break; + + case ML2_LIST_APS: + ESP_LOGI(TAG, "Loop user: WiFi list APs"); + SubMenu = SubOffset = 0; + screen_list_aps(SubMenu, SubOffset); + break; + case ML2_NETWORK: ESP_LOGI(TAG, "Loop user: Network"); screen_network(); @@ -709,7 +781,7 @@ case ML2_SETUP_UNIT2: case ML2_SETUP_UNIT3: ESP_LOGI(TAG, "Loop user: Setup Unit %d", Main_Loop2 - ML2_SETUP_UNIT1); - SubMenu = 0; + SubMenu = SubOffset = 0; screen_unit_setup(Main_Loop2 - ML2_SETUP_UNIT1, SubMenu); break; @@ -717,7 +789,7 @@ case ML2_ZERO_UNIT2: case ML2_ZERO_UNIT3: ESP_LOGI(TAG, "Loop user: Zero Unit %d", Main_Loop2 - ML2_ZERO_UNIT1); - SubMenu = 0; + SubMenu = SubOffset = 0; screen_unit_zero(Main_Loop2 - ML2_ZERO_UNIT1, SubMenu); break; @@ -748,18 +820,24 @@ case ML2_UPDATE: rotate_to_menu(event.state.position, ML2_UPDATE, ML2_MQTT); break; case ML2_SETUP_UNIT1: case ML2_SETUP_UNIT2: - case ML2_SETUP_UNIT3: if (rotate_to_sub(event.state.position, 0, 3, &SubMenu)) + case ML2_SETUP_UNIT3: if (rotate_to_sub(event.state.position, 3, &SubMenu, &SubOffset)) screen_unit_setup(Main_Loop2 - ML2_SETUP_UNIT1, SubMenu); break; case ML2_ZERO_UNIT1: case ML2_ZERO_UNIT2: - case ML2_ZERO_UNIT3: if (rotate_to_sub(event.state.position, 0, 1, &SubMenu)) + 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_SETUP_MQTT: if (rotate_to_sub(event.state.position, 0, 3, &SubMenu)) + case ML2_SETUP_WIFI: if (rotate_to_sub(event.state.position, 2, &SubMenu, &SubOffset)) + screen_wifi_setup(SubMenu); + break; + case ML2_LIST_APS: if (rotate_to_sub(event.state.position, num_ssids, &SubMenu, &SubOffset)) + screen_list_aps(SubMenu, SubOffset); + break; + case ML2_SETUP_MQTT: if (rotate_to_sub(event.state.position, 3, &SubMenu, &SubOffset)) screen_mqtt_setup(SubMenu); break; - case ML2_SETUP_NETWORK: if (rotate_to_sub(event.state.position, 0, 2, &SubMenu)) + case ML2_SETUP_NETWORK: if (rotate_to_sub(event.state.position, 2, &SubMenu, &SubOffset)) screen_network_setup(SubMenu); break; default: @@ -843,6 +921,31 @@ } break; + case ML2_WIFI: + New_Loop2 = ML2_SETUP_WIFI; + break; + + case ML2_SETUP_WIFI: + if (SubMenu == 0) { + New_Loop2 = ML2_LIST_APS; + } + if (SubMenu == 1) { + + } + if (SubMenu == 2) { + New_Loop2 = ML2_WIFI; + } + break; + + case ML2_LIST_APS: + if ((SubMenu + SubOffset) < num_ssids) { + // Edit AP + } else { + New_Loop2 = ML2_SETUP_WIFI; + SubMenu = SubOffset = 0; + } + break; + case ML2_NETWORK: New_Loop2 = ML2_SETUP_NETWORK; break; @@ -991,14 +1094,14 @@ menu_change(); if (xEventGroupGetBits(xEventGroupUser) & TASK_USER_REFRESH) { + xEventGroupClearBits(xEventGroupUser, TASK_USER_REFRESH); switch (Main_Loop2) { - case ML2_USER: screen_main(); break; + case ML2_USER: screen_main(); break; case ML2_UNIT1: screen_unit(0); break; case ML2_UNIT2: screen_unit(1); break; case ML2_UNIT3: screen_unit(2); break; - case ML2_WIFI: screen_wifi(); break; + case ML2_WIFI: screen_wifi(); break; } - xEventGroupClearBits(xEventGroupUser, TASK_USER_REFRESH); } if (xQueueReceive(event_queue, &event, 100 / portTICK_PERIOD_MS) == pdTRUE) { diff -r 1f507aba6561 -r 7717ac1d2f7f main/task_wifi.c --- a/main/task_wifi.c Tue Nov 12 16:26:51 2019 +0100 +++ b/main/task_wifi.c Tue Nov 12 16:55:36 2019 +0100 @@ -229,9 +229,10 @@ xSemaphoreWiFi = xSemaphoreCreateMutex(); wifi_state = malloc(sizeof(WIFI_State)); - wifi_state->STA_connected = false; - wifi_state->STA_online = false; - wifi_state->STA_rssi = 0; + memset(wifi_state, 0x00, sizeof(WIFI_State)); +// wifi_state->STA_connected = false; +// wifi_state->STA_online = false; +// wifi_state->STA_rssi = 0; /* stop dhcp server and start dhcp client */ ESP_ERROR_CHECK(tcpip_adapter_dhcps_stop(TCPIP_ADAPTER_IF_AP));