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 7void sys_init(void) 8{ 9} 10 11err_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 23void 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 32void sys_sem_set_invalid(sys_sem_t *sem) 33{ 34 if (!sem || !*sem) 35 return; 36 sem_set_invalid(*sem); 37} 38 39 40int sys_sem_valid(sys_sem_t *sem) 41{ 42 if (!sem || !*sem) 43 return 0; 44 return sem_is_valid(*sem); 45} 46 47u32_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 60err_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 72void 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 81void sys_mbox_post(sys_mbox_t *mbox, void *msg) 82{ 83 if (!!mbox) 84 mbox_post(*mbox, msg, 0); 85} 86 87err_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 94u32_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 107u32_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 114void sys_mbox_set_invalid(sys_mbox_t *mbox) 115{ 116 if (!!mbox) 117 mbox_set_invalid(*mbox); 118} 119 120int sys_mbox_valid(sys_mbox_t *mbox) 121{ 122 return ((!!mbox) && mbox_is_valid(*mbox)); 123} 124 125 126sys_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