bumble 0.0.199__py3-none-any.whl → 0.0.200__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/profiles/hap.py CHANGED
@@ -25,7 +25,7 @@ from bumble.utils import AsyncRunner, OpenIntEnum
25
25
  from bumble.hci import Address
26
26
  from dataclasses import dataclass, field
27
27
  import logging
28
- from typing import Dict, List, Optional, Set, Union
28
+ from typing import Any, Dict, List, Optional, Set, Union
29
29
 
30
30
 
31
31
  # -----------------------------------------------------------------------------
@@ -271,24 +271,12 @@ class HearingAccessService(gatt.TemplateService):
271
271
  def on_disconnection(_reason) -> None:
272
272
  self.currently_connected_clients.remove(connection)
273
273
 
274
- # TODO Should we filter on device bonded && device is HAP ?
275
- self.currently_connected_clients.add(connection)
276
- if (
277
- connection.peer_address
278
- not in self.preset_changed_operations_history_per_device
279
- ):
280
- self.preset_changed_operations_history_per_device[
281
- connection.peer_address
282
- ] = []
283
- return
284
-
285
- async def on_connection_async() -> None:
286
- # Send all the PresetChangedOperation that occur when not connected
287
- await self._preset_changed_operation(connection)
288
- # Update the active preset index if needed
289
- await self.notify_active_preset_for_connection(connection)
274
+ @connection.on('pairing') # type: ignore
275
+ def on_pairing(*_: Any) -> None:
276
+ self.on_incoming_paired_connection(connection)
290
277
 
291
- connection.abort_on('disconnection', on_connection_async())
278
+ if connection.peer_resolvable_address:
279
+ self.on_incoming_paired_connection(connection)
292
280
 
293
281
  self.hearing_aid_features_characteristic = gatt.Characteristic(
294
282
  uuid=gatt.GATT_HEARING_AID_FEATURES_CHARACTERISTIC,
@@ -325,6 +313,27 @@ class HearingAccessService(gatt.TemplateService):
325
313
  ]
326
314
  )
327
315
 
316
+ def on_incoming_paired_connection(self, connection: Connection):
317
+ '''Setup initial operations to handle a remote bonded HAP device'''
318
+ # TODO Should we filter on HAP device only ?
319
+ self.currently_connected_clients.add(connection)
320
+ if (
321
+ connection.peer_address
322
+ not in self.preset_changed_operations_history_per_device
323
+ ):
324
+ self.preset_changed_operations_history_per_device[
325
+ connection.peer_address
326
+ ] = []
327
+ return
328
+
329
+ async def on_connection_async() -> None:
330
+ # Send all the PresetChangedOperation that occur when not connected
331
+ await self._preset_changed_operation(connection)
332
+ # Update the active preset index if needed
333
+ await self.notify_active_preset_for_connection(connection)
334
+
335
+ connection.abort_on('disconnection', on_connection_async())
336
+
328
337
  def _on_read_active_preset_index(
329
338
  self, __connection__: Optional[Connection]
330
339
  ) -> bytes:
