36 lines
1.1 KiB
C++
36 lines
1.1 KiB
C++
#include "recorder_buffer.h"
|
|
|
|
ChannelBuffer_t buffer_ch1;
|
|
ChannelBuffer_t buffer_ch2;
|
|
|
|
// Функция инициализации буфера
|
|
void ChannelBuffer_reset(ChannelBuffer_t *buffer) {
|
|
buffer->head = 0;
|
|
buffer->tail = 0;
|
|
buffer->overruns = 0;
|
|
}
|
|
|
|
// Функция добавления элемента в буфер
|
|
void ChannelBuffer_push(ChannelBuffer_t *buffer, const BufferItem_t* item) {
|
|
if (!item) { return; }
|
|
// Проверка на переполнение буфера
|
|
if (((buffer->tail + 1) & CHANNEL_BUFFER_SIZE_MASK) == buffer->head) {
|
|
buffer->overruns = buffer->overruns + 1;
|
|
}
|
|
|
|
buffer->buffer[buffer->tail] = *item;
|
|
buffer->tail = (buffer->tail + 1) & CHANNEL_BUFFER_SIZE_MASK;
|
|
}
|
|
|
|
// Функция извлечения элемента из буфера
|
|
int ChannelBuffer_pop(ChannelBuffer_t *buffer, BufferItem_t* dest) {
|
|
const uint32_t h = buffer->head;
|
|
if (h == buffer->tail) {
|
|
return 0;
|
|
}
|
|
|
|
*dest = buffer->buffer[h];
|
|
buffer->head = (h + 1) & CHANNEL_BUFFER_SIZE_MASK;
|
|
return 1;
|
|
}
|