i2c read and write ring buffer
This commit is contained in:
@ -2,18 +2,20 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "ringbuffer.h"
|
||||
|
||||
void _ringBufferIncReader(struct ringBuffer *buf) {
|
||||
buf->reader++;
|
||||
if (buf->reader >= buf->capacity) {
|
||||
buf->reader += buf->blockSize;
|
||||
if (buf->reader >= buf->blocks * buf->blockSize) {
|
||||
buf->reader = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void _ringBufferIncWriter(struct ringBuffer *buf) {
|
||||
buf->writer++;
|
||||
if (buf->writer >= buf->capacity) {
|
||||
buf->writer += buf->blockSize;
|
||||
if (buf->writer >= buf->blocks * buf->blockSize) {
|
||||
buf->writer = 0;
|
||||
}
|
||||
|
||||
@ -26,9 +28,10 @@ void _ringBufferIncWriter(struct ringBuffer *buf) {
|
||||
}
|
||||
}
|
||||
|
||||
void ringBufferCreate(int capacity, struct ringBuffer *out) {
|
||||
out->buffer = malloc(capacity * sizeof(uint8_t));
|
||||
out->capacity = capacity;
|
||||
void ringBufferCreate(int blocks, size_t blockSize, struct ringBuffer *out) {
|
||||
out->buffer = malloc(blocks * blockSize * sizeof(char));
|
||||
out->blocks = blocks;
|
||||
out->blockSize = blockSize;
|
||||
out->reader = 0;
|
||||
out->writer = 0;
|
||||
}
|
||||
@ -37,10 +40,10 @@ void ringBufferDestroy(struct ringBuffer *buf) {
|
||||
free(buf->buffer);
|
||||
}
|
||||
|
||||
int ringBufferRead(struct ringBuffer *buf, uint8_t *out) {
|
||||
int ringBufferRead(struct ringBuffer *buf, char *out) {
|
||||
if (buf->reader != buf->writer) {
|
||||
// we have data to read
|
||||
memcpy(out, &buf->buffer[buf->reader], sizeof(uint8_t));
|
||||
memcpy(out, &buf->buffer[buf->reader], buf->blockSize * sizeof(char));
|
||||
_ringBufferIncReader(buf);
|
||||
return 0;
|
||||
} else {
|
||||
@ -49,7 +52,7 @@ int ringBufferRead(struct ringBuffer *buf, uint8_t *out) {
|
||||
}
|
||||
}
|
||||
|
||||
void ringBufferWrite(struct ringBuffer *buf, uint8_t *in) {
|
||||
memcpy(&buf->buffer[buf->writer], in, sizeof(uint8_t));
|
||||
void ringBufferWrite(struct ringBuffer *buf, char *in) {
|
||||
memcpy(&buf->buffer[buf->writer], in, buf->blockSize * sizeof(char));
|
||||
_ringBufferIncWriter(buf);
|
||||
}
|
||||
|
Reference in New Issue
Block a user