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;