bumble 0.0.201__tar.gz → 0.0.203__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.
Files changed (603) hide show
  1. {bumble-0.0.201 → bumble-0.0.203}/.github/workflows/code-check.yml +1 -1
  2. {bumble-0.0.201 → bumble-0.0.203}/.github/workflows/python-build-test.yml +2 -2
  3. {bumble-0.0.201 → bumble-0.0.203}/PKG-INFO +5 -4
  4. {bumble-0.0.201 → bumble-0.0.203}/apps/auracast.py +22 -13
  5. {bumble-0.0.201 → bumble-0.0.203}/apps/bench.py +138 -93
  6. {bumble-0.0.201 → bumble-0.0.203}/apps/hci_bridge.py +1 -1
  7. {bumble-0.0.201 → bumble-0.0.203}/apps/lea_unicast/app.py +24 -6
  8. {bumble-0.0.201 → bumble-0.0.203}/apps/rfcomm_bridge.py +10 -1
  9. {bumble-0.0.201 → bumble-0.0.203}/bumble/_version.py +2 -2
  10. {bumble-0.0.201 → bumble-0.0.203}/bumble/att.py +1 -4
  11. {bumble-0.0.201 → bumble-0.0.203}/bumble/avc.py +2 -0
  12. {bumble-0.0.201 → bumble-0.0.203}/bumble/controller.py +58 -2
  13. {bumble-0.0.201 → bumble-0.0.203}/bumble/device.py +454 -494
  14. {bumble-0.0.201 → bumble-0.0.203}/bumble/gatt.py +1 -1
  15. {bumble-0.0.201 → bumble-0.0.203}/bumble/gatt_client.py +9 -3
  16. {bumble-0.0.201 → bumble-0.0.203}/bumble/gatt_server.py +2 -2
  17. {bumble-0.0.201 → bumble-0.0.203}/bumble/hci.py +93 -33
  18. {bumble-0.0.201 → bumble-0.0.203}/bumble/hfp.py +20 -17
  19. {bumble-0.0.201 → bumble-0.0.203}/bumble/host.py +1 -1
  20. {bumble-0.0.201 → bumble-0.0.203}/bumble/l2cap.py +3 -8
  21. {bumble-0.0.201 → bumble-0.0.203}/bumble/link.py +2 -0
  22. {bumble-0.0.201 → bumble-0.0.203}/bumble/profiles/aics.py +3 -3
  23. {bumble-0.0.201 → bumble-0.0.203}/bumble/profiles/bap.py +116 -41
  24. {bumble-0.0.201 → bumble-0.0.203}/bumble/sdp.py +3 -7
  25. {bumble-0.0.201 → bumble-0.0.203}/bumble/smp.py +3 -6
  26. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/common.py +4 -2
  27. {bumble-0.0.201 → bumble-0.0.203}/bumble.egg-info/PKG-INFO +5 -4
  28. {bumble-0.0.201 → bumble-0.0.203}/bumble.egg-info/SOURCES.txt +8 -0
  29. {bumble-0.0.201 → bumble-0.0.203}/bumble.egg-info/requires.txt +4 -3
  30. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/apps_and_tools/bench.md +34 -22
  31. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/getting_started.md +1 -3
  32. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/index.md +1 -1
  33. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/platforms/index.md +1 -1
  34. {bumble-0.0.201 → bumble-0.0.203}/environment.yml +1 -1
  35. bumble-0.0.203/examples/mobly/bench/one_device_bench_test.py +47 -0
  36. bumble-0.0.203/examples/mobly/bench/sample_config.yml +9 -0
  37. bumble-0.0.203/examples/mobly/bench/two_devices_bench_test.py +38 -0
  38. {bumble-0.0.201 → bumble-0.0.203}/examples/run_extended_advertiser_2.py +1 -0
  39. {bumble-0.0.201 → bumble-0.0.203}/examples/run_hfp_gateway.py +8 -3
  40. {bumble-0.0.201 → bumble-0.0.203}/examples/run_hfp_handsfree.py +3 -0
  41. {bumble-0.0.201 → bumble-0.0.203}/examples/run_unicast_server.py +7 -1
  42. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/build.gradle.kts +2 -0
  43. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/AndroidManifest.xml +7 -2
  44. bumble-0.0.203/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/AutomationSnippet.java +289 -0
  45. bumble-0.0.203/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/IoClient.kt +20 -0
  46. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/L2capClient.kt +14 -6
  47. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/L2capServer.kt +19 -6
  48. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/MainActivity.kt +168 -48
  49. bumble-0.0.203/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Mode.kt +20 -0
  50. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Model.kt +68 -0
  51. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Packet.kt +3 -3
  52. bumble-0.0.203/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Pinger.kt +104 -0
  53. bumble-0.0.203/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Ponger.kt +62 -0
  54. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Receiver.kt +9 -2
  55. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/RfcommClient.kt +14 -6
  56. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/RfcommServer.kt +14 -7
  57. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Scan.kt +1 -1
  58. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Sender.kt +13 -8
  59. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/SocketClient.kt +27 -13
  60. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/SocketServer.kt +23 -4
  61. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/gradle/libs.versions.toml +5 -1
  62. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/gradle/wrapper/gradle-wrapper.properties +1 -1
  63. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciProxy.java +2 -1
  64. {bumble-0.0.201 → bumble-0.0.203}/pyproject.toml +2 -1
  65. {bumble-0.0.201 → bumble-0.0.203}/rust/src/wrapper/hci.rs +1 -1
  66. {bumble-0.0.201 → bumble-0.0.203}/setup.cfg +4 -3
  67. {bumble-0.0.201 → bumble-0.0.203}/tests/bap_test.py +52 -0
  68. {bumble-0.0.201 → bumble-0.0.203}/tests/device_test.py +55 -10
  69. {bumble-0.0.201 → bumble-0.0.203}/tests/gatt_test.py +15 -4
  70. {bumble-0.0.201 → bumble-0.0.203}/tests/hci_test.py +4 -4
  71. {bumble-0.0.201 → bumble-0.0.203}/tests/hfp_test.py +2 -2
  72. {bumble-0.0.201 → bumble-0.0.203}/tests/self_test.py +1 -1
  73. {bumble-0.0.201 → bumble-0.0.203}/.devcontainer/devcontainer.json +0 -0
  74. {bumble-0.0.201 → bumble-0.0.203}/.git-blame-ignore-revs +0 -0
  75. {bumble-0.0.201 → bumble-0.0.203}/.github/workflows/codeql-analysis.yml +0 -0
  76. {bumble-0.0.201 → bumble-0.0.203}/.github/workflows/python-avatar.yml +0 -0
  77. {bumble-0.0.201 → bumble-0.0.203}/.github/workflows/python-publish.yml +0 -0
  78. {bumble-0.0.201 → bumble-0.0.203}/.gitignore +0 -0
  79. {bumble-0.0.201 → bumble-0.0.203}/.vscode/settings.json +0 -0
  80. {bumble-0.0.201 → bumble-0.0.203}/CONTRIBUTING.md +0 -0
  81. {bumble-0.0.201 → bumble-0.0.203}/LICENSE +0 -0
  82. {bumble-0.0.201 → bumble-0.0.203}/README.md +0 -0
  83. {bumble-0.0.201 → bumble-0.0.203}/apps/README.md +0 -0
  84. {bumble-0.0.201 → bumble-0.0.203}/apps/__init__.py +0 -0
  85. {bumble-0.0.201 → bumble-0.0.203}/apps/ble_rpa_tool.py +0 -0
  86. {bumble-0.0.201 → bumble-0.0.203}/apps/console.py +0 -0
  87. {bumble-0.0.201 → bumble-0.0.203}/apps/controller_info.py +0 -0
  88. {bumble-0.0.201 → bumble-0.0.203}/apps/controller_loopback.py +0 -0
  89. {bumble-0.0.201 → bumble-0.0.203}/apps/controllers.py +0 -0
  90. {bumble-0.0.201 → bumble-0.0.203}/apps/device_info.py +0 -0
  91. {bumble-0.0.201 → bumble-0.0.203}/apps/gatt_dump.py +0 -0
  92. {bumble-0.0.201 → bumble-0.0.203}/apps/gg_bridge.py +0 -0
  93. {bumble-0.0.201 → bumble-0.0.203}/apps/l2cap_bridge.py +0 -0
  94. {bumble-0.0.201 → bumble-0.0.203}/apps/lea_unicast/index.html +0 -0
  95. {bumble-0.0.201 → bumble-0.0.203}/apps/lea_unicast/liblc3.wasm +0 -0
  96. {bumble-0.0.201 → bumble-0.0.203}/apps/link_relay/__init__.py +0 -0
  97. {bumble-0.0.201 → bumble-0.0.203}/apps/link_relay/link_relay.py +0 -0
  98. {bumble-0.0.201 → bumble-0.0.203}/apps/link_relay/logging.yml +0 -0
  99. {bumble-0.0.201 → bumble-0.0.203}/apps/pair.py +0 -0
  100. {bumble-0.0.201 → bumble-0.0.203}/apps/pandora_server.py +0 -0
  101. {bumble-0.0.201 → bumble-0.0.203}/apps/player/player.py +0 -0
  102. {bumble-0.0.201 → bumble-0.0.203}/apps/scan.py +0 -0
  103. {bumble-0.0.201 → bumble-0.0.203}/apps/show.py +0 -0
  104. {bumble-0.0.201 → bumble-0.0.203}/apps/speaker/__init__.py +0 -0
  105. {bumble-0.0.201 → bumble-0.0.203}/apps/speaker/logo.svg +0 -0
  106. {bumble-0.0.201 → bumble-0.0.203}/apps/speaker/speaker.css +0 -0
  107. {bumble-0.0.201 → bumble-0.0.203}/apps/speaker/speaker.html +0 -0
  108. {bumble-0.0.201 → bumble-0.0.203}/apps/speaker/speaker.js +0 -0
  109. {bumble-0.0.201 → bumble-0.0.203}/apps/speaker/speaker.py +0 -0
  110. {bumble-0.0.201 → bumble-0.0.203}/apps/unbond.py +0 -0
  111. {bumble-0.0.201 → bumble-0.0.203}/apps/usb_probe.py +0 -0
  112. {bumble-0.0.201 → bumble-0.0.203}/bumble/__init__.py +0 -0
  113. {bumble-0.0.201 → bumble-0.0.203}/bumble/a2dp.py +0 -0
  114. {bumble-0.0.201 → bumble-0.0.203}/bumble/at.py +0 -0
  115. {bumble-0.0.201 → bumble-0.0.203}/bumble/avctp.py +0 -0
  116. {bumble-0.0.201 → bumble-0.0.203}/bumble/avdtp.py +0 -0
  117. {bumble-0.0.201 → bumble-0.0.203}/bumble/avrcp.py +0 -0
  118. {bumble-0.0.201 → bumble-0.0.203}/bumble/bridge.py +0 -0
  119. {bumble-0.0.201 → bumble-0.0.203}/bumble/codecs.py +0 -0
  120. {bumble-0.0.201 → bumble-0.0.203}/bumble/colors.py +0 -0
  121. {bumble-0.0.201 → bumble-0.0.203}/bumble/company_ids.py +0 -0
  122. {bumble-0.0.201 → bumble-0.0.203}/bumble/core.py +0 -0
  123. {bumble-0.0.201 → bumble-0.0.203}/bumble/crypto.py +0 -0
  124. {bumble-0.0.201 → bumble-0.0.203}/bumble/decoder.py +0 -0
  125. {bumble-0.0.201 → bumble-0.0.203}/bumble/drivers/__init__.py +0 -0
  126. {bumble-0.0.201 → bumble-0.0.203}/bumble/drivers/common.py +0 -0
  127. {bumble-0.0.201 → bumble-0.0.203}/bumble/drivers/intel.py +0 -0
  128. {bumble-0.0.201 → bumble-0.0.203}/bumble/drivers/rtk.py +0 -0
  129. {bumble-0.0.201 → bumble-0.0.203}/bumble/gap.py +0 -0
  130. {bumble-0.0.201 → bumble-0.0.203}/bumble/helpers.py +0 -0
  131. {bumble-0.0.201 → bumble-0.0.203}/bumble/hid.py +0 -0
  132. {bumble-0.0.201 → bumble-0.0.203}/bumble/keys.py +0 -0
  133. {bumble-0.0.201 → bumble-0.0.203}/bumble/pairing.py +0 -0
  134. {bumble-0.0.201 → bumble-0.0.203}/bumble/pandora/__init__.py +0 -0
  135. {bumble-0.0.201 → bumble-0.0.203}/bumble/pandora/config.py +0 -0
  136. {bumble-0.0.201 → bumble-0.0.203}/bumble/pandora/device.py +0 -0
  137. {bumble-0.0.201 → bumble-0.0.203}/bumble/pandora/host.py +1 -1
  138. {bumble-0.0.201 → bumble-0.0.203}/bumble/pandora/l2cap.py +0 -0
  139. {bumble-0.0.201 → bumble-0.0.203}/bumble/pandora/py.typed +0 -0
  140. {bumble-0.0.201 → bumble-0.0.203}/bumble/pandora/security.py +0 -0
  141. {bumble-0.0.201 → bumble-0.0.203}/bumble/pandora/utils.py +0 -0
  142. {bumble-0.0.201 → bumble-0.0.203}/bumble/profiles/__init__.py +0 -0
  143. {bumble-0.0.201 → bumble-0.0.203}/bumble/profiles/ascs.py +0 -0
  144. {bumble-0.0.201 → bumble-0.0.203}/bumble/profiles/asha.py +0 -0
  145. {bumble-0.0.201 → bumble-0.0.203}/bumble/profiles/bass.py +0 -0
  146. {bumble-0.0.201 → bumble-0.0.203}/bumble/profiles/battery_service.py +0 -0
  147. {bumble-0.0.201 → bumble-0.0.203}/bumble/profiles/cap.py +0 -0
  148. {bumble-0.0.201 → bumble-0.0.203}/bumble/profiles/csip.py +0 -0
  149. {bumble-0.0.201 → bumble-0.0.203}/bumble/profiles/device_information_service.py +0 -0
  150. {bumble-0.0.201 → bumble-0.0.203}/bumble/profiles/gap.py +0 -0
  151. {bumble-0.0.201 → bumble-0.0.203}/bumble/profiles/hap.py +0 -0
  152. {bumble-0.0.201 → bumble-0.0.203}/bumble/profiles/heart_rate_service.py +0 -0
  153. {bumble-0.0.201 → bumble-0.0.203}/bumble/profiles/le_audio.py +0 -0
  154. {bumble-0.0.201 → bumble-0.0.203}/bumble/profiles/mcp.py +0 -0
  155. {bumble-0.0.201 → bumble-0.0.203}/bumble/profiles/pacs.py +0 -0
  156. {bumble-0.0.201 → bumble-0.0.203}/bumble/profiles/pbp.py +0 -0
  157. {bumble-0.0.201 → bumble-0.0.203}/bumble/profiles/py.typed +0 -0
  158. {bumble-0.0.201 → bumble-0.0.203}/bumble/profiles/tmap.py +0 -0
  159. {bumble-0.0.201 → bumble-0.0.203}/bumble/profiles/vcp.py +0 -0
  160. {bumble-0.0.201 → bumble-0.0.203}/bumble/py.typed +0 -0
  161. {bumble-0.0.201 → bumble-0.0.203}/bumble/rfcomm.py +0 -0
  162. {bumble-0.0.201 → bumble-0.0.203}/bumble/rtp.py +0 -0
  163. {bumble-0.0.201 → bumble-0.0.203}/bumble/snoop.py +0 -0
  164. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/__init__.py +0 -0
  165. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/android_emulator.py +0 -0
  166. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/android_netsim.py +0 -0
  167. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/file.py +0 -0
  168. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/__init__.py +0 -0
  169. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/emulated_bluetooth_device_pb2.py +0 -0
  170. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/emulated_bluetooth_device_pb2.pyi +0 -0
  171. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/emulated_bluetooth_device_pb2_grpc.py +0 -0
  172. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/emulated_bluetooth_packets_pb2.py +0 -0
  173. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/emulated_bluetooth_packets_pb2.pyi +0 -0
  174. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/emulated_bluetooth_packets_pb2_grpc.py +0 -0
  175. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/emulated_bluetooth_pb2.py +0 -0
  176. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/emulated_bluetooth_pb2.pyi +0 -0
  177. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/emulated_bluetooth_pb2_grpc.py +0 -0
  178. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/emulated_bluetooth_vhci_pb2.py +0 -0
  179. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/emulated_bluetooth_vhci_pb2.pyi +0 -0
  180. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/emulated_bluetooth_vhci_pb2_grpc.py +0 -0
  181. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/grpc_endpoint_description_pb2.py +0 -0
  182. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/grpc_endpoint_description_pb2.pyi +0 -0
  183. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/grpc_endpoint_description_pb2_grpc.py +0 -0
  184. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/netsim/__init__.py +0 -0
  185. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/netsim/common_pb2.py +0 -0
  186. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/netsim/common_pb2.pyi +0 -0
  187. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/netsim/common_pb2_grpc.py +0 -0
  188. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/netsim/hci_packet_pb2.py +0 -0
  189. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/netsim/hci_packet_pb2.pyi +0 -0
  190. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/netsim/hci_packet_pb2_grpc.py +0 -0
  191. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/netsim/model_pb2.py +0 -0
  192. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/netsim/model_pb2.pyi +0 -0
  193. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/netsim/model_pb2_grpc.py +0 -0
  194. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/netsim/packet_streamer_pb2.py +0 -0
  195. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/netsim/packet_streamer_pb2.pyi +0 -0
  196. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/netsim/packet_streamer_pb2_grpc.py +0 -0
  197. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/netsim/startup_pb2.py +0 -0
  198. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/netsim/startup_pb2.pyi +0 -0
  199. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/netsim/startup_pb2_grpc.py +0 -0
  200. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/rootcanal/__init__.py +0 -0
  201. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/rootcanal/configuration_pb2.py +0 -0
  202. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/rootcanal/configuration_pb2.pyi +0 -0
  203. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/grpc_protobuf/rootcanal/configuration_pb2_grpc.py +0 -0
  204. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/hci_socket.py +0 -0
  205. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/pty.py +0 -0
  206. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/py.typed +0 -0
  207. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/pyusb.py +0 -0
  208. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/serial.py +0 -0
  209. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/tcp_client.py +0 -0
  210. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/tcp_server.py +0 -0
  211. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/udp.py +0 -0
  212. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/unix.py +0 -0
  213. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/usb.py +0 -0
  214. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/vhci.py +0 -0
  215. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/ws_client.py +0 -0
  216. {bumble-0.0.201 → bumble-0.0.203}/bumble/transport/ws_server.py +0 -0
  217. {bumble-0.0.201 → bumble-0.0.203}/bumble/utils.py +0 -0
  218. {bumble-0.0.201 → bumble-0.0.203}/bumble/vendor/__init__.py +0 -0
  219. {bumble-0.0.201 → bumble-0.0.203}/bumble/vendor/android/__init__.py +0 -0
  220. {bumble-0.0.201 → bumble-0.0.203}/bumble/vendor/android/hci.py +0 -0
  221. {bumble-0.0.201 → bumble-0.0.203}/bumble/vendor/zephyr/__init__.py +0 -0
  222. {bumble-0.0.201 → bumble-0.0.203}/bumble/vendor/zephyr/hci.py +0 -0
  223. {bumble-0.0.201 → bumble-0.0.203}/bumble.egg-info/dependency_links.txt +0 -0
  224. {bumble-0.0.201 → bumble-0.0.203}/bumble.egg-info/entry_points.txt +0 -0
  225. {bumble-0.0.201 → bumble-0.0.203}/bumble.egg-info/top_level.txt +0 -0
  226. {bumble-0.0.201 → bumble-0.0.203}/docs/README.md +0 -0
  227. {bumble-0.0.201 → bumble-0.0.203}/docs/images/favicon.ico +0 -0
  228. {bumble-0.0.201 → bumble-0.0.203}/docs/images/logo.png +0 -0
  229. {bumble-0.0.201 → bumble-0.0.203}/docs/images/logo.svg +0 -0
  230. {bumble-0.0.201 → bumble-0.0.203}/docs/images/logo.vectornator/Artboard0.json +0 -0
  231. {bumble-0.0.201 → bumble-0.0.203}/docs/images/logo.vectornator/Document.json +0 -0
  232. {bumble-0.0.201 → bumble-0.0.203}/docs/images/logo.vectornator/Manifest.json +0 -0
  233. {bumble-0.0.201 → bumble-0.0.203}/docs/images/logo.vectornator/Thumbnail.png +0 -0
  234. {bumble-0.0.201 → bumble-0.0.203}/docs/images/logo.vectornator/UndoHistory.json +0 -0
  235. {bumble-0.0.201 → bumble-0.0.203}/docs/images/logo_framed.png +0 -0
  236. {bumble-0.0.201 → bumble-0.0.203}/docs/images/logo_framed.svg +0 -0
  237. {bumble-0.0.201 → bumble-0.0.203}/docs/images/logo_framed.vectornator/Artboard0.json +0 -0
  238. {bumble-0.0.201 → bumble-0.0.203}/docs/images/logo_framed.vectornator/Document.json +0 -0
  239. {bumble-0.0.201 → bumble-0.0.203}/docs/images/logo_framed.vectornator/Manifest.json +0 -0
  240. {bumble-0.0.201 → bumble-0.0.203}/docs/images/logo_framed.vectornator/Thumbnail.png +0 -0
  241. {bumble-0.0.201 → bumble-0.0.203}/docs/images/logo_framed.vectornator/UndoHistory.json +0 -0
  242. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/mkdocs.yml +0 -0
  243. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/requirements.txt +0 -0
  244. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/api/examples.md +0 -0
  245. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/api/guide.md +0 -0
  246. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/api/reference.md +0 -0
  247. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/apps_and_tools/console.md +0 -0
  248. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/apps_and_tools/gatt_dump.md +0 -0
  249. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/apps_and_tools/gg_bridge.md +0 -0
  250. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/apps_and_tools/hci_bridge.md +0 -0
  251. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/apps_and_tools/index.md +0 -0
  252. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/apps_and_tools/link_relay.md +0 -0
  253. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/apps_and_tools/pair.md +0 -0
  254. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/apps_and_tools/show.md +0 -0
  255. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/apps_and_tools/speaker.md +0 -0
  256. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/apps_and_tools/unbond.md +0 -0
  257. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/apps_and_tools/usb_probe.md +0 -0
  258. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/components/controller.md +0 -0
  259. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/components/gatt.md +0 -0
  260. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/components/host.md +0 -0
  261. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/components/security_manager.md +0 -0
  262. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/development/code_style.md +0 -0
  263. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/development/contributing.md +0 -0
  264. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/development/python_environments.md +0 -0
  265. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/downloads/zephyr/hci_usb.zip +0 -0
  266. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/drivers/index.md +0 -0
  267. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/drivers/realtek.md +0 -0
  268. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/examples/index.md +0 -0
  269. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/extras/android_bt_bench.md +0 -0
  270. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/extras/android_remote_hci.md +0 -0
  271. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/extras/index.md +0 -0
  272. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/hardware/index.md +0 -0
  273. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/hive/index.md +0 -0
  274. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/hive/index.toml +0 -0
  275. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/hive/web/bumble.js +0 -0
  276. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/hive/web/heart_rate_monitor/heart_rate_monitor.html +0 -0
  277. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/hive/web/heart_rate_monitor/heart_rate_monitor.js +0 -0
  278. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/hive/web/heart_rate_monitor/heart_rate_monitor.py +0 -0
  279. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/hive/web/scanner/scanner.css +0 -0
  280. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/hive/web/scanner/scanner.html +0 -0
  281. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/hive/web/scanner/scanner.js +0 -0
  282. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/hive/web/scanner/scanner.py +0 -0
  283. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/hive/web/speaker/logo.svg +0 -0
  284. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/hive/web/speaker/speaker.css +0 -0
  285. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/hive/web/speaker/speaker.html +0 -0
  286. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/hive/web/speaker/speaker.js +0 -0
  287. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/hive/web/speaker/speaker.py +0 -0
  288. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/hive/web/ui.js +0 -0
  289. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/images/bumble_layers.svg +0 -0
  290. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/images/console_screenshot.png +0 -0
  291. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/images/favicon.ico +0 -0
  292. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/images/logo.png +0 -0
  293. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/images/logo_framed.png +0 -0
  294. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/images/speaker_screenshot.png +0 -0
  295. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/platforms/android.md +0 -0
  296. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/platforms/linux.md +0 -0
  297. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/platforms/macos.md +0 -0
  298. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/platforms/windows.md +0 -0
  299. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/platforms/winusb_driver.png +0 -0
  300. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/platforms/zephyr.md +0 -0
  301. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/transports/android_emulator.md +0 -0
  302. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/transports/file.md +0 -0
  303. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/transports/hci_socket.md +0 -0
  304. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/transports/index.md +0 -0
  305. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/transports/pty.md +0 -0
  306. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/transports/serial.md +0 -0
  307. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/transports/tcp_client.md +0 -0
  308. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/transports/tcp_server.md +0 -0
  309. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/transports/udp.md +0 -0
  310. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/transports/usb.md +0 -0
  311. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/transports/vhci.md +0 -0
  312. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/transports/ws_client.md +0 -0
  313. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/transports/ws_server.md +0 -0
  314. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/use_cases/index.md +0 -0
  315. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/use_cases/use_case_1.md +0 -0
  316. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/use_cases/use_case_2.md +0 -0
  317. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/use_cases/use_case_3.md +0 -0
  318. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/use_cases/use_case_4.md +0 -0
  319. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/use_cases/use_case_5.md +0 -0
  320. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/src/use_cases/use_case_6.md +0 -0
  321. {bumble-0.0.201 → bumble-0.0.203}/docs/mkdocs/theme/partials/footer.html +0 -0
  322. {bumble-0.0.201 → bumble-0.0.203}/examples/README.md +0 -0
  323. {bumble-0.0.201 → bumble-0.0.203}/examples/a2dp_sink1.json +0 -0
  324. {bumble-0.0.201 → bumble-0.0.203}/examples/asha_sink.html +0 -0
  325. {bumble-0.0.201 → bumble-0.0.203}/examples/asha_sink1.json +0 -0
  326. {bumble-0.0.201 → bumble-0.0.203}/examples/asha_sink2.json +0 -0
  327. {bumble-0.0.201 → bumble-0.0.203}/examples/async_runner.py +0 -0
  328. {bumble-0.0.201 → bumble-0.0.203}/examples/avrcp_as_sink.html +0 -0
  329. {bumble-0.0.201 → bumble-0.0.203}/examples/battery_client.py +0 -0
  330. {bumble-0.0.201 → bumble-0.0.203}/examples/battery_server.py +0 -0
  331. {bumble-0.0.201 → bumble-0.0.203}/examples/classic1.json +0 -0
  332. {bumble-0.0.201 → bumble-0.0.203}/examples/classic2.json +0 -0
  333. {bumble-0.0.201 → bumble-0.0.203}/examples/device1.json +0 -0
  334. {bumble-0.0.201 → bumble-0.0.203}/examples/device2.json +0 -0
  335. {bumble-0.0.201 → bumble-0.0.203}/examples/device3.json +0 -0
  336. {bumble-0.0.201 → bumble-0.0.203}/examples/device_information_client.py +0 -0
  337. {bumble-0.0.201 → bumble-0.0.203}/examples/device_information_server.py +0 -0
  338. {bumble-0.0.201 → bumble-0.0.203}/examples/device_with_rpa.json +0 -0
  339. {bumble-0.0.201 → bumble-0.0.203}/examples/heart_rate_client.py +0 -0
  340. {bumble-0.0.201 → bumble-0.0.203}/examples/heart_rate_server.py +0 -0
  341. {bumble-0.0.201 → bumble-0.0.203}/examples/hfp_gateway.html +0 -0
  342. {bumble-0.0.201 → bumble-0.0.203}/examples/hfp_gateway.json +0 -0
  343. {bumble-0.0.201 → bumble-0.0.203}/examples/hfp_handsfree.html +0 -0
  344. {bumble-0.0.201 → bumble-0.0.203}/examples/hfp_handsfree.json +0 -0
  345. {bumble-0.0.201 → bumble-0.0.203}/examples/hid_key_map.py +0 -0
  346. {bumble-0.0.201 → bumble-0.0.203}/examples/hid_keyboard.json +0 -0
  347. {bumble-0.0.201 → bumble-0.0.203}/examples/hid_report_parser.py +0 -0
  348. {bumble-0.0.201 → bumble-0.0.203}/examples/keyboard.html +0 -0
  349. {bumble-0.0.201 → bumble-0.0.203}/examples/keyboard.json +0 -0
  350. {bumble-0.0.201 → bumble-0.0.203}/examples/keyboard.py +0 -0
  351. {bumble-0.0.201 → bumble-0.0.203}/examples/leaudio.json +0 -0
  352. {bumble-0.0.201 → bumble-0.0.203}/examples/leaudio_with_classic.json +0 -0
  353. {bumble-0.0.201 → bumble-0.0.203}/examples/mcp_server.html +0 -0
  354. {bumble-0.0.201 → bumble-0.0.203}/examples/run_a2dp_info.py +0 -0
  355. {bumble-0.0.201 → bumble-0.0.203}/examples/run_a2dp_sink.py +0 -0
  356. {bumble-0.0.201 → bumble-0.0.203}/examples/run_a2dp_source.py +0 -0
  357. {bumble-0.0.201 → bumble-0.0.203}/examples/run_advertiser.py +0 -0
  358. {bumble-0.0.201 → bumble-0.0.203}/examples/run_asha_sink.py +0 -0
  359. {bumble-0.0.201 → bumble-0.0.203}/examples/run_avrcp.py +0 -0
  360. {bumble-0.0.201 → bumble-0.0.203}/examples/run_cig_setup.py +0 -0
  361. {bumble-0.0.201 → bumble-0.0.203}/examples/run_classic_connect.py +0 -0
  362. {bumble-0.0.201 → bumble-0.0.203}/examples/run_classic_discoverable.py +0 -0
  363. {bumble-0.0.201 → bumble-0.0.203}/examples/run_classic_discovery.py +0 -0
  364. {bumble-0.0.201 → bumble-0.0.203}/examples/run_connect_and_encrypt.py +0 -0
  365. {bumble-0.0.201 → bumble-0.0.203}/examples/run_controller.py +0 -0
  366. {bumble-0.0.201 → bumble-0.0.203}/examples/run_controller_with_scanner.py +0 -0
  367. {bumble-0.0.201 → bumble-0.0.203}/examples/run_csis_servers.py +0 -0
  368. {bumble-0.0.201 → bumble-0.0.203}/examples/run_device_with_snooper.py +0 -0
  369. {bumble-0.0.201 → bumble-0.0.203}/examples/run_esco_connection.py +0 -0
  370. {bumble-0.0.201 → bumble-0.0.203}/examples/run_extended_advertiser.py +0 -0
  371. {bumble-0.0.201 → bumble-0.0.203}/examples/run_gatt_client.py +0 -0
  372. {bumble-0.0.201 → bumble-0.0.203}/examples/run_gatt_client_and_server.py +0 -0
  373. {bumble-0.0.201 → bumble-0.0.203}/examples/run_gatt_server.py +0 -0
  374. {bumble-0.0.201 → bumble-0.0.203}/examples/run_hap_server.py +0 -0
  375. {bumble-0.0.201 → bumble-0.0.203}/examples/run_hid_device.py +0 -0
  376. {bumble-0.0.201 → bumble-0.0.203}/examples/run_hid_host.py +0 -0
  377. {bumble-0.0.201 → bumble-0.0.203}/examples/run_mcp_client.py +0 -0
  378. {bumble-0.0.201 → bumble-0.0.203}/examples/run_notifier.py +0 -0
  379. {bumble-0.0.201 → bumble-0.0.203}/examples/run_rfcomm_client.py +0 -0
  380. {bumble-0.0.201 → bumble-0.0.203}/examples/run_rfcomm_server.py +0 -0
  381. {bumble-0.0.201 → bumble-0.0.203}/examples/run_scanner.py +0 -0
  382. {bumble-0.0.201 → bumble-0.0.203}/examples/run_vcp_renderer.py +0 -0
  383. {bumble-0.0.201 → bumble-0.0.203}/examples/speaker.json +0 -0
  384. {bumble-0.0.201 → bumble-0.0.203}/examples/vcp_renderer.html +0 -0
  385. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/.gitignore +0 -0
  386. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/.gitignore +0 -0
  387. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/proguard-rules.pro +0 -0
  388. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/ic_launcher-playstore.png +0 -0
  389. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/ui/theme/Color.kt +0 -0
  390. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/ui/theme/Theme.kt +0 -0
  391. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/ui/theme/Type.kt +0 -0
  392. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/res/drawable/ic_launcher_background.xml +0 -0
  393. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/res/drawable/ic_launcher_foreground.xml +0 -0
  394. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
  395. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
  396. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp +0 -0
  397. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
  398. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp +0 -0
  399. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
  400. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp +0 -0
  401. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
  402. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp +0 -0
  403. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
  404. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp +0 -0
  405. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
  406. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/res/values/colors.xml +0 -0
  407. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/res/values/ic_launcher_background.xml +0 -0
  408. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/res/values/strings.xml +0 -0
  409. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/res/values/themes.xml +0 -0
  410. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/res/xml/backup_rules.xml +0 -0
  411. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/app/src/main/res/xml/data_extraction_rules.xml +0 -0
  412. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/build.gradle.kts +0 -0
  413. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/gradle/wrapper/gradle-wrapper.jar +0 -0
  414. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/gradle.properties +0 -0
  415. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/gradlew +0 -0
  416. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/gradlew.bat +0 -0
  417. {bumble-0.0.201 → bumble-0.0.203}/extras/android/BtBench/settings.gradle.kts +0 -0
  418. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/.gitignore +0 -0
  419. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/.gitignore +0 -0
  420. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/build.gradle.kts +0 -0
  421. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/proguard-rules.pro +0 -0
  422. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/AndroidManifest.xml +0 -0
  423. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/aidl/android/hardware/bluetooth/IBluetoothHci.aidl +0 -0
  424. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/aidl/android/hardware/bluetooth/IBluetoothHciCallbacks.aidl +0 -0
  425. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/aidl/android/hardware/bluetooth/Status.aidl +0 -0
  426. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/hidl/bluetooth/1.1/IBluetoothHci.hal +0 -0
  427. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/hidl/bluetooth/1.1/IBluetoothHciCallbacks.hal +0 -0
  428. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/ic_launcher-playstore.png +0 -0
  429. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/IBluetoothHci.java +0 -0
  430. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/IBluetoothHciCallbacks.java +0 -0
  431. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/Status.java +0 -0
  432. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_0/IBluetoothHci.java +0 -0
  433. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_0/IBluetoothHciCallbacks.java +0 -0
  434. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_0/Status.java +0 -0
  435. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_1/IBluetoothHci.java +0 -0
  436. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_1/IBluetoothHciCallbacks.java +0 -0
  437. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/CommandLineInterface.kt +0 -0
  438. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciHal.java +0 -0
  439. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciHalCallback.java +0 -0
  440. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciPacket.java +0 -0
  441. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciParser.java +0 -0
  442. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciServer.java +0 -0
  443. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/MainActivity.kt +0 -0
  444. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/ui/theme/Color.kt +0 -0
  445. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/ui/theme/Theme.kt +0 -0
  446. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/ui/theme/Type.kt +0 -0
  447. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
  448. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
  449. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
  450. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp +0 -0
  451. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
  452. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
  453. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp +0 -0
  454. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
  455. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
  456. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp +0 -0
  457. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
  458. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
  459. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp +0 -0
  460. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
  461. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
  462. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp +0 -0
  463. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
  464. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/values/colors.xml +0 -0
  465. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/values/ic_launcher_background.xml +0 -0
  466. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/values/strings.xml +0 -0
  467. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/values/themes.xml +0 -0
  468. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/xml/backup_rules.xml +0 -0
  469. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/app/src/main/res/xml/data_extraction_rules.xml +0 -0
  470. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/build.gradle.kts +0 -0
  471. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/gradle/libs.versions.toml +0 -0
  472. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/gradle/wrapper/gradle-wrapper.jar +0 -0
  473. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/gradle/wrapper/gradle-wrapper.properties +0 -0
  474. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/gradle.properties +0 -0
  475. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/gradlew +0 -0
  476. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/gradlew.bat +0 -0
  477. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/lib/.gitignore +0 -0
  478. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/lib/build.gradle.kts +0 -0
  479. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/lib/consumer-rules.pro +0 -0
  480. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/lib/proguard-rules.pro +0 -0
  481. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/lib/src/main/AndroidManifest.xml +0 -0
  482. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/lib/src/main/java/android/internal/hidl/base/V1_0/DebugInfo.java +0 -0
  483. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/lib/src/main/java/android/internal/hidl/base/V1_0/IBase.java +0 -0
  484. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/lib/src/main/java/android/os/HidlSupport.java +0 -0
  485. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/lib/src/main/java/android/os/HwBinder.java +0 -0
  486. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/lib/src/main/java/android/os/HwBlob.java +0 -0
  487. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/lib/src/main/java/android/os/HwParcel.java +0 -0
  488. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/lib/src/main/java/android/os/IHwBinder.java +0 -0
  489. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/lib/src/main/java/android/os/IHwInterface.java +0 -0
  490. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/lib/src/main/java/android/os/NativeHandle.java +0 -0
  491. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/lib/src/main/java/android/os/ServiceManager.java +0 -0
  492. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/scripts/generate_java_from_aidl.sh +0 -0
  493. {bumble-0.0.201 → bumble-0.0.203}/extras/android/RemoteHCI/settings.gradle.kts +0 -0
  494. {bumble-0.0.201 → bumble-0.0.203}/noxfile.py +0 -0
  495. {bumble-0.0.201 → bumble-0.0.203}/rust/.gitignore +0 -0
  496. {bumble-0.0.201 → bumble-0.0.203}/rust/CHANGELOG.md +0 -0
  497. {bumble-0.0.201 → bumble-0.0.203}/rust/Cargo.lock +0 -0
  498. {bumble-0.0.201 → bumble-0.0.203}/rust/Cargo.toml +0 -0
  499. {bumble-0.0.201 → bumble-0.0.203}/rust/README.md +0 -0
  500. {bumble-0.0.201 → bumble-0.0.203}/rust/examples/battery_client.rs +0 -0
  501. {bumble-0.0.201 → bumble-0.0.203}/rust/examples/broadcast.rs +0 -0
  502. {bumble-0.0.201 → bumble-0.0.203}/rust/examples/scanner.rs +0 -0
  503. {bumble-0.0.201 → bumble-0.0.203}/rust/pytests/assigned_numbers.rs +0 -0
  504. {bumble-0.0.201 → bumble-0.0.203}/rust/pytests/pytests.rs +0 -0
  505. {bumble-0.0.201 → bumble-0.0.203}/rust/pytests/wrapper/drivers.rs +0 -0
  506. {bumble-0.0.201 → bumble-0.0.203}/rust/pytests/wrapper/hci.rs +0 -0
  507. {bumble-0.0.201 → bumble-0.0.203}/rust/pytests/wrapper/mod.rs +0 -0
  508. {bumble-0.0.201 → bumble-0.0.203}/rust/pytests/wrapper/transport.rs +0 -0
  509. {bumble-0.0.201 → bumble-0.0.203}/rust/resources/test/firmware/realtek/README.md +0 -0
  510. {bumble-0.0.201 → bumble-0.0.203}/rust/resources/test/firmware/realtek/rtl8723b_fw_structure.bin +0 -0
  511. {bumble-0.0.201 → bumble-0.0.203}/rust/resources/test/firmware/realtek/rtl8761bu_fw_structure.bin +0 -0
  512. {bumble-0.0.201 → bumble-0.0.203}/rust/src/adv.rs +0 -0
  513. {bumble-0.0.201 → bumble-0.0.203}/rust/src/cli/firmware/mod.rs +0 -0
  514. {bumble-0.0.201 → bumble-0.0.203}/rust/src/cli/firmware/rtk.rs +0 -0
  515. {bumble-0.0.201 → bumble-0.0.203}/rust/src/cli/l2cap/client_bridge.rs +0 -0
  516. {bumble-0.0.201 → bumble-0.0.203}/rust/src/cli/l2cap/mod.rs +0 -0
  517. {bumble-0.0.201 → bumble-0.0.203}/rust/src/cli/l2cap/server_bridge.rs +0 -0
  518. {bumble-0.0.201 → bumble-0.0.203}/rust/src/cli/mod.rs +0 -0
  519. {bumble-0.0.201 → bumble-0.0.203}/rust/src/cli/usb/mod.rs +0 -0
  520. {bumble-0.0.201 → bumble-0.0.203}/rust/src/internal/drivers/mod.rs +0 -0
  521. {bumble-0.0.201 → bumble-0.0.203}/rust/src/internal/drivers/rtk.rs +0 -0
  522. {bumble-0.0.201 → bumble-0.0.203}/rust/src/internal/hci/mod.rs +0 -0
  523. {bumble-0.0.201 → bumble-0.0.203}/rust/src/internal/hci/packets.pdl +0 -0
  524. {bumble-0.0.201 → bumble-0.0.203}/rust/src/internal/hci/tests.rs +0 -0
  525. {bumble-0.0.201 → bumble-0.0.203}/rust/src/internal/mod.rs +0 -0
  526. {bumble-0.0.201 → bumble-0.0.203}/rust/src/lib.rs +0 -0
  527. {bumble-0.0.201 → bumble-0.0.203}/rust/src/main.rs +0 -0
  528. {bumble-0.0.201 → bumble-0.0.203}/rust/src/wrapper/assigned_numbers/company_ids.rs +0 -0
  529. {bumble-0.0.201 → bumble-0.0.203}/rust/src/wrapper/assigned_numbers/mod.rs +0 -0
  530. {bumble-0.0.201 → bumble-0.0.203}/rust/src/wrapper/assigned_numbers/services.rs +0 -0
  531. {bumble-0.0.201 → bumble-0.0.203}/rust/src/wrapper/common.rs +0 -0
  532. {bumble-0.0.201 → bumble-0.0.203}/rust/src/wrapper/controller.rs +0 -0
  533. {bumble-0.0.201 → bumble-0.0.203}/rust/src/wrapper/core.rs +0 -0
  534. {bumble-0.0.201 → bumble-0.0.203}/rust/src/wrapper/device/mod.rs +0 -0
  535. {bumble-0.0.201 → bumble-0.0.203}/rust/src/wrapper/device/tests.rs +0 -0
  536. {bumble-0.0.201 → bumble-0.0.203}/rust/src/wrapper/drivers/mod.rs +0 -0
  537. {bumble-0.0.201 → bumble-0.0.203}/rust/src/wrapper/drivers/rtk.rs +0 -0
  538. {bumble-0.0.201 → bumble-0.0.203}/rust/src/wrapper/gatt_client.rs +0 -0
  539. {bumble-0.0.201 → bumble-0.0.203}/rust/src/wrapper/host.rs +0 -0
  540. {bumble-0.0.201 → bumble-0.0.203}/rust/src/wrapper/l2cap.rs +0 -0
  541. {bumble-0.0.201 → bumble-0.0.203}/rust/src/wrapper/link.rs +0 -0
  542. {bumble-0.0.201 → bumble-0.0.203}/rust/src/wrapper/logging.rs +0 -0
  543. {bumble-0.0.201 → bumble-0.0.203}/rust/src/wrapper/mod.rs +0 -0
  544. {bumble-0.0.201 → bumble-0.0.203}/rust/src/wrapper/profile.rs +0 -0
  545. {bumble-0.0.201 → bumble-0.0.203}/rust/src/wrapper/transport.rs +0 -0
  546. {bumble-0.0.201 → bumble-0.0.203}/rust/tools/file_header.rs +0 -0
  547. {bumble-0.0.201 → bumble-0.0.203}/rust/tools/gen_assigned_numbers.rs +0 -0
  548. {bumble-0.0.201 → bumble-0.0.203}/scripts/process_android_emulator_protos.sh +0 -0
  549. {bumble-0.0.201 → bumble-0.0.203}/scripts/process_android_netsim_protos.sh +0 -0
  550. {bumble-0.0.201 → bumble-0.0.203}/setup.py +0 -0
  551. {bumble-0.0.201 → bumble-0.0.203}/tasks.py +0 -0
  552. {bumble-0.0.201 → bumble-0.0.203}/tests/__init__.py +0 -0
  553. {bumble-0.0.201 → bumble-0.0.203}/tests/a2dp_test.py +0 -0
  554. {bumble-0.0.201 → bumble-0.0.203}/tests/aics_test.py +0 -0
  555. {bumble-0.0.201 → bumble-0.0.203}/tests/asha_test.py +0 -0
  556. {bumble-0.0.201 → bumble-0.0.203}/tests/at_test.py +0 -0
  557. {bumble-0.0.201 → bumble-0.0.203}/tests/avdtp_test.py +0 -0
  558. {bumble-0.0.201 → bumble-0.0.203}/tests/avrcp_test.py +0 -0
  559. {bumble-0.0.201 → bumble-0.0.203}/tests/bass_test.py +0 -0
  560. {bumble-0.0.201 → bumble-0.0.203}/tests/cap_test.py +0 -0
  561. {bumble-0.0.201 → bumble-0.0.203}/tests/codecs_test.py +0 -0
  562. {bumble-0.0.201 → bumble-0.0.203}/tests/core_test.py +0 -0
  563. {bumble-0.0.201 → bumble-0.0.203}/tests/csip_test.py +0 -0
  564. {bumble-0.0.201 → bumble-0.0.203}/tests/decoder_test.py +0 -0
  565. {bumble-0.0.201 → bumble-0.0.203}/tests/g722_sample.g722 +0 -0
  566. {bumble-0.0.201 → bumble-0.0.203}/tests/hap_test.py +0 -0
  567. {bumble-0.0.201 → bumble-0.0.203}/tests/hci_data_001.bin +0 -0
  568. {bumble-0.0.201 → bumble-0.0.203}/tests/host_test.py +0 -0
  569. {bumble-0.0.201 → bumble-0.0.203}/tests/import_test.py +0 -0
  570. {bumble-0.0.201 → bumble-0.0.203}/tests/keystore_test.py +0 -0
  571. {bumble-0.0.201 → bumble-0.0.203}/tests/l2cap_test.py +0 -0
  572. {bumble-0.0.201 → bumble-0.0.203}/tests/le_audio_test.py +0 -0
  573. {bumble-0.0.201 → bumble-0.0.203}/tests/mcp_test.py +0 -0
  574. {bumble-0.0.201 → bumble-0.0.203}/tests/pytest.ini +0 -0
  575. {bumble-0.0.201 → bumble-0.0.203}/tests/rfcomm_test.py +0 -0
  576. {bumble-0.0.201 → bumble-0.0.203}/tests/sdp_test.py +0 -0
  577. {bumble-0.0.201 → bumble-0.0.203}/tests/smp_test.py +0 -0
  578. {bumble-0.0.201 → bumble-0.0.203}/tests/test_utils.py +0 -0
  579. {bumble-0.0.201 → bumble-0.0.203}/tests/transport_tcp_server_test.py +0 -0
  580. {bumble-0.0.201 → bumble-0.0.203}/tests/transport_test.py +0 -0
  581. {bumble-0.0.201 → bumble-0.0.203}/tests/utils_test.py +0 -0
  582. {bumble-0.0.201 → bumble-0.0.203}/tests/vcp_test.py +0 -0
  583. {bumble-0.0.201 → bumble-0.0.203}/tools/__init__.py +0 -0
  584. {bumble-0.0.201 → bumble-0.0.203}/tools/generate_company_id_list.py +0 -0
  585. {bumble-0.0.201 → bumble-0.0.203}/tools/rtk_fw_download.py +0 -0
  586. {bumble-0.0.201 → bumble-0.0.203}/tools/rtk_util.py +0 -0
  587. {bumble-0.0.201 → bumble-0.0.203}/web/.gitignore +0 -0
  588. {bumble-0.0.201 → bumble-0.0.203}/web/README.md +0 -0
  589. {bumble-0.0.201 → bumble-0.0.203}/web/bumble.js +0 -0
  590. {bumble-0.0.201 → bumble-0.0.203}/web/favicon.ico +0 -0
  591. {bumble-0.0.201 → bumble-0.0.203}/web/heart_rate_monitor/heart_rate_monitor.html +0 -0
  592. {bumble-0.0.201 → bumble-0.0.203}/web/heart_rate_monitor/heart_rate_monitor.js +0 -0
  593. {bumble-0.0.201 → bumble-0.0.203}/web/heart_rate_monitor/heart_rate_monitor.py +0 -0
  594. {bumble-0.0.201 → bumble-0.0.203}/web/scanner/scanner.css +0 -0
  595. {bumble-0.0.201 → bumble-0.0.203}/web/scanner/scanner.html +0 -0
  596. {bumble-0.0.201 → bumble-0.0.203}/web/scanner/scanner.js +0 -0
  597. {bumble-0.0.201 → bumble-0.0.203}/web/scanner/scanner.py +0 -0
  598. {bumble-0.0.201 → bumble-0.0.203}/web/speaker/logo.svg +0 -0
  599. {bumble-0.0.201 → bumble-0.0.203}/web/speaker/speaker.css +0 -0
  600. {bumble-0.0.201 → bumble-0.0.203}/web/speaker/speaker.html +0 -0
  601. {bumble-0.0.201 → bumble-0.0.203}/web/speaker/speaker.js +0 -0
  602. {bumble-0.0.201 → bumble-0.0.203}/web/speaker/speaker.py +0 -0
  603. {bumble-0.0.201 → bumble-0.0.203}/web/ui.js +0 -0
