From 60aa4aa23a97bda075770fec43202295602f1a9d Mon Sep 17 00:00:00 2001 From: David Lechner Date: Sat, 29 Oct 2022 09:22:18 -0500 Subject: [PATCH] winrt/scanner: fix AttributeError on Windows < 19041 The transmit power property of the advertising data was added in Windows build 19041, so we need a fallback for older versions of Windows. Fixes hbldh/bleak#1094 --- CHANGELOG.rst | 1 + bleak/backends/winrt/scanner.py | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 440c35be..08422acf 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -15,6 +15,7 @@ Fixed * Fixed crash in Android backend introduced in v0.19.0. Fixes #1085. * BlueZ: Cancel the device discovery wait task if the device disconnects in between to avoid a timeout +* Fixed ``AttributeError`` crash when scanning on Windows builds < 19041. Fixes #1094. `0.19.0`_ (2022-10-13) ====================== diff --git a/bleak/backends/winrt/scanner.py b/bleak/backends/winrt/scanner.py index ce1bbfa9..1da9553c 100644 --- a/bleak/backends/winrt/scanner.py +++ b/bleak/backends/winrt/scanner.py @@ -156,8 +156,16 @@ def _received_handler( if args.advertisement.local_name: local_name = args.advertisement.local_name - if args.transmit_power_level_in_d_bm is not None: - tx_power = raw_data.adv.transmit_power_level_in_d_bm + try: + if args.transmit_power_level_in_d_bm is not None: + tx_power = args.transmit_power_level_in_d_bm + except AttributeError: + # the transmit_power_level_in_d_bm property was introduce in + # Windows build 19041 so we have a fallback for older versions + for section in args.advertisement.get_sections_by_type( + AdvertisementDataType.TX_POWER_LEVEL + ): + tx_power = bytes(section.data)[0] # Decode service data for section in args.advertisement.get_sections_by_type(