bumble/rtp.py ADDED
@@ -0,0 +1,110 @@
1
+ # Copyright 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
+ from __future__ import annotations
19
+ import struct
20
+ from typing import List
21
+
22
+
23
+ # -----------------------------------------------------------------------------
24
+ class MediaPacket:
25
+ @staticmethod
26
+ def from_bytes(data: bytes) -> MediaPacket:
27
+ version = (data[0] >> 6) & 0x03
28
+ padding = (data[0] >> 5) & 0x01
29
+ extension = (data[0] >> 4) & 0x01
30
+ csrc_count = data[0] & 0x0F
31
+ marker = (data[1] >> 7) & 0x01
32
+ payload_type = data[1] & 0x7F
33
+ sequence_number = struct.unpack_from('>H', data, 2)[0]
34
+ timestamp = struct.unpack_from('>I', data, 4)[0]
35
+ ssrc = struct.unpack_from('>I', data, 8)[0]
36
+ csrc_list = [
37
+ struct.unpack_from('>I', data, 12 + i)[0] for i in range(csrc_count)
38
+ ]
39
+ payload = data[12 + csrc_count * 4 :]
40
+
41
+ return MediaPacket(
42
+ version,
43
+ padding,
44
+ extension,
45
+ marker,
46
+ sequence_number,
47
+ timestamp,
48
+ ssrc,
49
+ csrc_list,
50
+ payload_type,
51
+ payload,
52
+ )
53
+
54
+ def __init__(
55
+ self,
56
+ version: int,
57
+ padding: int,
58
+ extension: int,
59
+ marker: int,
60
+ sequence_number: int,
61
+ timestamp: int,
62
+ ssrc: int,
63
+ csrc_list: List[int],
64
+ payload_type: int,
65
+ payload: bytes,
66
+ ) -> None:
67
+ self.version = version
68
+ self.padding = padding
69
+ self.extension = extension
70
+ self.marker = marker
71
+ self.sequence_number = sequence_number & 0xFFFF
72
+ self.timestamp = timestamp & 0xFFFFFFFF
73
+ self.timestamp_seconds = 0.0
74
+ self.ssrc = ssrc
75
+ self.csrc_list = csrc_list
76
+ self.payload_type = payload_type
77
+ self.payload = payload
78
+
79
+ def __bytes__(self) -> bytes:
80
+ header = bytes(
81
+ [
82
+ self.version << 6
83
+ | self.padding << 5
84
+ | self.extension << 4
85
+ | len(self.csrc_list),
86
+ self.marker << 7 | self.payload_type,
87
+ ]
88
+ ) + struct.pack(
89
+ '>HII',
90
+ self.sequence_number,
91
+ self.timestamp,
92
+ self.ssrc,
93
+ )
94
+ for csrc in self.csrc_list:
95
+ header += struct.pack('>I', csrc)
96
+ return header + self.payload
97
+
98
+ def __str__(self) -> str:
99
+ return (
100
+ f'RTP(v={self.version},'
101
+ f'p={self.padding},'
102
+ f'x={self.extension},'
103
+ f'm={self.marker},'
104
+ f'pt={self.payload_type},'
105
+ f'sn={self.sequence_number},'
106
+ f'ts={self.timestamp},'
107
+ f'ssrc={self.ssrc},'
108
+ f'csrcs={self.csrc_list},'
109
+ f'payload_size={len(self.payload)})'
110
+ )
@@ -70,6 +70,9 @@ def get_ini_dir() -> Optional[pathlib.Path]:
70
70
  elif sys.platform == 'linux':
71
71
  if xdg_runtime_dir := os.environ.get('XDG_RUNTIME_DIR', None):
72
72
  return pathlib.Path(xdg_runtime_dir)
73
+ tmpdir = os.environ.get('TMPDIR', '/tmp')
74
+ if pathlib.Path(tmpdir).is_dir():
75
+ return pathlib.Path(tmpdir)
73
76
  elif sys.platform == 'win32':
74
77
  if local_app_data_dir := os.environ.get('LOCALAPPDATA', None):
75
78
  return pathlib.Path(local_app_data_dir) / 'Temp'
bumble/transport/pyusb.py CHANGED
@@ -221,8 +221,9 @@ async def open_pyusb_transport(spec: str) -> Transport:
221
221
  async def close(self):
222
222
  await self.source.stop()
223
223
  await self.sink.stop()
224
- devices_in_use.remove(device.address)
225
224
  usb.util.release_interface(self.device, 0)
225
+ if devices_in_use and device.address in devices_in_use:
226
+ devices_in_use.remove(device.address)
226
227
 
227
228
  usb_find = usb.core.find
228
229
  try:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: bumble
3
- Version: 0.0.199
3
+ Version: 0.0.200
4
4
  Summary: Bluetooth Stack for Apps, Emulation, Test and Experimentation
5
5
  Home-page: https://github.com/google/bumble
6
6
  Author: Google
@@ -27,7 +27,7 @@ Requires-Dist: pyusb>=1.2; platform_system != "Emscripten"
27
27
  Requires-Dist: websockets>=12.0; platform_system != "Emscripten"
28
28
  Requires-Dist: cryptography>=39.0; platform_system == "Emscripten"
29
29
  Provides-Extra: avatar
30
- Requires-Dist: pandora-avatar==0.0.9; extra == "avatar"
30
+ Requires-Dist: pandora-avatar==0.0.10; extra == "avatar"
31
31
  Requires-Dist: rootcanal==1.10.0; python_version >= "3.10" and extra == "avatar"
32
32
  Provides-Extra: build
33
33
  Requires-Dist: build>=0.7; extra == "build"
