/* * 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, WEEK_DAY_COUNT, } 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