40 lines
903 B
C++
40 lines
903 B
C++
#ifndef RECORDER_BUFFER_H
|
|
#define RECORDER_BUFFER_H
|
|
|
|
#ifdef __cplusplus
|
|
#include <cstdint>
|
|
extern "C" {
|
|
#else
|
|
#include <stdint.h>
|
|
#endif
|
|
|
|
// размер буфера, должен быть 2^x
|
|
#define CHANNEL_BUFFER_SIZE 1024
|
|
#define CHANNEL_BUFFER_SIZE_MASK (CHANNEL_BUFFER_SIZE - 1)
|
|
|
|
typedef struct {
|
|
uint64_t timepoint;
|
|
uint32_t duration;
|
|
} BufferItem;
|
|
|
|
// Структура кольцевого буфера
|
|
typedef struct {
|
|
volatile uint32_t head;
|
|
volatile uint32_t tail;
|
|
volatile uint32_t overruns;
|
|
BufferItem buffer[CHANNEL_BUFFER_SIZE];
|
|
} ChannelBuffer_t;
|
|
|
|
void ChannelBuffer_reset(ChannelBuffer_t *buffer);
|
|
void ChannelBuffer_push(ChannelBuffer_t *buffer, BufferItem item);
|
|
int ChannelBuffer_pop(ChannelBuffer_t *buffer, BufferItem* dest);
|
|
|
|
extern ChannelBuffer_t buffer_ch1;
|
|
extern ChannelBuffer_t buffer_ch2;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif //RECORDER_BUFFER_H
|