# LightTAM: Detailed Overview LightTAM (Lightweight Time And Attendance Manager) is a terminal-based application for managing employee or student attendance using RFID cards. The system is modular, with each component responsible for a specific aspect of the program's functionality. Below is a detailed overview of how the program works, referencing the component UML diagram (`component_uml.png`). --- ## Component Overview ![Component UML Diagram](component_uml.png) ### 1. **Main Application (`main.c`)** - **Role:** Entry point of the program. Initializes all subsystems, parses command-line arguments, loads the user database, and starts the main event loop. - **Key Functions:** - `main` – program entry, initialization, TUI start, graceful shutdown. - `handle_sigint` – signal handler for program termination. - Calls to initialize logger (`initLogger`), load users (`loadListFromCSV`), start RFID thread (`uartListener`). ### 2. **Terminal User Interface (TUI) (`tui.c`, `tui.h`)** - **Role:** Provides all user interaction via a terminal-based UI using ncurses. - **Key Functions:** - `mainMenu` – main menu display and navigation. - `personListing` – list all users. - `personSearch` – search users by name or UUID. - `personInfo` – show detailed user info. - `editDatabaseMenu` – add, remove, or edit users. - `dialogWindow` – show dialogs (errors, warnings, confirmations). - `exportDialog` – export user or database data. - Keyboard input handling, navigation, and forms. ### 3. **User Management (`users.c`, `users.h`)** - **Role:** Manages the in-memory linked list of users. - **Key Functions and Structures:** - `person_t`, `node_t`, `list_t` – data structures for users and the list. - `addPersonToList` – add a user. - `removePersonFromList` – remove a user. - `findPersonByUUID`, `findPersonByName` – search for users. - `updatePerson` – update user data. - `calculatePresenceTime` – compute attendance. - Synchronization using mutex (`pthread_mutex_t`). ### 4. **File Handler (`file_handler.c`, `file_handler.h`)** - **Role:** Handles reading and writing user data to CSV files. - **Key Functions:** - `loadListFromCSV` – load user list from file. - `saveListToCSV` – save user list to file. - `exportPersonInfo` – export a user's data to an external file. ### 5. **RFID Handler (`rfid_handler.c`, `rfid_handler.h`)** - **Role:** Interfaces with the RFID reader hardware via a serial port. - **Key Functions:** - `uartListener` – thread for reading data from the serial port. - `processRFIDEvent` – process a detected RFID card. - `sendPacketToDevice` – send data to the device. - CRC check, card-to-user matching, attendance event logging. ### 6. **Logger (`logger.c`, `logger.h`)** - **Role:** Logs all actions, errors, and system events to a journal file. - **Key Functions:** - `initLogger` – initialize the logger. - `logErrorEvent` – log errors. - `logWarningEvent` – log warnings. - `logHardwareEvent` – log hardware events (e.g., RFID). - `logInfoEvent` – log general information. - `endLogger` – close the log file. ### 7. **Utilities (`utils.c`,`utils.h`)** - **Role:** Provides helper functions used throughout the program. - **Key Functions:** - `printDateAndTimeInString` – time formatting. - String manipulation, input validation, type conversions. --- ## Component Interactions - **TUI ↔ User Management:** TUI calls user management functions to modify or query the user list. - **TUI ↔ File Handler:** TUI triggers file operations for loading, saving, and exporting data. - **TUI ↔ RFID Handler:** TUI may display status or prompt for RFID actions. - **RFID Handler ↔ User Management:** When a card is read, the handler updates the user list. - **All Components ↔ Logger:** All modules log actions and errors via the logger. --- ## Error Handling & Logging - All errors (file I/O, serial port, invalid input) are reported to the user via TUI dialogs and logged in the journal file. - The logger ensures traceability for all critical operations. --- ## Extensibility - The modular design allows for easy extension, such as supporting new file formats, additional authentication methods, or a graphical UI. --- For further details, see the [README.md](../README.md) and the code documentation in each header file.