From 0a5f176582c60b0b1845d97012429a5e06b45f62 Mon Sep 17 00:00:00 2001 From: "DLABAL, Eduard" Date: Tue, 13 May 2025 10:28:37 +0200 Subject: [PATCH] Refactor RFID handler and user structures; add UART configuration and packet parsing functions; create logger header and source files --- include/logger.h | 0 include/rfid_handler.h | 10 ++++- include/users.h | 4 +- src/logger.c | 0 src/main.c | 2 +- src/rfid_handler.c | 98 ++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 include/logger.h create mode 100644 src/logger.c diff --git a/include/logger.h b/include/logger.h new file mode 100644 index 0000000..e69de29 diff --git a/include/rfid_handler.h b/include/rfid_handler.h index 02c9e77..3a0e9d2 100644 --- a/include/rfid_handler.h +++ b/include/rfid_handler.h @@ -1,7 +1,15 @@ #ifndef __RFID_HANDLER_H__ #define __RFIT_HANDLER_H__ -#endif +#include "main.h" // UART handler thread void *uartListener(void *arg); + +void parseIncommingPacket(BYTE * _packet); + +void sendPacketToDevice(BYTE * _packet); + +#endif + + diff --git a/include/users.h b/include/users.h index 56f76b9..4ba26b6 100644 --- a/include/users.h +++ b/include/users.h @@ -12,8 +12,8 @@ typedef struct person { uint16_t uuid; - char *name; - char *surname; + BYTE *name; + BYTE *surname; uint32_t department; time_t last_time_event; diff --git a/src/logger.c b/src/logger.c new file mode 100644 index 0000000..e69de29 diff --git a/src/main.c b/src/main.c index f0faee3..9e102f4 100644 --- a/src/main.c +++ b/src/main.c @@ -8,11 +8,11 @@ #include #include +#include "main.h" #include "users.h" #include "tui.h" #include "rfid_handler.h" #include "file_operations.h" -#include "main.h" int main(int argc, char const **argv) { diff --git a/src/rfid_handler.c b/src/rfid_handler.c index 62eea72..f2ab590 100644 --- a/src/rfid_handler.c +++ b/src/rfid_handler.c @@ -21,6 +21,104 @@ void *uartListener(void *arg) return NULL; } + struct termios options; + tcgetattr(uart, &options); + + cfsetispeed(&options, B9600); + cfsetospeed(&options, B9600); + options.c_cflag &= ~PARENB; + options.c_cflag &= ~CSTOPB; + options.c_cflag &= ~CSIZE; + options.c_cflag |= CS8; + options.c_cflag |= CREAD | CLOCAL; + + options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); + options.c_iflag &= ~(IXON | IXOFF | IXANY); + options.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL); + options.c_oflag &= ~OPOST; + + options.c_cc[VMIN] = 1; + options.c_cc[VTIME] = 0; + + if (tcsetattr(uart, TCSANOW, &options) != 0) + { + perror("tcsetattr"); + exit(EXIT_FAILURE); + } + + + enum + { + SYNC0, + SYNC1, + READING_PACKET + } state = SYNC0; + uint8_t packet[6]; + int packet_index = 0; + + while (1) + { + uint8_t byte; + ssize_t n = read(uart, &byte, 1); + if (n == -1) + { + perror("read"); + exit(EXIT_FAILURE); + } + + switch (state) + { + case SYNC0: + if (byte == 0x55) + { + packet[0] = byte; + packet_index = 1; + state = SYNC1; + } + break; + + case SYNC1: + if (byte == 0xFF) + { + packet[1] = byte; + packet_index = 2; + state = READING_PACKET; + } + else + { + state = SYNC0; + } + break; + + case READING_PACKET: + packet[packet_index++] = byte; + if (packet_index == 6) + { + uint8_t crc = 0; + for (int i = 0; i < 5; i++) + { + crc ^= packet[i]; + } + + if (crc == packet[5]) + { + + } + else + { + //fprintf(stderr, "Chyba CRC!\n"); + } + state = SYNC0; + } + break; + } + } + close(uart); return NULL; +} + +void parseIncommingPacket(BYTE * _packet) +{ + } \ No newline at end of file