| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- /********************************** (C) COPYRIGHT *******************************
- * File Name : app_drv_fifo.h
- * Author : WCH
- * Version : V1.1
- * Date : 2022/01/19
- * Description :
- *********************************************************************************
- * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
- * Attention: This software (modified or not) and binary are used for
- * microcontroller manufactured by Nanjing Qinheng Microelectronics.
- *******************************************************************************/
- #ifndef __APP_DRV_FIFO_H__
- #define __APP_DRV_FIFO_H__
- #include <stdbool.h>
- #include <stdint.h>
- #ifndef BV
- #define BV(n) (1 << (n))
- #endif
- #ifndef BF
- #define BF(x, b, s) (((x) & (b)) >> (s))
- #endif
- #ifndef MIN
- #define MIN(n, m) (((n) < (m)) ? (n) : (m))
- #endif
- #ifndef MAX
- #define MAX(n, m) (((n) < (m)) ? (m) : (n))
- #endif
- #ifndef ABS
- #define ABS(n) (((n) < 0) ? -(n) : (n))
- #endif
- typedef enum
- {
- APP_DRV_FIFO_RESULT_SUCCESS = 0,
- APP_DRV_FIFO_RESULT_LENGTH_ERROR,
- APP_DRV_FIFO_RESULT_NOT_FOUND,
- APP_DRV_FIFO_RESULT_NOT_MEM,
- APP_DRV_FIFO_RESULT_NULL,
- } app_drv_fifo_result_t;
- #ifndef NULL
- #define NULL 0
- #endif
- /*!
- * FIFO structure
- */
- typedef struct Fifo_s
- {
- uint16_t begin;
- uint16_t end;
- uint8_t *data;
- uint16_t size;
- uint16_t size_mask;
- } app_drv_fifo_t;
- //__inline uint16_t app_drv_fifo_length(app_drv_fifo_t *fifo);
- uint16_t app_drv_fifo_length(app_drv_fifo_t *fifo);
- /*!
- * Initializes the FIFO structure
- *
- * \param [IN] fifo Pointer to the FIFO object
- * \param [IN] buffer Buffer to be used as FIFO
- * \param [IN] size size of the buffer
- */
- app_drv_fifo_result_t
- app_drv_fifo_init(app_drv_fifo_t *fifo, uint8_t *buffer, uint16_t buffer_size);
- /*!
- * Pushes data to the FIFO
- *
- * \param [IN] fifo Pointer to the FIFO object
- * \param [IN] data data to be pushed into the FIFO
- */
- void app_drv_fifo_push(app_drv_fifo_t *fifo, uint8_t data);
- /*!
- * Pops data from the FIFO
- *
- * \param [IN] fifo Pointer to the FIFO object
- * \retval data data popped from the FIFO
- */
- uint8_t app_drv_fifo_pop(app_drv_fifo_t *fifo);
- /*!
- * Flushes the FIFO
- *
- * \param [IN] fifo Pointer to the FIFO object
- */
- void app_drv_fifo_flush(app_drv_fifo_t *fifo);
- /*!
- * Checks if the FIFO is empty
- *
- * \param [IN] fifo Pointer to the FIFO object
- * \retval isEmpty true: FIFO is empty, false FIFO is not empty
- */
- bool app_drv_fifo_is_empty(app_drv_fifo_t *fifo);
- /*!
- * Checks if the FIFO is full
- *
- * \param [IN] fifo Pointer to the FIFO object
- * \retval isFull true: FIFO is full, false FIFO is not full
- */
- bool app_drv_fifo_is_full(app_drv_fifo_t *fifo);
- app_drv_fifo_result_t
- app_drv_fifo_write(app_drv_fifo_t *fifo, uint8_t *data,
- uint16_t *p_write_length);
- app_drv_fifo_result_t
- app_drv_fifo_write_from_same_addr(app_drv_fifo_t *fifo, uint8_t *data,
- uint16_t write_length);
- app_drv_fifo_result_t
- app_drv_fifo_read(app_drv_fifo_t *fifo, uint8_t *data, uint16_t *p_read_length);
- app_drv_fifo_result_t
- app_drv_fifo_read_to_same_addr(app_drv_fifo_t *fifo, uint8_t *data,
- uint16_t read_length);
- #endif // __APP_DRV_FIFO_H__
|