added header file with first functions
wrote functions to work with the owner data
This commit is contained in:
26
project/Core/Inc/UDP_broadcast.h
Normal file
26
project/Core/Inc/UDP_broadcast.h
Normal 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_ */
|
||||
168
project/Core/Src/UDP_broadcast.c
Normal file
168
project/Core/Src/UDP_broadcast.c
Normal 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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user