diff --git a/project/Core/Inc/UDP_broadcast.h b/project/Core/Inc/UDP_broadcast.h new file mode 100644 index 0000000..f4e062d --- /dev/null +++ b/project/Core/Inc/UDP_broadcast.h @@ -0,0 +1,26 @@ +/* + * UDP_broadcast.h + * + * Created on: Nov 6, 2023 + * Author: joran + */ + +#ifndef INC_UDP_BROADCAST_H_ +#define INC_UDP_BROADCAST_H_ + +typedef struct { + char* name; + char* surname; + uint8_t mac_address[6]; + char* reply; +}owner_details_t; + +uint8_t set_owner_details_name(owner_details_t*, char* ); +uint8_t set_owner_details_sirname(owner_details_t*, char* ); +uint8_t set_owner_details(owner_details_t*, char* , char*); + +char* get_owner_details_name(owner_details_t); +char* get_owner_details_surname(owner_details_t); + + +#endif /* INC_UDP_BROADCAST_H_ */ diff --git a/project/Core/Src/UDP_broadcast.c b/project/Core/Src/UDP_broadcast.c new file mode 100644 index 0000000..64a9b46 --- /dev/null +++ b/project/Core/Src/UDP_broadcast.c @@ -0,0 +1,168 @@ +/* + * UDP_broadcast.c + * + * Created on: Nov 6, 2023 + * Author: joran + */ + //| +#include "UDP_broadcast.h" +#include + +/** + * @fn void set_owner_details_mac(owner_details_t*) + * @brief + * + * @param owner + */ + +static void set_owner_details_mac(owner_details_t* owner){ + uint32_t uID[3]; + + HAL_GetUID(uID); // Read the UID registers + + owner->mac_address[0] = (uID[0] >> 0) & 0xFF; + owner->mac_address[1] = (uID[0] >> 8) & 0xFF; + owner->mac_address[2] = (uID[0] >> 16) & 0xFF; + owner->mac_address[3] = (uID[1] >> 0) & 0xFF; + owner->mac_address[4] = (uID[1] >> 8) & 0xFF; + owner->mac_address[5] = (uID[1] >> 16) & 0xFF; +} + +/** + * @fn uint8_t set_owner_details_name(owner_details_t*, char*) + * @brief + * + * @param owner + * @param name + * @return + */ + +uint8_t set_owner_details_name(owner_details_t* owner, char* name){ + if(name != NULL){ + if(owner->name == NULL){ + owner->name = (char*)malloc(strlen(name) + 1); + } + else{ + owner->name = (char*)realloc(owner->name,strlen(name) + 1); + } + strcpy(owner->name,name); + return 1; + } + else{ + return 0; + } + +} + +/** + * @fn uint8_t set_owner_details_surname(owner_details_t*, char*) + * @brief + * + * @param owner + * @param surname + * @return + */ +uint8_t set_owner_details_surname(owner_details_t* owner, char* surname){ + if(surname != NULL){ + if(owner->surname == NULL){ + owner->surname = (char*)malloc(strlen(surname) + 1); + } + else{ + owner->surname = (char*)realloc(owner->surname,strlen(surname) + 1); + } + strcpy(owner->surname,surname); + return 1; + } + else{ + return 0; + } +} + +/** + * @fn uint8_t set_owner_details_reply(owner_details_t, char*) + * @brief + * + * @param owner + * @param reply + * @return + */ + +static uint8_t set_owner_details_reply(owner_details_t owner, char * reply){ + if(reply != NULL){ + if(owner->reply == NULL){ + owner->reply = (char*)malloc(strlen(reply) + 1); + } + else{ + owner->reply = (char*)realloc(owner->reply,strlen(reply) + 1); + } + strcpy(owner->reply,reply); + return 1; + } + else{ + return 0; + } +} + +/** + * @fn void format_reply(owner_details_t*) + * @brief + * + * @param owner + */ + +static void format_reply(owner_details_t *owner){ + size_t reply_len = 0; + char mac_addr_str[18]; + char* reply_buf = NULL; + if (owner != NULL) { + reply_len = 20 + strlen(mac_addr_str) + strlen(owner->surname) + strlen(owner->name); + reply_buf = (char*)malloc(reply_len); + + + snprintf(mac_addr_str, sizeof(mac_addr_str), "%02X:%02X:%02X:%02X:%02X:%02X", + owner->mac_address[0], owner->mac_address[1], owner->mac_address[2], + owner->mac_address[3], owner->mac_address[4], owner->mac_address[5]); + + if (replyBuffer != NULL) { + snprintf(reply_buf, reply_len, "%s is present and my owner is %s %s", + mac_addr_str, owner->surname, owner->name); + + set_owner_details_reply(owner, reply_buf); + + free(reply_buf); // Free the temporary buffer + } + + } +} + +/** + * @fn uint8_t set_owner_details(owner_details_t*, char*, char*) + * @brief + * + * @param owner + * @param name + * @param surname + * @return + */ +uint8_t set_owner_details(owner_details_t* owner, char* name, char* surname){ + if(set_owner_details_name(owner, name) && set_owner_details_surname(owner, surname) && set_owner_details_mac(owner)){ + format_reply(owner); + } +} + +char* get_owner_details_name(owner_details_t owner){ + char *err_reply = "no name yet"; + if(owner == NULL || owner->name == NULL){ + owner->name = (char*)malloc(strlen(err_reply)); + } + return owner->name; +} +char* get_owner_details_surname(owner_details_t owner){ + char *err_reply = "no surname yet"; + if(owner == NULL || owner->surname == NULL){ + owner->surname = (char*)malloc(strlen(err_reply)); + } + return owner->name; +} + +