diff --git a/ports/raspberrypi/common-hal/wifi/Radio.c b/ports/raspberrypi/common-hal/wifi/Radio.c index aa603f1be3..c6ee5492ad 100644 --- a/ports/raspberrypi/common-hal/wifi/Radio.c +++ b/ports/raspberrypi/common-hal/wifi/Radio.c @@ -48,6 +48,8 @@ #include "lwip/raw.h" #include "lwip_src/ping.h" +#include "shared/netutils/dhcpserver.h" + #define MAC_ADDRESS_LENGTH 6 #define NETIF_STA (&cyw43_state.netif[CYW43_ITF_STA]) @@ -367,11 +369,14 @@ void common_hal_wifi_radio_stop_dhcp_client(wifi_radio_obj_t *self) { } void common_hal_wifi_radio_start_dhcp_server(wifi_radio_obj_t *self) { - mp_raise_NotImplementedError(NULL); + ip4_addr_t ipv4_addr, netmask_addr; + ipaddress_ipaddress_to_lwip(common_hal_wifi_radio_get_ipv4_address_ap(self), &ipv4_addr); + ipaddress_ipaddress_to_lwip(common_hal_wifi_radio_get_ipv4_subnet_ap(self), &netmask_addr); + dhcp_server_init(&cyw43_state.dhcp_server, &ipv4_addr, &netmask_addr); } void common_hal_wifi_radio_stop_dhcp_server(wifi_radio_obj_t *self) { - mp_raise_NotImplementedError(NULL); + dhcp_server_deinit(&cyw43_state.dhcp_server); } void common_hal_wifi_radio_set_ipv4_address(wifi_radio_obj_t *self, mp_obj_t ipv4, mp_obj_t netmask, mp_obj_t gateway, mp_obj_t ipv4_dns) { @@ -388,7 +393,15 @@ void common_hal_wifi_radio_set_ipv4_address(wifi_radio_obj_t *self, mp_obj_t ipv } void common_hal_wifi_radio_set_ipv4_address_ap(wifi_radio_obj_t *self, mp_obj_t ipv4, mp_obj_t netmask, mp_obj_t gateway) { - mp_raise_NotImplementedError(NULL); + common_hal_wifi_radio_stop_dhcp_server(self); + + ip4_addr_t ipv4_addr, netmask_addr, gateway_addr; + ipaddress_ipaddress_to_lwip(ipv4, &ipv4_addr); + ipaddress_ipaddress_to_lwip(netmask, &netmask_addr); + ipaddress_ipaddress_to_lwip(gateway, &gateway_addr); + netif_set_addr(NETIF_AP, &ipv4_addr, &netmask_addr, &gateway_addr); + + common_hal_wifi_radio_start_dhcp_server(self); } volatile bool ping_received;