timesync.cpp: code sanitizations
This commit is contained in:
parent
0640e4dfb1
commit
72f9b321f7
@ -462,7 +462,7 @@ void lora_housekeeping(void) {
|
||||
// uxTaskGetStackHighWaterMark(LoraTask));
|
||||
}
|
||||
|
||||
void user_request_network_time_callback(void *pVoidUserUTCTime,
|
||||
void IRAM_ATTR user_request_network_time_callback(void *pVoidUserUTCTime,
|
||||
int flagSuccess) {
|
||||
// Explicit conversion from void* to uint32_t* to avoid compiler errors
|
||||
time_t *pUserUTCTime = (time_t *)pVoidUserUTCTime;
|
||||
@ -487,6 +487,11 @@ void user_request_network_time_callback(void *pVoidUserUTCTime,
|
||||
return;
|
||||
}
|
||||
|
||||
// begin of time critical section: lock I2C bus to ensure accurate timing
|
||||
// don't move the mutex, will impact accuracy of time up to 1 sec!
|
||||
if (!I2C_MUTEX_LOCK())
|
||||
return; // failure
|
||||
|
||||
// Update userUTCTime, considering the difference between the GPS and UTC
|
||||
// time, and the leap seconds until year 2019
|
||||
*pUserUTCTime = lmicTimeReference.tNetwork + 315964800;
|
||||
@ -501,6 +506,9 @@ void user_request_network_time_callback(void *pVoidUserUTCTime,
|
||||
// Update system time with time read from the network
|
||||
adjustTime(*pUserUTCTime + requestDelaySec, 0);
|
||||
|
||||
// end of time critical section: release I2C bus
|
||||
I2C_MUTEX_UNLOCK();
|
||||
|
||||
} // user_request_network_time_callback
|
||||
|
||||
#endif // HAS_LORA
|
||||
|
@ -63,9 +63,9 @@ void send_timesync_req() {
|
||||
void process_timesync_req(void *taskparameter) {
|
||||
|
||||
uint8_t k = 0;
|
||||
uint16_t time_to_set_fraction_msec;
|
||||
uint32_t seq_no = 0, time_to_set;
|
||||
auto time_offset_ms = myClock_msecTick::zero();
|
||||
uint16_t time_to_set_fraction_msec;
|
||||
|
||||
// wait until we are joined
|
||||
while (!LMIC.devaddr) {
|
||||
@ -135,7 +135,6 @@ void process_timesync_req(void *taskparameter) {
|
||||
// end of time critical section: release I2C bus
|
||||
I2C_MUTEX_UNLOCK();
|
||||
|
||||
finish:
|
||||
lora_time_sync_pending = false;
|
||||
timeSyncReqTask = NULL;
|
||||
vTaskDelete(NULL); // end task
|
||||
@ -213,7 +212,7 @@ int recv_timesync_ans(uint8_t buf[], uint8_t buf_len) {
|
||||
}
|
||||
|
||||
// adjust system time, calibrate RTC and RTC_INT pps
|
||||
int adjustTime(uint32_t t_sec, uint16_t t_msec) {
|
||||
int IRAM_ATTR adjustTime(uint32_t t_sec, uint16_t t_msec) {
|
||||
|
||||
time_t time_to_set = (time_t)t_sec;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user