Skip to content

Commit

Permalink
Merge ac9fb84 into da8aad1
Browse files Browse the repository at this point in the history
  • Loading branch information
jonathanhogg committed Jun 11, 2021
2 parents da8aad1 + ac9fb84 commit 3b4e0e3
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 2 deletions.
7 changes: 6 additions & 1 deletion docs/library/ubluetooth.rst
Expand Up @@ -365,7 +365,12 @@ A central device can connect to peripherals that it has discovered using the obs

See :meth:`gap_scan <BLE.gap_scan>` for details about address types.

On success, the ``_IRQ_PERIPHERAL_CONNECT`` event will be raised.
To cancel an outstanding connection attempt early, call
``gap_connect(None)``.

On success, the ``_IRQ_PERIPHERAL_CONNECT`` event will be raised. If
cancelling a connection attempt, the ``_IRQ_PERIPHERAL_DISCONNECT`` event
will be raised.


Peripheral Role
Expand Down
5 changes: 5 additions & 0 deletions extmod/btstack/modbluetooth_btstack.c
Expand Up @@ -1234,6 +1234,11 @@ int mp_bluetooth_gap_peripheral_connect(uint8_t addr_type, const uint8_t *addr,
return btstack_error_to_errno(gap_connect(btstack_addr, addr_type));
}

int mp_bluetooth_gap_peripheral_connect_cancel(void) {
DEBUG_printf("mp_bluetooth_gap_peripheral_connect_cancel\n");
return btstack_error_to_errno(gap_connect_cancel());
}

#endif // MICROPY_PY_BLUETOOTH_ENABLE_CENTRAL_MODE

#if MICROPY_PY_BLUETOOTH_ENABLE_GATT_CLIENT
Expand Down
9 changes: 8 additions & 1 deletion extmod/modbluetooth.c
Expand Up @@ -630,6 +630,13 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(bluetooth_ble_gatts_register_services_obj, blue

#if MICROPY_PY_BLUETOOTH_ENABLE_CENTRAL_MODE
STATIC mp_obj_t bluetooth_ble_gap_connect(size_t n_args, const mp_obj_t *args) {
if (n_args == 2) {
if (args[1] == mp_const_none) {
int err = mp_bluetooth_gap_peripheral_connect_cancel();
return bluetooth_handle_errno(err);
}
mp_raise_TypeError(MP_ERROR_TEXT("None or addr_type and addr required"));
}
uint8_t addr_type = mp_obj_get_int(args[1]);
mp_buffer_info_t bufinfo = {0};
mp_get_buffer_raise(args[2], &bufinfo, MP_BUFFER_READ);
Expand All @@ -644,7 +651,7 @@ STATIC mp_obj_t bluetooth_ble_gap_connect(size_t n_args, const mp_obj_t *args) {
int err = mp_bluetooth_gap_peripheral_connect(addr_type, bufinfo.buf, scan_duration_ms);
return bluetooth_handle_errno(err);
}
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(bluetooth_ble_gap_connect_obj, 3, 4, bluetooth_ble_gap_connect);
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(bluetooth_ble_gap_connect_obj, 2, 4, bluetooth_ble_gap_connect);

STATIC mp_obj_t bluetooth_ble_gap_scan(size_t n_args, const mp_obj_t *args) {
// Default is indefinite scan, with the NimBLE "background scan" interval and window.
Expand Down
4 changes: 4 additions & 0 deletions extmod/modbluetooth.h
Expand Up @@ -374,6 +374,10 @@ int mp_bluetooth_gap_peripheral_connect(uint8_t addr_type, const uint8_t *addr,
#endif

#if MICROPY_PY_BLUETOOTH_ENABLE_GATT_CLIENT

// Cancel in-progress connection to a peripheral.
int mp_bluetooth_gap_peripheral_connect_cancel(void);

// Find all primary services on the connected peripheral.
int mp_bluetooth_gattc_discover_primary_services(uint16_t conn_handle, const mp_obj_bluetooth_uuid_t *uuid);

Expand Down
9 changes: 9 additions & 0 deletions extmod/nimble/modbluetooth_nimble.c
Expand Up @@ -1220,6 +1220,15 @@ int mp_bluetooth_gap_peripheral_connect(uint8_t addr_type, const uint8_t *addr,
return ble_hs_err_to_errno(err);
}

int mp_bluetooth_gap_peripheral_connect_cancel(void) {
DEBUG_printf("mp_bluetooth_gap_peripheral_connect_cancel\n");
if (!mp_bluetooth_is_active()) {
return ERRNO_BLUETOOTH_NOT_ACTIVE;
}
int err = ble_gap_conn_cancel();
return ble_hs_err_to_errno(err);
}

STATIC int ble_gattc_service_cb(uint16_t conn_handle, const struct ble_gatt_error *error, const struct ble_gatt_svc *service, void *arg) {
DEBUG_printf("ble_gattc_service_cb: conn_handle=%d status=%d start_handle=%d\n", conn_handle, error->status, service ? service->start_handle : -1);
if (!mp_bluetooth_is_active()) {
Expand Down

0 comments on commit 3b4e0e3

Please sign in to comment.