@@ -16,7 +16,7 @@ jobs:
16
16
  runs-on: ubuntu-latest
17
17
  strategy:
18
18
  matrix:
19
- python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
19
+ python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
20
20
  fail-fast: false
21
21
 
22
22
  steps:
@@ -16,7 +16,7 @@ jobs:
16
16
  strategy:
17
17
  matrix:
18
18
  os: ['ubuntu-latest', 'macos-latest', 'windows-latest']
19
- python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
19
+ python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
20
20
  fail-fast: false
21
21
 
22
22
  steps:
@@ -46,7 +46,7 @@ jobs:
46
46
  runs-on: ubuntu-latest
47
47
  strategy:
48
48
  matrix:
49
- python-version: [ "3.8", "3.9", "3.10", "3.11", "3.12" ]
49
+ python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
50
50
  rust-version: [ "1.76.0", "stable" ]
51
51
  fail-fast: false
52
52
  steps:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: bumble
3
- Version: 0.0.201
3
+ Version: 0.0.203
4
4
  Summary: Bluetooth Stack for Apps, Emulation, Test and Experimentation
5
5
  Home-page: https://github.com/google/bumble
6
6
  Author: Google
@@ -25,7 +25,7 @@ Requires-Dist: pyee>=8.2.2
25
25
  Requires-Dist: pyserial-asyncio>=0.5; platform_system != "Emscripten"
