Skip to content

Commit 2f00679

Browse files
committed
Added different callback types
Original version only supported callbacks which were themselves async, this version allows for regular functions to be used as well.
1 parent 50dabc2 commit 2f00679

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

atmotube/gatt_notify.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
from .uuids import AtmoTube_GATT_UUID
22
from .packets import AtmoTubePacket
33
from .packets import StatusPacket, SPS30Packet, BME280Packet, SGPC3Packet
4-
from bleak import BleakClient
4+
from bleak import BleakClient, BleakGATTCharacteristic
55
from collections.abc import Callable, Awaitable
66

77
import asyncio
8+
import inspect
89

910
type PacketList = list[tuple[AtmoTube_GATT_UUID, AtmoTubePacket]]
1011

@@ -24,16 +25,23 @@ def get_available_services(client: BleakClient) -> PacketList:
2425

2526

2627
def gatt_notify(client: BleakClient, uuid: str | AtmoTube_GATT_UUID,
27-
packet_cls: AtmoTubePacket, callback: Callable) -> Awaitable:
28-
async def packet_callback(char, data):
29-
packet = packet_cls(data)
30-
await callback(packet)
28+
packet_cls: AtmoTubePacket,
29+
callback: Callable[[AtmoTubePacket], None]) -> Awaitable:
30+
if inspect.iscoroutinefunction(callback):
31+
async def packet_callback(char:BleakGATTCharacteristic, data:bytearray):
32+
packet = packet_cls(data)
33+
await callback(packet)
34+
else:
35+
def packet_callback(char:BleakGATTCharacteristic, data:bytearray):
36+
packet = packet_cls(data)
37+
callback(packet)
3138

3239
return client.start_notify(uuid, packet_callback)
3340

3441

3542
async def start_gatt_notifications(
36-
client: BleakClient, callback: Callable,
43+
client: BleakClient,
44+
callback: Callable[[AtmoTubePacket], None],
3745
packet_list: PacketList = ALL_PACKETS) -> None:
3846
await asyncio.gather(*[gatt_notify(client, uuid, packet_cls, callback)
3947
for uuid, packet_cls in packet_list])

0 commit comments

Comments
 (0)