bumble 0.0.215__tar.gz → 0.0.217__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.215 → bumble-0.0.217}/PKG-INFO +1 -1
- {bumble-0.0.215 → bumble-0.0.217}/bumble/_version.py +3 -3
- {bumble-0.0.215 → bumble-0.0.217}/bumble/device.py +77 -44
- {bumble-0.0.215 → bumble-0.0.217}/bumble/host.py +1 -1
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/hap.py +33 -4
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/android_netsim.py +5 -1
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/serial.py +56 -2
- {bumble-0.0.215 → bumble-0.0.217}/bumble.egg-info/PKG-INFO +1 -1
- bumble-0.0.217/docs/mkdocs/src/transports/serial.md +21 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/Cargo.lock +140 -56
- {bumble-0.0.215 → bumble-0.0.217}/rust/Cargo.toml +2 -2
- {bumble-0.0.215 → bumble-0.0.217}/tests/device_test.py +28 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/hap_test.py +3 -1
- bumble-0.0.215/docs/mkdocs/src/transports/serial.md +0 -12
- {bumble-0.0.215 → bumble-0.0.217}/.devcontainer/devcontainer.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/.git-blame-ignore-revs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/.github/ci-gradle.properties +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/.github/workflows/code-check.yml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/.github/workflows/codeql-analysis.yml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/.github/workflows/gradle-btbench.yml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/.github/workflows/python-avatar.yml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/.github/workflows/python-build-test.yml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/.github/workflows/python-publish.yml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/.gitignore +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/.vscode/settings.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/CONTRIBUTING.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/LICENSE +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/README.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/README.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/__init__.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/auracast.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/bench.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/ble_rpa_tool.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/console.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/controller_info.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/controller_loopback.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/controllers.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/device_info.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/gatt_dump.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/gg_bridge.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/hci_bridge.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/l2cap_bridge.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/lea_unicast/app.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/lea_unicast/index.html +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/pair.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/pandora_server.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/player/player.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/rfcomm_bridge.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/scan.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/show.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/speaker/__init__.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/speaker/logo.svg +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/speaker/speaker.css +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/speaker/speaker.html +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/speaker/speaker.js +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/speaker/speaker.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/unbond.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/apps/usb_probe.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/__init__.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/a2dp.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/at.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/att.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/audio/__init__.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/audio/io.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/avc.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/avctp.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/avdtp.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/avrcp.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/bridge.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/codecs.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/colors.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/company_ids.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/controller.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/core.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/crypto/__init__.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/crypto/builtin.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/crypto/cryptography.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/data_types.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/decoder.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/drivers/__init__.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/drivers/common.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/drivers/intel.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/drivers/rtk.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/gap.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/gatt.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/gatt_adapters.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/gatt_client.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/gatt_server.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/hci.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/helpers.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/hfp.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/hid.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/keys.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/l2cap.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/link.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/logging.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/pairing.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/pandora/__init__.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/pandora/config.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/pandora/device.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/pandora/host.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/pandora/l2cap.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/pandora/py.typed +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/pandora/security.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/pandora/utils.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/__init__.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/aics.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/ams.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/ancs.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/ascs.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/asha.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/bap.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/bass.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/battery_service.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/cap.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/csip.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/device_information_service.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/gap.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/gatt_service.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/gmap.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/heart_rate_service.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/le_audio.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/mcp.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/pacs.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/pbp.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/py.typed +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/tmap.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/vcs.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/profiles/vocs.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/py.typed +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/rfcomm.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/rtp.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/sdp.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/smp.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/snoop.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/__init__.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/android_emulator.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/common.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/file.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/__init__.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/emulated_bluetooth_device_pb2.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/emulated_bluetooth_device_pb2.pyi +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/emulated_bluetooth_device_pb2_grpc.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/emulated_bluetooth_packets_pb2.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/emulated_bluetooth_packets_pb2.pyi +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/emulated_bluetooth_packets_pb2_grpc.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/emulated_bluetooth_pb2.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/emulated_bluetooth_pb2.pyi +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/emulated_bluetooth_pb2_grpc.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/emulated_bluetooth_vhci_pb2.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/emulated_bluetooth_vhci_pb2.pyi +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/emulated_bluetooth_vhci_pb2_grpc.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/grpc_endpoint_description_pb2.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/grpc_endpoint_description_pb2.pyi +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/grpc_endpoint_description_pb2_grpc.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/netsim/__init__.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/netsim/common_pb2.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/netsim/common_pb2.pyi +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/netsim/common_pb2_grpc.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/netsim/hci_packet_pb2.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/netsim/hci_packet_pb2.pyi +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/netsim/hci_packet_pb2_grpc.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/netsim/model_pb2.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/netsim/model_pb2.pyi +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/netsim/model_pb2_grpc.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/netsim/packet_streamer_pb2.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/netsim/packet_streamer_pb2.pyi +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/netsim/packet_streamer_pb2_grpc.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/netsim/startup_pb2.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/netsim/startup_pb2.pyi +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/netsim/startup_pb2_grpc.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/rootcanal/__init__.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/rootcanal/configuration_pb2.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/rootcanal/configuration_pb2.pyi +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/grpc_protobuf/rootcanal/configuration_pb2_grpc.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/hci_socket.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/pty.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/py.typed +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/pyusb.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/tcp_client.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/tcp_server.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/udp.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/unix.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/usb.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/vhci.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/ws_client.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/transport/ws_server.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/utils.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/vendor/__init__.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/vendor/android/__init__.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/vendor/android/hci.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/vendor/zephyr/__init__.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble/vendor/zephyr/hci.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble.egg-info/SOURCES.txt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble.egg-info/dependency_links.txt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble.egg-info/entry_points.txt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble.egg-info/requires.txt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/bumble.egg-info/top_level.txt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/README.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/images/favicon.ico +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/images/logo.png +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/images/logo.svg +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/images/logo.vectornator/Artboard0.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/images/logo.vectornator/Document.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/images/logo.vectornator/Manifest.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/images/logo.vectornator/Thumbnail.png +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/images/logo.vectornator/UndoHistory.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/images/logo_framed.png +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/images/logo_framed.svg +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/images/logo_framed.vectornator/Artboard0.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/images/logo_framed.vectornator/Document.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/images/logo_framed.vectornator/Manifest.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/images/logo_framed.vectornator/Thumbnail.png +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/images/logo_framed.vectornator/UndoHistory.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/mkdocs.yml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/requirements.txt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/api/examples.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/api/guide.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/api/reference.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/apps_and_tools/auracast.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/apps_and_tools/bench.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/apps_and_tools/console.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/apps_and_tools/gatt_dump.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/apps_and_tools/gg_bridge.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/apps_and_tools/hci_bridge.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/apps_and_tools/index.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/apps_and_tools/pair.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/apps_and_tools/show.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/apps_and_tools/speaker.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/apps_and_tools/unbond.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/apps_and_tools/usb_probe.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/components/controller.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/components/gatt.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/components/host.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/components/security_manager.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/development/code_style.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/development/contributing.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/development/python_environments.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/downloads/zephyr/hci_usb.zip +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/drivers/index.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/drivers/intel.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/drivers/realtek.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/examples/index.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/extras/android_bt_bench.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/extras/android_remote_hci.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/extras/index.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/getting_started.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/hardware/index.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/hive/index.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/hive/index.toml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/hive/web/bumble.js +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/hive/web/heart_rate_monitor/heart_rate_monitor.html +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/hive/web/heart_rate_monitor/heart_rate_monitor.js +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/hive/web/heart_rate_monitor/heart_rate_monitor.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/hive/web/scanner/scanner.css +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/hive/web/scanner/scanner.html +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/hive/web/scanner/scanner.js +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/hive/web/scanner/scanner.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/hive/web/speaker/logo.svg +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/hive/web/speaker/speaker.css +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/hive/web/speaker/speaker.html +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/hive/web/speaker/speaker.js +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/hive/web/speaker/speaker.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/hive/web/ui.js +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/images/bumble_layers.svg +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/images/console_screenshot.png +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/images/favicon.ico +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/images/logo.png +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/images/logo_framed.png +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/images/speaker_screenshot.png +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/index.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/platforms/android.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/platforms/index.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/platforms/linux.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/platforms/macos.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/platforms/windows.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/platforms/winusb_driver.png +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/platforms/zephyr.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/transports/android_emulator.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/transports/file.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/transports/hci_socket.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/transports/index.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/transports/pty.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/transports/tcp_client.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/transports/tcp_server.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/transports/udp.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/transports/usb.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/transports/vhci.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/transports/ws_client.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/transports/ws_server.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/use_cases/index.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/use_cases/use_case_1.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/use_cases/use_case_2.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/use_cases/use_case_3.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/use_cases/use_case_4.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/use_cases/use_case_5.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/src/use_cases/use_case_6.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/docs/mkdocs/theme/partials/footer.html +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/environment.yml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/README.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/a2dp_sink1.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/asha_sink.html +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/asha_sink1.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/asha_sink2.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/async_runner.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/avrcp_as_sink.html +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/battery_client.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/battery_server.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/classic1.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/classic2.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/cs_initiator.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/cs_reflector.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/device1.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/device2.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/device3.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/device_information_client.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/device_information_server.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/device_with_rpa.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/heart_rate_client.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/heart_rate_server.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/hfp_gateway.html +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/hfp_gateway.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/hfp_handsfree.html +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/hfp_handsfree.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/hid_key_map.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/hid_keyboard.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/hid_report_parser.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/keyboard.html +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/keyboard.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/keyboard.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/leaudio.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/leaudio_with_classic.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/mcp_server.html +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/mobly/bench/one_device_bench_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/mobly/bench/sample_config.yml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/mobly/bench/two_devices_bench_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_a2dp_info.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_a2dp_sink.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_a2dp_source.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_advertiser.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_ams_client.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_ancs_client.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_asha_sink.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_avrcp.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_channel_sounding.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_cig_setup.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_classic_connect.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_classic_discoverable.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_classic_discovery.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_connect_and_encrypt.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_controller.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_controller_with_scanner.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_csis_servers.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_device_with_snooper.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_esco_connection.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_extended_advertiser.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_extended_advertiser_2.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_gatt_client.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_gatt_client_and_server.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_gatt_server.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_gatt_server_with_pairing_delegate.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_gatt_with_adapters.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_hap_server.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_hfp_gateway.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_hfp_handsfree.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_hid_device.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_hid_host.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_mcp_client.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_notifier.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_rfcomm_client.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_rfcomm_server.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_scanner.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_unicast_server.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/run_vcp_renderer.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/speaker.json +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/examples/vcp_renderer.html +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/.gitignore +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/.gitignore +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/build.gradle.kts +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/proguard-rules.pro +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/AndroidManifest.xml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/ic_launcher-playstore.png +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Advertiser.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/AutomationSnippet.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Connection.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Gatt.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/GattClient.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/GattServer.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/IoClient.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/L2capClient.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/L2capServer.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/MainActivity.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Mode.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Model.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Packet.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Pinger.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Ponger.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Receiver.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/RfcommClient.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/RfcommServer.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Scan.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Sender.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/SocketClient.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/SocketServer.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/ui/theme/Color.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/ui/theme/Theme.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/ui/theme/Type.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/res/drawable/ic_launcher_background.xml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/res/drawable/ic_launcher_foreground.xml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/res/values/colors.xml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/res/values/ic_launcher_background.xml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/res/values/strings.xml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/res/values/themes.xml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/res/xml/backup_rules.xml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/app/src/main/res/xml/data_extraction_rules.xml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/build.gradle.kts +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/gradle/libs.versions.toml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/gradle/wrapper/gradle-wrapper.jar +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/gradle/wrapper/gradle-wrapper.properties +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/gradle.properties +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/gradlew +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/gradlew.bat +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/BtBench/settings.gradle.kts +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/.gitignore +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/.gitignore +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/build.gradle.kts +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/proguard-rules.pro +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/AndroidManifest.xml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/aidl/android/hardware/bluetooth/IBluetoothHci.aidl +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/aidl/android/hardware/bluetooth/IBluetoothHciCallbacks.aidl +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/aidl/android/hardware/bluetooth/Status.aidl +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/hidl/bluetooth/1.1/IBluetoothHci.hal +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/hidl/bluetooth/1.1/IBluetoothHciCallbacks.hal +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/ic_launcher-playstore.png +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/IBluetoothHci.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/IBluetoothHciCallbacks.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/Status.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_0/IBluetoothHci.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_0/IBluetoothHciCallbacks.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_0/Status.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_1/IBluetoothHci.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_1/IBluetoothHciCallbacks.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/CommandLineInterface.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciHal.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciHalCallback.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciPacket.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciParser.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciProxy.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciServer.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/MainActivity.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/ui/theme/Color.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/ui/theme/Theme.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/ui/theme/Type.kt +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/values/colors.xml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/values/ic_launcher_background.xml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/values/strings.xml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/values/themes.xml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/xml/backup_rules.xml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/app/src/main/res/xml/data_extraction_rules.xml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/build.gradle.kts +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/gradle/libs.versions.toml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/gradle/wrapper/gradle-wrapper.jar +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/gradle/wrapper/gradle-wrapper.properties +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/gradle.properties +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/gradlew +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/gradlew.bat +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/lib/.gitignore +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/lib/build.gradle.kts +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/lib/consumer-rules.pro +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/lib/proguard-rules.pro +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/lib/src/main/AndroidManifest.xml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/lib/src/main/java/android/internal/hidl/base/V1_0/DebugInfo.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/lib/src/main/java/android/internal/hidl/base/V1_0/IBase.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/lib/src/main/java/android/os/HidlSupport.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/lib/src/main/java/android/os/HwBinder.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/lib/src/main/java/android/os/HwBlob.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/lib/src/main/java/android/os/HwParcel.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/lib/src/main/java/android/os/IHwBinder.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/lib/src/main/java/android/os/IHwInterface.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/lib/src/main/java/android/os/NativeHandle.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/lib/src/main/java/android/os/ServiceManager.java +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/scripts/generate_java_from_aidl.sh +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/extras/android/RemoteHCI/settings.gradle.kts +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/noxfile.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/pyproject.toml +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/.gitignore +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/CHANGELOG.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/README.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/examples/battery_client.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/examples/broadcast.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/examples/scanner.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/pytests/assigned_numbers.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/pytests/pytests.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/pytests/wrapper/drivers.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/pytests/wrapper/hci.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/pytests/wrapper/mod.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/pytests/wrapper/transport.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/resources/test/firmware/realtek/README.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/resources/test/firmware/realtek/rtl8723b_fw_structure.bin +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/resources/test/firmware/realtek/rtl8761bu_fw_structure.bin +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/adv.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/cli/firmware/mod.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/cli/firmware/rtk.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/cli/l2cap/client_bridge.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/cli/l2cap/mod.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/cli/l2cap/server_bridge.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/cli/mod.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/cli/usb/mod.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/internal/drivers/mod.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/internal/drivers/rtk.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/internal/hci/mod.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/internal/hci/packets.pdl +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/internal/hci/tests.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/internal/mod.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/lib.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/main.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/wrapper/assigned_numbers/company_ids.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/wrapper/assigned_numbers/mod.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/wrapper/assigned_numbers/services.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/wrapper/common.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/wrapper/controller.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/wrapper/core.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/wrapper/device/mod.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/wrapper/device/tests.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/wrapper/drivers/mod.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/wrapper/drivers/rtk.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/wrapper/gatt_client.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/wrapper/hci.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/wrapper/host.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/wrapper/l2cap.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/wrapper/link.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/wrapper/logging.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/wrapper/mod.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/wrapper/profile.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/src/wrapper/transport.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/tools/file_header.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/rust/tools/gen_assigned_numbers.rs +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/scripts/process_android_emulator_protos.sh +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/scripts/process_android_netsim_protos.sh +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/setup.cfg +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tasks.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/__init__.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/a2dp_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/aics_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/asha_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/at_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/avdtp_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/avrcp_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/bap_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/bass_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/cap_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/codecs_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/core_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/csip_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/decoder_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/g722_sample.g722 +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/gatt_service_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/gatt_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/gmap_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/hci_data_001.bin +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/hci_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/hfp_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/host_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/import_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/keystore_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/l2cap_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/le_audio_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/mcp_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/pytest.ini +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/rfcomm_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/sdp_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/self_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/smp_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/test_utils.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/transport_tcp_server_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/transport_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/utils_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/vcp_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tests/vocs_test.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tools/__init__.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tools/generate_company_id_list.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tools/intel_fw_download.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tools/intel_util.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tools/rtk_fw_download.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/tools/rtk_util.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/web/.gitignore +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/web/README.md +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/web/bumble.js +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/web/favicon.ico +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/web/heart_rate_monitor/heart_rate_monitor.html +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/web/heart_rate_monitor/heart_rate_monitor.js +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/web/heart_rate_monitor/heart_rate_monitor.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/web/scanner/scanner.css +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/web/scanner/scanner.html +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/web/scanner/scanner.js +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/web/scanner/scanner.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/web/speaker/logo.svg +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/web/speaker/speaker.css +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/web/speaker/speaker.html +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/web/speaker/speaker.js +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/web/speaker/speaker.py +0 -0
- {bumble-0.0.215 → bumble-0.0.217}/web/ui.js +0 -0
|
@@ -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.217'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 0, 217)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'gaec50ac61'
|
|
@@ -2169,10 +2169,12 @@ def with_connection_from_handle(function):
|
|
|
2169
2169
|
# Decorator that converts the first argument from a bluetooth address to a connection
|
|
2170
2170
|
def with_connection_from_address(function):
|
|
2171
2171
|
@functools.wraps(function)
|
|
2172
|
-
def wrapper(
|
|
2173
|
-
|
|
2172
|
+
def wrapper(device: Device, address: hci.Address, *args, **kwargs):
|
|
2173
|
+
if connection := device.pending_connections.get(address):
|
|
2174
|
+
return function(device, connection, *args, **kwargs)
|
|
2175
|
+
for connection in device.connections.values():
|
|
2174
2176
|
if connection.peer_address == address:
|
|
2175
|
-
return function(
|
|
2177
|
+
return function(device, connection, *args, **kwargs)
|
|
2176
2178
|
raise ObjectLookupError('no connection for address')
|
|
2177
2179
|
|
|
2178
2180
|
return wrapper
|
|
@@ -2182,11 +2184,13 @@ def with_connection_from_address(function):
|
|
|
2182
2184
|
# connection
|
|
2183
2185
|
def try_with_connection_from_address(function):
|
|
2184
2186
|
@functools.wraps(function)
|
|
2185
|
-
def wrapper(
|
|
2186
|
-
|
|
2187
|
+
def wrapper(device: Device, address: hci.Address, *args, **kwargs):
|
|
2188
|
+
if connection := device.pending_connections.get(address):
|
|
2189
|
+
return function(device, connection, address, *args, **kwargs)
|
|
2190
|
+
for connection in device.connections.values():
|
|
2187
2191
|
if connection.peer_address == address:
|
|
2188
|
-
return function(
|
|
2189
|
-
return function(
|
|
2192
|
+
return function(device, connection, address, *args, **kwargs)
|
|
2193
|
+
return function(device, None, address, *args, **kwargs)
|
|
2190
2194
|
|
|
2191
2195
|
return wrapper
|
|
2192
2196
|
|
|
@@ -2234,7 +2238,7 @@ class Device(utils.CompositeEventEmitter):
|
|
|
2234
2238
|
scan_response_data: bytes
|
|
2235
2239
|
cs_capabilities: ChannelSoundingCapabilities | None = None
|
|
2236
2240
|
connections: dict[int, Connection]
|
|
2237
|
-
|
|
2241
|
+
pending_connections: dict[hci.Address, Connection]
|
|
2238
2242
|
classic_pending_accepts: dict[
|
|
2239
2243
|
hci.Address,
|
|
2240
2244
|
list[asyncio.Future[Union[Connection, tuple[hci.Address, int, int]]]],
|
|
@@ -2356,9 +2360,9 @@ class Device(utils.CompositeEventEmitter):
|
|
|
2356
2360
|
self.le_connecting = False
|
|
2357
2361
|
self.disconnecting = False
|
|
2358
2362
|
self.connections = {} # Connections, by connection handle
|
|
2359
|
-
self.
|
|
2363
|
+
self.pending_connections = (
|
|
2360
2364
|
{}
|
|
2361
|
-
) #
|
|
2365
|
+
) # Pending connections, by BD address (BR/EDR only)
|
|
2362
2366
|
self.sco_links = {} # ScoLinks, by connection handle (BR/EDR only)
|
|
2363
2367
|
self.cis_links = {} # CisLinks, by connection handle (LE only)
|
|
2364
2368
|
self._pending_cis = {} # (CIS_ID, CIG_ID), by CIS_handle
|
|
@@ -3827,7 +3831,17 @@ class Device(utils.CompositeEventEmitter):
|
|
|
3827
3831
|
)
|
|
3828
3832
|
else:
|
|
3829
3833
|
# Save pending connection
|
|
3830
|
-
self.
|
|
3834
|
+
self.pending_connections[peer_address] = Connection(
|
|
3835
|
+
device=self,
|
|
3836
|
+
handle=0,
|
|
3837
|
+
transport=core.PhysicalTransport.BR_EDR,
|
|
3838
|
+
self_address=self.public_address,
|
|
3839
|
+
self_resolvable_address=None,
|
|
3840
|
+
peer_address=peer_address,
|
|
3841
|
+
peer_resolvable_address=None,
|
|
3842
|
+
role=hci.Role.CENTRAL,
|
|
3843
|
+
parameters=Connection.Parameters(0, 0, 0),
|
|
3844
|
+
)
|
|
3831
3845
|
|
|
3832
3846
|
# TODO: allow passing other settings
|
|
3833
3847
|
result = await self.send_command(
|
|
@@ -3880,7 +3894,7 @@ class Device(utils.CompositeEventEmitter):
|
|
|
3880
3894
|
self.le_connecting = False
|
|
3881
3895
|
self.connect_own_address_type = None
|
|
3882
3896
|
else:
|
|
3883
|
-
self.
|
|
3897
|
+
self.pending_connections.pop(peer_address, None)
|
|
3884
3898
|
|
|
3885
3899
|
async def accept(
|
|
3886
3900
|
self,
|
|
@@ -3978,7 +3992,17 @@ class Device(utils.CompositeEventEmitter):
|
|
|
3978
3992
|
# Even if we requested a role switch in the hci.HCI_Accept_Connection_Request
|
|
3979
3993
|
# command, this connection is still considered Peripheral until an eventual
|
|
3980
3994
|
# role change event.
|
|
3981
|
-
self.
|
|
3995
|
+
self.pending_connections[peer_address] = Connection(
|
|
3996
|
+
device=self,
|
|
3997
|
+
handle=0,
|
|
3998
|
+
transport=core.PhysicalTransport.BR_EDR,
|
|
3999
|
+
self_address=self.public_address,
|
|
4000
|
+
self_resolvable_address=None,
|
|
4001
|
+
peer_address=peer_address,
|
|
4002
|
+
peer_resolvable_address=None,
|
|
4003
|
+
role=hci.Role.PERIPHERAL,
|
|
4004
|
+
parameters=Connection.Parameters(0, 0, 0),
|
|
4005
|
+
)
|
|
3982
4006
|
|
|
3983
4007
|
try:
|
|
3984
4008
|
# Accept connection request
|
|
@@ -3996,7 +4020,7 @@ class Device(utils.CompositeEventEmitter):
|
|
|
3996
4020
|
finally:
|
|
3997
4021
|
self.remove_listener(self.EVENT_CONNECTION, on_connection)
|
|
3998
4022
|
self.remove_listener(self.EVENT_CONNECTION_FAILURE, on_connection_failure)
|
|
3999
|
-
self.
|
|
4023
|
+
self.pending_connections.pop(peer_address, None)
|
|
4000
4024
|
|
|
4001
4025
|
@asynccontextmanager
|
|
4002
4026
|
async def connect_as_gatt(self, peer_address: Union[hci.Address, str]):
|
|
@@ -5441,29 +5465,27 @@ class Device(utils.CompositeEventEmitter):
|
|
|
5441
5465
|
connection_handle: int,
|
|
5442
5466
|
peer_address: hci.Address,
|
|
5443
5467
|
) -> None:
|
|
5444
|
-
|
|
5468
|
+
if connection := self.pending_connections.pop(peer_address, None):
|
|
5469
|
+
connection.handle = connection_handle
|
|
5470
|
+
else:
|
|
5471
|
+
# Create a new connection
|
|
5472
|
+
connection = Connection(
|
|
5473
|
+
device=self,
|
|
5474
|
+
handle=connection_handle,
|
|
5475
|
+
transport=PhysicalTransport.BR_EDR,
|
|
5476
|
+
self_address=self.public_address,
|
|
5477
|
+
self_resolvable_address=None,
|
|
5478
|
+
peer_address=peer_address,
|
|
5479
|
+
peer_resolvable_address=None,
|
|
5480
|
+
role=hci.Role.PERIPHERAL,
|
|
5481
|
+
parameters=Connection.Parameters(0.0, 0, 0.0),
|
|
5482
|
+
)
|
|
5445
5483
|
|
|
5446
|
-
logger.debug(
|
|
5447
|
-
f'*** Connection: [0x{connection_handle:04X}] '
|
|
5448
|
-
f'{peer_address} {hci.HCI_Constant.role_name(connection_role)}'
|
|
5449
|
-
)
|
|
5484
|
+
logger.debug('*** %s', connection)
|
|
5450
5485
|
if connection_handle in self.connections:
|
|
5451
5486
|
logger.warning(
|
|
5452
5487
|
'new connection reuses the same handle as a previous connection'
|
|
5453
5488
|
)
|
|
5454
|
-
|
|
5455
|
-
# Create a new connection
|
|
5456
|
-
connection = Connection(
|
|
5457
|
-
device=self,
|
|
5458
|
-
handle=connection_handle,
|
|
5459
|
-
transport=PhysicalTransport.BR_EDR,
|
|
5460
|
-
self_address=self.public_address,
|
|
5461
|
-
self_resolvable_address=None,
|
|
5462
|
-
peer_address=peer_address,
|
|
5463
|
-
peer_resolvable_address=None,
|
|
5464
|
-
role=connection_role,
|
|
5465
|
-
parameters=Connection.Parameters(0.0, 0, 0.0),
|
|
5466
|
-
)
|
|
5467
5489
|
self.connections[connection_handle] = connection
|
|
5468
5490
|
|
|
5469
5491
|
self.emit(self.EVENT_CONNECTION, connection)
|
|
@@ -5618,7 +5640,9 @@ class Device(utils.CompositeEventEmitter):
|
|
|
5618
5640
|
|
|
5619
5641
|
# FIXME: Explore a delegate-model for BR/EDR wait connection #56.
|
|
5620
5642
|
@host_event_handler
|
|
5621
|
-
def on_connection_request(
|
|
5643
|
+
def on_connection_request(
|
|
5644
|
+
self, bd_addr: hci.Address, class_of_device: int, link_type: int
|
|
5645
|
+
):
|
|
5622
5646
|
logger.debug(f'*** Connection request: {bd_addr}')
|
|
5623
5647
|
|
|
5624
5648
|
# Handle SCO request.
|
|
@@ -5647,7 +5671,17 @@ class Device(utils.CompositeEventEmitter):
|
|
|
5647
5671
|
# device configuration is set to accept any incoming connection
|
|
5648
5672
|
elif self.classic_accept_any:
|
|
5649
5673
|
# Save pending connection
|
|
5650
|
-
self.
|
|
5674
|
+
self.pending_connections[bd_addr] = Connection(
|
|
5675
|
+
device=self,
|
|
5676
|
+
handle=0,
|
|
5677
|
+
transport=core.PhysicalTransport.BR_EDR,
|
|
5678
|
+
self_address=self.public_address,
|
|
5679
|
+
self_resolvable_address=None,
|
|
5680
|
+
peer_address=bd_addr,
|
|
5681
|
+
peer_resolvable_address=None,
|
|
5682
|
+
role=hci.Role.PERIPHERAL,
|
|
5683
|
+
parameters=Connection.Parameters(0, 0, 0),
|
|
5684
|
+
)
|
|
5651
5685
|
|
|
5652
5686
|
self.host.send_command_sync(
|
|
5653
5687
|
hci.HCI_Accept_Connection_Request_Command(
|
|
@@ -5958,7 +5992,7 @@ class Device(utils.CompositeEventEmitter):
|
|
|
5958
5992
|
@host_event_handler
|
|
5959
5993
|
@try_with_connection_from_address
|
|
5960
5994
|
def on_remote_name(
|
|
5961
|
-
self, connection: Connection, address: hci.Address, remote_name: bytes
|
|
5995
|
+
self, connection: Optional[Connection], address: hci.Address, remote_name: bytes
|
|
5962
5996
|
):
|
|
5963
5997
|
# Try to decode the name
|
|
5964
5998
|
try:
|
|
@@ -5977,7 +6011,7 @@ class Device(utils.CompositeEventEmitter):
|
|
|
5977
6011
|
@host_event_handler
|
|
5978
6012
|
@try_with_connection_from_address
|
|
5979
6013
|
def on_remote_name_failure(
|
|
5980
|
-
self, connection: Connection, address: hci.Address, error: int
|
|
6014
|
+
self, connection: Optional[Connection], address: hci.Address, error: int
|
|
5981
6015
|
):
|
|
5982
6016
|
if connection:
|
|
5983
6017
|
connection.emit(connection.EVENT_REMOTE_NAME_FAILURE, error)
|
|
@@ -6409,21 +6443,20 @@ class Device(utils.CompositeEventEmitter):
|
|
|
6409
6443
|
|
|
6410
6444
|
# [Classic only]
|
|
6411
6445
|
@host_event_handler
|
|
6412
|
-
@
|
|
6446
|
+
@with_connection_from_address
|
|
6413
6447
|
def on_role_change(
|
|
6414
|
-
self,
|
|
6448
|
+
self,
|
|
6449
|
+
connection: Connection,
|
|
6450
|
+
new_role: hci.Role,
|
|
6415
6451
|
):
|
|
6416
|
-
|
|
6417
|
-
|
|
6418
|
-
connection.emit(connection.EVENT_ROLE_CHANGE, new_role)
|
|
6419
|
-
else:
|
|
6420
|
-
self.connection_roles[peer_address] = new_role
|
|
6452
|
+
connection.role = new_role
|
|
6453
|
+
connection.emit(connection.EVENT_ROLE_CHANGE, new_role)
|
|
6421
6454
|
|
|
6422
6455
|
# [Classic only]
|
|
6423
6456
|
@host_event_handler
|
|
6424
6457
|
@try_with_connection_from_address
|
|
6425
6458
|
def on_role_change_failure(
|
|
6426
|
-
self, connection: Connection, address: hci.Address, error: int
|
|
6459
|
+
self, connection: Optional[Connection], address: hci.Address, error: int
|
|
6427
6460
|
):
|
|
6428
6461
|
if connection:
|
|
6429
6462
|
connection.emit(connection.EVENT_ROLE_CHANGE_FAILURE, error)
|
|
@@ -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)
|
|
@@ -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)
|
|
@@ -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
|
+
```
|