@@ -182,7 +182,8 @@ static fhss_ws_neighbor_timing_info_t *ws_get_neighbor_info(const fhss_api_t *ap
182
182
static void ws_bootstrap_llc_hopping_update (struct protocol_interface_info_entry * cur , const fhss_ws_configuration_t * fhss_configuration )
183
183
{
184
184
memcpy (cur -> ws_info -> hopping_schdule .channel_mask , fhss_configuration -> channel_mask , sizeof (uint32_t ) * 8 );
185
- cur -> ws_info -> hopping_schdule .channel_function = fhss_configuration -> ws_uc_channel_function ;
185
+ cur -> ws_info -> hopping_schdule .uc_channel_function = fhss_configuration -> ws_uc_channel_function ;
186
+ cur -> ws_info -> hopping_schdule .bc_channel_function = fhss_configuration -> ws_bc_channel_function ;
186
187
cur -> ws_info -> hopping_schdule .fhss_bc_dwell_interval = fhss_configuration -> fhss_bc_dwell_interval ;
187
188
cur -> ws_info -> hopping_schdule .fhss_broadcast_interval = fhss_configuration -> fhss_broadcast_interval ;
188
189
cur -> ws_info -> hopping_schdule .fhss_uc_dwell_interval = fhss_configuration -> fhss_uc_dwell_interval ;
@@ -206,6 +207,7 @@ static int8_t ws_fhss_initialize(protocol_interface_info_entry_t *cur)
206
207
207
208
fhss_configuration .fhss_uc_dwell_interval = cur -> ws_info -> fhss_uc_dwell_interval ;
208
209
fhss_configuration .ws_uc_channel_function = cur -> ws_info -> fhss_uc_channel_function ;
210
+ fhss_configuration .ws_bc_channel_function = cur -> ws_info -> fhss_bc_channel_function ;
209
211
fhss_configuration .fhss_bc_dwell_interval = cur -> ws_info -> fhss_bc_dwell_interval ;
210
212
fhss_configuration .fhss_broadcast_interval = cur -> ws_info -> fhss_bc_interval ;
211
213
@@ -224,6 +226,7 @@ static int8_t ws_fhss_initialize(protocol_interface_info_entry_t *cur)
224
226
}
225
227
memcpy (cur -> ws_info -> fhss_channel_mask , fhss_configuration -> channel_mask , sizeof (uint32_t ) * 8 );
226
228
cur -> ws_info -> fhss_uc_channel_function = fhss_configuration -> ws_uc_channel_function ;
229
+ cur -> ws_info -> fhss_bc_channel_function = fhss_configuration -> ws_bc_channel_function ;
227
230
cur -> ws_info -> fhss_bc_dwell_interval = fhss_configuration -> fhss_bc_dwell_interval ;
228
231
cur -> ws_info -> fhss_bc_interval = fhss_configuration -> fhss_broadcast_interval ;
229
232
cur -> ws_info -> fhss_uc_dwell_interval = fhss_configuration -> fhss_uc_dwell_interval ;
@@ -234,10 +237,11 @@ static int8_t ws_fhss_set_defaults(protocol_interface_info_entry_t *cur, fhss_ws
234
237
{
235
238
fhss_configuration -> fhss_uc_dwell_interval = cur -> ws_info -> fhss_uc_dwell_interval ;
236
239
fhss_configuration -> ws_uc_channel_function = cur -> ws_info -> fhss_uc_channel_function ;
237
- // TODO: Just temporarily using hard coded broadcast channel function
238
- fhss_configuration -> ws_bc_channel_function = WS_DH1CF ;
240
+ fhss_configuration -> ws_bc_channel_function = cur -> ws_info -> fhss_bc_channel_function ;
239
241
fhss_configuration -> fhss_bc_dwell_interval = cur -> ws_info -> fhss_bc_dwell_interval ;
240
242
fhss_configuration -> fhss_broadcast_interval = cur -> ws_info -> fhss_bc_interval ;
243
+ fhss_configuration -> unicast_fixed_channel = cur -> ws_info -> hopping_schdule .uc_fixed_channel ;
244
+ fhss_configuration -> broadcast_fixed_channel = cur -> ws_info -> hopping_schdule .bc_fixed_channel ;
241
245
ws_generate_channel_list (fhss_configuration -> channel_mask , cur -> ws_info -> hopping_schdule .number_of_channels , cur -> ws_info -> hopping_schdule .regulatory_domain );
242
246
243
247
// using bitwise AND operation for user set channel mask to remove channels not allowed in this device
@@ -270,12 +274,15 @@ static int8_t ws_fhss_discovery_configure(protocol_interface_info_entry_t *cur)
270
274
271
275
fhss_configuration .fhss_uc_dwell_interval = 0 ;
272
276
fhss_configuration .ws_uc_channel_function = WS_FIXED_CHANNEL ;
277
+ fhss_configuration .ws_bc_channel_function = WS_FIXED_CHANNEL ;
273
278
fhss_configuration .fhss_bc_dwell_interval = 0 ;
274
279
fhss_configuration .fhss_broadcast_interval = 0 ;
275
- cur -> ws_info -> hopping_schdule .fixed_channel = randLIB_get_random_in_range (0 ,cur -> ws_info -> hopping_schdule .number_of_channels - 1 );
280
+ cur -> ws_info -> hopping_schdule .uc_fixed_channel = randLIB_get_random_in_range (0 ,cur -> ws_info -> hopping_schdule .number_of_channels - 1 );
281
+ cur -> ws_info -> hopping_schdule .bc_fixed_channel = randLIB_get_random_in_range (0 ,cur -> ws_info -> hopping_schdule .number_of_channels - 1 );
276
282
memset (fhss_configuration .channel_mask , 0 , sizeof (uint32_t ) * 8 );
277
- channel_list_set_channel (fhss_configuration .channel_mask , cur -> ws_info -> hopping_schdule .fixed_channel , true);
278
-
283
+ channel_list_set_channel (fhss_configuration .channel_mask , cur -> ws_info -> hopping_schdule .uc_fixed_channel , true);
284
+ fhss_configuration .unicast_fixed_channel = cur -> ws_info -> hopping_schdule .uc_fixed_channel ;
285
+ fhss_configuration .broadcast_fixed_channel = cur -> ws_info -> hopping_schdule .bc_fixed_channel ;
279
286
ns_fhss_ws_configuration_set (cur -> ws_info -> fhss_api ,& fhss_configuration );
280
287
ws_bootstrap_llc_hopping_update (cur ,& fhss_configuration );
281
288
@@ -313,17 +320,16 @@ static void ws_bootstrap_primary_parent_set(struct protocol_interface_info_entry
313
320
314
321
ws_fhss_set_defaults (cur , & fhss_configuration );
315
322
316
- // Learning unicast network configuration
317
- fhss_configuration .ws_uc_channel_function = neighbor_info -> ws_neighbor -> fhss_data .uc_timing_info . unicast_channel_function ;
318
- if (fhss_configuration .ws_uc_channel_function == WS_FIXED_CHANNEL ) {
319
- cur -> ws_info -> hopping_schdule .fixed_channel = neighbor_info -> ws_neighbor -> fhss_data .uc_timing_info .fixed_channel ;
323
+ // Learning broadcast network configuration
324
+ fhss_configuration .ws_bc_channel_function = neighbor_info -> ws_neighbor -> fhss_data .bc_timing_info . broadcast_channel_function ;
325
+ if (fhss_configuration .ws_bc_channel_function == WS_FIXED_CHANNEL ) {
326
+ cur -> ws_info -> hopping_schdule .bc_fixed_channel = neighbor_info -> ws_neighbor -> fhss_data .bc_timing_info .fixed_channel ;
320
327
}
321
- /* Learning different unicast is not working currently at fhss network follows border router
322
- */
323
- // Learn broadcast information from selected parent
324
328
fhss_configuration .bsi = neighbor_info -> ws_neighbor -> fhss_data .bc_timing_info .broadcast_schedule_id ;
325
329
fhss_configuration .fhss_bc_dwell_interval = neighbor_info -> ws_neighbor -> fhss_data .bc_timing_info .broadcast_dwell_interval ;
326
330
fhss_configuration .fhss_broadcast_interval = neighbor_info -> ws_neighbor -> fhss_data .bc_timing_info .broadcast_interval ;
331
+ fhss_configuration .unicast_fixed_channel = cur -> ws_info -> hopping_schdule .uc_fixed_channel ;
332
+ fhss_configuration .broadcast_fixed_channel = cur -> ws_info -> hopping_schdule .bc_fixed_channel ;
327
333
ns_fhss_ws_configuration_set (cur -> ws_info -> fhss_api , & fhss_configuration );
328
334
329
335
if (fhss_configuration .fhss_bc_dwell_interval && fhss_configuration .fhss_broadcast_interval ) {
@@ -1152,7 +1158,7 @@ static void ws_bootstrap_fhss_activate(protocol_interface_info_entry_t *cur)
1152
1158
tr_debug ("MAC init" );
1153
1159
mac_helper_pib_boolean_set (cur , macRxOnWhenIdle , true);
1154
1160
cur -> lowpan_info &= ~INTERFACE_NWK_CONF_MAC_RX_OFF_IDLE ;
1155
- ws_bootstrap_mac_activate (cur , cur -> ws_info -> hopping_schdule .fixed_channel , cur -> ws_info -> network_pan_id , true);
1161
+ ws_bootstrap_mac_activate (cur , cur -> ws_info -> hopping_schdule .uc_fixed_channel , cur -> ws_info -> network_pan_id , true);
1156
1162
return ;
1157
1163
}
1158
1164
@@ -1555,7 +1561,8 @@ static void ws_bootstrap_event_handler(arm_event_s *event)
1555
1561
if (cur -> bootsrap_mode == ARM_NWK_BOOTSRAP_MODE_6LoWPAN_BORDER_ROUTER ) {
1556
1562
tr_debug ("Border router start network" );
1557
1563
// Randomize fixed channel. Only used if channel plan is fixed
1558
- cur -> ws_info -> hopping_schdule .fixed_channel = randLIB_get_random_in_range (0 ,cur -> ws_info -> hopping_schdule .number_of_channels - 1 );
1564
+ cur -> ws_info -> hopping_schdule .uc_fixed_channel = randLIB_get_random_in_range (0 ,cur -> ws_info -> hopping_schdule .number_of_channels - 1 );
1565
+ cur -> ws_info -> hopping_schdule .bc_fixed_channel = randLIB_get_random_in_range (0 ,cur -> ws_info -> hopping_schdule .number_of_channels - 1 );
1559
1566
cur -> ws_info -> network_pan_id = randLIB_get_random_in_range (0 ,0xfffd );
1560
1567
cur -> ws_info -> pan_information .pan_size = 0 ;
1561
1568
cur -> ws_info -> pan_information .pan_version = randLIB_get_random_in_range (0 ,0xffff );
0 commit comments