wait_queue.h 787 B

123456789101112131415161718192021222324252627
  1. #pragma once
  2. #include "os/os_types.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. }wait_queue_t;
  12. #define KEY_FLAGS_IDLE 0
  13. #define KEY_FLAGS_WAITING 1
  14. #define KEY_FLAGS_PENDING 2
  15. #define ACKED_KEY ((u16)0xFFFF)
  16. void wait_queue_init(wait_queue_t *queue, int max_size);
  17. s32 wait_queue_add(wait_queue_t *queue, u16 key);
  18. s32 wait_queue_add_buffer(wait_queue_t *queue, u16 key, u8*buffer, u16 len);;
  19. bool wait_queue_key_acked(wait_queue_t *queue, u16 key);
  20. bool wait_queue_key_acked_response(wait_queue_t *queue, u16 key, u8 *data, u16 len);
  21. s32 wait_queue_wait_key(wait_queue_t *queue, s32 index, s32 timeout);
  22. void wait_queue_delete_key(wait_queue_t *queue, s32 index);