1 /* USER CODE BEGIN Header */
2 /**
3   ******************************************************************************
4   * @file    fifo.h
5   * @author  VMA RF Application Team
6   * @version V1.0.0
7   * @date    July-2015
8   * @brief
9   ******************************************************************************
10   * @attention
11   *
12   * Copyright (c) 2024 STMicroelectronics.
13   * All rights reserved.
14   *
15   * This software is licensed under terms that can be found in the LICENSE file
16   * in the root directory of this software component.
17   * If no LICENSE file comes with this software, it is provided AS-IS.
18   *
19   ******************************************************************************
20   */
21 /* USER CODE END Header */
22 
23 #include <stdint.h>
24 #ifndef __FIFO_H__
25 #define __FIFO_H__
26 
27 typedef struct circular_fifo_s {
28   uint16_t tail;
29   uint16_t head;
30   uint16_t max_size;
31   uint8_t *buffer;
32   uint8_t alignment;
33 } circular_fifo_t;
34 
35 void fifo_init(circular_fifo_t *fifo, uint16_t max_size, uint8_t  *buffer, uint8_t alignment);
36 uint16_t fifo_size(circular_fifo_t *fifo);
37 uint8_t fifo_put(circular_fifo_t *fifo, uint16_t size, const uint8_t  *buffer);
38 uint8_t fifo_put_var_len_item(circular_fifo_t *fifo, uint16_t size1, const uint8_t  *buffer1, uint16_t size2, const uint8_t  *buffer2);
39 uint8_t fifo_get(circular_fifo_t *fifo, uint16_t size, uint8_t  *buffer);
40 uint8_t fifo_discard(circular_fifo_t *fifo, uint16_t size);
41 uint8_t fifo_get_ptr(circular_fifo_t *fifo, uint16_t size, uint8_t **ptr);
42 uint8_t fifo_get_var_len_item(circular_fifo_t *fifo, uint16_t *size, uint8_t  *buffer);
43 uint8_t fifo_get_ptr_var_len_item(circular_fifo_t *fifo, uint16_t *size, uint8_t  **ptr);
44 uint8_t fifo_discard_var_len_item(circular_fifo_t *fifo);
45 void fifo_flush(circular_fifo_t *fifo);
46 void fifo_roll_back(circular_fifo_t *fifo, uint16_t size);
47 #endif /* __FIFO_H__ */
48