@@ -885,6 +885,7 @@ void bt_hci_le_per_adv_sync_established(struct net_buf *buf)
885
885
struct bt_le_per_adv_sync_synced_info sync_info ;
886
886
struct bt_le_per_adv_sync * pending_per_adv_sync ;
887
887
struct bt_le_per_adv_sync_cb * listener ;
888
+ bt_addr_le_t id_addr ;
888
889
bool unexpected_evt ;
889
890
int err ;
890
891
@@ -911,11 +912,21 @@ void bt_hci_le_per_adv_sync_established(struct net_buf *buf)
911
912
return ;
912
913
}
913
914
915
+ if (evt -> adv_addr .type == BT_ADDR_LE_PUBLIC_ID ||
916
+ evt -> adv_addr .type == BT_ADDR_LE_RANDOM_ID ) {
917
+ bt_addr_le_copy (& id_addr , & evt -> adv_addr );
918
+ id_addr .type -= BT_ADDR_LE_PUBLIC_ID ;
919
+ } else {
920
+ bt_addr_le_copy (& id_addr ,
921
+ bt_lookup_id_addr (BT_ID_DEFAULT ,
922
+ & evt -> adv_addr ));
923
+ }
924
+
914
925
if (!pending_per_adv_sync ||
915
926
(!atomic_test_bit (pending_per_adv_sync -> flags ,
916
927
BT_PER_ADV_SYNC_SYNCING_USE_LIST ) &&
917
928
((pending_per_adv_sync -> sid != evt -> sid ) ||
918
- !bt_addr_le_eq (& pending_per_adv_sync -> addr , & evt -> adv_addr )))) {
929
+ !bt_addr_le_eq (& pending_per_adv_sync -> addr , & id_addr )))) {
919
930
LOG_ERR ("Unexpected per adv sync established event" );
920
931
/* Request terminate of pending periodic advertising in controller */
921
932
per_adv_sync_terminate (sys_le16_to_cpu (evt -> handle ));
@@ -936,7 +947,7 @@ void bt_hci_le_per_adv_sync_established(struct net_buf *buf)
936
947
* Already set if not using the sync list
937
948
*/
938
949
bt_addr_le_copy (& pending_per_adv_sync -> addr ,
939
- & evt -> adv_addr );
950
+ & id_addr );
940
951
pending_per_adv_sync -> sid = evt -> sid ;
941
952
}
942
953
@@ -968,7 +979,7 @@ void bt_hci_le_per_adv_sync_established(struct net_buf *buf)
968
979
if (atomic_test_bit (pending_per_adv_sync -> flags ,
969
980
BT_PER_ADV_SYNC_SYNCING_USE_LIST )) {
970
981
/* Now we know which address and SID we synchronized to. */
971
- bt_addr_le_copy (& pending_per_adv_sync -> addr , & evt -> adv_addr );
982
+ bt_addr_le_copy (& pending_per_adv_sync -> addr , & id_addr );
972
983
pending_per_adv_sync -> sid = evt -> sid ;
973
984
974
985
/* Translate "enhanced" identity address type to normal one */
@@ -1018,6 +1029,7 @@ void bt_hci_le_past_received(struct net_buf *buf)
1018
1029
struct bt_le_per_adv_sync_synced_info sync_info ;
1019
1030
struct bt_le_per_adv_sync_cb * listener ;
1020
1031
struct bt_le_per_adv_sync * per_adv_sync ;
1032
+ bt_addr_le_t id_addr ;
1021
1033
1022
1034
if (evt -> status ) {
1023
1035
/* No sync created, don't notify app */
@@ -1043,11 +1055,20 @@ void bt_hci_le_past_received(struct net_buf *buf)
1043
1055
1044
1056
atomic_set_bit (per_adv_sync -> flags , BT_PER_ADV_SYNC_SYNCED );
1045
1057
1058
+ if (evt -> addr .type == BT_ADDR_LE_PUBLIC_ID ||
1059
+ evt -> addr .type == BT_ADDR_LE_RANDOM_ID ) {
1060
+ bt_addr_le_copy (& id_addr , & evt -> addr );
1061
+ id_addr .type -= BT_ADDR_LE_PUBLIC_ID ;
1062
+ } else {
1063
+ bt_addr_le_copy (& id_addr ,
1064
+ bt_lookup_id_addr (BT_ID_DEFAULT , & evt -> addr ));
1065
+ }
1066
+
1046
1067
per_adv_sync -> handle = sys_le16_to_cpu (evt -> sync_handle );
1047
1068
per_adv_sync -> interval = sys_le16_to_cpu (evt -> interval );
1048
1069
per_adv_sync -> clock_accuracy = sys_le16_to_cpu (evt -> clock_accuracy );
1049
1070
per_adv_sync -> phy = evt -> phy ;
1050
- bt_addr_le_copy (& per_adv_sync -> addr , & evt -> addr );
1071
+ bt_addr_le_copy (& per_adv_sync -> addr , & id_addr );
1051
1072
per_adv_sync -> sid = evt -> adv_sid ;
1052
1073
1053
1074
sync_info .interval = per_adv_sync -> interval ;
0 commit comments