usb_osal_yoc.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. /*
  2. * Copyright (c) 2022, sakumisu
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #include "usb_osal.h"
  7. #include "usb_errno.h"
  8. #include <aos/kernel.h>
  9. #include <csi_core.h>
  10. usb_osal_thread_t usb_osal_thread_create(const char *name, uint32_t stack_size, uint32_t prio, usb_thread_entry_t entry, void *args)
  11. {
  12. aos_task_t task_handle = NULL;
  13. aos_task_new_ext(&task_handle, name, entry, args, stack_size, prio + AOS_DEFAULT_APP_PRI - 4);
  14. return task_handle;
  15. }
  16. void usb_osal_thread_delete(usb_osal_thread_t thread)
  17. {
  18. aos_task_exit(0);
  19. }
  20. usb_osal_sem_t usb_osal_sem_create(uint32_t initial_count)
  21. {
  22. aos_sem_t sem = NULL;
  23. aos_sem_new(&sem, initial_count);
  24. return sem;
  25. }
  26. void usb_osal_sem_delete(usb_osal_sem_t sem)
  27. {
  28. aos_sem_free((aos_sem_t *)&sem);
  29. }
  30. int usb_osal_sem_take(usb_osal_sem_t sem, uint32_t timeout)
  31. {
  32. if (timeout == USB_OSAL_WAITING_FOREVER) {
  33. return aos_sem_wait((aos_sem_t *)&sem, AOS_WAIT_FOREVER);
  34. } else {
  35. return aos_sem_wait((aos_sem_t *)&sem, timeout);
  36. }
  37. }
  38. int usb_osal_sem_give(usb_osal_sem_t sem)
  39. {
  40. aos_sem_signal((aos_sem_t *)&sem);
  41. return 0;
  42. }
  43. void usb_osal_sem_reset(usb_osal_sem_t sem)
  44. {
  45. }
  46. usb_osal_mutex_t usb_osal_mutex_create(void)
  47. {
  48. aos_mutex_t mutex = NULL;
  49. aos_mutex_new(&mutex);
  50. return (usb_osal_mutex_t)mutex;
  51. }
  52. void usb_osal_mutex_delete(usb_osal_mutex_t mutex)
  53. {
  54. aos_mutex_free(((aos_mutex_t *)&mutex));
  55. }
  56. int usb_osal_mutex_take(usb_osal_mutex_t mutex)
  57. {
  58. return aos_mutex_lock(((aos_mutex_t *)&mutex), AOS_WAIT_FOREVER);
  59. }
  60. int usb_osal_mutex_give(usb_osal_mutex_t mutex)
  61. {
  62. return aos_mutex_unlock(((aos_mutex_t *)&mutex));
  63. }
  64. usb_osal_mq_t usb_osal_mq_create(uint32_t max_msgs)
  65. {
  66. aos_queue_t queue = NULL;
  67. aos_queue_create(&queue, sizeof(uintptr_t), max_msgs, 0);
  68. return (usb_osal_mq_t)queue;
  69. }
  70. void usb_osal_mq_delete(usb_osal_mq_t mq)
  71. {
  72. aos_queue_free((aos_queue_t)mq);
  73. }
  74. int usb_osal_mq_send(usb_osal_mq_t mq, uintptr_t addr)
  75. {
  76. return aos_queue_send((aos_queue_t *)&mq, &addr, sizeof(uintptr_t));
  77. }
  78. int usb_osal_mq_recv(usb_osal_mq_t mq, uintptr_t *addr, uint32_t timeout)
  79. {
  80. size_t recv_size;
  81. if (timeout == USB_OSAL_WAITING_FOREVER) {
  82. return aos_queue_recv((aos_queue_t *)&mq, AOS_WAIT_FOREVER, addr, &recv_size);
  83. } else {
  84. return aos_queue_recv((aos_queue_t *)&mq, timeout, addr, &recv_size);
  85. }
  86. }
  87. size_t usb_osal_enter_critical_section(void)
  88. {
  89. return csi_irq_save();
  90. }
  91. void usb_osal_leave_critical_section(size_t flag)
  92. {
  93. csi_irq_restore(flag);
  94. }
  95. void usb_osal_msleep(uint32_t delay)
  96. {
  97. aos_msleep(delay);
  98. }
  99. void *usb_osal_malloc(size_t size)
  100. {
  101. return aos_malloc(size);
  102. }
  103. void usb_osal_free(void *ptr)
  104. {
  105. aos_free(ptr);
  106. }