26
26
  Requires-Dist: pyserial>=3.5; platform_system != "Emscripten"
27
27
  Requires-Dist: pyusb>=1.2; platform_system != "Emscripten"
28
- Requires-Dist: websockets>=12.0; platform_system != "Emscripten"
28
+ Requires-Dist: websockets==13.1; platform_system != "Emscripten"
29
29
  Provides-Extra: build
30
30
  Requires-Dist: build>=0.7; extra == "build"
31
31
  Provides-Extra: test
@@ -37,9 +37,10 @@ Provides-Extra: development
37
37
  Requires-Dist: black==24.3; extra == "development"
38
38
  Requires-Dist: grpcio-tools>=1.62.1; extra == "development"
39
39
  Requires-Dist: invoke>=1.7.3; extra == "development"
40
- Requires-Dist: mypy==1.10.0; extra == "development"
40
+ Requires-Dist: mobly>=1.12.2; extra == "development"
41
+ Requires-Dist: mypy==1.12.0; extra == "development"
41
42
  Requires-Dist: nox>=2022; extra == "development"
42
- Requires-Dist: pylint==3.1.0; extra == "development"
43
+ Requires-Dist: pylint==3.3.1; extra == "development"
43
44
  Requires-Dist: pyyaml>=6.0; extra == "development"
