From b6810c8e0a9d7a38e397d23b1b24f1378c74629d Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Tue, 30 Mar 2021 15:05:56 -0700 Subject: [PATCH 1/3] Remove from_entry and provide entry in __init__ This allows subclasses to directly manage how they are initialized when created from a ScanEntry. --- adafruit_ble/__init__.py | 2 +- adafruit_ble/advertising/__init__.py | 26 ++++++++------------------ adafruit_ble/advertising/apple.py | 13 ------------- adafruit_ble/advertising/standard.py | 8 ++++---- 4 files changed, 13 insertions(+), 36 deletions(-) delete mode 100644 adafruit_ble/advertising/apple.py diff --git a/adafruit_ble/__init__.py b/adafruit_ble/__init__.py index 8a45b6d..c730ea8 100755 --- a/adafruit_ble/__init__.py +++ b/adafruit_ble/__init__.py @@ -265,7 +265,7 @@ def start_scan( # otherwise. if adv_type not in advertisement_types: continue - advertisement = adv_type.from_entry(entry) + advertisement = adv_type(entry=entry) if advertisement: yield advertisement diff --git a/adafruit_ble/advertising/__init__.py b/adafruit_ble/advertising/__init__.py index 2ed55e1..454bc44 100644 --- a/adafruit_ble/advertising/__init__.py +++ b/adafruit_ble/advertising/__init__.py @@ -236,31 +236,21 @@ class Advertisement: # MAX_LEGACY_DATA_SIZE = 31 # """Data size in a regular BLE packet.""" - def __init__(self): - """Create an advertising packet.""" + def __init__(self, *, entry=None): + """Create an empty advertising packet or one from a ScanEntry.""" self.data_dict = {} self.address = None self._rssi = None self.connectable = False self.mutable = True self.scan_response = False - - @classmethod - def from_entry(cls, entry): - """Create an Advertisement based on the given ScanEntry. This is done automatically by - `BLERadio` for all scan results.""" - self = cls() - # If data_dict is available, use it directly. Otherwise decode the bytestring. - if hasattr(entry, "data_dict"): - self.data_dict = entry.data_dict - else: + if entry: self.data_dict = decode_data(entry.advertisement_bytes) - self.address = entry.address - self._rssi = entry.rssi # pylint: disable=protected-access - self.connectable = entry.connectable - self.scan_response = entry.scan_response - self.mutable = False - return self + self.address = entry.address + self._rssi = entry.rssi # pylint: disable=protected-access + self.connectable = entry.connectable + self.scan_response = entry.scan_response + self.mutable = False @property def rssi(self): diff --git a/adafruit_ble/advertising/apple.py b/adafruit_ble/advertising/apple.py deleted file mode 100644 index 93ee854..0000000 --- a/adafruit_ble/advertising/apple.py +++ /dev/null @@ -1,13 +0,0 @@ -# SPDX-FileCopyrightText: 2020 ladyada for Adafruit Industries -# -# SPDX-License-Identifier: MIT - -# class iBeacon(Advertisement): -# # Apple manufacturer data with subtype 2 -# match_prefixes = (b"\xff\x00\x4c\x02",) -# -# proximity_uuid = -# major = -# minor = -# signal_power = -# diff --git a/adafruit_ble/advertising/standard.py b/adafruit_ble/advertising/standard.py index 76ba807..edb9fa9 100644 --- a/adafruit_ble/advertising/standard.py +++ b/adafruit_ble/advertising/standard.py @@ -159,8 +159,8 @@ class ProvideServicesAdvertisement(Advertisement): services = ServiceList(standard_services=[0x02, 0x03], vendor_services=[0x06, 0x07]) """List of services the device can provide.""" - def __init__(self, *services): - super().__init__() + def __init__(self, *services, entry=None): + super().__init__(entry=entry) if services: self.services.extend(services) self.connectable = True @@ -184,8 +184,8 @@ class SolicitServicesAdvertisement(Advertisement): solicited_services = ServiceList(standard_services=[0x14], vendor_services=[0x15]) """List of services the device would like to use.""" - def __init__(self, *services): - super().__init__() + def __init__(self, *services, entry=None): + super().__init__(entry=entry) self.solicited_services.extend(services) self.connectable = True self.flags.general_discovery = True From f7681a7590e60dcf41a56ff91156afbd9852df1b Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Tue, 30 Mar 2021 15:12:00 -0700 Subject: [PATCH 2/3] Fix docs --- docs/advertising.rst | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/advertising.rst b/docs/advertising.rst index 094174d..669a4bc 100644 --- a/docs/advertising.rst +++ b/docs/advertising.rst @@ -10,5 +10,3 @@ .. automodule:: adafruit_ble.advertising.adafruit :members: -.. automodule:: adafruit_ble.advertising.apple - :members: From eae4d477d90bb113e7ee210a9b299e9b4cd71f69 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Tue, 30 Mar 2021 15:24:10 -0700 Subject: [PATCH 3/3] format fix --- docs/advertising.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/advertising.rst b/docs/advertising.rst index 669a4bc..eff9546 100644 --- a/docs/advertising.rst +++ b/docs/advertising.rst @@ -9,4 +9,3 @@ .. automodule:: adafruit_ble.advertising.adafruit :members: -