bumble 0.0.194__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 +692 -0
- bumble/apps/bench.py +77 -23
- bumble/apps/console.py +5 -20
- bumble/apps/controller_info.py +3 -3
- 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 +726 -122
- bumble/device.py +817 -117
- bumble/drivers/rtk.py +13 -8
- bumble/gatt.py +6 -1
- bumble/gatt_client.py +10 -4
- bumble/hci.py +283 -20
- bumble/hid.py +24 -28
- bumble/host.py +29 -0
- bumble/l2cap.py +24 -17
- bumble/link.py +8 -3
- bumble/pandora/host.py +3 -2
- bumble/profiles/ascs.py +739 -0
- bumble/profiles/bap.py +85 -862
- 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 +83 -0
- bumble/profiles/mcp.py +448 -0
- bumble/profiles/pacs.py +210 -0
- bumble/profiles/pbp.py +46 -0
- bumble/profiles/tmap.py +89 -0
- bumble/rfcomm.py +14 -3
- 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.194.dist-info → bumble-0.0.198.dist-info}/METADATA +41 -41
- {bumble-0.0.194.dist-info → bumble-0.0.198.dist-info}/RECORD +54 -43
- {bumble-0.0.194.dist-info → bumble-0.0.198.dist-info}/WHEEL +1 -1
- {bumble-0.0.194.dist-info → bumble-0.0.198.dist-info}/LICENSE +0 -0
- {bumble-0.0.194.dist-info → bumble-0.0.198.dist-info}/entry_points.txt +0 -0
- {bumble-0.0.194.dist-info → bumble-0.0.198.dist-info}/top_level.txt +0 -0
bumble/transport/unix.py
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Copyright 2021-2024 Google LLC
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
# -----------------------------------------------------------------------------
|
|
16
|
+
# Imports
|
|
17
|
+
# -----------------------------------------------------------------------------
|
|
18
|
+
import asyncio
|
|
19
|
+
import logging
|
|
20
|
+
|
|
21
|
+
from .common import Transport, StreamPacketSource, StreamPacketSink
|
|
22
|
+
|
|
23
|
+
# -----------------------------------------------------------------------------
|
|
24
|
+
# Logging
|
|
25
|
+
# -----------------------------------------------------------------------------
|
|
26
|
+
logger = logging.getLogger(__name__)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# -----------------------------------------------------------------------------
|
|
30
|
+
async def open_unix_client_transport(spec: str) -> Transport:
|
|
31
|
+
'''Open a UNIX socket client transport.
|
|
32
|
+
|
|
33
|
+
The parameter is the path of unix socket. For abstract socket, the first character
|
|
34
|
+
needs to be '@'.
|
|
35
|
+
|
|
36
|
+
Example:
|
|
37
|
+
* /tmp/hci.socket
|
|
38
|
+
* @hci_socket
|
|
39
|
+
'''
|
|
40
|
+
|
|
41
|
+
class UnixPacketSource(StreamPacketSource):
|
|
42
|
+
def connection_lost(self, exc):
|
|
43
|
+
logger.debug(f'connection lost: {exc}')
|
|
44
|
+
self.on_transport_lost()
|
|
45
|
+
|
|
46
|
+
# For abstract socket, the first character should be null character.
|
|
47
|
+
if spec.startswith('@'):
|
|
48
|
+
spec = '\0' + spec[1:]
|
|
49
|
+
|
|
50
|
+
(
|
|
51
|
+
unix_transport,
|
|
52
|
+
packet_source,
|
|
53
|
+
) = await asyncio.get_running_loop().create_unix_connection(UnixPacketSource, spec)
|
|
54
|
+
packet_sink = StreamPacketSink(unix_transport)
|
|
55
|
+
|
|
56
|
+
return Transport(packet_source, packet_sink)
|
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,49 +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/
|
|
40
|
+
bumble/apps/auracast.py,sha256=hrG6dW79UkMXqcMLgYjziWEjcVibFUITvjPb4LX1lxM,24686
|
|
41
|
+
bumble/apps/bench.py,sha256=nPACg5gQWxJ-6phze12FVCv1_WS2UjrWR7OUWj0o8PU,56350
|
|
41
42
|
bumble/apps/ble_rpa_tool.py,sha256=ZQtsbfnLPd5qUAkEBPpNgJLRynBBc7q_9cDHKUW2SQ0,1701
|
|
42
|
-
bumble/apps/console.py,sha256=
|
|
43
|
-
bumble/apps/controller_info.py,sha256=
|
|
43
|
+
bumble/apps/console.py,sha256=rwD9y3g8Mm_mAEvrcXjbtcv5d8mwF3yTbmE6Vet2BEk,45300
|
|
44
|
+
bumble/apps/controller_info.py,sha256=m29omI2r8q01GccgN6Lb-HfSsBjYdGpLDHlgZ99ldTM,9249
|
|
44
45
|
bumble/apps/controller_loopback.py,sha256=VJAFsUdFwm2KgOrRuLADymMpZl5qVO0RGkDSr-1XKtY,7214
|
|
45
46
|
bumble/apps/controllers.py,sha256=R6XJ1XpyuXlyqSCmI7PromVIcoYTcYfpmO-TqTYXnUI,2326
|
|
46
|
-
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
|
|
47
49
|
bumble/apps/gg_bridge.py,sha256=JdW5QT6xN9c2XDDJoHDRo5W3N_RdVkCtTmlcOsJhlx8,14693
|
|
48
50
|
bumble/apps/hci_bridge.py,sha256=KISv352tKnsQsoxjkDiCQbMFmhnPWdnug5wSFAAXxEs,4033
|
|
49
51
|
bumble/apps/l2cap_bridge.py,sha256=524VgEmgCP4g7T0UdgmsePmNVhDFRJECeaZ_uzKsbco,13062
|
|
@@ -54,7 +56,7 @@ bumble/apps/scan.py,sha256=b6hIppiJqDfR7VFW2wl3-lkPdFvHLqYZKY8VjjNnhls,8366
|
|
|
54
56
|
bumble/apps/show.py,sha256=8w0-8jLtN6IM6_58pOHbEmE1Rmxm71O48ACrXixC2jk,6218
|
|
55
57
|
bumble/apps/unbond.py,sha256=LDPWpmgKLMGYDdIFGTdGciFDcUliZ0OmseEbGfJ-MAM,3176
|
|
56
58
|
bumble/apps/usb_probe.py,sha256=zJqrqKSGVYcOntXzgONdluZDE6jfj3IwPNuLqmDPDsU,10351
|
|
57
|
-
bumble/apps/lea_unicast/app.py,sha256=
|
|
59
|
+
bumble/apps/lea_unicast/app.py,sha256=7hK3s5I0vHneECo01UpVoP10LcEcMRIHjmO35lMhNwY,20659
|
|
58
60
|
bumble/apps/lea_unicast/index.html,sha256=d1IHsYd8TGOnxNZKaHolf4Y-7VwT1kO9Z72vpGMdy3k,2354
|
|
59
61
|
bumble/apps/lea_unicast/liblc3.wasm,sha256=nYMzG9fP8_71K9dQfVI9QPQPkFRPHoqZEEExs1y6Oac,158603
|
|
60
62
|
bumble/apps/link_relay/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -69,42 +71,51 @@ bumble/apps/speaker/speaker.py,sha256=f7cOyVqD6HOiLPCgdcnwN7sakj2SScybVHVTBR6eFw
|
|
|
69
71
|
bumble/drivers/__init__.py,sha256=lxqJTghh21rQFThRTurwLysZm385TUcn8ZdpHQSWD88,3196
|
|
70
72
|
bumble/drivers/common.py,sha256=pS783hudolLZAzF8IUWp7g6TXyQsUCEzqCsd1VGeYfQ,1507
|
|
71
73
|
bumble/drivers/intel.py,sha256=-YcJI4ZC_fhHHxWyE8b4eB8V7suOFH1n9uayckGE9Uw,3231
|
|
72
|
-
bumble/drivers/rtk.py,sha256=
|
|
74
|
+
bumble/drivers/rtk.py,sha256=xFPzTxSJYVTIkru2D3oQMtAcNCAXSChhMSIsE7ksO8I,21552
|
|
73
75
|
bumble/pandora/__init__.py,sha256=5NBVmndeTulANawift0jPT9ISp562wyIHTZ-4uP34Mg,3283
|
|
74
76
|
bumble/pandora/config.py,sha256=KD85n3oRbuvD65sRah2H0gpxEW4YbD7HbYbsxdcpDDA,2388
|
|
75
77
|
bumble/pandora/device.py,sha256=LFqCWrgYkQWrFUSKArsAABXkge8sB2DhvaQoEsC4Jn0,5344
|
|
76
|
-
bumble/pandora/host.py,sha256=
|
|
78
|
+
bumble/pandora/host.py,sha256=LnEQ3DJAhmJVgHA7VyokvypQejsi2VcbauSFYn1a9Jk,39235
|
|
77
79
|
bumble/pandora/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
78
80
|
bumble/pandora/security.py,sha256=YErueKNLsnmcRe6dKo724Ht-buOqmZl2Gauswcc8FW0,21946
|
|
79
81
|
bumble/pandora/utils.py,sha256=Fq4glL0T5cJ2FODoDotmDNdYFOkTOR7DyyL8vkcxp20,3949
|
|
80
82
|
bumble/profiles/__init__.py,sha256=yBGC8Ti5LvZuoh1F42XtfrBilb39T77_yuxESZeX2yI,581
|
|
83
|
+
bumble/profiles/ascs.py,sha256=Y2_fd_5LOb9hon60LcQl3R-FoAIsOd_J37RZpveh-7c,25471
|
|
81
84
|
bumble/profiles/asha_service.py,sha256=J4i5jkJciZWMtTWJ1zGJkEx65DlAEIADqjCRYf_CWNs,7220
|
|
82
|
-
bumble/profiles/bap.py,sha256=
|
|
85
|
+
bumble/profiles/bap.py,sha256=wLnrbXso203rgw0WNa91qIdMdjuIoGc9VqOHc9Ey_b4,19421
|
|
86
|
+
bumble/profiles/bass.py,sha256=Wiqum0Wsr5PpVzTAPDcyKLTfJoKXJUYOzqB320aSiUs,14950
|
|
83
87
|
bumble/profiles/battery_service.py,sha256=w-uF4jLoDozJOoykimb2RkrKjVyCke6ts2-h-F1PYyc,2292
|
|
84
88
|
bumble/profiles/cap.py,sha256=6gH7oOnUKjOggMPuB7rtbwj0AneoNmnWzQ_iR3io8e0,1945
|
|
85
|
-
bumble/profiles/csip.py,sha256=
|
|
89
|
+
bumble/profiles/csip.py,sha256=qpI9W0_FWIpsuJrHhxfbKaa-TD21epxEa3EuCm8gh6c,10156
|
|
86
90
|
bumble/profiles/device_information_service.py,sha256=RfqnXywcwcSTiFalxd1LVTTdeWLxHGsMvlvr9fI0GJI,6193
|
|
87
|
-
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
|
|
96
|
+
bumble/profiles/pbp.py,sha256=51aoQcZMXzTzeatHd0zNVN7kYcv4atzr2OWpzxlSVP8,1630
|
|
88
97
|
bumble/profiles/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
98
|
+
bumble/profiles/tmap.py,sha256=hpz5VYEdEOty4D9ApCRDero9Tf3L9arSZWnLCNkZoHI,3005
|
|
89
99
|
bumble/profiles/vcp.py,sha256=wkbTf2NRCbBtvpXplpNJq4dzXp6JGeaEHeeC1kHqW7s,7897
|
|
90
100
|
bumble/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
91
101
|
bumble/tools/generate_company_id_list.py,sha256=ysbPb3zmxKFBiSQ_MBG2r15-sqR5P_GWT6i0YUTTXOM,1736
|
|
92
102
|
bumble/tools/rtk_fw_download.py,sha256=KEPG-rDrdPGKBzZ78P4s3udLRYT3p7vesGhXvJTWTic,5453
|
|
93
103
|
bumble/tools/rtk_util.py,sha256=TwZhupHQrQYsYHLdRGyzXKd24pwCk8kkzqK1Rj2guco,5087
|
|
94
|
-
bumble/transport/__init__.py,sha256=
|
|
95
|
-
bumble/transport/android_emulator.py,sha256=
|
|
96
|
-
bumble/transport/android_netsim.py,sha256=
|
|
97
|
-
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
|
|
98
108
|
bumble/transport/file.py,sha256=eVM2V6Nk2nDAFdE7Rt01ZI3JdTovsH9OEU1gKYPJjpE,2010
|
|
99
109
|
bumble/transport/hci_socket.py,sha256=EdgWi3-O5yvYcH4R4BkPtG79pnUo7GQtXWawuUHDoDQ,6331
|
|
100
110
|
bumble/transport/pty.py,sha256=grTl-yvjMWHflNwuME4ccVqDbk6NIEgQMgH6Y9lf1fU,2732
|
|
101
111
|
bumble/transport/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
102
|
-
bumble/transport/pyusb.py,sha256=
|
|
112
|
+
bumble/transport/pyusb.py,sha256=znHdx0h_XNiDVa7bs2qlq9sG4vURlK8XloApZ73InDo,15532
|
|
103
113
|
bumble/transport/serial.py,sha256=loQxkeG7uE09enXWg2uGbxi6CeG70wn3kzPbEwULKw4,2446
|
|
104
114
|
bumble/transport/tcp_client.py,sha256=deyUJYpj04QE00Mw_PTU5PHPA6mr1Nui3f5-QCy2zOw,1854
|
|
105
115
|
bumble/transport/tcp_server.py,sha256=tvu7FuPeqiXfoj2HQU8wu4AiwKjDDDCKlKjgtqWc5hg,3779
|
|
106
116
|
bumble/transport/udp.py,sha256=di8I6HHACgBx3un-dzAahz9lTIUrh4LdeuYpeoifQEM,2239
|
|
107
|
-
bumble/transport/
|
|
117
|
+
bumble/transport/unix.py,sha256=CS6Ksrkat5uUXOpo7RlxAYJsM3lMS4T3OrdCqzIHTg8,1981
|
|
118
|
+
bumble/transport/usb.py,sha256=FO2Trx9rQ_pdX6Aal7eDxOpubjBEeUmoH3jcwVwKSYA,22022
|
|
108
119
|
bumble/transport/vhci.py,sha256=iI2WpighnvIP5zeyJUFSbjEdmCo24CWMdICamIcyJck,2250
|
|
109
120
|
bumble/transport/ws_client.py,sha256=9gqm5jlVT_H6LfwsQwPpky07CINhgOK96ef53SMAxms,1757
|
|
110
121
|
bumble/transport/ws_server.py,sha256=goe4xx7OnZiJy1a00Bg0CXM8uJhsGXbsijMYq2n62bI,3328
|
|
@@ -141,9 +152,9 @@ bumble/vendor/android/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
|
141
152
|
bumble/vendor/android/hci.py,sha256=GZrkhaWmcMt1JpnRhv0NoySGkf2H4lNUV2f_omRZW0I,10741
|
|
142
153
|
bumble/vendor/zephyr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
143
154
|
bumble/vendor/zephyr/hci.py,sha256=d83bC0TvT947eN4roFjLkQefWtHOoNsr4xib2ctSkvA,3195
|
|
144
|
-
bumble-0.0.
|
|
145
|
-
bumble-0.0.
|
|
146
|
-
bumble-0.0.
|
|
147
|
-
bumble-0.0.
|
|
148
|
-
bumble-0.0.
|
|
149
|
-
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
|