@@ -1,36 +1,37 @@
1
1
  bumble/__init__.py,sha256=Q8jkz6rgl95IMAeInQVt_2GLoJl3DcEP2cxtrQ-ho5c,110
2
- bumble/_version.py,sha256=-5ruRKhgD06H9Dn3PntBTwUGHMNmAuViLLPxyfe0nAg,415
3
- bumble/a2dp.py,sha256=VEeAOCfT1ZqpwnEgel6DJ32vxR8jYX3IAaBfCqPdWO8,22675
2
+ bumble/_version.py,sha256=QkvzoUjUmzIu-0WPLCIoPkyy_n8BoMLliGVrvjz6i7A,415
3
+ bumble/a2dp.py,sha256=_dCq-qyG5OglDVlaOFwAgFe_ugvHuEdEYL-kWFf6sWQ,31775
4
4
  bumble/at.py,sha256=Giu2VUSJKH-jIh10lOfumiqy-FyO99Ra6nJ7UiWQ0H8,3114
5
- bumble/att.py,sha256=i-rs_xyTBUdGpyjoZCjb68f1IDiiS2kX9RylCeh6K0o,32757
6
- bumble/avc.py,sha256=Ho-WweU9lU15vlTwIbrGBa18M5vUKYm5q8aToaLSh70,16311
5
+ bumble/att.py,sha256=S-ha1Xn2YHf8k_c6JCXDv1QwiGJAJvgpHVLVxo1kkPQ,32755
6
+ bumble/avc.py,sha256=OZz5_DYenPeg2PcNM3dpgV5PUs4D7FBSNOcSqsuRJ2w,16329
7
7
  bumble/avctp.py,sha256=yHAjJRjLGtR0Q-iWcLS7cJRz5Jr2YiRmZd6LZV4Xjt4,9935
8
- bumble/avdtp.py,sha256=K_Ujbruw0cNfSXeMU3OvgWedrLjZ8A3i6f_hy1rtpRo,77470
9
- bumble/avrcp.py,sha256=BhDjc8TxhOpPnuvGn5-dGB6JK1aqshg4x7tm_vI4LLU,69363
8
+ bumble/avdtp.py,sha256=2ki_BE4SHiu3Sx9oHCknfjF-bBcgPB9TsyF5upciUYI,76773
9
+ bumble/avrcp.py,sha256=P_pLVpP3kRtoD2y0Ca0NTEEe1mA4SXO_ldtc4OP6Tcc,69976
10
10
  bumble/bridge.py,sha256=T6es5oS1dy8QgkxQ8iOD-YcZ0SWOv8jaqC7TGxqodk4,3003
11
- bumble/codecs.py,sha256=yels_alICohfM5DuvR2wMpYlebt7OrZHCtRXWyMyYYI,15581
11
+ bumble/codecs.py,sha256=75TGfq-XWWtr-mCRRG7QzJYNRebG50Ypt_QGQkoWlxU,20915
12
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
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=0-VNWZT-u7lvK3qBpAuYT0M6Rz_bMgMi4CjfUXX_6RM,9728
18
- bumble/device.py,sha256=4TcC6v_zwyTcZMAMZd7qb06oLVGtw84LtdlgIsilFbU,194632
18
+ bumble/device.py,sha256=vroAnNWlBW6_jw1KgmoG4ZWKyauLm8abS1XFrTX084Y,195024
19
19
  bumble/gap.py,sha256=dRU2_TWvqTDx80hxeSbXlWIeWvptWH4_XbItG5y948Q,2138
20
20
  bumble/gatt.py,sha256=a07mQ3O0LFt5zgUzSUwa4Jak_FXOXSFX-njxnQNS_zY,39014
21
21
  bumble/gatt_client.py,sha256=gIpgNQj5WNm9RirXXT4vuXQZ4WK82IFMOqnfqBtoYRU,42809
22
22
  bumble/gatt_server.py,sha256=pafGMeAuGAAELnr_1pB_l3CcR5u4H4Y1-MRHjN53gdE,37449
23
- bumble/hci.py,sha256=fx8BmNV29fiZWQPLLstihLWScb0_8zy5O-mX9IfngcI,285388
23
+ bumble/hci.py,sha256=e2JqP-D1h7b7vHxFbmdsLJtOacdiuMizzGgBWmCAhxQ,286058
24
24
  bumble/helpers.py,sha256=m0w4UgFFNDEnXwHrDyfRlcBObdVed2fqXGL0lvR3c8s,12733
