Skip to content

Commit 4aa6890

Browse files
author
Jarkko Paso
authored
Merge pull request ARMmbed#1664 from ARMmbed/IOTTHD-2442
FHSS: Fixed updating broadcast synch
2 parents 65e2fad + a152f45 commit 4aa6890

File tree

3 files changed

+16
-17
lines changed

3 files changed

+16
-17
lines changed

source/MAC/IEEE802_15_4/mac_pd_sap.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ int8_t mac_pd_sap_data_cb(void *identifier, arm_phy_sap_msg_t *message)
436436
return -3;
437437
}
438438
if (rf_ptr->fhss_api) {
439-
buffer->timestamp = rf_ptr->fhss_api->read_timestamp(rf_ptr->fhss_api);
439+
buffer->timestamp = mac_pd_sap_get_phy_rx_time(rf_ptr);
440440
}
441441
buffer->ack_pendinfg_status = mac_data_interface_read_last_ack_pending_status(rf_ptr);
442442
ptr = mac_header_parse_fcf_dsn(&buffer->fcf_dsn, ptr);

source/Service_Libs/fhss/fhss_ws.c

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ static void fhss_broadcast_handler(const fhss_api_t *fhss_api, uint16_t delay)
111111
if (!fhss_structure) {
112112
return;
113113
}
114-
// TODO: check parent broadcast timing constantly and calculate drift error
114+
115115
if (fhss_structure->ws->is_on_bc_channel == false) {
116116
fhss_start_timer(fhss_structure, fhss_structure->ws->fhss_configuration.fhss_bc_dwell_interval*1000, fhss_broadcast_handler);
117117
fhss_structure->ws->is_on_bc_channel = true;
@@ -526,13 +526,20 @@ int fhss_ws_set_parent(fhss_structure_t *fhss_structure, const uint8_t eui64[8],
526526
if (fhss_structure->ws->fhss_configuration.ws_channel_function == WS_FIXED_CHANNEL) {
527527
return 0;
528528
}
529-
// Start broadcast schedule when BC intervals are known
530-
if (bc_timing_info->broadcast_interval && bc_timing_info->broadcast_dwell_interval) {
531-
fhss_start_timer(fhss_structure, (bc_timing_info->broadcast_interval-bc_timing_info->broadcast_interval_offset)*1000, fhss_broadcast_handler);
532-
fhss_structure->ws->fhss_configuration.fhss_bc_dwell_interval = bc_timing_info->broadcast_dwell_interval;
533-
fhss_structure->ws->fhss_configuration.fhss_broadcast_interval = bc_timing_info->broadcast_interval;
534-
fhss_structure->ws->bc_slot = bc_timing_info->broadcast_slot;
529+
if (!bc_timing_info->broadcast_interval || !bc_timing_info->broadcast_dwell_interval) {
530+
return -1;
535531
}
532+
533+
uint32_t time_from_reception_ms = (fhss_structure->fhss_api->read_timestamp(fhss_structure->fhss_api) - bc_timing_info->bt_rx_timestamp)/1000;
534+
uint32_t true_bc_interval_offset = (bc_timing_info->broadcast_interval_offset + time_from_reception_ms) % bc_timing_info->broadcast_interval;
535+
uint32_t timeout = ((bc_timing_info->broadcast_interval-true_bc_interval_offset)*1000);
536+
fhss_start_timer(fhss_structure, timeout, fhss_broadcast_handler);
537+
uint16_t slots_since_reception = (bc_timing_info->broadcast_interval_offset + time_from_reception_ms) / bc_timing_info->broadcast_interval;
538+
// TODO: Calculate drift error
539+
fhss_structure->ws->fhss_configuration.fhss_bc_dwell_interval = bc_timing_info->broadcast_dwell_interval;
540+
fhss_structure->ws->fhss_configuration.fhss_broadcast_interval = bc_timing_info->broadcast_interval;
541+
fhss_structure->ws->bc_slot = bc_timing_info->broadcast_slot + slots_since_reception;
542+
536543
//TODO: support multiple parents
537544
fhss_structure->ws->parent_bc_info = bc_timing_info;
538545
return 0;

test/nanostack/unittest/mac/mac_pd_sap/test_mac_pd_sap.c

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -550,15 +550,7 @@ bool test_mac_pd_sap_data_cb()
550550
mac_header_helper_functions_stub.fcf = fcf;
551551
phy_message.id = MAC15_4_PD_SAP_DATA_IND;
552552
phy_message.message.generic_data_ind.data_ptr = buffer;
553-
// Test returning timestamp
554-
fhss_config_stub.uint32_value = 1234567890;
555-
ret = mac_pd_sap_data_cb(&rf_ptr, &phy_message);
556-
if (ret != 0) {
557-
return false;
558-
}
559-
if (mac_mcps_sap_stub.pre_parsed->timestamp != 1234567890){
560-
return false;
561-
}
553+
562554
// Test TX confirm
563555
phy_message.id = MAC15_4_PD_SAP_DATA_TX_CONFIRM;
564556
rf_ptr.macTxProcessActive = true;

0 commit comments

Comments
 (0)