#include <networkAbstractionLayer.h> #include <PontCoopScheduler.h> #include <iwdg.h> #include <logger.h> #include <wizHelper.h> static t_seconds seconds = { .seconds = 0, .missedUpdates = 0, .valid = false }; static void networkSecondsHandler(void *handle) { static bool tryAgain = false; seconds.seconds += 1; if (! seconds.valid) { coloredMsg(LOG_YELLOW, "nsh, initially querying time"); uint64_t tmpSeconds = wizSntpQuery(); if (tmpSeconds != 0) { coloredMsg(LOG_YELLOW, "nsh, success, time is %lu", tmpSeconds); seconds.seconds = tmpSeconds; seconds.missedUpdates = 0; seconds.valid = true; } else { coloredMsg(LOG_YELLOW, "nsh, failed"); seconds.missedUpdates += 1; } } else if (tryAgain || ((seconds.seconds % 3600) == 0)) { coloredMsg(LOG_YELLOW, "nsh, periodically querying time"); uint64_t tmpSeconds = wizSntpQuery(); if (tmpSeconds != 0) { coloredMsg(LOG_YELLOW, "nsh, success, network time is %lu", tmpSeconds); seconds.missedUpdates = 0; tryAgain = false; if (seconds.seconds != tmpSeconds) { coloredMsg(LOG_YELLOW, "nsh, local time updated"); seconds.seconds = tmpSeconds; } else { coloredMsg(LOG_YELLOW, "nsh, local time still in sync"); } } else { coloredMsg(LOG_YELLOW, "nsh, failed, trying again ..."); seconds.missedUpdates += 1; tryAgain = true; } } HAL_IWDG_Refresh(&hiwdg); } t_seconds* networkGetSeconds() { return &seconds; } void networkInit() { wizInit(); schAdd(networkSecondsHandler, NULL, 0, 1000); }