timesync code sanitized
This commit is contained in:
1 parent
bf70f2f9f2
commit
139738a14d
7 files changed
+26
-30
No files matched your search
+1
-3
@@ -59,9 +59,7 @@ void irqHandler(void *pvParameters) {
|
||||
// is time to be synced?
|
||||
if (InterruptStatus & TIMESYNC_IRQ) {
|
||||
now(); // ensure sysTime is recent
|
||||
time_t t = timeProvider();
|
||||
if (timeIsValid(t))
|
||||
setTime(t);
|
||||
calibrateTime();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
+2
-7
@@ -464,11 +464,6 @@ void lora_enqueuedata(MessageBuffer_t *message, sendprio_t prio) {
|
||||
|
||||
void lora_queuereset(void) { xQueueReset(LoraSendQueue); }
|
||||
|
||||
void lora_housekeeping(void) {
|
||||
// ESP_LOGD(TAG, "loraloop %d bytes left",
|
||||
// uxTaskGetStackHighWaterMark(LoraTask));
|
||||
}
|
||||
|
||||
#if (TIME_SYNC_LORAWAN)
|
||||
void IRAM_ATTR user_request_network_time_callback(void *pVoidUserUTCTime,
|
||||
int flagSuccess) {
|
||||
@@ -510,7 +505,7 @@ void IRAM_ATTR user_request_network_time_callback(void *pVoidUserUTCTime,
|
||||
time_t requestDelaySec = osticks2ms(ticksNow - ticksRequestSent) / 1000;
|
||||
|
||||
// Update system time with time read from the network
|
||||
setMyTime(*pUserUTCTime + requestDelaySec, 0);
|
||||
setMyTime(*pUserUTCTime + requestDelaySec, 0, _lora);
|
||||
|
||||
finish:
|
||||
// end of time critical section: release app irq lock
|
||||
@@ -523,7 +518,7 @@ finish:
|
||||
void lmictask(void *pvParameters) {
|
||||
configASSERT(((uint32_t)pvParameters) == 1); // FreeRTOS check
|
||||
|
||||
os_init(); // initialize lmic run-time environment on core 1
|
||||
os_init(); // initialize lmic run-time environment
|
||||
LMIC_reset(); // initialize lmic MAC
|
||||
LMIC_setLinkCheckMode(0);
|
||||
// This tells LMIC to make the receive windows bigger, in case your clock is
|
||||
|
||||
+13
-12
@@ -22,9 +22,10 @@ Ticker timesyncer;
|
||||
|
||||
void timeSync() { xTaskNotify(irqHandlerTask, TIMESYNC_IRQ, eSetBits); }
|
||||
|
||||
time_t timeProvider(void) {
|
||||
void calibrateTime(void) {
|
||||
|
||||
time_t t = 0;
|
||||
timesource_t timeSource;
|
||||
|
||||
#if (HAS_GPS)
|
||||
// fetch recent time from last NMEA record
|
||||
@@ -34,9 +35,7 @@ time_t timeProvider(void) {
|
||||
set_rtctime(t); // calibrate RTC
|
||||
#endif
|
||||
timeSource = _gps;
|
||||
timesyncer.attach(TIME_SYNC_INTERVAL * 60, timeSync); // regular repeat
|
||||
ESP_LOGD(TAG, "GPS time = %d", t);
|
||||
return t;
|
||||
goto finish;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -45,8 +44,7 @@ time_t timeProvider(void) {
|
||||
t = get_rtctime();
|
||||
if (t) {
|
||||
timeSource = _rtc;
|
||||
timesyncer.attach(TIME_SYNC_INTERVAL_RETRY * 60, timeSync); // short retry
|
||||
ESP_LOGD(TAG, "RTC time = %d", t);
|
||||
goto finish
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -58,14 +56,17 @@ time_t timeProvider(void) {
|
||||
LMIC_requestNetworkTime(user_request_network_time_callback, &userUTCTime);
|
||||
#endif
|
||||
|
||||
if (!t) {
|
||||
timeSource = _unsynced;
|
||||
timesyncer.attach(TIME_SYNC_INTERVAL_RETRY * 60, timeSync); // short retry
|
||||
finish:
|
||||
|
||||
if (t) { // sync successful
|
||||
setMyTime(t, 0, timeSource); // set time
|
||||
timesyncer.attach(TIME_SYNC_INTERVAL * 60, timeSync);
|
||||
ESP_LOGD(TAG, "time = %d | source: %c", t, timeSetSymbols[timeSource]);
|
||||
} else { // sync failed, we want to retry shortly
|
||||
timesyncer.attach(TIME_SYNC_INTERVAL_RETRY * 60, timeSync);
|
||||
}
|
||||
|
||||
return t;
|
||||
|
||||
} // timeProvider()
|
||||
} // calibrateTime()
|
||||
|
||||
// helper function to setup a pulse per second for time synchronisation
|
||||
uint8_t timepulse_init() {
|
||||
|
||||
+6
-4
@@ -128,7 +128,7 @@ void process_timesync_req(void *taskparameter) {
|
||||
// calculate fraction milliseconds
|
||||
time_to_set_fraction_msec = (uint16_t)(time_offset_ms.count() % 1000);
|
||||
|
||||
setMyTime(time_to_set, time_to_set_fraction_msec);
|
||||
setMyTime(time_to_set, time_to_set_fraction_msec, _lora);
|
||||
|
||||
finish:
|
||||
// end of time critical section: release app irq lock
|
||||
@@ -208,7 +208,8 @@ int recv_timesync_ans(uint8_t seq_no, uint8_t buf[], uint8_t buf_len) {
|
||||
}
|
||||
|
||||
// adjust system time, calibrate RTC and RTC_INT pps
|
||||
void IRAM_ATTR setMyTime(uint32_t t_sec, uint16_t t_msec) {
|
||||
void IRAM_ATTR setMyTime(uint32_t t_sec, uint16_t t_msec,
|
||||
timesource_t timesource) {
|
||||
|
||||
time_t time_to_set = (time_t)(t_sec + 1);
|
||||
|
||||
@@ -218,7 +219,8 @@ void IRAM_ATTR setMyTime(uint32_t t_sec, uint16_t t_msec) {
|
||||
if (timeIsValid(time_to_set)) {
|
||||
|
||||
// wait until top of second with millisecond precision
|
||||
vTaskDelay(pdMS_TO_TICKS(1000 - t_msec));
|
||||
if (t_msec)
|
||||
vTaskDelay(pdMS_TO_TICKS(1000 - t_msec));
|
||||
|
||||
// set RTC time and calibrate RTC_INT pulse on top of second
|
||||
#ifdef HAS_RTC
|
||||
@@ -233,7 +235,7 @@ void IRAM_ATTR setMyTime(uint32_t t_sec, uint16_t t_msec) {
|
||||
|
||||
setTime(time_to_set); // set the time on top of second
|
||||
|
||||
timeSource = _lora;
|
||||
timeSource = timesource;
|
||||
timesyncer.attach(TIME_SYNC_INTERVAL * 60, timeSync); // regular repeat
|
||||
ESP_LOGI(TAG, "[%0.3f] Timesync finished, time was adjusted",
|
||||
millis() / 1000.0);
|
||||
|
||||
Reference in new issue
Block a user