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/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.to_bytes(),
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
- # Allowed default values.
409
- audio_channel_allocation = AudioLocation.NOT_ALLOWED
410
- codec_frames_per_sdu = 1
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 struct.pack(
439
- '<BBBBBBBBIBBHBBB',
440
- 2,
441
- CodecSpecificConfiguration.Type.SAMPLING_FREQUENCY,
442
- self.sampling_frequency,
443
- 2,
444
- CodecSpecificConfiguration.Type.FRAME_DURATION,
445
- self.frame_duration,
446
- 5,
447
- CodecSpecificConfiguration.Type.AUDIO_CHANNEL_ALLOCATION,
448
- self.audio_channel_allocation,
449
- 3,
450
- CodecSpecificConfiguration.Type.OCTETS_PER_FRAME,
451
- self.octets_per_codec_frame,
452
- 2,
453
- CodecSpecificConfiguration.Type.CODEC_FRAMES_PER_SDU,
454
- self.codec_frames_per_sdu,
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
- @dataclasses.dataclass
475
- class CodecInfo:
476
- coding_format: hci.CodecID
477
- company_id: int
478
- vendor_specific_codec_id: int
479
-
480
- @classmethod
481
- def from_bytes(cls, data: bytes) -> Self:
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: BasicAudioAnnouncement.CodecInfo
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 = cls.CodecInfo.from_bytes(data[offset : offset + 5])
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.to_bytes()
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.to_bytes()
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
- else:
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.to_bytes())
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
@@ -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.set_result(None)
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.set_exception(error)
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.201
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: prompt-toolkit>=3.0.16; platform_system != "Emscripten"
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>=12.0; platform_system != "Emscripten"
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: mypy==1.10.0; extra == "development"
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.0; extra == "development"
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=hc4syiO9GdDB7IANWoNKzXpgMbnaNzyfU3UJ-aEo69M,415
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=jFUcIDP3JYYdazWAVynGy0pcgNOzsldRzoBhhOkLCRI,32767
6
- bumble/avc.py,sha256=OZz5_DYenPeg2PcNM3dpgV5PUs4D7FBSNOcSqsuRJ2w,16329
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=XkYTQb2J5MhH_dGfnFkrLXdChFD2s1wSvqXaHQFeo48,59688
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=vroAnNWlBW6_jw1KgmoG4ZWKyauLm8abS1XFrTX084Y,195024
18
+ bumble/device.py,sha256=BuVejCWditUcMzTM1RBOC-mHdu9tNMOv0AyeCp_iX9E,194628
19
19
  bumble/gap.py,sha256=dRU2_TWvqTDx80hxeSbXlWIeWvptWH4_XbItG5y948Q,2138
20
- bumble/gatt.py,sha256=a07mQ3O0LFt5zgUzSUwa4Jak_FXOXSFX-njxnQNS_zY,39014
21
- bumble/gatt_client.py,sha256=gIpgNQj5WNm9RirXXT4vuXQZ4WK82IFMOqnfqBtoYRU,42809
22
- bumble/gatt_server.py,sha256=pafGMeAuGAAELnr_1pB_l3CcR5u4H4Y1-MRHjN53gdE,37449
23
- bumble/hci.py,sha256=e2JqP-D1h7b7vHxFbmdsLJtOacdiuMizzGgBWmCAhxQ,286058
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=h5IcgxKnlFWapeJHcNDTvxup9oAE5CcZju92sOusTGc,75619
25
+ bumble/hfp.py,sha256=UDqB-z5nEzLgRojJeC6TbFRaPXV3Ht0jvQV03ksyiLU,75749
26
26
  bumble/hid.py,sha256=hJKm6qhNa0kQTGmp_VxNh3-ywgBDdJpPPFcvtFiRL0A,20335
27
- bumble/host.py,sha256=pPH7HTQ6ogOToj4Y5Jl985MKjbVlG_jeOcJrV0NTSqU,49204
27
+ bumble/host.py,sha256=gLDLx71ibS9DkeoXvzMFesssaT4svGx7SjasVdCio5I,49196
28
28
  bumble/keys.py,sha256=WbIQ7Ob81mW75qmEPQ2rBLfnqBMA-ts2yowWXP9UaCY,12654
29
- bumble/l2cap.py,sha256=Bu6oTD3DzqLOKiarynT1cfQefNgR0gCJoKxnwQJl2_o,81398
30
- bumble/link.py,sha256=MYKsIKpbbAkh_ldxPZKu_GhS90ImC0IQtCAqbY4Ddg4,24034
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=aajRQybcMWh_Kc4IuQahix6bXnHg61OXl1gSdrSysl4,45465
36
- bumble/smp.py,sha256=FNLn-pt2n6CKNttQGJJDnfaeof2SVkxlapwySHWAVJY,77640
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=hrG6dW79UkMXqcMLgYjziWEjcVibFUITvjPb4LX1lxM,24686
42
- bumble/apps/bench.py,sha256=nPACg5gQWxJ-6phze12FVCv1_WS2UjrWR7OUWj0o8PU,56350
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=KISv352tKnsQsoxjkDiCQbMFmhnPWdnug5wSFAAXxEs,4033
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=PSszh4Qh1IsIw8ETs0fevOCAXEdVtqlgnV-ruzqGrZI,17215
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=7hK3s5I0vHneECo01UpVoP10LcEcMRIHjmO35lMhNwY,20659
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=LnEQ3DJAhmJVgHA7VyokvypQejsi2VcbauSFYn1a9Jk,39235
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=U0K03XqOKtqahXtq7U47WxftsAD7tkiDeUqxfaF4pwk,18540
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=wLnrbXso203rgw0WNa91qIdMdjuIoGc9VqOHc9Ey_b4,19421
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=bJWYH-vRJJl0nWwlAjGTHrRQFdZayKkH7YoGor5abH8,16659
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.201.dist-info/LICENSE,sha256=FvaYh4NRWIGgS_OwoBs5gFgkCmAghZ-DYnIGBZPuw-s,12142
169
- bumble-0.0.201.dist-info/METADATA,sha256=pyz0Jl2iwL7S-5PbYkfC-nfla3lyy7off2EAJhPVH18,5673
170
- bumble-0.0.201.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
171
- bumble-0.0.201.dist-info/entry_points.txt,sha256=2TAnDAHiYVEo9Gnugk29QIsHpCgRgnPqBszLSgIX2T0,984
172
- bumble-0.0.201.dist-info/top_level.txt,sha256=tV6JJKaHPYMFiJYiBYFW24PCcfLxTJZdlu6BmH3Cb00,7
173
- bumble-0.0.201.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.2.0)
2
+ Generator: setuptools (75.6.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5