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 7 void sys_init(void) 8 { 9 } 10 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 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 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 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 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 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 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 81 void sys_mbox_post(sys_mbox_t *mbox, void *msg) 82 { 83 if (!!mbox) 84 mbox_post(*mbox, msg, 0); 85 } 86 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 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 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 114 void sys_mbox_set_invalid(sys_mbox_t *mbox) 115 { 116 if (!!mbox) 117 mbox_set_invalid(*mbox); 118 } 119 120 int sys_mbox_valid(sys_mbox_t *mbox) 121 { 122 return ((!!mbox) && mbox_is_valid(*mbox)); 123 } 124 125 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