Example #1
0
u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t count)
{
    LWIP_ASSERT("invalid semaphor", sys_sem_valid(sem));
    if (count != 0) {
        uint64_t stop, start;
        start = xtimer_now_usec64();
        int res = sema_wait_timed((sema_t *)sem, count * US_PER_MS);
        stop = xtimer_now_usec64() - start;
        if (res == -ETIMEDOUT) {
            return SYS_ARCH_TIMEOUT;
        }
        return (u32_t)(stop / US_PER_MS);
    }
    else {
        sema_wait_timed((sema_t *)sem, 0);
        return 0;
    }
}
Example #2
0
void sys_mbox_post(sys_mbox_t *mbox, void *msg)
{
    int idx;

    LWIP_ASSERT("invalid mbox", sys_mbox_valid(mbox));
    mutex_lock(&mbox->mutex);
    while ((idx = cib_put(&mbox->cib)) < 0) {
        mbox->waiting++;
        mutex_unlock(&mbox->mutex);
        sema_wait_timed(&mbox->not_full, 0);
        mutex_lock(&mbox->mutex);
        mbox->waiting--;
    }
    mbox->msgs[idx] = msg;
    if (cib_avail(&mbox->cib) == 1) {
        sema_post(&mbox->not_empty);
    }
    mutex_unlock(&mbox->mutex);
}