bumble 0.0.216__tar.gz → 0.0.218__tar.gz
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-0.0.216 → bumble-0.0.218}/PKG-INFO +2 -2
- {bumble-0.0.216 → bumble-0.0.218}/README.md +1 -1
- {bumble-0.0.216 → bumble-0.0.218}/bumble/_version.py +3 -3
- {bumble-0.0.216 → bumble-0.0.218}/bumble/device.py +7 -12
- {bumble-0.0.216 → bumble-0.0.218}/bumble/drivers/__init__.py +4 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/drivers/intel.py +33 -7
- {bumble-0.0.216 → bumble-0.0.218}/bumble/hfp.py +4 -4
- {bumble-0.0.216 → bumble-0.0.218}/bumble/host.py +1 -1
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/hap.py +33 -4
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/__init__.py +6 -1
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/android_netsim.py +5 -1
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/serial.py +56 -2
- {bumble-0.0.216 → bumble-0.0.218}/bumble.egg-info/PKG-INFO +2 -2
- bumble-0.0.218/docs/mkdocs/src/transports/serial.md +21 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/device_test.py +28 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/hap_test.py +3 -1
- bumble-0.0.216/docs/mkdocs/src/transports/serial.md +0 -12
- {bumble-0.0.216 → bumble-0.0.218}/.devcontainer/devcontainer.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/.git-blame-ignore-revs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/.github/ci-gradle.properties +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/.github/workflows/code-check.yml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/.github/workflows/codeql-analysis.yml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/.github/workflows/gradle-btbench.yml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/.github/workflows/python-avatar.yml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/.github/workflows/python-build-test.yml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/.github/workflows/python-publish.yml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/.gitignore +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/.vscode/settings.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/CONTRIBUTING.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/LICENSE +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/README.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/__init__.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/auracast.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/bench.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/ble_rpa_tool.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/console.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/controller_info.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/controller_loopback.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/controllers.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/device_info.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/gatt_dump.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/gg_bridge.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/hci_bridge.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/l2cap_bridge.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/lea_unicast/app.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/lea_unicast/index.html +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/pair.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/pandora_server.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/player/player.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/rfcomm_bridge.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/scan.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/show.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/speaker/__init__.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/speaker/logo.svg +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/speaker/speaker.css +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/speaker/speaker.html +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/speaker/speaker.js +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/speaker/speaker.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/unbond.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/apps/usb_probe.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/__init__.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/a2dp.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/at.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/att.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/audio/__init__.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/audio/io.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/avc.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/avctp.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/avdtp.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/avrcp.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/bridge.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/codecs.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/colors.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/company_ids.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/controller.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/core.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/crypto/__init__.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/crypto/builtin.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/crypto/cryptography.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/data_types.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/decoder.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/drivers/common.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/drivers/rtk.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/gap.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/gatt.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/gatt_adapters.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/gatt_client.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/gatt_server.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/hci.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/helpers.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/hid.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/keys.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/l2cap.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/link.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/logging.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/pairing.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/pandora/__init__.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/pandora/config.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/pandora/device.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/pandora/host.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/pandora/l2cap.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/pandora/py.typed +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/pandora/security.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/pandora/utils.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/__init__.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/aics.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/ams.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/ancs.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/ascs.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/asha.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/bap.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/bass.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/battery_service.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/cap.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/csip.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/device_information_service.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/gap.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/gatt_service.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/gmap.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/heart_rate_service.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/le_audio.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/mcp.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/pacs.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/pbp.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/py.typed +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/tmap.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/vcs.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/vocs.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/py.typed +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/rfcomm.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/rtp.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/sdp.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/smp.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/snoop.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/android_emulator.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/common.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/file.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/__init__.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_device_pb2.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_device_pb2.pyi +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_device_pb2_grpc.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_packets_pb2.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_packets_pb2.pyi +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_packets_pb2_grpc.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_pb2.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_pb2.pyi +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_pb2_grpc.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_vhci_pb2.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_vhci_pb2.pyi +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_vhci_pb2_grpc.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/grpc_endpoint_description_pb2.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/grpc_endpoint_description_pb2.pyi +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/grpc_endpoint_description_pb2_grpc.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/__init__.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/common_pb2.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/common_pb2.pyi +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/common_pb2_grpc.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/hci_packet_pb2.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/hci_packet_pb2.pyi +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/hci_packet_pb2_grpc.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/model_pb2.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/model_pb2.pyi +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/model_pb2_grpc.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/packet_streamer_pb2.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/packet_streamer_pb2.pyi +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/packet_streamer_pb2_grpc.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/startup_pb2.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/startup_pb2.pyi +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/startup_pb2_grpc.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/rootcanal/__init__.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/rootcanal/configuration_pb2.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/rootcanal/configuration_pb2.pyi +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/rootcanal/configuration_pb2_grpc.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/hci_socket.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/pty.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/py.typed +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/pyusb.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/tcp_client.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/tcp_server.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/udp.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/unix.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/usb.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/vhci.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/ws_client.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/ws_server.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/utils.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/vendor/__init__.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/vendor/android/__init__.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/vendor/android/hci.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/vendor/zephyr/__init__.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble/vendor/zephyr/hci.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble.egg-info/SOURCES.txt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble.egg-info/dependency_links.txt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble.egg-info/entry_points.txt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble.egg-info/requires.txt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/bumble.egg-info/top_level.txt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/README.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/images/favicon.ico +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo.png +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo.svg +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo.vectornator/Artboard0.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo.vectornator/Document.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo.vectornator/Manifest.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo.vectornator/Thumbnail.png +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo.vectornator/UndoHistory.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo_framed.png +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo_framed.svg +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo_framed.vectornator/Artboard0.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo_framed.vectornator/Document.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo_framed.vectornator/Manifest.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo_framed.vectornator/Thumbnail.png +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo_framed.vectornator/UndoHistory.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/mkdocs.yml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/requirements.txt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/api/examples.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/api/guide.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/api/reference.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/auracast.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/bench.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/console.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/gatt_dump.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/gg_bridge.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/hci_bridge.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/index.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/pair.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/show.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/speaker.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/unbond.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/usb_probe.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/components/controller.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/components/gatt.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/components/host.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/components/security_manager.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/development/code_style.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/development/contributing.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/development/python_environments.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/downloads/zephyr/hci_usb.zip +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/drivers/index.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/drivers/intel.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/drivers/realtek.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/examples/index.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/extras/android_bt_bench.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/extras/android_remote_hci.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/extras/index.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/getting_started.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hardware/index.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/index.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/index.toml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/bumble.js +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/heart_rate_monitor/heart_rate_monitor.html +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/heart_rate_monitor/heart_rate_monitor.js +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/heart_rate_monitor/heart_rate_monitor.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/scanner/scanner.css +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/scanner/scanner.html +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/scanner/scanner.js +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/scanner/scanner.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/speaker/logo.svg +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/speaker/speaker.css +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/speaker/speaker.html +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/speaker/speaker.js +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/speaker/speaker.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/ui.js +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/images/bumble_layers.svg +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/images/console_screenshot.png +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/images/favicon.ico +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/images/logo.png +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/images/logo_framed.png +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/images/speaker_screenshot.png +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/index.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/platforms/android.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/platforms/index.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/platforms/linux.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/platforms/macos.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/platforms/windows.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/platforms/winusb_driver.png +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/platforms/zephyr.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/android_emulator.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/file.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/hci_socket.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/index.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/pty.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/tcp_client.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/tcp_server.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/udp.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/usb.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/vhci.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/ws_client.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/ws_server.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/use_cases/index.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/use_cases/use_case_1.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/use_cases/use_case_2.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/use_cases/use_case_3.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/use_cases/use_case_4.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/use_cases/use_case_5.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/use_cases/use_case_6.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/theme/partials/footer.html +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/environment.yml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/README.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/a2dp_sink1.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/asha_sink.html +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/asha_sink1.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/asha_sink2.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/async_runner.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/avrcp_as_sink.html +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/battery_client.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/battery_server.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/classic1.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/classic2.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/cs_initiator.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/cs_reflector.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/device1.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/device2.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/device3.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/device_information_client.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/device_information_server.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/device_with_rpa.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/heart_rate_client.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/heart_rate_server.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/hfp_gateway.html +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/hfp_gateway.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/hfp_handsfree.html +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/hfp_handsfree.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/hid_key_map.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/hid_keyboard.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/hid_report_parser.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/keyboard.html +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/keyboard.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/keyboard.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/leaudio.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/leaudio_with_classic.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/mcp_server.html +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/mobly/bench/one_device_bench_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/mobly/bench/sample_config.yml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/mobly/bench/two_devices_bench_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_a2dp_info.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_a2dp_sink.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_a2dp_source.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_advertiser.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_ams_client.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_ancs_client.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_asha_sink.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_avrcp.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_channel_sounding.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_cig_setup.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_classic_connect.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_classic_discoverable.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_classic_discovery.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_connect_and_encrypt.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_controller.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_controller_with_scanner.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_csis_servers.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_device_with_snooper.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_esco_connection.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_extended_advertiser.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_extended_advertiser_2.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_gatt_client.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_gatt_client_and_server.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_gatt_server.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_gatt_server_with_pairing_delegate.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_gatt_with_adapters.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_hap_server.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_hfp_gateway.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_hfp_handsfree.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_hid_device.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_hid_host.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_mcp_client.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_notifier.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_rfcomm_client.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_rfcomm_server.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_scanner.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_unicast_server.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/run_vcp_renderer.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/speaker.json +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/examples/vcp_renderer.html +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/.gitignore +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/.gitignore +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/build.gradle.kts +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/proguard-rules.pro +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/AndroidManifest.xml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/ic_launcher-playstore.png +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Advertiser.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/AutomationSnippet.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Connection.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Gatt.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/GattClient.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/GattServer.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/IoClient.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/L2capClient.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/L2capServer.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/MainActivity.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Mode.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Model.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Packet.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Pinger.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Ponger.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Receiver.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/RfcommClient.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/RfcommServer.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Scan.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Sender.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/SocketClient.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/SocketServer.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/ui/theme/Color.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/ui/theme/Theme.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/ui/theme/Type.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/drawable/ic_launcher_background.xml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/drawable/ic_launcher_foreground.xml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/values/colors.xml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/values/ic_launcher_background.xml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/values/strings.xml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/values/themes.xml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/xml/backup_rules.xml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/xml/data_extraction_rules.xml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/build.gradle.kts +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/gradle/libs.versions.toml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/gradle/wrapper/gradle-wrapper.jar +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/gradle/wrapper/gradle-wrapper.properties +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/gradle.properties +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/gradlew +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/gradlew.bat +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/settings.gradle.kts +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/.gitignore +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/.gitignore +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/build.gradle.kts +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/proguard-rules.pro +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/AndroidManifest.xml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/aidl/android/hardware/bluetooth/IBluetoothHci.aidl +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/aidl/android/hardware/bluetooth/IBluetoothHciCallbacks.aidl +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/aidl/android/hardware/bluetooth/Status.aidl +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/hidl/bluetooth/1.1/IBluetoothHci.hal +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/hidl/bluetooth/1.1/IBluetoothHciCallbacks.hal +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/ic_launcher-playstore.png +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/IBluetoothHci.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/IBluetoothHciCallbacks.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/Status.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_0/IBluetoothHci.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_0/IBluetoothHciCallbacks.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_0/Status.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_1/IBluetoothHci.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_1/IBluetoothHciCallbacks.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/CommandLineInterface.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciHal.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciHalCallback.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciPacket.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciParser.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciProxy.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciServer.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/MainActivity.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/ui/theme/Color.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/ui/theme/Theme.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/ui/theme/Type.kt +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/values/colors.xml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/values/ic_launcher_background.xml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/values/strings.xml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/values/themes.xml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/xml/backup_rules.xml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/xml/data_extraction_rules.xml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/build.gradle.kts +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/gradle/libs.versions.toml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/gradle/wrapper/gradle-wrapper.jar +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/gradle/wrapper/gradle-wrapper.properties +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/gradle.properties +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/gradlew +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/gradlew.bat +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/.gitignore +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/build.gradle.kts +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/consumer-rules.pro +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/proguard-rules.pro +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/AndroidManifest.xml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/java/android/internal/hidl/base/V1_0/DebugInfo.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/java/android/internal/hidl/base/V1_0/IBase.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/java/android/os/HidlSupport.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/java/android/os/HwBinder.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/java/android/os/HwBlob.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/java/android/os/HwParcel.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/java/android/os/IHwBinder.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/java/android/os/IHwInterface.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/java/android/os/NativeHandle.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/java/android/os/ServiceManager.java +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/scripts/generate_java_from_aidl.sh +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/settings.gradle.kts +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/noxfile.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/pyproject.toml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/.gitignore +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/CHANGELOG.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/Cargo.lock +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/Cargo.toml +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/README.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/examples/battery_client.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/examples/broadcast.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/examples/scanner.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/pytests/assigned_numbers.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/pytests/pytests.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/pytests/wrapper/drivers.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/pytests/wrapper/hci.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/pytests/wrapper/mod.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/pytests/wrapper/transport.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/resources/test/firmware/realtek/README.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/resources/test/firmware/realtek/rtl8723b_fw_structure.bin +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/resources/test/firmware/realtek/rtl8761bu_fw_structure.bin +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/adv.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/cli/firmware/mod.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/cli/firmware/rtk.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/cli/l2cap/client_bridge.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/cli/l2cap/mod.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/cli/l2cap/server_bridge.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/cli/mod.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/cli/usb/mod.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/internal/drivers/mod.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/internal/drivers/rtk.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/internal/hci/mod.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/internal/hci/packets.pdl +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/internal/hci/tests.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/internal/mod.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/lib.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/main.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/assigned_numbers/company_ids.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/assigned_numbers/mod.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/assigned_numbers/services.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/common.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/controller.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/core.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/device/mod.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/device/tests.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/drivers/mod.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/drivers/rtk.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/gatt_client.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/hci.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/host.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/l2cap.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/link.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/logging.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/mod.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/profile.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/transport.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/tools/file_header.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/rust/tools/gen_assigned_numbers.rs +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/scripts/process_android_emulator_protos.sh +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/scripts/process_android_netsim_protos.sh +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/setup.cfg +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tasks.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/__init__.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/a2dp_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/aics_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/asha_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/at_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/avdtp_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/avrcp_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/bap_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/bass_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/cap_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/codecs_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/core_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/csip_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/decoder_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/g722_sample.g722 +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/gatt_service_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/gatt_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/gmap_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/hci_data_001.bin +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/hci_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/hfp_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/host_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/import_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/keystore_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/l2cap_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/le_audio_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/mcp_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/pytest.ini +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/rfcomm_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/sdp_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/self_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/smp_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/test_utils.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/transport_tcp_server_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/transport_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/utils_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/vcp_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tests/vocs_test.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tools/__init__.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tools/generate_company_id_list.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tools/intel_fw_download.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tools/intel_util.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tools/rtk_fw_download.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/tools/rtk_util.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/web/.gitignore +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/web/README.md +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/web/bumble.js +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/web/favicon.ico +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/web/heart_rate_monitor/heart_rate_monitor.html +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/web/heart_rate_monitor/heart_rate_monitor.js +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/web/heart_rate_monitor/heart_rate_monitor.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/web/scanner/scanner.css +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/web/scanner/scanner.html +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/web/scanner/scanner.js +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/web/scanner/scanner.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/web/speaker/logo.svg +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/web/speaker/speaker.css +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/web/speaker/speaker.html +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/web/speaker/speaker.js +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/web/speaker/speaker.py +0 -0
- {bumble-0.0.216 → bumble-0.0.218}/web/ui.js +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bumble
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.218
|
|
4
4
|
Summary: Bluetooth Stack for Apps, Emulation, Test and Experimentation
|
|
5
5
|
Author-email: Google <bumble-dev@google.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -113,7 +113,7 @@ Bumble is easiest to use with a dedicated USB dongle.
|
|
|
113
113
|
This is because internal Bluetooth interfaces tend to be locked down by the operating system.
|
|
114
114
|
You can use the [usb_probe](/docs/mkdocs/src/apps_and_tools/usb_probe.md) tool (all platforms) or `lsusb` (Linux or macOS) to list the available USB devices on your system.
|
|
115
115
|
|
|
116
|
-
See the [USB Transport](/docs/mkdocs/src/transports/usb.md) page for details on how to refer to USB devices. Also, if
|
|
116
|
+
See the [USB Transport](/docs/mkdocs/src/transports/usb.md) page for details on how to refer to USB devices. Also, if you are on a mac, see [these instructions](docs/mkdocs/src/platforms/macos.md).
|
|
117
117
|
|
|
118
118
|
## License
|
|
119
119
|
|
|
@@ -50,7 +50,7 @@ Bumble is easiest to use with a dedicated USB dongle.
|
|
|
50
50
|
This is because internal Bluetooth interfaces tend to be locked down by the operating system.
|
|
51
51
|
You can use the [usb_probe](/docs/mkdocs/src/apps_and_tools/usb_probe.md) tool (all platforms) or `lsusb` (Linux or macOS) to list the available USB devices on your system.
|
|
52
52
|
|
|
53
|
-
See the [USB Transport](/docs/mkdocs/src/transports/usb.md) page for details on how to refer to USB devices. Also, if
|
|
53
|
+
See the [USB Transport](/docs/mkdocs/src/transports/usb.md) page for details on how to refer to USB devices. Also, if you are on a mac, see [these instructions](docs/mkdocs/src/platforms/macos.md).
|
|
54
54
|
|
|
55
55
|
## License
|
|
56
56
|
|
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.0.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 0,
|
|
31
|
+
__version__ = version = '0.0.218'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 0, 218)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'g88ef65a4e'
|
|
@@ -2171,7 +2171,7 @@ def with_connection_from_address(function):
|
|
|
2171
2171
|
@functools.wraps(function)
|
|
2172
2172
|
def wrapper(device: Device, address: hci.Address, *args, **kwargs):
|
|
2173
2173
|
if connection := device.pending_connections.get(address):
|
|
2174
|
-
return function(device, connection,
|
|
2174
|
+
return function(device, connection, *args, **kwargs)
|
|
2175
2175
|
for connection in device.connections.values():
|
|
2176
2176
|
if connection.peer_address == address:
|
|
2177
2177
|
return function(device, connection, *args, **kwargs)
|
|
@@ -2263,8 +2263,6 @@ class Device(utils.CompositeEventEmitter):
|
|
|
2263
2263
|
EVENT_CONNECTION_FAILURE = "connection_failure"
|
|
2264
2264
|
EVENT_SCO_REQUEST = "sco_request"
|
|
2265
2265
|
EVENT_INQUIRY_COMPLETE = "inquiry_complete"
|
|
2266
|
-
EVENT_REMOTE_NAME = "remote_name"
|
|
2267
|
-
EVENT_REMOTE_NAME_FAILURE = "remote_name_failure"
|
|
2268
2266
|
EVENT_SCO_CONNECTION = "sco_connection"
|
|
2269
2267
|
EVENT_SCO_CONNECTION_FAILURE = "sco_connection_failure"
|
|
2270
2268
|
EVENT_CIS_REQUEST = "cis_request"
|
|
@@ -4727,7 +4725,7 @@ class Device(utils.CompositeEventEmitter):
|
|
|
4727
4725
|
self, cis_acl_pairs: Sequence[tuple[int, Connection]]
|
|
4728
4726
|
) -> list[CisLink]:
|
|
4729
4727
|
for cis_handle, acl_connection in cis_acl_pairs:
|
|
4730
|
-
cis_id, cig_id = self._pending_cis
|
|
4728
|
+
cis_id, cig_id = self._pending_cis[cis_handle]
|
|
4731
4729
|
self.cis_links[cis_handle] = CisLink(
|
|
4732
4730
|
device=self,
|
|
4733
4731
|
acl_connection=acl_connection,
|
|
@@ -4743,6 +4741,7 @@ class Device(utils.CompositeEventEmitter):
|
|
|
4743
4741
|
}
|
|
4744
4742
|
|
|
4745
4743
|
def on_cis_establishment(cis_link: CisLink) -> None:
|
|
4744
|
+
self._pending_cis.pop(cis_link.handle)
|
|
4746
4745
|
if pending_future := pending_cis_establishments.get(cis_link.handle):
|
|
4747
4746
|
pending_future.set_result(cis_link)
|
|
4748
4747
|
|
|
@@ -6443,18 +6442,14 @@ class Device(utils.CompositeEventEmitter):
|
|
|
6443
6442
|
|
|
6444
6443
|
# [Classic only]
|
|
6445
6444
|
@host_event_handler
|
|
6446
|
-
@
|
|
6445
|
+
@with_connection_from_address
|
|
6447
6446
|
def on_role_change(
|
|
6448
6447
|
self,
|
|
6449
|
-
connection:
|
|
6450
|
-
peer_address: hci.Address,
|
|
6448
|
+
connection: Connection,
|
|
6451
6449
|
new_role: hci.Role,
|
|
6452
6450
|
):
|
|
6453
|
-
|
|
6454
|
-
|
|
6455
|
-
connection.emit(connection.EVENT_ROLE_CHANGE, new_role)
|
|
6456
|
-
else:
|
|
6457
|
-
logger.warning("Role change to unknown connection %s", peer_address)
|
|
6451
|
+
connection.role = new_role
|
|
6452
|
+
connection.emit(connection.EVENT_ROLE_CHANGE, new_role)
|
|
6458
6453
|
|
|
6459
6454
|
# [Classic only]
|
|
6460
6455
|
@host_event_handler
|
|
@@ -49,6 +49,10 @@ async def get_driver_for_host(host: Host) -> Optional[Driver]:
|
|
|
49
49
|
driver_classes: dict[str, type[Driver]] = {"rtk": rtk.Driver, "intel": intel.Driver}
|
|
50
50
|
probe_list: Iterable[str]
|
|
51
51
|
if driver_name := host.hci_metadata.get("driver"):
|
|
52
|
+
# The "driver" metadata may include runtime options after a '/' (for example
|
|
53
|
+
# "intel/ddc=..."). Keep only the base driver name (the portion before the
|
|
54
|
+
# first slash) so it matches a key in driver_classes (e.g. "intel").
|
|
55
|
+
driver_name = driver_name.split("/")[0]
|
|
52
56
|
# Only probe a single driver
|
|
53
57
|
probe_list = [driver_name]
|
|
54
58
|
else:
|
|
@@ -459,6 +459,10 @@ class Driver(common.Driver):
|
|
|
459
459
|
== ModeOfOperation.OPERATIONAL
|
|
460
460
|
):
|
|
461
461
|
logger.debug("firmware already loaded")
|
|
462
|
+
# If the firmeare is already loaded, still attempt to load any
|
|
463
|
+
# device configuration (DDC). DDC can be applied independently of a
|
|
464
|
+
# firmware reload and may contain runtime overrides or patches.
|
|
465
|
+
await self.load_ddc_if_any()
|
|
462
466
|
return
|
|
463
467
|
|
|
464
468
|
# We only support some platforms and variants.
|
|
@@ -598,17 +602,39 @@ class Driver(common.Driver):
|
|
|
598
602
|
await self.reset_complete.wait()
|
|
599
603
|
logger.debug("reset complete")
|
|
600
604
|
|
|
601
|
-
|
|
605
|
+
await self.load_ddc_if_any(firmware_base_name)
|
|
606
|
+
|
|
607
|
+
async def load_ddc_if_any(self, firmware_base_name: Optional[str] = None) -> None:
|
|
608
|
+
"""
|
|
609
|
+
Check for and load any Device Data Configuration (DDC) blobs.
|
|
610
|
+
|
|
611
|
+
Args:
|
|
612
|
+
firmware_base_name: Base name of the selected firmware (e.g. "ibt-XXXX-YYYY").
|
|
613
|
+
If None, don't attempt to look up a .ddc file that
|
|
614
|
+
corresponds to the firmware image.
|
|
615
|
+
Priority:
|
|
616
|
+
1. If a ddc_override was provided via driver metadata, use it (highest priority).
|
|
617
|
+
2. Otherwise, if firmware_base_name is provided, attempt to find a .ddc file
|
|
618
|
+
that corresponds to the selected firmware image.
|
|
619
|
+
3. Finally, if a ddc_addon was provided, append/load it after the primary DDC.
|
|
620
|
+
"""
|
|
621
|
+
# If an explicit DDC override was supplied, use it and skip file lookup.
|
|
602
622
|
if self.ddc_override:
|
|
603
623
|
logger.debug("loading overridden DDC")
|
|
604
624
|
await self.load_device_config(self.ddc_override)
|
|
605
625
|
else:
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
626
|
+
# Only attempt .ddc file lookup if a firmware_base_name was provided.
|
|
627
|
+
if firmware_base_name is None:
|
|
628
|
+
logger.debug(
|
|
629
|
+
"no firmware_base_name provided; skipping .ddc file lookup"
|
|
630
|
+
)
|
|
631
|
+
else:
|
|
632
|
+
ddc_name = f"{firmware_base_name}.ddc"
|
|
633
|
+
ddc_path = _find_binary_path(ddc_name)
|
|
634
|
+
if ddc_path:
|
|
635
|
+
logger.debug(f"loading DDC from {ddc_path}")
|
|
636
|
+
ddc_data = ddc_path.read_bytes()
|
|
637
|
+
await self.load_device_config(ddc_data)
|
|
612
638
|
if self.ddc_addon:
|
|
613
639
|
logger.debug("loading DDC addon")
|
|
614
640
|
await self.load_device_config(self.ddc_addon)
|
|
@@ -489,9 +489,9 @@ STATUS_CODES = {
|
|
|
489
489
|
|
|
490
490
|
@dataclasses.dataclass
|
|
491
491
|
class HfConfiguration:
|
|
492
|
-
supported_hf_features:
|
|
493
|
-
supported_hf_indicators:
|
|
494
|
-
supported_audio_codecs:
|
|
492
|
+
supported_hf_features: collections.abc.Sequence[HfFeature]
|
|
493
|
+
supported_hf_indicators: collections.abc.Sequence[HfIndicator]
|
|
494
|
+
supported_audio_codecs: collections.abc.Sequence[AudioCodec]
|
|
495
495
|
|
|
496
496
|
|
|
497
497
|
@dataclasses.dataclass
|
|
@@ -753,7 +753,7 @@ class HfProtocol(utils.EventEmitter):
|
|
|
753
753
|
|
|
754
754
|
# Build local features.
|
|
755
755
|
self.supported_hf_features = sum(configuration.supported_hf_features)
|
|
756
|
-
self.supported_audio_codecs = configuration.supported_audio_codecs
|
|
756
|
+
self.supported_audio_codecs = list(configuration.supported_audio_codecs)
|
|
757
757
|
|
|
758
758
|
self.hf_indicators = {
|
|
759
759
|
indicator: HfIndicatorState(indicator=indicator)
|
|
@@ -550,7 +550,7 @@ class Host(utils.EventEmitter):
|
|
|
550
550
|
logger.debug(
|
|
551
551
|
'HCI LE flow control: '
|
|
552
552
|
f'le_acl_data_packet_length={le_acl_data_packet_length},'
|
|
553
|
-
f'total_num_le_acl_data_packets={total_num_le_acl_data_packets}'
|
|
553
|
+
f'total_num_le_acl_data_packets={total_num_le_acl_data_packets},'
|
|
554
554
|
f'iso_data_packet_length={iso_data_packet_length},'
|
|
555
555
|
f'total_num_iso_data_packets={total_num_iso_data_packets}'
|
|
556
556
|
)
|
|
@@ -273,12 +273,19 @@ class HearingAccessService(gatt.TemplateService):
|
|
|
273
273
|
def on_disconnection(_reason) -> None:
|
|
274
274
|
self.currently_connected_clients.discard(connection)
|
|
275
275
|
|
|
276
|
+
@connection.on(connection.EVENT_CONNECTION_ATT_MTU_UPDATE)
|
|
277
|
+
def on_mtu_update(*_: Any) -> None:
|
|
278
|
+
self.on_incoming_connection(connection)
|
|
279
|
+
|
|
280
|
+
@connection.on(connection.EVENT_CONNECTION_ENCRYPTION_CHANGE)
|
|
281
|
+
def on_encryption_change(*_: Any) -> None:
|
|
282
|
+
self.on_incoming_connection(connection)
|
|
283
|
+
|
|
276
284
|
@connection.on(connection.EVENT_PAIRING)
|
|
277
285
|
def on_pairing(*_: Any) -> None:
|
|
278
|
-
self.
|
|
286
|
+
self.on_incoming_connection(connection)
|
|
279
287
|
|
|
280
|
-
|
|
281
|
-
self.on_incoming_paired_connection(connection)
|
|
288
|
+
self.on_incoming_connection(connection)
|
|
282
289
|
|
|
283
290
|
self.hearing_aid_features_characteristic = gatt.Characteristic(
|
|
284
291
|
uuid=gatt.GATT_HEARING_AID_FEATURES_CHARACTERISTIC,
|
|
@@ -315,9 +322,30 @@ class HearingAccessService(gatt.TemplateService):
|
|
|
315
322
|
]
|
|
316
323
|
)
|
|
317
324
|
|
|
318
|
-
def
|
|
325
|
+
def on_incoming_connection(self, connection: Connection):
|
|
319
326
|
'''Setup initial operations to handle a remote bonded HAP device'''
|
|
320
327
|
# TODO Should we filter on HAP device only ?
|
|
328
|
+
|
|
329
|
+
if not connection.is_encrypted:
|
|
330
|
+
logging.debug(f'HAS: {connection.peer_address} is not encrypted')
|
|
331
|
+
return
|
|
332
|
+
|
|
333
|
+
if not connection.peer_resolvable_address:
|
|
334
|
+
logging.debug(f'HAS: {connection.peer_address} is not paired')
|
|
335
|
+
return
|
|
336
|
+
|
|
337
|
+
if connection.att_mtu < 49:
|
|
338
|
+
logging.debug(
|
|
339
|
+
f'HAS: {connection.peer_address} invalid MTU={connection.att_mtu}'
|
|
340
|
+
)
|
|
341
|
+
return
|
|
342
|
+
|
|
343
|
+
if connection.peer_address in self.currently_connected_clients:
|
|
344
|
+
logging.debug(
|
|
345
|
+
f'HAS: Already connected to {connection.peer_address} nothing to do'
|
|
346
|
+
)
|
|
347
|
+
return
|
|
348
|
+
|
|
321
349
|
self.currently_connected_clients.add(connection)
|
|
322
350
|
if (
|
|
323
351
|
connection.peer_address
|
|
@@ -457,6 +485,7 @@ class HearingAccessService(gatt.TemplateService):
|
|
|
457
485
|
connection,
|
|
458
486
|
self.hearing_aid_preset_control_point,
|
|
459
487
|
value=op_list[0].to_bytes(len(op_list) == 1),
|
|
488
|
+
force=True, # TODO GATT notification subscription should be persistent
|
|
460
489
|
)
|
|
461
490
|
# Remove item once sent, and keep the non sent item in the list
|
|
462
491
|
op_list.pop(0)
|
|
@@ -84,7 +84,12 @@ async def open_transport(name: str) -> Transport:
|
|
|
84
84
|
scheme, *tail = name.split(':', 1)
|
|
85
85
|
spec = tail[0] if tail else None
|
|
86
86
|
metadata = None
|
|
87
|
-
|
|
87
|
+
# If a spec is provided, check for a metadata section in square brackets.
|
|
88
|
+
# The regex captures a comma-separated list of key=value pairs (allowing an
|
|
89
|
+
# optional trailing comma). The key is matched by \w+ and the value by [^,\]]+,
|
|
90
|
+
# meaning the value may contain any character except a comma or a closing
|
|
91
|
+
# bracket (']').
|
|
92
|
+
if spec and (m := re.search(r'\[(\w+=[^,\]]+(?:,\w+=[^,\]]+)*,?)\]', spec)):
|
|
88
93
|
metadata_str = m.group(1)
|
|
89
94
|
if m.start() == 0:
|
|
90
95
|
# <metadata><spec>
|
|
@@ -131,7 +131,11 @@ def publish_grpc_port(grpc_port: int, instance_number: int) -> bool:
|
|
|
131
131
|
|
|
132
132
|
def cleanup():
|
|
133
133
|
logger.debug("removing .ini file")
|
|
134
|
-
|
|
134
|
+
try:
|
|
135
|
+
ini_file.unlink()
|
|
136
|
+
except OSError as error:
|
|
137
|
+
# Don't log at exception level, since this may happen normally.
|
|
138
|
+
logger.debug(f'failed to remove .ini file ({error})')
|
|
135
139
|
|
|
136
140
|
atexit.register(cleanup)
|
|
137
141
|
return True
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
# -----------------------------------------------------------------------------
|
|
18
18
|
import asyncio
|
|
19
19
|
import logging
|
|
20
|
+
from typing import Optional
|
|
20
21
|
|
|
21
22
|
import serial_asyncio
|
|
22
23
|
|
|
@@ -28,25 +29,56 @@ from bumble.transport.common import StreamPacketSink, StreamPacketSource, Transp
|
|
|
28
29
|
logger = logging.getLogger(__name__)
|
|
29
30
|
|
|
30
31
|
|
|
32
|
+
# -----------------------------------------------------------------------------
|
|
33
|
+
# Constants
|
|
34
|
+
# -----------------------------------------------------------------------------
|
|
35
|
+
DEFAULT_POST_OPEN_DELAY = 0.5 # in seconds
|
|
36
|
+
|
|
37
|
+
# -----------------------------------------------------------------------------
|
|
38
|
+
# Classes and Functions
|
|
39
|
+
# -----------------------------------------------------------------------------
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
# -----------------------------------------------------------------------------
|
|
43
|
+
class SerialPacketSource(StreamPacketSource):
|
|
44
|
+
def __init__(self) -> None:
|
|
45
|
+
super().__init__()
|
|
46
|
+
self._ready = asyncio.Event()
|
|
47
|
+
|
|
48
|
+
async def wait_until_ready(self) -> None:
|
|
49
|
+
await self._ready.wait()
|
|
50
|
+
|
|
51
|
+
def connection_made(self, transport: asyncio.BaseTransport) -> None:
|
|
52
|
+
logger.debug('connection made')
|
|
53
|
+
self._ready.set()
|
|
54
|
+
|
|
55
|
+
def connection_lost(self, exc: Optional[Exception]) -> None:
|
|
56
|
+
logger.debug('connection lost')
|
|
57
|
+
self.on_transport_lost()
|
|
58
|
+
|
|
59
|
+
|
|
31
60
|
# -----------------------------------------------------------------------------
|
|
32
61
|
async def open_serial_transport(spec: str) -> Transport:
|
|
33
62
|
'''
|
|
34
63
|
Open a serial port transport.
|
|
35
64
|
The parameter string has this syntax:
|
|
36
|
-
<device-path>[,<speed>][,rtscts][,dsrdtr]
|
|
65
|
+
<device-path>[,<speed>][,rtscts][,dsrdtr][,delay]
|
|
37
66
|
When <speed> is omitted, the default value of 1000000 is used
|
|
38
67
|
When "rtscts" is specified, RTS/CTS hardware flow control is enabled
|
|
39
68
|
When "dsrdtr" is specified, DSR/DTR hardware flow control is enabled
|
|
69
|
+
When "delay" is specified, a short delay is added after opening the port
|
|
40
70
|
|
|
41
71
|
Examples:
|
|
42
72
|
/dev/tty.usbmodem0006839912172
|
|
43
73
|
/dev/tty.usbmodem0006839912172,1000000
|
|
44
74
|
/dev/tty.usbmodem0006839912172,rtscts
|
|
75
|
+
/dev/tty.usbmodem0006839912172,rtscts,delay
|
|
45
76
|
'''
|
|
46
77
|
|
|
47
78
|
speed = 1000000
|
|
48
79
|
rtscts = False
|
|
49
80
|
dsrdtr = False
|
|
81
|
+
delay = 0.0
|
|
50
82
|
if ',' in spec:
|
|
51
83
|
parts = spec.split(',')
|
|
52
84
|
device = parts[0]
|
|
@@ -55,13 +87,16 @@ async def open_serial_transport(spec: str) -> Transport:
|
|
|
55
87
|
rtscts = True
|
|
56
88
|
elif part == 'dsrdtr':
|
|
57
89
|
dsrdtr = True
|
|
90
|
+
elif part == 'delay':
|
|
91
|
+
delay = DEFAULT_POST_OPEN_DELAY
|
|
58
92
|
elif part.isnumeric():
|
|
59
93
|
speed = int(part)
|
|
60
94
|
else:
|
|
61
95
|
device = spec
|
|
96
|
+
|
|
62
97
|
serial_transport, packet_source = await serial_asyncio.create_serial_connection(
|
|
63
98
|
asyncio.get_running_loop(),
|
|
64
|
-
|
|
99
|
+
SerialPacketSource,
|
|
65
100
|
device,
|
|
66
101
|
baudrate=speed,
|
|
67
102
|
rtscts=rtscts,
|
|
@@ -69,4 +104,23 @@ async def open_serial_transport(spec: str) -> Transport:
|
|
|
69
104
|
)
|
|
70
105
|
packet_sink = StreamPacketSink(serial_transport)
|
|
71
106
|
|
|
107
|
+
logger.debug('waiting for the port to be ready')
|
|
108
|
+
await packet_source.wait_until_ready()
|
|
109
|
+
logger.debug('port is ready')
|
|
110
|
+
|
|
111
|
+
# Try to assert DTR
|
|
112
|
+
assert serial_transport.serial is not None
|
|
113
|
+
try:
|
|
114
|
+
serial_transport.serial.dtr = True
|
|
115
|
+
logger.debug(
|
|
116
|
+
f"DSR={serial_transport.serial.dsr}, DTR={serial_transport.serial.dtr}"
|
|
117
|
+
)
|
|
118
|
+
except Exception as e:
|
|
119
|
+
logger.warning(f'could not assert DTR: {e}')
|
|
120
|
+
|
|
121
|
+
# Wait a bit after opening the port, if requested
|
|
122
|
+
if delay > 0.0:
|
|
123
|
+
logger.debug(f'waiting {delay} seconds after opening the port')
|
|
124
|
+
await asyncio.sleep(delay)
|
|
125
|
+
|
|
72
126
|
return Transport(packet_source, packet_sink)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bumble
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.218
|
|
4
4
|
Summary: Bluetooth Stack for Apps, Emulation, Test and Experimentation
|
|
5
5
|
Author-email: Google <bumble-dev@google.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -113,7 +113,7 @@ Bumble is easiest to use with a dedicated USB dongle.
|
|
|
113
113
|
This is because internal Bluetooth interfaces tend to be locked down by the operating system.
|
|
114
114
|
You can use the [usb_probe](/docs/mkdocs/src/apps_and_tools/usb_probe.md) tool (all platforms) or `lsusb` (Linux or macOS) to list the available USB devices on your system.
|
|
115
115
|
|
|
116
|
-
See the [USB Transport](/docs/mkdocs/src/transports/usb.md) page for details on how to refer to USB devices. Also, if
|
|
116
|
+
See the [USB Transport](/docs/mkdocs/src/transports/usb.md) page for details on how to refer to USB devices. Also, if you are on a mac, see [these instructions](docs/mkdocs/src/platforms/macos.md).
|
|
117
117
|
|
|
118
118
|
## License
|
|
119
119
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
SERIAL TRANSPORT
|
|
2
|
+
================
|
|
3
|
+
|
|
4
|
+
The serial transport implements sending/receiving HCI packets over a UART (a.k.a serial port).
|
|
5
|
+
|
|
6
|
+
## Moniker
|
|
7
|
+
The moniker syntax for a serial transport is:
|
|
8
|
+
`<device-path>[,<speed>][,rtscts][,dsrdtr][,delay]`
|
|
9
|
+
|
|
10
|
+
When `<speed>` is omitted, the default value of 1000000 is used.
|
|
11
|
+
When `rtscts` is specified, RTS/CTS hardware flow control is enabled.
|
|
12
|
+
When `dsrdtr` is specified, DSR/DTR hardware flow control is enabled.
|
|
13
|
+
When `delay` is specified, a short delay is added after opening the port.
|
|
14
|
+
|
|
15
|
+
!!! example
|
|
16
|
+
```
|
|
17
|
+
/dev/tty.usbmodem0006839912172
|
|
18
|
+
/dev/tty.usbmodem0006839912172,1000000
|
|
19
|
+
/dev/tty.usbmodem0006839912172,rtscts
|
|
20
|
+
/dev/tty.usbmodem0006839912172,rtscts,delay
|
|
21
|
+
```
|
|
@@ -761,6 +761,34 @@ async def test_inquiry_result_with_rssi():
|
|
|
761
761
|
m.assert_called_with(hci.Address("00:11:22:33:44:55/P"), 3, mock.ANY, 5)
|
|
762
762
|
|
|
763
763
|
|
|
764
|
+
# -----------------------------------------------------------------------------
|
|
765
|
+
@pytest.mark.parametrize(
|
|
766
|
+
"roles",
|
|
767
|
+
(
|
|
768
|
+
(hci.Role.PERIPHERAL, hci.Role.CENTRAL),
|
|
769
|
+
(hci.Role.CENTRAL, hci.Role.PERIPHERAL),
|
|
770
|
+
),
|
|
771
|
+
)
|
|
772
|
+
@pytest.mark.asyncio
|
|
773
|
+
async def test_accept_classic_connection(roles: tuple[hci.Role, hci.Role]):
|
|
774
|
+
devices = TwoDevices()
|
|
775
|
+
devices[0].classic_enabled = True
|
|
776
|
+
devices[1].classic_enabled = True
|
|
777
|
+
await devices[0].power_on()
|
|
778
|
+
await devices[1].power_on()
|
|
779
|
+
|
|
780
|
+
accept_task = asyncio.create_task(devices[1].accept(role=roles[1]))
|
|
781
|
+
await devices[0].connect(
|
|
782
|
+
devices[1].public_address, transport=PhysicalTransport.BR_EDR
|
|
783
|
+
)
|
|
784
|
+
await accept_task
|
|
785
|
+
|
|
786
|
+
assert devices.connections[0]
|
|
787
|
+
assert devices.connections[0].role == roles[0]
|
|
788
|
+
assert devices.connections[1]
|
|
789
|
+
assert devices.connections[1].role == roles[1]
|
|
790
|
+
|
|
791
|
+
|
|
764
792
|
# -----------------------------------------------------------------------------
|
|
765
793
|
async def run_test_device():
|
|
766
794
|
await test_device_connect_parallel()
|
|
@@ -82,7 +82,6 @@ async def hap_client():
|
|
|
82
82
|
)
|
|
83
83
|
|
|
84
84
|
await devices.setup_connection()
|
|
85
|
-
# TODO negotiate MTU > 49 to not truncate preset names
|
|
86
85
|
|
|
87
86
|
# Mock encryption.
|
|
88
87
|
devices.connections[0].encryption = 1 # type: ignore
|
|
@@ -93,6 +92,9 @@ async def hap_client():
|
|
|
93
92
|
)
|
|
94
93
|
|
|
95
94
|
peer = device.Peer(devices.connections[1]) # type: ignore
|
|
95
|
+
await peer.request_mtu(49)
|
|
96
|
+
peer2 = device.Peer(devices.connections[0]) # type: ignore
|
|
97
|
+
await peer2.request_mtu(49)
|
|
96
98
|
hap_client = await peer.discover_service_and_create_proxy(
|
|
97
99
|
hap.HearingAccessServiceProxy
|
|
98
100
|
)
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
SERIAL TRANSPORT
|
|
2
|
-
================
|
|
3
|
-
|
|
4
|
-
The serial transport implements sending/receiving HCI packets over a UART (a.k.a serial port).
|
|
5
|
-
|
|
6
|
-
## Moniker
|
|
7
|
-
The moniker syntax for a serial transport is: `serial:<device-path>[,<speed>]`
|
|
8
|
-
When `<speed>` is omitted, the default value of 1000000 is used
|
|
9
|
-
|
|
10
|
-
!!! example
|
|
11
|
-
`serial:/dev/tty.usbmodem0006839912172,1000000`
|
|
12
|
-
Opens the serial port `/dev/tty.usbmodem0006839912172` at `1000000`bps
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|