/* Copyright 2018 The Chromium OS Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "cras_util.h" #include "polled_interval_checker.h" struct polled_interval { struct timespec last_interval_start_ts; int interval_sec; }; static struct timespec now; static inline int get_sec_since_last_active( const struct timespec *last_active_ts) { struct timespec diff; subtract_timespecs(&now, last_active_ts, &diff); return diff.tv_sec; } void pic_update_current_time() { clock_gettime(CLOCK_MONOTONIC_RAW, &now); } struct polled_interval *pic_polled_interval_create(int interval_sec) { struct polled_interval *pi; pi = malloc(sizeof(*pi)); pi->last_interval_start_ts = now; pi->interval_sec = interval_sec; return pi; } void pic_polled_interval_destroy(struct polled_interval **interval) { free(*interval); *interval = NULL; } int pic_interval_elapsed(const struct polled_interval *pi) { return get_sec_since_last_active(&pi->last_interval_start_ts) >= pi->interval_sec; } void pic_interval_reset(struct polled_interval *pi) { pi->last_interval_start_ts = now; }