Files
canFD_esp32_glm-oh-my-open-/psram_buffer.h
2026-02-20 17:50:40 +00:00

59 lines
1.2 KiB
C++

// psram_buffer.h - PSRAM-based Ring Buffer for CAN FD Logger
#ifndef PSRAM_BUFFER_H
#define PSRAM_BUFFER_H
#include <Arduino.h>
#include "types.h"
#define PSRAM_CAN_BUFFER_SIZE (512 * 1024)
#define PSRAM_SD_BUFFER_SIZE (16 * 1024)
#define PSRAM_SIGNAL_BUFFER_SIZE (4 * 1024)
#define MAX_PSRAM_CAN_FRAMES (PSRAM_CAN_BUFFER_SIZE / sizeof(CanFrame))
class PSRAMRingBuffer {
public:
PSRAMRingBuffer();
~PSRAMRingBuffer();
bool begin(size_t capacity);
bool push(const CanFrame& frame);
bool pop(CanFrame& frame);
bool peek(CanFrame& frame);
size_t available();
size_t capacity();
size_t freeSpace();
bool isFull();
bool isEmpty();
void clear();
void flush();
CanFrame* getBuffer();
size_t getHead();
size_t getTail();
private:
CanFrame* _buffer;
size_t _capacity;
volatile size_t _head;
volatile size_t _tail;
volatile size_t _count;
SemaphoreHandle_t _mutex;
};
extern PSRAMRingBuffer canFrameBuffer;
bool initPSRAMBuffers();
void deinitPSRAMBuffers();
uint8_t* getSDWriteBuffer();
uint8_t* getSignalBuffer();
size_t getFreePSRAM();
size_t getUsedPSRAM();
size_t getTotalPSRAM();
void printMemoryStatus();
#endif // PSRAM_BUFFER_H