44
45
  Requires-Dist: types-appdirs>=1.4.3; extra == "development"
45
46
  Requires-Dist: types-invoke>=1.7.3; extra == "development"
@@ -60,7 +60,7 @@ AURACAST_DEFAULT_ATT_MTU = 256
60
60
  class BroadcastScanner(pyee.EventEmitter):
61
61
  @dataclasses.dataclass
62
62
  class Broadcast(pyee.EventEmitter):
63
- name: str
63
+ name: str | None
64
64
  sync: bumble.device.PeriodicAdvertisingSync
65
65
  rssi: int = 0
66
66
  public_broadcast_announcement: Optional[
@@ -135,7 +135,8 @@ class BroadcastScanner(pyee.EventEmitter):
135
135
  self.sync.advertiser_address,
136
136
  color(self.sync.state.name, 'green'),
137
137
  )
138
- print(f' {color("Name", "cyan")}: {self.name}')
138
+ if self.name is not None:
139
+ print(f' {color("Name", "cyan")}: {self.name}')
139
140
  if self.appearance:
140
141
  print(f' {color("Appearance", "cyan")}: {str(self.appearance)}')
141
142
  print(f' {color("RSSI", "cyan")}: {self.rssi}')
@@ -174,7 +175,7 @@ class BroadcastScanner(pyee.EventEmitter):
174
175
  print(color(' Codec ID:', 'yellow'))
