queue.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #ifndef APP_QUEUE_H__
  2. #define APP_QUEUE_H__
  3. #include "type.h"
  4. #define QUEUE_MAX 8
  5. #define QUEUE_TYPE_BLE 1
  6. #define QUEUE_TYPE_SPI 2
  7. typedef struct {
  8. int length;
  9. uint8_t cmd[MAX_BUF];
  10. }queue_element_t;
  11. typedef struct {
  12. queue_element_t data[QUEUE_MAX];
  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, uint8_t* item, int length);
  21. int queue_out(queue_list_t* queue, uint8_t* item);
  22. int queue_size(queue_list_t* queue);
  23. #define QUEUE_MSG_PROCESS(QUEUE,FUNC) \
  24. do { \
  25. uint8_t out[MAX_BUF]; \
  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 /* APP_QUEUE_H__ */