queue.c 772 B

12345678910111213141516171819202122232425262728293031323334
  1. #include "os/queue.h"
  2. #include "libs/circle_buffer.h"
  3. typedef struct {
  4. c_buffer_t buffer;
  5. int16_t esize;
  6. }queue_t;
  7. void *queue_create(u16 queue_count, u16 esize){
  8. queue_t *queue = (queue_t *)os_alloc(queue_count * esize + sizeof(queue_t));
  9. if (queue == NULL) {
  10. return NULL;
  11. }
  12. queue->esize = esize;
  13. circle_buffer_init(&queue->buffer, (u8 *)(queue + 1), queue_count * esize);
  14. return queue;
  15. }
  16. bool queue_put(co_queue_t vqueue, void *data){
  17. queue_t *queue = (queue_t *)vqueue;
  18. if (circle_put_data(&queue->buffer, data, queue->esize) > 0) {
  19. return true;
  20. }
  21. return false;
  22. }
  23. bool queue_get(co_queue_t vqueue, void *data) {
  24. queue_t *queue = (queue_t *)vqueue;
  25. if (circle_get_data(&queue->buffer, data, queue->esize) > 0) {
  26. return true;
  27. }
  28. return false;
  29. }