175
176
  print(
176
177
  color(' Coding Format: ', 'green'),
177
- subgroup.codec_id.coding_format.name,
178
+ subgroup.codec_id.codec_id.name,
178
179
  )
179
180
  print(
180
181
  color(' Company ID: ', 'green'),
@@ -274,13 +275,24 @@ class BroadcastScanner(pyee.EventEmitter):
274
275
  await self.device.stop_scanning()
275
276
 
276
277
  def on_advertisement(self, advertisement: bumble.device.Advertisement) -> None:
277
- if (
278
- broadcast_name := advertisement.data.get(
279
- bumble.core.AdvertisingData.BROADCAST_NAME
278
+ if not (
279
+ ads := advertisement.data.get_all(
280
+ bumble.core.AdvertisingData.SERVICE_DATA_16_BIT_UUID
280
281
  )
281
- ) is None:
282
+ ) or not (
283
+ any(
284
+ ad
285
+ for ad in ads
286
+ if isinstance(ad, tuple)
287
+ and ad[0] == bumble.gatt.GATT_BROADCAST_AUDIO_ANNOUNCEMENT_SERVICE
288
+ )
289
+ ):
282
290
  return
283
- assert isinstance(broadcast_name, str)
291
+
292
+ broadcast_name = advertisement.data.get(
293
+ bumble.core.AdvertisingData.BROADCAST_NAME
294
+ )
295
+ assert isinstance(broadcast_name, str) or broadcast_name is None
284
296
 
285
297
  if broadcast := self.broadcasts.get(advertisement.address):
286
298
  broadcast.update(advertisement)
@@ -291,7 +303,7 @@ class BroadcastScanner(pyee.EventEmitter):
291
303
  )
292
304
 
293
305
  async def on_new_broadcast(
294
- self, name: str, advertisement: bumble.device.Advertisement
306
+ self, name: str | None, advertisement: bumble.device.Advertisement
295
307
  ) -> None:
296
308
  periodic_advertising_sync = await self.device.create_periodic_advertising_sync(
297
309
  advertiser_address=advertisement.address,
@@ -299,10 +311,7 @@ class BroadcastScanner(pyee.EventEmitter):
299
311
  sync_timeout=self.sync_timeout,
300
312
  filter_duplicates=self.filter_duplicates,
301
313
  )
302
- broadcast = self.Broadcast(
303
- name,
304
- periodic_advertising_sync,
305
- )
314
+ broadcast = self.Broadcast(name, periodic_advertising_sync)
306
315
  broadcast.update(advertisement)
307
316
  self.broadcasts[advertisement.address] = broadcast
308
317
  periodic_advertising_sync.on('loss', lambda: self.on_broadcast_loss(broadcast))
@@ -19,6 +19,7 @@ import asyncio
19
19
  import enum
20
20
  import logging
21
21
  import os
22
+ import statistics
22
23
  import struct
23
24
  import time
24
25
 
@@ -194,17 +195,19 @@ def make_sdp_records(channel):
194
195
  }
