From bdf445b708c8556c0006b0391cfc6b08cab55b49 Mon Sep 17 00:00:00 2001 From: joran2738 <101818067+joran2738@users.noreply.github.com> Date: Tue, 7 Nov 2023 23:37:16 +0100 Subject: [PATCH] added some UDP server code initialising UDP server succesfull, callback running have not yet tried to receive a broadcast --- project/Core/Inc/UDP_broadcast.h | 5 +++ project/Core/Src/UDP_broadcast.c | 64 ++++++++++++++++++++++++++++++++ project/Core/Src/main.c | 34 ++--------------- 3 files changed, 73 insertions(+), 30 deletions(-) diff --git a/project/Core/Inc/UDP_broadcast.h b/project/Core/Inc/UDP_broadcast.h index 07abd29..65ac3be 100644 --- a/project/Core/Inc/UDP_broadcast.h +++ b/project/Core/Inc/UDP_broadcast.h @@ -40,5 +40,10 @@ char* get_owner_details_name(owner_details_t*); char* get_owner_details_surname(owner_details_t*); char* get_owner_details_reply(owner_details_t*); +err_t init_UDP_server(); + + + + #endif /* INC_UDP_BROADCAST_H_ */ diff --git a/project/Core/Src/UDP_broadcast.c b/project/Core/Src/UDP_broadcast.c index 8ae2aa1..3f75cbe 100644 --- a/project/Core/Src/UDP_broadcast.c +++ b/project/Core/Src/UDP_broadcast.c @@ -227,4 +227,68 @@ char* get_owner_details_reply(owner_details_t *owner){ return owner->reply; } +/** + * @fn void udp_receive_callback(void*, struct udp_pcb*, struct pbuf*, const ip_addr_t*, u16_t) + * @brief + * + * @param arg + * @param upcb + * @param p + * @param addr + * @param port + */ + +static void udp_receive_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port){ + int i; + int len; + char *pc; + char data[1024]; + char source_ip_str[16]; + + // Convert the source IP address to a string for printing. + ipaddr_ntoa_r(addr, source_ip_str, sizeof(source_ip_str)); + + if (p != NULL) { + pc = (char*)p->payload; + len = p->tot_len; + + for(i = 0; i < len; i++) { + data[i] = pc[i]; + } + pbuf_free(p); + + LOG_DEBUG(TAG,"received data from %s at port: %d: %s",source_ip_str,port,data); + } +} + +/** + * @fn err_t init_UDP_server() + * @brief + * + * @return + */ + +err_t init_UDP_server(){ + struct udp_pcb *connection; + err_t err; + LOG_INFO(TAG,"initialising UDP server"); + connection = udp_new(); + if(connection != NULL){ + err = udp_bind(connection, IP_ANY_TYPE, 64000); + if(err == ERR_OK){ + udp_recv(connection, udp_receive_callback, NULL); + LOG_INFO(TAG,"initialising UDP server succesfull, callback running"); + } + else{ + udp_remove(connection); + LOG_WARN(TAG,"initialising UDP server failed, err not ok"); + } + } + else{ + LOG_WARN(TAG,"initialising UDP server failed, connection is null"); + } + return err; +} + + diff --git a/project/Core/Src/main.c b/project/Core/Src/main.c index 4565b6e..99f6437 100644 --- a/project/Core/Src/main.c +++ b/project/Core/Src/main.c @@ -25,6 +25,7 @@ #define LOGGER_LEVEL_ALL #include "log.h" #include "UDP_broadcast.h" +#include "udp.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -110,40 +111,13 @@ int main(void) MX_LWIP_Init(); MX_QUADSPI_Init(); /* USER CODE BEGIN 2 */ + init_UDP_server(); owner_details_t owner; - owner_details_t* owner_error = NULL; - char* test_error = NULL; - LOG_DEBUG(TAG,"\nhelloworld"); - LOG_DEBUG(TAG,"owner1:%s",get_owner_details_reply(&owner)); + if(!set_owner_details(&owner, "joran", "vn")){ LOG_DEBUG(TAG,"error");; } - LOG_DEBUG(TAG,"owner2:%s",get_owner_details_reply(&owner)); - - if(!set_owner_details(&owner, "joran", "Van Nieuwenhoven")){ - LOG_DEBUG(TAG,"error"); - } - LOG_DEBUG(TAG,"owner3:%s",get_owner_details_reply(&owner)); - - if(!set_owner_details(&owner, "joran", "")){ - LOG_DEBUG(TAG,"error"); - } - LOG_DEBUG(TAG,"owner4:%s",get_owner_details_reply(&owner)); - - if(!set_owner_details(&owner, "joran", test_error)){ - LOG_DEBUG(TAG,"error setting owner details"); - } - LOG_DEBUG(TAG,"owner5:%s",get_owner_details_reply(&owner)); - - if(!set_owner_details(&owner, test_error, "Van Nieuwenhoven")){ - LOG_DEBUG(TAG,"error setting owner details"); - } - LOG_DEBUG(TAG,"owner6:%s",get_owner_details_reply(&owner)); - - if(!set_owner_details(owner_error, test_error, "Van Nieuwenhoven")){ - LOG_DEBUG(TAG,"error setting owner details"); - } - LOG_DEBUG(TAG,"owner7:%s",get_owner_details_reply(owner_error)); + LOG_DEBUG(TAG,"%s",get_owner_details_reply(&owner)); /* USER CODE END 2 */ /* Infinite loop */