bumble 0.0.201__py3-none-any.whl → 0.0.203__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 +22 -13
- bumble/apps/bench.py +138 -93
- bumble/apps/hci_bridge.py +1 -1
- bumble/apps/lea_unicast/app.py +24 -6
- bumble/apps/rfcomm_bridge.py +10 -1
- bumble/att.py +1 -4
- bumble/avc.py +2 -0
- bumble/controller.py +58 -2
- bumble/device.py +454 -494
- bumble/gatt.py +1 -1
- bumble/gatt_client.py +9 -3
- bumble/gatt_server.py +2 -2
- bumble/hci.py +93 -33
- bumble/hfp.py +20 -17
- bumble/host.py +1 -1
- bumble/l2cap.py +3 -8
- bumble/link.py +2 -0
- bumble/pandora/host.py +1 -1
- bumble/profiles/aics.py +3 -3
- bumble/profiles/bap.py +116 -41
- bumble/sdp.py +3 -7
- bumble/smp.py +3 -6
- bumble/transport/common.py +4 -2
- {bumble-0.0.201.dist-info → bumble-0.0.203.dist-info}/METADATA +18 -17
- {bumble-0.0.201.dist-info → bumble-0.0.203.dist-info}/RECORD +30 -30
- {bumble-0.0.201.dist-info → bumble-0.0.203.dist-info}/WHEEL +1 -1
- {bumble-0.0.201.dist-info → bumble-0.0.203.dist-info}/LICENSE +0 -0
- {bumble-0.0.201.dist-info → bumble-0.0.203.dist-info}/entry_points.txt +0 -0
- {bumble-0.0.201.dist-info → bumble-0.0.203.dist-info}/top_level.txt +0 -0
bumble/profiles/bap.py
CHANGED
|
@@ -102,6 +102,7 @@ class ContextType(enum.IntFlag):
|
|
|
102
102
|
|
|
103
103
|
# fmt: off
|
|
104
104
|
PROHIBITED = 0x0000
|
|
105
|
+
UNSPECIFIED = 0x0001
|
|
105
106
|
CONVERSATIONAL = 0x0002
|
|
106
107
|
MEDIA = 0x0004
|
|
107
108
|
GAME = 0x0008
|
|
@@ -264,7 +265,7 @@ class UnicastServerAdvertisingData:
|
|
|
264
265
|
core.AdvertisingData.SERVICE_DATA_16_BIT_UUID,
|
|
265
266
|
struct.pack(
|
|
266
267
|
'<2sBIB',
|
|
267
|
-
gatt.GATT_AUDIO_STREAM_CONTROL_SERVICE
|
|
268
|
+
bytes(gatt.GATT_AUDIO_STREAM_CONTROL_SERVICE),
|
|
268
269
|
self.announcement_type,
|
|
269
270
|
self.available_audio_contexts,
|
|
270
271
|
len(self.metadata),
|
|
@@ -350,6 +351,7 @@ class CodecSpecificCapabilities:
|
|
|
350
351
|
supported_max_codec_frames_per_sdu = value
|
|
351
352
|
|
|
352
353
|
# It is expected here that if some fields are missing, an error should be raised.
|
|
354
|
+
# pylint: disable=possibly-used-before-assignment,used-before-assignment
|
|
353
355
|
return CodecSpecificCapabilities(
|
|
354
356
|
supported_sampling_frequencies=supported_sampling_frequencies,
|
|
355
357
|
supported_frame_durations=supported_frame_durations,
|
|
@@ -396,18 +398,21 @@ class CodecSpecificConfiguration:
|
|
|
396
398
|
OCTETS_PER_FRAME = 0x04
|
|
397
399
|
CODEC_FRAMES_PER_SDU = 0x05
|
|
398
400
|
|
|
399
|
-
sampling_frequency: SamplingFrequency
|
|
400
|
-
frame_duration: FrameDuration
|
|
401
|
-
audio_channel_allocation: AudioLocation
|
|
402
|
-
octets_per_codec_frame: int
|
|
403
|
-
codec_frames_per_sdu: int
|
|
401
|
+
sampling_frequency: SamplingFrequency | None = None
|
|
402
|
+
frame_duration: FrameDuration | None = None
|
|
403
|
+
audio_channel_allocation: AudioLocation | None = None
|
|
404
|
+
octets_per_codec_frame: int | None = None
|
|
405
|
+
codec_frames_per_sdu: int | None = None
|
|
404
406
|
|
|
405
407
|
@classmethod
|
|
406
408
|
def from_bytes(cls, data: bytes) -> CodecSpecificConfiguration:
|
|
407
409
|
offset = 0
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
410
|
+
sampling_frequency: SamplingFrequency | None = None
|
|
411
|
+
frame_duration: FrameDuration | None = None
|
|
412
|
+
audio_channel_allocation: AudioLocation | None = None
|
|
413
|
+
octets_per_codec_frame: int | None = None
|
|
414
|
+
codec_frames_per_sdu: int | None = None
|
|
415
|
+
|
|
411
416
|
while offset < len(data):
|
|
412
417
|
length, type = struct.unpack_from('BB', data, offset)
|
|
413
418
|
offset += 2
|
|
@@ -425,7 +430,6 @@ class CodecSpecificConfiguration:
|
|
|
425
430
|
elif type == CodecSpecificConfiguration.Type.CODEC_FRAMES_PER_SDU:
|
|
426
431
|
codec_frames_per_sdu = value
|
|
427
432
|
|
|
428
|
-
# It is expected here that if some fields are missing, an error should be raised.
|
|
429
433
|
return CodecSpecificConfiguration(
|
|
430
434
|
sampling_frequency=sampling_frequency,
|
|
431
435
|
frame_duration=frame_duration,
|
|
@@ -435,23 +439,43 @@ class CodecSpecificConfiguration:
|
|
|
435
439
|
)
|
|
436
440
|
|
|
437
441
|
def __bytes__(self) -> bytes:
|
|
438
|
-
return
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
442
|
+
return b''.join(
|
|
443
|
+
[
|
|
444
|
+
struct.pack(fmt, length, tag, value)
|
|
445
|
+
for fmt, length, tag, value in [
|
|
446
|
+
(
|
|
447
|
+
'<BBB',
|
|
448
|
+
2,
|
|
449
|
+
CodecSpecificConfiguration.Type.SAMPLING_FREQUENCY,
|
|
450
|
+
self.sampling_frequency,
|
|
451
|
+
),
|
|
452
|
+
(
|
|
453
|
+
'<BBB',
|
|
454
|
+
2,
|
|
455
|
+
CodecSpecificConfiguration.Type.FRAME_DURATION,
|
|
456
|
+
self.frame_duration,
|
|
457
|
+
),
|
|
458
|
+
(
|
|
459
|
+
'<BBI',
|
|
460
|
+
5,
|
|
461
|
+
CodecSpecificConfiguration.Type.AUDIO_CHANNEL_ALLOCATION,
|
|
462
|
+
self.audio_channel_allocation,
|
|
463
|
+
),
|
|
464
|
+
(
|
|
465
|
+
'<BBH',
|
|
466
|
+
3,
|
|
467
|
+
CodecSpecificConfiguration.Type.OCTETS_PER_FRAME,
|
|
468
|
+
self.octets_per_codec_frame,
|
|
469
|
+
),
|
|
470
|
+
(
|
|
471
|
+
'<BBB',
|
|
472
|
+
2,
|
|
473
|
+
CodecSpecificConfiguration.Type.CODEC_FRAMES_PER_SDU,
|
|
474
|
+
self.codec_frames_per_sdu,
|
|
475
|
+
),
|
|
476
|
+
]
|
|
477
|
+
if value is not None
|
|
478
|
+
]
|
|
455
479
|
)
|
|
456
480
|
|
|
457
481
|
|
|
@@ -463,6 +487,24 @@ class BroadcastAudioAnnouncement:
|
|
|
463
487
|
def from_bytes(cls, data: bytes) -> Self:
|
|
464
488
|
return cls(int.from_bytes(data[:3], 'little'))
|
|
465
489
|
|
|
490
|
+
def __bytes__(self) -> bytes:
|
|
491
|
+
return self.broadcast_id.to_bytes(3, 'little')
|
|
492
|
+
|
|
493
|
+
def get_advertising_data(self) -> bytes:
|
|
494
|
+
return bytes(
|
|
495
|
+
core.AdvertisingData(
|
|
496
|
+
[
|
|
497
|
+
(
|
|
498
|
+
core.AdvertisingData.SERVICE_DATA_16_BIT_UUID,
|
|
499
|
+
(
|
|
500
|
+
bytes(gatt.GATT_BROADCAST_AUDIO_ANNOUNCEMENT_SERVICE)
|
|
501
|
+
+ bytes(self)
|
|
502
|
+
),
|
|
503
|
+
)
|
|
504
|
+
]
|
|
505
|
+
)
|
|
506
|
+
)
|
|
507
|
+
|
|
466
508
|
|
|
467
509
|
@dataclasses.dataclass
|
|
468
510
|
class BasicAudioAnnouncement:
|
|
@@ -471,26 +513,37 @@ class BasicAudioAnnouncement:
|
|
|
471
513
|
index: int
|
|
472
514
|
codec_specific_configuration: CodecSpecificConfiguration
|
|
473
515
|
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
coding_format = hci.CodecID(data[0])
|
|
483
|
-
company_id = int.from_bytes(data[1:3], 'little')
|
|
484
|
-
vendor_specific_codec_id = int.from_bytes(data[3:5], 'little')
|
|
485
|
-
return cls(coding_format, company_id, vendor_specific_codec_id)
|
|
516
|
+
def __bytes__(self) -> bytes:
|
|
517
|
+
codec_specific_configuration_bytes = bytes(
|
|
518
|
+
self.codec_specific_configuration
|
|
519
|
+
)
|
|
520
|
+
return (
|
|
521
|
+
bytes([self.index, len(codec_specific_configuration_bytes)])
|
|
522
|
+
+ codec_specific_configuration_bytes
|
|
523
|
+
)
|
|
486
524
|
|
|
487
525
|
@dataclasses.dataclass
|
|
488
526
|
class Subgroup:
|
|
489
|
-
codec_id:
|
|
527
|
+
codec_id: hci.CodingFormat
|
|
490
528
|
codec_specific_configuration: CodecSpecificConfiguration
|
|
491
529
|
metadata: le_audio.Metadata
|
|
492
530
|
bis: List[BasicAudioAnnouncement.BIS]
|
|
493
531
|
|
|
532
|
+
def __bytes__(self) -> bytes:
|
|
533
|
+
metadata_bytes = bytes(self.metadata)
|
|
534
|
+
codec_specific_configuration_bytes = bytes(
|
|
535
|
+
self.codec_specific_configuration
|
|
536
|
+
)
|
|
537
|
+
return (
|
|
538
|
+
bytes([len(self.bis)])
|
|
539
|
+
+ bytes(self.codec_id)
|
|
540
|
+
+ bytes([len(codec_specific_configuration_bytes)])
|
|
541
|
+
+ codec_specific_configuration_bytes
|
|
542
|
+
+ bytes([len(metadata_bytes)])
|
|
543
|
+
+ metadata_bytes
|
|
544
|
+
+ b''.join(map(bytes, self.bis))
|
|
545
|
+
)
|
|
546
|
+
|
|
494
547
|
presentation_delay: int
|
|
495
548
|
subgroups: List[BasicAudioAnnouncement.Subgroup]
|
|
496
549
|
|
|
@@ -502,7 +555,7 @@ class BasicAudioAnnouncement:
|
|
|
502
555
|
for _ in range(data[3]):
|
|
503
556
|
num_bis = data[offset]
|
|
504
557
|
offset += 1
|
|
505
|
-
codec_id =
|
|
558
|
+
codec_id = hci.CodingFormat.from_bytes(data[offset : offset + 5])
|
|
506
559
|
offset += 5
|
|
507
560
|
codec_specific_configuration_length = data[offset]
|
|
508
561
|
offset += 1
|
|
@@ -546,3 +599,25 @@ class BasicAudioAnnouncement:
|
|
|
546
599
|
)
|
|
547
600
|
|
|
548
601
|
return cls(presentation_delay, subgroups)
|
|
602
|
+
|
|
603
|
+
def __bytes__(self) -> bytes:
|
|
604
|
+
return (
|
|
605
|
+
self.presentation_delay.to_bytes(3, 'little')
|
|
606
|
+
+ bytes([len(self.subgroups)])
|
|
607
|
+
+ b''.join(map(bytes, self.subgroups))
|
|
608
|
+
)
|
|
609
|
+
|
|
610
|
+
def get_advertising_data(self) -> bytes:
|
|
611
|
+
return bytes(
|
|
612
|
+
core.AdvertisingData(
|
|
613
|
+
[
|
|
614
|
+
(
|
|
615
|
+
core.AdvertisingData.SERVICE_DATA_16_BIT_UUID,
|
|
616
|
+
(
|
|
617
|
+
bytes(gatt.GATT_BASIC_AUDIO_ANNOUNCEMENT_SERVICE)
|
|
618
|
+
+ bytes(self)
|
|
619
|
+
),
|
|
620
|
+
)
|
|
621
|
+
]
|
|
622
|
+
)
|
|
623
|
+
)
|
bumble/sdp.py
CHANGED
|
@@ -344,9 +344,6 @@ class DataElement:
|
|
|
344
344
|
] # Keep a copy so we can re-serialize to an exact replica
|
|
345
345
|
return result
|
|
346
346
|
|
|
347
|
-
def to_bytes(self):
|
|
348
|
-
return bytes(self)
|
|
349
|
-
|
|
350
347
|
def __bytes__(self):
|
|
351
348
|
# Return early if we have a cache
|
|
352
349
|
if self.bytes:
|
|
@@ -434,6 +431,8 @@ class DataElement:
|
|
|
434
431
|
if size != 1:
|
|
435
432
|
raise InvalidArgumentError('boolean must be 1 byte')
|
|
436
433
|
size_index = 0
|
|
434
|
+
else:
|
|
435
|
+
raise RuntimeError("internal error - self.type not supported")
|
|
437
436
|
|
|
438
437
|
self.bytes = bytes([self.type << 3 | size_index]) + size_bytes + data
|
|
439
438
|
return self.bytes
|
|
@@ -621,11 +620,8 @@ class SDP_PDU:
|
|
|
621
620
|
def init_from_bytes(self, pdu, offset):
|
|
622
621
|
return HCI_Object.init_from_bytes(self, pdu, offset, self.fields)
|
|
623
622
|
|
|
624
|
-
def to_bytes(self):
|
|
625
|
-
return self.pdu
|
|
626
|
-
|
|
627
623
|
def __bytes__(self):
|
|
628
|
-
return self.
|
|
624
|
+
return self.pdu
|
|
629
625
|
|
|
630
626
|
def __str__(self):
|
|
631
627
|
result = f'{color(self.name, "blue")} [TID={self.transaction_id}]'
|
bumble/smp.py
CHANGED
|
@@ -298,11 +298,8 @@ class SMP_Command:
|
|
|
298
298
|
def init_from_bytes(self, pdu: bytes, offset: int) -> None:
|
|
299
299
|
return HCI_Object.init_from_bytes(self, pdu, offset, self.fields)
|
|
300
300
|
|
|
301
|
-
def to_bytes(self):
|
|
302
|
-
return self.pdu
|
|
303
|
-
|
|
304
301
|
def __bytes__(self):
|
|
305
|
-
return self.
|
|
302
|
+
return self.pdu
|
|
306
303
|
|
|
307
304
|
def __str__(self):
|
|
308
305
|
result = color(self.name, 'yellow')
|
|
@@ -1839,7 +1836,7 @@ class Session:
|
|
|
1839
1836
|
if self.is_initiator:
|
|
1840
1837
|
if self.pairing_method == PairingMethod.OOB:
|
|
1841
1838
|
self.send_pairing_random_command()
|
|
1842
|
-
|
|
1839
|
+
elif self.pairing_method == PairingMethod.PASSKEY:
|
|
1843
1840
|
self.send_pairing_confirm_command()
|
|
1844
1841
|
else:
|
|
1845
1842
|
if self.pairing_method == PairingMethod.PASSKEY:
|
|
@@ -1949,7 +1946,7 @@ class Manager(EventEmitter):
|
|
|
1949
1946
|
f'{connection.peer_address}: {command}'
|
|
1950
1947
|
)
|
|
1951
1948
|
cid = SMP_BR_CID if connection.transport == BT_BR_EDR_TRANSPORT else SMP_CID
|
|
1952
|
-
connection.send_l2cap_pdu(cid, command
|
|
1949
|
+
connection.send_l2cap_pdu(cid, bytes(command))
|
|
1953
1950
|
|
|
1954
1951
|
def on_smp_security_request_command(
|
|
1955
1952
|
self, connection: Connection, request: SMP_Security_Request_Command
|
bumble/transport/common.py
CHANGED
|
@@ -370,11 +370,13 @@ class PumpedPacketSource(ParserSource):
|
|
|
370
370
|
self.parser.feed_data(packet)
|
|
371
371
|
except asyncio.CancelledError:
|
|
372
372
|
logger.debug('source pump task done')
|
|
373
|
-
self.terminated.
|
|
373
|
+
if not self.terminated.done():
|
|
374
|
+
self.terminated.set_result(None)
|
|
374
375
|
break
|
|
375
376
|
except Exception as error:
|
|
376
377
|
logger.warning(f'exception while waiting for packet: {error}')
|
|
377
|
-
self.terminated.
|
|
378
|
+
if not self.terminated.done():
|
|
379
|
+
self.terminated.set_exception(error)
|
|
378
380
|
break
|
|
379
381
|
|
|
380
382
|
self.pump_task = asyncio.create_task(pump_packets())
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: bumble
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.203
|
|
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,53 @@ 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
11
|
Requires-Dist: aiohttp~=3.8; platform_system != "Emscripten"
|
|
13
12
|
Requires-Dist: appdirs>=1.4; platform_system != "Emscripten"
|
|
14
13
|
Requires-Dist: click>=8.1.3; platform_system != "Emscripten"
|
|
15
14
|
Requires-Dist: cryptography==39; platform_system != "Emscripten"
|
|
15
|
+
Requires-Dist: cryptography>=39.0; platform_system == "Emscripten"
|
|
16
16
|
Requires-Dist: grpcio>=1.62.1; platform_system != "Emscripten"
|
|
17
17
|
Requires-Dist: humanize>=4.6.0; platform_system != "Emscripten"
|
|
18
18
|
Requires-Dist: libusb1>=2.0.1; platform_system != "Emscripten"
|
|
19
19
|
Requires-Dist: libusb-package==1.0.26.1; platform_system != "Emscripten"
|
|
20
20
|
Requires-Dist: platformdirs>=3.10.0; platform_system != "Emscripten"
|
|
21
|
-
Requires-Dist:
|
|
21
|
+
Requires-Dist: prompt_toolkit>=3.0.16; platform_system != "Emscripten"
|
|
22
22
|
Requires-Dist: prettytable>=3.6.0; platform_system != "Emscripten"
|
|
23
23
|
Requires-Dist: protobuf>=3.12.4; platform_system != "Emscripten"
|
|
24
|
+
Requires-Dist: pyee>=8.2.2
|
|
24
25
|
Requires-Dist: pyserial-asyncio>=0.5; platform_system != "Emscripten"
|
|
25
26
|
Requires-Dist: pyserial>=3.5; platform_system != "Emscripten"
|
|
26
27
|
Requires-Dist: pyusb>=1.2; platform_system != "Emscripten"
|
|
27
|
-
Requires-Dist: websockets
|
|
28
|
-
Requires-Dist: cryptography>=39.0; platform_system == "Emscripten"
|
|
29
|
-
Provides-Extra: avatar
|
|
30
|
-
Requires-Dist: pandora-avatar==0.0.10; extra == "avatar"
|
|
31
|
-
Requires-Dist: rootcanal==1.10.0; python_version >= "3.10" and extra == "avatar"
|
|
28
|
+
Requires-Dist: websockets==13.1; platform_system != "Emscripten"
|
|
32
29
|
Provides-Extra: build
|
|
33
30
|
Requires-Dist: build>=0.7; extra == "build"
|
|
31
|
+
Provides-Extra: test
|
|
32
|
+
Requires-Dist: pytest>=8.2; extra == "test"
|
|
33
|
+
Requires-Dist: pytest-asyncio>=0.23.5; extra == "test"
|
|
34
|
+
Requires-Dist: pytest-html>=3.2.0; extra == "test"
|
|
35
|
+
Requires-Dist: coverage>=6.4; extra == "test"
|
|
34
36
|
Provides-Extra: development
|
|
35
37
|
Requires-Dist: black==24.3; extra == "development"
|
|
36
38
|
Requires-Dist: grpcio-tools>=1.62.1; extra == "development"
|
|
37
39
|
Requires-Dist: invoke>=1.7.3; extra == "development"
|
|
38
|
-
Requires-Dist:
|
|
40
|
+
Requires-Dist: mobly>=1.12.2; extra == "development"
|
|
41
|
+
Requires-Dist: mypy==1.12.0; extra == "development"
|
|
39
42
|
Requires-Dist: nox>=2022; extra == "development"
|
|
40
|
-
Requires-Dist: pylint==3.1
|
|
43
|
+
Requires-Dist: pylint==3.3.1; extra == "development"
|
|
41
44
|
Requires-Dist: pyyaml>=6.0; extra == "development"
|
|
42
45
|
Requires-Dist: types-appdirs>=1.4.3; extra == "development"
|
|
43
46
|
Requires-Dist: types-invoke>=1.7.3; extra == "development"
|
|
44
47
|
Requires-Dist: types-protobuf>=4.21.0; extra == "development"
|
|
45
48
|
Requires-Dist: wasmtime==20.0.0; extra == "development"
|
|
49
|
+
Provides-Extra: avatar
|
|
50
|
+
Requires-Dist: pandora-avatar==0.0.10; extra == "avatar"
|
|
51
|
+
Requires-Dist: rootcanal==1.10.0; python_version >= "3.10" and extra == "avatar"
|
|
52
|
+
Provides-Extra: pandora
|
|
53
|
+
Requires-Dist: bt-test-interfaces>=0.0.6; extra == "pandora"
|
|
46
54
|
Provides-Extra: documentation
|
|
47
55
|
Requires-Dist: mkdocs>=1.4.0; extra == "documentation"
|
|
48
56
|
Requires-Dist: mkdocs-material>=8.5.6; extra == "documentation"
|
|
49
57
|
Requires-Dist: mkdocstrings[python]>=0.19.0; extra == "documentation"
|
|
50
|
-
Provides-Extra: pandora
|
|
51
|
-
Requires-Dist: bt-test-interfaces>=0.0.6; extra == "pandora"
|
|
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"
|
|
57
58
|
|
|
58
59
|
|
|
59
60
|
_ _ _
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
bumble/__init__.py,sha256=Q8jkz6rgl95IMAeInQVt_2GLoJl3DcEP2cxtrQ-ho5c,110
|
|
2
|
-
bumble/_version.py,sha256=
|
|
2
|
+
bumble/_version.py,sha256=S9xMkf5dpbGiPXrFIMCaq0E-C6SAhQr_6T4y8wOvYoQ,415
|
|
3
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=
|
|
6
|
-
bumble/avc.py,sha256=
|
|
5
|
+
bumble/att.py,sha256=yw_yg_be19O9Nx1mh_JE_ZoYfiNsD3a59rFQPuknQL0,32711
|
|
6
|
+
bumble/avc.py,sha256=cO1-8x7BvuBCQVJg-9nTibkLFC4y0_2SNERZ8_7Kn_c,16407
|
|
7
7
|
bumble/avctp.py,sha256=yHAjJRjLGtR0Q-iWcLS7cJRz5Jr2YiRmZd6LZV4Xjt4,9935
|
|
8
8
|
bumble/avdtp.py,sha256=2ki_BE4SHiu3Sx9oHCknfjF-bBcgPB9TsyF5upciUYI,76773
|
|
9
9
|
bumble/avrcp.py,sha256=P_pLVpP3kRtoD2y0Ca0NTEEe1mA4SXO_ldtc4OP6Tcc,69976
|
|
@@ -11,35 +11,35 @@ bumble/bridge.py,sha256=T6es5oS1dy8QgkxQ8iOD-YcZ0SWOv8jaqC7TGxqodk4,3003
|
|
|
11
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
|
-
bumble/controller.py,sha256=
|
|
14
|
+
bumble/controller.py,sha256=biUkQisEZOc9-TGkUXYPes1RONA6TizKwDYIQWJx_7A,61593
|
|
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=
|
|
18
|
+
bumble/device.py,sha256=BuVejCWditUcMzTM1RBOC-mHdu9tNMOv0AyeCp_iX9E,194628
|
|
19
19
|
bumble/gap.py,sha256=dRU2_TWvqTDx80hxeSbXlWIeWvptWH4_XbItG5y948Q,2138
|
|
20
|
-
bumble/gatt.py,sha256=
|
|
21
|
-
bumble/gatt_client.py,sha256=
|
|
22
|
-
bumble/gatt_server.py,sha256=
|
|
23
|
-
bumble/hci.py,sha256=
|
|
20
|
+
bumble/gatt.py,sha256=tXSDE2E4RsaFSW6rIz8qb0VJE4ZpcE-zafneCprcp2g,39010
|
|
21
|
+
bumble/gatt_client.py,sha256=Nb6xxQUDB68T7qF4GzlIPeER2SlroSGXbECZeSmzU4A,43190
|
|
22
|
+
bumble/gatt_server.py,sha256=T-Not_wPOrXtleiOwY0brJsbUI81NXb1vwq0Mun8QO8,37441
|
|
23
|
+
bumble/hci.py,sha256=DXRF7df0LxyZlxyROGK7fTE1982_uBQtiveNIcV-10U,289646
|
|
24
24
|
bumble/helpers.py,sha256=m0w4UgFFNDEnXwHrDyfRlcBObdVed2fqXGL0lvR3c8s,12733
|
|
25
|
-
bumble/hfp.py,sha256=
|
|
25
|
+
bumble/hfp.py,sha256=UDqB-z5nEzLgRojJeC6TbFRaPXV3Ht0jvQV03ksyiLU,75749
|
|
26
26
|
bumble/hid.py,sha256=hJKm6qhNa0kQTGmp_VxNh3-ywgBDdJpPPFcvtFiRL0A,20335
|
|
27
|
-
bumble/host.py,sha256=
|
|
27
|
+
bumble/host.py,sha256=gLDLx71ibS9DkeoXvzMFesssaT4svGx7SjasVdCio5I,49196
|
|
28
28
|
bumble/keys.py,sha256=WbIQ7Ob81mW75qmEPQ2rBLfnqBMA-ts2yowWXP9UaCY,12654
|
|
29
|
-
bumble/l2cap.py,sha256=
|
|
30
|
-
bumble/link.py,sha256=
|
|
29
|
+
bumble/l2cap.py,sha256=VT0mv3S6fzVhF1ouahykTmKBbEKDc9DfH0qoKmPH8ZE,81291
|
|
30
|
+
bumble/link.py,sha256=SU7Ls2Lyg1XuY8x6yP9tAC83SYmMTU2a-vQ_CWCfq90,24107
|
|
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
34
|
bumble/rtp.py,sha256=388X3aCv-QrWJ37r_VPqXYJtvNGWPsHnJasqs41g_-s,3487
|
|
35
|
-
bumble/sdp.py,sha256=
|
|
36
|
-
bumble/smp.py,sha256=
|
|
35
|
+
bumble/sdp.py,sha256=bztdDr7cYUA5sSL1SWe7rhgVjMCoUnc2bA4tdkwJQcE,45446
|
|
36
|
+
bumble/smp.py,sha256=LzCdIexJQCW3wcmV5bVjsJJ-LEqPGdBER089-VymUsE,77625
|
|
37
37
|
bumble/snoop.py,sha256=1mzwmp9LToUXbPnFsLrt8S4UHs0kqzbu7LDydwbmkZI,5715
|
|
38
38
|
bumble/utils.py,sha256=e0i-4d28-9zP3gYcd1rdNd669rkPnRs5oJCERUEDfxo,15099
|
|
39
39
|
bumble/apps/README.md,sha256=XTwjRAY-EJWDXpl1V8K3Mw8B7kIqzUIUizRjVBVhoIE,1769
|
|
40
40
|
bumble/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
41
|
-
bumble/apps/auracast.py,sha256=
|
|
42
|
-
bumble/apps/bench.py,sha256=
|
|
41
|
+
bumble/apps/auracast.py,sha256=zSsduDSTOa6Tf5qnty_nHyrOYFKjlYWyAz4zDNXA_uQ,25065
|
|
42
|
+
bumble/apps/bench.py,sha256=RitVnx9mzmW-1cB4O7wan-lQeFDlazdjTW-BQcuTDb0,58410
|
|
43
43
|
bumble/apps/ble_rpa_tool.py,sha256=ZQtsbfnLPd5qUAkEBPpNgJLRynBBc7q_9cDHKUW2SQ0,1701
|
|
44
44
|
bumble/apps/console.py,sha256=rwD9y3g8Mm_mAEvrcXjbtcv5d8mwF3yTbmE6Vet2BEk,45300
|
|
45
45
|
bumble/apps/controller_info.py,sha256=WScuK5Ytp5aFEosAcgRTCEeey6SmxDFmyB7KBhgVx6s,11759
|
|
@@ -48,16 +48,16 @@ bumble/apps/controllers.py,sha256=R6XJ1XpyuXlyqSCmI7PromVIcoYTcYfpmO-TqTYXnUI,23
|
|
|
48
48
|
bumble/apps/device_info.py,sha256=kQSO7F60cmUKw99LHfyly9s_ox2mD0dNGsgxCnKoFOQ,7999
|
|
49
49
|
bumble/apps/gatt_dump.py,sha256=wwA-NhRnbgUkbj-Ukym7NDG2j2n_36t_tn93dLDVdIg,4487
|
|
50
50
|
bumble/apps/gg_bridge.py,sha256=JdW5QT6xN9c2XDDJoHDRo5W3N_RdVkCtTmlcOsJhlx8,14693
|
|
51
|
-
bumble/apps/hci_bridge.py,sha256=
|
|
51
|
+
bumble/apps/hci_bridge.py,sha256=0mO36AO3ea0yrrTaYuySc7Un5NTuvVn08ItXvJql3CQ,4029
|
|
52
52
|
bumble/apps/l2cap_bridge.py,sha256=524VgEmgCP4g7T0UdgmsePmNVhDFRJECeaZ_uzKsbco,13062
|
|
53
53
|
bumble/apps/pair.py,sha256=NtDxLfdnlOY_ZEtVNGVXWjv6_x_hndok_ydhV6zkFtI,18503
|
|
54
54
|
bumble/apps/pandora_server.py,sha256=5qaoLCpcZE2KsGO21-7t6Vg4dBjBWbnyOQXwrLhxkuE,1397
|
|
55
|
-
bumble/apps/rfcomm_bridge.py,sha256=
|
|
55
|
+
bumble/apps/rfcomm_bridge.py,sha256=bAdDz84YpYkEfZ6vanQ_VUEpEF4MS4Y9fmbXB4bhoi4,17633
|
|
56
56
|
bumble/apps/scan.py,sha256=b6hIppiJqDfR7VFW2wl3-lkPdFvHLqYZKY8VjjNnhls,8366
|
|
57
57
|
bumble/apps/show.py,sha256=8w0-8jLtN6IM6_58pOHbEmE1Rmxm71O48ACrXixC2jk,6218
|
|
58
58
|
bumble/apps/unbond.py,sha256=LDPWpmgKLMGYDdIFGTdGciFDcUliZ0OmseEbGfJ-MAM,3176
|
|
59
59
|
bumble/apps/usb_probe.py,sha256=zJqrqKSGVYcOntXzgONdluZDE6jfj3IwPNuLqmDPDsU,10351
|
|
60
|
-
bumble/apps/lea_unicast/app.py,sha256=
|
|
60
|
+
bumble/apps/lea_unicast/app.py,sha256=3WnSApFcLzjpZXmU7kYlX54vApDpFEiF6exJFWbJkOI,21469
|
|
61
61
|
bumble/apps/lea_unicast/index.html,sha256=d1IHsYd8TGOnxNZKaHolf4Y-7VwT1kO9Z72vpGMdy3k,2354
|
|
62
62
|
bumble/apps/lea_unicast/liblc3.wasm,sha256=nYMzG9fP8_71K9dQfVI9QPQPkFRPHoqZEEExs1y6Oac,158603
|
|
63
63
|
bumble/apps/link_relay/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -77,16 +77,16 @@ bumble/drivers/rtk.py,sha256=nsfAqNzvxvAwbh6UYgxOCSNwgw7XouIBFA03FrLTs4M,22088
|
|
|
77
77
|
bumble/pandora/__init__.py,sha256=jaPtYCLfLeLUGj8-TmS3Gkv0l1_DBadYj8ZMAPLPAao,3463
|
|
78
78
|
bumble/pandora/config.py,sha256=KD85n3oRbuvD65sRah2H0gpxEW4YbD7HbYbsxdcpDDA,2388
|
|
79
79
|
bumble/pandora/device.py,sha256=LFqCWrgYkQWrFUSKArsAABXkge8sB2DhvaQoEsC4Jn0,5344
|
|
80
|
-
bumble/pandora/host.py,sha256=
|
|
80
|
+
bumble/pandora/host.py,sha256=PihXDb09a1IkV56MPNe4-5QRr54_Dp679pA4ldnLHlM,39235
|
|
81
81
|
bumble/pandora/l2cap.py,sha256=OT-pPprVAQr7xwjYnNwDQujayG2zWUS5FPXVBGNCW3o,11725
|
|
82
82
|
bumble/pandora/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
83
83
|
bumble/pandora/security.py,sha256=YErueKNLsnmcRe6dKo724Ht-buOqmZl2Gauswcc8FW0,21946
|
|
84
84
|
bumble/pandora/utils.py,sha256=Fq4glL0T5cJ2FODoDotmDNdYFOkTOR7DyyL8vkcxp20,3949
|
|
85
85
|
bumble/profiles/__init__.py,sha256=yBGC8Ti5LvZuoh1F42XtfrBilb39T77_yuxESZeX2yI,581
|
|
86
|
-
bumble/profiles/aics.py,sha256=
|
|
86
|
+
bumble/profiles/aics.py,sha256=2iXU3nFQ099zS13BsyRaq4-3PWiOaxCWfaWF8pa3C9g,18541
|
|
87
87
|
bumble/profiles/ascs.py,sha256=Y2_fd_5LOb9hon60LcQl3R-FoAIsOd_J37RZpveh-7c,25471
|
|
88
88
|
bumble/profiles/asha.py,sha256=QXUp7ImuMD48L0mpuNxPcIkv8VvoENynCuF2PEVqzFM,10373
|
|
89
|
-
bumble/profiles/bap.py,sha256=
|
|
89
|
+
bumble/profiles/bap.py,sha256=3fI8IB34l1CSzH0CwAD84qCxz_nV-SOP5q9VDzb3Aqk,21979
|
|
90
90
|
bumble/profiles/bass.py,sha256=Wiqum0Wsr5PpVzTAPDcyKLTfJoKXJUYOzqB320aSiUs,14950
|
|
91
91
|
bumble/profiles/battery_service.py,sha256=w-uF4jLoDozJOoykimb2RkrKjVyCke6ts2-h-F1PYyc,2292
|
|
92
92
|
bumble/profiles/cap.py,sha256=6gH7oOnUKjOggMPuB7rtbwj0AneoNmnWzQ_iR3io8e0,1945
|
|
@@ -109,7 +109,7 @@ bumble/tools/rtk_util.py,sha256=TwZhupHQrQYsYHLdRGyzXKd24pwCk8kkzqK1Rj2guco,5087
|
|
|
109
109
|
bumble/transport/__init__.py,sha256=Z01fvuKpqAbhJd0wYcGhW09W2tycM71ck80XoZ8a87Q,7012
|
|
110
110
|
bumble/transport/android_emulator.py,sha256=6HR2cEqdU0XbOldwxCtQuXtvwOUYhRfHkPz0TRt3mbo,4382
|
|
111
111
|
bumble/transport/android_netsim.py,sha256=P-keFdM9-iU_HQQYirYX-yEJtEM_gItzi9srNzWRQiI,17196
|
|
112
|
-
bumble/transport/common.py,sha256=
|
|
112
|
+
bumble/transport/common.py,sha256=caAHY0JqYmE91rrDFkTPX_FtUWtz4quqgQpMRSI9Jsc,16769
|
|
113
113
|
bumble/transport/file.py,sha256=eVM2V6Nk2nDAFdE7Rt01ZI3JdTovsH9OEU1gKYPJjpE,2010
|
|
114
114
|
bumble/transport/hci_socket.py,sha256=EdgWi3-O5yvYcH4R4BkPtG79pnUo7GQtXWawuUHDoDQ,6331
|
|
115
115
|
bumble/transport/pty.py,sha256=grTl-yvjMWHflNwuME4ccVqDbk6NIEgQMgH6Y9lf1fU,2732
|
|
@@ -165,9 +165,9 @@ bumble/vendor/android/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
|
165
165
|
bumble/vendor/android/hci.py,sha256=GZrkhaWmcMt1JpnRhv0NoySGkf2H4lNUV2f_omRZW0I,10741
|
|
166
166
|
bumble/vendor/zephyr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
167
167
|
bumble/vendor/zephyr/hci.py,sha256=d83bC0TvT947eN4roFjLkQefWtHOoNsr4xib2ctSkvA,3195
|
|
168
|
-
bumble-0.0.
|
|
169
|
-
bumble-0.0.
|
|
170
|
-
bumble-0.0.
|
|
171
|
-
bumble-0.0.
|
|
172
|
-
bumble-0.0.
|
|
173
|
-
bumble-0.0.
|
|
168
|
+
bumble-0.0.203.dist-info/LICENSE,sha256=FvaYh4NRWIGgS_OwoBs5gFgkCmAghZ-DYnIGBZPuw-s,12142
|
|
169
|
+
bumble-0.0.203.dist-info/METADATA,sha256=NgnILxtPNVp-DXsAjL6B2RjJoYFaw2jUoyUj4XC0ZaQ,5726
|
|
170
|
+
bumble-0.0.203.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
|
171
|
+
bumble-0.0.203.dist-info/entry_points.txt,sha256=2TAnDAHiYVEo9Gnugk29QIsHpCgRgnPqBszLSgIX2T0,984
|
|
172
|
+
bumble-0.0.203.dist-info/top_level.txt,sha256=tV6JJKaHPYMFiJYiBYFW24PCcfLxTJZdlu6BmH3Cb00,7
|
|
173
|
+
bumble-0.0.203.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|