#ifndef MAZE32_NETWORK_H #define MAZE32_NETWORK_H #include #include #include "esp_err.h" #include "esp_http_server.h" #include "esp_netif.h" #include "freertos/FreeRTOS.h" #include "freertos/event_groups.h" #include "freertos/semphr.h" #include "maze32_wifi_config.h" #ifdef __cplusplus extern "C" { #endif #define MAZE32_WIFI_SCAN_LIMIT 8U typedef enum { MAZE32_NETWORK_BOOTING = 0, MAZE32_NETWORK_STATION_CONNECTING, MAZE32_NETWORK_STATION_CONNECTED, MAZE32_NETWORK_PROVISIONING, MAZE32_NETWORK_ERROR, } maze32_network_state_t; typedef struct { char ssid[MAZE32_WIFI_SSID_MAX_BYTES + 1U]; int8_t rssi; uint8_t auth_mode; } maze32_wifi_scan_result_t; typedef struct { EventGroupHandle_t events; SemaphoreHandle_t operation_mutex; esp_netif_t* station_netif; esp_netif_t* access_point_netif; volatile maze32_network_state_t state; volatile int station_wait_active; unsigned int retry_count; char access_point_ssid[24]; maze32_reconfiguration_guard_fn reconfiguration_guard; void* guard_context; httpd_handle_t server; } maze32_network_t; esp_err_t maze32_network_init(maze32_network_t* network, maze32_reconfiguration_guard_fn guard, void* guard_context); esp_err_t maze32_network_start(maze32_network_t* network); esp_err_t maze32_network_apply_credentials(maze32_network_t* network, const maze32_wifi_credentials_t* credentials); esp_err_t maze32_network_reset_credentials(maze32_network_t* network); void maze32_network_retry_saved_credentials(void* context); void maze32_network_return_to_provisioning(void* context); esp_err_t maze32_network_scan(maze32_network_t* network, maze32_wifi_scan_result_t* results, size_t capacity, size_t* count); maze32_network_state_t maze32_network_state(const maze32_network_t* network); const char* maze32_network_state_name(maze32_network_state_t state); const char* maze32_network_access_point_ssid(const maze32_network_t* network); esp_err_t maze32_network_ip_address(const maze32_network_t* network, char* output, size_t output_size); esp_err_t maze32_provisioning_register(httpd_handle_t server, maze32_network_t* network); #ifdef __cplusplus } #endif #endif