summaryrefslogtreecommitdiff
path: root/shared-bindings/bleio
diff options
context:
space:
mode:
Diffstat (limited to 'shared-bindings/bleio')
-rw-r--r--shared-bindings/bleio/Adapter.c125
-rw-r--r--shared-bindings/bleio/Adapter.h40
-rw-r--r--shared-bindings/bleio/Address.c210
-rw-r--r--shared-bindings/bleio/Address.h48
-rw-r--r--shared-bindings/bleio/Attribute.c94
-rw-r--r--shared-bindings/bleio/Attribute.h38
-rw-r--r--shared-bindings/bleio/Central.c207
-rw-r--r--shared-bindings/bleio/Central.h43
-rw-r--r--shared-bindings/bleio/Characteristic.c325
-rw-r--r--shared-bindings/bleio/Characteristic.h46
-rw-r--r--shared-bindings/bleio/CharacteristicBuffer.c252
-rw-r--r--shared-bindings/bleio/CharacteristicBuffer.h42
-rw-r--r--shared-bindings/bleio/Descriptor.c191
-rw-r--r--shared-bindings/bleio/Descriptor.h43
-rw-r--r--shared-bindings/bleio/Peripheral.c341
-rw-r--r--shared-bindings/bleio/Peripheral.h46
-rw-r--r--shared-bindings/bleio/ScanEntry.c111
-rw-r--r--shared-bindings/bleio/ScanEntry.h41
-rw-r--r--shared-bindings/bleio/Scanner.c129
-rw-r--r--shared-bindings/bleio/Scanner.h40
-rw-r--r--shared-bindings/bleio/Service.c209
-rw-r--r--shared-bindings/bleio/Service.h42
-rw-r--r--shared-bindings/bleio/UUID.c280
-rw-r--r--shared-bindings/bleio/UUID.h43
-rw-r--r--shared-bindings/bleio/__init__.c104
-rw-r--r--shared-bindings/bleio/__init__.h52
26 files changed, 0 insertions, 3142 deletions
diff --git a/shared-bindings/bleio/Adapter.c b/shared-bindings/bleio/Adapter.c
deleted file mode 100644
index 2bb7f3465..000000000
--- a/shared-bindings/bleio/Adapter.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2018 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include "py/objproperty.h"
-#include "shared-bindings/bleio/Address.h"
-#include "shared-bindings/bleio/Adapter.h"
-
-//| .. currentmodule:: bleio
-//|
-//| :class:`Adapter` --- BLE adapter information
-//| ----------------------------------------------------
-//|
-//| Get current status of the BLE adapter
-//|
-//| Usage::
-//|
-//| import bleio
-//| bleio.adapter.enabled = True
-//| print(bleio.adapter.address)
-//|
-
-//| .. class:: Adapter()
-//|
-//| You cannot create an instance of `bleio.Adapter`.
-//| Use `bleio.adapter` to access the sole instance available.
-//|
-
-//| .. attribute:: adapter.enabled
-//|
-//| State of the BLE adapter.
-//|
-STATIC mp_obj_t bleio_adapter_get_enabled(mp_obj_t self) {
- return mp_obj_new_bool(common_hal_bleio_adapter_get_enabled());
-}
-MP_DEFINE_CONST_FUN_OBJ_1(bleio_adapter_get_enabled_obj, bleio_adapter_get_enabled);
-
-static mp_obj_t bleio_adapter_set_enabled(mp_obj_t self, mp_obj_t value) {
- const bool enabled = mp_obj_is_true(value);
-
- common_hal_bleio_adapter_set_enabled(enabled);
-
- return mp_const_none;
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_2(bleio_adapter_set_enabled_obj, bleio_adapter_set_enabled);
-
-const mp_obj_property_t bleio_adapter_enabled_obj = {
- .base.type = &mp_type_property,
- .proxy = { (mp_obj_t)&bleio_adapter_get_enabled_obj,
- (mp_obj_t)&bleio_adapter_set_enabled_obj,
- (mp_obj_t)&mp_const_none_obj },
-};
-
-//| .. attribute:: adapter.address
-//|
-//| MAC address of the BLE adapter. (read-only)
-//|
-STATIC mp_obj_t bleio_adapter_get_address(mp_obj_t self) {
- return MP_OBJ_FROM_PTR(common_hal_bleio_adapter_get_address());
-
-}
-MP_DEFINE_CONST_FUN_OBJ_1(bleio_adapter_get_address_obj, bleio_adapter_get_address);
-
-const mp_obj_property_t bleio_adapter_address_obj = {
- .base.type = &mp_type_property,
- .proxy = { (mp_obj_t)&bleio_adapter_get_address_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj },
-};
-
-//| .. attribute:: adapter.default_name
-//|
-//| default_name of the BLE adapter. (read-only)
-//| The name is "CIRCUITPY" + the last four hex digits of ``adapter.address``,
-//| to make it easy to distinguish multiple CircuitPython boards.
-//|
-STATIC mp_obj_t bleio_adapter_get_default_name(mp_obj_t self) {
- return common_hal_bleio_adapter_get_default_name();
-
-}
-MP_DEFINE_CONST_FUN_OBJ_1(bleio_adapter_get_default_name_obj, bleio_adapter_get_default_name);
-
-const mp_obj_property_t bleio_adapter_default_name_obj = {
- .base.type = &mp_type_property,
- .proxy = { (mp_obj_t)&bleio_adapter_get_default_name_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj },
-};
-
-STATIC const mp_rom_map_elem_t bleio_adapter_locals_dict_table[] = {
- { MP_ROM_QSTR(MP_QSTR_enabled), MP_ROM_PTR(&bleio_adapter_enabled_obj) },
- { MP_ROM_QSTR(MP_QSTR_address), MP_ROM_PTR(&bleio_adapter_address_obj) },
- { MP_ROM_QSTR(MP_QSTR_default_name), MP_ROM_PTR(&bleio_adapter_default_name_obj) },
-};
-
-STATIC MP_DEFINE_CONST_DICT(bleio_adapter_locals_dict, bleio_adapter_locals_dict_table);
-
-const mp_obj_type_t bleio_adapter_type = {
- .base = { &mp_type_type },
- .name = MP_QSTR_Adapter,
- .locals_dict = (mp_obj_t)&bleio_adapter_locals_dict,
-};
diff --git a/shared-bindings/bleio/Adapter.h b/shared-bindings/bleio/Adapter.h
deleted file mode 100644
index 72382616c..000000000
--- a/shared-bindings/bleio/Adapter.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2018 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_ADAPTER_H
-#define MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_ADAPTER_H
-
-#include "shared-module/bleio/Address.h"
-
-const mp_obj_type_t bleio_adapter_type;
-
-extern bool common_hal_bleio_adapter_get_enabled(void);
-extern void common_hal_bleio_adapter_set_enabled(bool enabled);
-extern bleio_address_obj_t *common_hal_bleio_adapter_get_address(void);
-extern mp_obj_t common_hal_bleio_adapter_get_default_name(void);
-
-#endif // MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_ADAPTER_H
diff --git a/shared-bindings/bleio/Address.c b/shared-bindings/bleio/Address.c
deleted file mode 100644
index baeb6d7c0..000000000
--- a/shared-bindings/bleio/Address.c
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include <string.h>
-#include <stdio.h>
-
-#include "py/objproperty.h"
-#include "py/objstr.h"
-#include "py/runtime.h"
-#include "shared-bindings/bleio/Address.h"
-#include "shared-module/bleio/Address.h"
-
-//| .. currentmodule:: bleio
-//|
-//| :class:`Address` -- BLE address
-//| =========================================================
-//|
-//| Encapsulates the address of a BLE device.
-//|
-
-//| .. class:: Address(address, address_type)
-//|
-//| Create a new Address object encapsulating the address value.
-//| The value itself can be one of:
-//|
-//| :param buf address: The address value to encapsulate. A buffer object (bytearray, bytes) of 6 bytes.
-//| :param int address_type: one of the integer values: `PUBLIC`, `RANDOM_STATIC`,
-//| `RANDOM_PRIVATE_RESOLVABLE`, or `RANDOM_PRIVATE_NON_RESOLVABLE`.
-//|
-STATIC mp_obj_t bleio_address_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
- enum { ARG_address, ARG_address_type };
- static const mp_arg_t allowed_args[] = {
- { MP_QSTR_address, MP_ARG_OBJ | MP_ARG_REQUIRED },
- { MP_QSTR_address_type, MP_ARG_INT, {.u_int = BLEIO_ADDRESS_TYPE_PUBLIC } },
- };
-
- mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
- mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
-
- bleio_address_obj_t *self = m_new_obj(bleio_address_obj_t);
- self->base.type = &bleio_address_type;
-
- const mp_obj_t address = args[ARG_address].u_obj;
- mp_buffer_info_t buf_info;
- mp_get_buffer_raise(address, &buf_info, MP_BUFFER_READ);
- if (buf_info.len != NUM_BLEIO_ADDRESS_BYTES) {
- mp_raise_ValueError_varg(translate("Address must be %d bytes long"), NUM_BLEIO_ADDRESS_BYTES);
- }
-
- const mp_int_t address_type = args[ARG_address_type].u_int;
- if (address_type < BLEIO_ADDRESS_TYPE_MIN || address_type > BLEIO_ADDRESS_TYPE_MAX) {
- mp_raise_ValueError(translate("Address type out of range"));
- }
-
- common_hal_bleio_address_construct(self, buf_info.buf, address_type);
-
- return MP_OBJ_FROM_PTR(self);
-}
-
-//| .. attribute:: address_bytes
-//|
-//| The bytes that make up the device address (read-only).
-//|
-//| Note that the ``bytes`` object returned is in little-endian order:
-//| The least significant byte is ``address_bytes[0]``. So the address will
-//| appear to be reversed if you print the raw ``bytes`` object. If you print
-//| or use `str()` on the :py:class:`~bleio.Attribute` object itself, the address will be printed
-//| in the expected order. For example:
-//|
-//| .. code-block:: pycon
-//|
-//| >>> import bleio
-//| >>> bleio.adapter.address
-//| <Address c8:1d:f5:ed:a8:35>
-//| >>> bleio.adapter.address.address_bytes
-//| b'5\xa8\xed\xf5\x1d\xc8'
-//|
-STATIC mp_obj_t bleio_address_get_address_bytes(mp_obj_t self_in) {
- bleio_address_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- return common_hal_bleio_address_get_address_bytes(self);
-}
-MP_DEFINE_CONST_FUN_OBJ_1(bleio_address_get_address_bytes_obj, bleio_address_get_address_bytes);
-
-const mp_obj_property_t bleio_address_address_bytes_obj = {
- .base.type = &mp_type_property,
- .proxy = {(mp_obj_t)&bleio_address_get_address_bytes_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj},
-};
-
-//| .. attribute:: type
-//|
-//| The address type (read-only).
-//| One of the integer values: `PUBLIC`, `RANDOM_STATIC`,
-//| `RANDOM_PRIVATE_RESOLVABLE`, or `RANDOM_PRIVATE_NON_RESOLVABLE`.
-//|
-STATIC mp_obj_t bleio_address_get_type(mp_obj_t self_in) {
- bleio_address_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- return MP_OBJ_NEW_SMALL_INT(common_hal_bleio_address_get_type(self));
-}
-MP_DEFINE_CONST_FUN_OBJ_1(bleio_address_get_type_obj, bleio_address_get_type);
-
-const mp_obj_property_t bleio_address_type_obj = {
- .base.type = &mp_type_property,
- .proxy = {(mp_obj_t)&bleio_address_get_type_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj},
-};
-
-//| .. method:: __eq__(other)
-//|
-//| Two Address objects are equal if their addresses and address types are equal.
-//|
-STATIC mp_obj_t bleio_address_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
- switch (op) {
- // Two Addresses are equal if their address bytes and address_type are equal
- case MP_BINARY_OP_EQUAL:
- if (MP_OBJ_IS_TYPE(rhs_in, &bleio_address_type)) {
- bleio_address_obj_t *lhs = MP_OBJ_TO_PTR(lhs_in);
- bleio_address_obj_t *rhs = MP_OBJ_TO_PTR(rhs_in);
- return mp_obj_new_bool(
- mp_obj_equal(common_hal_bleio_address_get_address_bytes(lhs),
- common_hal_bleio_address_get_address_bytes(rhs)) &&
- common_hal_bleio_address_get_type(lhs) ==
- common_hal_bleio_address_get_type(rhs));
-
- } else {
- return mp_const_false;
- }
-
- default:
- return MP_OBJ_NULL; // op not supported
- }
-}
-
-STATIC void bleio_address_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
- bleio_address_obj_t *self = MP_OBJ_TO_PTR(self_in);
- mp_buffer_info_t buf_info;
- mp_obj_t address_bytes = common_hal_bleio_address_get_address_bytes(self);
- mp_get_buffer_raise(address_bytes, &buf_info, MP_BUFFER_READ);
-
- const uint8_t *buf = (uint8_t *) buf_info.buf;
- mp_printf(print, "<Address %02x:%02x:%02x:%02x:%02x:%02x>",
- buf[5], buf[4], buf[3], buf[2], buf[1], buf[0]);
-}
-
-//| .. data:: PUBLIC
-//|
-//| A publicly known address, with a company ID (high 24 bits)and company-assigned part (low 24 bits).
-//|
-//| .. data:: RANDOM_STATIC
-//|
-//| A randomly generated address that does not change often. It may never change or may change after
-//| a power cycle.
-//|
-//| .. data:: RANDOM_PRIVATE_RESOLVABLE
-//|
-//| An address that is usable when the peer knows the other device's secret Identity Resolving Key (IRK).
-//|
-//| .. data:: RANDOM_PRIVATE_NON_RESOLVABLE
-//|
-//| A randomly generated address that changes on every connection.
-//|
-STATIC const mp_rom_map_elem_t bleio_address_locals_dict_table[] = {
- { MP_ROM_QSTR(MP_QSTR_address_bytes), MP_ROM_PTR(&bleio_address_address_bytes_obj) },
- { MP_ROM_QSTR(MP_QSTR_type), MP_ROM_PTR(&bleio_address_type_obj) },
- // These match the BLE_GAP_ADDR_TYPES values used by the nRF library.
- { MP_ROM_QSTR(MP_QSTR_PUBLIC), MP_ROM_INT(0) },
- { MP_ROM_QSTR(MP_QSTR_RANDOM_STATIC), MP_ROM_INT(1) },
- { MP_ROM_QSTR(MP_QSTR_RANDOM_PRIVATE_RESOLVABLE), MP_ROM_INT(2) },
- { MP_ROM_QSTR(MP_QSTR_RANDOM_PRIVATE_NON_RESOLVABLE), MP_ROM_INT(3) },
-
-};
-
-STATIC MP_DEFINE_CONST_DICT(bleio_address_locals_dict, bleio_address_locals_dict_table);
-
-const mp_obj_type_t bleio_address_type = {
- { &mp_type_type },
- .name = MP_QSTR_Address,
- .make_new = bleio_address_make_new,
- .print = bleio_address_print,
- .binary_op = bleio_address_binary_op,
- .locals_dict = (mp_obj_dict_t*)&bleio_address_locals_dict
-};
diff --git a/shared-bindings/bleio/Address.h b/shared-bindings/bleio/Address.h
deleted file mode 100644
index 5e02ee210..000000000
--- a/shared-bindings/bleio/Address.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_ADDRESS_H
-#define MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_ADDRESS_H
-
-#include "py/objtype.h"
-#include "shared-module/bleio/Address.h"
-
-#define BLEIO_ADDRESS_TYPE_PUBLIC (0)
-#define BLEIO_ADDRESS_TYPE_RANDOM_STATIC (1)
-#define BLEIO_ADDRESS_TYPE_RANDOM_PRIVATE_RESOLVABLE (2)
-#define BLEIO_ADDRESS_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE (3)
-
-#define BLEIO_ADDRESS_TYPE_MIN BLEIO_ADDRESS_TYPE_PUBLIC
-#define BLEIO_ADDRESS_TYPE_MAX BLEIO_ADDRESS_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE
-
-extern const mp_obj_type_t bleio_address_type;
-
-extern void common_hal_bleio_address_construct(bleio_address_obj_t *self, uint8_t *bytes, uint8_t address_type);
-extern mp_obj_t common_hal_bleio_address_get_address_bytes(bleio_address_obj_t *self);
-extern uint8_t common_hal_bleio_address_get_type(bleio_address_obj_t *self);
-
-#endif // MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_ADDRESS_H
diff --git a/shared-bindings/bleio/Attribute.c b/shared-bindings/bleio/Attribute.c
deleted file mode 100644
index 2cc9ef6d0..000000000
--- a/shared-bindings/bleio/Attribute.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include "py/objproperty.h"
-#include "py/runtime.h"
-#include "shared-bindings/bleio/Characteristic.h"
-#include "shared-bindings/bleio/UUID.h"
-
-//
-
-//| .. currentmodule:: bleio
-//|
-//| :class:`Attribute` -- BLE Attribute
-//| =========================================================
-//|
-//| Definitions associated with all BLE attributes: characteristics, descriptors, etc.
-//| :py:class:`~bleio.Attribute` is, notionally, a superclass of
-//| :py:class:`~Characteristic` and :py:class:`~Descriptor`,
-//| but is not defined as a Python superclass of those classes.
-//|
-//| .. class:: Attribute()
-//|
-//| You cannot create an instance of :py:class:`~bleio.Attribute`.
-//|
-
-STATIC const mp_rom_map_elem_t bleio_attribute_locals_dict_table[] = {
-
-//| .. data:: NO_ACCESS
-//|
-//| security mode: access not allowed
-//|
-//| .. data:: OPEN
-//|
-//| security_mode: no security (link is not encrypted)
-//|
-//| .. data:: ENCRYPT_NO_MITM
-//|
-//| security_mode: unauthenticated encryption, without man-in-the-middle protection
-//|
-//| .. data:: ENCRYPT_WITH_MITM
-//|
-//| security_mode: authenticated encryption, with man-in-the-middle protection
-//|
-//| .. data:: LESC_ENCRYPT_WITH_MITM
-//|
-//| security_mode: LESC encryption, with man-in-the-middle protection
-//|
-//| .. data:: SIGNED_NO_MITM
-//|
-//| security_mode: unauthenticated data signing, without man-in-the-middle protection
-//|
-//| .. data:: SIGNED_WITH_MITM
-//|
-//| security_mode: authenticated data signing, without man-in-the-middle protection
-//|
- { MP_ROM_QSTR(MP_QSTR_NO_ACCESS), MP_ROM_INT(SECURITY_MODE_NO_ACCESS) },
- { MP_ROM_QSTR(MP_QSTR_OPEN), MP_ROM_INT(SECURITY_MODE_OPEN) },
- { MP_ROM_QSTR(MP_QSTR_ENCRYPT_NO_MITM), MP_ROM_INT(SECURITY_MODE_ENC_NO_MITM) },
- { MP_ROM_QSTR(MP_QSTR_ENCRYPT_WITH_MITM), MP_ROM_INT(SECURITY_MODE_ENC_WITH_MITM) },
- { MP_ROM_QSTR(MP_QSTR_LESC_ENCRYPT_WITH_MITM), MP_ROM_INT(SECURITY_MODE_LESC_ENC_WITH_MITM) },
- { MP_ROM_QSTR(MP_QSTR_SIGNED_NO_MITM), MP_ROM_INT(SECURITY_MODE_SIGNED_NO_MITM) },
- { MP_ROM_QSTR(MP_QSTR_SIGNED_WITH_MITM), MP_ROM_INT(SECURITY_MODE_SIGNED_WITH_MITM) },
-
-};
-STATIC MP_DEFINE_CONST_DICT(bleio_attribute_locals_dict, bleio_attribute_locals_dict_table);
-
-const mp_obj_type_t bleio_attribute_type = {
- { &mp_type_type },
- .name = MP_QSTR_Attribute,
- .locals_dict = (mp_obj_dict_t*)&bleio_attribute_locals_dict,
-};
diff --git a/shared-bindings/bleio/Attribute.h b/shared-bindings/bleio/Attribute.h
deleted file mode 100644
index 06a6eb5a9..000000000
--- a/shared-bindings/bleio/Attribute.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_ATTRIBUTE_H
-#define MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_ATTRIBUTE_H
-
-#include "py/obj.h"
-
-#include "shared-module/bleio/Attribute.h"
-
-extern const mp_obj_type_t bleio_attribute_type;
-
-extern void common_hal_bleio_attribute_security_mode_check_valid(bleio_attribute_security_mode_t security_mode);
-
-#endif // MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_ATTRIBUTE_H
diff --git a/shared-bindings/bleio/Central.c b/shared-bindings/bleio/Central.c
deleted file mode 100644
index 1fc455d8d..000000000
--- a/shared-bindings/bleio/Central.c
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- * Copyright (c) 2016 Glenn Ruben Bakke
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include <string.h>
-#include <stdio.h>
-
-#include "ble_drv.h"
-#include "py/objarray.h"
-#include "py/objproperty.h"
-#include "py/objstr.h"
-#include "py/runtime.h"
-#include "shared-bindings/bleio/Adapter.h"
-#include "shared-bindings/bleio/Address.h"
-#include "shared-bindings/bleio/Characteristic.h"
-#include "shared-bindings/bleio/Central.h"
-#include "shared-bindings/bleio/Service.h"
-
-//| .. currentmodule:: bleio
-//|
-//| :class:`Central` -- A BLE central device
-//| =========================================================
-//|
-//| Implement a BLE central, which runs locally. Can connect to a given address.
-//|
-//| Usage::
-//|
-//| import bleio
-//|
-//| scanner = bleio.Scanner()
-//| entries = scanner.scan(2.5)
-//|
-//| my_entry = None
-//| for entry in entries:
-//| if entry.name is not None and entry.name == 'InterestingPeripheral':
-//| my_entry = entry
-//| break
-//|
-//| if not my_entry:
-//| raise Exception("'InterestingPeripheral' not found")
-//|
-//| central = bleio.Central()
-//| central.connect(my_entry.address, 10) # timeout after 10 seconds
-//| remote_services = central.discover_remote_services()
-//|
-
-//| .. class:: Central()
-//|
-//| Create a new Central object.
-//|
-STATIC mp_obj_t bleio_central_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
- mp_arg_check_num(n_args, kw_args, 0, 0, false);
-
- bleio_central_obj_t *self = m_new_obj(bleio_central_obj_t);
- self->base.type = &bleio_central_type;
-
- common_hal_bleio_central_construct(self);
-
- return MP_OBJ_FROM_PTR(self);
-}
-
-//| .. method:: connect(address, timeout, *, service_uuids_whitelist=None)
-//| Attempts a connection to the remote peripheral.
-//|
-//| :param bleio.Address address: The address of the peripheral to connect to
-//| :param float/int timeout: Try to connect for timeout seconds.
-//|
-STATIC mp_obj_t bleio_central_connect(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
- bleio_central_obj_t *self = MP_OBJ_TO_PTR(pos_args[0]);
-
- enum { ARG_address, ARG_timeout, ARG_service_uuids_whitelist };
- static const mp_arg_t allowed_args[] = {
- { MP_QSTR_address, MP_ARG_REQUIRED | MP_ARG_OBJ },
- { MP_QSTR_timeout, MP_ARG_REQUIRED | MP_ARG_OBJ },
- };
-
- mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
- mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
-
- if (!MP_OBJ_IS_TYPE(args[ARG_address].u_obj, &bleio_address_type)) {
- mp_raise_ValueError(translate("Expected an Address"));
- }
-
- bleio_address_obj_t *address = MP_OBJ_TO_PTR(args[ARG_address].u_obj);
- mp_float_t timeout = mp_obj_get_float(args[ARG_timeout].u_obj);
-
- // common_hal_bleio_central_connect() will validate that services is an iterable or None.
- common_hal_bleio_central_connect(self, address, timeout);
-
- return mp_const_none;
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_KW(bleio_central_connect_obj, 3, bleio_central_connect);
-
-
-//| .. method:: disconnect()
-//|
-//| Disconnects from the remote peripheral.
-//|
-STATIC mp_obj_t bleio_central_disconnect(mp_obj_t self_in) {
- bleio_central_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- common_hal_bleio_central_disconnect(self);
-
- return mp_const_none;
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_central_disconnect_obj, bleio_central_disconnect);
-
-//| .. method:: discover_remote_services(service_uuids_whitelist=None)
-//| Do BLE discovery for all services or for the given service UUIDS,
-//| to find their handles and characteristics, and return the discovered services.
-//| `Peripheral.connected` must be True.
-//|
-//| :param iterable service_uuids_whitelist: an iterable of :py:class:~`UUID` objects for the services
-//| provided by the peripheral that you want to use.
-//| The peripheral may provide more services, but services not listed are ignored
-//| and will not be returned.
-//|
-//| If service_uuids_whitelist is None, then all services will undergo discovery, which can be slow.
-//|
-//| If the service UUID is 128-bit, or its characteristic UUID's are 128-bit, you
-//| you must have already created a :py:class:~`UUID` object for that UUID in order for the
-//| service or characteristic to be discovered. Creating the UUID causes the UUID to be registered
-//| for use. (This restriction may be lifted in the future.)
-//|
-//| :return: A tuple of services provided by the remote peripheral.
-//|
-STATIC mp_obj_t bleio_central_discover_remote_services(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
- bleio_central_obj_t *self = MP_OBJ_TO_PTR(pos_args[0]);
-
- enum { ARG_service_uuids_whitelist };
- static const mp_arg_t allowed_args[] = {
- { MP_QSTR_service_uuids_whitelist, MP_ARG_OBJ, {.u_obj = mp_const_none} },
- };
-
- mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
- mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
-
- if (!common_hal_bleio_central_get_connected(self)) {
- mp_raise_ValueError(translate("Not connected"));
- }
-
- return MP_OBJ_FROM_PTR(common_hal_bleio_central_discover_remote_services(
- MP_OBJ_FROM_PTR(self),
- args[ARG_service_uuids_whitelist].u_obj));
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_KW(bleio_central_discover_remote_services_obj, 1, bleio_central_discover_remote_services);
-
-//| .. attribute:: connected
-//|
-//| True if connected to a remove peripheral.
-//|
-STATIC mp_obj_t bleio_central_get_connected(mp_obj_t self_in) {
- bleio_central_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- return mp_obj_new_bool(common_hal_bleio_central_get_connected(self));
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_central_get_connected_obj, bleio_central_get_connected);
-
-const mp_obj_property_t bleio_central_connected_obj = {
- .base.type = &mp_type_property,
- .proxy = { (mp_obj_t)&bleio_central_get_connected_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj },
-};
-
-STATIC const mp_rom_map_elem_t bleio_central_locals_dict_table[] = {
- // Methods
- { MP_ROM_QSTR(MP_QSTR_connect), MP_ROM_PTR(&bleio_central_connect_obj) },
- { MP_ROM_QSTR(MP_QSTR_disconnect), MP_ROM_PTR(&bleio_central_disconnect_obj) },
- { MP_ROM_QSTR(MP_QSTR_discover_remote_services), MP_ROM_PTR(&bleio_central_discover_remote_services_obj) },
-
- // Properties
- { MP_ROM_QSTR(MP_QSTR_connected), MP_ROM_PTR(&bleio_central_connected_obj) },
-};
-
-STATIC MP_DEFINE_CONST_DICT(bleio_central_locals_dict, bleio_central_locals_dict_table);
-
-const mp_obj_type_t bleio_central_type = {
- { &mp_type_type },
- .name = MP_QSTR_Central,
- .make_new = bleio_central_make_new,
- .locals_dict = (mp_obj_dict_t*)&bleio_central_locals_dict
-};
diff --git a/shared-bindings/bleio/Central.h b/shared-bindings/bleio/Central.h
deleted file mode 100644
index cbc437087..000000000
--- a/shared-bindings/bleio/Central.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_CENTRAL_H
-#define MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_CENTRAL_H
-
-#include "py/objtuple.h"
-#include "common-hal/bleio/Central.h"
-#include "common-hal/bleio/Service.h"
-
-extern const mp_obj_type_t bleio_central_type;
-
-extern void common_hal_bleio_central_construct(bleio_central_obj_t *self);
-extern void common_hal_bleio_central_connect(bleio_central_obj_t *self, bleio_address_obj_t *address, mp_float_t timeout);
-extern void common_hal_bleio_central_disconnect(bleio_central_obj_t *self);
-extern bool common_hal_bleio_central_get_connected(bleio_central_obj_t *self);
-extern mp_obj_tuple_t *common_hal_bleio_central_discover_remote_services(bleio_central_obj_t *self, mp_obj_t service_uuids_whitelist);
-
-#endif // MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_CENTRAL_H
diff --git a/shared-bindings/bleio/Characteristic.c b/shared-bindings/bleio/Characteristic.c
deleted file mode 100644
index 4894ad114..000000000
--- a/shared-bindings/bleio/Characteristic.c
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- * Copyright (c) 2017 Glenn Ruben Bakke
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include "py/objproperty.h"
-#include "py/runtime.h"
-#include "shared-bindings/bleio/Attribute.h"
-#include "shared-bindings/bleio/Characteristic.h"
-#include "shared-bindings/bleio/Descriptor.h"
-#include "shared-bindings/bleio/UUID.h"
-
-//| .. currentmodule:: bleio
-//|
-//| :class:`Characteristic` -- BLE service characteristic
-//| =========================================================
-//|
-//| Stores information about a BLE service characteristic and allows reading
-//| and writing of the characteristic's value.
-//|
-//|
-//| .. class:: Characteristic(uuid, *, properties=0, read_perm=`Attribute.OPEN`, write_perm=`Attribute.OPEN`, max_length=20, fixed_length=False, descriptors=None)
-//|
-//| Create a new Characteristic object identified by the specified UUID.
-//|
-//| :param bleio.UUID uuid: The uuid of the characteristic
-//| :param int properties: bitmask of these values bitwise-or'd together: `BROADCAST`, `INDICATE`,
-//| `NOTIFY`, `READ`, `WRITE`, `WRITE_NO_RESPONSE`
-//| :param int read_perm: Specifies whether the characteristic can be read by a client, and if so, which
-//| security mode is required. Must be one of the integer values `Attribute.NO_ACCESS`, `Attribute.OPEN`,
-//| `Attribute.ENCRYPT_NO_MITM`, `Attribute.ENCRYPT_WITH_MITM`, `Attribute.LESC_ENCRYPT_WITH_MITM`,
-//| `Attribute.SIGNED_NO_MITM`, or `Attribute.SIGNED_WITH_MITM`.
-//| :param int write_perm: Specifies whether the characteristic can be written by a client, and if so, which
-//| security mode is required. Values allowed are the same as ``read_perm``.
-//| :param int max_length: Maximum length in bytes of the characteristic value. The maximum allowed is
-//| is 512, or possibly 510 if ``fixed_length`` is False. The default, 20, is the maximum
-//| number of data bytes that fit in a single BLE 4.x ATT packet.
-//| :param bool fixed_length: True if the characteristic value is of fixed length.
-//| :param iterable descriptors: BLE descriptors for this characteristic.
-//|
-STATIC mp_obj_t bleio_characteristic_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
- enum { ARG_uuid, ARG_properties, ARG_read_perm, ARG_write_perm,
- ARG_max_length, ARG_fixed_length, ARG_descriptors };
- static const mp_arg_t allowed_args[] = {
- { MP_QSTR_uuid, MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = mp_const_none} },
- { MP_QSTR_properties, MP_ARG_KW_ONLY| MP_ARG_INT, {.u_int = 0} },
- { MP_QSTR_read_perm, MP_ARG_KW_ONLY| MP_ARG_INT, {.u_int = SECURITY_MODE_OPEN} },
- { MP_QSTR_write_perm, MP_ARG_KW_ONLY| MP_ARG_INT, {.u_int = SECURITY_MODE_OPEN} },
- { MP_QSTR_max_length, MP_ARG_KW_ONLY| MP_ARG_INT, {.u_int = 20} },
- { MP_QSTR_fixed_length, MP_ARG_KW_ONLY| MP_ARG_BOOL, {.u_bool = false} },
- { MP_QSTR_descriptors, MP_ARG_KW_ONLY| MP_ARG_OBJ, {.u_obj = mp_const_none} },
- };
-
- mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
- mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
-
- const mp_obj_t uuid_obj = args[ARG_uuid].u_obj;
-
- if (!MP_OBJ_IS_TYPE(uuid_obj, &bleio_uuid_type)) {
- mp_raise_ValueError(translate("Expected a UUID"));
- }
- bleio_uuid_obj_t *uuid = MP_OBJ_TO_PTR(uuid_obj);
-
- const bleio_characteristic_properties_t properties = args[ARG_properties].u_int;
- if (properties & ~CHAR_PROP_ALL) {
- mp_raise_ValueError(translate("Invalid properties"));
- }
-
- const bleio_attribute_security_mode_t read_perm = args[ARG_read_perm].u_int;
- common_hal_bleio_attribute_security_mode_check_valid(read_perm);
-
- const bleio_attribute_security_mode_t write_perm = args[ARG_write_perm].u_int;
- common_hal_bleio_attribute_security_mode_check_valid(write_perm);
-
- mp_obj_t descriptors = args[ARG_descriptors].u_obj;
- if (descriptors == mp_const_none) {
- descriptors = mp_const_empty_tuple;
- }
-
- bleio_characteristic_obj_t *self = m_new_obj(bleio_characteristic_obj_t);
- self->base.type = &bleio_characteristic_type;
-
- // Copy the descriptors list and validate its items.
- mp_obj_t desc_list_obj = mp_obj_new_list(0, NULL);
- mp_obj_list_t *desc_list = MP_OBJ_TO_PTR(desc_list_obj);
-
- // If descriptors is not an iterable, an exception will be thrown.
- mp_obj_iter_buf_t iter_buf;
- mp_obj_t descriptors_iter = mp_getiter(descriptors, &iter_buf);
-
- mp_obj_t descriptor_obj;
- while ((descriptor_obj = mp_iternext(descriptors_iter)) != MP_OBJ_STOP_ITERATION) {
- if (!MP_OBJ_IS_TYPE(descriptor_obj, &bleio_descriptor_type)) {
- mp_raise_ValueError(translate("descriptors includes an object that is not a Descriptors"));
- }
- bleio_descriptor_obj_t *descriptor = MP_OBJ_TO_PTR(descriptor_obj);
- if (common_hal_bleio_descriptor_get_characteristic(descriptor) != MP_OBJ_NULL) {
- mp_raise_ValueError(translate("Descriptor is already attached to a Characteristic"));
- }
- mp_obj_list_append(desc_list_obj, descriptor_obj);
- }
-
- // Range checking on max_length arg is done by the common_hal layer, because
- // it may vary depending on underlying BLE implementation.
- common_hal_bleio_characteristic_construct(self, uuid, properties,
- read_perm, write_perm,
- args[ARG_max_length].u_int, args[ARG_fixed_length].u_bool,
- desc_list);
-
- return MP_OBJ_FROM_PTR(self);
-}
-
-//| .. attribute:: properties
-//|
-//| An int bitmask representing which properties are set.
-//|
-STATIC mp_obj_t bleio_characteristic_get_properties(mp_obj_t self_in) {
- bleio_characteristic_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- return MP_OBJ_NEW_SMALL_INT(common_hal_bleio_characteristic_get_properties(self));
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_characteristic_get_properties_obj, bleio_characteristic_get_properties);
-
-const mp_obj_property_t bleio_characteristic_properties_obj = {
- .base.type = &mp_type_property,
- .proxy = { (mp_obj_t)&bleio_characteristic_get_properties_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj },
-};
-
-//| .. attribute:: uuid
-//|
-//| The UUID of this characteristic. (read-only)
-//| Will be ``None`` if the 128-bit UUID for this characteristic is not known.
-//|
-STATIC mp_obj_t bleio_characteristic_get_uuid(mp_obj_t self_in) {
- bleio_characteristic_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- bleio_uuid_obj_t *uuid = common_hal_bleio_characteristic_get_uuid(self);
- return uuid ? MP_OBJ_FROM_PTR(uuid) : mp_const_none;
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_characteristic_get_uuid_obj, bleio_characteristic_get_uuid);
-
-const mp_obj_property_t bleio_characteristic_uuid_obj = {
- .base.type = &mp_type_property,
- .proxy = { (mp_obj_t)&bleio_characteristic_get_uuid_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj },
-};
-
-//| .. attribute:: value
-//|
-//| The value of this characteristic.
-//|
-STATIC mp_obj_t bleio_characteristic_get_value(mp_obj_t self_in) {
- bleio_characteristic_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- return common_hal_bleio_characteristic_get_value(self);
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_characteristic_get_value_obj, bleio_characteristic_get_value);
-
-STATIC mp_obj_t bleio_characteristic_set_value(mp_obj_t self_in, mp_obj_t value_in) {
- bleio_characteristic_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- mp_buffer_info_t bufinfo;
- mp_get_buffer_raise(value_in, &bufinfo, MP_BUFFER_READ);
-
- common_hal_bleio_characteristic_set_value(self, &bufinfo);
-
- return mp_const_none;
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_2(bleio_characteristic_set_value_obj, bleio_characteristic_set_value);
-
-const mp_obj_property_t bleio_characteristic_value_obj = {
- .base.type = &mp_type_property,
- .proxy = { (mp_obj_t)&bleio_characteristic_get_value_obj,
- (mp_obj_t)&bleio_characteristic_set_value_obj,
- (mp_obj_t)&mp_const_none_obj },
-};
-
-//| .. attribute:: descriptors
-//|
-//| A tuple of `bleio.Descriptor` that describe this characteristic. (read-only)
-//|
-STATIC mp_obj_t bleio_characteristic_get_descriptors(mp_obj_t self_in) {
- bleio_characteristic_obj_t *self = MP_OBJ_TO_PTR(self_in);
- // Return list as a tuple so user won't be able to change it.
- mp_obj_list_t *char_list = common_hal_bleio_characteristic_get_descriptor_list(self);
- return mp_obj_new_tuple(char_list->len, char_list->items);
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_characteristic_get_descriptors_obj, bleio_characteristic_get_descriptors);
-
-const mp_obj_property_t bleio_characteristic_descriptors_obj = {
- .base.type = &mp_type_property,
- .proxy = { (mp_obj_t)&bleio_characteristic_get_descriptors_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj },
-};
-
-//| .. attribute:: service (read-only)
-//|
-//| The Service this Characteristic is a part of. None if not yet assigned to a Service.
-//|
-STATIC mp_obj_t bleio_characteristic_get_service(mp_obj_t self_in) {
- bleio_characteristic_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- return common_hal_bleio_characteristic_get_service(self);
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_characteristic_get_service_obj, bleio_characteristic_get_service);
-
-const mp_obj_property_t bleio_characteristic_service_obj = {
- .base.type = &mp_type_property,
- .proxy = { (mp_obj_t)&bleio_characteristic_get_service_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj },
-};
-
-//| .. method:: set_cccd(*, notify=False, indicate=False)
-//|
-//| Set the remote characteristic's CCCD to enable or disable notification and indication.
-//|
-//| :param bool notify: True if Characteristic should receive notifications of remote writes
-//| :param float indicate: True if Characteristic should receive indications of remote writes
-//|
-STATIC mp_obj_t bleio_characteristic_set_cccd(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
- bleio_characteristic_obj_t *self = MP_OBJ_TO_PTR(pos_args[0]);
-
- enum { ARG_notify, ARG_indicate };
- static const mp_arg_t allowed_args[] = {
- { MP_QSTR_notify, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = false} },
- { MP_QSTR_indicate, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = false} },
- };
-
- mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
- mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
-
- common_hal_bleio_characteristic_set_cccd(self, args[ARG_notify].u_bool, args[ARG_indicate].u_bool);
-
- return mp_const_none;
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_KW(bleio_characteristic_set_cccd_obj, 1, bleio_characteristic_set_cccd);
-
-
-STATIC const mp_rom_map_elem_t bleio_characteristic_locals_dict_table[] = {
- { MP_ROM_QSTR(MP_QSTR_properties), MP_ROM_PTR(&bleio_characteristic_get_properties) },
- { MP_ROM_QSTR(MP_QSTR_set_cccd), MP_ROM_PTR(&bleio_characteristic_set_cccd_obj) },
- { MP_ROM_QSTR(MP_QSTR_uuid), MP_ROM_PTR(&bleio_characteristic_uuid_obj) },
- { MP_ROM_QSTR(MP_QSTR_value), MP_ROM_PTR(&bleio_characteristic_value_obj) },
-
- // Bitmask constants to represent properties
-//| .. data:: BROADCAST
-//|
-//| property: allowed in advertising packets
-//|
-//| .. data:: INDICATE
-//|
-//| property: server will indicate to the client when the value is set and wait for a response
-//|
-//| .. data:: NOTIFY
-//|
-//| property: server will notify the client when the value is set
-//|
-//| .. data:: READ
-//|
-//| property: clients may read this characteristic
-//|
-//| .. data:: WRITE
-//|
-//| property: clients may write this characteristic; a response will be sent back
-//|
-//| .. data:: WRITE_NO_RESPONSE
-//|
-//| property: clients may write this characteristic; no response will be sent back
-//|
- { MP_ROM_QSTR(MP_QSTR_BROADCAST), MP_ROM_INT(CHAR_PROP_BROADCAST) },
- { MP_ROM_QSTR(MP_QSTR_INDICATE), MP_ROM_INT(CHAR_PROP_INDICATE) },
- { MP_ROM_QSTR(MP_QSTR_NOTIFY), MP_ROM_INT(CHAR_PROP_NOTIFY) },
- { MP_ROM_QSTR(MP_QSTR_READ), MP_ROM_INT(CHAR_PROP_READ) },
- { MP_ROM_QSTR(MP_QSTR_WRITE), MP_ROM_INT(CHAR_PROP_WRITE) },
- { MP_ROM_QSTR(MP_QSTR_WRITE_NO_RESPONSE), MP_ROM_INT(CHAR_PROP_WRITE_NO_RESPONSE) },
-
-};
-STATIC MP_DEFINE_CONST_DICT(bleio_characteristic_locals_dict, bleio_characteristic_locals_dict_table);
-
-STATIC void bleio_characteristic_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
- bleio_characteristic_obj_t *self = MP_OBJ_TO_PTR(self_in);
- if (self->uuid) {
- mp_printf(print, "Characteristic(");
- bleio_uuid_print(print, MP_OBJ_FROM_PTR(self->uuid), kind);
- mp_printf(print, ")");
- } else {
- mp_printf(print, "<Characteristic with Unregistered UUID>");
- }
-}
-
-const mp_obj_type_t bleio_characteristic_type = {
- { &mp_type_type },
- .name = MP_QSTR_Characteristic,
- .make_new = bleio_characteristic_make_new,
- .print = bleio_characteristic_print,
- .locals_dict = (mp_obj_dict_t*)&bleio_characteristic_locals_dict,
-};
diff --git a/shared-bindings/bleio/Characteristic.h b/shared-bindings/bleio/Characteristic.h
deleted file mode 100644
index 87942c8e9..000000000
--- a/shared-bindings/bleio/Characteristic.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_CHARACTERISTIC_H
-#define MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_CHARACTERISTIC_H
-
-#include "shared-bindings/bleio/Attribute.h"
-#include "shared-module/bleio/Characteristic.h"
-#include "common-hal/bleio/Characteristic.h"
-
-extern const mp_obj_type_t bleio_characteristic_type;
-
-extern void common_hal_bleio_characteristic_construct(bleio_characteristic_obj_t *self, bleio_uuid_obj_t *uuid, bleio_characteristic_properties_t props, bleio_attribute_security_mode_t read_perm, bleio_attribute_security_mode_t write_perm, mp_int_t max_length, bool fixed_length, mp_obj_list_t *descriptor_list);
-extern mp_obj_t common_hal_bleio_characteristic_get_value(bleio_characteristic_obj_t *self);
-extern void common_hal_bleio_characteristic_set_value(bleio_characteristic_obj_t *self, mp_buffer_info_t *bufinfo);
-extern bleio_characteristic_properties_t common_hal_bleio_characteristic_get_properties(bleio_characteristic_obj_t *self);
-extern bleio_uuid_obj_t *common_hal_bleio_characteristic_get_uuid(bleio_characteristic_obj_t *self);
-extern mp_obj_list_t *common_hal_bleio_characteristic_get_descriptor_list(bleio_characteristic_obj_t *self);
-extern bleio_service_obj_t *common_hal_bleio_characteristic_get_service(bleio_characteristic_obj_t *self);
-extern void common_hal_bleio_characteristic_set_cccd(bleio_characteristic_obj_t *self, bool notify, bool indicate);
-
-#endif // MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_CHARACTERISTIC_H
diff --git a/shared-bindings/bleio/CharacteristicBuffer.c b/shared-bindings/bleio/CharacteristicBuffer.c
deleted file mode 100644
index 26f9e012b..000000000
--- a/shared-bindings/bleio/CharacteristicBuffer.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2018 Dan Halbert for Adafruit Industries
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include "py/mperrno.h"
-#include "py/ioctl.h"
-#include "py/objproperty.h"
-#include "py/runtime.h"
-#include "py/stream.h"
-
-#include "shared-bindings/bleio/CharacteristicBuffer.h"
-#include "shared-bindings/bleio/UUID.h"
-#include "shared-bindings/util.h"
-
-STATIC void raise_error_if_not_connected(bleio_characteristic_buffer_obj_t *self) {
- if (!common_hal_bleio_characteristic_buffer_connected(self)) {
- mp_raise_ValueError(translate("Not connected"));
- }
-}
-
-//| .. currentmodule:: bleio
-//|
-//| :class:`CharacteristicBuffer` -- BLE Service incoming values buffer.
-//| =====================================================================
-//|
-//| Accumulates a Characteristic's incoming values in a FIFO buffer.
-//|
-//| .. class:: CharacteristicBuffer(characteristic, *, timeout=1, buffer_size=64)
-//|
-//| Monitor the given Characteristic. Each time a new value is written to the Characteristic
-//| add the newly-written bytes to a FIFO buffer.
-//|
-//| :param bleio.Characteristic characteristic: The Characteristic to monitor.
-//| It may be a local Characteristic provided by a Peripheral Service, or a remote Characteristic
-//| in a remote Service that a Central has connected to.
-//| :param int timeout: the timeout in seconds to wait for the first character and between subsequent characters.
-//| :param int buffer_size: Size of ring buffer that stores incoming data coming from client.
-//| Must be >= 1.
-//|
-STATIC mp_obj_t bleio_characteristic_buffer_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
- enum { ARG_characteristic, ARG_timeout, ARG_buffer_size, };
- static const mp_arg_t allowed_args[] = {
- { MP_QSTR_characteristic, MP_ARG_REQUIRED | MP_ARG_OBJ },
- { MP_QSTR_timeout, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NEW_SMALL_INT(1)} },
- { MP_QSTR_buffer_size, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 64} },
- };
-
- mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
- mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
-
- const mp_obj_t characteristic = args[ARG_characteristic].u_obj;
-
- mp_float_t timeout = mp_obj_get_float(args[ARG_timeout].u_obj);
- if (timeout < 0.0f) {
- mp_raise_ValueError(translate("timeout must be >= 0.0"));
- }
-
- const int buffer_size = args[ARG_buffer_size].u_int;
- if (buffer_size < 1) {
- mp_raise_ValueError_varg(translate("%q must be >= 1"), MP_QSTR_buffer_size);
- }
-
- if (!MP_OBJ_IS_TYPE(characteristic, &bleio_characteristic_type)) {
- mp_raise_ValueError(translate("Expected a Characteristic"));
- }
-
- bleio_characteristic_buffer_obj_t *self = m_new_obj(bleio_characteristic_buffer_obj_t);
- self->base.type = &bleio_characteristic_buffer_type;
-
- common_hal_bleio_characteristic_buffer_construct(self, MP_OBJ_TO_PTR(characteristic), timeout, buffer_size);
-
- return MP_OBJ_FROM_PTR(self);
-}
-
-STATIC void check_for_deinit(bleio_characteristic_buffer_obj_t *self) {
- if (common_hal_bleio_characteristic_buffer_deinited(self)) {
- raise_deinited_error();
- }
-}
-
-// These are standard stream methods. Code is in py/stream.c.
-//
-//| .. method:: read(nbytes=None)
-//|
-//| Read characters. If ``nbytes`` is specified then read at most that many
-//| bytes. Otherwise, read everything that arrives until the connection
-//| times out. Providing the number of bytes expected is highly recommended
-//| because it will be faster.
-//|
-//| :return: Data read
-//| :rtype: bytes or None
-//|
-//| .. method:: readinto(buf)
-//|
-//| Read bytes into the ``buf``. Read at most ``len(buf)`` bytes.
-//|
-//| :return: number of bytes read and stored into ``buf``
-//| :rtype: int or None (on a non-blocking error)
-//|
-//| .. method:: readline()
-//|
-//| Read a line, ending in a newline character.
-//|
-//| :return: the line read
-//| :rtype: int or None
-//|
-
-// These three methods are used by the shared stream methods.
-STATIC mp_uint_t bleio_characteristic_buffer_read(mp_obj_t self_in, void *buf_in, mp_uint_t size, int *errcode) {
- bleio_characteristic_buffer_obj_t *self = MP_OBJ_TO_PTR(self_in);
- check_for_deinit(self);
- raise_error_if_not_connected(self);
- byte *buf = buf_in;
-
- // make sure we want at least 1 char
- if (size == 0) {
- return 0;
- }
-
- return common_hal_bleio_characteristic_buffer_read(self, buf, size, errcode);
-}
-
-STATIC mp_uint_t bleio_characteristic_buffer_write(mp_obj_t self_in, const void *buf_in, mp_uint_t size, int *errcode) {
- mp_raise_NotImplementedError(translate("CharacteristicBuffer writing not provided"));
- return 0;
-}
-
-STATIC mp_uint_t bleio_characteristic_buffer_ioctl(mp_obj_t self_in, mp_uint_t request, mp_uint_t arg, int *errcode) {
- bleio_characteristic_buffer_obj_t *self = MP_OBJ_TO_PTR(self_in);
- check_for_deinit(self);
- raise_error_if_not_connected(self);
- if (!common_hal_bleio_characteristic_buffer_connected(self)) {
- mp_raise_ValueError(translate("Not connected"));
- }
- mp_uint_t ret;
- if (request == MP_IOCTL_POLL) {
- mp_uint_t flags = arg;
- ret = 0;
- if ((flags & MP_IOCTL_POLL_RD) && common_hal_bleio_characteristic_buffer_rx_characters_available(self) > 0) {
- ret |= MP_IOCTL_POLL_RD;
- }
-// No writing provided.
-// if ((flags & MP_IOCTL_POLL_WR) && common_hal_busio_uart_ready_to_tx(self)) {
-// ret |= MP_IOCTL_POLL_WR;
-// }
- } else {
- *errcode = MP_EINVAL;
- ret = MP_STREAM_ERROR;
- }
- return ret;
-}
-
-//| .. attribute:: in_waiting
-//|
-//| The number of bytes in the input buffer, available to be read
-//|
-STATIC mp_obj_t bleio_characteristic_buffer_obj_get_in_waiting(mp_obj_t self_in) {
- bleio_characteristic_buffer_obj_t *self = MP_OBJ_TO_PTR(self_in);
- check_for_deinit(self);
- return MP_OBJ_NEW_SMALL_INT(common_hal_bleio_characteristic_buffer_rx_characters_available(self));
-}
-MP_DEFINE_CONST_FUN_OBJ_1(bleio_characteristic_buffer_get_in_waiting_obj, bleio_characteristic_buffer_obj_get_in_waiting);
-
-const mp_obj_property_t bleio_characteristic_buffer_in_waiting_obj = {
- .base.type = &mp_type_property,
- .proxy = {(mp_obj_t)&bleio_characteristic_buffer_get_in_waiting_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj},
-};
-
-//| .. method:: reset_input_buffer()
-//|
-//| Discard any unread characters in the input buffer.
-//|
-STATIC mp_obj_t bleio_characteristic_buffer_obj_reset_input_buffer(mp_obj_t self_in) {
- bleio_characteristic_buffer_obj_t *self = MP_OBJ_TO_PTR(self_in);
- check_for_deinit(self);
- common_hal_bleio_characteristic_buffer_clear_rx_buffer(self);
- return mp_const_none;
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_characteristic_buffer_reset_input_buffer_obj, bleio_characteristic_buffer_obj_reset_input_buffer);
-
-//| .. method:: deinit()
-//|
-//| Disable permanently.
-//|
-STATIC mp_obj_t bleio_characteristic_buffer_deinit(mp_obj_t self_in) {
- bleio_characteristic_buffer_obj_t *self = MP_OBJ_TO_PTR(self_in);
- common_hal_bleio_characteristic_buffer_deinit(self);
- return mp_const_none;
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_characteristic_buffer_deinit_obj, bleio_characteristic_buffer_deinit);
-
-STATIC const mp_rom_map_elem_t bleio_characteristic_buffer_locals_dict_table[] = {
- { MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&bleio_characteristic_buffer_deinit_obj) },
-
- // Standard stream methods.
- { MP_OBJ_NEW_QSTR(MP_QSTR_read), MP_ROM_PTR(&mp_stream_read_obj) },
- { MP_OBJ_NEW_QSTR(MP_QSTR_readline), MP_ROM_PTR(&mp_stream_unbuffered_readline_obj)},
- { MP_OBJ_NEW_QSTR(MP_QSTR_readinto), MP_ROM_PTR(&mp_stream_readinto_obj) },
- // CharacteristicBuffer is currently read-only.
- // { MP_OBJ_NEW_QSTR(MP_QSTR_write), MP_ROM_PTR(&mp_stream_write_obj) },
-
- { MP_OBJ_NEW_QSTR(MP_QSTR_reset_input_buffer), MP_ROM_PTR(&bleio_characteristic_buffer_reset_input_buffer_obj) },
- // Properties
- { MP_ROM_QSTR(MP_QSTR_in_waiting), MP_ROM_PTR(&bleio_characteristic_buffer_in_waiting_obj) },
-
-};
-
-STATIC MP_DEFINE_CONST_DICT(bleio_characteristic_buffer_locals_dict, bleio_characteristic_buffer_locals_dict_table);
-
-STATIC const mp_stream_p_t characteristic_buffer_stream_p = {
- .read = bleio_characteristic_buffer_read,
- .write = bleio_characteristic_buffer_write,
- .ioctl = bleio_characteristic_buffer_ioctl,
- .is_text = false,
- // Match PySerial when possible, such as disallowing optional length argument for .readinto()
- .pyserial_compatibility = true,
-};
-
-
-const mp_obj_type_t bleio_characteristic_buffer_type = {
- { &mp_type_type },
- .name = MP_QSTR_CharacteristicBuffer,
- .make_new = bleio_characteristic_buffer_make_new,
- .getiter = mp_identity_getiter,
- .iternext = mp_stream_unbuffered_iter,
- .protocol = &characteristic_buffer_stream_p,
- .locals_dict = (mp_obj_dict_t*)&bleio_characteristic_buffer_locals_dict
-};
diff --git a/shared-bindings/bleio/CharacteristicBuffer.h b/shared-bindings/bleio/CharacteristicBuffer.h
deleted file mode 100644
index b45835ff3..000000000
--- a/shared-bindings/bleio/CharacteristicBuffer.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_CHARACTERISTICBUFFER_H
-#define MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_CHARACTERISTICBUFFER_H
-
-#include "common-hal/bleio/CharacteristicBuffer.h"
-
-extern const mp_obj_type_t bleio_characteristic_buffer_type;
-
-extern void common_hal_bleio_characteristic_buffer_construct(bleio_characteristic_buffer_obj_t *self, bleio_characteristic_obj_t *characteristic, mp_float_t timeout, size_t buffer_size);
-int common_hal_bleio_characteristic_buffer_read(bleio_characteristic_buffer_obj_t *self, uint8_t *data, size_t len, int *errcode);
-uint32_t common_hal_bleio_characteristic_buffer_rx_characters_available(bleio_characteristic_buffer_obj_t *self);
-void common_hal_bleio_characteristic_buffer_clear_rx_buffer(bleio_characteristic_buffer_obj_t *self);
-bool common_hal_bleio_characteristic_buffer_deinited(bleio_characteristic_buffer_obj_t *self);
-int common_hal_bleio_characteristic_buffer_deinit(bleio_characteristic_buffer_obj_t *self);
-bool common_hal_bleio_characteristic_buffer_connected(bleio_characteristic_buffer_obj_t *self);
-
-#endif // MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_CHARACTERISTICBUFFER_H
diff --git a/shared-bindings/bleio/Descriptor.c b/shared-bindings/bleio/Descriptor.c
deleted file mode 100644
index d7c2a85c7..000000000
--- a/shared-bindings/bleio/Descriptor.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- * Copyright (c) 2017 Glenn Ruben Bakke
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include "py/objproperty.h"
-#include "py/runtime.h"
-#include "shared-bindings/bleio/Attribute.h"
-#include "shared-bindings/bleio/Descriptor.h"
-#include "shared-bindings/bleio/UUID.h"
-
-//| .. currentmodule:: bleio
-//|
-//| :class:`Descriptor` -- BLE descriptor
-//| =========================================================
-//|
-//| Stores information about a BLE descriptor.
-//| Descriptors are encapsulated by BLE characteristics and provide contextual
-//| information about the characteristic.
-//|
-
-//| .. class:: Descriptor(uuid, *, read_perm=`Attribute.OPEN`, write_perm=`Attribute.OPEN`)
-//|
-//| Create a new descriptor object with the UUID uuid
-//|
-//| :param bleio.UUID uuid: The uuid of the descriptor
-//| :param int read_perm: Specifies whether the descriptor can be read by a client, and if so, which
-//| security mode is required. Must be one of the integer values `Attribute.NO_ACCESS`, `Attribute.OPEN`,
-//| `Attribute.ENCRYPT_NO_MITM`, `Attribute.ENCRYPT_WITH_MITM`, `Attribute.LESC_ENCRYPT_WITH_MITM`,
-//| `Attribute.SIGNED_NO_MITM`, or `Attribute.SIGNED_WITH_MITM`.
-//| :param int write_perm: Specifies whether the descriptor can be written by a client, and if so, which
-//| security mode is required. Values allowed are the same as ``read_perm``.
-//| :param int max_length: Maximum length in bytes of the characteristic value. The maximum allowed is
-//| is 512, or possibly 510 if ``fixed_length`` is False. The default, 20, is the maximum
-//| number of data bytes that fit in a single BLE 4.x ATT packet.
-//| :param bool fixed_length: True if the characteristic value is of fixed length.
-//|
-STATIC mp_obj_t bleio_descriptor_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
- enum { ARG_uuid, ARG_read_perm, ARG_write_perm, ARG_max_length, ARG_fixed_length };
- static const mp_arg_t allowed_args[] = {
- { MP_QSTR_uuid, MP_ARG_REQUIRED | MP_ARG_OBJ },
- { MP_QSTR_read_perm, MP_ARG_KW_ONLY| MP_ARG_INT, {.u_int = SECURITY_MODE_OPEN } },
- { MP_QSTR_write_perm, MP_ARG_KW_ONLY| MP_ARG_INT, {.u_int = SECURITY_MODE_OPEN } },
- { MP_QSTR_max_length, MP_ARG_KW_ONLY| MP_ARG_INT, {.u_int = 20} },
- { MP_QSTR_fixed_length, MP_ARG_KW_ONLY| MP_ARG_BOOL, {.u_bool = false} },
- };
-
- mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
- mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
-
- const mp_obj_t uuid_arg = args[ARG_uuid].u_obj;
-
- if (!MP_OBJ_IS_TYPE(uuid_arg, &bleio_uuid_type)) {
- mp_raise_ValueError(translate("Expected a UUID"));
- }
-
- const bleio_attribute_security_mode_t read_perm = args[ARG_read_perm].u_int;
- common_hal_bleio_attribute_security_mode_check_valid(read_perm);
-
- const bleio_attribute_security_mode_t write_perm = args[ARG_write_perm].u_int;
- common_hal_bleio_attribute_security_mode_check_valid(write_perm);
-
- bleio_descriptor_obj_t *self = m_new_obj(bleio_descriptor_obj_t);
- self->base.type = type;
- bleio_uuid_obj_t *uuid = MP_OBJ_TO_PTR(uuid_arg);
-
- // Range checking on max_length arg is done by the common_hal layer, because
- // it may vary depending on underlying BLE implementation.
- common_hal_bleio_descriptor_construct(self, uuid, read_perm, write_perm,
- args[ARG_max_length].u_int, args[ARG_fixed_length].u_bool);
-
- return MP_OBJ_FROM_PTR(self);
-}
-
-//| .. attribute:: uuid
-//|
-//| The descriptor uuid. (read-only)
-//|
-STATIC mp_obj_t bleio_descriptor_get_uuid(mp_obj_t self_in) {
- bleio_descriptor_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- bleio_uuid_obj_t *uuid = common_hal_bleio_descriptor_get_uuid(self);
- return uuid ? MP_OBJ_FROM_PTR(uuid) : mp_const_none;
-}
-MP_DEFINE_CONST_FUN_OBJ_1(bleio_descriptor_get_uuid_obj, bleio_descriptor_get_uuid);
-
-const mp_obj_property_t bleio_descriptor_uuid_obj = {
- .base.type = &mp_type_property,
- .proxy = {(mp_obj_t)&bleio_descriptor_get_uuid_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj},
-};
-
-//| .. attribute:: characteristic (read-only)
-//|
-//| The Characteristic this Descriptor is a part of. None if not yet assigned to a Characteristic.
-//|
-STATIC mp_obj_t bleio_descriptor_get_characteristic(mp_obj_t self_in) {
- bleio_descriptor_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- return common_hal_bleio_descriptor_get_characteristic(self);
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_descriptor_get_characteristic_obj, bleio_descriptor_get_characteristic);
-
-const mp_obj_property_t bleio_descriptor_characteristic_obj = {
- .base.type = &mp_type_property,
- .proxy = { (mp_obj_t)&bleio_descriptor_get_characteristic_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj },
-};
-
-//| .. attribute:: value
-//|
-//| The value of this descriptor.
-//|
-STATIC mp_obj_t bleio_descriptor_get_value(mp_obj_t self_in) {
- bleio_descriptor_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- return common_hal_bleio_descriptor_get_value(self);
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_descriptor_get_value_obj, bleio_descriptor_get_value);
-
-STATIC mp_obj_t bleio_descriptor_set_value(mp_obj_t self_in, mp_obj_t value_in) {
- bleio_descriptor_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- mp_buffer_info_t bufinfo;
- mp_get_buffer_raise(value_in, &bufinfo, MP_BUFFER_READ);
-
- common_hal_bleio_descriptor_set_value(self, &bufinfo);
-
- return mp_const_none;
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_2(bleio_descriptor_set_value_obj, bleio_descriptor_set_value);
-
-const mp_obj_property_t bleio_descriptor_value_obj = {
- .base.type = &mp_type_property,
- .proxy = { (mp_obj_t)&bleio_descriptor_get_value_obj,
- (mp_obj_t)&bleio_descriptor_set_value_obj,
- (mp_obj_t)&mp_const_none_obj },
-};
-
-STATIC const mp_rom_map_elem_t bleio_descriptor_locals_dict_table[] = {
- // Properties
- { MP_ROM_QSTR(MP_QSTR_uuid), MP_ROM_PTR(&bleio_descriptor_uuid_obj) },
- { MP_ROM_QSTR(MP_QSTR_characteristic), MP_ROM_PTR(&bleio_descriptor_characteristic_obj) },
- { MP_ROM_QSTR(MP_QSTR_value), MP_ROM_PTR(&bleio_descriptor_value_obj) },
-};
-
-STATIC MP_DEFINE_CONST_DICT(bleio_descriptor_locals_dict, bleio_descriptor_locals_dict_table);
-
-STATIC void bleio_descriptor_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
- bleio_descriptor_obj_t *self = MP_OBJ_TO_PTR(self_in);
- if (self->uuid) {
- mp_printf(print, "Descriptor(");
- bleio_uuid_print(print, MP_OBJ_FROM_PTR(self->uuid), kind);
- mp_printf(print, ")");
- } else {
- mp_printf(print, "<Descriptor with Unregistered UUID>");
- }
-}
-
-const mp_obj_type_t bleio_descriptor_type = {
- { &mp_type_type },
- .name = MP_QSTR_Descriptor,
- .make_new = bleio_descriptor_make_new,
- .print = bleio_descriptor_print,
- .locals_dict = (mp_obj_dict_t*)&bleio_descriptor_locals_dict
-};
diff --git a/shared-bindings/bleio/Descriptor.h b/shared-bindings/bleio/Descriptor.h
deleted file mode 100644
index 430c0d0b6..000000000
--- a/shared-bindings/bleio/Descriptor.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_DESCRIPTOR_H
-#define MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_DESCRIPTOR_H
-
-#include "shared-module/bleio/Attribute.h"
-#include "common-hal/bleio/Descriptor.h"
-#include "common-hal/bleio/UUID.h"
-
-extern const mp_obj_type_t bleio_descriptor_type;
-
-extern void common_hal_bleio_descriptor_construct(bleio_descriptor_obj_t *self, bleio_uuid_obj_t *uuid, bleio_attribute_security_mode_t read_perm, bleio_attribute_security_mode_t write_perm, mp_int_t max_length, bool fixed_length);
-extern bleio_uuid_obj_t *common_hal_bleio_descriptor_get_uuid(bleio_descriptor_obj_t *self);
-extern bleio_characteristic_obj_t *common_hal_bleio_descriptor_get_characteristic(bleio_descriptor_obj_t *self);
-extern mp_obj_t common_hal_bleio_descriptor_get_value(bleio_descriptor_obj_t *self);
-extern void common_hal_bleio_descriptor_set_value(bleio_descriptor_obj_t *self, mp_buffer_info_t *bufinfo);
-
-#endif // MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_DESCRIPTOR_H
diff --git a/shared-bindings/bleio/Peripheral.c b/shared-bindings/bleio/Peripheral.c
deleted file mode 100644
index 630e6ed36..000000000
--- a/shared-bindings/bleio/Peripheral.c
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- * Copyright (c) 2016 Glenn Ruben Bakke
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include <string.h>
-#include <stdio.h>
-
-#include "ble_drv.h"
-#include "py/objarray.h"
-#include "py/objproperty.h"
-#include "py/objstr.h"
-#include "py/runtime.h"
-
-#include "shared-bindings/bleio/Adapter.h"
-#include "shared-bindings/bleio/Characteristic.h"
-#include "shared-bindings/bleio/Peripheral.h"
-#include "shared-bindings/bleio/Service.h"
-#include "shared-bindings/bleio/UUID.h"
-#include "shared-module/bleio/ScanEntry.h"
-
-#include "common-hal/bleio/Peripheral.h"
-
-#define ADV_INTERVAL_DEFAULT (1.0f)
-#define ADV_INTERVAL_MIN (0.0020f)
-#define ADV_INTERVAL_MIN_STRING "0.0020"
-#define ADV_INTERVAL_MAX (10.24f)
-#define ADV_INTERVAL_MAX_STRING "10.24"
-
-//| .. currentmodule:: bleio
-//|
-//| :class:`Peripheral` -- A BLE peripheral device
-//| =========================================================
-//|
-//| Implement a BLE peripheral which runs locally.
-//| Set up using the supplied services, and then allow advertising to be started and stopped.
-//|
-//| Usage::
-//|
-//| import bleio
-//| from adafruit_ble.advertising import ServerAdvertisement
-//|
-//| # Create a Characteristic.
-//| chara = bleio.Characteristic(bleio.UUID(0x2919), read=True, notify=True)
-//|
-//| # Create a Service providing that one Characteristic.
-//| serv = bleio.Service(bleio.UUID(0x180f), [chara])
-//|
-//| # Create a peripheral and start it up.
-//| periph = bleio.Peripheral([serv])
-//| adv = ServerAdvertisement(periph)
-//| periph.start_advertising(adv.advertising_data_bytes, adv.scan_response_bytes)
-//|
-//| while not periph.connected:
-//| # Wait for connection.
-//| pass
-//|
-//| .. class:: Peripheral(services=(), \*, name=None)
-//|
-//| Create a new Peripheral object.
-//|
-//| :param iterable services: the Service objects representing services available from this peripheral, if any.
-//| A non-connectable peripheral will have no services.
-//| :param str name: The name used when advertising this peripheral. If name is None,
-//| bleio.adapter.default_name will be used.
-//|
-STATIC mp_obj_t bleio_peripheral_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
- enum { ARG_services, ARG_name };
- static const mp_arg_t allowed_args[] = {
- { MP_QSTR_services, MP_ARG_OBJ, {.u_obj = mp_const_empty_tuple} },
- { MP_QSTR_name, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_OBJ_NULL} },
- };
-
- mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
- mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
-
- // If services is not an iterable, an exception will be thrown.
- mp_obj_iter_buf_t iter_buf;
- mp_obj_t iterable = mp_getiter(args[ARG_services].u_obj, &iter_buf);
-
- bleio_peripheral_obj_t *self = m_new_obj(bleio_peripheral_obj_t);
- self->base.type = &bleio_peripheral_type;
-
- // Copy the services list and validate its items.
- mp_obj_t services_list_obj = mp_obj_new_list(0, NULL);
- mp_obj_list_t *services_list = MP_OBJ_FROM_PTR(services_list_obj);
-
- mp_obj_t service;
- while ((service = mp_iternext(iterable)) != MP_OBJ_STOP_ITERATION) {
- if (!MP_OBJ_IS_TYPE(service, &bleio_service_type)) {
- mp_raise_ValueError(translate("non-Service found in services"));
- }
- mp_obj_list_append(services_list, service);
- }
-
- mp_obj_t name = args[ARG_name].u_obj;
- if (name == MP_OBJ_NULL || name == mp_const_none) {
- name = common_hal_bleio_adapter_get_default_name();
- } else if (!MP_OBJ_IS_STR(name)) {
- mp_raise_ValueError(translate("name must be a string"));
- }
-
- common_hal_bleio_peripheral_construct(self, services_list, name);
-
- return MP_OBJ_FROM_PTR(self);
-}
-
-//| .. attribute:: connected (read-only)
-//|
-//| True if connected to a BLE Central device.
-//|
-STATIC mp_obj_t bleio_peripheral_get_connected(mp_obj_t self_in) {
- bleio_peripheral_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- return mp_obj_new_bool(common_hal_bleio_peripheral_get_connected(self));
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_peripheral_get_connected_obj, bleio_peripheral_get_connected);
-
-const mp_obj_property_t bleio_peripheral_connected_obj = {
- .base.type = &mp_type_property,
- .proxy = { (mp_obj_t)&bleio_peripheral_get_connected_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj },
-};
-
-//| .. attribute:: services
-//|
-//| A `tuple` of `bleio.Service` that are offered by this peripheral. (read-only)
-//|
-STATIC mp_obj_t bleio_peripheral_get_services(mp_obj_t self_in) {
- bleio_peripheral_obj_t *self = MP_OBJ_TO_PTR(self_in);
- // Return list as a tuple so user won't be able to change it.
- mp_obj_list_t *services_list = common_hal_bleio_peripheral_get_services(self);
- return mp_obj_new_tuple(services_list->len, services_list->items);
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_peripheral_get_services_obj, bleio_peripheral_get_services);
-
-const mp_obj_property_t bleio_peripheral_services_obj = {
- .base.type = &mp_type_property,
- .proxy = { (mp_obj_t)&bleio_peripheral_get_services_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj },
-};
-
-//| .. attribute:: name
-//|
-//| The peripheral's name, included when advertising. (read-only)
-//|
-STATIC mp_obj_t bleio_peripheral_get_name(mp_obj_t self_in) {
- bleio_peripheral_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- return common_hal_bleio_peripheral_get_name(self);
-}
-MP_DEFINE_CONST_FUN_OBJ_1(bleio_peripheral_get_name_obj, bleio_peripheral_get_name);
-
-const mp_obj_property_t bleio_peripheral_name_obj = {
- .base.type = &mp_type_property,
- .proxy = { (mp_obj_t)&bleio_peripheral_get_name_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj },
-};
-
-//| .. method:: start_advertising(data, *, scan_response=None, connectable=True, interval=1)
-//|
-//| Starts advertising the peripheral. The peripheral's name and
-//| services are included in the advertisement packets.
-//|
-//| :param buf data: advertising data packet bytes
-//| :param buf scan_response: scan response data packet bytes. ``None`` if no scan response is needed.
-//| :param bool connectable: If `True` then other devices are allowed to connect to this peripheral.
-//| :param float interval: advertising interval, in seconds
-//|
-STATIC mp_obj_t bleio_peripheral_start_advertising(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
- bleio_peripheral_obj_t *self = MP_OBJ_TO_PTR(pos_args[0]);
-
- enum { ARG_data, ARG_scan_response, ARG_connectable, ARG_interval };
- static const mp_arg_t allowed_args[] = {
- { MP_QSTR_data, MP_ARG_REQUIRED | MP_ARG_OBJ },
- { MP_QSTR_scan_response, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
- { MP_QSTR_connectable, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = true} },
- { MP_QSTR_interval, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
- };
-
- mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
- mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
-
- mp_buffer_info_t data_bufinfo;
- mp_get_buffer_raise(args[ARG_data].u_obj, &data_bufinfo, MP_BUFFER_READ);
-
- // Pass an empty buffer if scan_response not provided.
- mp_buffer_info_t scan_response_bufinfo = { 0 };
- if (args[ARG_scan_response].u_obj != mp_const_none) {
- mp_get_buffer_raise(args[ARG_scan_response].u_obj, &scan_response_bufinfo, MP_BUFFER_READ);
- }
-
- if (args[ARG_interval].u_obj == MP_OBJ_NULL) {
- args[ARG_interval].u_obj = mp_obj_new_float(1.0F);
- }
-
- const mp_float_t interval = mp_obj_float_get(args[ARG_interval].u_obj);
- if (interval < ADV_INTERVAL_MIN || interval > ADV_INTERVAL_MAX) {
- mp_raise_ValueError_varg(translate("interval must be in range %s-%s"),
- ADV_INTERVAL_MIN_STRING, ADV_INTERVAL_MAX_STRING);
- }
-
- common_hal_bleio_peripheral_start_advertising(self, args[ARG_connectable].u_bool, interval,
- &data_bufinfo, &scan_response_bufinfo);
-
- return mp_const_none;
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_KW(bleio_peripheral_start_advertising_obj, 2, bleio_peripheral_start_advertising);
-
-//| .. method:: stop_advertising()
-//|
-//| Stop sending advertising packets.
-STATIC mp_obj_t bleio_peripheral_stop_advertising(mp_obj_t self_in) {
- bleio_peripheral_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- common_hal_bleio_peripheral_stop_advertising(self);
-
- return mp_const_none;
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_peripheral_stop_advertising_obj, bleio_peripheral_stop_advertising);
-
-//| .. method:: disconnect()
-//|
-//| Disconnects from the remote central.
-//| Normally the central initiates a disconnection. Use this only
-//| if necessary for your application.
-//|
-STATIC mp_obj_t bleio_peripheral_disconnect(mp_obj_t self_in) {
- bleio_peripheral_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- common_hal_bleio_peripheral_disconnect(self);
-
- return mp_const_none;
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_peripheral_disconnect_obj, bleio_peripheral_disconnect);
-
-//| .. method:: discover_remote_services(service_uuids_whitelist=None)
-//| Do BLE discovery for all services or for the given service UUIDS,
-//| to find their handles and characteristics, and return the discovered services.
-//| `Peripheral.connected` must be True.
-//|
-//| :param iterable service_uuids_whitelist: an iterable of :py:class:~`UUID` objects for the services
-//| provided by the peripheral that you want to use.
-//| The peripheral may provide more services, but services not listed are ignored
-//| and will not be returned.
-//|
-//| If service_uuids_whitelist is None, then all services will undergo discovery, which can be slow.
-//|
-//| If the service UUID is 128-bit, or its characteristic UUID's are 128-bit, you
-//| you must have already created a :py:class:~`UUID` object for that UUID in order for the
-//| service or characteristic to be discovered. Creating the UUID causes the UUID to be registered
-//| for use. (This restriction may be lifted in the future.)
-//|
-//| Thought it is unusual for a peripheral to act as a BLE client, it can do so, and
-//| needs to be able to do discovery on its peer (a central).
-//| Examples include a peripheral accessing a central that provides Current Time Service,
-//| Apple Notification Center Service, or Battery Service.
-//|
-//| :return: A tuple of services provided by the remote central.
-//|
-STATIC mp_obj_t bleio_peripheral_discover_remote_services(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
- bleio_peripheral_obj_t *self = MP_OBJ_TO_PTR(pos_args[0]);
-
- enum { ARG_service_uuids_whitelist };
- static const mp_arg_t allowed_args[] = {
- { MP_QSTR_service_uuids_whitelist, MP_ARG_OBJ, {.u_obj = mp_const_none} },
- };
-
- mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
- mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
-
- if (!common_hal_bleio_peripheral_get_connected(self)) {
- mp_raise_ValueError(translate("Not connected"));
- }
-
- return MP_OBJ_FROM_PTR(common_hal_bleio_peripheral_discover_remote_services(
- MP_OBJ_FROM_PTR(self),
- args[ARG_service_uuids_whitelist].u_obj));
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_KW(bleio_peripheral_discover_remote_services_obj, 1, bleio_peripheral_discover_remote_services);
-
-//| .. method:: pair()
-//|
-//| Request pairing with connected central.
-STATIC mp_obj_t bleio_peripheral_pair(mp_obj_t self_in) {
- bleio_peripheral_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- common_hal_bleio_peripheral_pair(self);
-
- return mp_const_none;
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_peripheral_pair_obj, bleio_peripheral_pair);
-
-STATIC const mp_rom_map_elem_t bleio_peripheral_locals_dict_table[] = {
- // Methods
- { MP_ROM_QSTR(MP_QSTR_start_advertising), MP_ROM_PTR(&bleio_peripheral_start_advertising_obj) },
- { MP_ROM_QSTR(MP_QSTR_stop_advertising), MP_ROM_PTR(&bleio_peripheral_stop_advertising_obj) },
- { MP_ROM_QSTR(MP_QSTR_disconnect), MP_ROM_PTR(&bleio_peripheral_disconnect_obj) },
- { MP_ROM_QSTR(MP_QSTR_discover_remote_services), MP_ROM_PTR(&bleio_peripheral_discover_remote_services_obj) },
- { MP_ROM_QSTR(MP_QSTR_pair) , MP_ROM_PTR(&bleio_peripheral_pair_obj) },
-
- // Properties
- { MP_ROM_QSTR(MP_QSTR_connected), MP_ROM_PTR(&bleio_peripheral_connected_obj) },
- { MP_ROM_QSTR(MP_QSTR_name), MP_ROM_PTR(&bleio_peripheral_name_obj) },
- { MP_ROM_QSTR(MP_QSTR_services), MP_ROM_PTR(&bleio_peripheral_services_obj) },
-};
-
-STATIC MP_DEFINE_CONST_DICT(bleio_peripheral_locals_dict, bleio_peripheral_locals_dict_table);
-
-const mp_obj_type_t bleio_peripheral_type = {
- { &mp_type_type },
- .name = MP_QSTR_Peripheral,
- .make_new = bleio_peripheral_make_new,
- .locals_dict = (mp_obj_dict_t*)&bleio_peripheral_locals_dict
-};
diff --git a/shared-bindings/bleio/Peripheral.h b/shared-bindings/bleio/Peripheral.h
deleted file mode 100644
index 597b65ce2..000000000
--- a/shared-bindings/bleio/Peripheral.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_PERIPHERAL_H
-#define MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_PERIPHERAL_H
-
-#include "py/objtuple.h"
-#include "common-hal/bleio/Peripheral.h"
-
-extern const mp_obj_type_t bleio_peripheral_type;
-
-extern void common_hal_bleio_peripheral_construct(bleio_peripheral_obj_t *self, mp_obj_list_t *service_list, mp_obj_t name);
-extern mp_obj_list_t *common_hal_bleio_peripheral_get_services(bleio_peripheral_obj_t *self);
-extern bool common_hal_bleio_peripheral_get_connected(bleio_peripheral_obj_t *self);
-extern mp_obj_t common_hal_bleio_peripheral_get_name(bleio_peripheral_obj_t *self);
-extern void common_hal_bleio_peripheral_start_advertising(bleio_peripheral_obj_t *device, bool connectable, float interval, mp_buffer_info_t *advertising_data_bufinfo, mp_buffer_info_t *scan_response_data_bufinfo);
-extern void common_hal_bleio_peripheral_stop_advertising(bleio_peripheral_obj_t *device);
-extern void common_hal_bleio_peripheral_disconnect(bleio_peripheral_obj_t *device);
-extern mp_obj_tuple_t *common_hal_bleio_peripheral_discover_remote_services(bleio_peripheral_obj_t *self, mp_obj_t service_uuids_whitelist);
-extern void common_hal_bleio_peripheral_pair(bleio_peripheral_obj_t *device);
-
-#endif // MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_PERIPHERAL_H
diff --git a/shared-bindings/bleio/ScanEntry.c b/shared-bindings/bleio/ScanEntry.c
deleted file mode 100644
index 6eb02c716..000000000
--- a/shared-bindings/bleio/ScanEntry.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- * Copyright (c) 2017 Glenn Ruben Bakke
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include <string.h>
-
-#include "py/objproperty.h"
-#include "shared-bindings/bleio/Address.h"
-#include "shared-bindings/bleio/ScanEntry.h"
-#include "shared-bindings/bleio/UUID.h"
-#include "shared-module/bleio/ScanEntry.h"
-
-//| .. currentmodule:: bleio
-//|
-//| :class:`ScanEntry` -- BLE scan response entry
-//| =========================================================
-//|
-//| Encapsulates information about a device that was received as a
-//| response to a BLE scan request. This object may only be created
-//| by a `bleio.Scanner`: it has no user-visible constructor.
-//|
-
-//| .. attribute:: address
-//|
-//| The address of the device (read-only), of type `bleio.Address`.
-//|
-STATIC mp_obj_t bleio_scanentry_get_address(mp_obj_t self_in) {
- bleio_scanentry_obj_t *self = MP_OBJ_TO_PTR(self_in);
- return common_hal_bleio_scanentry_get_address(self);
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_scanentry_get_address_obj, bleio_scanentry_get_address);
-
-const mp_obj_property_t bleio_scanentry_address_obj = {
- .base.type = &mp_type_property,
- .proxy = { (mp_obj_t)&bleio_scanentry_get_address_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj },
-};
-
-//| .. attribute:: advertisement_bytes
-//|
-//| All the advertisement data present in the packet, returned as a ``bytes`` object. (read-only)
-//|
-STATIC mp_obj_t scanentry_get_advertisement_bytes(mp_obj_t self_in) {
- bleio_scanentry_obj_t *self = MP_OBJ_TO_PTR(self_in);
- return common_hal_bleio_scanentry_get_advertisement_bytes(self);
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_scanentry_get_advertisement_bytes_obj, scanentry_get_advertisement_bytes);
-
-const mp_obj_property_t bleio_scanentry_advertisement_bytes_obj = {
- .base.type = &mp_type_property,
- .proxy = { (mp_obj_t)&bleio_scanentry_get_advertisement_bytes_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj },
-};
-
-//| .. attribute:: rssi
-//|
-//| The signal strength of the device at the time of the scan, in integer dBm. (read-only)
-//|
-STATIC mp_obj_t scanentry_get_rssi(mp_obj_t self_in) {
- bleio_scanentry_obj_t *self = MP_OBJ_TO_PTR(self_in);
- return mp_obj_new_int(common_hal_bleio_scanentry_get_rssi(self));
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_scanentry_get_rssi_obj, scanentry_get_rssi);
-
-const mp_obj_property_t bleio_scanentry_rssi_obj = {
- .base.type = &mp_type_property,
- .proxy = { (mp_obj_t)&bleio_scanentry_get_rssi_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj },
-};
-
-
-STATIC const mp_rom_map_elem_t bleio_scanentry_locals_dict_table[] = {
- { MP_ROM_QSTR(MP_QSTR_address), MP_ROM_PTR(&bleio_scanentry_address_obj) },
- { MP_ROM_QSTR(MP_QSTR_advertisement_bytes), MP_ROM_PTR(&bleio_scanentry_advertisement_bytes_obj) },
- { MP_ROM_QSTR(MP_QSTR_rssi), MP_ROM_PTR(&bleio_scanentry_rssi_obj) },
-};
-
-STATIC MP_DEFINE_CONST_DICT(bleio_scanentry_locals_dict, bleio_scanentry_locals_dict_table);
-
-const mp_obj_type_t bleio_scanentry_type = {
- { &mp_type_type },
- .name = MP_QSTR_ScanEntry,
- .locals_dict = (mp_obj_dict_t*)&bleio_scanentry_locals_dict
-};
diff --git a/shared-bindings/bleio/ScanEntry.h b/shared-bindings/bleio/ScanEntry.h
deleted file mode 100644
index 77e93175f..000000000
--- a/shared-bindings/bleio/ScanEntry.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- * Copyright (c) 2017 Glenn Ruben Bakke
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_SCANENTRY_H
-#define MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_SCANENTRY_H
-
-#include "py/obj.h"
-#include "shared-module/bleio/ScanEntry.h"
-
-extern const mp_obj_type_t bleio_scanentry_type;
-
-mp_obj_t common_hal_bleio_scanentry_get_address(bleio_scanentry_obj_t *self);
-mp_obj_t common_hal_bleio_scanentry_get_advertisement_bytes(bleio_scanentry_obj_t *self);
-mp_int_t common_hal_bleio_scanentry_get_rssi(bleio_scanentry_obj_t *self);
-
-#endif // MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_SCANENTRY_H
diff --git a/shared-bindings/bleio/Scanner.c b/shared-bindings/bleio/Scanner.c
deleted file mode 100644
index 269c42591..000000000
--- a/shared-bindings/bleio/Scanner.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include "py/objproperty.h"
-#include "py/runtime.h"
-#include "shared-bindings/bleio/ScanEntry.h"
-#include "shared-bindings/bleio/Scanner.h"
-
-#define INTERVAL_DEFAULT (0.1f)
-#define INTERVAL_MIN (0.0025f)
-#define INTERVAL_MIN_STRING "0.0025"
-#define INTERVAL_MAX (40.959375f)
-#define INTERVAL_MAX_STRING "40.959375"
-#define WINDOW_DEFAULT (0.1f)
-
-//| .. currentmodule:: bleio
-//|
-//| :class:`Scanner` -- scan for nearby BLE devices
-//| =========================================================
-//|
-//| Scan for nearby BLE devices.
-//|
-//| Usage::
-//|
-//| import bleio
-//| scanner = bleio.Scanner()
-//| entries = scanner.scan(2.5) # Scan for 2.5 seconds
-//|
-
-//| .. class:: Scanner()
-//|
-//| Create a new Scanner object.
-//|
-STATIC mp_obj_t bleio_scanner_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *all_args, mp_map_t *kw_args) {
- mp_arg_check_num(n_args, kw_args, 0, 0, false);
-
- bleio_scanner_obj_t *self = m_new_obj(bleio_scanner_obj_t);
- self->base.type = type;
-
- common_hal_bleio_scanner_construct(self);
-
- return MP_OBJ_FROM_PTR(self);
-}
-
-//| .. method:: scan(timeout, \*, interval=0.1, window=0.1)
-//|
-//| Performs a BLE scan.
-//|
-//| :param float timeout: the scan timeout in seconds
-//| :param float interval: the interval (in seconds) between the start of two consecutive scan windows
-//| Must be in the range 0.0025 - 40.959375 seconds.
-//| :param float window: the duration (in seconds) to scan a single BLE channel.
-//| window must be <= interval.
-//| :returns: an iterable of `ScanEntry` objects
-//| :rtype: iterable
-//|
-STATIC mp_obj_t bleio_scanner_scan(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
- enum { ARG_timeout, ARG_interval, ARG_window };
- static const mp_arg_t allowed_args[] = {
- { MP_QSTR_timeout, MP_ARG_REQUIRED | MP_ARG_OBJ },
- { MP_QSTR_interval, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
- { MP_QSTR_window, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
- };
-
- bleio_scanner_obj_t *self = MP_OBJ_TO_PTR(pos_args[0]);
- mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
- mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
-
- const mp_float_t timeout = mp_obj_get_float(args[ARG_timeout].u_obj);
-
- if (args[ARG_interval].u_obj == MP_OBJ_NULL) {
- args[ARG_interval].u_obj = mp_obj_new_float(INTERVAL_DEFAULT);
- }
-
- if (args[ARG_window].u_obj == MP_OBJ_NULL) {
- args[ARG_window].u_obj = mp_obj_new_float(WINDOW_DEFAULT);
- }
-
- const mp_float_t interval = mp_obj_float_get(args[ARG_interval].u_obj);
- if (interval < INTERVAL_MIN || interval > INTERVAL_MAX) {
- mp_raise_ValueError_varg(translate("interval must be in range %s-%s"), INTERVAL_MIN_STRING, INTERVAL_MAX_STRING);
- }
-
- const mp_float_t window = mp_obj_float_get(args[ARG_window].u_obj);
- if (window > interval) {
- mp_raise_ValueError(translate("window must be <= interval"));
- }
-
- return common_hal_bleio_scanner_scan(self, timeout, interval, window);
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_KW(bleio_scanner_scan_obj, 2, bleio_scanner_scan);
-
-
-STATIC const mp_rom_map_elem_t bleio_scanner_locals_dict_table[] = {
- { MP_ROM_QSTR(MP_QSTR_scan), MP_ROM_PTR(&bleio_scanner_scan_obj) },
-};
-
-STATIC MP_DEFINE_CONST_DICT(bleio_scanner_locals_dict, bleio_scanner_locals_dict_table);
-
-const mp_obj_type_t bleio_scanner_type = {
- { &mp_type_type },
- .name = MP_QSTR_Scanner,
- .make_new = bleio_scanner_make_new,
- .locals_dict = (mp_obj_dict_t*)&bleio_scanner_locals_dict
-};
diff --git a/shared-bindings/bleio/Scanner.h b/shared-bindings/bleio/Scanner.h
deleted file mode 100644
index 3a0ce7eae..000000000
--- a/shared-bindings/bleio/Scanner.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_SCANNER_H
-#define MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_SCANNER_H
-
-#include "py/objtype.h"
-#include "common-hal/bleio/Scanner.h"
-
-extern const mp_obj_type_t bleio_scanner_type;
-
-extern void common_hal_bleio_scanner_construct(bleio_scanner_obj_t *self);
-extern mp_obj_t common_hal_bleio_scanner_scan(bleio_scanner_obj_t *self, mp_float_t timeout, mp_float_t interval, mp_float_t window);
-extern void common_hal_bleio_scanner_stop(bleio_scanner_obj_t *self);
-
-#endif // MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_SCANNER_H
diff --git a/shared-bindings/bleio/Service.c b/shared-bindings/bleio/Service.c
deleted file mode 100644
index 6961b0b52..000000000
--- a/shared-bindings/bleio/Service.c
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- * Copyright (c) 2017 Glenn Ruben Bakke
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include "py/objproperty.h"
-#include "py/runtime.h"
-#include "shared-bindings/bleio/Characteristic.h"
-#include "shared-bindings/bleio/Service.h"
-#include "shared-bindings/bleio/UUID.h"
-
-//| .. currentmodule:: bleio
-//|
-//| :class:`Service` -- BLE service
-//| =========================================================
-//|
-//| Stores information about a BLE service and its characteristics.
-//|
-
-//| .. class:: Service(uuid, characteristics, *, secondary=False)
-//|
-//| Create a new Service object identified by the specified UUID.
-//|
-//| To mark the service as secondary, pass `True` as :py:data:`secondary`.
-//|
-//| :param bleio.UUID uuid: The uuid of the service
-//| :param iterable characteristics: the Characteristic objects for this service
-//| :param bool secondary: If the service is a secondary one
-//|
-//| A Service may be remote (:py:data:`remote` is ``True``), but a remote Service
-//| cannot be constructed directly. It is created by `Central.discover_remote_services()`
-//| or `Peripheral.discover_remote_services()`.
-
-STATIC mp_obj_t bleio_service_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
- enum { ARG_uuid, ARG_characteristics, ARG_secondary };
- static const mp_arg_t allowed_args[] = {
- { MP_QSTR_uuid, MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = mp_const_none} },
- { MP_QSTR_characteristics, MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = mp_const_none} },
- { MP_QSTR_secondary, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = false} },
- };
-
- mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
- mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
-
- const mp_obj_t uuid_obj = args[ARG_uuid].u_obj;
-
- if (!MP_OBJ_IS_TYPE(uuid_obj, &bleio_uuid_type)) {
- mp_raise_ValueError(translate("Expected a UUID"));
- }
-
- bleio_service_obj_t *self = m_new_obj(bleio_service_obj_t);
- self->base.type = &bleio_service_type;
-
- const bool is_secondary = args[ARG_secondary].u_bool;
- bleio_uuid_obj_t *uuid = MP_OBJ_TO_PTR(uuid_obj);
-
- // If characteristics is not an iterable, an exception will be thrown.
- mp_obj_iter_buf_t iter_buf;
- mp_obj_t iterable = mp_getiter(args[ARG_characteristics].u_obj, &iter_buf);
- mp_obj_t characteristic_obj;
-
- // Copy the characteristics list and validate its items.
- mp_obj_t char_list_obj = mp_obj_new_list(0, NULL);
- mp_obj_list_t *char_list = MP_OBJ_TO_PTR(char_list_obj);
-
- while ((characteristic_obj = mp_iternext(iterable)) != MP_OBJ_STOP_ITERATION) {
- if (!MP_OBJ_IS_TYPE(characteristic_obj, &bleio_characteristic_type)) {
- mp_raise_ValueError(translate("characteristics includes an object that is not a Characteristic"));
- }
- bleio_characteristic_obj_t *characteristic = MP_OBJ_TO_PTR(characteristic_obj);
- if (common_hal_bleio_uuid_get_uuid128_reference(uuid) !=
- common_hal_bleio_uuid_get_uuid128_reference(characteristic->uuid)) {
- // The descriptor base UUID doesn't match the characteristic base UUID.
- mp_raise_ValueError(translate("Characteristic UUID doesn't match Service UUID"));
- }
- if (common_hal_bleio_characteristic_get_service(characteristic) != MP_OBJ_NULL) {
- mp_raise_ValueError(translate("Characteristic is already attached to a Service"));
- }
- mp_obj_list_append(char_list_obj, characteristic_obj);
- }
-
- common_hal_bleio_service_construct(self, uuid, char_list, is_secondary);
-
- return MP_OBJ_FROM_PTR(self);
-}
-
-//| .. attribute:: characteristics
-//|
-//| A tuple of `bleio.Characteristic` that are offered by this service. (read-only)
-//|
-STATIC mp_obj_t bleio_service_get_characteristics(mp_obj_t self_in) {
- bleio_service_obj_t *self = MP_OBJ_TO_PTR(self_in);
- // Return list as a tuple so user won't be able to change it.
- mp_obj_list_t *char_list = common_hal_bleio_service_get_characteristic_list(self);
- return mp_obj_new_tuple(char_list->len, char_list->items);
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_service_get_characteristics_obj, bleio_service_get_characteristics);
-
-const mp_obj_property_t bleio_service_characteristics_obj = {
- .base.type = &mp_type_property,
- .proxy = { (mp_obj_t)&bleio_service_get_characteristics_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj },
-};
-
-//| .. attribute:: remote
-//|
-//| True if this is a service provided by a remote device. (read-only)
-//|
-STATIC mp_obj_t bleio_service_get_remote(mp_obj_t self_in) {
- bleio_service_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- return mp_obj_new_bool(common_hal_bleio_service_get_is_remote(self));
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_service_get_remote_obj, bleio_service_get_remote);
-
-const mp_obj_property_t bleio_service_remote_obj = {
- .base.type = &mp_type_property,
- .proxy = { (mp_obj_t)&bleio_service_get_remote_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj },
-};
-
-//| .. attribute:: secondary
-//|
-//| True if this is a secondary service. (read-only)
-//|
-STATIC mp_obj_t bleio_service_get_secondary(mp_obj_t self_in) {
- bleio_service_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- return mp_obj_new_bool(common_hal_bleio_service_get_is_secondary(self));
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_service_get_secondary_obj, bleio_service_get_secondary);
-
-const mp_obj_property_t bleio_service_secondary_obj = {
- .base.type = &mp_type_property,
- .proxy = { (mp_obj_t)&bleio_service_get_secondary_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj },
-};
-
-//| .. attribute:: uuid
-//|
-//| The UUID of this service. (read-only)
-//| Will be ``None`` if the 128-bit UUID for this service is not known.
-//|
-STATIC mp_obj_t bleio_service_get_uuid(mp_obj_t self_in) {
- bleio_service_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- bleio_uuid_obj_t *uuid = common_hal_bleio_service_get_uuid(self);
- return uuid ? MP_OBJ_FROM_PTR(uuid) : mp_const_none;
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_service_get_uuid_obj, bleio_service_get_uuid);
-
-const mp_obj_property_t bleio_service_uuid_obj = {
- .base.type = &mp_type_property,
- .proxy = { (mp_obj_t)&bleio_service_get_uuid_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj },
-};
-
-STATIC const mp_rom_map_elem_t bleio_service_locals_dict_table[] = {
- { MP_ROM_QSTR(MP_QSTR_characteristics), MP_ROM_PTR(&bleio_service_characteristics_obj) },
- { MP_ROM_QSTR(MP_QSTR_secondary), MP_ROM_PTR(&bleio_service_secondary_obj) },
- { MP_ROM_QSTR(MP_QSTR_uuid), MP_ROM_PTR(&bleio_service_uuid_obj) },
-};
-STATIC MP_DEFINE_CONST_DICT(bleio_service_locals_dict, bleio_service_locals_dict_table);
-
-STATIC void bleio_service_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
- bleio_service_obj_t *self = MP_OBJ_TO_PTR(self_in);
- if (self->uuid) {
- mp_printf(print, "Service(");
- bleio_uuid_print(print, MP_OBJ_FROM_PTR(self->uuid), kind);
- mp_printf(print, ")");
- } else {
- mp_printf(print, "<Service with unregistered UUID>");
- }
-}
-
-const mp_obj_type_t bleio_service_type = {
- { &mp_type_type },
- .name = MP_QSTR_Service,
- .make_new = bleio_service_make_new,
- .print = bleio_service_print,
- .locals_dict = (mp_obj_dict_t*)&bleio_service_locals_dict
-};
diff --git a/shared-bindings/bleio/Service.h b/shared-bindings/bleio/Service.h
deleted file mode 100644
index 716c2e8a9..000000000
--- a/shared-bindings/bleio/Service.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_SERVICE_H
-#define MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_SERVICE_H
-
-#include "common-hal/bleio/Service.h"
-
-const mp_obj_type_t bleio_service_type;
-
-extern void common_hal_bleio_service_construct(bleio_service_obj_t *self, bleio_uuid_obj_t *uuid, mp_obj_list_t *characteristic_list, bool is_secondary);
-extern bleio_uuid_obj_t *common_hal_bleio_service_get_uuid(bleio_service_obj_t *self);
-extern mp_obj_list_t *common_hal_bleio_service_get_characteristic_list(bleio_service_obj_t *self);
-extern bool common_hal_bleio_service_get_is_remote(bleio_service_obj_t *self);
-extern bool common_hal_bleio_service_get_is_secondary(bleio_service_obj_t *self);
-extern void common_hal_bleio_service_add_all_characteristics(bleio_service_obj_t *self);
-
-#endif // MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_SERVICE_H
diff --git a/shared-bindings/bleio/UUID.c b/shared-bindings/bleio/UUID.c
deleted file mode 100644
index dca7ea010..000000000
--- a/shared-bindings/bleio/UUID.c
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- * Copyright (c) 2017 Glenn Ruben Bakke
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include <string.h>
-
-#include "py/objproperty.h"
-#include "py/objstr.h"
-#include "py/runtime.h"
-#include "shared-bindings/bleio/UUID.h"
-
-//| .. currentmodule:: bleio
-//|
-//| :class:`UUID` -- BLE UUID
-//| =========================================================
-//|
-//| A 16-bit or 128-bit UUID. Can be used for services, characteristics, descriptors and more.
-//|
-
-//| .. class:: UUID(value)
-//|
-//| Create a new UUID or UUID object encapsulating the uuid value.
-//| The value can be one of:
-//|
-//| - an `int` value in range 0 to 0xFFFF (Bluetooth SIG 16-bit UUID)
-//| - a buffer object (bytearray, bytes) of 16 bytes in little-endian order (128-bit UUID)
-//| - a string of hex digits of the form 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
-//|
-//| Creating a 128-bit UUID registers the UUID with the onboard BLE software, and provides a
-//| temporary 16-bit UUID that can be used in place of the full 128-bit UUID.
-//|
-//| :param value: The uuid value to encapsulate
-//| :type value: int or typing.ByteString
-//|
-STATIC mp_obj_t bleio_uuid_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
- mp_arg_check_num(n_args, kw_args, 1, 1, false);
-
- bleio_uuid_obj_t *self = m_new_obj(bleio_uuid_obj_t);
- self->base.type = type;
-
- const mp_obj_t value = pos_args[0];
- uint8_t uuid128[16];
-
- if (MP_OBJ_IS_INT(value)) {
- mp_int_t uuid16 = mp_obj_get_int(value);
- if (uuid16 < 0 || uuid16 > 0xffff) {
- mp_raise_ValueError(translate("UUID integer value must be 0-0xffff"));
- }
-
- // NULL means no 128-bit value.
- common_hal_bleio_uuid_construct(self, uuid16, NULL);
-
- } else {
- if (MP_OBJ_IS_STR(value)) {
- // 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
- GET_STR_DATA_LEN(value, chars, len);
- char hex[32];
- // Validate length, hyphens, and hex digits.
- bool good_uuid =
- len == 36 && chars[8] == '-' && chars[13] == '-' && chars[18] == '-' && chars[23] == '-';
- if (good_uuid) {
- size_t hex_idx = 0;
- for (size_t i = 0; i < len; i++) {
- if (unichar_isxdigit(chars[i])) {
- hex[hex_idx] = chars[i];
- hex_idx++;
- }
- }
- good_uuid = hex_idx == 32;
- }
- if (!good_uuid) {
- mp_raise_ValueError(translate("UUID string not 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'"));
- }
-
- size_t hex_idx = 0;
- for (int i = 15; i >= 0; i--) {
- uuid128[i] = (unichar_xdigit_value(hex[hex_idx]) << 4) | unichar_xdigit_value(hex[hex_idx + 1]);
- hex_idx += 2;
- }
- } else {
- // Last possibility is that it's a buf.
- mp_buffer_info_t bufinfo;
- if (!mp_get_buffer(value, &bufinfo, MP_BUFFER_READ)) {
- mp_raise_ValueError(translate("UUID value is not str, int or byte buffer"));
- }
-
- if (bufinfo.len != 16) {
- mp_raise_ValueError(translate("Byte buffer must be 16 bytes."));
- }
-
- memcpy(uuid128, bufinfo.buf, 16);
- }
-
- // Str and bytes both get constructed the same way here.
- uint32_t uuid16 = (uuid128[13] << 8) | uuid128[12];
- uuid128[12] = 0;
- uuid128[13] = 0;
- common_hal_bleio_uuid_construct(self, uuid16, uuid128);
- }
-
- return MP_OBJ_FROM_PTR(self);
-}
-
-//| .. attribute:: uuid16
-//|
-//| The 16-bit part of the UUID. (read-only)
-//|
-//| :type: int
-//|
-STATIC mp_obj_t bleio_uuid_get_uuid16(mp_obj_t self_in) {
- bleio_uuid_obj_t *self = MP_OBJ_TO_PTR(self_in);
- return MP_OBJ_NEW_SMALL_INT(common_hal_bleio_uuid_get_uuid16(self));
-}
-
-MP_DEFINE_CONST_FUN_OBJ_1(bleio_uuid_get_uuid16_obj, bleio_uuid_get_uuid16);
-
-const mp_obj_property_t bleio_uuid_uuid16_obj = {
- .base.type = &mp_type_property,
- .proxy = {(mp_obj_t)&bleio_uuid_get_uuid16_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj},
-};
-
-//| .. attribute:: uuid128
-//|
-//| The 128-bit value of the UUID
-//| Raises AttributeError if this is a 16-bit UUID. (read-only)
-//|
-//| :type: bytes
-//|
-STATIC mp_obj_t bleio_uuid_get_uuid128(mp_obj_t self_in) {
- bleio_uuid_obj_t *self = MP_OBJ_TO_PTR(self_in);
-
- uint8_t uuid128[16];
- if (!common_hal_bleio_uuid_get_uuid128(self, uuid128)) {
- mp_raise_AttributeError(translate("not a 128-bit UUID"));
- }
- return mp_obj_new_bytes(uuid128, 16);
-}
-
-MP_DEFINE_CONST_FUN_OBJ_1(bleio_uuid_get_uuid128_obj, bleio_uuid_get_uuid128);
-
-const mp_obj_property_t bleio_uuid_uuid128_obj = {
- .base.type = &mp_type_property,
- .proxy = {(mp_obj_t)&bleio_uuid_get_uuid128_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj},
-};
-
-//| .. attribute:: size
-//|
-//| 128 if this UUID represents a 128-bit vendor-specific UUID. 16 if this UUID represents a
-//| 16-bit Bluetooth SIG assigned UUID. (read-only) 32-bit UUIDs are not currently supported.
-//|
-//| :type: int
-//|
-STATIC mp_obj_t bleio_uuid_get_size(mp_obj_t self_in) {
- bleio_uuid_obj_t *self = MP_OBJ_TO_PTR(self_in);
- return MP_OBJ_NEW_SMALL_INT(common_hal_bleio_uuid_get_size(self));
-}
-
-MP_DEFINE_CONST_FUN_OBJ_1(bleio_uuid_get_size_obj, bleio_uuid_get_size);
-
-const mp_obj_property_t bleio_uuid_size_obj = {
- .base.type = &mp_type_property,
- .proxy = {(mp_obj_t)&bleio_uuid_get_size_obj,
- (mp_obj_t)&mp_const_none_obj,
- (mp_obj_t)&mp_const_none_obj},
-};
-
-STATIC const mp_rom_map_elem_t bleio_uuid_locals_dict_table[] = {
- { MP_ROM_QSTR(MP_QSTR_uuid16), MP_ROM_PTR(&bleio_uuid_uuid16_obj) },
- { MP_ROM_QSTR(MP_QSTR_uuid128), MP_ROM_PTR(&bleio_uuid_uuid128_obj) },
- { MP_ROM_QSTR(MP_QSTR_size), MP_ROM_PTR(&bleio_uuid_size_obj) },
-};
-
-STATIC MP_DEFINE_CONST_DICT(bleio_uuid_locals_dict, bleio_uuid_locals_dict_table);
-
-STATIC mp_obj_t bleio_uuid_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
- bleio_uuid_obj_t *self = MP_OBJ_TO_PTR(self_in);
- switch (op) {
- case MP_UNARY_OP_HASH:
- if (common_hal_bleio_uuid_get_size(self) == 16) {
- return MP_OBJ_NEW_SMALL_INT(common_hal_bleio_uuid_get_uuid16(self));
- } else {
- union {
- uint8_t uuid128_bytes[16];
- uint16_t uuid128_uint16[8];
- } uuid128;
- common_hal_bleio_uuid_get_uuid128(self, uuid128.uuid128_bytes);
- int hash = 0;
- for (size_t i = 0; i < MP_ARRAY_SIZE(uuid128.uuid128_uint16); i++) {
- hash += uuid128.uuid128_uint16[i];
- }
- return MP_OBJ_NEW_SMALL_INT(hash);
- }
- default:
- return MP_OBJ_NULL; // op not supported
- }
-}
-
-//|
-
-//| .. method:: __eq__(other)
-//|
-//| Two UUID objects are equal if their values match and they are both 128-bit or both 16-bit.
-//|
-STATIC mp_obj_t bleio_uuid_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
- switch (op) {
- // Two UUID's are equal if their uuid16 values and uuid128 references match.
- case MP_BINARY_OP_EQUAL:
- if (MP_OBJ_IS_TYPE(rhs_in, &bleio_uuid_type)) {
- return mp_obj_new_bool(
- common_hal_bleio_uuid_get_uuid16(lhs_in) == common_hal_bleio_uuid_get_uuid16(rhs_in) &&
- common_hal_bleio_uuid_get_uuid128_reference(lhs_in) ==
- common_hal_bleio_uuid_get_uuid128_reference(rhs_in));
- } else {
- return mp_const_false;
- }
-
- default:
- return MP_OBJ_NULL; // op not supported
- }
-}
-
-void bleio_uuid_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
- bleio_uuid_obj_t *self = MP_OBJ_TO_PTR(self_in);
- uint32_t size = common_hal_bleio_uuid_get_size(self);
- if (size == 16) {
- mp_printf(print, "UUID(0x%04x)", common_hal_bleio_uuid_get_uuid16(self));
- } else {
- uint8_t uuid128[16];
- (void) common_hal_bleio_uuid_get_uuid128(self, uuid128);
- mp_printf(print, "UUID('"
- "%02x%02x%02x%02x-"
- "%02x%02x-"
- "%02x%02x-"
- "%02x%02x-"
- "%02x%02x%02x%02x%02x%02x')",
- uuid128[15], uuid128[14], uuid128[13], uuid128[12],
- uuid128[11], uuid128[10],
- uuid128[9], uuid128[8],
- uuid128[7], uuid128[6],
- uuid128[5], uuid128[4], uuid128[3], uuid128[2], uuid128[1], uuid128[0]);
- }
-}
-
-const mp_obj_type_t bleio_uuid_type = {
- { &mp_type_type },
- .name = MP_QSTR_UUID,
- .print = bleio_uuid_print,
- .make_new = bleio_uuid_make_new,
- .unary_op = bleio_uuid_unary_op,
- .binary_op = bleio_uuid_binary_op,
- .locals_dict = (mp_obj_dict_t*)&bleio_uuid_locals_dict,
-};
diff --git a/shared-bindings/bleio/UUID.h b/shared-bindings/bleio/UUID.h
deleted file mode 100644
index caf039aec..000000000
--- a/shared-bindings/bleio/UUID.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_UUID_H
-#define MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_UUID_H
-
-#include "common-hal/bleio/UUID.h"
-
-void bleio_uuid_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind);
-
-extern const mp_obj_type_t bleio_uuid_type;
-
-extern void common_hal_bleio_uuid_construct(bleio_uuid_obj_t *self, mp_int_t uuid16, uint8_t uuid128[]);
-extern uint32_t common_hal_bleio_uuid_get_uuid16(bleio_uuid_obj_t *self);
-extern bool common_hal_bleio_uuid_get_uuid128(bleio_uuid_obj_t *self, uint8_t uuid128[16]);
-extern uint32_t common_hal_bleio_uuid_get_uuid128_reference(bleio_uuid_obj_t *self);
-extern uint32_t common_hal_bleio_uuid_get_size(bleio_uuid_obj_t *self);
-
-#endif // MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO_UUID_H
diff --git a/shared-bindings/bleio/__init__.c b/shared-bindings/bleio/__init__.c
deleted file mode 100644
index 739f461a5..000000000
--- a/shared-bindings/bleio/__init__.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- * Copyright (c) 2016 Glenn Ruben Bakke
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include "shared-bindings/bleio/__init__.h"
-#include "shared-bindings/bleio/Address.h"
-#include "shared-bindings/bleio/Attribute.h"
-#include "shared-bindings/bleio/Central.h"
-#include "shared-bindings/bleio/Characteristic.h"
-#include "shared-bindings/bleio/CharacteristicBuffer.h"
-#include "shared-bindings/bleio/Descriptor.h"
-#include "shared-bindings/bleio/Peripheral.h"
-#include "shared-bindings/bleio/ScanEntry.h"
-#include "shared-bindings/bleio/Scanner.h"
-#include "shared-bindings/bleio/Service.h"
-#include "shared-bindings/bleio/UUID.h"
-
-//| :mod:`bleio` --- Bluetooth Low Energy (BLE) communication
-//| ================================================================
-//|
-//| .. module:: bleio
-//| :synopsis: Bluetooth Low Energy functionality
-//| :platform: nRF
-//|
-//| The `bleio` module provides necessary low-level functionality for communicating
-//| using Bluetooth Low Energy (BLE). We recommend you use `bleio` in conjunction
-//| with the `adafruit_ble <https://circuitpython.readthedocs.io/projects/ble/en/latest/>`_
-//| CircuitPython library, which builds on `bleio`, and
-//| provides higher-level convenience functionality, including predefined beacons, clients,
-//| servers.
-//|
-//| Libraries
-//|
-//| .. toctree::
-//| :maxdepth: 3
-//|
-//| Address
-//| Adapter
-//| Attribute
-//| Central
-//| Characteristic
-//| CharacteristicBuffer
-//| Descriptor
-//| Peripheral
-//| ScanEntry
-//| Scanner
-//| Service
-//| UUID
-//|
-//| .. attribute:: adapter
-//|
-//| BLE Adapter information, such as enabled state as well as MAC
-//| address.
-//| This object is the sole instance of `bleio.Adapter`.
-//|
-
-STATIC const mp_rom_map_elem_t bleio_module_globals_table[] = {
- { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_bleio) },
- { MP_ROM_QSTR(MP_QSTR_Address), MP_ROM_PTR(&bleio_address_type) },
- { MP_ROM_QSTR(MP_QSTR_Attribute), MP_ROM_PTR(&bleio_attribute_type) },
- { MP_ROM_QSTR(MP_QSTR_Central), MP_ROM_PTR(&bleio_central_type) },
- { MP_ROM_QSTR(MP_QSTR_Characteristic), MP_ROM_PTR(&bleio_characteristic_type) },
- { MP_ROM_QSTR(MP_QSTR_CharacteristicBuffer), MP_ROM_PTR(&bleio_characteristic_buffer_type) },
- { MP_ROM_QSTR(MP_QSTR_Descriptor), MP_ROM_PTR(&bleio_descriptor_type) },
- { MP_ROM_QSTR(MP_QSTR_Peripheral), MP_ROM_PTR(&bleio_peripheral_type) },
- { MP_ROM_QSTR(MP_QSTR_ScanEntry), MP_ROM_PTR(&bleio_scanentry_type) },
- { MP_ROM_QSTR(MP_QSTR_Scanner), MP_ROM_PTR(&bleio_scanner_type) },
- { MP_ROM_QSTR(MP_QSTR_Service), MP_ROM_PTR(&bleio_service_type) },
- { MP_ROM_QSTR(MP_QSTR_UUID), MP_ROM_PTR(&bleio_uuid_type) },
-
- // Properties
- { MP_ROM_QSTR(MP_QSTR_adapter), MP_ROM_PTR(&common_hal_bleio_adapter_obj) },
-};
-
-STATIC MP_DEFINE_CONST_DICT(bleio_module_globals, bleio_module_globals_table);
-
-const mp_obj_module_t bleio_module = {
- .base = { &mp_type_module },
- .globals = (mp_obj_dict_t*)&bleio_module_globals,
-};
diff --git a/shared-bindings/bleio/__init__.h b/shared-bindings/bleio/__init__.h
deleted file mode 100644
index 6a4c804f5..000000000
--- a/shared-bindings/bleio/__init__.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * This file is part of the MicroPython project, http://micropython.org/
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2019 Dan Halbert for Adafruit Industries
- * Copyright (c) 2018 Artur Pacholec
- * Copyright (c) 2016 Glenn Ruben Bakke
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO___INIT___H
-#define MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO___INIT___H
-
-#include "py/objlist.h"
-
-#include "shared-bindings/bleio/__init__.h"
-#include "shared-bindings/bleio/Adapter.h"
-
-#include "common-hal/bleio/Adapter.h"
-
-extern const super_adapter_obj_t common_hal_bleio_adapter_obj;
-
-extern void common_hal_bleio_check_connected(uint16_t conn_handle);
-
-extern uint16_t common_hal_bleio_device_get_conn_handle(mp_obj_t device);
-extern mp_obj_list_t *common_hal_bleio_device_get_remote_services_list(mp_obj_t device);
-extern void common_hal_bleio_device_discover_remote_services(mp_obj_t device, mp_obj_t service_uuids_whitelist);
-
-extern mp_obj_t common_hal_bleio_gatts_read(uint16_t handle, uint16_t conn_handle);
-extern void common_hal_bleio_gatts_write(uint16_t handle, uint16_t conn_handle, mp_buffer_info_t *bufinfo);
-extern void common_hal_bleio_gattc_write(uint16_t handle, uint16_t conn_handle, mp_buffer_info_t *bufinfo, bool write_no_response);
-
-
-#endif // MICROPY_INCLUDED_SHARED_BINDINGS_BLEIO___INIT___H