195
196
 
196
197
 
197
- def log_stats(title, stats):
198
+ def log_stats(title, stats, precision=2):
198
199
  stats_min = min(stats)
199
200
  stats_max = max(stats)
200
- stats_avg = sum(stats) / len(stats)
201
+ stats_avg = statistics.mean(stats)
202
+ stats_stdev = statistics.stdev(stats)
201
203
  logging.info(
202
204
  color(
203
205
  (
204
206
  f'### {title} stats: '
205
- f'min={stats_min:.2f}, '
206
- f'max={stats_max:.2f}, '
207
- f'average={stats_avg:.2f}'
207
+ f'min={stats_min:.{precision}f}, '
208
+ f'max={stats_max:.{precision}f}, '
209
+ f'average={stats_avg:.{precision}f}, '
210
+ f'stdev={stats_stdev:.{precision}f}'
208
211
  ),
209
212
  'cyan',
210
213
  )
@@ -448,9 +451,9 @@ class Ping:
448
451
  self.repeat_delay = repeat_delay
449
452
  self.pace = pace
450
453
  self.done = asyncio.Event()
451
- self.current_packet_index = 0
452
- self.ping_sent_time = 0.0
453
- self.latencies = []
454
+ self.ping_times = []
455
+ self.rtts = []
456
+ self.next_expected_packet_index = 0
454
457
  self.min_stats = []
455
458
  self.max_stats = []
456
459
  self.avg_stats = []
@@ -477,60 +480,57 @@ class Ping:
477
480
  logging.info(color('=== Sending RESET', 'magenta'))
478
481
  await self.packet_io.send_packet(bytes([PacketType.RESET]))
479
482
 
480
- self.current_packet_index = 0
481
- self.latencies = []
482
- await self.send_next_ping()
483
+ packet_interval = self.pace / 1000
484
+ start_time = time.time()
485
+ self.next_expected_packet_index = 0
486
+ for i in range(self.tx_packet_count):
487
+ target_time = start_time + (i * packet_interval)
488
+ now = time.time()
489
+ if now < target_time:
490
+ await asyncio.sleep(target_time - now)
491
+
492
+ packet = struct.pack(
493
+ '>bbI',
494
+ PacketType.SEQUENCE,
495
+ (PACKET_FLAG_LAST if i == self.tx_packet_count - 1 else 0),
496
+ i,
497
+ ) + bytes(self.tx_packet_size - 6)
498
+ logging.info(color(f'Sending packet {i}', 'yellow'))
499
+ self.ping_times.append(time.time())
500
+ await self.packet_io.send_packet(packet)
483
501
 
484
502
  await self.done.wait()
485
503
 
486
- min_latency = min(self.latencies)
487
- max_latency = max(self.latencies)
488
- avg_latency = sum(self.latencies) / len(self.latencies)
504
+ min_rtt = min(self.rtts)
505
+ max_rtt = max(self.rtts)
506
+ avg_rtt = statistics.mean(self.rtts)
507
+ stdev_rtt = statistics.stdev(self.rtts)
489
508
  logging.info(
490
509
  color(
491
- '@@@ Latencies: '
492
- f'min={min_latency:.2f}, '
493
- f'max={max_latency:.2f}, '
494
- f'average={avg_latency:.2f}'
510
+ '@@@ RTTs: '
511
+ f'min={min_rtt:.2f}, '
512
+ f'max={max_rtt:.2f}, '
513
+ f'average={avg_rtt:.2f}, '
514
+ f'stdev={stdev_rtt:.2f}'
495
515
  )
496
516
  )
497
517
 
498
- self.min_stats.append(min_latency)
499
- self.max_stats.append(max_latency)
500
- self.avg_stats.append(avg_latency)
518
+ self.min_stats.append(min_rtt)
519
+ self.max_stats.append(max_rtt)
520
+ self.avg_stats.append(avg_rtt)
501
521
 
502
522
  run_counter = f'[{run + 1} of {self.repeat + 1}]' if self.repeat else ''
503
523
  logging.info(color(f'=== {run_counter} Done!', 'magenta'))
504
524
 
505
525
  if self.repeat:
506
- log_stats('Min Latency', self.min_stats)
507
- log_stats('Max Latency', self.max_stats)
508
- log_stats('Average Latency', self.avg_stats)
526
+ log_stats('Min RTT', self.min_stats)
527
+ log_stats('Max RTT', self.max_stats)
528
+ log_stats('Average RTT', self.avg_stats)
509
529
 
510
530
  if self.repeat:
511
531
  logging.info(color('--- End of runs', 'blue'))
512
532
 
513
- async def send_next_ping(self):
514
- if self.pace:
515
- await asyncio.sleep(self.pace / 1000)
516
-
517
- packet = struct.pack(
518
- '>bbI',
519
- PacketType.SEQUENCE,
520
- (
521
- PACKET_FLAG_LAST
522
- if self.current_packet_index == self.tx_packet_count - 1
523
- else 0
524
- ),
525
- self.current_packet_index,
526
- ) + bytes(self.tx_packet_size - 6)
527
- logging.info(color(f'Sending packet {self.current_packet_index}', 'yellow'))
528
- self.ping_sent_time = time.time()
529
- await self.packet_io.send_packet(packet)
530
-
531
533
  def on_packet_received(self, packet):
532
- elapsed = time.time() - self.ping_sent_time
533
-
534
534
  try:
535
535
  packet_type, packet_data = parse_packet(packet)
536
536
  except ValueError:
@@ -542,21 +542,23 @@ class Ping:
542
542
  return
543
543
 
544
544
  if packet_type == PacketType.ACK:
545
- latency = elapsed * 1000
546
- self.latencies.append(latency)
545
+ elapsed = time.time() - self.ping_times[packet_index]
546
+ rtt = elapsed * 1000
547
+ self.rtts.append(rtt)
547
548
  logging.info(
548
549
  color(
549
- f'<<< Received ACK [{packet_index}], latency={latency:.2f}ms',
550
+ f'<<< Received ACK [{packet_index}], RTT={rtt:.2f}ms',
550
551
  'green',
551
552
  )
552
553
  )
553
554
 
554
- if packet_index == self.current_packet_index:
555
- self.current_packet_index += 1
555
+ if packet_index == self.next_expected_packet_index:
556
+ self.next_expected_packet_index += 1
556
557
  else:
557
558
  logging.info(
558
559
  color(
559
- f'!!! Unexpected packet, expected {self.current_packet_index} '
560
+ f'!!! Unexpected packet, '
561
+ f'expected {self.next_expected_packet_index} '
560
562
  f'but received {packet_index}'
561
563
  )
562
564
  )
@@ -565,8 +567,6 @@ class Ping:
565
567
  self.done.set()
566
568
  return
567
569
 
568
- AsyncRunner.spawn(self.send_next_ping())
569
-
570
570
 
571
571
  # -----------------------------------------------------------------------------
572
572
  # Pong
@@ -583,8 +583,11 @@ class Pong:
583
583
 
584
584
  def reset(self):
585
585
  self.expected_packet_index = 0
586
+ self.receive_times = []
586
587
 
587
588
  def on_packet_received(self, packet):
589
+ self.receive_times.append(time.time())
590
+
588
591
  try:
589
592
  packet_type, packet_data = parse_packet(packet)
590
593
  except ValueError:
@@ -599,10 +602,16 @@ class Pong:
599
602
  packet_flags, packet_index = parse_packet_sequence(packet_data)
600
603
  except ValueError:
601
604
  return
605
+ interval = (
606
+ self.receive_times[-1] - self.receive_times[-2]
607
+ if len(self.receive_times) >= 2
608
+ else 0
609
+ )
602
610
  logging.info(
603
611
  color(
604
612
  f'<<< Received packet {packet_index}: '
605
- f'flags=0x{packet_flags:02X}, {len(packet)} bytes',
613
+ f'flags=0x{packet_flags:02X}, {len(packet)} bytes, '
614
+ f'interval={interval:.4f}',
606
615
  'green',
607
616
  )
608
617
  )
@@ -623,8 +632,35 @@ class Pong:
623
632
  )
