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.
Files changed (50) hide show
  1. bumble/_version.py +2 -2
  2. bumble/apps/auracast.py +351 -66
  3. bumble/apps/console.py +5 -20
  4. bumble/apps/device_info.py +230 -0
  5. bumble/apps/gatt_dump.py +4 -0
  6. bumble/apps/lea_unicast/app.py +16 -17
  7. bumble/at.py +12 -6
  8. bumble/avc.py +8 -5
  9. bumble/avctp.py +3 -2
  10. bumble/avdtp.py +5 -1
  11. bumble/avrcp.py +2 -1
  12. bumble/codecs.py +17 -13
  13. bumble/colors.py +6 -2
  14. bumble/core.py +37 -7
  15. bumble/device.py +382 -111
  16. bumble/drivers/rtk.py +13 -8
  17. bumble/gatt.py +6 -1
  18. bumble/gatt_client.py +10 -4
  19. bumble/hci.py +50 -25
  20. bumble/hid.py +24 -28
  21. bumble/host.py +4 -0
  22. bumble/l2cap.py +24 -17
  23. bumble/link.py +8 -3
  24. bumble/profiles/ascs.py +739 -0
  25. bumble/profiles/bap.py +1 -874
  26. bumble/profiles/bass.py +440 -0
  27. bumble/profiles/csip.py +4 -4
  28. bumble/profiles/gap.py +110 -0
  29. bumble/profiles/heart_rate_service.py +4 -3
  30. bumble/profiles/le_audio.py +43 -9
  31. bumble/profiles/mcp.py +448 -0
  32. bumble/profiles/pacs.py +210 -0
  33. bumble/profiles/tmap.py +89 -0
  34. bumble/rfcomm.py +4 -2
  35. bumble/sdp.py +13 -11
  36. bumble/smp.py +20 -8
  37. bumble/snoop.py +5 -4
  38. bumble/transport/__init__.py +8 -2
  39. bumble/transport/android_emulator.py +9 -3
  40. bumble/transport/android_netsim.py +9 -7
  41. bumble/transport/common.py +46 -18
  42. bumble/transport/pyusb.py +2 -2
  43. bumble/transport/unix.py +56 -0
  44. bumble/transport/usb.py +57 -46
  45. {bumble-0.0.195.dist-info → bumble-0.0.198.dist-info}/METADATA +41 -41
  46. {bumble-0.0.195.dist-info → bumble-0.0.198.dist-info}/RECORD +50 -42
  47. {bumble-0.0.195.dist-info → bumble-0.0.198.dist-info}/WHEEL +1 -1
  48. {bumble-0.0.195.dist-info → bumble-0.0.198.dist-info}/LICENSE +0 -0
  49. {bumble-0.0.195.dist-info → bumble-0.0.198.dist-info}/entry_points.txt +0 -0
  50. {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, ParserSource
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.packets = collections.deque() # Queue of packets waiting to be sent
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
- pass
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.append(packet)
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.TRANSFER_COMPLETED:
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
- else:
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 on_packet_sent(self):
155
- if self.packets:
156
- self.packets.popleft()
157
- self.process_queue()
158
-
159
- def process_queue(self):
160
- if len(self.packets) == 0:
161
- return # Nothing to do
162
-
163
- packet = self.packets[0]
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(color(f'unsupported packet type {packet_type}', 'red'))
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.clear()
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, ParserSource):
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.parser.feed_data(packet)
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 ValueError('device not found')
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 ValueError('no compatible interface found for device')
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.195
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 >=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"
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 ==0.0.9 ; extra == 'avatar'
31
- Requires-Dist: rootcanal ==1.10.0 ; (python_version >= "3.10") and extra == 'avatar'
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 >=0.7 ; extra == 'build'
33
+ Requires-Dist: build>=0.7; extra == "build"
34
34
  Provides-Extra: development
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'
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 >=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'
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 >=0.0.6 ; extra == 'pandora'
51
+ Requires-Dist: bt-test-interfaces>=0.0.6; extra == "pandora"
52
52
  Provides-Extra: test
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'
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=D6Pm_JfDbtXzRrUZBbi94mhpeVRVDGEGFimeorotXxw,415
2
+ bumble/_version.py,sha256=wj4Uoyl4fbIliDzkMZfA-f07UNZEG-IYvFEisYUdjJ0,415
3
3
  bumble/a2dp.py,sha256=VEeAOCfT1ZqpwnEgel6DJ32vxR8jYX3IAaBfCqPdWO8,22675
4
- bumble/at.py,sha256=kdrcsx2C8Rg61EWESD2QHwpZntkXkRBJLrPn9auv9K8,2961
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=O6ujcmWHMgH821aCLidXN23QFPMAjJ2B50oCu0HxaO0,16188
7
- bumble/avctp.py,sha256=W_CgqSRV7Z8xOAz8Q4BZGuuZUHEEJjmioSVg1iDINtM,9881
8
- bumble/avdtp.py,sha256=RmQiDYeKNitR9jkSXcCzCXacrK_Kbiyt1klO3iylr8Q,77322
9
- bumble/avrcp.py,sha256=MKyJkyYmL-M1H_Pi4fr8HABXi-E-F9mBOQpbv_Ilysc,69327
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=Vc7FOo6d-6VCgDI0ibnLmX8vCZ4-jtX_-0vEUM-yOrI,15343
12
- bumble/colors.py,sha256=9H-qzGgMr-YoWdIFpcGPaiRvTvkCzz7FPIkpwqKyKug,3033
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=_32etZ2sW4M-gY-XHmHwTKLrU_iAnMBocNngIkqhygM,71749
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=sp7BilrHxRq7aMBQHomPx9owbus9MxV8_a2lgrvkYRc,183289
18
+ bumble/device.py,sha256=4TcC6v_zwyTcZMAMZd7qb06oLVGtw84LtdlgIsilFbU,194632
19
19
  bumble/gap.py,sha256=dRU2_TWvqTDx80hxeSbXlWIeWvptWH4_XbItG5y948Q,2138
