cv_status condition_variable::wait_until(unique_lock<mutex>& lock, const time_point& timeout_time) { xtimer_t timer; // todo: use function to wait for absolute timepoint once available timex_t before; xtimer_now_timex(&before); auto diff = timex_sub(timeout_time.native_handle(), before); xtimer_set_wakeup(&timer, timex_uint64(diff), sched_active_pid); wait(lock); timex_t after; xtimer_now_timex(&after); xtimer_remove(&timer); auto cmp = timex_cmp(after, timeout_time.native_handle()); return cmp < 1 ? cv_status::no_timeout : cv_status::timeout; }
static int _klog(FILE *f, unsigned level, const char *logger, const char *format, va_list args) { timex_t time; int written = 0; xtimer_now_timex(&time); written += fprintf(f, "%010d.%03d %s:%s ", time.seconds, time.microseconds / 1000, logger, _level_str(level)); written += vfprintf(f, format, args); written += fprintf(f, "\n"); return written; }