1
0
mirror of https://github.com/peterantypas/maiana.git synced 2025-06-09 11:10:20 -07:00
2022-12-04 20:17:59 -08:00

110 lines
3.0 KiB
C

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_mac.h"
#include "esp_wifi.h"
#include "esp_log.h"
#include "wifi.h"
#include "configuration.h"
static const char *TAG = "wifi";
static void wifi_event_handler(void* arg, esp_event_base_t event_base,
int32_t event_id, void* event_data)
{
switch(event_id)
{
case WIFI_EVENT_AP_STACONNECTED:
{
wifi_event_ap_staconnected_t* event = (wifi_event_ap_staconnected_t*) event_data;
ESP_LOGI(TAG, "station "MACSTR" join, AID=%d",
MAC2STR(event->mac), event->aid);
break;
}
case WIFI_EVENT_AP_STADISCONNECTED:
{
wifi_event_ap_stadisconnected_t* event = (wifi_event_ap_stadisconnected_t*) event_data;
ESP_LOGI(TAG, "station "MACSTR" leave, AID=%d",
MAC2STR(event->mac), event->aid);
break;
}
case WIFI_EVENT_STA_START:
{
esp_wifi_connect();
break;
}
case WIFI_EVENT_STA_CONNECTED:
{
break;
}
case WIFI_EVENT_STA_DISCONNECTED:
{
esp_wifi_connect();
break;
}
default:
break;
}
}
void wifi_start()
{
esp_netif_init();
wifi_operation_mode_t mode = config_get_wifi_operation_mode();
if ( mode != WIFI_STATION )
esp_netif_create_default_wifi_ap();
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,
ESP_EVENT_ANY_ID,
&wifi_event_handler,
NULL,
NULL));
wifi_config_t wifi_config = {0};
const char *ssid = config_get_ssid();
const char *password = config_get_password();
switch(mode)
{
case WIFI_OPEN_AP:
{
memcpy(wifi_config.ap.ssid, ssid, strlen(ssid));
wifi_config.ap.ssid_len = strlen(ssid);
wifi_config.ap.authmode = WIFI_AUTH_OPEN;
wifi_config.ap.max_connection = 8;
esp_wifi_set_mode(WIFI_MODE_AP);
esp_wifi_set_config(WIFI_IF_AP, &wifi_config);
}
break;
case WIFI_SECURE_AP:
{
memcpy(wifi_config.ap.ssid, ssid, strlen(ssid));
wifi_config.ap.ssid_len = strlen(ssid);
strncpy((char *)wifi_config.ap.password, password, sizeof wifi_config.ap.password);
wifi_config.ap.authmode = WIFI_AUTH_WPA2_PSK;
wifi_config.ap.max_connection = 8;
esp_wifi_set_mode(WIFI_MODE_AP);
esp_wifi_set_config(WIFI_IF_AP, &wifi_config);
}
break;
case WIFI_STATION:
{
memcpy(wifi_config.sta.ssid, ssid, strlen(ssid));
strncpy((char *)wifi_config.sta.password, password, sizeof wifi_config.ap.password);
esp_wifi_set_mode(WIFI_MODE_STA);
esp_wifi_set_config(WIFI_IF_STA, &wifi_config);
}
break;
}
esp_wifi_start();
}