drv_ringbuffer.h 946 B

123456789101112131415161718192021222324252627282930313233343536
  1. #ifndef _DRV_RINGBUFFER_H
  2. #define _DRV_RINGBUFFER_H
  3. #include <stdint.h>
  4. #include <stdlib.h>
  5. #include "rtthread.h"
  6. typedef enum {
  7. RINGBUFFER_OK,
  8. RINGBUFFER_EMPTY,
  9. RINGBUFFER_FULL
  10. } ringbuffer_state_t;
  11. typedef struct {
  12. rt_uint8_t *buffer;
  13. rt_uint32_t buffer_size;
  14. volatile rt_uint16_t write_mirror : 1;
  15. volatile rt_uint16_t write_index : 15;
  16. volatile rt_uint16_t read_mirror : 1;
  17. volatile rt_uint16_t read_index : 15;
  18. } ringbuffer_t;
  19. #ifdef RT_USING_HEAP
  20. ringbuffer_t *ringbuffer_create (rt_uint32_t size);
  21. void ringbuffer_release (ringbuffer_t *rb);
  22. #endif
  23. ringbuffer_t *ringbuffer_init (ringbuffer_t *rb, rt_uint8_t *buffer, rt_uint32_t size);
  24. ringbuffer_state_t ringbuffer_get_state (ringbuffer_t *rb);
  25. rt_uint16_t ringbuffer_data_len (ringbuffer_t *rb);
  26. rt_uint8_t ringbuffer_getchar (ringbuffer_t *rb, rt_uint8_t *ch);
  27. rt_uint8_t ringbuffer_putchar (ringbuffer_t *rb, rt_uint8_t ch);
  28. #endif