• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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