#include "common.h"
#include "config.h"
#include "fpga.h"

void print_time(const char *msg, const struct timeval *tv)
{
    const struct tm *tm = localtime(&tv->tv_sec);
    char tb1[48], tb2[16];

    strftime(tb1, sizeof tb1, "%a %Y-%m-%d %H:%M:%S", tm);
    strftime(tb2, sizeof tb2, "%z (%Z)", tm);

    printf("%s%s.%03lu %s\n", msg, tb1, tv->tv_usec/1000UL, tb2);
}

volatile bool time_net_sync_status;
void time_net_sync(const struct timeval *tv)
{
    bool synced = !!tv;

    if (synced != time_net_sync_status) {
	time_net_sync_status = synced;
	setvar_bool(status_net_sntp_sync, synced);
	if (!synced) {
	    printf("[SNTP] Time synchronization lost\n");
	} else {
	    print_time("[SNTP] Time synchronized: ", tv);
	}
    }

    if (synced)
      fpga_timesync_trigger();	/* Push time downstream to FPGA/RTC */
}