Skip to content

Commit 083b84e

Browse files
author
Jarkko Paso
authored
Iotthd 4308 (ARMmbed#2473)
* Fixed UFSI update print function * More test traces * More traces * Fixed ufsi function and more traces * Cleaning traces * Cleaning
1 parent fcc33d5 commit 083b84e

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

source/6LoWPAN/ws/ws_neighbor_class.c

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,18 +103,30 @@ static void ws_neighbor_calculate_ufsi_drift(ws_neighbor_class_entry_t *ws_neigh
103103
{
104104
if (ws_neighbor->fhss_data.uc_timing_info.utt_rx_timestamp && ws_neighbor->fhss_data.uc_timing_info.ufsi) {
105105
uint32_t seq_length = 0x10000;
106-
if (ws_neighbor->fhss_data.uc_timing_info.unicast_channel_function == WS_TR51CF) {
106+
if (ws_neighbor->fhss_data.uc_timing_info.unicast_channel_function == WS_TR51CF) {
107107
seq_length = ws_neighbor->fhss_data.uc_timing_info.unicast_number_of_channels;
108108
}
109109
uint32_t ufsi_prev_tmp = ws_neighbor->fhss_data.uc_timing_info.ufsi;
110110
uint32_t ufsi_cur_tmp = ws_utt->ufsi;
111-
if (ufsi_cur_tmp < ufsi_prev_tmp) {
112-
ufsi_cur_tmp += 0xffffff;
111+
if (ws_neighbor->fhss_data.uc_timing_info.unicast_channel_function == WS_DH1CF) {
112+
if (ufsi_cur_tmp < ufsi_prev_tmp) {
113+
ufsi_cur_tmp += 0xffffff;
114+
}
113115
}
114116
// Convert 24-bit UFSI to real time before drift calculation
115117
uint32_t time_since_seq_start_prev_ms = own_ceil((float)((uint64_t)ufsi_prev_tmp * seq_length * ws_neighbor->fhss_data.uc_timing_info.unicast_dwell_interval) / 0x1000000);
116118
uint32_t time_since_seq_start_cur_ms = own_ceil((float)((uint64_t)ufsi_cur_tmp * seq_length * ws_neighbor->fhss_data.uc_timing_info.unicast_dwell_interval) / 0x1000000);
117119
uint32_t time_since_last_ufsi_us = timestamp - ws_neighbor->fhss_data.uc_timing_info.utt_rx_timestamp;
120+
121+
if (ws_neighbor->fhss_data.uc_timing_info.unicast_channel_function == WS_TR51CF) {
122+
uint32_t full_uc_schedule_ms = ws_neighbor->fhss_data.uc_timing_info.unicast_dwell_interval * ws_neighbor->fhss_data.uc_timing_info.unicast_number_of_channels;
123+
uint32_t temp_ms = (time_since_last_ufsi_us / 1000) / full_uc_schedule_ms;
124+
if (time_since_seq_start_cur_ms >= time_since_seq_start_prev_ms) {
125+
temp_ms--;
126+
}
127+
time_since_seq_start_cur_ms += temp_ms * full_uc_schedule_ms + (full_uc_schedule_ms - time_since_seq_start_prev_ms) + time_since_seq_start_prev_ms;
128+
}
129+
118130
uint32_t ufsi_diff_ms = time_since_seq_start_cur_ms - time_since_seq_start_prev_ms;
119131
int32_t ufsi_drift_ms = (int32_t)(time_since_last_ufsi_us / 1000 - ufsi_diff_ms);
120132
// Only trace if there is significant error

source/Service_Libs/fhss/fhss_ws.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -456,8 +456,10 @@ static uint32_t fhss_ws_calculate_ufsi(fhss_structure_t *fhss_structure, uint32_
456456
{
457457
uint8_t dwell_time = fhss_structure->ws->fhss_configuration.fhss_uc_dwell_interval;
458458
uint16_t cur_slot = fhss_structure->ws->uc_slot;
459-
if (cur_slot == 0) {
460-
cur_slot = fhss_structure->number_of_uc_channels;
459+
if (fhss_structure->ws->fhss_configuration.ws_uc_channel_function == WS_TR51CF) {
460+
if (cur_slot == 0) {
461+
cur_slot = fhss_structure->number_of_uc_channels;
462+
}
461463
}
462464
cur_slot--;
463465
uint32_t remaining_time_ms = 0;

0 commit comments

Comments
 (0)