@@ -389,10 +389,18 @@ static void ws_bootstrap_pan_advertisement_analyse(struct protocol_interface_inf
389
389
390
390
if (ws_bootstrap_state_discovery (cur )) {
391
391
// Discovery state processing
392
+ tr_info ("potential parent addr:%s panid:%x signal:%d" , trace_array (data -> SrcAddr , 8 ),data -> SrcPANId , data -> signal_dbm );
393
+
392
394
// This parent is selected and used for authentication.
393
395
if (memcmp (cur -> ws_info -> parent_info .addr , ADDR_UNSPECIFIED ,8 ) != 0 ) {
394
396
395
- // Drop if signal quality is not good enough If we hear only one advertise any quality is now ok
397
+ // if we dont have higher than threshold signal only signal level decides parent
398
+ if (ws_neighbor_class_rssi_from_dbm_calculate (cur -> ws_info -> parent_info .signal_dbm ) < (CAND_PARENT_THRESHOLD + CAND_PARENT_HYSTERISIS ) &&
399
+ ws_neighbor_class_rssi_from_dbm_calculate (data -> signal_dbm ) > ws_neighbor_class_rssi_from_dbm_calculate (cur -> ws_info -> parent_info .signal_dbm )) {
400
+ // automatically select the best quality link from the below threshold
401
+ goto parent_selected ;
402
+ }
403
+ // Drop if signal quality is not good enough
396
404
if (ws_neighbor_class_rssi_from_dbm_calculate (data -> signal_dbm ) < (CAND_PARENT_THRESHOLD + CAND_PARENT_HYSTERISIS )) {
397
405
tr_info ("EAPOL target dropped Link quality too low" );
398
406
return ;
@@ -412,6 +420,7 @@ static void ws_bootstrap_pan_advertisement_analyse(struct protocol_interface_inf
412
420
tr_info ("EAPOL target dropped Lower link quality" );
413
421
return ;
414
422
}
423
+
415
424
} else {
416
425
// First advertise heard
417
426
@@ -420,6 +429,8 @@ static void ws_bootstrap_pan_advertisement_analyse(struct protocol_interface_inf
420
429
cur -> bootsrap_state_machine_cnt += trickle_params_pan_configuration .Imin * 10 + randLIB_get_8bit () % 50 ;
421
430
}
422
431
}
432
+
433
+ parent_selected :
423
434
// Parent valid store information
424
435
cur -> ws_info -> parent_info .ws_utt = * ws_utt ;
425
436
// Saved from unicast IE
@@ -435,7 +446,7 @@ static void ws_bootstrap_pan_advertisement_analyse(struct protocol_interface_inf
435
446
cur -> ws_info -> parent_info .signal_dbm = data -> signal_dbm ;
436
447
memcpy (cur -> ws_info -> parent_info .addr , data -> SrcAddr ,8 );
437
448
438
- tr_info ("New possible parent found addr:%s" , trace_array (cur -> ws_info -> parent_info .addr , 8 ));
449
+ tr_info ("New parent addr:%s panid:%x signal:%d " , trace_array (cur -> ws_info -> parent_info .addr , 8 ), cur -> ws_info -> parent_info . pan_id , cur -> ws_info -> parent_info . signal_dbm );
439
450
return ;
440
451
}
441
452
// Active state processing
0 commit comments