25
- bumble/hfp.py,sha256=OsBDREelxhLMi_UZO9Kxlqzbts08CcGxoiicUgrYlXg,75353
25
+ bumble/hfp.py,sha256=h5IcgxKnlFWapeJHcNDTvxup9oAE5CcZju92sOusTGc,75619
26
26
  bumble/hid.py,sha256=hJKm6qhNa0kQTGmp_VxNh3-ywgBDdJpPPFcvtFiRL0A,20335
27
- bumble/host.py,sha256=s7ZzGbExvewZ7qoMF3cdjyvFKae8NqiFH-xtHhd_a2M,48814
27
+ bumble/host.py,sha256=pPH7HTQ6ogOToj4Y5Jl985MKjbVlG_jeOcJrV0NTSqU,49204
28
28
  bumble/keys.py,sha256=WbIQ7Ob81mW75qmEPQ2rBLfnqBMA-ts2yowWXP9UaCY,12654
29
29
  bumble/l2cap.py,sha256=Bu6oTD3DzqLOKiarynT1cfQefNgR0gCJoKxnwQJl2_o,81398
30
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
33
  bumble/rfcomm.py,sha256=dh5t5vlDEfw3yHgQfzegMYPnShP8Zo-3ScABUvmXNLI,40751
34
+ bumble/rtp.py,sha256=388X3aCv-QrWJ37r_VPqXYJtvNGWPsHnJasqs41g_-s,3487
34
35
  bumble/sdp.py,sha256=aajRQybcMWh_Kc4IuQahix6bXnHg61OXl1gSdrSysl4,45465
35
36
  bumble/smp.py,sha256=FNLn-pt2n6CKNttQGJJDnfaeof2SVkxlapwySHWAVJY,77640
36
37
  bumble/snoop.py,sha256=1mzwmp9LToUXbPnFsLrt8S4UHs0kqzbu7LDydwbmkZI,5715
@@ -41,7 +42,7 @@ bumble/apps/auracast.py,sha256=hrG6dW79UkMXqcMLgYjziWEjcVibFUITvjPb4LX1lxM,24686
41
42
  bumble/apps/bench.py,sha256=nPACg5gQWxJ-6phze12FVCv1_WS2UjrWR7OUWj0o8PU,56350
42
43
  bumble/apps/ble_rpa_tool.py,sha256=ZQtsbfnLPd5qUAkEBPpNgJLRynBBc7q_9cDHKUW2SQ0,1701
43
44
  bumble/apps/console.py,sha256=rwD9y3g8Mm_mAEvrcXjbtcv5d8mwF3yTbmE6Vet2BEk,45300
44
- bumble/apps/controller_info.py,sha256=m29omI2r8q01GccgN6Lb-HfSsBjYdGpLDHlgZ99ldTM,9249
45
+ bumble/apps/controller_info.py,sha256=WScuK5Ytp5aFEosAcgRTCEeey6SmxDFmyB7KBhgVx6s,11759
45
46
  bumble/apps/controller_loopback.py,sha256=VJAFsUdFwm2KgOrRuLADymMpZl5qVO0RGkDSr-1XKtY,7214
46
47
  bumble/apps/controllers.py,sha256=R6XJ1XpyuXlyqSCmI7PromVIcoYTcYfpmO-TqTYXnUI,2326
47
48
  bumble/apps/device_info.py,sha256=kQSO7F60cmUKw99LHfyly9s_ox2mD0dNGsgxCnKoFOQ,7999
@@ -62,12 +63,13 @@ bumble/apps/lea_unicast/liblc3.wasm,sha256=nYMzG9fP8_71K9dQfVI9QPQPkFRPHoqZEEExs
62
63
  bumble/apps/link_relay/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
64
  bumble/apps/link_relay/link_relay.py,sha256=GOESYPzkMJFrz5VOI_BSmnmgz4Y8EdSLHMWgdA63aDg,10066
64
65
  bumble/apps/link_relay/logging.yml,sha256=t-P72RAHsTZOESw0M4I3CQPonymcjkd9SLE0eY_ZNiM,311
66
+ bumble/apps/player/player.py,sha256=hht867HimxaO-ZgPxZB3OYLNJv6eaR55BUgBlCSGR6U,22370
65
67
  bumble/apps/speaker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
