bumble 0.0.212__py3-none-any.whl → 0.0.213__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/a2dp.py +6 -0
- bumble/apps/README.md +0 -3
- bumble/apps/auracast.py +11 -9
- bumble/apps/bench.py +480 -31
- bumble/apps/console.py +3 -3
- bumble/apps/controller_info.py +47 -10
- bumble/apps/controller_loopback.py +7 -3
- bumble/apps/controllers.py +2 -2
- bumble/apps/device_info.py +2 -2
- bumble/apps/gatt_dump.py +2 -2
- bumble/apps/gg_bridge.py +2 -2
- bumble/apps/hci_bridge.py +2 -2
- bumble/apps/l2cap_bridge.py +2 -2
- bumble/apps/lea_unicast/app.py +6 -1
- bumble/apps/pair.py +19 -11
- bumble/apps/pandora_server.py +2 -2
- bumble/apps/rfcomm_bridge.py +1 -1
- bumble/apps/scan.py +2 -2
- bumble/apps/show.py +4 -2
- bumble/apps/speaker/speaker.html +1 -0
- bumble/apps/speaker/speaker.js +113 -62
- bumble/apps/speaker/speaker.py +126 -18
- bumble/at.py +4 -4
- bumble/att.py +2 -6
- bumble/avc.py +7 -7
- bumble/avctp.py +3 -3
- bumble/avdtp.py +16 -20
- bumble/avrcp.py +41 -53
- bumble/colors.py +2 -2
- bumble/controller.py +84 -23
- bumble/device.py +348 -182
- bumble/drivers/__init__.py +2 -2
- bumble/drivers/common.py +0 -2
- bumble/drivers/intel.py +37 -40
- bumble/drivers/rtk.py +28 -35
- bumble/gatt.py +4 -4
- bumble/gatt_adapters.py +4 -5
- bumble/gatt_client.py +26 -31
- bumble/gatt_server.py +7 -11
- bumble/hci.py +2601 -2909
- bumble/helpers.py +4 -5
- bumble/hfp.py +32 -37
- bumble/host.py +94 -35
- bumble/keys.py +5 -5
- bumble/l2cap.py +310 -394
- bumble/link.py +6 -270
- bumble/pairing.py +23 -20
- bumble/pandora/__init__.py +1 -1
- bumble/pandora/config.py +2 -2
- bumble/pandora/device.py +6 -6
- bumble/pandora/host.py +27 -28
- bumble/pandora/l2cap.py +2 -2
- bumble/pandora/security.py +6 -6
- bumble/pandora/utils.py +3 -3
- bumble/profiles/ascs.py +132 -131
- bumble/profiles/asha.py +2 -2
- bumble/profiles/bap.py +3 -4
- bumble/profiles/csip.py +2 -2
- bumble/profiles/device_information_service.py +2 -2
- bumble/profiles/gap.py +2 -2
- bumble/profiles/hap.py +34 -33
- bumble/profiles/le_audio.py +4 -4
- bumble/profiles/mcp.py +4 -4
- bumble/profiles/vcs.py +3 -5
- bumble/rfcomm.py +10 -10
- bumble/rtp.py +1 -2
- bumble/sdp.py +2 -2
- bumble/smp.py +57 -61
- bumble/tools/rtk_util.py +2 -2
- bumble/transport/__init__.py +2 -16
- bumble/transport/android_netsim.py +5 -5
- bumble/transport/common.py +4 -4
- bumble/transport/pyusb.py +2 -2
- bumble/utils.py +2 -5
- bumble/vendor/android/hci.py +118 -200
- bumble/vendor/zephyr/hci.py +32 -27
- {bumble-0.0.212.dist-info → bumble-0.0.213.dist-info}/METADATA +2 -2
- {bumble-0.0.212.dist-info → bumble-0.0.213.dist-info}/RECORD +83 -86
- {bumble-0.0.212.dist-info → bumble-0.0.213.dist-info}/WHEEL +1 -1
- {bumble-0.0.212.dist-info → bumble-0.0.213.dist-info}/entry_points.txt +0 -1
- bumble/apps/link_relay/__init__.py +0 -0
- bumble/apps/link_relay/link_relay.py +0 -289
- bumble/apps/link_relay/logging.yml +0 -21
- {bumble-0.0.212.dist-info → bumble-0.0.213.dist-info}/licenses/LICENSE +0 -0
- {bumble-0.0.212.dist-info → bumble-0.0.213.dist-info}/top_level.txt +0 -0
bumble/_version.py
CHANGED
bumble/a2dp.py
CHANGED
|
@@ -479,6 +479,12 @@ class OpusMediaCodecInformation(VendorSpecificMediaCodecInformation):
|
|
|
479
479
|
class SamplingFrequency(enum.IntFlag):
|
|
480
480
|
SF_48000 = 1 << 0
|
|
481
481
|
|
|
482
|
+
@classmethod
|
|
483
|
+
def from_int(cls, sampling_frequency: int) -> Self:
|
|
484
|
+
if sampling_frequency != 48000:
|
|
485
|
+
raise ValueError("no such sampling frequency")
|
|
486
|
+
return cls(1)
|
|
487
|
+
|
|
482
488
|
VENDOR_ID: ClassVar[int] = 0x000000E0
|
|
483
489
|
CODEC_ID: ClassVar[int] = 0x0001
|
|
484
490
|
|
bumble/apps/README.md
CHANGED
|
@@ -12,9 +12,6 @@ Apps
|
|
|
12
12
|
## `show.py`
|
|
13
13
|
Parse a file with HCI packets and print the details of each packet in a human readable form
|
|
14
14
|
|
|
15
|
-
## `link_relay.py`
|
|
16
|
-
Simple WebSocket relay for virtual RemoteLink instances to communicate with each other through.
|
|
17
|
-
|
|
18
15
|
## `hci_bridge.py`
|
|
19
16
|
This app acts as a simple bridge between two HCI transports, with a host on one side and
|
|
20
17
|
a controller on the other. All the HCI packets bridged between the two are printed on the console
|
bumble/apps/auracast.py
CHANGED
|
@@ -29,9 +29,7 @@ from typing import (
|
|
|
29
29
|
Any,
|
|
30
30
|
AsyncGenerator,
|
|
31
31
|
Coroutine,
|
|
32
|
-
Deque,
|
|
33
32
|
Optional,
|
|
34
|
-
Tuple,
|
|
35
33
|
)
|
|
36
34
|
|
|
37
35
|
import click
|
|
@@ -130,8 +128,8 @@ class BroadcastScanner(bumble.utils.EventEmitter):
|
|
|
130
128
|
broadcast_audio_announcement: Optional[bap.BroadcastAudioAnnouncement] = None
|
|
131
129
|
basic_audio_announcement: Optional[bap.BasicAudioAnnouncement] = None
|
|
132
130
|
appearance: Optional[core.Appearance] = None
|
|
133
|
-
biginfo: Optional[bumble.device.
|
|
134
|
-
manufacturer_data: Optional[
|
|
131
|
+
biginfo: Optional[bumble.device.BigInfoAdvertisement] = None
|
|
132
|
+
manufacturer_data: Optional[tuple[str, bytes]] = None
|
|
135
133
|
|
|
136
134
|
def __post_init__(self) -> None:
|
|
137
135
|
super().__init__()
|
|
@@ -257,8 +255,10 @@ class BroadcastScanner(bumble.utils.EventEmitter):
|
|
|
257
255
|
print(color(' SDU Interval: ', 'magenta'), self.biginfo.sdu_interval)
|
|
258
256
|
print(color(' Max SDU: ', 'magenta'), self.biginfo.max_sdu)
|
|
259
257
|
print(color(' PHY: ', 'magenta'), self.biginfo.phy.name)
|
|
260
|
-
print(color('
|
|
261
|
-
print(
|
|
258
|
+
print(color(' Framing: ', 'magenta'), self.biginfo.framing.name)
|
|
259
|
+
print(
|
|
260
|
+
color(' Encryption: ', 'magenta'), self.biginfo.encryption.name
|
|
261
|
+
)
|
|
262
262
|
|
|
263
263
|
def on_sync_establishment(self) -> None:
|
|
264
264
|
self.emit('sync_establishment')
|
|
@@ -288,7 +288,7 @@ class BroadcastScanner(bumble.utils.EventEmitter):
|
|
|
288
288
|
self.emit('change')
|
|
289
289
|
|
|
290
290
|
def on_biginfo_advertisement(
|
|
291
|
-
self, advertisement: bumble.device.
|
|
291
|
+
self, advertisement: bumble.device.BigInfoAdvertisement
|
|
292
292
|
) -> None:
|
|
293
293
|
self.biginfo = advertisement
|
|
294
294
|
self.emit('change')
|
|
@@ -748,7 +748,9 @@ async def run_receive(
|
|
|
748
748
|
sample_rate_hz=sampling_frequency.hz,
|
|
749
749
|
num_channels=num_bis,
|
|
750
750
|
)
|
|
751
|
-
lc3_queues: list[
|
|
751
|
+
lc3_queues: list[collections.deque[bytes]] = [
|
|
752
|
+
collections.deque() for i in range(num_bis)
|
|
753
|
+
]
|
|
752
754
|
packet_stats = [0, 0]
|
|
753
755
|
|
|
754
756
|
audio_output = await audio_io.create_audio_output(output)
|
|
@@ -764,7 +766,7 @@ async def run_receive(
|
|
|
764
766
|
)
|
|
765
767
|
)
|
|
766
768
|
|
|
767
|
-
def sink(queue:
|
|
769
|
+
def sink(queue: collections.deque[bytes], packet: hci.HCI_IsoDataPacket):
|
|
768
770
|
# TODO: re-assemble fragments and detect errors
|
|
769
771
|
queue.append(packet.iso_sdu_fragment)
|
|
770
772
|
|