@@ -666,8 +666,17 @@ uint32_t _common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self,
666666 }
667667 }
668668
669- // Peer address, which we don't use (no directed advertising).
670- bt_addr_le_t empty_addr = { 0 };
669+ // Peer address, for directed advertising
670+ bt_addr_le_t peer_addr = { 0 };
671+
672+ // Copy peer address, if supplied.
673+ if (directed_to ) {
674+ mp_buffer_info_t bufinfo ;
675+ if (mp_get_buffer (directed_to -> bytes , & bufinfo , MP_BUFFER_READ )) {
676+ peer_addr .type = directed_to -> type ;
677+ memcpy (& peer_addr .a .val , bufinfo .buf , sizeof (peer_addr .a .val ));
678+ }
679+ }
671680
672681 bool extended =
673682 advertising_data_len > self -> max_adv_data_len || scan_response_data_len > self -> max_adv_data_len ;
@@ -696,7 +705,7 @@ uint32_t _common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self,
696705 interval_units , // max interval
697706 0b111 , // channel map: channels 37, 38, 39
698707 anonymous ? BT_ADDR_LE_RANDOM : BT_ADDR_LE_PUBLIC ,
699- & empty_addr , // peer_addr,
708+ & peer_addr , // peer_addr,
700709 0x00 , // filter policy: no filter
701710 DEFAULT_TX_POWER ,
702711 BT_HCI_LE_EXT_SCAN_PHY_1M , // Secondary PHY to use
@@ -746,7 +755,7 @@ uint32_t _common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self,
746755 interval_units , // max interval
747756 adv_type ,
748757 anonymous ? BT_ADDR_LE_RANDOM : BT_ADDR_LE_PUBLIC ,
749- & empty_addr ,
758+ & peer_addr ,
750759 0b111 , // channel map: channels 37, 38, 39
751760 0x00 // filter policy: no filter
752761 ));
0 commit comments