68
  bumble/apps/speaker/logo.svg,sha256=SQ9XXIqhh07BnGaBZ653nJ7vOslm2Dogdqadhg2MdE4,4205
67
69
  bumble/apps/speaker/speaker.css,sha256=nyM5TjzDYkkLwFzsaIOuTSngzSvgDnkLe0Z-fAn1_t4,1234
68
70
  bumble/apps/speaker/speaker.html,sha256=kfAZ5oZSFc9ygBFIUuZEn5LUNQnHBvrnuHU6VAptyiU,1188
69
71
  bumble/apps/speaker/speaker.js,sha256=DrT831yg3oBXKZ5usnfZjRU9X6Nw3zjIWSkz6sIgVtw,9373
70
- bumble/apps/speaker/speaker.py,sha256=f7cOyVqD6HOiLPCgdcnwN7sakj2SScybVHVTBR6eFwk,24197
72
+ bumble/apps/speaker/speaker.py,sha256=OTqygA9VbQW_XxTxqxS0vRW_wvhnKHssSxDz1lQZ9ZU,24763
71
73
  bumble/drivers/__init__.py,sha256=lxqJTghh21rQFThRTurwLysZm385TUcn8ZdpHQSWD88,3196
72
74
  bumble/drivers/common.py,sha256=pS783hudolLZAzF8IUWp7g6TXyQsUCEzqCsd1VGeYfQ,1507
73
75
  bumble/drivers/intel.py,sha256=-YcJI4ZC_fhHHxWyE8b4eB8V7suOFH1n9uayckGE9Uw,3231
@@ -91,7 +93,7 @@ bumble/profiles/cap.py,sha256=6gH7oOnUKjOggMPuB7rtbwj0AneoNmnWzQ_iR3io8e0,1945
91
93
  bumble/profiles/csip.py,sha256=qpI9W0_FWIpsuJrHhxfbKaa-TD21epxEa3EuCm8gh6c,10156
92
94
  bumble/profiles/device_information_service.py,sha256=RfqnXywcwcSTiFalxd1LVTTdeWLxHGsMvlvr9fI0GJI,6193
93
95
  bumble/profiles/gap.py,sha256=jUjfy6MPL7k6wgNn3ny3PVgSX6-SLmjUepFYHjGc3IU,3870
94
- bumble/profiles/hap.py,sha256=9K6FR0FAjpRdDHoU5sgddndeVH2r1fQyWKRXM0dyoa0,25265
96
+ bumble/profiles/hap.py,sha256=IbE1KzjIMEq6FxtFqTgA2DN0pPnpu0996KJRjuN3oaQ,25614
95
97
  bumble/profiles/heart_rate_service.py,sha256=_MG1ApmF1B7b4xRzELuahtRWzLm49i9O4m7I6ZFU4mw,8644
96
98
  bumble/profiles/le_audio.py,sha256=1x6OpIc0JMa32YVcfM8lq6jnXHlriHUcOkAs0EttJJk,3093
97
99
  bumble/profiles/mcp.py,sha256=vIN1r_if4LmOcGCgZuDYTYLMQzU6-1pKUFx1Z3iSAeY,17415
@@ -106,13 +108,13 @@ bumble/tools/rtk_fw_download.py,sha256=KEPG-rDrdPGKBzZ78P4s3udLRYT3p7vesGhXvJTWT
106
108
  bumble/tools/rtk_util.py,sha256=TwZhupHQrQYsYHLdRGyzXKd24pwCk8kkzqK1Rj2guco,5087
107
109
  bumble/transport/__init__.py,sha256=Z01fvuKpqAbhJd0wYcGhW09W2tycM71ck80XoZ8a87Q,7012
108
110
  bumble/transport/android_emulator.py,sha256=6HR2cEqdU0XbOldwxCtQuXtvwOUYhRfHkPz0TRt3mbo,4382
109
- bumble/transport/android_netsim.py,sha256=39RYKZJX806nbS6I2Yu31Z9h7-FJgYGIshXUoT0GjS8,16315
111
+ bumble/transport/android_netsim.py,sha256=bQ1XSNloAsqanyEQMmcTpZX6csiZNdowoYDh-JskDZY,16447
110
112
  bumble/transport/common.py,sha256=bJWYH-vRJJl0nWwlAjGTHrRQFdZayKkH7YoGor5abH8,16659
