From 20aff761e64ac07fbfb8a76f4bb4346b64294cb7 Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Wed, 30 Nov 2016 22:47:26 +0100 Subject: [PATCH] Added threads and mutexes for eventloop --- software/linux/.gitignore | 1 + software/linux/Makefile | 4 +- software/linux/bin/libsss7.so | Bin 13352 -> 0 bytes software/linux/bin/sss7core/sss7.o | Bin 4384 -> 0 bytes software/linux/bin/test | Bin 13064 -> 0 bytes software/linux/bin/test.o | Bin 1240 -> 0 bytes software/linux/libsss7.c | 87 +++++++++++++++++++++++------ software/linux/libsss7.h | 5 +- software/linux/test.c | 33 ++++++++++- software/sss7core/sss7.c | 6 +- software/sss7core/sss7.h | 12 +++- 11 files changed, 119 insertions(+), 29 deletions(-) create mode 100644 software/linux/.gitignore delete mode 100755 software/linux/bin/libsss7.so delete mode 100644 software/linux/bin/sss7core/sss7.o delete mode 100755 software/linux/bin/test delete mode 100644 software/linux/bin/test.o diff --git a/software/linux/.gitignore b/software/linux/.gitignore new file mode 100644 index 0000000..ba077a4 --- /dev/null +++ b/software/linux/.gitignore @@ -0,0 +1 @@ +bin diff --git a/software/linux/Makefile b/software/linux/Makefile index 200be47..2785700 100644 --- a/software/linux/Makefile +++ b/software/linux/Makefile @@ -5,8 +5,8 @@ OBJDIR = bin CC = clang -CFLAGS = -I ../sss7core/ -Os -Wall -Wstrict-prototypes -fPIC -LDFLAGS = -Wl,--gc-sections +CFLAGS = -I ../sss7core/ -Os -Wall -Wstrict-prototypes -fPIC +LDFLAGS = -pthread -Wl,--gc-sections all: start $(OBJDIR)/libsss7.so $(OBJDIR)/test @echo ":: Done !" diff --git a/software/linux/bin/libsss7.so b/software/linux/bin/libsss7.so deleted file mode 100755 index a314a4ba36b2cade606131e6568ef454b758c5af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13352 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 diff --git a/software/linux/libsss7.c b/software/linux/libsss7.c index ea0fd6a..27252e9 100644 --- a/software/linux/libsss7.c +++ b/software/linux/libsss7.c @@ -6,15 +6,20 @@ #include #include #include +#include + +#include "sss7.h" + uint8_t uart_rx_byte; -uint8_t uart_tx_byte, uart_has_tx_byte; +_Atomic uint8_t uart_tx_byte, uart_has_tx_byte, uart_tx_done; + +pthread_t event_thread; +pthread_mutex_t state_mutex, rx_buffer_mutex; int serial_fd; -int libsss7_start(char *serialport) { - sss7_init(); - +int uart_init(char *serialport) { serial_fd = open(serialport, O_RDWR | O_NOCTTY | O_NDELAY); if (serial_fd == -1) { perror("Error: Unable to open serialport"); @@ -45,18 +50,30 @@ int libsss7_start(char *serialport) { options.c_cc[VMIN] = 0; tcsetattr(serial_fd, TCSAFLUSH, &options); - int res = 0; - while(1) { - res = read(serial_fd, &uart_rx_byte, 1); - if(res == 1) { - sss7_process_rx(); - } + return 0; +} - if(uart_has_tx_byte) { - uart_has_tx_byte = 0; - write(serial_fd, &uart_has_tx_byte, 1); - sss7_process_tx(); - } +void *eventloop(void *arg); + +int libsss7_start(char *serialport) { + int res = 0; + + sss7_init(); + res = uart_init(serialport); + if(res) { + return -1; + } + + uart_has_tx_byte = 0; + uart_tx_done = 0; + + pthread_mutex_init(&state_mutex, NULL); + pthread_mutex_init(&rx_buffer_mutex, NULL); + + res = pthread_create(&event_thread, NULL, eventloop, NULL); + if(res) { + printf("Could not create eventloop thread\n"); + return -1; } return 0; @@ -67,7 +84,9 @@ int libsss7_can_send(void) { } void libsss7_send(uint8_t msg[SSS7_PAYLOAD_SIZE]) { - + pthread_mutex_lock(&state_mutex); + sss7_send(msg); + pthread_mutex_unlock(&state_mutex); } int libsss7_send_failed(void) { @@ -79,10 +98,14 @@ int libsss7_has_received(void) { } void libsss7_get_received(uint8_t msg[SSS7_PAYLOAD_SIZE]) { - return sss7_get_received(msg); + pthread_mutex_lock(&rx_buffer_mutex); + sss7_get_received(msg); + pthread_mutex_unlock(&rx_buffer_mutex); } void libsss7_stop() { + pthread_join(event_thread, NULL); + close(serial_fd); } @@ -94,3 +117,33 @@ void uart_put_byte(uint8_t byte) { uart_has_tx_byte = 1; uart_tx_byte = byte; } + +void *eventloop(void *arg) { + int res = 0; + while(1) { + if(uart_has_tx_byte) { + write(serial_fd, &uart_tx_byte, 1); + printf("Send %x\n", uart_tx_byte); + uart_has_tx_byte = 0; + uart_tx_done = 1; + } + + res = read(serial_fd, &uart_rx_byte, 1); + if(res == 1) { + pthread_mutex_lock(&state_mutex); + pthread_mutex_lock(&rx_buffer_mutex); + sss7_process_rx(); + pthread_mutex_unlock(&rx_buffer_mutex); + pthread_mutex_unlock(&state_mutex); + } + + if(uart_tx_done) { + uart_tx_done = 0; + pthread_mutex_lock(&state_mutex); + sss7_process_tx(); + pthread_mutex_unlock(&state_mutex); + } + } + + return NULL; +} diff --git a/software/linux/libsss7.h b/software/linux/libsss7.h index e26f3ac..e2564b6 100644 --- a/software/linux/libsss7.h +++ b/software/linux/libsss7.h @@ -3,18 +3,17 @@ #include "sss7.h" - int libsss7_start(char *serialport); int libsss7_can_send(void); -void libsss7_send(uint8_t msg[SSS7_PAYLOAD_SIZE]); +void libsss7_send(uint8_t *msg); int libsss7_send_failed(void); int libsss7_has_received(void); -void libsss7_get_received(uint8_t msg[SSS7_PAYLOAD_SIZE]); +void libsss7_get_received(uint8_t *msg); void libsss7_stop(); diff --git a/software/linux/test.c b/software/linux/test.c index 7374678..a0c8185 100644 --- a/software/linux/test.c +++ b/software/linux/test.c @@ -1,10 +1,41 @@ #include #include +#include +#include #include "libsss7.h" int main(int argc, char const *argv[]) { - libsss7_start("/tmp/ttyVA"); + libsss7_start("/dev/ttyUSB0"); + + uint8_t msg[SSS7_PAYLOAD_SIZE]; + memset(msg, 0, SSS7_PAYLOAD_SIZE); + msg[0] = 'H'; + msg[1] = 'e'; + msg[2] = 'l'; + msg[3] = 'l'; + msg[4] = 'o'; + msg[5] = ' '; + msg[6] = 'W'; + msg[7] = 'o'; + msg[8] = 'r'; + msg[9] = 'l'; + msg[10] = 'd'; + + + while(1) { + + while(!libsss7_can_send()); + libsss7_send(msg); + while(!libsss7_can_send()); + if(libsss7_send_failed()) { + printf("Send failed\n"); + } + sleep(2); + } + + + libsss7_send(msg); libsss7_stop(); return 0; diff --git a/software/sss7core/sss7.c b/software/sss7core/sss7.c index 5906a7a..4dc58ca 100644 --- a/software/sss7core/sss7.c +++ b/software/sss7core/sss7.c @@ -2,7 +2,7 @@ #include -volatile enum sss7State sss7_state; +sss7_shared_modfier enum sss7State sss7_state; uint8_t sss7_rx_buffer[SSS7_RX_BUFFER_SIZE][SSS7_PAYLOAD_SIZE]; uint8_t sss7_rx_buffer_write; @@ -12,11 +12,11 @@ uint8_t sss7_rx_pos; uint8_t sss7_tx_buffer[SSS7_PAYLOAD_SIZE]; uint8_t sss7_tx_pos; uint8_t sss7_tx_crc; -volatile uint8_t sss7_tx_failed; +sss7_shared_modfier uint8_t sss7_tx_failed; uint8_t sss7_tx_last_byte; uint8_t sss7_tx_last_ack; -volatile uint8_t sss7_timeout_counter; +sss7_shared_modfier uint8_t sss7_timeout_counter; void sss7_init(void) { diff --git a/software/sss7core/sss7.h b/software/sss7core/sss7.h index e8e0d20..db18204 100644 --- a/software/sss7core/sss7.h +++ b/software/sss7core/sss7.h @@ -5,9 +5,14 @@ extern "C" { #endif - #include +#ifndef sss7_shared_modfier +#define sss7_shared_modfier volatile +#endif + + + enum sss7State { SSS7_IDLE, SSS7_TX_HEADER, @@ -27,11 +32,12 @@ const static uint16_t sss7_timeout_increment = 1; #define SSS7_RX_BUFFER_SIZE 2 -extern volatile enum sss7State sss7_state; -extern volatile uint8_t sss7_tx_failed; +extern sss7_shared_modfier enum sss7State sss7_state; +extern sss7_shared_modfier uint8_t sss7_tx_failed; extern uint8_t sss7_rx_buffer_write; extern uint8_t sss7_rx_buffer_read; + void sss7_process_rx(void); void sss7_process_tx(void); void sss7_process_ticks(uint16_t ticks);