#include "utils.h" using std::string; int wifi_setup_impl(uint32_t country, const string &ssid, const string &pw, bool firstTry) { if (firstTry) { if (cyw43_arch_init_with_country(country)) { return 1; } } cyw43_arch_enable_sta_mode(); netif_set_hostname(netif_default, "AbfallPicoW"); if (cyw43_arch_wifi_connect_async(ssid.c_str(), pw.c_str(), CYW43_AUTH_WPA2_MIXED_PSK)) { return 2; } int flashrate = 1000; int status = CYW43_LINK_UP + 1; while (status >= 0 && status != CYW43_LINK_UP) { int status_new = cyw43_tcpip_link_status(&cyw43_state, CYW43_ITF_STA); if (status_new != status) { status = status_new; if (status < 0) { continue; } flashrate = flashrate / (status + 1); // printf("Connect status: %d %d\n", status, flashrate); } cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1); sleep_ms(flashrate); cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 0); sleep_ms(flashrate); } if (status < 0) { cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 0); } else { cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1); printf("IP: %s\n", ip4addr_ntoa(netif_ip_addr4(netif_default))); } return status; } void wifi_setup() { const string ssid{"Apis cerana"}; const string pw{"2JkJEh2vptVT"}; const uint32_t country{CYW43_COUNTRY_GERMANY}; bool firstTry = true; int res = -1; do { if (firstTry) { res = wifi_setup_impl(country, ssid, pw, true); firstTry = false; } else { printf("Setting up connection failed. Trying again after 5 sec...\n"); sleep_ms(5000); res = wifi_setup_impl(country, ssid, pw, false); } } while (res != CYW43_LINK_UP); }