#include "hyp_ringbuffer.h" void RingBuffer_Init(HYP_RINGBUFFER_Handle ringBuffer) { if (ringBuffer == 0) { return; } ringBuffer->head = 0U; ringBuffer->tail = 0U; } uint16_t RingBuffer_Write(HYP_RINGBUFFER_Handle ringBuffer, const uint8_t *data, uint16_t len) { uint16_t i; if ((ringBuffer == 0) || (data == 0)) { return 0U; } for (i = 0U; i < len; i++) { uint16_t next = (uint16_t)((ringBuffer->head + 1U) % HYP_RINGBUFFER_SIZE); if (next == ringBuffer->tail) { break; } ringBuffer->buffer[ringBuffer->head] = data[i]; ringBuffer->head = next; } return i; } uint16_t RingBuffer_Read(HYP_RINGBUFFER_Handle ringBuffer, uint8_t *data, uint16_t len) { uint16_t i; if ((ringBuffer == 0) || (data == 0)) { return 0U; } for (i = 0U; i < len; i++) { if (ringBuffer->tail == ringBuffer->head) { break; } data[i] = ringBuffer->buffer[ringBuffer->tail]; ringBuffer->tail = (uint16_t)((ringBuffer->tail + 1U) % HYP_RINGBUFFER_SIZE); } return i; } uint16_t RingBuffer_Available(HYP_RINGBUFFER_Handle ringBuffer) { if (ringBuffer == 0) { return 0U; } return (uint16_t)((ringBuffer->head + HYP_RINGBUFFER_SIZE - ringBuffer->tail) % HYP_RINGBUFFER_SIZE); }