From d5e7b8b149a2bcdbb4b28241b3231d200d86caa1 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Wed, 17 Jun 2020 09:32:36 +0200 Subject: [PATCH] add .gitignore, first changes of ringbuffer --- .gitignore | 7 +++++++ ringbuffer.c | 58 ++++++++++++++++++++++++---------------------------- ringbuffer.h | 17 +++++++++++++-- 3 files changed, 49 insertions(+), 33 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ec1e16b --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +*.o +*.pyc +*~ +.*~ +.bash_history +mqttauditing + diff --git a/ringbuffer.c b/ringbuffer.c index 0d8c81d..ac60f1a 100644 --- a/ringbuffer.c +++ b/ringbuffer.c @@ -1,51 +1,47 @@ #include #include - -#define BUFFER_SIZE 256 - -uint32_t buffer[BUFFER_SIZE+5]; - -uint32_t bufferReadIdx = 0; -uint32_t bufferWriteIdx = 0; - -pthread_mutex_t eventMutex = PTHREAD_MUTEX_INITIALIZER; -pthread_cond_t eventSignal = PTHREAD_COND_INITIALIZER; +#include "ringbuffer.h" - +void ringbufferInit(t_ringbuffer *handle) { + handle->bufferReadIdx = 0; + handle->bufferWriteIdx = 0; + pthread_mutex_init(&(handle->eventMutex), NULL); + pthread_cond_init(&(handle->eventSignal), NULL); +} -void ringbufferPut(uint32_t f) { - if (bufferWriteIdx == (BUFFER_SIZE - 1)) { - while (bufferReadIdx == BUFFER_SIZE); +void ringbufferPut(t_ringbuffer *handle, void *f) { + if (handle->bufferWriteIdx == (BUFFER_SIZE - 1)) { + while (handle->bufferReadIdx == BUFFER_SIZE); } else { - while (bufferReadIdx == (bufferWriteIdx + 1)); + while (handle->bufferReadIdx == (handle->bufferWriteIdx + 1)); } - buffer[bufferWriteIdx] = f; - bufferWriteIdx++; + handle->buffer[handle->bufferWriteIdx] = f; + handle->bufferWriteIdx++; - if (bufferWriteIdx > BUFFER_SIZE) { - bufferWriteIdx = 0; + if (handle->bufferWriteIdx > BUFFER_SIZE) { + handle->bufferWriteIdx = 0; } - pthread_mutex_lock(&eventMutex); - pthread_cond_signal(&eventSignal); - pthread_mutex_unlock(&eventMutex); + pthread_mutex_lock(&(handle->eventMutex)); + pthread_cond_signal(&(handle->eventSignal)); + pthread_mutex_unlock(&(handle->eventMutex)); } -uint32_t ringbufferGet() { - if (bufferReadIdx == bufferWriteIdx) { - pthread_mutex_lock(&eventMutex); - pthread_cond_wait(&eventSignal, &eventMutex); - pthread_mutex_unlock(&eventMutex); +void *ringbufferGet(t_ringbuffer *handle) { + if (handle->bufferReadIdx == handle->bufferWriteIdx) { + pthread_mutex_lock(&(handle->eventMutex)); + pthread_cond_wait(&(handle->eventSignal), &(handle->eventMutex)); + pthread_mutex_unlock(&(handle->eventMutex)); } - double res = buffer[bufferReadIdx]; - bufferReadIdx++; - if (bufferReadIdx > BUFFER_SIZE) { - bufferReadIdx = 0; + void *res = handle->buffer[handle->bufferReadIdx]; + handle->bufferReadIdx++; + if (handle->bufferReadIdx > BUFFER_SIZE) { + handle->bufferReadIdx = 0; } return res; } diff --git a/ringbuffer.h b/ringbuffer.h index ce5c90c..98e0991 100644 --- a/ringbuffer.h +++ b/ringbuffer.h @@ -2,8 +2,21 @@ #define _RINGBUFFER_H_ #include +#include -void ringbufferPut(uint32_t f); -uint32_t ringbufferGet(); + +#define BUFFER_SIZE 256 + +typedef struct { + void* buffer[BUFFER_SIZE+5]; + uint32_t bufferReadIdx; + uint32_t bufferWriteIdx; + pthread_mutex_t eventMutex; + pthread_cond_t eventSignal; +} t_ringbuffer; + +void ringbufferInit(t_ringbuffer *handle); +void ringbufferPut(t_ringbuffer *handle, void *f); +void *ringbufferGet(t_ringbuffer *handle); #endif // _RINGBUFFER_H_ \ No newline at end of file