timekeeper fixes
This commit is contained in:
1 parent
182f850d23
commit
814d60e15d
4 files changed
+22
-11
No files matched your search
@@ -358,13 +358,18 @@ void setup() {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined HAS_IF482 || defined HAS_DCF77
|
||||
// start pps timepulse
|
||||
ESP_LOGI(TAG, "Starting Timekeeper...");
|
||||
assert(timepulse_init()); // setup timepulse
|
||||
timepulse_start();
|
||||
#endif
|
||||
|
||||
#ifdef TIME_SYNC_INTERVAL
|
||||
// set time source and sync time
|
||||
setSyncInterval(TIME_SYNC_INTERVAL * 60);
|
||||
setSyncProvider(&timeProvider);
|
||||
#endif
|
||||
|
||||
// start wifi in monitor mode and start channel rotation timer
|
||||
ESP_LOGI(TAG, "Starting Wifi...");
|
||||
|
||||
+1
-1
@@ -66,7 +66,7 @@
|
||||
#define RESPONSE_TIMEOUT_MS 60000 // firmware binary server connection timeout [milliseconds]
|
||||
|
||||
// settings for syncing time of node with external time source
|
||||
#define TIME_SYNC_INTERVAL 2 // sync time attempt each .. minutes from time source (GPS/LORA/RTC) [default = 60], comment out means off
|
||||
//#define TIME_SYNC_INTERVAL 2 // sync time attempt each .. minutes from time source (GPS/LORA/RTC) [default = 60], comment out means off
|
||||
//#define TIME_SYNC_LORA 1 // use LORA network as time source, comment out means off [default = off]
|
||||
|
||||
// time zone, see https://github.com/JChristensen/Timezone/blob/master/examples/WorldClock/WorldClock.ino
|
||||
|
||||
+12
-6
@@ -100,17 +100,23 @@ void timepulse_start(void) {
|
||||
// interrupt service routine triggered by either pps or esp32 hardware timer
|
||||
void IRAM_ATTR CLOCKIRQ(void) {
|
||||
|
||||
BaseType_t xHigherPriorityTaskWoken;
|
||||
|
||||
time_t t = SyncToPPS(); // calibrates UTC systime, see Time.h
|
||||
xHigherPriorityTaskWoken = pdFALSE;
|
||||
|
||||
if (ClockTask != NULL)
|
||||
xTaskNotifyFromISR(ClockTask, uint32_t(t), eSetBits, NULL);
|
||||
xTaskNotifyFromISR(ClockTask, uint32_t(t), eSetBits,
|
||||
&xHigherPriorityTaskWoken);
|
||||
|
||||
#if defined GPS_INT || defined RTC_INT
|
||||
xSemaphoreGiveFromISR(TimePulse, NULL);
|
||||
xSemaphoreGiveFromISR(TimePulse, &xHigherPriorityTaskWoken);
|
||||
TimePulseTick = !TimePulseTick; // flip ticker
|
||||
#endif
|
||||
|
||||
portYIELD_FROM_ISR();
|
||||
// yield only if we should
|
||||
if (xHigherPriorityTaskWoken)
|
||||
portYIELD_FROM_ISR();
|
||||
}
|
||||
|
||||
// helper function to check plausibility of a time
|
||||
@@ -215,9 +221,9 @@ void clock_loop(void *taskparameter) { // ClockTask
|
||||
if (second(t) == DCF77_FRAME_SIZE - 1) // is it time to load new frame?
|
||||
DCFpulse = DCF77_Frame(nextmin(t)); // generate frame for next minute
|
||||
|
||||
if (minute(nextmin(t)) == // do we still have a recent frame?
|
||||
DCFpulse[DCF77_FRAME_SIZE]) // (timepulses could be missed!)
|
||||
DCF77_Pulse(t, DCFpulse); // then output current second's pulse
|
||||
if (minute(nextmin(t)) == // do we still have a recent frame?
|
||||
DCFpulse[DCF77_FRAME_SIZE]) // (timepulses could be missed!)
|
||||
DCF77_Pulse(t, DCFpulse); // then output current second's pulse
|
||||
else
|
||||
continue; // no recent frame -> we suppress clock output
|
||||
|
||||
|
||||
Reference in new issue
Block a user