Skip to content

Commit b074d0e

Browse files
author
Jarkko Paso
authored
Merge pull request ARMmbed#1845 from ARMmbed/IOTTHD-2839
Iotthd 2839
2 parents caf53d1 + 33afc9c commit b074d0e

File tree

11 files changed

+24
-16
lines changed

11 files changed

+24
-16
lines changed

nanostack/fhss_ws_extension.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,10 @@ typedef fhss_ws_neighbor_timing_info_t *fhss_get_neighbor_info(const fhss_api_t
8080
* @param fhss_api FHSS instance.
8181
* @param eui64 EUI-64 address of parent.
8282
* @param bc_timing_info Pointer to parent broadcast timing/hopping schedule info.
83+
* @param force_synch If false, synchronization is done only if minimum (internal) synchronization interval is exceed.
8384
* @return 0 on success, -1 on fail.
8485
*/
85-
extern int ns_fhss_ws_set_parent(const fhss_api_t *fhss_api, const uint8_t eui64[8], const broadcast_timing_info_t *bc_timing_info);
86+
extern int ns_fhss_ws_set_parent(const fhss_api_t *fhss_api, const uint8_t eui64[8], const broadcast_timing_info_t *bc_timing_info, const bool force_synch);
8687

8788
/**
8889
* @brief Remove parent which was set by ns_fhss_ws_set_parent function.

source/6LoWPAN/ws/ws_bootstrap.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,7 @@ static void ws_bootstrap_primary_parent_set(struct protocol_interface_info_entry
497497
ns_fhss_ws_configuration_set(cur->ws_info->fhss_api, &fhss_configuration);
498498

499499
// We have broadcast schedule set up set the broadcast parent schedule
500-
ns_fhss_ws_set_parent(cur->ws_info->fhss_api, neighbor_info->neighbor->mac64, &neighbor_info->ws_neighbor->fhss_data.bc_timing_info);
500+
ns_fhss_ws_set_parent(cur->ws_info->fhss_api, neighbor_info->neighbor->mac64, &neighbor_info->ws_neighbor->fhss_data.bc_timing_info, true);
501501

502502
// Update LLC to follow updated fhss settings
503503
ws_bootstrap_llc_hopping_update(cur,&fhss_configuration);

source/6LoWPAN/ws/ws_llc_data_service.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -520,16 +520,14 @@ static void ws_llc_mac_indication_cb(const mac_api_t* api, const mcps_data_ind_t
520520
ws_neighbor_class_neighbor_unicast_time_info_update(neighbor_info.ws_neighbor, &ws_utt, data->timestamp);
521521
if (us_ie_inline) {
522522
ws_neighbor_class_neighbor_unicast_schedule_set(neighbor_info.ws_neighbor, &us_ie);
523-
524-
525523
}
526524
//Update BT if it is part of message
527525
ws_bt_ie_t ws_bt;
528526
if (ws_wh_bt_read(ie_ext->headerIeList, ie_ext->headerIeListLength, &ws_bt)) {
529527
ws_neighbor_class_neighbor_broadcast_time_info_update(neighbor_info.ws_neighbor, &ws_bt, data->timestamp);
530528
if (neighbor_info.neighbor->link_role == PRIORITY_PARENT_NEIGHBOUR) {
531529
// We have broadcast schedule set up set the broadcast parent schedule
532-
ns_fhss_ws_set_parent(interface->ws_info->fhss_api, neighbor_info.neighbor->mac64, &neighbor_info.ws_neighbor->fhss_data.bc_timing_info);
530+
ns_fhss_ws_set_parent(interface->ws_info->fhss_api, neighbor_info.neighbor->mac64, &neighbor_info.ws_neighbor->fhss_data.bc_timing_info, false);
533531
}
534532
}
535533

source/Service_Libs/fhss/fhss_configuration_interface.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,13 @@ fhss_api_t *ns_fhss_ws_create(const fhss_ws_configuration_t *fhss_configuration,
6262
return this;
6363
}
6464

65-
int ns_fhss_ws_set_parent(const fhss_api_t *fhss_api, const uint8_t eui64[8], const broadcast_timing_info_t *bc_timing_info)
65+
int ns_fhss_ws_set_parent(const fhss_api_t *fhss_api, const uint8_t eui64[8], const broadcast_timing_info_t *bc_timing_info, const bool force_synch)
6666
{
6767
fhss_structure_t *fhss_structure = fhss_get_object_with_api(fhss_api);
6868
if (!fhss_structure || !eui64 || !bc_timing_info) {
6969
return -1;
7070
}
71-
return fhss_ws_set_parent(fhss_structure, eui64, bc_timing_info);
71+
return fhss_ws_set_parent(fhss_structure, eui64, bc_timing_info, force_synch);
7272
}
7373

7474
int ns_fhss_ws_remove_parent(const fhss_api_t *fhss_api, const uint8_t eui64[8])

source/Service_Libs/fhss/fhss_ws.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ fhss_structure_t *fhss_ws_enable(fhss_api_t *fhss_api, const fhss_ws_configurati
9191
fhss_struct->number_of_channels = channel_count;
9292
fhss_struct->own_hop = 0xff;
9393
fhss_struct->rx_channel = fhss_configuration->unicast_fixed_channel;
94+
fhss_struct->ws->min_synch_interval = DEFAULT_MIN_SYNCH_INTERVAL;
9495
fhss_set_txrx_slot_length(fhss_struct);
9596
ns_list_init(&fhss_struct->fhss_failed_tx_list);
9697
return fhss_struct;
@@ -657,7 +658,7 @@ int fhss_ws_set_callbacks(fhss_structure_t *fhss_structure)
657658
return 0;
658659
}
659660

660-
int fhss_ws_set_parent(fhss_structure_t *fhss_structure, const uint8_t eui64[8], const broadcast_timing_info_t *bc_timing_info)
661+
int fhss_ws_set_parent(fhss_structure_t *fhss_structure, const uint8_t eui64[8], const broadcast_timing_info_t *bc_timing_info, const bool force_synch)
661662
{
662663
(void) eui64;
663664
if (!fhss_structure->ws) {
@@ -666,6 +667,10 @@ int fhss_ws_set_parent(fhss_structure_t *fhss_structure, const uint8_t eui64[8],
666667
if (!bc_timing_info->broadcast_interval || !bc_timing_info->broadcast_dwell_interval) {
667668
return -1;
668669
}
670+
if ((((uint32_t)fhss_structure->ws->min_synch_interval*1000000) > (fhss_structure->callbacks.read_timestamp(fhss_structure->fhss_api) - fhss_structure->ws->synchronization_time)) && !force_synch) {
671+
return 0;
672+
}
673+
fhss_structure->ws->synchronization_time = fhss_structure->callbacks.read_timestamp(fhss_structure->fhss_api);
669674
platform_enter_critical();
670675
fhss_stop_timer(fhss_structure, fhss_broadcast_handler);
671676
uint32_t time_from_reception_ms = (fhss_structure->callbacks.read_timestamp(fhss_structure->fhss_api) - bc_timing_info->bt_rx_timestamp)/1000;

source/Service_Libs/fhss/fhss_ws.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,18 @@
2323
#define WS_NUMBER_OF_CHANNEL_RETRIES 4
2424
//TX/RX slot length in milliseconds
2525
#define WS_MAX_TXRX_SLOT_LEN_MS 100
26+
// Default minimum broadcast synchronization interval in seconds
27+
#define DEFAULT_MIN_SYNCH_INTERVAL 60
2628
typedef struct fhss_ws fhss_ws_t;
2729

2830
struct fhss_ws
2931
{
3032
uint8_t bc_channel;
3133
uint16_t uc_slot;
3234
uint16_t bc_slot;
35+
uint16_t min_synch_interval;
3336
uint32_t txrx_slot_length_ms;
37+
uint32_t synchronization_time;
3438
bool unicast_timer_running;
3539
bool is_on_bc_channel;
3640
struct fhss_ws_configuration fhss_configuration;
@@ -40,7 +44,7 @@ struct fhss_ws
4044

4145
fhss_structure_t *fhss_ws_enable(fhss_api_t *fhss_api, const fhss_ws_configuration_t *fhss_configuration, const fhss_timer_t *fhss_timer);
4246
int fhss_ws_set_callbacks(fhss_structure_t *fhss_structure);
43-
int fhss_ws_set_parent(fhss_structure_t *fhss_structure, const uint8_t eui64[8], const broadcast_timing_info_t *bc_timing_info);
47+
int fhss_ws_set_parent(fhss_structure_t *fhss_structure, const uint8_t eui64[8], const broadcast_timing_info_t *bc_timing_info, const bool force_synch);
4448
int fhss_ws_remove_parent(fhss_structure_t *fhss_structure, const uint8_t eui64[8]);
4549
int fhss_ws_configuration_set(fhss_structure_t *fhss_structure, const fhss_ws_configuration_t *fhss_configuration);
4650
int fhss_ws_set_hop_count(fhss_structure_t *fhss_structure, const uint8_t hop_count);

source/Service_Libs/fhss/fhss_ws_empty_functions.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ int fhss_ws_set_callbacks(fhss_structure_t *fhss_structure)
4646
return -1;
4747
}
4848

49-
int fhss_ws_set_parent(fhss_structure_t *fhss_structure, const uint8_t eui64[8], const broadcast_timing_info_t *bc_timing_info)
49+
int fhss_ws_set_parent(fhss_structure_t *fhss_structure, const uint8_t eui64[8], const broadcast_timing_info_t *bc_timing_info, const bool force_synch)
5050
{
5151
(void) fhss_structure;
5252
(void) eui64;

test/nanostack/unittest/service_libs/fhss_config/test_fhss_config.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,12 +127,12 @@ bool test_ns_fhss_ws_set_parent()
127127
broadcast_timing_info_t bc_timing_info;
128128
// Test without api
129129
fhss_common_stub.bool_value = false;
130-
if (-1 != ns_fhss_ws_set_parent(NULL, dest_address, &bc_timing_info)) {
130+
if (-1 != ns_fhss_ws_set_parent(NULL, dest_address, &bc_timing_info, false)) {
131131
return false;
132132
}
133133
// Test success
134134
fhss_common_stub.bool_value = true;
135-
if (0 != ns_fhss_ws_set_parent(&api, dest_address, &bc_timing_info)) {
135+
if (0 != ns_fhss_ws_set_parent(&api, dest_address, &bc_timing_info, false)) {
136136
return false;
137137
}
138138
return true;

test/nanostack/unittest/service_libs/fhss_ws/test_fhss_ws.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -624,7 +624,7 @@ bool test_fhss_ws_set_parent()
624624
// Test without WS enabled FHSS
625625
fhss_structure_t fake_fhss_structure;
626626
memset(&fake_fhss_structure, 0, sizeof(fhss_structure_t));
627-
if (-1 != fhss_ws_set_parent(&fake_fhss_structure, dest_address, &bc_timing_info)) {
627+
if (-1 != fhss_ws_set_parent(&fake_fhss_structure, dest_address, &bc_timing_info, true)) {
628628
return false;
629629
}
630630

@@ -637,7 +637,7 @@ bool test_fhss_ws_set_parent()
637637
bc_timing_info.broadcast_schedule_id = 1;
638638
bc_timing_info.broadcast_slot = 10;
639639
bc_timing_info.bt_rx_timestamp = 100000;
640-
if (0 != fhss_ws_set_parent(&fhss_common_stub.fhss_struct, dest_address, &bc_timing_info)
640+
if (0 != fhss_ws_set_parent(&fhss_common_stub.fhss_struct, dest_address, &bc_timing_info, true)
641641
|| (fhss_common_stub.fhss_struct.ws->parent_bc_info->broadcast_channel_function != WS_TR51CF)
642642
|| (fhss_common_stub.fhss_struct.ws->parent_bc_info->broadcast_dwell_interval != 250)
643643
|| (fhss_common_stub.fhss_struct.ws->parent_bc_info->broadcast_interval != 1000)

test/nanostack/unittest/stub/fhss_config_stub.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ fhss_api_t *ns_fhss_create(const fhss_configuration_t *fhss_configuration, const
9191
return &fhss_config_stub.fhss_api_ptr;
9292
}
9393

94-
int ns_fhss_ws_set_parent(const fhss_api_t *fhss_api, const uint8_t eui64[8], const broadcast_timing_info_t *bc_timing_info)
94+
int ns_fhss_ws_set_parent(const fhss_api_t *fhss_api, const uint8_t eui64[8], const broadcast_timing_info_t *bc_timing_info, const bool force_synch)
9595
{
9696
return 0;
9797
}

test/nanostack/unittest/stub/fhss_ws_stub.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ fhss_structure_t *fhss_ws_enable(fhss_api_t *fhss_api, const fhss_ws_configurati
3939
return &fhss_ws_stub.fhss_struct;
4040
}
4141

42-
int fhss_ws_set_parent(fhss_structure_t *fhss_structure, uint8_t eui64[8], broadcast_timing_info_t *bc_timing_info)
42+
int fhss_ws_set_parent(fhss_structure_t *fhss_structure, uint8_t eui64[8], broadcast_timing_info_t *bc_timing_info, const bool force_synch)
4343
{
4444
return 0;
4545
}

0 commit comments

Comments
 (0)