add .gitignore, first changes of ringbuffer
This commit is contained in:
parent
9552a54c3d
commit
d5e7b8b149
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
*.o
|
||||
*.pyc
|
||||
*~
|
||||
.*~
|
||||
.bash_history
|
||||
mqttauditing
|
||||
|
58
ringbuffer.c
58
ringbuffer.c
@ -1,51 +1,47 @@
|
||||
#include <stdint.h>
|
||||
#include <pthread.h>
|
||||
|
||||
|
||||
#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;
|
||||
}
|
||||
|
17
ringbuffer.h
17
ringbuffer.h
@ -2,8 +2,21 @@
|
||||
#define _RINGBUFFER_H_
|
||||
|
||||
#include <stdint.h>
|
||||
#include <pthread.h>
|
||||
|
||||
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_
|
Loading…
x
Reference in New Issue
Block a user