diff --git a/mongoose.h b/mongoose.h index 63f83b60..769975f8 100644 --- a/mongoose.h +++ b/mongoose.h @@ -894,6 +894,10 @@ struct timeval { #define MG_SET_MAC_ADDRESS(mac) #endif +#ifndef MG_SET_WIFI_CREDS +#define MG_SET_WIFI_CREDS(ssid, pass) +#endif + #ifndef MG_ENABLE_TCPIP_PRINT_DEBUG_STATS #define MG_ENABLE_TCPIP_PRINT_DEBUG_STATS 0 #endif @@ -2947,6 +2951,7 @@ void mg_phy_init(struct mg_phy *, uint8_t addr, uint8_t config); bool mg_phy_up(struct mg_phy *, uint8_t addr, bool *full_duplex, uint8_t *speed); + #if MG_ENABLE_TCPIP && MG_ARCH == MG_ARCH_PICOSDK && \ defined(MG_ENABLE_DRIVER_PICO_W) && MG_ENABLE_DRIVER_PICO_W @@ -2959,8 +2964,25 @@ struct mg_tcpip_driver_pico_w_data { char *pass; }; +#define MG_TCPIP_DRIVER_INIT(mgr) \ + do { \ + static struct mg_tcpip_driver_pico_w_data driver_data_; \ + static struct mg_tcpip_if mif_; \ + MG_SET_WIFI_CREDS(&driver_data_.ssid, &driver_data_.pass); \ + mif_.ip = MG_TCPIP_IP; \ + mif_.mask = MG_TCPIP_MASK; \ + mif_.gw = MG_TCPIP_GW; \ + mif_.driver = &mg_tcpip_driver_pico_w; \ + mif_.driver_data = &driver_data_; \ + mif_.recv_queue.size = 8192; \ + mif_.mac[0] = 2; /* MAC read from OTP at driver init */ \ + mg_tcpip_init(mgr, &mif_); \ + MG_INFO(("Driver: pico-w, MAC: %M", mg_print_mac, mif_.mac)); \ + } while (0) + #endif + struct mg_tcpip_driver_ppp_data { void *uart; // Opaque UART bus descriptor void (*reset)(void *); // Modem hardware reset diff --git a/src/config.h b/src/config.h index b91cf450..5a022051 100644 --- a/src/config.h +++ b/src/config.h @@ -174,6 +174,10 @@ #define MG_SET_MAC_ADDRESS(mac) #endif +#ifndef MG_SET_WIFI_CREDS +#define MG_SET_WIFI_CREDS(ssid, pass) +#endif + #ifndef MG_ENABLE_TCPIP_PRINT_DEBUG_STATS #define MG_ENABLE_TCPIP_PRINT_DEBUG_STATS 0 #endif diff --git a/src/drivers/pico-w.h b/src/drivers/pico-w.h index fd6837c9..a71b9471 100644 --- a/src/drivers/pico-w.h +++ b/src/drivers/pico-w.h @@ -12,4 +12,20 @@ struct mg_tcpip_driver_pico_w_data { char *pass; }; +#define MG_TCPIP_DRIVER_INIT(mgr) \ + do { \ + static struct mg_tcpip_driver_pico_w_data driver_data_; \ + static struct mg_tcpip_if mif_; \ + MG_SET_WIFI_CREDS(&driver_data_.ssid, &driver_data_.pass); \ + mif_.ip = MG_TCPIP_IP; \ + mif_.mask = MG_TCPIP_MASK; \ + mif_.gw = MG_TCPIP_GW; \ + mif_.driver = &mg_tcpip_driver_pico_w; \ + mif_.driver_data = &driver_data_; \ + mif_.recv_queue.size = 8192; \ + mif_.mac[0] = 2; /* MAC read from OTP at driver init */ \ + mg_tcpip_init(mgr, &mif_); \ + MG_INFO(("Driver: pico-w, MAC: %M", mg_print_mac, mif_.mac)); \ + } while (0) + #endif