111
113
  bumble/transport/file.py,sha256=eVM2V6Nk2nDAFdE7Rt01ZI3JdTovsH9OEU1gKYPJjpE,2010
112
114
  bumble/transport/hci_socket.py,sha256=EdgWi3-O5yvYcH4R4BkPtG79pnUo7GQtXWawuUHDoDQ,6331
113
115
  bumble/transport/pty.py,sha256=grTl-yvjMWHflNwuME4ccVqDbk6NIEgQMgH6Y9lf1fU,2732
114
116
  bumble/transport/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
115
- bumble/transport/pyusb.py,sha256=IGcFJsYOlHaQRXcFCmGlwLZjg8D2BQq9IQrAs6TA2UA,16109
117
+ bumble/transport/pyusb.py,sha256=7l0y3qo3_LYv1wyKtGC5d0Si2t49F574NIA4XZu70jk,16181
116
118
  bumble/transport/serial.py,sha256=loQxkeG7uE09enXWg2uGbxi6CeG70wn3kzPbEwULKw4,2446
117
119
  bumble/transport/tcp_client.py,sha256=deyUJYpj04QE00Mw_PTU5PHPA6mr1Nui3f5-QCy2zOw,1854
118
120
  bumble/transport/tcp_server.py,sha256=tvu7FuPeqiXfoj2HQU8wu4AiwKjDDDCKlKjgtqWc5hg,3779
@@ -155,9 +157,9 @@ bumble/vendor/android/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
155
157
  bumble/vendor/android/hci.py,sha256=GZrkhaWmcMt1JpnRhv0NoySGkf2H4lNUV2f_omRZW0I,10741
156
158
  bumble/vendor/zephyr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
157
159
  bumble/vendor/zephyr/hci.py,sha256=d83bC0TvT947eN4roFjLkQefWtHOoNsr4xib2ctSkvA,3195
158
- bumble-0.0.199.dist-info/LICENSE,sha256=FvaYh4NRWIGgS_OwoBs5gFgkCmAghZ-DYnIGBZPuw-s,12142
159
- bumble-0.0.199.dist-info/METADATA,sha256=Qfi-AevfEFjLoT0FfXuAjznE0U8MONF87tArGkqVIK0,5672
160
- bumble-0.0.199.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
161
- bumble-0.0.199.dist-info/entry_points.txt,sha256=AOFf_gnWbZ7jk5fzspxXHCQUay1ik71pK3HYO7sZQsk,937
162
- bumble-0.0.199.dist-info/top_level.txt,sha256=tV6JJKaHPYMFiJYiBYFW24PCcfLxTJZdlu6BmH3Cb00,7
163
- bumble-0.0.199.dist-info/RECORD,,
160
+ bumble-0.0.200.dist-info/LICENSE,sha256=FvaYh4NRWIGgS_OwoBs5gFgkCmAghZ-DYnIGBZPuw-s,12142
161
+ bumble-0.0.200.dist-info/METADATA,sha256=JusrKVEENpezz89ImgV1FiIA5pBG9OoZK6Ic2ass0ac,5673
162
+ bumble-0.0.200.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
163
+ bumble-0.0.200.dist-info/entry_points.txt,sha256=2TAnDAHiYVEo9Gnugk29QIsHpCgRgnPqBszLSgIX2T0,984
164
+ bumble-0.0.200.dist-info/top_level.txt,sha256=tV6JJKaHPYMFiJYiBYFW24PCcfLxTJZdlu6BmH3Cb00,7
165
+ bumble-0.0.200.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.1.0)
2
+ Generator: setuptools (75.2.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -10,6 +10,7 @@ bumble-l2cap-bridge = bumble.apps.l2cap_bridge:main
10
10
  bumble-link-relay = bumble.apps.link_relay.link_relay:main
11
11
  bumble-pair = bumble.apps.pair:main
12
12
  bumble-pandora-server = bumble.apps.pandora_server:main
13
+ bumble-player = bumble.apps.player.player:main
13
14
  bumble-rfcomm-bridge = bumble.apps.rfcomm_bridge:main
14
15
  bumble-rtk-fw-download = bumble.tools.rtk_fw_download:main
15
16
  bumble-rtk-util = bumble.tools.rtk_util:main