wait_queue.h 806 B

12345678910111213141516171819202122232425262728
  1. #pragma once
  2. #include "libs/os.h"
  3. typedef struct {
  4. u16 key;
  5. u16 data_len;
  6. u8 *resp_data;
  7. }response_t;
  8. typedef struct {
  9. response_t *keys;
  10. u16 max_key_count;
  11. QueueHandle_t qlock;
  12. }wait_queue_t;
  13. #define KEY_FLAGS_IDLE 0
  14. #define KEY_FLAGS_WAITING 1
  15. #define KEY_FLAGS_PENDING 2
  16. #define ACKED_KEY ((u16)0xFFFF)
  17. void wait_queue_init(wait_queue_t *queue, int max_size);
  18. s32 wait_queue_add(wait_queue_t *queue, u16 key);
  19. s32 wait_queue_add_buffer(wait_queue_t *queue, u16 key, u8*buffer, u16 len);;
  20. bool wait_queue_key_acked(wait_queue_t *queue, u16 key);
  21. bool wait_queue_key_acked_response(wait_queue_t *queue, u16 key, u8 *data, u16 len);
  22. s32 wait_queue_wait_key(wait_queue_t *queue, s32 index, s32 timeout);
  23. void wait_queue_delete_key(wait_queue_t *queue, s32 index);