PicoW_WiFi_Operator_Lib/PicoW_WiFi_Operator.c

83 lines
2.0 KiB
C

#include "PicoW_WiFi_Operator.h"
#include <pico/cyw43_arch.h>
static enum wifi_operator_mode_t wifi_operator_mode = WIFI_OPERATOR_MODE_UNINITIALIZED;
int wifi_operator_init(enum wifi_operator_mode_t mode)
{
wifi_operator_mode = mode;
if(cyw43_wifi_pm(&cyw43_state, WIFI_OPERATOR_POWERSAVE_MODE))
{
puts("Failed to apply WiFi operator powersave mode.");
return PICO_ERROR_GENERIC;
}
if(wifi_operator_mode == WIFI_OPERATOR_MODE_ACCESS_POINT)
{
// Setup as access point
cyw43_arch_enable_ap_mode(WIFI_OPERATOR_SSID, WIFI_OPERATOR_PASSWORD, WIFI_OPERATOR_AUTH);
cyw43_wifi_ap_set_channel(&cyw43_state, WIFI_OPERATOR_CHANNEL);
return PICO_OK;
}
else if(wifi_operator_mode == WIFI_OPERATOR_MODE_STATION)
{
// Setup as station
cyw43_arch_enable_sta_mode();
int ret = cyw43_arch_wifi_connect_blocking(WIFI_OPERATOR_SSID, WIFI_OPERATOR_PASSWORD, WIFI_OPERATOR_AUTH);
switch(ret)
{
case PICO_ERROR_BADAUTH:
puts("Failed to autentificate to WiFi network.");
break;
case PICO_ERROR_CONNECT_FAILED:
puts("Failed to connect to WiFi network.");
break;
default:
break;
}
return ret;
}
wifi_operator_mode = WIFI_OPERATOR_MODE_UNINITIALIZED;
puts("WiFi operator mode not valid.");
return PICO_ERROR_INVALID_ARG;
}
int wifi_operator_exit(void)
{
if(cyw43_wifi_pm(&cyw43_state, CYW43_DEFAULT_PM))
{
puts("Failed to reset WiFi operator powersave mode.");
return PICO_ERROR_GENERIC;
}
if(wifi_operator_mode == WIFI_OPERATOR_MODE_ACCESS_POINT)
{
// Exit as access point
cyw43_arch_disable_ap_mode();
return PICO_OK;
}
else if(wifi_operator_mode == WIFI_OPERATOR_MODE_STATION)
{
// Exit as station
cyw43_arch_disable_sta_mode();
return PICO_OK;
}
puts("WiFi operator was not initialized correctly.");
return PICO_ERROR_INVALID_ARG;
}