added header file with first functions

wrote functions to  work with the owner data
This commit is contained in:
joran2738
2023-11-06 19:41:24 +01:00
parent c3b771469e
commit 01f018536f
2 changed files with 194 additions and 0 deletions

View File

@@ -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_ */

View File

@@ -0,0 +1,168 @@
/*
* UDP_broadcast.c
*
* Created on: Nov 6, 2023
* Author: joran
*/
//|
#include "UDP_broadcast.h"
#include <string.h>
/**
* @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;
}