From 145109a28075fd31053d5650c4caa3dfa0fe02cb Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Sun, 28 Feb 2021 19:38:33 +0100 Subject: [PATCH] something broken now --- cube/User/Src/networkAbstractionLayer_lan.c | 56 ++++++++++++--------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/cube/User/Src/networkAbstractionLayer_lan.c b/cube/User/Src/networkAbstractionLayer_lan.c index f611285..f02be17 100644 --- a/cube/User/Src/networkAbstractionLayer_lan.c +++ b/cube/User/Src/networkAbstractionLayer_lan.c @@ -13,73 +13,79 @@ static t_configBlock *config; -static uint8_t sntpBuffer[MAX_SNTP_BUF_SIZE]; static const uint64_t UNIX_NTP_EPOCH_DIFF = 2208988800; extern const uint8_t SNTP_SOCK; -static uint64_t seconds; -static enum { - SNTP_STATE_IDLE, - SNTP_STATE_SEND, - SNTP_STATE_DONE, - SNTP_STATE_ERROR -} sntpState = SNTP_STATE_IDLE; + +typedef struct { + uint8_t sntpBuffer[MAX_SNTP_BUF_SIZE]; + uint64_t seconds; + enum { + SNTP_STATE_IDLE, + SNTP_STATE_SEND, + SNTP_STATE_DONE, + SNTP_STATE_ERROR + } sntpState; +} sntpEngineHandle_t; + +sntpEngineHandle_t sntpEngineHandle = { .seconds = 0, .sntpState = SNTP_STATE_IDLE }; void networkSntpEngine(void *handle) { + sntpEngineHandle_t *localHandle = (sntpEngineHandle_t*) handle; if (isNetworkAvailable()) { - switch (sntpState) { + switch (localHandle->sntpState) { case SNTP_STATE_SEND: coloredMsg(LOG_BLUE, "nes, about to call SNTP"); uint8_t ntpServer[4]; if (wizDnsQuery(config->ntpServer, ntpServer)) { - SNTP_init(SNTP_SOCK, ntpServer, 0, sntpBuffer); + SNTP_init(SNTP_SOCK, ntpServer, 0, localHandle->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, "nes, cycles: %u, curTime: %lu", cycles, seconds); + localHandle->seconds = curTime.seconds - UNIX_NTP_EPOCH_DIFF; + coloredMsg(LOG_BLUE, "nes, cycles: %u, curTime: %lu", cycles, localHandle->seconds); uint32_t stopTime = HAL_GetTick(); coloredMsg(LOG_BLUE, "nes, duration: %u ms", stopTime - startTime); - sntpState = SNTP_STATE_DONE; + localHandle->sntpState = SNTP_STATE_DONE; break; } } - if (seconds == 0) { + if (localHandle->seconds == 0) { coloredMsg(LOG_BLUE, "nes, time update failed"); - sntpState = SNTP_STATE_ERROR; + localHandle->sntpState = SNTP_STATE_ERROR; } } else { coloredMsg(LOG_BLUE, "nes, error when querying ntp server name"); - sntpState = SNTP_STATE_ERROR; + localHandle->sntpState = SNTP_STATE_ERROR; } default: coloredMsg(LOG_BLUE, "nes, unexpected state"); } } else { coloredMsg(LOG_BLUE, "nes, no network yet, try again"); - schAdd(networkSntpEngine, NULL, 100, 0); + schAdd(networkSntpEngine, (void*) localHandle, 100, 0); } } uint64_t networkSntpQuery() { uint64_t res = 0; - if (sntpState == SNTP_STATE_IDLE) { + if (sntpEngineHandle.sntpState == SNTP_STATE_IDLE) { coloredMsg(LOG_BLUE, "nsq, start sntp request"); - sntpState = SNTP_STATE_SEND; - schAdd(networkSntpEngine, NULL, 1, 0); - } else if (sntpState == SNTP_STATE_DONE) { + sntpEngineHandle.sntpState = SNTP_STATE_SEND; + schAdd(networkSntpEngine, (void*) &sntpEngineHandle, 1, 0); + } else if (sntpEngineHandle.sntpState == SNTP_STATE_DONE) { coloredMsg(LOG_BLUE, "nsq, start sntp done"); - res = seconds; - sntpState = SNTP_STATE_IDLE; - } else if (sntpState == SNTP_STATE_ERROR) { + res = sntpEngineHandle.seconds; + sntpEngineHandle.sntpState = SNTP_STATE_IDLE; + } else if (sntpEngineHandle.sntpState == SNTP_STATE_ERROR) { coloredMsg(LOG_BLUE, "nsq, start sntp failed"); - sntpState = SNTP_STATE_IDLE; + sntpEngineHandle.sntpState = SNTP_STATE_IDLE; } return res;