ringbuffer.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /*
  2. * Copyright (C) 2021 Alibaba Group Holding Limited
  3. * Author: zhuxinran <fuqian.zxr@alibaba-inc.com>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License version 2 as
  7. * published by the Free Software Foundation.
  8. */
  9. /*
  10. * Copyright (C) 2017-2020 Alibaba Group Holding Limited
  11. */
  12. #ifndef _DRV_RINGBUFFER_H_
  13. #define _DRV_RINGBUFFER_H_
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17. #include "stdint.h"
  18. #include <stdbool.h>
  19. typedef struct ringbuffer {
  20. uint8_t *buffer;
  21. uint32_t size;
  22. uint32_t write;
  23. uint32_t read;
  24. uint32_t data_len;
  25. } ringbuffer_t;
  26. void ringbuffer_reset(ringbuffer_t *fifo);
  27. uint32_t ringbuffer_len(ringbuffer_t *fifo);
  28. uint32_t ringbuffer_avail(ringbuffer_t *fifo);
  29. bool ringbuffer_is_empty(ringbuffer_t *fifo);
  30. bool ringbuffer_is_full(ringbuffer_t *fifo);
  31. /*write to ringbuffer*/
  32. uint32_t ringbuffer_in(ringbuffer_t *fifo, const void *in, uint32_t len);
  33. /*read to ringbuffer*/
  34. uint32_t ringbuffer_out(ringbuffer_t *fifo, void *out, uint32_t len);
  35. #ifdef __cplusplus
  36. }
  37. #endif
  38. #endif /* _DRV_RINGBUFFER_H_ */