Skip to content

Commit 72e74cf

Browse files
authored
fix: raise CharacteristicMissingError for unsupported devices (#70)
1 parent a3cadfe commit 72e74cf

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

src/led_ble/led_ble.py

+23-13
Original file line numberDiff line numberDiff line change
@@ -350,19 +350,29 @@ async def _ensure_connected(self) -> None:
350350
self._reset_disconnect_timer()
351351
return
352352
_LOGGER.debug("%s: Connecting; RSSI: %s", self.name, self.rssi)
353-
client = await establish_connection(
354-
BleakClientWithServiceCache,
355-
self._ble_device,
356-
self.name,
357-
self._disconnected,
358-
use_services_cache=True,
359-
ble_device_callback=lambda: self._ble_device,
360-
)
361-
_LOGGER.debug("%s: Connected; RSSI: %s", self.name, self.rssi)
362-
resolved = self._resolve_characteristics(client.services)
363-
if not resolved:
364-
# Try to handle services failing to load
365-
resolved = self._resolve_characteristics(await client.get_services())
353+
for attempt in range(2):
354+
client = await establish_connection(
355+
BleakClientWithServiceCache,
356+
self._ble_device,
357+
self.name,
358+
self._disconnected,
359+
use_services_cache=True,
360+
ble_device_callback=lambda: self._ble_device,
361+
)
362+
_LOGGER.debug("%s: Connected; RSSI: %s", self.name, self.rssi)
363+
if self._resolve_characteristics(client.services):
364+
# Supported characteristics found
365+
break
366+
else:
367+
if attempt == 0:
368+
# Try to handle services failing to load
369+
await client.clear_cache()
370+
await client.disconnect()
371+
continue
372+
await client.disconnect()
373+
raise CharacteristicMissingError(
374+
"Failed to find supported characteristics, device may not be supported"
375+
)
366376

367377
self._client = client
368378
self._reset_disconnect_timer()

0 commit comments

Comments
 (0)