624
633
  )
625
634
 
626
- if packet_flags & PACKET_FLAG_LAST and not self.linger:
627
- self.done.set()
635
+ if packet_flags & PACKET_FLAG_LAST:
636
+ if len(self.receive_times) >= 3:
637
+ # Show basic stats
638
+ intervals = [
639
+ self.receive_times[i + 1] - self.receive_times[i]
640
+ for i in range(len(self.receive_times) - 1)
641
+ ]
642
+ log_stats('Packet intervals', intervals, 3)
643
+
644
+ # Show a histogram
645
+ bin_count = 20
646
+ bins = [0] * bin_count
647
+ interval_min = min(intervals)
648
+ interval_max = max(intervals)
649
+ interval_range = interval_max - interval_min
650
+ bin_thresholds = [
651
+ interval_min + i * (interval_range / bin_count)
652
+ for i in range(bin_count)
653
+ ]
654
+ for interval in intervals:
655
+ for i in reversed(range(bin_count)):
656
+ if interval >= bin_thresholds[i]:
657
+ bins[i] += 1
658
+ break
659
+ for i in range(bin_count):
660
+ logging.info(f'@@@ >= {bin_thresholds[i]:.4f}: {bins[i]}')
661
+
662
+ if not self.linger:
663
+ self.done.set()
628
664
 
629
665
  async def run(self):
630
666
  await self.done.wait()
@@ -942,9 +978,12 @@ class RfcommClient(StreamedPacketIO):
942
978
  channel = await bumble.rfcomm.find_rfcomm_channel_with_uuid(
943
979
  connection, self.uuid
944
980
  )
945
- logging.info(color(f'@@@ Channel number = {channel}', 'cyan'))
946
- if channel == 0:
947
- logging.info(color('!!! No RFComm service with this UUID found', 'red'))
981
+ if channel:
982
+ logging.info(color(f'@@@ Channel number = {channel}', 'cyan'))
983
+ else:
984
+ logging.warning(
985
+ color('!!! No RFComm service with this UUID found', 'red')
986
+ )
948
987
  await connection.disconnect()
949
988
  return
950
989
 
@@ -1054,6 +1093,8 @@ class RfcommServer(StreamedPacketIO):
1054
1093
  if self.credits_threshold is not None:
1055
1094
  dlc.rx_credits_threshold = self.credits_threshold
1056
1095
 
1096
+ self.ready.set()
1097
+
1057
1098
  async def drain(self):
1058
1099
  assert self.dlc
1059
1100
  await self.dlc.drain()
@@ -1068,7 +1109,7 @@ class Central(Connection.Listener):
1068
1109
  transport,
1069
1110
  peripheral_address,
1070
1111
  classic,
1071
- role_factory,
1112
+ scenario_factory,
1072
1113
  mode_factory,
1073
1114
  connection_interval,
1074
1115
  phy,
@@ -1081,7 +1122,7 @@ class Central(Connection.Listener):
1081
1122
  self.transport = transport
1082
1123
  self.peripheral_address = peripheral_address
1083
1124
  self.classic = classic
1084
- self.role_factory = role_factory
1125
+ self.scenario_factory = scenario_factory
1085
1126
  self.mode_factory = mode_factory
1086
1127
  self.authenticate = authenticate
1087
1128
  self.encrypt = encrypt or authenticate
@@ -1134,7 +1175,7 @@ class Central(Connection.Listener):
1134
1175
  DEFAULT_CENTRAL_NAME, central_address, hci_source, hci_sink
1135
1176
  )
1136
1177
  mode = self.mode_factory(self.device)
1137
- role = self.role_factory(mode)
1178
+ scenario = self.scenario_factory(mode)
1138
1179
  self.device.classic_enabled = self.classic
1139
1180
 
1140
1181
  # Set up a pairing config factory with minimal requirements.
@@ -1215,7 +1256,7 @@ class Central(Connection.Listener):
1215
1256
 
1216
1257
  await mode.on_connection(self.connection)
1217
1258
 
1218
- await role.run()
1259
+ await scenario.run()
1219
1260
  await asyncio.sleep(DEFAULT_LINGER_TIME)
1220
1261
  await self.connection.disconnect()
1221
1262
 
@@ -1246,7 +1287,7 @@ class Peripheral(Device.Listener, Connection.Listener):
1246
1287
  def __init__(
1247
1288
  self,
1248
1289
  transport,
1249
- role_factory,
1290
+ scenario_factory,
1250
1291
  mode_factory,
1251
1292
  classic,
1252
1293
  extended_data_length,
@@ -1254,11 +1295,11 @@ class Peripheral(Device.Listener, Connection.Listener):
1254
1295
  ):
1255
1296
  self.transport = transport
1256
1297
  self.classic = classic
