From 1e0a316ef9271ddd7e1422883a0a8db771b77a13 Mon Sep 17 00:00:00 2001 From: Scott Worley Date: Sat, 7 Oct 2023 21:08:58 -0700 Subject: [PATCH] client: Send UDP packets --- client/CMakeLists.txt | 1 + client/config.c | 5 ++++ client/config.h | 7 ++++++ client/net.c | 58 +++++++++++++++++++++++++++++++++++++++++++ client/net.h | 8 ++++++ client/tattlekey.c | 7 +++++- 6 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 client/net.c create mode 100644 client/net.h diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index aeeae37..ae97200 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -10,6 +10,7 @@ pico_sdk_init() add_executable(tattlekey blink.c config.c + net.c tattlekey.c ) diff --git a/client/config.c b/client/config.c index 538f432..e3f444b 100644 --- a/client/config.c +++ b/client/config.c @@ -2,3 +2,8 @@ char wifi_ssid[] = "THEWIFISSID"; char wifi_pass[] = "THEWIFIPASSWORD"; + +char tattle_server_ip_address[] = "192.168.10.10"; +u16_t tattle_port = 29803; // 'tk' + +u16_t this_tattler_identity = 1; diff --git a/client/config.h b/client/config.h index 5c8af1e..7b89ba2 100644 --- a/client/config.h +++ b/client/config.h @@ -1,7 +1,14 @@ #ifndef CONFIG_H #define CONFIG_H +#include "lwip/arch.h" + extern char wifi_ssid[]; extern char wifi_pass[]; +extern u16_t tattle_port; +extern char tattle_server_ip_address[]; + +extern u16_t this_tattler_identity; + #endif diff --git a/client/net.c b/client/net.c new file mode 100644 index 0000000..da33727 --- /dev/null +++ b/client/net.c @@ -0,0 +1,58 @@ +#include "net.h" +#include "blink.h" +#include "config.h" + +#include "pico/cyw43_arch.h" + +#include "lwip/pbuf.h" +#include "lwip/udp.h" + +/* We only ever send to one address, and we only ever have one thread, so just + * use one udp_pcb */ +static struct udp_pcb *the_pcb = NULL; + +static void initialize_the_pcb() { + if (the_pcb) + return; + + the_pcb = udp_new(); + if (!the_pcb) + signal_error_by_blinking(); + + ip_addr_t ipaddr; + if (ip4addr_aton(tattle_server_ip_address, &ipaddr) == 0) + signal_error_by_blinking(); + + if (udp_connect(the_pcb, &ipaddr, htons(tattle_port)) != ERR_OK) + signal_error_by_blinking(); +} + +struct tattle_message_wire_format { + u16_t sender; + u16_t seq; + u16_t ago; +}; + +void send_report(u16_t seq, u16_t ago) { + cyw43_arch_lwip_begin(); + + initialize_the_pcb(); + + struct pbuf *p = pbuf_alloc( + PBUF_TRANSPORT, sizeof(struct tattle_message_wire_format), PBUF_RAM); + if (!p) + signal_error_by_blinking(); + + struct tattle_message_wire_format *msg = + (struct tattle_message_wire_format *)(p->payload); + msg->sender = htons(this_tattler_identity); + msg->seq = htons(seq); + msg->ago = htons(ago); + + if (udp_send(the_pcb, p) != ERR_OK) + signal_error_by_blinking(); + + pbuf_free(p); + + cyw43_arch_lwip_end(); +} diff --git a/client/net.h b/client/net.h new file mode 100644 index 0000000..3cc0791 --- /dev/null +++ b/client/net.h @@ -0,0 +1,8 @@ +#ifndef NET_H +#define NET_H + +#include "lwip/arch.h" + +void send_report(u16_t seq, u16_t ago); + +#endif diff --git a/client/tattlekey.c b/client/tattlekey.c index d7a82e5..ec77107 100644 --- a/client/tattlekey.c +++ b/client/tattlekey.c @@ -3,6 +3,7 @@ #include "blink.h" #include "config.h" +#include "net.h" int main() { stdio_init_all(); @@ -15,5 +16,9 @@ int main() { CYW43_AUTH_WPA2_AES_PSK, 10000)) signal_error_by_blinking(); signal(3, 200); - signal_success_by_blinking(); + + for (int i = 0;; i++) { + send_report(i, 0); + signal(4, 200); + } } -- 2.44.1