chry_ringbuffer.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /*
  2. * Copyright (c) 2022, Egahp
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #ifndef CHRY_RINGBUFFER_H
  7. #define CHRY_RINGBUFFER_H
  8. #ifdef __cplusplus
  9. extern "C" {
  10. #endif
  11. #include <stdint.h>
  12. #include <stdbool.h>
  13. typedef struct {
  14. uint32_t in; /*!< Define the write pointer. */
  15. uint32_t out; /*!< Define the read pointer. */
  16. uint32_t mask; /*!< Define the write and read pointer mask. */
  17. void *pool; /*!< Define the memory pointer. */
  18. } chry_ringbuffer_t;
  19. extern int chry_ringbuffer_init(chry_ringbuffer_t *rb, void *pool, uint32_t size);
  20. extern void chry_ringbuffer_reset(chry_ringbuffer_t *rb);
  21. extern void chry_ringbuffer_reset_read(chry_ringbuffer_t *rb);
  22. extern uint32_t chry_ringbuffer_get_size(chry_ringbuffer_t *rb);
  23. extern uint32_t chry_ringbuffer_get_used(chry_ringbuffer_t *rb);
  24. extern uint32_t chry_ringbuffer_get_free(chry_ringbuffer_t *rb);
  25. extern bool chry_ringbuffer_check_full(chry_ringbuffer_t *rb);
  26. extern bool chry_ringbuffer_check_empty(chry_ringbuffer_t *rb);
  27. extern bool chry_ringbuffer_write_byte(chry_ringbuffer_t *rb, uint8_t byte);
  28. extern bool chry_ringbuffer_overwrite_byte(chry_ringbuffer_t *rb, uint8_t byte);
  29. extern bool chry_ringbuffer_peek_byte(chry_ringbuffer_t *rb, uint8_t *byte);
  30. extern bool chry_ringbuffer_read_byte(chry_ringbuffer_t *rb, uint8_t *byte);
  31. extern bool chry_ringbuffer_drop_byte(chry_ringbuffer_t *rb);
  32. extern uint32_t chry_ringbuffer_write(chry_ringbuffer_t *rb, void *data, uint32_t size);
  33. extern uint32_t chry_ringbuffer_overwrite(chry_ringbuffer_t *rb, void *data, uint32_t size);
  34. extern uint32_t chry_ringbuffer_peek(chry_ringbuffer_t *rb, void *data, uint32_t size);
  35. extern uint32_t chry_ringbuffer_read(chry_ringbuffer_t *rb, void *data, uint32_t size);
  36. extern uint32_t chry_ringbuffer_drop(chry_ringbuffer_t *rb, uint32_t size);
  37. extern void *chry_ringbuffer_linear_write_setup(chry_ringbuffer_t *rb, uint32_t *size);
  38. extern void *chry_ringbuffer_linear_read_setup(chry_ringbuffer_t *rb, uint32_t *size);
  39. extern uint32_t chry_ringbuffer_linear_write_done(chry_ringbuffer_t *rb, uint32_t size);
  40. extern uint32_t chry_ringbuffer_linear_read_done(chry_ringbuffer_t *rb, uint32_t size);
  41. #ifdef __cplusplus
  42. }
  43. #endif
  44. #endif