// // FILE: ClockServer.h // VERSION: 0.1 // PURPOSE: FREMO Clock Server // // #ifndef _ClockServerLoaded #define _ClockServerLoaded #include #include #include #include #include #include #define MAX_CLOCK_CHANGE_CALLBACKS 5 typedef void (*ClockChangeCallback)(int h, int m, int s); enum class ClockServerStatus { ServerNotStarted, CollectingExistingClocks, StartingServer, WaitForAutoActivate, ServerStarted }; class ClockServer { public: ClockServer(Debug& _debug, Config& _config):debug(_debug), config(_config), fastclockScanner(_debug) {}; void activateClock(); void deactivateClock(); void setSpeed(float newSpeed); void begin(); void loop(); static void clockTick(); static void setText(String newText) { text = String(newText); } void sendFastclockMessage(); static String const getClockString() { String output = String(clockHours) + ":" + String(clockMinutes) + ":" + String(clockSeconds); return output; } static int const getHours() { return clockHours; } static int const getMinutes() { return clockMinutes; } static int const getSeconds() { return clockSeconds; } static int const getWeekday() { return weekday; } static String const getName() { return name; } static float const getSpeed() { return clockSpeed; } static String const getText() { return text; } static boolean const isActive() { return active; } private: Debug& debug; Config& config; FastclockScanner fastclockScanner; Ticker clockTrigger; static float clockSpeed; static String name; static String text; static boolean active; static String clockString; static String weekdayName; static int clockHours; static int clockMinutes; static int clockSeconds; static int weekday; static IPAddress ipMulticast; static int clientListenPort; static ClockServerStatus serverStatus; static uint32_t nextServerStatusTime; static int sendClockUpdateEvery_ms; static int autoActivateAfter_ms; }; #endif