sys_queue.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #ifndef __SYS_QUEUE_H__
  2. #define __SYS_QUEUE_H__
  3. #include "stdint.h"
  4. #include "stdbool.h"
  5. #define QUEUE_MAX_DATA_NUM 32 //队列中有几包数据
  6. #define QUEUE_MAX_DATA_LEN 64 //队列中单包数据长度
  7. typedef struct {
  8. int length;
  9. uint8_t cmd[QUEUE_MAX_DATA_LEN];
  10. }queue_element_t;
  11. typedef struct {
  12. queue_element_t data[QUEUE_MAX_DATA_NUM];
  13. int front;
  14. int rear;
  15. int size;
  16. } queue_list_t;
  17. void queue_init(queue_list_t* queue);
  18. bool queue_full(queue_list_t* queue);
  19. bool queue_empty(queue_list_t* queue);
  20. void queue_in(queue_list_t* queue, void* item, int length);
  21. int queue_out(queue_list_t* queue, void* item);
  22. int queue_size(queue_list_t* queue);
  23. #define QUEUE_MSG_PROCESS(QUEUE,FUNC) \
  24. do { \
  25. uint8_t out[QUEUE_MAX_DATA_LEN]; \
  26. if(!queue_empty(QUEUE)) { \
  27. int len = queue_out(QUEUE, out); \
  28. if(len > 0) { \
  29. FUNC(out, len); \
  30. } \
  31. } \
  32. } while (0)
  33. #define QUEUE_MSG_EMPTY(QUEUE) (queue_empty(QUEUE))
  34. #define QUEUE_MSG_NOT_EMPTY(QUEUE) (!queue_empty(QUEUE))
  35. #endif /* __SYS_QUEUE_H__ */