20
- bumble/gatt.py,sha256=W7h8hEyxM8fu3HbAKYJ2HStb8NM7T98UICVnf4G9HDo,38447
21
- bumble/gatt_client.py,sha256=pJ29537m9L_cY2nrtEqZdssOEpg4147fF7vhz0BweyY,43071
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=Bdfs2frYhcnUxGG1jYGcvBr_RcHpY1aNE3guQYpwszo,274340
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=Dd4rsmkRxcxt1IjoozJdu9Qd-QWruKJfsiYqTT89NDk,20590
27
- bumble/host.py,sha256=H76N8V6mcn1h6zw2qu2blZOrT1Q7JNqeziA-SzNwC20,48224
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=YjUoLVR8gYpPzF4JyLoEE8Jhuu72fbW-eXYhXnFphSc,81170
30
- bumble/link.py,sha256=QiiMSCZ0z0ko2oUEMYg6nbq-h5A_3DLN4pjqAx_E-SA,23980
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=NHICkhwkQKwSFI_nE8RoFZGpq5PnZYdRph3GbyEYiYo,40683
34
- bumble/sdp.py,sha256=yA3gkyyFaLkt-nHff3Ge5BgFgqX9uVgr56fWJVA1py8,45289
35
- bumble/smp.py,sha256=PcQj8mDoM8fBc4gKECHoOs0A2ukUAaSZQGdgLj6YzB0,76277
36
- bumble/snoop.py,sha256=_QfF36eylBW6Snd-_KYOwKaGiM8i_Ed-B5XoFIPt3Dg,5631
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=ZhaTN4PsYBaX-7MrtmK_VXJqNy-spXBysaOpPa8emoY,14865
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=rVR2jmP6Yd76B4zzGPYnpJFtgeYgq19CL6DMSe2-A1M,46093
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/gatt_dump.py,sha256=-dCvCgjuHAp0h1zxm-gmqB4lVlSdas1Kp4cpzzx4gGw,4245
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=LBJn5_wOPehHACnrw2N9JwIyYH-MhyadGl5A9SqhXSs,20625
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=MMxmUo85VkRhFuhbc9SJEZVL9dnRjmsU9k8djmbUGcA,21369
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=4NQ-X_d7mUyD5VBQfmGwnmD6gyUTj_PL3H6bYpaP_wU,50486
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=wzSpNRCOMWtKw2Yd9OTAzPoFDoQWG-KYwWdA6sUkwiI,10102
89
+ bumble/profiles/csip.py,sha256=qpI9W0_FWIpsuJrHhxfbKaa-TD21epxEa3EuCm8gh6c,10156
87
90
  bumble/profiles/device_information_service.py,sha256=RfqnXywcwcSTiFalxd1LVTTdeWLxHGsMvlvr9fI0GJI,6193
88
- bumble/profiles/heart_rate_service.py,sha256=7V2LGcWLp6RurjWxsVgMWr3wPDt5aS9qjNxTbHcOK6o,8575
89
- bumble/profiles/le_audio.py,sha256=BhdGwBdFRdBo35Z8ijRgch77Y1AfzNNM6iUU0LEmTy8,1651
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=W_IjqBehWCvjyTghgRYvbbLqDlh2xh7ZRDRvun5iYB0,6830
98
- bumble/transport/android_emulator.py,sha256=eH8H1aB7MvQ8lpdwVG6SGKg5uwCRb_aPJk8pPwoTXSY,4321
99
- bumble/transport/android_netsim.py,sha256=SVh-IUZ2bhcIESZFGzOsofybsi4H0qoBRwBieeqUINE,16215
100
- bumble/transport/common.py,sha256=LHZNCrSNMd3AwaOT31WZXRdu9ydidNO3pnmonWBWhLA,15818
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=Wa1QlfjwN_9bdisoaBVYXN0DfHQgwi4L7nWbUisZmVE,15504
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/usb.py,sha256=dFNN-kGI3pMTXeT5Amwu2H6e4J48WAJotG_D18W3RBM,21399
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.195.dist-info/LICENSE,sha256=FvaYh4NRWIGgS_OwoBs5gFgkCmAghZ-DYnIGBZPuw-s,12142
148
- bumble-0.0.195.dist-info/METADATA,sha256=wTbIqANw5lgZcZyizDaAldO9zZ-XXKf33PX2LstfwVQ,5753
149
- bumble-0.0.195.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
150
- bumble-0.0.195.dist-info/entry_points.txt,sha256=AOFf_gnWbZ7jk5fzspxXHCQUay1ik71pK3HYO7sZQsk,937
151
- bumble-0.0.195.dist-info/top_level.txt,sha256=tV6JJKaHPYMFiJYiBYFW24PCcfLxTJZdlu6BmH3Cb00,7
152
- bumble-0.0.195.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: setuptools (73.0.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5