Skip to content

Commit e049db7

Browse files
authored
Merge pull request #5508 from dhalbert/arg-fixes
Fix _bleio.start_advertising arg check; add doc to SocketPool.socket()
2 parents de45382 + c933f26 commit e049db7

File tree

3 files changed

+25
-9
lines changed

3 files changed

+25
-9
lines changed

devices/ble_hci/common-hal/_bleio/Adapter.c

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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
));

shared-bindings/_bleio/Adapter.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ STATIC mp_obj_t bleio_adapter_start_advertising(mp_uint_t n_args, const mp_obj_t
218218
{ MP_QSTR_timeout, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} },
219219
{ MP_QSTR_interval, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
220220
{ MP_QSTR_tx_power, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} },
221-
{ MP_QSTR_directed_to, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
221+
{ MP_QSTR_directed_to, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
222222
};
223223

224224
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
@@ -250,9 +250,12 @@ STATIC mp_obj_t bleio_adapter_start_advertising(mp_uint_t n_args, const mp_obj_t
250250
mp_raise_bleio_BluetoothError(translate("Cannot have scan responses for extended, connectable advertisements."));
251251
}
252252

253-
const bleio_address_obj_t *address = mp_arg_validate_type(args[ARG_directed_to].u_obj, &bleio_address_type, MP_QSTR_directed_to);
254-
if (address != NULL && !connectable) {
255-
mp_raise_bleio_BluetoothError(translate("Only connectable advertisements can be directed"));
253+
const bleio_address_obj_t *address = NULL;
254+
if (args[ARG_directed_to].u_obj != mp_const_none) {
255+
if (!connectable) {
256+
mp_raise_bleio_BluetoothError(translate("Only connectable advertisements can be directed"));
257+
}
258+
address = mp_arg_validate_type(args[ARG_directed_to].u_obj, &bleio_address_type, MP_QSTR_directed_to);
256259
}
257260

258261
common_hal_bleio_adapter_start_advertising(self, connectable, anonymous, timeout, interval,

shared-bindings/socketpool/SocketPool.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,11 @@ STATIC mp_obj_t socketpool_socketpool_make_new(const mp_obj_type_t *type, size_t
6666
//| """Create a new socket
6767
//|
6868
//| :param ~int family: AF_INET or AF_INET6
69-
//| :param ~int type: SOCK_STREAM, SOCK_DGRAM or SOCK_RAW"""
69+
//| :param ~int type: SOCK_STREAM, SOCK_DGRAM or SOCK_RAW
70+
//|
71+
//| The ``proto`` (protocol) and ``fileno`` arguments available in ``socket.socket()``
72+
//| in CPython are not supported.
73+
//| """
7074
//| ...
7175
//|
7276
STATIC mp_obj_t socketpool_socketpool_socket(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {

0 commit comments

Comments
 (0)