From f17f48b75eade184a55dafc56704f82e8bf746d3 Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Thu, 22 Dec 2016 19:00:53 +0100 Subject: [PATCH] Added SSS7_TX_FINALIZE state Fixes #2 --- software/linux/test.c | 1 + software/sss7core/sss7.c | 7 ++- software/sss7core/sss7.h | 2 + software/testutils/buffer_test | Bin 0 -> 13312 bytes software/testutils/buffer_test.c | 81 +++++++++++++++++++++++++++++++ 5 files changed, 90 insertions(+), 1 deletion(-) create mode 100755 software/testutils/buffer_test create mode 100644 software/testutils/buffer_test.c diff --git a/software/linux/test.c b/software/linux/test.c index cf97351..688306f 100644 --- a/software/linux/test.c +++ b/software/linux/test.c @@ -25,6 +25,7 @@ int main(int argc, char const *argv[]) { while(!libsss7_can_send()); libsss7_send(msg); while(!libsss7_can_send()); + printf("Send done\n"); if(libsss7_send_failed()) { printf("Send failed\n"); } diff --git a/software/sss7core/sss7.c b/software/sss7core/sss7.c index dd652a6..6719347 100644 --- a/software/sss7core/sss7.c +++ b/software/sss7core/sss7.c @@ -240,9 +240,14 @@ void sss7_process_tx(void) { // Send the crc precalculated by sss_send sss7_send_byte(sss7_tx_crc); // Reset the state to idle - sss7_state = SSS7_IDLE; + sss7_state = SSS7_TX_FINALIZE; break; + case SSS7_TX_FINALIZE: + //Not much to do here + sss7_state = SSS7_IDLE; + break; + default: // Controlflow should never ever end up here. // Calling the tx handler while being in rx state is messed up. diff --git a/software/sss7core/sss7.h b/software/sss7core/sss7.h index e9ee99e..8d2c04a 100644 --- a/software/sss7core/sss7.h +++ b/software/sss7core/sss7.h @@ -27,6 +27,8 @@ enum sss7State { SSS7_TX_CRC, // Sending the last paylaod by has started, // waiting for the it to complete, to send crc byte + SSS7_TX_FINALIZE, // Wait until the crc byte has been read back + SSS7_RX_HEADER, // First header byte has been reived, waiting for the second one SSS7_RX_PAYLOAD, // Receiving payload bytes diff --git a/software/testutils/buffer_test b/software/testutils/buffer_test new file mode 100755 index 0000000000000000000000000000000000000000..89f4deab789a2fbaf8bc786264892b69f61a9706 GIT binary patch literal 13312 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 literal 0 HcmV?d00001 diff --git a/software/testutils/buffer_test.c b/software/testutils/buffer_test.c new file mode 100644 index 0000000..bd790bb --- /dev/null +++ b/software/testutils/buffer_test.c @@ -0,0 +1,81 @@ +#include +#include +#include +#include +#include + +#define buffer_elements 8 +#define buffer_size (buffer_elements + 1) + +int buffer[buffer_size]; +volatile uint8_t read_pos; +volatile uint8_t write_pos; + + +void *producer_function(void* arg) { + uint8_t foo = 1; + uint8_t next_pos = 0; + while(1) { + + + + + next_pos = (write_pos + 1) % buffer_size; + if(next_pos != read_pos) { + buffer[write_pos] = foo; + write_pos = next_pos; + buffer[write_pos] = -1; + printf("Produced %d\n", foo); + foo = (foo + 1) % 255; + } + + usleep((rand() % 500) * 100); + } +} + +void *consumer_function(void* arg) { + int bar = 0; + + while(1) { + + if(read_pos != write_pos) { + if(buffer[read_pos] != (bar + 1) % 255) { + printf("Error occured\n"); + printf("bar: %d\n", bar); + printf("foo: %d\n", buffer[read_pos]); + return 0; + } + + bar = buffer[read_pos]; + printf("Consumed: %d (%d)\n", buffer[read_pos], (write_pos - read_pos + buffer_size) % buffer_size); + read_pos = (read_pos + 1) % buffer_size; + } + + usleep((rand() % 500) * 100); + } +} + + +int main() { + pthread_t producer, consumer; + int ret; + + read_pos = 0; + write_pos = 0; + + ret = pthread_create(&producer, NULL, producer_function, NULL); + if(ret) { + fprintf(stderr,"Error - pthread_create() return code: %d\n", ret); + exit(-1); + } + + ret = pthread_create(&consumer, NULL, consumer_function, NULL); + if(ret) { + fprintf(stderr,"Error - pthread_create() return code: %d\n",ret); + exit(-1); + } + + pthread_join( consumer, NULL); + + return 0; +}