controller_2025-2026/program/src/wifi/udp_server.c

69 lines
1.4 KiB
C

#include "headers/udp_server.h"
#include <stdio.h>
#include <string.h>
#include "headers/controller.h"
#define MSG_LEN (sizeof(inputs_t)) / sizeof(uint8_t)
#define MSG_DELAY_MS 20.0f
int udp_server_init(void)
{
controller.udp_server.pcb = udp_new();
if(controller.udp_server.pcb == NULL)
{
puts("Error creating UDP server");
return -1;
}
if(udp_bind(controller.udp_server.pcb, IP_ADDR_ANY, UDP_SERVER_PORT))
{
puts("Error binding UDP server");
return -1;
}
return 0;
}
void udp_server_send(void)
{
static float elapsed_time_ms = 0.0f;
elapsed_time_ms += controller.delta_time_ms;
if(elapsed_time_ms >= MSG_DELAY_MS)
{
static union data_t {
struct {
inputs_t inputs;
} hard;
uint8_t raw[MSG_LEN];
} data;
data.hard.inputs = controller.inputs;
struct pbuf *p = pbuf_alloc(PBUF_TRANSPORT, MSG_LEN, PBUF_RAM);
memcpy((uint8_t *)p->payload, data.raw, MSG_LEN);
err_t error_code = udp_sendto(controller.udp_server.pcb, p, IP_ADDR_ANY, UDP_CLIENT_PORT);
pbuf_free(p);
if(error_code)
{
printf("UDP send error : %d\n", error_code);
}
elapsed_time_ms = 0.0f;
}
}
void udp_server_deinit(void)
{
if(controller.udp_server.pcb)
{
udp_remove(controller.udp_server.pcb);
controller.udp_server.pcb = NULL;
}
}