#include #include #include #include #include #include #include #include static t_configBlock *config; static uint8_t sntpBuffer[MAX_SNTP_BUF_SIZE]; const uint64_t UNIX_NTP_EPOCH_DIFF = 2208988800; extern const uint8_t SNTP_SOCK; uint64_t networkSntpQuery() { uint64_t seconds = 0; if (isNetworkAvailable()) { coloredMsg(LOG_BLUE, "wizsq, about to call SNTP"); uint8_t ntpServer[4]; if (wizDnsQuery(config->ntpServer, ntpServer)) { SNTP_init(SNTP_SOCK, ntpServer, 0, sntpBuffer); uint16_t cycles = 0; uint32_t startTime = HAL_GetTick(); while (1) { cycles += 1; datetime curTime; if (1 == SNTP_run(&curTime)) { seconds = curTime.seconds - UNIX_NTP_EPOCH_DIFF; coloredMsg(LOG_BLUE, "wizsq, cycles: %u, curTime: %lu", cycles, seconds); uint32_t stopTime = HAL_GetTick(); coloredMsg(LOG_BLUE, "wizsq, duration: %u ms", stopTime - startTime); break; } } if (seconds == 0) { coloredMsg(LOG_BLUE, "wizsq, time update failed"); } } else { coloredMsg(LOG_BLUE, "wizsq, error when querying ntp server name"); } } return seconds; } extern uint8_t SINK_SOCK; int8_t networkUdpSend(char *hostname, uint16_t port, uint8_t *buf, uint16_t bufLen) { uint8_t sinkAddr[4]; if (! wizDnsQuery(hostname, sinkAddr)) { coloredMsg(LOG_BLUE, "nus, failed to resolve sink server name"); return -1; } else { coloredMsg(LOG_BLUE, "nus, sink server at %d.%d.%d.%d", sinkAddr[0], sinkAddr[1], sinkAddr[2], sinkAddr[3]); } socket(SINK_SOCK, Sn_MR_UDP, port, 0); uint8_t sockState = getSn_SR(SINK_SOCK); if (sockState == SOCK_UDP) { sendto(SINK_SOCK, buf, bufLen, sinkAddr, port); coloredMsg(LOG_BLUE, "nus, sent"); } else { coloredMsg(LOG_BLUE, "nus, socket in unexpected state: %d", sockState); return -2; } close(SINK_SOCK); return 1; } void networkImplInit() { config = getConfig(); wizInit(); }