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