1257
- self.role_factory = role_factory
1298
+ self.scenario_factory = scenario_factory
1258
1299
  self.mode_factory = mode_factory
1259
1300
  self.extended_data_length = extended_data_length
1260
1301
  self.role_switch = role_switch
1261
- self.role = None
1302
+ self.scenario = None
1262
1303
  self.mode = None
1263
1304
  self.device = None
1264
1305
  self.connection = None
@@ -1278,7 +1319,7 @@ class Peripheral(Device.Listener, Connection.Listener):
1278
1319
  )
1279
1320
  self.device.listener = self
1280
1321
  self.mode = self.mode_factory(self.device)
1281
- self.role = self.role_factory(self.mode)
1322
+ self.scenario = self.scenario_factory(self.mode)
1282
1323
  self.device.classic_enabled = self.classic
1283
1324
 
1284
1325
  # Set up a pairing config factory with minimal requirements.
@@ -1315,7 +1356,7 @@ class Peripheral(Device.Listener, Connection.Listener):
1315
1356
  print_connection(self.connection)
1316
1357
 
1317
1358
  await self.mode.on_connection(self.connection)
1318
- await self.role.run()
1359
+ await self.scenario.run()
1319
1360
  await asyncio.sleep(DEFAULT_LINGER_TIME)
1320
1361
 
1321
1362
  def on_connection(self, connection):
@@ -1344,7 +1385,7 @@ class Peripheral(Device.Listener, Connection.Listener):
1344
1385
  def on_disconnection(self, reason):
1345
1386
  logging.info(color(f'!!! Disconnection: reason={reason}', 'red'))
1346
1387
  self.connection = None
1347
- self.role.reset()
1388
+ self.scenario.reset()
1348
1389
 
1349
1390
  if self.classic:
1350
1391
  AsyncRunner.spawn(self.device.set_discoverable(True))
@@ -1426,13 +1467,13 @@ def create_mode_factory(ctx, default_mode):
1426
1467
 
1427
1468
 
1428
1469
  # -----------------------------------------------------------------------------
1429
- def create_role_factory(ctx, default_role):
1430
- role = ctx.obj['role']
1431
- if role is None:
1432
- role = default_role
1470
+ def create_scenario_factory(ctx, default_scenario):
1471
+ scenario = ctx.obj['scenario']
1472
+ if scenario is None:
1473
+ scenarion = default_scenario
1433
1474
 
1434
- def create_role(packet_io):
1435
- if role == 'sender':
1475
+ def create_scenario(packet_io):
1476
+ if scenario == 'send':
1436
1477
  return Sender(
1437
1478
  packet_io,
1438
1479
  start_delay=ctx.obj['start_delay'],
@@ -1443,10 +1484,10 @@ def create_role_factory(ctx, default_role):
1443
1484
  packet_count=ctx.obj['packet_count'],
1444
1485
  )
1445
1486
 
1446
- if role == 'receiver':
1487
+ if scenario == 'receive':
1447
1488
  return Receiver(packet_io, ctx.obj['linger'])
1448
1489
 
1449
- if role == 'ping':
1490
+ if scenario == 'ping':
1450
1491
  return Ping(
1451
1492
  packet_io,
1452
1493
  start_delay=ctx.obj['start_delay'],
@@ -1457,12 +1498,12 @@ def create_role_factory(ctx, default_role):
1457
1498
  packet_count=ctx.obj['packet_count'],
1458
1499
  )
1459
1500
 
1460
- if role == 'pong':
1501
+ if scenario == 'pong':
1461
1502
  return Pong(packet_io, ctx.obj['linger'])
1462
1503
 
1463
- raise ValueError('invalid role')
1504
+ raise ValueError('invalid scenario')
1464
1505
 
1465
- return create_role
1506
+ return create_scenario
1466
1507
 
1467
1508
 
1468
1509
  # -----------------------------------------------------------------------------
@@ -1470,7 +1511,7 @@ def create_role_factory(ctx, default_role):
1470
1511
  # -----------------------------------------------------------------------------
1471
1512
  @click.group()
1472
1513
  @click.option('--device-config', metavar='FILENAME', help='Device configuration file')
1473
- @click.option('--role', type=click.Choice(['sender', 'receiver', 'ping', 'pong']))
1514
+ @click.option('--scenario', type=click.Choice(['send', 'receive', 'ping', 'pong']))
1474
1515
  @click.option(
1475
1516
  '--mode',
1476
1517
  type=click.Choice(
@@ -1503,7 +1544,7 @@ def create_role_factory(ctx, default_role):
1503
1544
  '--rfcomm-channel',
1504
1545
  type=int,
1505
1546
  default=DEFAULT_RFCOMM_CHANNEL,
1506
- help='RFComm channel to use',
1547
+ help='RFComm channel to use (specify 0 for channel discovery via SDP)',
1507
1548
  )
1508
1549
  @click.option(
1509
1550
  '--rfcomm-uuid',
@@ -1565,7 +1606,7 @@ def create_role_factory(ctx, default_role):
1565
1606
  metavar='SIZE',
1566
1607
  type=click.IntRange(8, 8192),
1567
1608
  default=500,
1568
- help='Packet size (client or ping role)',
1609
+ help='Packet size (send or ping scenario)',
1569
1610
  )
1570
1611
  @click.option(
1571
1612
  '--packet-count',
@@ -1573,7 +1614,7 @@ def create_role_factory(ctx, default_role):
1573
1614
  metavar='COUNT',
1574
1615
  type=int,
1575
1616
  default=10,
1576
- help='Packet count (client or ping role)',
1617
+ help='Packet count (send or ping scenario)',
1577
1618
  )
1578
1619
  @click.option(
1579
1620
  '--start-delay',
@@ -1581,7 +1622,7 @@ def create_role_factory(ctx, default_role):
1581
1622
  metavar='SECONDS',
1582
1623
  type=int,
1583
1624
  default=1,
1584
- help='Start delay (client or ping role)',
1625
+ help='Start delay (send or ping scenario)',
1585
1626
  )
1586
1627
  @click.option(
1587
1628
  '--repeat',
@@ -1589,7 +1630,7 @@ def create_role_factory(ctx, default_role):
1589
1630
  type=int,
1590
1631
  default=0,
1591
1632
  help=(
1592
- 'Repeat the run N times (client and ping roles)'
1633
+ 'Repeat the run N times (send and ping scenario)'
1593
1634
  '(0, which is the fault, to run just once) '
1594
1635
  ),
1595
1636
  )
@@ -1613,13 +1654,13 @@ def create_role_factory(ctx, default_role):
1613
1654
  @click.option(
1614
1655
  '--linger',
1615
1656
  is_flag=True,
1616
- help="Don't exit at the end of a run (server and pong roles)",
1657
+ help="Don't exit at the end of a run (receive and pong scenarios)",
1617
1658
  )
1618
1659
  @click.pass_context
1619
1660
  def bench(
1620
1661
  ctx,
1621
1662
  device_config,
1622
- role,
1663
+ scenario,
1623
1664
  mode,
1624
1665
  att_mtu,
1625
1666
  extended_data_length,
@@ -1645,7 +1686,7 @@ def bench(
1645
1686
  ):
1646
1687
  ctx.ensure_object(dict)
1647
1688
  ctx.obj['device_config'] = device_config
1648
- ctx.obj['role'] = role
1689
+ ctx.obj['scenario'] = scenario
1649
1690
  ctx.obj['mode'] = mode
1650
1691
  ctx.obj['att_mtu'] = att_mtu
1651
1692
  ctx.obj['rfcomm_channel'] = rfcomm_channel
@@ -1699,7 +1740,7 @@ def central(
1699
1740
  ctx, transport, peripheral_address, connection_interval, phy, authenticate, encrypt
1700
1741
  ):
1701
1742
  """Run as a central (initiates the connection)"""
1702
- role_factory = create_role_factory(ctx, 'sender')
1743
+ scenario_factory = create_scenario_factory(ctx, 'send')
1703
1744
  mode_factory = create_mode_factory(ctx, 'gatt-client')
1704
1745
  classic = ctx.obj['classic']
1705
1746
 
@@ -1708,7 +1749,7 @@ def central(
1708
1749
  transport,
1709
1750
  peripheral_address,
1710
1751
  classic,
1711
- role_factory,
1752
+ scenario_factory,
1712
1753
  mode_factory,
1713
1754
  connection_interval,
1714
1755
  phy,
@@ -1726,13 +1767,13 @@ def central(
1726
1767
  @click.pass_context
1727
1768
  def peripheral(ctx, transport):
1728
1769
  """Run as a peripheral (waits for a connection)"""
1729
- role_factory = create_role_factory(ctx, 'receiver')
1770
+ scenario_factory = create_scenario_factory(ctx, 'receive')
1730
1771
  mode_factory = create_mode_factory(ctx, 'gatt-server')
1731
1772
 
1732
1773
  async def run_peripheral():
1733
1774
  await Peripheral(
1734
1775
  transport,
1735
- role_factory,
1776
+ scenario_factory,
1736
1777
  mode_factory,
1737
1778
  ctx.obj['classic'],
1738
1779
  ctx.obj['extended_data_length'],
@@ -1743,7 +1784,11 @@ def peripheral(ctx, transport):
1743
1784
 
1744
1785
 
1745
1786
  def main():
1746
- logging.basicConfig(level=os.environ.get('BUMBLE_LOGLEVEL', 'INFO').upper())
1787
+ logging.basicConfig(
1788
+ level=os.environ.get('BUMBLE_LOGLEVEL', 'INFO').upper(),
1789
+ format="[%(asctime)s.%(msecs)03d] %(levelname)s:%(name)s:%(message)s",
1790
+ datefmt="%H:%M:%S",
1791
+ )
1747
1792
  bench()
1748
1793
 
1749
1794
 
@@ -83,7 +83,7 @@ async def async_main():
83
83
  return_parameters=bytes([hci.HCI_SUCCESS]),
84
84
  )
85
85
  # Return a packet with 'respond to sender' set to True
86
- return (response.to_bytes(), True)
86
+ return (bytes(response), True)
87
87
 
88
88
  return None
89
89