luat_rtos_win32_queue.c 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include "luat_base.h"
  2. #include "luat_rtos.h"
  3. #include "FreeRTOS.h"
  4. #include "task.h"
  5. #include "queue.h"
  6. #include "semaphore.h"
  7. LUAT_RET luat_queue_create(luat_rtos_queue_t* queue, size_t msgcount, size_t msgsize) {
  8. QueueHandle_t q = xQueueCreate(msgcount, msgsize);
  9. if (q == NULL) {
  10. return -1;
  11. }
  12. queue->userdata = q;
  13. return LUAT_ERR_OK;
  14. }
  15. LUAT_RET luat_queue_send(luat_rtos_queue_t* queue, void* msg, size_t msg_size, size_t timeout) {
  16. if (queue->userdata == NULL)
  17. return LUAT_ERR_FAIL;
  18. if (xQueueSend(queue->userdata, msg, timeout) == pdTRUE) {
  19. return LUAT_ERR_OK;
  20. }
  21. return LUAT_ERR_FAIL;
  22. }
  23. LUAT_RET luat_queue_recv(luat_rtos_queue_t* queue, void* msg, size_t msg_size, size_t timeout) {
  24. if (queue->userdata == NULL)
  25. return LUAT_ERR_FAIL;
  26. if (xQueueReceive(queue->userdata, msg, timeout) == pdTRUE) {
  27. return LUAT_ERR_OK;
  28. }
  29. return LUAT_ERR_FAIL;
  30. }
  31. LUAT_RET luat_queue_reset(luat_rtos_queue_t* queue) {
  32. if (queue->userdata == NULL)
  33. return LUAT_ERR_FAIL;
  34. if (pdTRUE == xQueueReset((QueueHandle_t)queue->userdata)) {
  35. return LUAT_ERR_OK;
  36. }
  37. return LUAT_ERR_FAIL;
  38. }
  39. LUAT_RET luat_queue_delete(luat_rtos_queue_t* queue) {
  40. if (queue->userdata) {
  41. vQueueDelete((QueueHandle_t)queue->userdata);
  42. }
  43. queue->userdata = NULL;
  44. return LUAT_ERR_OK;
  45. }