| /* 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; |
| } |