#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "lwipopts.h" #include "upnp.h" #include "httpd.h" /** User friendly FreeRTOS delay macro */ #define delay_ms(ms) vTaskDelay(ms / portTICK_PERIOD_MS) /** Semaphore to signal wifi availability */ static SemaphoreHandle_t wifi_alive; /** * @brief This is the multicast task * @param arg user supplied argument from xTaskCreate * @retval None */ static void mcast_task(void *arg) { xSemaphoreTake(wifi_alive, portMAX_DELAY); xSemaphoreGive(wifi_alive); (void) upnp_server_init(); while(1) { delay_ms(2000); } } /** * @brief This is the wifi connection task * @param arg user supplied argument from xTaskCreate * @retval None */ static void wifi_task(void *pvParameters) { uint8_t status = 0; uint8_t retries = 30; struct sdk_station_config config = { .ssid = WIFI_SSID, .password = WIFI_PASS, }; xSemaphoreTake(wifi_alive, portMAX_DELAY); printf("WiFi: connecting to WiFi\n"); sdk_wifi_set_opmode(STATION_MODE); sdk_wifi_station_set_config(&config); while(1) { while (status != STATION_GOT_IP && retries) { status = sdk_wifi_station_get_connect_status(); if(status == STATION_WRONG_PASSWORD) { printf("WiFi: wrong password\n"); break; } else if(status == STATION_NO_AP_FOUND) { printf("WiFi: AP not found\n"); break; } else if(status == STATION_CONNECT_FAIL) { printf("WiFi: connection failed\n"); break; } delay_ms(1000); retries--; } if (status == STATION_GOT_IP) { printf("WiFi: connected\n"); xSemaphoreGive(wifi_alive); taskYIELD(); } while ((status = sdk_wifi_station_get_connect_status()) == STATION_GOT_IP) { xSemaphoreGive(wifi_alive); taskYIELD(); } printf("WiFi: disconnected\n"); sdk_wifi_station_disconnect(); delay_ms(1000); } } void user_init(void) { uart_set_baud(0, 115200); vSemaphoreCreateBinary(wifi_alive); ota_tftp_init_server(TFTP_PORT); xTaskCreate(&wifi_task, "wifi_task", 256, NULL, 2, NULL); delay_ms(250); xTaskCreate(&httpd_task, "http_server", 1024, NULL, 4, NULL); xTaskCreate(&mcast_task, "mcast_task", 1024, NULL, 4, NULL); }