82 lines
1.4 KiB
C
82 lines
1.4 KiB
C
#include <string.h>
|
|
|
|
#include "pico/stdlib.h"
|
|
#include "pico/cyw43_arch.h"
|
|
|
|
#include "lwip/netif.h"
|
|
#include "lwip/udp.h"
|
|
#include "lwip/pbuf.h"
|
|
#include "lwip/ip_addr.h"
|
|
#include "lwip/dhcp.h"
|
|
|
|
#include "wifi-settings.h"
|
|
|
|
static struct udp_pcb *udp;
|
|
static ip_addr_t dest_ip;
|
|
|
|
extern struct netif *netif_default;
|
|
|
|
static void send_hello(void) {
|
|
const char msg[] = "hello world\n";
|
|
|
|
struct pbuf *p = pbuf_alloc(PBUF_TRANSPORT, sizeof(msg) - 1, PBUF_RAM);
|
|
if (!p) {
|
|
return;
|
|
}
|
|
|
|
memcpy(p->payload, msg, sizeof(msg) - 1);
|
|
udp_sendto(udp, p, &dest_ip, 5505);
|
|
pbuf_free(p);
|
|
}
|
|
|
|
int main() {
|
|
stdio_init_all();
|
|
|
|
if (cyw43_arch_init()) {
|
|
return -1;
|
|
}
|
|
|
|
cyw43_arch_enable_sta_mode();
|
|
|
|
if (cyw43_arch_wifi_connect_timeout_ms(
|
|
WIFI_SSID,
|
|
WIFI_PASS,
|
|
CYW43_AUTH_WPA2_AES_PSK,
|
|
30000)) {
|
|
return -1;
|
|
}
|
|
|
|
/* Raw lwIP setup */
|
|
udp = udp_new_ip_type(IPADDR_TYPE_V4);
|
|
if (!udp) {
|
|
return -1;
|
|
}
|
|
|
|
ipaddr_aton("192.168.2.99", &dest_ip);
|
|
|
|
absolute_time_t next = get_absolute_time();
|
|
|
|
bool dhcp_done = false;
|
|
|
|
while (true) {
|
|
cyw43_arch_poll();
|
|
|
|
if (!dhcp_done) {
|
|
if (netif_default &&
|
|
netif_is_up(netif_default) &&
|
|
!ip4_addr_isany_val(*netif_ip4_addr(netif_default))) {
|
|
|
|
dhcp_done = true;
|
|
cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1);
|
|
}
|
|
}
|
|
|
|
if (absolute_time_diff_us(get_absolute_time(), next) <= 0) {
|
|
send_hello();
|
|
next = delayed_by_ms(next, 1000);
|
|
}
|
|
|
|
sleep_ms(1);
|
|
}
|
|
}
|