• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_create(const char * name,uint32_t stack_size,uint32_t prio,usb_thread_entry_t entry,void * args)11 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)
12 {
13     aos_task_t task_handle = NULL;
14 
15     aos_task_new_ext(&task_handle, name, entry, args, stack_size, prio + AOS_DEFAULT_APP_PRI - 4);
16 
17     return task_handle;
18 }
19 
usb_osal_thread_delete(usb_osal_thread_t thread)20 void usb_osal_thread_delete(usb_osal_thread_t thread)
21 {
22     aos_task_exit(0);
23 }
24 
usb_osal_sem_create(uint32_t initial_count)25 usb_osal_sem_t usb_osal_sem_create(uint32_t initial_count)
26 {
27     aos_sem_t sem = NULL;
28 
29     aos_sem_new(&sem, initial_count);
30 
31     return sem;
32 }
33 
usb_osal_sem_delete(usb_osal_sem_t sem)34 void usb_osal_sem_delete(usb_osal_sem_t sem)
35 {
36     aos_sem_free((aos_sem_t *)&sem);
37 }
38 
usb_osal_sem_take(usb_osal_sem_t sem,uint32_t timeout)39 int usb_osal_sem_take(usb_osal_sem_t sem, uint32_t timeout)
40 {
41     if (timeout == USB_OSAL_WAITING_FOREVER) {
42         return aos_sem_wait((aos_sem_t *)&sem, AOS_WAIT_FOREVER);
43     } else {
44         return aos_sem_wait((aos_sem_t *)&sem, timeout);
45     }
46 }
47 
usb_osal_sem_give(usb_osal_sem_t sem)48 int usb_osal_sem_give(usb_osal_sem_t sem)
49 {
50     aos_sem_signal((aos_sem_t *)&sem);
51     return 0;
52 }
53 
usb_osal_mutex_create(void)54 usb_osal_mutex_t usb_osal_mutex_create(void)
55 {
56     aos_mutex_t mutex = NULL;
57 
58     aos_mutex_new(&mutex);
59 
60     return (usb_osal_mutex_t)mutex;
61 }
62 
usb_osal_mutex_delete(usb_osal_mutex_t mutex)63 void usb_osal_mutex_delete(usb_osal_mutex_t mutex)
64 {
65     aos_mutex_free(((aos_mutex_t *)&mutex));
66 }
67 
usb_osal_mutex_take(usb_osal_mutex_t mutex)68 int usb_osal_mutex_take(usb_osal_mutex_t mutex)
69 {
70     return aos_mutex_lock(((aos_mutex_t *)&mutex), AOS_WAIT_FOREVER);
71 }
72 
usb_osal_mutex_give(usb_osal_mutex_t mutex)73 int usb_osal_mutex_give(usb_osal_mutex_t mutex)
74 {
75     return aos_mutex_unlock(((aos_mutex_t *)&mutex));
76 }
77 
usb_osal_mq_create(uint32_t max_msgs)78 usb_osal_mq_t usb_osal_mq_create(uint32_t max_msgs)
79 {
80     aos_queue_t queue = NULL;
81 
82     aos_queue_create(&queue, sizeof(uintptr_t), max_msgs, 0);
83 
84     return (usb_osal_mq_t)queue;
85 }
86 
usb_osal_mq_send(usb_osal_mq_t mq,uintptr_t addr)87 int usb_osal_mq_send(usb_osal_mq_t mq, uintptr_t addr)
88 {
89     return aos_queue_send((aos_queue_t *)&mq, &addr, sizeof(uintptr_t));
90 }
91 
usb_osal_mq_recv(usb_osal_mq_t mq,uintptr_t * addr,uint32_t timeout)92 int usb_osal_mq_recv(usb_osal_mq_t mq, uintptr_t *addr, uint32_t timeout)
93 {
94     size_t recv_size;
95     if (timeout == USB_OSAL_WAITING_FOREVER) {
96         return aos_queue_recv((aos_queue_t *)&mq, AOS_WAIT_FOREVER, addr, &recv_size);
97     } else {
98         return aos_queue_recv((aos_queue_t *)&mq, timeout, addr, &recv_size);
99     }
100 }
101 
usb_osal_enter_critical_section(void)102 size_t usb_osal_enter_critical_section(void)
103 {
104     return csi_irq_save();
105 }
106 
usb_osal_leave_critical_section(size_t flag)107 void usb_osal_leave_critical_section(size_t flag)
108 {
109     csi_irq_restore(flag);
110 }
111 
usb_osal_msleep(uint32_t delay)112 void usb_osal_msleep(uint32_t delay)
113 {
114     aos_msleep(delay);
115 }
116