PicoW_UDP_Lib/src/wifi_operator/wifi_operator.c

70 lines
1.9 KiB
C

#include "wifi_operator.h"
#include <stdio.h>
#include "pico/cyw43_arch.h"
#include "lwip/netif.h"
#include "lwip/ip4_addr.h"
void wifi_operator_init_ap_mode(const char *ssid, const char *password, int channel)
{
cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1);
// Configuration IP pour le mode AP
ip4_addr_t ip, netmask, gateway;
IP4_ADDR(&ip, 192, 168, 128, 1);
IP4_ADDR(&netmask, 255, 255, 255, 0);
IP4_ADDR(&gateway, 192, 168, 128, 1);
puts("WiFi is configuring...");
// Désactiver le mode d'économie d'énergie
cyw43_wifi_pm(&cyw43_state, CYW43_NO_POWERSAVE_MODE);
// Activer le mode AP
cyw43_arch_enable_ap_mode(ssid, password, CYW43_AUTH_WPA2_AES_PSK);
// Attendre que l'interface soit prête
int retry = 0;
while (netif_default == NULL && retry < 10)
{
sleep_ms(500);
retry++;
}
if (netif_default == NULL)
{
puts("Error: wireless interface not initialised");
return;
}
// Configuration du canal WiFi
cyw43_wifi_ap_set_channel(&cyw43_state, channel);
// Configuration de l'interface réseau
netif_set_up(netif_default);
netif_set_link_up(netif_default);
netif_set_addr(netif_default, &ip, &netmask, &gateway);
puts("IP configuration ended !");
puts("Access point activated !");
printf("SSID : %s\n", ssid);
printf("Password : %s\n", password);
printf("Channel : %d\n", channel);
}
void wifi_operator_init(const char *ssid, const char *password)
{
// Mode client
cyw43_arch_enable_sta_mode();
cyw43_arch_wifi_connect_timeout_ms(ssid, password, CYW43_AUTH_WPA2_AES_PSK, 30000);
puts("Connexion au réseau Wi-Fi...");
int status = cyw43_wifi_link_status(&cyw43_state, CYW43_ITF_STA);
while (status != CYW43_LINK_UP)
{
sleep_ms(500);
puts("Connexion en cours...");
status = cyw43_wifi_link_status(&cyw43_state, CYW43_ITF_STA);
}
puts("Connexion établie!");
}