Files
odroid-power-mate/main/wifi/ap.c

88 lines
2.3 KiB
C

//
// Created by shinys on 25. 9. 1.
//
#include <string.h>
#include "esp_log.h"
#include "esp_netif.h"
#include "esp_wifi.h"
#include "lwip/ip4_addr.h"
#include "nconfig.h"
#include "priv_wifi.h"
#include "wifi.h"
static const char* TAG = "AP";
#define DEFAULT_AP_SSID "odroid-pm"
#define DEFAULT_AP_PASS "powermate"
#define AP_CHANNEL 1
#define AP_MAX_CONN 4
/**
* @brief Initializes and configures the AP mode.
*/
void wifi_init_ap(void)
{
// Get the network interface handle for the AP
esp_netif_t* p_netif_ap = esp_netif_get_handle_from_ifkey("WIFI_AP_DEF");
if (p_netif_ap)
{
ESP_LOGI(TAG, "Setting AP static IP to 192.168.4.1");
esp_netif_dhcps_stop(p_netif_ap); // Stop DHCP server to apply new IP settings
esp_netif_ip_info_t ip_info;
IP4_ADDR(&ip_info.ip, 192, 168, 4, 1);
IP4_ADDR(&ip_info.gw, 192, 168, 4, 1);
IP4_ADDR(&ip_info.netmask, 255, 255, 255, 0);
esp_netif_set_ip_info(p_netif_ap, &ip_info);
esp_netif_dhcps_start(p_netif_ap); // Restart DHCP server
}
// Configure Wi-Fi AP settings
wifi_config_t wifi_config = {
.ap =
{
.channel = AP_CHANNEL,
.max_connection = AP_MAX_CONN,
.authmode = WIFI_AUTH_WPA2_PSK,
.pmf_cfg =
{
.required = false,
},
},
};
// Read SSID and password from NVS (nconfig)
size_t len;
if (nconfig_get_str_len(AP_SSID, &len) == ESP_OK && len > 1)
{
nconfig_read(AP_SSID, (char*)wifi_config.ap.ssid, sizeof(wifi_config.ap.ssid));
}
else
{
strcpy((char*)wifi_config.ap.ssid, DEFAULT_AP_SSID);
}
if (nconfig_get_str_len(AP_PASSWORD, &len) == ESP_OK && len > 1)
{
nconfig_read(AP_PASSWORD, (char*)wifi_config.ap.password, sizeof(wifi_config.ap.password));
}
else
{
strcpy((char*)wifi_config.ap.password, DEFAULT_AP_PASS);
}
// If password is not set, use open authentication
if (strlen((char*)wifi_config.ap.password) == 0)
{
wifi_config.ap.authmode = WIFI_AUTH_OPEN;
}
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_AP, &wifi_config));
ESP_LOGI(TAG, "wifi_init_ap finished. SSID: %s, Password: %s, Channel: %d", (char*)wifi_config.ap.ssid, "********",
AP_CHANNEL);
}