#include "arch/sys_arch.h" #include "lwip/sys.h" #include "lwip/mem.h" #include #include void sys_init(void) { } err_t sys_sem_new(sys_sem_t *sem, u8_t count) { if (!sem) return EINVAL; *sem = malloc(sizeof(struct semaphore)); if (!*sem) return ENOMEM; sem_init(*sem, count); return 0; } void sys_sem_free(sys_sem_t *sem) { if (!!sem && !!*sem) { sys_sem_set_invalid(sem); free(*sem); *sem = NULL; } } void sys_sem_set_invalid(sys_sem_t *sem) { if (!sem || !*sem) return; sem_set_invalid(*sem); } int sys_sem_valid(sys_sem_t *sem) { if (!sem || !*sem) return 0; return sem_is_valid(*sem); } u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout) { mstime_t rv; if (!sem || !*sem) return SYS_ARCH_TIMEOUT; rv = sem_down(*sem, timeout); if (rv == (mstime_t)-1) return SYS_ARCH_TIMEOUT; else return rv; } err_t sys_mbox_new(sys_mbox_t *mbox, int size) { if (!mbox) return EINVAL; *mbox = malloc(MBOX_BYTES(size)); if (!(*mbox)) return ENOMEM; mbox_init(*mbox, size); return 0; } void sys_mbox_free(sys_mbox_t *mbox) { if (!!mbox && !!*mbox) { sys_mbox_set_invalid(mbox); free(*mbox); *mbox = NULL; } } void sys_mbox_post(sys_mbox_t *mbox, void *msg) { if (!!mbox) mbox_post(*mbox, msg, 0); } err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg) { if (!mbox) return EINVAL; return mbox_post(*mbox, msg, -1); } u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout) { mstime_t rv; if (!mbox) return SYS_MBOX_EMPTY; rv = mbox_fetch(*mbox, msg, timeout); if (rv == (mstime_t)-1) return SYS_ARCH_TIMEOUT; else return rv; } u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg) { if (!mbox) return SYS_MBOX_EMPTY; return mbox_fetch(*mbox, msg, -1); } void sys_mbox_set_invalid(sys_mbox_t *mbox) { if (!!mbox) mbox_set_invalid(*mbox); } int sys_mbox_valid(sys_mbox_t *mbox) { return ((!!mbox) && mbox_is_valid(*mbox)); } sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio) { return start_thread(name, stacksize, prio, thread, arg); }