1 #include "arch/sys_arch.h"
2 #include "lwip/sys.h"
3 #include "lwip/mem.h"
4 #include <stdlib.h>
5 #include <thread.h>
6
sys_init(void)7 void sys_init(void)
8 {
9 }
10
sys_sem_new(sys_sem_t * sem,u8_t count)11 err_t sys_sem_new(sys_sem_t *sem, u8_t count)
12 {
13 if (!sem)
14 return EINVAL;
15 *sem = malloc(sizeof(struct semaphore));
16 if (!*sem)
17 return ENOMEM;
18
19 sem_init(*sem, count);
20 return 0;
21 }
22
sys_sem_free(sys_sem_t * sem)23 void sys_sem_free(sys_sem_t *sem)
24 {
25 if (!!sem && !!*sem) {
26 sys_sem_set_invalid(sem);
27 free(*sem);
28 *sem = NULL;
29 }
30 }
31
sys_sem_set_invalid(sys_sem_t * sem)32 void sys_sem_set_invalid(sys_sem_t *sem)
33 {
34 if (!sem || !*sem)
35 return;
36 sem_set_invalid(*sem);
37 }
38
39
sys_sem_valid(sys_sem_t * sem)40 int sys_sem_valid(sys_sem_t *sem)
41 {
42 if (!sem || !*sem)
43 return 0;
44 return sem_is_valid(*sem);
45 }
46
sys_arch_sem_wait(sys_sem_t * sem,u32_t timeout)47 u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout)
48 {
49 mstime_t rv;
50
51 if (!sem || !*sem)
52 return SYS_ARCH_TIMEOUT;
53 rv = sem_down(*sem, timeout);
54 if (rv == (mstime_t)-1)
55 return SYS_ARCH_TIMEOUT;
56 else
57 return rv;
58 }
59
sys_mbox_new(sys_mbox_t * mbox,int size)60 err_t sys_mbox_new(sys_mbox_t *mbox, int size)
61 {
62 if (!mbox)
63 return EINVAL;
64 *mbox = malloc(MBOX_BYTES(size));
65 if (!(*mbox))
66 return ENOMEM;
67
68 mbox_init(*mbox, size);
69 return 0;
70 }
71
sys_mbox_free(sys_mbox_t * mbox)72 void sys_mbox_free(sys_mbox_t *mbox)
73 {
74 if (!!mbox && !!*mbox) {
75 sys_mbox_set_invalid(mbox);
76 free(*mbox);
77 *mbox = NULL;
78 }
79 }
80
sys_mbox_post(sys_mbox_t * mbox,void * msg)81 void sys_mbox_post(sys_mbox_t *mbox, void *msg)
82 {
83 if (!!mbox)
84 mbox_post(*mbox, msg, 0);
85 }
86
sys_mbox_trypost(sys_mbox_t * mbox,void * msg)87 err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg)
88 {
89 if (!mbox)
90 return EINVAL;
91 return mbox_post(*mbox, msg, -1);
92 }
93
sys_arch_mbox_fetch(sys_mbox_t * mbox,void ** msg,u32_t timeout)94 u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout)
95 {
96 mstime_t rv;
97
98 if (!mbox)
99 return SYS_MBOX_EMPTY;
100 rv = mbox_fetch(*mbox, msg, timeout);
101 if (rv == (mstime_t)-1)
102 return SYS_ARCH_TIMEOUT;
103 else
104 return rv;
105 }
106
sys_arch_mbox_tryfetch(sys_mbox_t * mbox,void ** msg)107 u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg)
108 {
109 if (!mbox)
110 return SYS_MBOX_EMPTY;
111 return mbox_fetch(*mbox, msg, -1);
112 }
113
sys_mbox_set_invalid(sys_mbox_t * mbox)114 void sys_mbox_set_invalid(sys_mbox_t *mbox)
115 {
116 if (!!mbox)
117 mbox_set_invalid(*mbox);
118 }
119
sys_mbox_valid(sys_mbox_t * mbox)120 int sys_mbox_valid(sys_mbox_t *mbox)
121 {
122 return ((!!mbox) && mbox_is_valid(*mbox));
123 }
124
125
sys_thread_new(const char * name,lwip_thread_fn thread,void * arg,int stacksize,int prio)126 sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread,
127 void *arg, int stacksize, int prio)
128 {
129 return start_thread(name, stacksize, prio, thread, arg);
130 }
131
132