85 lines
2.3 KiB
C
85 lines
2.3 KiB
C
#include <networkAbstractionLayer_impl.h>
|
|
#include <logger.h>
|
|
#include <PontCoopScheduler.h>
|
|
|
|
#include <wizHelper.h>
|
|
#include <wizchip_conf.h>
|
|
#include <socket.h>
|
|
#include <config.h>
|
|
|
|
|
|
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();
|
|
}
|