MCUXpresso_MIMXRT1052xxxxB/middleware/maestro/inc/ringbuffer.h
Yilin Sun 6baf4427ce
Updated to v2.15.000
Signed-off-by: Yilin Sun <imi415@imi.moe>
2024-03-18 23:15:10 +08:00

94 lines
2.6 KiB
C

/*
* Copyright 2018-2022 NXP.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef _RINGBUFFER_H_
#define _RINGBUFFER_H_
/*!
* @file ringbuffer.h
* @brief Implements a data ringbuffer.
*/
#include <stdint.h>
/**
* @brief Ringbuffer structure
*
*/
struct ringbuf
{
uint8_t *buf; /*!< @brief buffer pointer */
uint32_t head; /*!< @brief buffer head */
uint32_t tail; /*!< @brief buffer tail */
uint32_t size; /*!< @brief buffer size */
uint32_t occ; /*!< @brief buffer occupancy*/
};
typedef struct ringbuf ringbuf_t;
/*!
* @brief Create and initialize a ring buffer structure
*
* @param size Buffer size to be malloc'd
* @returns Initialized and allocated pointer to ring buffer object
*/
ringbuf_t *ringbuf_create(uint32_t size);
/*!
* @brief Destroy and free ring buffer structure
*
* @param rb Pointer to ring buffer object created with ringbuf_create
*/
void ringbuf_destroy(ringbuf_t *rb);
/*!
* @brief Empty ring buffer structure
*
* @param rb Pointer to ring buffer object created with ringbuf_create
*/
void ringbuf_clear(ringbuf_t *rb);
/*!
* @brief Return the number of bytes stored in the ringbuffer
*
* @param rb Pointer to ring buffer object created with ringbuf_create
* @returns Number of bytes of data currently occupying space in the buffer
*/
uint32_t ringbuf_get_occupancy(ringbuf_t *rb);
/*!
* @brief Write data to ring buffer
*
* @param rb Pointer to ring buffer object created with ringbuf_create
* @param data Input buffer of data to write to ring buffer
* @param size Number of bytes to write to ring buffer, from 'data'
* @returns Number of bytes successfully written to buffer
*/
uint32_t ringbuf_write(ringbuf_t *rb, uint8_t *data, uint32_t size);
/*!
* @brief Read data from ring buffer
*
* @param rb Pointer to ring buffer object created with ringbuf_create
* @param data Output buffer of data to write from ring buffer.
* Can be NULL, in which case data is discarded.
* @param size Number of bytes to read from ring buffer, to store in 'data'
* @returns Number of bytes successfully read to buffer or discarded
*/
uint32_t ringbuf_read(ringbuf_t *rb, uint8_t *data, uint32_t size);
/*!
* @brief Peak data from ring buffer without removing it
*
* @param rb Pointer to ring buffer object created with ringbuf_create
* @param data Output buffer of data to write from ring buffer.
* @param size Number of bytes to read from ring buffer, to store in 'data'
* @returns Number of bytes successfully read to buffer
*/
uint32_t ringbuf_peek(ringbuf_t *rb, uint8_t *data, uint32_t size);
#endif