bumble 0.0.195__py3-none-any.whl → 0.0.198__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- bumble/_version.py +2 -2
- bumble/apps/auracast.py +351 -66
- bumble/apps/console.py +5 -20
- bumble/apps/device_info.py +230 -0
- bumble/apps/gatt_dump.py +4 -0
- bumble/apps/lea_unicast/app.py +16 -17
- bumble/at.py +12 -6
- bumble/avc.py +8 -5
- bumble/avctp.py +3 -2
- bumble/avdtp.py +5 -1
- bumble/avrcp.py +2 -1
- bumble/codecs.py +17 -13
- bumble/colors.py +6 -2
- bumble/core.py +37 -7
- bumble/device.py +382 -111
- bumble/drivers/rtk.py +13 -8
- bumble/gatt.py +6 -1
- bumble/gatt_client.py +10 -4
- bumble/hci.py +50 -25
- bumble/hid.py +24 -28
- bumble/host.py +4 -0
- bumble/l2cap.py +24 -17
- bumble/link.py +8 -3
- bumble/profiles/ascs.py +739 -0
- bumble/profiles/bap.py +1 -874
- bumble/profiles/bass.py +440 -0
- bumble/profiles/csip.py +4 -4
- bumble/profiles/gap.py +110 -0
- bumble/profiles/heart_rate_service.py +4 -3
- bumble/profiles/le_audio.py +43 -9
- bumble/profiles/mcp.py +448 -0
- bumble/profiles/pacs.py +210 -0
- bumble/profiles/tmap.py +89 -0
- bumble/rfcomm.py +4 -2
- bumble/sdp.py +13 -11
- bumble/smp.py +20 -8
- bumble/snoop.py +5 -4
- bumble/transport/__init__.py +8 -2
- bumble/transport/android_emulator.py +9 -3
- bumble/transport/android_netsim.py +9 -7
- bumble/transport/common.py +46 -18
- bumble/transport/pyusb.py +2 -2
- bumble/transport/unix.py +56 -0
- bumble/transport/usb.py +57 -46
- {bumble-0.0.195.dist-info → bumble-0.0.198.dist-info}/METADATA +41 -41
- {bumble-0.0.195.dist-info → bumble-0.0.198.dist-info}/RECORD +50 -42
- {bumble-0.0.195.dist-info → bumble-0.0.198.dist-info}/WHEEL +1 -1
- {bumble-0.0.195.dist-info → bumble-0.0.198.dist-info}/LICENSE +0 -0
- {bumble-0.0.195.dist-info → bumble-0.0.198.dist-info}/entry_points.txt +0 -0
- {bumble-0.0.195.dist-info → bumble-0.0.198.dist-info}/top_level.txt +0 -0
bumble/transport/usb.py
CHANGED
|
@@ -15,19 +15,18 @@
|
|
|
15
15
|
# -----------------------------------------------------------------------------
|
|
16
16
|
# Imports
|
|
17
17
|
# -----------------------------------------------------------------------------
|
|
18
|
+
from __future__ import annotations
|
|
18
19
|
import asyncio
|
|
19
20
|
import logging
|
|
20
21
|
import threading
|
|
21
|
-
import collections
|
|
22
22
|
import ctypes
|
|
23
23
|
import platform
|
|
24
24
|
|
|
25
25
|
import usb1
|
|
26
26
|
|
|
27
|
-
from bumble.transport.common import Transport,
|
|
27
|
+
from bumble.transport.common import Transport, BaseSource, TransportInitError
|
|
28
28
|
from bumble import hci
|
|
29
29
|
from bumble.colors import color
|
|
30
|
-
from bumble.utils import AsyncRunner
|
|
31
30
|
|
|
32
31
|
|
|
33
32
|
# -----------------------------------------------------------------------------
|
|
@@ -115,13 +114,17 @@ async def open_usb_transport(spec: str) -> Transport:
|
|
|
115
114
|
self.device = device
|
|
116
115
|
self.acl_out = acl_out
|
|
117
116
|
self.acl_out_transfer = device.getTransfer()
|
|
118
|
-
self.
|
|
117
|
+
self.acl_out_transfer_ready = asyncio.Semaphore(1)
|
|
118
|
+
self.packets: asyncio.Queue[bytes] = (
|
|
119
|
+
asyncio.Queue()
|
|
120
|
+
) # Queue of packets waiting to be sent
|
|
119
121
|
self.loop = asyncio.get_running_loop()
|
|
122
|
+
self.queue_task = None
|
|
120
123
|
self.cancel_done = self.loop.create_future()
|
|
121
124
|
self.closed = False
|
|
122
125
|
|
|
123
126
|
def start(self):
|
|
124
|
-
|
|
127
|
+
self.queue_task = asyncio.create_task(self.process_queue())
|
|
125
128
|
|
|
126
129
|
def on_packet(self, packet):
|
|
127
130
|
# Ignore packets if we're closed
|
|
@@ -133,62 +136,64 @@ async def open_usb_transport(spec: str) -> Transport:
|
|
|
133
136
|
return
|
|
134
137
|
|
|
135
138
|
# Queue the packet
|
|
136
|
-
self.packets.
|
|
137
|
-
if len(self.packets) == 1:
|
|
138
|
-
# The queue was previously empty, re-prime the pump
|
|
139
|
-
self.process_queue()
|
|
139
|
+
self.packets.put_nowait(packet)
|
|
140
140
|
|
|
141
141
|
def transfer_callback(self, transfer):
|
|
142
|
+
self.loop.call_soon_threadsafe(self.acl_out_transfer_ready.release)
|
|
142
143
|
status = transfer.getStatus()
|
|
143
144
|
|
|
144
145
|
# pylint: disable=no-member
|
|
145
|
-
if status == usb1.
|
|
146
|
-
self.loop.call_soon_threadsafe(self.on_packet_sent)
|
|
147
|
-
elif status == usb1.TRANSFER_CANCELLED:
|
|
146
|
+
if status == usb1.TRANSFER_CANCELLED:
|
|
148
147
|
self.loop.call_soon_threadsafe(self.cancel_done.set_result, None)
|
|
149
|
-
|
|
148
|
+
return
|
|
149
|
+
|
|
150
|
+
if status != usb1.TRANSFER_COMPLETED:
|
|
150
151
|
logger.warning(
|
|
151
152
|
color(f'!!! OUT transfer not completed: status={status}', 'red')
|
|
152
153
|
)
|
|
153
154
|
|
|
154
|
-
def
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
self.
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
155
|
+
async def process_queue(self):
|
|
156
|
+
while True:
|
|
157
|
+
# Wait for a packet to transfer.
|
|
158
|
+
packet = await self.packets.get()
|
|
159
|
+
|
|
160
|
+
# Wait until we can start a transfer.
|
|
161
|
+
await self.acl_out_transfer_ready.acquire()
|
|
162
|
+
|
|
163
|
+
# Transfer the packet.
|
|
164
|
+
packet_type = packet[0]
|
|
165
|
+
if packet_type == hci.HCI_ACL_DATA_PACKET:
|
|
166
|
+
self.acl_out_transfer.setBulk(
|
|
167
|
+
self.acl_out, packet[1:], callback=self.transfer_callback
|
|
168
|
+
)
|
|
169
|
+
self.acl_out_transfer.submit()
|
|
170
|
+
elif packet_type == hci.HCI_COMMAND_PACKET:
|
|
171
|
+
self.acl_out_transfer.setControl(
|
|
172
|
+
USB_RECIPIENT_DEVICE | USB_REQUEST_TYPE_CLASS,
|
|
173
|
+
0,
|
|
174
|
+
0,
|
|
175
|
+
0,
|
|
176
|
+
packet[1:],
|
|
177
|
+
callback=self.transfer_callback,
|
|
178
|
+
)
|
|
179
|
+
self.acl_out_transfer.submit()
|
|
180
|
+
else:
|
|
181
|
+
logger.warning(
|
|
182
|
+
color(f'unsupported packet type {packet_type}', 'red')
|
|
183
|
+
)
|
|
182
184
|
|
|
183
185
|
def close(self):
|
|
184
186
|
self.closed = True
|
|
187
|
+
if self.queue_task:
|
|
188
|
+
self.queue_task.cancel()
|
|
185
189
|
|
|
186
190
|
async def terminate(self):
|
|
187
191
|
if not self.closed:
|
|
188
192
|
self.close()
|
|
189
193
|
|
|
190
194
|
# Empty the packet queue so that we don't send any more data
|
|
191
|
-
self.packets.
|
|
195
|
+
while not self.packets.empty():
|
|
196
|
+
self.packets.get_nowait()
|
|
192
197
|
|
|
193
198
|
# If we have a transfer in flight, cancel it
|
|
194
199
|
if self.acl_out_transfer.isSubmitted():
|
|
@@ -203,7 +208,7 @@ async def open_usb_transport(spec: str) -> Transport:
|
|
|
203
208
|
except usb1.USBError:
|
|
204
209
|
logger.debug('OUT transfer likely already completed')
|
|
205
210
|
|
|
206
|
-
class UsbPacketSource(asyncio.Protocol,
|
|
211
|
+
class UsbPacketSource(asyncio.Protocol, BaseSource):
|
|
207
212
|
def __init__(self, device, metadata, acl_in, events_in):
|
|
208
213
|
super().__init__()
|
|
209
214
|
self.device = device
|
|
@@ -280,7 +285,13 @@ async def open_usb_transport(spec: str) -> Transport:
|
|
|
280
285
|
packet = await self.queue.get()
|
|
281
286
|
except asyncio.CancelledError:
|
|
282
287
|
return
|
|
283
|
-
self.
|
|
288
|
+
if self.sink:
|
|
289
|
+
try:
|
|
290
|
+
self.sink.on_packet(packet)
|
|
291
|
+
except Exception as error:
|
|
292
|
+
logger.exception(
|
|
293
|
+
color(f'!!! Exception in sink.on_packet: {error}', 'red')
|
|
294
|
+
)
|
|
284
295
|
|
|
285
296
|
def close(self):
|
|
286
297
|
self.closed = True
|
|
@@ -442,7 +453,7 @@ async def open_usb_transport(spec: str) -> Transport:
|
|
|
442
453
|
|
|
443
454
|
if found is None:
|
|
444
455
|
context.close()
|
|
445
|
-
raise
|
|
456
|
+
raise TransportInitError('device not found')
|
|
446
457
|
|
|
447
458
|
logger.debug(f'USB Device: {found}')
|
|
448
459
|
|
|
@@ -507,7 +518,7 @@ async def open_usb_transport(spec: str) -> Transport:
|
|
|
507
518
|
|
|
508
519
|
endpoints = find_endpoints(found)
|
|
509
520
|
if endpoints is None:
|
|
510
|
-
raise
|
|
521
|
+
raise TransportInitError('no compatible interface found for device')
|
|
511
522
|
(configuration, interface, setting, acl_in, acl_out, events_in) = endpoints
|
|
512
523
|
logger.debug(
|
|
513
524
|
f'selected endpoints: configuration={configuration}, '
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: bumble
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.198
|
|
4
4
|
Summary: Bluetooth Stack for Apps, Emulation, Test and Experimentation
|
|
5
5
|
Home-page: https://github.com/google/bumble
|
|
6
6
|
Author: Google
|
|
@@ -8,52 +8,52 @@ Author-email: tbd@tbd.com
|
|
|
8
8
|
Requires-Python: >=3.8
|
|
9
9
|
Description-Content-Type: text/markdown
|
|
10
10
|
License-File: LICENSE
|
|
11
|
-
Requires-Dist: pyee
|
|
12
|
-
Requires-Dist: aiohttp
|
|
13
|
-
Requires-Dist: appdirs
|
|
14
|
-
Requires-Dist: click
|
|
15
|
-
Requires-Dist: cryptography
|
|
16
|
-
Requires-Dist: grpcio
|
|
17
|
-
Requires-Dist: humanize
|
|
18
|
-
Requires-Dist: libusb1
|
|
19
|
-
Requires-Dist: libusb-package
|
|
20
|
-
Requires-Dist: platformdirs
|
|
21
|
-
Requires-Dist: prompt-toolkit
|
|
22
|
-
Requires-Dist: prettytable
|
|
23
|
-
Requires-Dist: protobuf
|
|
24
|
-
Requires-Dist: pyserial-asyncio
|
|
25
|
-
Requires-Dist: pyserial
|
|
26
|
-
Requires-Dist: pyusb
|
|
27
|
-
Requires-Dist: websockets
|
|
28
|
-
Requires-Dist: cryptography
|
|
11
|
+
Requires-Dist: pyee>=8.2.2
|
|
12
|
+
Requires-Dist: aiohttp~=3.8; platform_system != "Emscripten"
|
|
13
|
+
Requires-Dist: appdirs>=1.4; platform_system != "Emscripten"
|
|
14
|
+
Requires-Dist: click>=8.1.3; platform_system != "Emscripten"
|
|
15
|
+
Requires-Dist: cryptography==39; platform_system != "Emscripten"
|
|
16
|
+
Requires-Dist: grpcio>=1.62.1; platform_system != "Emscripten"
|
|
17
|
+
Requires-Dist: humanize>=4.6.0; platform_system != "Emscripten"
|
|
18
|
+
Requires-Dist: libusb1>=2.0.1; platform_system != "Emscripten"
|
|
19
|
+
Requires-Dist: libusb-package==1.0.26.1; platform_system != "Emscripten"
|
|
20
|
+
Requires-Dist: platformdirs>=3.10.0; platform_system != "Emscripten"
|
|
21
|
+
Requires-Dist: prompt-toolkit>=3.0.16; platform_system != "Emscripten"
|
|
22
|
+
Requires-Dist: prettytable>=3.6.0; platform_system != "Emscripten"
|
|
23
|
+
Requires-Dist: protobuf>=3.12.4; platform_system != "Emscripten"
|
|
24
|
+
Requires-Dist: pyserial-asyncio>=0.5; platform_system != "Emscripten"
|
|
25
|
+
Requires-Dist: pyserial>=3.5; platform_system != "Emscripten"
|
|
26
|
+
Requires-Dist: pyusb>=1.2; platform_system != "Emscripten"
|
|
27
|
+
Requires-Dist: websockets>=12.0; platform_system != "Emscripten"
|
|
28
|
+
Requires-Dist: cryptography>=39.0; platform_system == "Emscripten"
|
|
29
29
|
Provides-Extra: avatar
|
|
30
|
-
Requires-Dist: pandora-avatar
|
|
31
|
-
Requires-Dist: rootcanal
|
|
30
|
+
Requires-Dist: pandora-avatar==0.0.9; extra == "avatar"
|
|
31
|
+
Requires-Dist: rootcanal==1.10.0; python_version >= "3.10" and extra == "avatar"
|
|
32
32
|
Provides-Extra: build
|
|
33
|
-
Requires-Dist: build
|
|
33
|
+
Requires-Dist: build>=0.7; extra == "build"
|
|
34
34
|
Provides-Extra: development
|
|
35
|
-
Requires-Dist: black
|
|
36
|
-
Requires-Dist: grpcio-tools
|
|
37
|
-
Requires-Dist: invoke
|
|
38
|
-
Requires-Dist: mypy
|
|
39
|
-
Requires-Dist: nox
|
|
40
|
-
Requires-Dist: pylint
|
|
41
|
-
Requires-Dist: pyyaml
|
|
42
|
-
Requires-Dist: types-appdirs
|
|
43
|
-
Requires-Dist: types-invoke
|
|
44
|
-
Requires-Dist: types-protobuf
|
|
45
|
-
Requires-Dist: wasmtime
|
|
35
|
+
Requires-Dist: black==24.3; extra == "development"
|
|
36
|
+
Requires-Dist: grpcio-tools>=1.62.1; extra == "development"
|
|
37
|
+
Requires-Dist: invoke>=1.7.3; extra == "development"
|
|
38
|
+
Requires-Dist: mypy==1.10.0; extra == "development"
|
|
39
|
+
Requires-Dist: nox>=2022; extra == "development"
|
|
40
|
+
Requires-Dist: pylint==3.1.0; extra == "development"
|
|
41
|
+
Requires-Dist: pyyaml>=6.0; extra == "development"
|
|
42
|
+
Requires-Dist: types-appdirs>=1.4.3; extra == "development"
|
|
43
|
+
Requires-Dist: types-invoke>=1.7.3; extra == "development"
|
|
44
|
+
Requires-Dist: types-protobuf>=4.21.0; extra == "development"
|
|
45
|
+
Requires-Dist: wasmtime==20.0.0; extra == "development"
|
|
46
46
|
Provides-Extra: documentation
|
|
47
|
-
Requires-Dist: mkdocs
|
|
48
|
-
Requires-Dist: mkdocs-material
|
|
49
|
-
Requires-Dist: mkdocstrings[python]
|
|
47
|
+
Requires-Dist: mkdocs>=1.4.0; extra == "documentation"
|
|
48
|
+
Requires-Dist: mkdocs-material>=8.5.6; extra == "documentation"
|
|
49
|
+
Requires-Dist: mkdocstrings[python]>=0.19.0; extra == "documentation"
|
|
50
50
|
Provides-Extra: pandora
|
|
51
|
-
Requires-Dist: bt-test-interfaces
|
|
51
|
+
Requires-Dist: bt-test-interfaces>=0.0.6; extra == "pandora"
|
|
52
52
|
Provides-Extra: test
|
|
53
|
-
Requires-Dist: pytest
|
|
54
|
-
Requires-Dist: pytest-asyncio
|
|
55
|
-
Requires-Dist: pytest-html
|
|
56
|
-
Requires-Dist: coverage
|
|
53
|
+
Requires-Dist: pytest>=8.2; extra == "test"
|
|
54
|
+
Requires-Dist: pytest-asyncio>=0.23.5; extra == "test"
|
|
55
|
+
Requires-Dist: pytest-html>=3.2.0; extra == "test"
|
|
56
|
+
Requires-Dist: coverage>=6.4; extra == "test"
|
|
57
57
|
|
|
58
58
|
|
|
59
59
|
_ _ _
|
|
@@ -1,50 +1,51 @@
|
|
|
1
1
|
bumble/__init__.py,sha256=Q8jkz6rgl95IMAeInQVt_2GLoJl3DcEP2cxtrQ-ho5c,110
|
|
2
|
-
bumble/_version.py,sha256=
|
|
2
|
+
bumble/_version.py,sha256=wj4Uoyl4fbIliDzkMZfA-f07UNZEG-IYvFEisYUdjJ0,415
|
|
3
3
|
bumble/a2dp.py,sha256=VEeAOCfT1ZqpwnEgel6DJ32vxR8jYX3IAaBfCqPdWO8,22675
|
|
4
|
-
bumble/at.py,sha256=
|
|
4
|
+
bumble/at.py,sha256=Giu2VUSJKH-jIh10lOfumiqy-FyO99Ra6nJ7UiWQ0H8,3114
|
|
5
5
|
bumble/att.py,sha256=TGzhhBKCQPA_P_eDDSNASJVfa3dCr-QzzrRB3GekrI0,32366
|
|
6
|
-
bumble/avc.py,sha256=
|
|
7
|
-
bumble/avctp.py,sha256=
|
|
8
|
-
bumble/avdtp.py,sha256=
|
|
9
|
-
bumble/avrcp.py,sha256=
|
|
6
|
+
bumble/avc.py,sha256=Ho-WweU9lU15vlTwIbrGBa18M5vUKYm5q8aToaLSh70,16311
|
|
7
|
+
bumble/avctp.py,sha256=yHAjJRjLGtR0Q-iWcLS7cJRz5Jr2YiRmZd6LZV4Xjt4,9935
|
|
8
|
+
bumble/avdtp.py,sha256=6kx4FiFHuV6zmYYrHYnJO4ilDksJauyu9d6XBO4wPVg,77450
|
|
9
|
+
bumble/avrcp.py,sha256=BhDjc8TxhOpPnuvGn5-dGB6JK1aqshg4x7tm_vI4LLU,69363
|
|
10
10
|
bumble/bridge.py,sha256=T6es5oS1dy8QgkxQ8iOD-YcZ0SWOv8jaqC7TGxqodk4,3003
|
|
11
|
-
bumble/codecs.py,sha256=
|
|
12
|
-
bumble/colors.py,sha256=
|
|
11
|
+
bumble/codecs.py,sha256=yels_alICohfM5DuvR2wMpYlebt7OrZHCtRXWyMyYYI,15581
|
|
12
|
+
bumble/colors.py,sha256=CC5tBDnN86bvlbYf1KIVdyj7QBLaqEDT_hQVB0p7FeU,3118
|
|
13
13
|
bumble/company_ids.py,sha256=B68e2QPsDeRYP9jjbGs4GGDwEkGxcXGTsON_CHA0uuI,118528
|
|
14
14
|
bumble/controller.py,sha256=XkYTQb2J5MhH_dGfnFkrLXdChFD2s1wSvqXaHQFeo48,59688
|
|
15
|
-
bumble/core.py,sha256=
|
|
15
|
+
bumble/core.py,sha256=T43ZszjsU_89B0UJwQ9GCzvKU7oj1_RBzsdGr9jX9xY,72440
|
|
16
16
|
bumble/crypto.py,sha256=L6z3dn9-dgKYRtOM6O3F6n6Ju4PwTM3LAFJtCg_ie78,9382
|
|
17
17
|
bumble/decoder.py,sha256=N9nMvuVhuwpnfw7EDVuNe9uYY6B6c3RY2dh8RhRPC1U,9608
|
|
18
|
-
bumble/device.py,sha256=
|
|
18
|
+
bumble/device.py,sha256=4TcC6v_zwyTcZMAMZd7qb06oLVGtw84LtdlgIsilFbU,194632
|
|
19
19
|
bumble/gap.py,sha256=dRU2_TWvqTDx80hxeSbXlWIeWvptWH4_XbItG5y948Q,2138
|
|
20
|
-
bumble/gatt.py,sha256=
|
|
21
|
-
bumble/gatt_client.py,sha256=
|
|
20
|
+
bumble/gatt.py,sha256=FiueS6Uj4go3LB7PjhXlzLHBFiiiMJWiuHtsILEuVLo,38651
|
|
21
|
+
bumble/gatt_client.py,sha256=C8HlxEYpe3FBOPS2RXZZ9_tX3KfqPnn0XZsmhakSXNc,43332
|
|
22
22
|
bumble/gatt_server.py,sha256=uPYbn2-y0MLnyR8xxpOf18gPua_Q49pSlMR1zxEnU-Q,37118
|
|
23
|
-
bumble/hci.py,sha256=
|
|
23
|
+
bumble/hci.py,sha256=v4JeftZq-j1XYCNUwgBH_3JnXOpJ_cJCYmj1HO6GKzE,275223
|
|
24
24
|
bumble/helpers.py,sha256=m0w4UgFFNDEnXwHrDyfRlcBObdVed2fqXGL0lvR3c8s,12733
|
|
25
25
|
bumble/hfp.py,sha256=OsBDREelxhLMi_UZO9Kxlqzbts08CcGxoiicUgrYlXg,75353
|
|
26
|
-
bumble/hid.py,sha256=
|
|
27
|
-
bumble/host.py,sha256=
|
|
26
|
+
bumble/hid.py,sha256=hJKm6qhNa0kQTGmp_VxNh3-ywgBDdJpPPFcvtFiRL0A,20335
|
|
27
|
+
bumble/host.py,sha256=OIV1_Alfjn6-VbvnHzmnFuuXt6kVZ0zvIptaj3waRe4,48415
|
|
28
28
|
bumble/keys.py,sha256=WbIQ7Ob81mW75qmEPQ2rBLfnqBMA-ts2yowWXP9UaCY,12654
|
|
29
|
-
bumble/l2cap.py,sha256=
|
|
30
|
-
bumble/link.py,sha256=
|
|
29
|
+
bumble/l2cap.py,sha256=Bu6oTD3DzqLOKiarynT1cfQefNgR0gCJoKxnwQJl2_o,81398
|
|
30
|
+
bumble/link.py,sha256=MYKsIKpbbAkh_ldxPZKu_GhS90ImC0IQtCAqbY4Ddg4,24034
|
|
31
31
|
bumble/pairing.py,sha256=tgPUba6xNxMi-2plm3xfRlzHq-uPRNZEIGWaN0qNGCs,9853
|
|
32
32
|
bumble/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
|
-
bumble/rfcomm.py,sha256=
|
|
34
|
-
bumble/sdp.py,sha256=
|
|
35
|
-
bumble/smp.py,sha256=
|
|
36
|
-
bumble/snoop.py,sha256=
|
|
33
|
+
bumble/rfcomm.py,sha256=dh5t5vlDEfw3yHgQfzegMYPnShP8Zo-3ScABUvmXNLI,40751
|
|
34
|
+
bumble/sdp.py,sha256=aajRQybcMWh_Kc4IuQahix6bXnHg61OXl1gSdrSysl4,45465
|
|
35
|
+
bumble/smp.py,sha256=h8KSaBMSPeVSU_wwRPUnRu2wFSXW-J_ez8FQSOayH4s,77040
|
|
36
|
+
bumble/snoop.py,sha256=1mzwmp9LToUXbPnFsLrt8S4UHs0kqzbu7LDydwbmkZI,5715
|
|
37
37
|
bumble/utils.py,sha256=e0i-4d28-9zP3gYcd1rdNd669rkPnRs5oJCERUEDfxo,15099
|
|
38
38
|
bumble/apps/README.md,sha256=XTwjRAY-EJWDXpl1V8K3Mw8B7kIqzUIUizRjVBVhoIE,1769
|
|
39
39
|
bumble/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
40
|
-
bumble/apps/auracast.py,sha256=
|
|
40
|
+
bumble/apps/auracast.py,sha256=hrG6dW79UkMXqcMLgYjziWEjcVibFUITvjPb4LX1lxM,24686
|
|
41
41
|
bumble/apps/bench.py,sha256=nPACg5gQWxJ-6phze12FVCv1_WS2UjrWR7OUWj0o8PU,56350
|
|
42
42
|
bumble/apps/ble_rpa_tool.py,sha256=ZQtsbfnLPd5qUAkEBPpNgJLRynBBc7q_9cDHKUW2SQ0,1701
|
|
43
|
-
bumble/apps/console.py,sha256=
|
|
43
|
+
bumble/apps/console.py,sha256=rwD9y3g8Mm_mAEvrcXjbtcv5d8mwF3yTbmE6Vet2BEk,45300
|
|
44
44
|
bumble/apps/controller_info.py,sha256=m29omI2r8q01GccgN6Lb-HfSsBjYdGpLDHlgZ99ldTM,9249
|
|
45
45
|
bumble/apps/controller_loopback.py,sha256=VJAFsUdFwm2KgOrRuLADymMpZl5qVO0RGkDSr-1XKtY,7214
|
|
46
46
|
bumble/apps/controllers.py,sha256=R6XJ1XpyuXlyqSCmI7PromVIcoYTcYfpmO-TqTYXnUI,2326
|
|
47
|
-
bumble/apps/
|
|
47
|
+
bumble/apps/device_info.py,sha256=kQSO7F60cmUKw99LHfyly9s_ox2mD0dNGsgxCnKoFOQ,7999
|
|
48
|
+
bumble/apps/gatt_dump.py,sha256=wwA-NhRnbgUkbj-Ukym7NDG2j2n_36t_tn93dLDVdIg,4487
|
|
48
49
|
bumble/apps/gg_bridge.py,sha256=JdW5QT6xN9c2XDDJoHDRo5W3N_RdVkCtTmlcOsJhlx8,14693
|
|
49
50
|
bumble/apps/hci_bridge.py,sha256=KISv352tKnsQsoxjkDiCQbMFmhnPWdnug5wSFAAXxEs,4033
|
|
50
51
|
bumble/apps/l2cap_bridge.py,sha256=524VgEmgCP4g7T0UdgmsePmNVhDFRJECeaZ_uzKsbco,13062
|
|
@@ -55,7 +56,7 @@ bumble/apps/scan.py,sha256=b6hIppiJqDfR7VFW2wl3-lkPdFvHLqYZKY8VjjNnhls,8366
|
|
|
55
56
|
bumble/apps/show.py,sha256=8w0-8jLtN6IM6_58pOHbEmE1Rmxm71O48ACrXixC2jk,6218
|
|
56
57
|
bumble/apps/unbond.py,sha256=LDPWpmgKLMGYDdIFGTdGciFDcUliZ0OmseEbGfJ-MAM,3176
|
|
57
58
|
bumble/apps/usb_probe.py,sha256=zJqrqKSGVYcOntXzgONdluZDE6jfj3IwPNuLqmDPDsU,10351
|
|
58
|
-
bumble/apps/lea_unicast/app.py,sha256=
|
|
59
|
+
bumble/apps/lea_unicast/app.py,sha256=7hK3s5I0vHneECo01UpVoP10LcEcMRIHjmO35lMhNwY,20659
|
|
59
60
|
bumble/apps/lea_unicast/index.html,sha256=d1IHsYd8TGOnxNZKaHolf4Y-7VwT1kO9Z72vpGMdy3k,2354
|
|
60
61
|
bumble/apps/lea_unicast/liblc3.wasm,sha256=nYMzG9fP8_71K9dQfVI9QPQPkFRPHoqZEEExs1y6Oac,158603
|
|
61
62
|
bumble/apps/link_relay/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -70,7 +71,7 @@ bumble/apps/speaker/speaker.py,sha256=f7cOyVqD6HOiLPCgdcnwN7sakj2SScybVHVTBR6eFw
|
|
|
70
71
|
bumble/drivers/__init__.py,sha256=lxqJTghh21rQFThRTurwLysZm385TUcn8ZdpHQSWD88,3196
|
|
71
72
|
bumble/drivers/common.py,sha256=pS783hudolLZAzF8IUWp7g6TXyQsUCEzqCsd1VGeYfQ,1507
|
|
72
73
|
bumble/drivers/intel.py,sha256=-YcJI4ZC_fhHHxWyE8b4eB8V7suOFH1n9uayckGE9Uw,3231
|
|
73
|
-
bumble/drivers/rtk.py,sha256=
|
|
74
|
+
bumble/drivers/rtk.py,sha256=xFPzTxSJYVTIkru2D3oQMtAcNCAXSChhMSIsE7ksO8I,21552
|
|
74
75
|
bumble/pandora/__init__.py,sha256=5NBVmndeTulANawift0jPT9ISp562wyIHTZ-4uP34Mg,3283
|
|
75
76
|
bumble/pandora/config.py,sha256=KD85n3oRbuvD65sRah2H0gpxEW4YbD7HbYbsxdcpDDA,2388
|
|
76
77
|
bumble/pandora/device.py,sha256=LFqCWrgYkQWrFUSKArsAABXkge8sB2DhvaQoEsC4Jn0,5344
|
|
@@ -79,35 +80,42 @@ bumble/pandora/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
79
80
|
bumble/pandora/security.py,sha256=YErueKNLsnmcRe6dKo724Ht-buOqmZl2Gauswcc8FW0,21946
|
|
80
81
|
bumble/pandora/utils.py,sha256=Fq4glL0T5cJ2FODoDotmDNdYFOkTOR7DyyL8vkcxp20,3949
|
|
81
82
|
bumble/profiles/__init__.py,sha256=yBGC8Ti5LvZuoh1F42XtfrBilb39T77_yuxESZeX2yI,581
|
|
83
|
+
bumble/profiles/ascs.py,sha256=Y2_fd_5LOb9hon60LcQl3R-FoAIsOd_J37RZpveh-7c,25471
|
|
82
84
|
bumble/profiles/asha_service.py,sha256=J4i5jkJciZWMtTWJ1zGJkEx65DlAEIADqjCRYf_CWNs,7220
|
|
83
|
-
bumble/profiles/bap.py,sha256=
|
|
85
|
+
bumble/profiles/bap.py,sha256=wLnrbXso203rgw0WNa91qIdMdjuIoGc9VqOHc9Ey_b4,19421
|
|
86
|
+
bumble/profiles/bass.py,sha256=Wiqum0Wsr5PpVzTAPDcyKLTfJoKXJUYOzqB320aSiUs,14950
|
|
84
87
|
bumble/profiles/battery_service.py,sha256=w-uF4jLoDozJOoykimb2RkrKjVyCke6ts2-h-F1PYyc,2292
|
|
85
88
|
bumble/profiles/cap.py,sha256=6gH7oOnUKjOggMPuB7rtbwj0AneoNmnWzQ_iR3io8e0,1945
|
|
86
|
-
bumble/profiles/csip.py,sha256=
|
|
89
|
+
bumble/profiles/csip.py,sha256=qpI9W0_FWIpsuJrHhxfbKaa-TD21epxEa3EuCm8gh6c,10156
|
|
87
90
|
bumble/profiles/device_information_service.py,sha256=RfqnXywcwcSTiFalxd1LVTTdeWLxHGsMvlvr9fI0GJI,6193
|
|
88
|
-
bumble/profiles/
|
|
89
|
-
bumble/profiles/
|
|
91
|
+
bumble/profiles/gap.py,sha256=jUjfy6MPL7k6wgNn3ny3PVgSX6-SLmjUepFYHjGc3IU,3870
|
|
92
|
+
bumble/profiles/heart_rate_service.py,sha256=_MG1ApmF1B7b4xRzELuahtRWzLm49i9O4m7I6ZFU4mw,8644
|
|
93
|
+
bumble/profiles/le_audio.py,sha256=1x6OpIc0JMa32YVcfM8lq6jnXHlriHUcOkAs0EttJJk,3093
|
|
94
|
+
bumble/profiles/mcp.py,sha256=vIN1r_if4LmOcGCgZuDYTYLMQzU6-1pKUFx1Z3iSAeY,17415
|
|
95
|
+
bumble/profiles/pacs.py,sha256=bhlU5M6E9e1YKf-qJnJL3GwTqOPuSvYDpY_UYq0Nnd8,8730
|
|
90
96
|
bumble/profiles/pbp.py,sha256=51aoQcZMXzTzeatHd0zNVN7kYcv4atzr2OWpzxlSVP8,1630
|
|
91
97
|
bumble/profiles/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
98
|
+
bumble/profiles/tmap.py,sha256=hpz5VYEdEOty4D9ApCRDero9Tf3L9arSZWnLCNkZoHI,3005
|
|
92
99
|
bumble/profiles/vcp.py,sha256=wkbTf2NRCbBtvpXplpNJq4dzXp6JGeaEHeeC1kHqW7s,7897
|
|
93
100
|
bumble/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
94
101
|
bumble/tools/generate_company_id_list.py,sha256=ysbPb3zmxKFBiSQ_MBG2r15-sqR5P_GWT6i0YUTTXOM,1736
|
|
95
102
|
bumble/tools/rtk_fw_download.py,sha256=KEPG-rDrdPGKBzZ78P4s3udLRYT3p7vesGhXvJTWTic,5453
|
|
96
103
|
bumble/tools/rtk_util.py,sha256=TwZhupHQrQYsYHLdRGyzXKd24pwCk8kkzqK1Rj2guco,5087
|
|
97
|
-
bumble/transport/__init__.py,sha256=
|
|
98
|
-
bumble/transport/android_emulator.py,sha256=
|
|
99
|
-
bumble/transport/android_netsim.py,sha256=
|
|
100
|
-
bumble/transport/common.py,sha256=
|
|
104
|
+
bumble/transport/__init__.py,sha256=Z01fvuKpqAbhJd0wYcGhW09W2tycM71ck80XoZ8a87Q,7012
|
|
105
|
+
bumble/transport/android_emulator.py,sha256=6HR2cEqdU0XbOldwxCtQuXtvwOUYhRfHkPz0TRt3mbo,4382
|
|
106
|
+
bumble/transport/android_netsim.py,sha256=39RYKZJX806nbS6I2Yu31Z9h7-FJgYGIshXUoT0GjS8,16315
|
|
107
|
+
bumble/transport/common.py,sha256=bJWYH-vRJJl0nWwlAjGTHrRQFdZayKkH7YoGor5abH8,16659
|
|
101
108
|
bumble/transport/file.py,sha256=eVM2V6Nk2nDAFdE7Rt01ZI3JdTovsH9OEU1gKYPJjpE,2010
|
|
102
109
|
bumble/transport/hci_socket.py,sha256=EdgWi3-O5yvYcH4R4BkPtG79pnUo7GQtXWawuUHDoDQ,6331
|
|
103
110
|
bumble/transport/pty.py,sha256=grTl-yvjMWHflNwuME4ccVqDbk6NIEgQMgH6Y9lf1fU,2732
|
|
104
111
|
bumble/transport/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
105
|
-
bumble/transport/pyusb.py,sha256=
|
|
112
|
+
bumble/transport/pyusb.py,sha256=znHdx0h_XNiDVa7bs2qlq9sG4vURlK8XloApZ73InDo,15532
|
|
106
113
|
bumble/transport/serial.py,sha256=loQxkeG7uE09enXWg2uGbxi6CeG70wn3kzPbEwULKw4,2446
|
|
107
114
|
bumble/transport/tcp_client.py,sha256=deyUJYpj04QE00Mw_PTU5PHPA6mr1Nui3f5-QCy2zOw,1854
|
|
108
115
|
bumble/transport/tcp_server.py,sha256=tvu7FuPeqiXfoj2HQU8wu4AiwKjDDDCKlKjgtqWc5hg,3779
|
|
109
116
|
bumble/transport/udp.py,sha256=di8I6HHACgBx3un-dzAahz9lTIUrh4LdeuYpeoifQEM,2239
|
|
110
|
-
bumble/transport/
|
|
117
|
+
bumble/transport/unix.py,sha256=CS6Ksrkat5uUXOpo7RlxAYJsM3lMS4T3OrdCqzIHTg8,1981
|
|
118
|
+
bumble/transport/usb.py,sha256=FO2Trx9rQ_pdX6Aal7eDxOpubjBEeUmoH3jcwVwKSYA,22022
|
|
111
119
|
bumble/transport/vhci.py,sha256=iI2WpighnvIP5zeyJUFSbjEdmCo24CWMdICamIcyJck,2250
|
|
112
120
|
bumble/transport/ws_client.py,sha256=9gqm5jlVT_H6LfwsQwPpky07CINhgOK96ef53SMAxms,1757
|
|
113
121
|
bumble/transport/ws_server.py,sha256=goe4xx7OnZiJy1a00Bg0CXM8uJhsGXbsijMYq2n62bI,3328
|
|
@@ -144,9 +152,9 @@ bumble/vendor/android/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
|
144
152
|
bumble/vendor/android/hci.py,sha256=GZrkhaWmcMt1JpnRhv0NoySGkf2H4lNUV2f_omRZW0I,10741
|
|
145
153
|
bumble/vendor/zephyr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
146
154
|
bumble/vendor/zephyr/hci.py,sha256=d83bC0TvT947eN4roFjLkQefWtHOoNsr4xib2ctSkvA,3195
|
|
147
|
-
bumble-0.0.
|
|
148
|
-
bumble-0.0.
|
|
149
|
-
bumble-0.0.
|
|
150
|
-
bumble-0.0.
|
|
151
|
-
bumble-0.0.
|
|
152
|
-
bumble-0.0.
|
|
155
|
+
bumble-0.0.198.dist-info/LICENSE,sha256=FvaYh4NRWIGgS_OwoBs5gFgkCmAghZ-DYnIGBZPuw-s,12142
|
|
156
|
+
bumble-0.0.198.dist-info/METADATA,sha256=fVbh2d9h95IUX4z5lP0FC4aXJ2WGsWX8Wb8gMKyjfLw,5672
|
|
157
|
+
bumble-0.0.198.dist-info/WHEEL,sha256=Mdi9PDNwEZptOjTlUcAth7XJDFtKrHYaQMPulZeBCiQ,91
|
|
158
|
+
bumble-0.0.198.dist-info/entry_points.txt,sha256=AOFf_gnWbZ7jk5fzspxXHCQUay1ik71pK3HYO7sZQsk,937
|
|
159
|
+
bumble-0.0.198.dist-info/top_level.txt,sha256=tV6JJKaHPYMFiJYiBYFW24PCcfLxTJZdlu6BmH3Cb00,7
|
|
160
|
+
bumble-0.0.198.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|