summaryrefslogtreecommitdiff
path: root/osal/usb_osal_yoc.c
blob: ddcb87287814fea2873c4e1221c837a007e9d88d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/*
 * Copyright (c) 2022, sakumisu
 *
 * SPDX-License-Identifier: Apache-2.0
 */
#include "usb_osal.h"
#include "usb_errno.h"
#include <aos/kernel.h>
#include <csi_core.h>

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)
{
    aos_task_t task_handle = NULL;

    aos_task_new_ext(&task_handle, name, entry, args, stack_size, prio + AOS_DEFAULT_APP_PRI - 4);

    return task_handle;
}

void usb_osal_thread_delete(usb_osal_thread_t thread)
{
    aos_task_exit(0);
}

usb_osal_sem_t usb_osal_sem_create(uint32_t initial_count)
{
    aos_sem_t sem = NULL;

    aos_sem_new(&sem, initial_count);

    return sem;
}

void usb_osal_sem_delete(usb_osal_sem_t sem)
{
    aos_sem_free((aos_sem_t *)&sem);
}

int usb_osal_sem_take(usb_osal_sem_t sem, uint32_t timeout)
{
    if (timeout == USB_OSAL_WAITING_FOREVER) {
        return aos_sem_wait((aos_sem_t *)&sem, AOS_WAIT_FOREVER);
    } else {
        return aos_sem_wait((aos_sem_t *)&sem, timeout);
    }
}

int usb_osal_sem_give(usb_osal_sem_t sem)
{
    aos_sem_signal((aos_sem_t *)&sem);
    return 0;
}

void usb_osal_sem_reset(usb_osal_sem_t sem)
{

}

usb_osal_mutex_t usb_osal_mutex_create(void)
{
    aos_mutex_t mutex = NULL;

    aos_mutex_new(&mutex);

    return (usb_osal_mutex_t)mutex;
}

void usb_osal_mutex_delete(usb_osal_mutex_t mutex)
{
    aos_mutex_free(((aos_mutex_t *)&mutex));
}

int usb_osal_mutex_take(usb_osal_mutex_t mutex)
{
    return aos_mutex_lock(((aos_mutex_t *)&mutex), AOS_WAIT_FOREVER);
}

int usb_osal_mutex_give(usb_osal_mutex_t mutex)
{
    return aos_mutex_unlock(((aos_mutex_t *)&mutex));
}

usb_osal_mq_t usb_osal_mq_create(uint32_t max_msgs)
{
    aos_queue_t queue = NULL;

    aos_queue_create(&queue, sizeof(uintptr_t), max_msgs, 0);

    return (usb_osal_mq_t)queue;
}

void usb_osal_mq_delete(usb_osal_mq_t mq)
{
    aos_queue_free((aos_queue_t)mq);
}

int usb_osal_mq_send(usb_osal_mq_t mq, uintptr_t addr)
{
    return aos_queue_send((aos_queue_t *)&mq, &addr, sizeof(uintptr_t));
}

int usb_osal_mq_recv(usb_osal_mq_t mq, uintptr_t *addr, uint32_t timeout)
{
    size_t recv_size;
    if (timeout == USB_OSAL_WAITING_FOREVER) {
        return aos_queue_recv((aos_queue_t *)&mq, AOS_WAIT_FOREVER, addr, &recv_size);
    } else {
        return aos_queue_recv((aos_queue_t *)&mq, timeout, addr, &recv_size);
    }
}

size_t usb_osal_enter_critical_section(void)
{
    return csi_irq_save();
}

void usb_osal_leave_critical_section(size_t flag)
{
    csi_irq_restore(flag);
}

void usb_osal_msleep(uint32_t delay)
{
    aos_msleep(delay);
}

void *usb_osal_malloc(size_t size)
{
    return aos_malloc(size);
}

void usb_osal_free(void *ptr)
{
    aos_free(ptr);
}