Skip to content

Commit d29dfa7

Browse files
author
Jarkko Paso
authored
Merge pull request ARMmbed#2052 from ARMmbed/IOTTHD-3375
FHSS WS: Added maximum drift compensation step
2 parents 47f65aa + 7689c8c commit d29dfa7

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

source/Service_Libs/fhss/fhss_ws.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -851,7 +851,13 @@ int fhss_ws_set_parent(fhss_structure_t *fhss_structure, const uint8_t eui64[8],
851851
//TODO: Compensation for fixed channel configuration
852852
if (SYNCH_COMPENSATION_MIN_INTERVAL <= US_TO_S(time_since_last_synch_us)) {
853853
// Update clock drift
854-
fhss_structure->ws->drift_per_millisecond_ns += divide_integer(MS_TO_NS((true_bc_interval_offset - own_bc_interval_offset) + ((int32_t)(fhss_structure->ws->bc_slot - own_bc_slot) * bc_timing_info->broadcast_interval)), US_TO_MS(time_since_last_synch_us));
854+
int32_t drift_per_ms_tmp = divide_integer(MS_TO_NS((true_bc_interval_offset - own_bc_interval_offset) + ((int32_t)(fhss_structure->ws->bc_slot - own_bc_slot) * bc_timing_info->broadcast_interval)), US_TO_MS(time_since_last_synch_us));
855+
if (drift_per_ms_tmp > MAX_DRIFT_COMPENSATION_STEP) {
856+
drift_per_ms_tmp = MAX_DRIFT_COMPENSATION_STEP;
857+
} else if (drift_per_ms_tmp < -MAX_DRIFT_COMPENSATION_STEP) {
858+
drift_per_ms_tmp = -MAX_DRIFT_COMPENSATION_STEP;
859+
}
860+
fhss_structure->ws->drift_per_millisecond_ns += drift_per_ms_tmp;
855861
}
856862
tr_debug("synch to parent: %s, drift: %"PRIi32"ms in %"PRIu32" seconds, compensation: %"PRIi32"ns per ms", trace_array(eui64, 8), true_bc_interval_offset - own_bc_interval_offset + ((int32_t)(fhss_structure->ws->bc_slot - own_bc_slot) * bc_timing_info->broadcast_interval), US_TO_S(time_since_last_synch_us), fhss_structure->ws->drift_per_millisecond_ns);
857863
}

source/Service_Libs/fhss/fhss_ws.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
#define DEFAULT_MIN_SYNCH_INTERVAL 60
2828
// Drift compensation allowed if at least SYNCH_COMPENSATION_MIN_INTERVAL (seconds) since last synchronization
2929
#define SYNCH_COMPENSATION_MIN_INTERVAL 60
30+
// MAX compensation per received synchronization info in ns
31+
#define MAX_DRIFT_COMPENSATION_STEP 10
3032
typedef struct fhss_ws fhss_ws_t;
3133

3234
struct fhss_ws {

0 commit comments

Comments
 (0)