Skip to content
This repository was archived by the owner on May 23, 2023. It is now read-only.

Commit ea583c6

Browse files
author
Jarkko Paso
committed
FHSS: Fixed updating broadcast synch
1 parent 445745a commit ea583c6

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
@@ -437,7 +437,7 @@ int8_t mac_pd_sap_data_cb(void *identifier, arm_phy_sap_msg_t *message)
437437
return -3;
438438
}
439439
if (rf_ptr->fhss_api) {
440-
buffer->timestamp = rf_ptr->fhss_api->read_timestamp(rf_ptr->fhss_api);
440+
buffer->timestamp = mac_pd_sap_get_phy_rx_time(rf_ptr);
441441
}
442442
buffer->ack_pendinfg_status = mac_data_interface_read_last_ack_pending_status(rf_ptr);
443443
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;
@@ -503,13 +503,20 @@ int fhss_ws_set_parent(fhss_structure_t *fhss_structure, const uint8_t eui64[8],
503503
if (fhss_structure->ws->fhss_configuration.ws_channel_function == WS_FIXED_CHANNEL) {
504504
return 0;
505505
}
506-
// Start broadcast schedule when BC intervals are known
507-
if (bc_timing_info->broadcast_interval && bc_timing_info->broadcast_dwell_interval) {
508-
fhss_start_timer(fhss_structure, (bc_timing_info->broadcast_interval-bc_timing_info->broadcast_interval_offset)*1000, fhss_broadcast_handler);
509-
fhss_structure->ws->fhss_configuration.fhss_bc_dwell_interval = bc_timing_info->broadcast_dwell_interval;
510-
fhss_structure->ws->fhss_configuration.fhss_broadcast_interval = bc_timing_info->broadcast_interval;
511-
fhss_structure->ws->bc_slot = bc_timing_info->broadcast_slot;
506+
if (!bc_timing_info->broadcast_interval || !bc_timing_info->broadcast_dwell_interval) {
507+
return -1;
512508
}
509+
510+
uint32_t time_from_reception_ms = (fhss_structure->fhss_api->read_timestamp(fhss_structure->fhss_api) - bc_timing_info->bt_rx_timestamp)/1000;
511+
uint32_t true_bc_interval_offset = (bc_timing_info->broadcast_interval_offset + time_from_reception_ms) % bc_timing_info->broadcast_interval;
512+
uint32_t timeout = ((bc_timing_info->broadcast_interval-true_bc_interval_offset)*1000);
513+
fhss_start_timer(fhss_structure, timeout, fhss_broadcast_handler);
514+
uint16_t slots_since_reception = (bc_timing_info->broadcast_interval_offset + time_from_reception_ms) / bc_timing_info->broadcast_interval;
515+
// TODO: Calculate drift error
516+
fhss_structure->ws->fhss_configuration.fhss_bc_dwell_interval = bc_timing_info->broadcast_dwell_interval;
517+
fhss_structure->ws->fhss_configuration.fhss_broadcast_interval = bc_timing_info->broadcast_interval;
518+
fhss_structure->ws->bc_slot = bc_timing_info->broadcast_slot + slots_since_reception;
519+
513520
//TODO: support multiple parents
514521
fhss_structure->ws->parent_bc_info = bc_timing_info;
515522
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)