bedside-clock/components/time/time_manager.h
Camden Dixie O'Brien 9c9f027bb8 Add support for snoozing alarms
Also modified time_manager to pass time by value to time callbacks as
it's a fairly small struct and it will probably be more robust.
2023-05-19 14:02:49 +01:00

74 lines
1.0 KiB
C

/*
* SPDX-License-Identifier: AGPL-3.0-only
* Copyright (c) Camden Dixie O'Brien
*/
#ifndef TIME_MANAGER_H
#define TIME_MANAGER_H
typedef struct {
unsigned hour;
unsigned minute;
unsigned second;
} Time;
typedef struct {
unsigned year;
unsigned month;
unsigned day;
} Date;
typedef enum {
WEEK_DAY_MONDAY,
WEEK_DAY_TUESDAY,
WEEK_DAY_WEDNESDAY,
WEEK_DAY_THURSDAY,
WEEK_DAY_FRIDAY,
WEEK_DAY_SATURDAY,
WEEK_DAY_SUNDAY,
} WeekDay;
typedef void (*TimeCallback)(Time now);
/**
* Initialize the time module.
*/
void time_manager_init(void);
/**
* Add a callback to be regularly invoked with time updates.
*/
void add_time_callback(TimeCallback callback);
/**
* Get the current time.
*/
Time get_time(void);
/**
* Set the time.
*/
void set_time(Time time);
/**
* Get the current date.
*/
Date get_date(void);
/**
* Set the date.
*/
void set_date(Date date);
/**
* Get which day of the week it is.
*/
WeekDay get_week_day(void);
/**
* Get the name of a day of the week.
*/
const char *week_day_name(WeekDay day);
#endif