Update project files and headers: ensure consistency and maintainability across the codebase.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @brief Provizorni modul pro praci se seznamy uzivatelu. Priprava pro implementaci uziti PostgreSQL
|
||||
* @brief Temporary modul for user list handling.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
+10
-6
@@ -1,21 +1,25 @@
|
||||
#ifndef __LOGGER_H__
|
||||
#define __LOGGER_H__
|
||||
|
||||
#include "main.h"
|
||||
#include "rfid_handler.h"
|
||||
#include "utils.h"
|
||||
|
||||
typedef struct
|
||||
#include <stdarg.h>
|
||||
|
||||
|
||||
typedef struct Logger
|
||||
{
|
||||
pthread_mutex_t lock;
|
||||
FILE *f_log;
|
||||
} Logger;
|
||||
|
||||
extern Logger *logger_global;
|
||||
|
||||
Logger *initLogger(const char *_filename);
|
||||
int logErrorEvent(Logger *_logger, const char *_message);
|
||||
int logWarningEvent(Logger *_logger, const char *_message);
|
||||
int logHardwareEvent(Logger *_logger, const char *_event_origin, const char *_message);
|
||||
int logInfoEvent(Logger *_logger, const char *_message);
|
||||
int logErrorEvent(Logger *_logger, const char *_fmt, ...);
|
||||
int logWarningEvent(Logger *_logger, const char *_fmt, ...);
|
||||
int logHardwareEvent(Logger *_logger, const char *_event_origin, const char *_fmt, ...);
|
||||
int logInfoEvent(Logger *_logger, const char *_fmt, ...);
|
||||
int endLogger(Logger *_logger);
|
||||
|
||||
#endif
|
||||
+3
-1
@@ -34,11 +34,13 @@
|
||||
#include <string.h>
|
||||
#include <signal.h>
|
||||
|
||||
#include "logger.h"
|
||||
|
||||
|
||||
#ifndef __MAIN_H__
|
||||
#define __MAIN_H__
|
||||
|
||||
#ifndef TRUE
|
||||
#ifndef TRUE
|
||||
#define TRUE 1
|
||||
#endif
|
||||
|
||||
|
||||
@@ -20,10 +20,37 @@ typedef struct
|
||||
} UartThreadArgs;
|
||||
|
||||
// UART handler thread
|
||||
/**
|
||||
* @brief Thread function to listen for UART data.
|
||||
*
|
||||
* This function is intended to be run as a separate thread. It continuously listens
|
||||
* for incoming data on a UART interface and processes the received data accordingly.
|
||||
*
|
||||
* @param arg Pointer to arguments required by the UART listener (typically a struct with UART configuration).
|
||||
* @return void* Returns NULL upon thread completion.
|
||||
*/
|
||||
void *uartListener(void *arg);
|
||||
|
||||
/**
|
||||
* @brief Parses an incoming RFID packet.
|
||||
*
|
||||
* This function processes the provided packet and extracts relevant information.
|
||||
*
|
||||
* @param _packet Pointer to the incoming packet data (array of BYTE).
|
||||
* @return uint16_t Parsed value.
|
||||
*/
|
||||
uint16_t parseIncommingPacket(BYTE *_packet);
|
||||
|
||||
/**
|
||||
* @brief Sends a data packet to a device over the specified UART interface.
|
||||
*
|
||||
* This function constructs and transmits a packet containing information about a person (node)
|
||||
* and a specified state to a device connected via UART.
|
||||
*
|
||||
* @param _uart The UART interface identifier to use for transmission.
|
||||
* @param _person Pointer to a node_t structure representing the person whose data is to be sent.
|
||||
* @param state The state value to include in the packet.
|
||||
*/
|
||||
void sendPacketToDevice(int _uart, node_t *_person, BYTE state);
|
||||
|
||||
#endif
|
||||
|
||||
+115
-1
@@ -15,27 +15,141 @@
|
||||
#define WARNING_WIN_COLOUR 8
|
||||
#define SUCCESS_WIN_COLOUR 9
|
||||
|
||||
/**
|
||||
* @brief Initializes a window with specified parameters and displays a header.
|
||||
*
|
||||
* @param _win Pointer to the WINDOW object to initialize.
|
||||
* @param window_x The width of the window.
|
||||
* @param terminal_x The x-coordinate position of the window in the terminal.
|
||||
* @param terminal_y The y-coordinate position of the window in the terminal.
|
||||
* @param window_colourpair The color pair attribute to use for the window.
|
||||
* @param header The header text to display at the top of the window.
|
||||
*/
|
||||
void initWindow(WINDOW *_win, int window_x, int terminal_x, int terminal_y, int window_colourpair, char *header);
|
||||
|
||||
// type = 1 - success, 2 - warning, 3 - failure
|
||||
/**
|
||||
* @brief Displays a dialog window with a message in the terminal.
|
||||
*
|
||||
* @param _type Type of dialog: 1 for success, 2 for warning, 3 for failure.
|
||||
* @param _message The message to display in the dialog window.
|
||||
* @param terminal_x The x-coordinate of the terminal where the dialog should appear.
|
||||
* @param terminal_y The y-coordinate of the terminal where the dialog should appear.
|
||||
*/
|
||||
void dialogWindow(BYTE _type, char *_message, int terminal_x, int terminal_y);
|
||||
|
||||
/**
|
||||
* @brief Opens a UART dialog interface at the specified terminal coordinates.
|
||||
*
|
||||
* This function initializes and displays a UART dialog using the provided UART address,
|
||||
* and positions the dialog at the specified (terminal_x, terminal_y) coordinates on the terminal.
|
||||
*
|
||||
* @param uart_adress Pointer to a string containing the UART address.
|
||||
* @param terminal_x X-coordinate for the dialog position in the terminal.
|
||||
* @param terminal_y Y-coordinate for the dialog position in the terminal.
|
||||
*/
|
||||
void uartDialog(char *uart_adress, int terminal_x, int terminal_y);
|
||||
|
||||
/**
|
||||
* @brief Displays and manages the main menu of the application.
|
||||
*
|
||||
* This function presents the main menu interface to the user, allowing interaction
|
||||
* with the list of persons and database file. It handles user input and updates
|
||||
* the application state accordingly.
|
||||
*
|
||||
* @param person_list Pointer to the list of persons to be managed.
|
||||
* @param db_filename Path to the database file used for storing person data.
|
||||
* @param terminal_x Width of the terminal window.
|
||||
* @param terminal_y Height of the terminal window.
|
||||
*/
|
||||
void mainMenu(list_t *person_list, char *db_filename, int terminal_x, int terminal_y);
|
||||
|
||||
/**
|
||||
* @brief Displays a list of persons in a terminal user interface.
|
||||
*
|
||||
* This function renders the provided list of persons within the terminal window,
|
||||
* using the specified terminal dimensions.
|
||||
*
|
||||
* @param person_list Pointer to a list_t structure containing person entries to display.
|
||||
* @param terminal_x The width of the terminal window in characters.
|
||||
* @param terminal_y The height of the terminal window in characters.
|
||||
*/
|
||||
void personListing(list_t *person_list, int terminal_x, int terminal_y);
|
||||
|
||||
/**
|
||||
* @brief Searches for a person in the given list and displays results in a terminal UI.
|
||||
*
|
||||
* This function allows the user to search for a person within the provided person_list.
|
||||
* The search interface is rendered within a terminal window of the specified dimensions.
|
||||
*
|
||||
* @param person_list Pointer to the list of persons to search.
|
||||
* @param terminal_x Width of the terminal window.
|
||||
* @param terminal_y Height of the terminal window.
|
||||
*/
|
||||
void personSearch(list_t *person_list, int terminal_x, int terminal_y);
|
||||
|
||||
/**
|
||||
* @brief Displays information about a person in a terminal user interface.
|
||||
*
|
||||
* This function presents the details of a person, represented by the node_t pointer,
|
||||
* within a list structure, at the specified terminal coordinates.
|
||||
*
|
||||
* @param _list Pointer to the list containing person nodes.
|
||||
* @param _person Pointer to the specific person node whose information will be displayed.
|
||||
* @param terminal_x X-coordinate in the terminal where the information should be shown.
|
||||
* @param terminal_y Y-coordinate in the terminal where the information should be shown.
|
||||
*/
|
||||
void personInfo(list_t *_list, node_t *_person, int terminal_x, int terminal_y);
|
||||
|
||||
/**
|
||||
* @brief Displays an export dialog in the terminal user interface.
|
||||
*
|
||||
* This function presents an export dialog to the user, allowing them to select
|
||||
* items from the provided list for export. The dialog is rendered at the specified
|
||||
* terminal coordinates.
|
||||
*
|
||||
* @param _list Pointer to a list_t structure containing items to display.
|
||||
* @param terminal_x The x-coordinate (column) for the dialog's position in the terminal.
|
||||
* @param terminal_y The y-coordinate (row) for the dialog's position in the terminal.
|
||||
* @return An integer status code indicating the result of the dialog operation.
|
||||
*/
|
||||
int exportDialog(list_t *_list, int terminal_x, int terminal_y);
|
||||
|
||||
/**
|
||||
* @brief Displays and manages the Edit Database menu in the terminal UI.
|
||||
*
|
||||
* This function presents the user with options to edit entries in the provided person list,
|
||||
* handling user input and updating the list as necessary. The menu is rendered according to
|
||||
* the specified terminal dimensions.
|
||||
*
|
||||
* @param _person_list Pointer to the list of persons to be edited.
|
||||
* @param terminal_x Width of the terminal window.
|
||||
* @param terminal_y Height of the terminal window.
|
||||
*/
|
||||
void editDatabaseMenu(list_t *_person_list, int terminal_x, int terminal_y);
|
||||
|
||||
/**
|
||||
* @brief Displays a dialog to add a new person to the provided list.
|
||||
*
|
||||
* This function opens a terminal-based dialog interface that allows the user
|
||||
* to input information for a new person. The new person is then added to the
|
||||
* specified person list.
|
||||
*
|
||||
* @param _person_list Pointer to the list where the new person will be added.
|
||||
* @param terminal_x The width of the terminal window (in characters).
|
||||
* @param terminal_y The height of the terminal window (in characters).
|
||||
*/
|
||||
void addPersonDialog(list_t *_person_list, int terminal_x, int terminal_y);
|
||||
|
||||
/**
|
||||
* @brief Displays a dialog to delete a person from the given list.
|
||||
*
|
||||
* This function presents a user interface dialog at the specified terminal coordinates,
|
||||
* allowing the user to select and delete a person from the provided list.
|
||||
*
|
||||
* @param _person_list Pointer to the list of persons to be managed.
|
||||
* @param terminal_x X-coordinate for the dialog's position in the terminal.
|
||||
* @param terminal_y Y-coordinate for the dialog's position in the terminal.
|
||||
*/
|
||||
void deletePersonDialog(list_t *_person_list, int terminal_x, int terminal_y);
|
||||
|
||||
#endif
|
||||
+76
-85
@@ -1,129 +1,120 @@
|
||||
/**
|
||||
* @file users.h
|
||||
* @brief User list management for LightTAM.
|
||||
*
|
||||
* Contains structures and functions for working with the user linked list,
|
||||
* including synchronization using a mutex.
|
||||
*/
|
||||
|
||||
#include "main.h"
|
||||
|
||||
#ifndef __USERS_H__
|
||||
#define __USERS_H__
|
||||
|
||||
/**
|
||||
* @struct person
|
||||
* @brief Structure representing a single user.
|
||||
*/
|
||||
typedef struct person
|
||||
{
|
||||
uint16_t uuid;
|
||||
|
||||
char *name;
|
||||
char *surname;
|
||||
uint32_t department;
|
||||
|
||||
time_t last_time_event;
|
||||
time_t total;
|
||||
|
||||
BYTE available;
|
||||
uint16_t uuid; ///< Unique user identifier
|
||||
char *name; ///< First name
|
||||
char *surname; ///< Last name
|
||||
uint32_t department; ///< Department number
|
||||
time_t last_time_event; ///< Last event timestamp
|
||||
time_t total; ///< Total presence time
|
||||
BYTE available; ///< Presence state (TRUE/FALSE)
|
||||
} person_t;
|
||||
|
||||
/**
|
||||
* @struct node
|
||||
* @brief Node of the user linked list.
|
||||
*/
|
||||
typedef struct node
|
||||
{
|
||||
person_t user;
|
||||
struct node *next;
|
||||
person_t user; ///< User data
|
||||
struct node *next; ///< Pointer to the next node
|
||||
} node_t;
|
||||
|
||||
/**
|
||||
* @struct list
|
||||
* @brief User linked list with a mutex for synchronization.
|
||||
*/
|
||||
typedef struct list
|
||||
{
|
||||
node_t *head;
|
||||
pthread_mutex_t lock;
|
||||
|
||||
node_t *head; ///< List head
|
||||
pthread_mutex_t lock; ///< Mutex for access synchronization
|
||||
} list_t;
|
||||
|
||||
/**
|
||||
* @brief Generates a unique identifier (UUID) for a new node in the linked list.
|
||||
*
|
||||
* This function traverses the linked list starting from the given head node
|
||||
* and generates a unique 16-bit unsigned integer identifier that does not
|
||||
* conflict with any existing UUIDs in the list.
|
||||
*
|
||||
* @param _head Pointer to the head node of the linked list.
|
||||
* @return A 16-bit unsigned integer representing the generated UUID.
|
||||
* @brief Generate a unique UUID not used in the list.
|
||||
* @param _list Pointer to the user list
|
||||
* @return New UUID
|
||||
*/
|
||||
uint16_t generateUUID(list_t *_list);
|
||||
|
||||
/**
|
||||
* @brief Searches for a UUID associated with a user by their name and surname.
|
||||
*
|
||||
* This function traverses a linked list of nodes to find a user whose name
|
||||
* and surname match the provided parameters. If a match is found, it returns
|
||||
* a pointer to the UUID associated with that user.
|
||||
*
|
||||
* @param _head Pointer to the head of the linked list.
|
||||
* @param _name Pointer to a string containing the user's first name.
|
||||
* @param _surname Pointer to a string containing the user's surname.
|
||||
* @return Pointer to the UUID of the user if found, or 0 if no match is found.
|
||||
* @brief Find all UUIDs by name and surname.
|
||||
* @param _list Pointer to the user list
|
||||
* @param _name First name
|
||||
* @param _surname Last name
|
||||
* @param _uuids_found Pointer to an array of found UUIDs (allocated inside the function)
|
||||
* @return Number of found UUIDs
|
||||
*/
|
||||
uint16_t searchUUIDByName(list_t *_list, char *_name, char *_surname, uint16_t **_uuids_found);
|
||||
|
||||
/**
|
||||
* @brief Searches for a person in a linked list by their UUID.
|
||||
*
|
||||
* This function traverses a linked list starting from the given head node
|
||||
* and searches for a node that matches the specified UUID.
|
||||
*
|
||||
* @param _head Pointer to the head node of the linked list.
|
||||
* @param _uuid The UUID of the person to search for.
|
||||
* @return Pointer to the node containing the person with the matching UUID,
|
||||
* or NULL if no such person is found.
|
||||
* @brief Find a user by UUID.
|
||||
* @param _list Pointer to the user list
|
||||
* @param _uuid Searched UUID
|
||||
* @return Pointer to the found node, or NULL if not found
|
||||
*/
|
||||
node_t *searchPersonByUUID(list_t *_list, uint16_t _uuid);
|
||||
|
||||
/**
|
||||
* @brief Adds a new person to the linked list.
|
||||
*
|
||||
* This function creates a new person and appends it to the end of the linked list.
|
||||
* It dynamically allocates memory for the new person and initializes their details.
|
||||
* If memory allocation fails or the input parameters are invalid, the function returns an error.
|
||||
*
|
||||
* @param _head Pointer to the head of the linked list (node_t **).
|
||||
* @param _name Pointer to a string containing the person's first name.
|
||||
* @param _surname Pointer to a string containing the person's last name.
|
||||
* @param _department The department number to which the person belongs.
|
||||
*
|
||||
* @return int Returns 1 if the person was successfully added, otherwise 0 on failure.
|
||||
*
|
||||
* @note Memory for the name and surname is dynamically allocated. It is the caller's
|
||||
* responsibility to free the memory for the entire list to avoid memory leaks.
|
||||
*
|
||||
* @example
|
||||
* ```c
|
||||
* node_t *head = NULL;
|
||||
* if (addPersonToList(&head, "John", "Doe", 101)) {
|
||||
* printf("Person successfully added.\n");
|
||||
* } else {
|
||||
* printf("Error adding person.\n");
|
||||
* }
|
||||
* ```
|
||||
* @brief Add a new user to the list.
|
||||
* @param _list Pointer to the user list
|
||||
* @param _name First name
|
||||
* @param _surname Last name
|
||||
* @param _department Department
|
||||
* @return 1 on success, 0 on error
|
||||
*/
|
||||
int addPersonToList(list_t *_list, char *_name, char *_surname, uint32_t _department);
|
||||
|
||||
/**
|
||||
* @brief Load a user into the list (e.g. when loading from file).
|
||||
* @param _list Pointer to the user list
|
||||
* @param _uuid UUID
|
||||
* @param _name First name
|
||||
* @param _surname Last name
|
||||
* @param _department Department
|
||||
* @param _last_event Last event time
|
||||
* @param _total Total time
|
||||
* @param _available Presence state
|
||||
* @return 1 on success, 0 on error
|
||||
*/
|
||||
int loadPersonToList(list_t *_list, uint16_t _uuid, char *_name, char *_surname, uint32_t _department, time_t _last_event, time_t _total, BYTE _available);
|
||||
|
||||
/**
|
||||
* @brief Adds a time event to the specified person's event list.
|
||||
*
|
||||
* This function associates a time-based event with the given person node.
|
||||
*
|
||||
* @param _person A pointer to the node_t structure representing the person
|
||||
* to whom the time event will be added.
|
||||
*
|
||||
* @return An integer indicating the success or failure of the operation.
|
||||
* Typically, 1 for success and a 0 for failure.
|
||||
* @brief Add a time event for a user (arrival/departure).
|
||||
* @param _person Pointer to the user node
|
||||
* @param _list Pointer to the user list
|
||||
* @return Event type (1 = arrival, 2 = departure)
|
||||
*/
|
||||
int addTimeEvent(node_t *_person, list_t *_list);
|
||||
|
||||
/**
|
||||
* @brief Removes a person node from a linked list.
|
||||
*
|
||||
* This function removes the node pointed to by _person from the linked list
|
||||
* whose head is pointed to by _head. Both parameters are double pointers to
|
||||
* allow modification of the head pointer and the node pointer.
|
||||
*
|
||||
* @param _head Double pointer to the head of the linked list.
|
||||
* @param _person Double pointer to the node representing the person to remove.
|
||||
* @return int Returns 0 on success, or a negative value on failure.
|
||||
* @brief Remove a user from the list.
|
||||
* @param _list Pointer to the user list
|
||||
* @param _person Pointer to the pointer to the node to remove
|
||||
* @return 1 on success, 0 on error
|
||||
*/
|
||||
int removePersonFromList(list_t *_list, node_t **_person);
|
||||
|
||||
/**
|
||||
* @brief Free the entire user list from memory.
|
||||
* @param _list Pointer to the pointer to the user list
|
||||
*/
|
||||
void freePersonList(list_t ** _list);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user