flexPTP-basic/ptp_raw_msg_circbuf.h

25 lines
1.1 KiB
C

#ifndef FLEXPTP_PTP_RAW_MSG_CIRCBUF_H_
#define FLEXPTP_PTP_RAW_MSG_CIRCBUF_H_
#include <stdbool.h>
#include "ptp_types.h"
// "ring" buffer for PTP-messages
#define PTP_MSG_BUF_SIZE (32)
typedef struct {
RawPtpMessage *msgs; // messages
uint8_t totalSize; // total buffer size (element count)
uint8_t lastReceived; // pointer to last received and last processed messages
uint8_t freeBufs; // number of free buffers
int allocPending; // allocation pending (by index)
} PtpCircBuf;
void ptp_circ_buf_init(PtpCircBuf * pCircBuf, RawPtpMessage * pMsgPool, uint8_t n); // initialize circular buffer
RawPtpMessage *ptp_circ_buf_alloc(PtpCircBuf * pCircBuf); // allocate next available circular buffer
int ptp_circ_buf_commit(PtpCircBuf * pCircBuf); // commit last allocation
void ptp_circ_buf_free(PtpCircBuf * pCircBuf); // free oldest allocation
RawPtpMessage *ptp_circ_buf_get(PtpCircBuf * pCircBuf, uint8_t idx); // get message by index
#endif /* FLEXPTP_PTP_RAW_MSG_CIRCBUF_H_ */