From 4a2845a3f698c8f10917448e7312d3d357c72d74 Mon Sep 17 00:00:00 2001 From: Verkehrsrot Date: Tue, 23 Jul 2019 20:43:10 +0200 Subject: [PATCH] further fixes irq mask & i2c lock --- include/globals.h | 2 +- src/lorawan.cpp | 2 +- src/timesync.cpp | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/globals.h b/include/globals.h index 9e8549e5..55ee199e 100644 --- a/include/globals.h +++ b/include/globals.h @@ -42,7 +42,7 @@ #define SCREEN_MODE (0x80) // I2C bus access control -#define I2C_MUTEX_LOCK() (xSemaphoreTake(I2Caccess, pdMS_TO_TICKS(10)) == pdTRUE) +#define I2C_MUTEX_LOCK() (xSemaphoreTake(I2Caccess, pdMS_TO_TICKS(2000)) == pdTRUE) #define I2C_MUTEX_UNLOCK() (xSemaphoreGive(I2Caccess)) // Struct holding devices's runtime configuration diff --git a/src/lorawan.cpp b/src/lorawan.cpp index 07d893c8..58baf00d 100644 --- a/src/lorawan.cpp +++ b/src/lorawan.cpp @@ -510,12 +510,12 @@ void IRAM_ATTR user_request_network_time_callback(void *pVoidUserUTCTime, // begin of time critical section // lock I2C bus and application irq to ensure accurate timing + mask_user_IRQ(); if (!I2C_MUTEX_LOCK()) { ESP_LOGW(TAG, "[%0.3f] Timesync handshake error: i2c bus locking failed", millis() / 1000.0); goto finish; // failure } - mask_user_IRQ(); // Update userUTCTime, considering the difference between the GPS and UTC // time, and the leap seconds until year 2019 diff --git a/src/timesync.cpp b/src/timesync.cpp index 00d80bcf..35fb8c84 100644 --- a/src/timesync.cpp +++ b/src/timesync.cpp @@ -64,7 +64,7 @@ void process_timesync_req(void *taskparameter) { // wait until we are joined if we are not while (!LMIC.devaddr) { - vTaskDelay(1000); + vTaskDelay(3000); } // collect timestamp samples @@ -111,12 +111,12 @@ void process_timesync_req(void *taskparameter) { } // end of for loop to collect timestamp samples // lock I2C bus and application irq to ensure accurate timing + mask_user_IRQ(); if (!I2C_MUTEX_LOCK()) { ESP_LOGW(TAG, "[%0.3f] Timesync handshake error: i2c bus locking failed", millis() / 1000.0); goto finish; // failure } - mask_user_IRQ(); // average time offset over all collected diffs time_offset_ms /= TIME_SYNC_SAMPLES;