blob: 4081d01ea191dc1997065c41ff85c3f3e590779f [file] [log] [blame]
#include "arch/sys_arch.h"
#include "lwip/sys.h"
#include "lwip/mem.h"
#include <stdlib.h>
#include <thread.h>
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);
}