bumble 0.0.216__tar.gz → 0.0.218__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (631) hide show
  1. {bumble-0.0.216 → bumble-0.0.218}/PKG-INFO +2 -2
  2. {bumble-0.0.216 → bumble-0.0.218}/README.md +1 -1
  3. {bumble-0.0.216 → bumble-0.0.218}/bumble/_version.py +3 -3
  4. {bumble-0.0.216 → bumble-0.0.218}/bumble/device.py +7 -12
  5. {bumble-0.0.216 → bumble-0.0.218}/bumble/drivers/__init__.py +4 -0
  6. {bumble-0.0.216 → bumble-0.0.218}/bumble/drivers/intel.py +33 -7
  7. {bumble-0.0.216 → bumble-0.0.218}/bumble/hfp.py +4 -4
  8. {bumble-0.0.216 → bumble-0.0.218}/bumble/host.py +1 -1
  9. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/hap.py +33 -4
  10. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/__init__.py +6 -1
  11. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/android_netsim.py +5 -1
  12. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/serial.py +56 -2
  13. {bumble-0.0.216 → bumble-0.0.218}/bumble.egg-info/PKG-INFO +2 -2
  14. bumble-0.0.218/docs/mkdocs/src/transports/serial.md +21 -0
  15. {bumble-0.0.216 → bumble-0.0.218}/tests/device_test.py +28 -0
  16. {bumble-0.0.216 → bumble-0.0.218}/tests/hap_test.py +3 -1
  17. bumble-0.0.216/docs/mkdocs/src/transports/serial.md +0 -12
  18. {bumble-0.0.216 → bumble-0.0.218}/.devcontainer/devcontainer.json +0 -0
  19. {bumble-0.0.216 → bumble-0.0.218}/.git-blame-ignore-revs +0 -0
  20. {bumble-0.0.216 → bumble-0.0.218}/.github/ci-gradle.properties +0 -0
  21. {bumble-0.0.216 → bumble-0.0.218}/.github/workflows/code-check.yml +0 -0
  22. {bumble-0.0.216 → bumble-0.0.218}/.github/workflows/codeql-analysis.yml +0 -0
  23. {bumble-0.0.216 → bumble-0.0.218}/.github/workflows/gradle-btbench.yml +0 -0
  24. {bumble-0.0.216 → bumble-0.0.218}/.github/workflows/python-avatar.yml +0 -0
  25. {bumble-0.0.216 → bumble-0.0.218}/.github/workflows/python-build-test.yml +0 -0
  26. {bumble-0.0.216 → bumble-0.0.218}/.github/workflows/python-publish.yml +0 -0
  27. {bumble-0.0.216 → bumble-0.0.218}/.gitignore +0 -0
  28. {bumble-0.0.216 → bumble-0.0.218}/.vscode/settings.json +0 -0
  29. {bumble-0.0.216 → bumble-0.0.218}/CONTRIBUTING.md +0 -0
  30. {bumble-0.0.216 → bumble-0.0.218}/LICENSE +0 -0
  31. {bumble-0.0.216 → bumble-0.0.218}/apps/README.md +0 -0
  32. {bumble-0.0.216 → bumble-0.0.218}/apps/__init__.py +0 -0
  33. {bumble-0.0.216 → bumble-0.0.218}/apps/auracast.py +0 -0
  34. {bumble-0.0.216 → bumble-0.0.218}/apps/bench.py +0 -0
  35. {bumble-0.0.216 → bumble-0.0.218}/apps/ble_rpa_tool.py +0 -0
  36. {bumble-0.0.216 → bumble-0.0.218}/apps/console.py +0 -0
  37. {bumble-0.0.216 → bumble-0.0.218}/apps/controller_info.py +0 -0
  38. {bumble-0.0.216 → bumble-0.0.218}/apps/controller_loopback.py +0 -0
  39. {bumble-0.0.216 → bumble-0.0.218}/apps/controllers.py +0 -0
  40. {bumble-0.0.216 → bumble-0.0.218}/apps/device_info.py +0 -0
  41. {bumble-0.0.216 → bumble-0.0.218}/apps/gatt_dump.py +0 -0
  42. {bumble-0.0.216 → bumble-0.0.218}/apps/gg_bridge.py +0 -0
  43. {bumble-0.0.216 → bumble-0.0.218}/apps/hci_bridge.py +0 -0
  44. {bumble-0.0.216 → bumble-0.0.218}/apps/l2cap_bridge.py +0 -0
  45. {bumble-0.0.216 → bumble-0.0.218}/apps/lea_unicast/app.py +0 -0
  46. {bumble-0.0.216 → bumble-0.0.218}/apps/lea_unicast/index.html +0 -0
  47. {bumble-0.0.216 → bumble-0.0.218}/apps/pair.py +0 -0
  48. {bumble-0.0.216 → bumble-0.0.218}/apps/pandora_server.py +0 -0
  49. {bumble-0.0.216 → bumble-0.0.218}/apps/player/player.py +0 -0
  50. {bumble-0.0.216 → bumble-0.0.218}/apps/rfcomm_bridge.py +0 -0
  51. {bumble-0.0.216 → bumble-0.0.218}/apps/scan.py +0 -0
  52. {bumble-0.0.216 → bumble-0.0.218}/apps/show.py +0 -0
  53. {bumble-0.0.216 → bumble-0.0.218}/apps/speaker/__init__.py +0 -0
  54. {bumble-0.0.216 → bumble-0.0.218}/apps/speaker/logo.svg +0 -0
  55. {bumble-0.0.216 → bumble-0.0.218}/apps/speaker/speaker.css +0 -0
  56. {bumble-0.0.216 → bumble-0.0.218}/apps/speaker/speaker.html +0 -0
  57. {bumble-0.0.216 → bumble-0.0.218}/apps/speaker/speaker.js +0 -0
  58. {bumble-0.0.216 → bumble-0.0.218}/apps/speaker/speaker.py +0 -0
  59. {bumble-0.0.216 → bumble-0.0.218}/apps/unbond.py +0 -0
  60. {bumble-0.0.216 → bumble-0.0.218}/apps/usb_probe.py +0 -0
  61. {bumble-0.0.216 → bumble-0.0.218}/bumble/__init__.py +0 -0
  62. {bumble-0.0.216 → bumble-0.0.218}/bumble/a2dp.py +0 -0
  63. {bumble-0.0.216 → bumble-0.0.218}/bumble/at.py +0 -0
  64. {bumble-0.0.216 → bumble-0.0.218}/bumble/att.py +0 -0
  65. {bumble-0.0.216 → bumble-0.0.218}/bumble/audio/__init__.py +0 -0
  66. {bumble-0.0.216 → bumble-0.0.218}/bumble/audio/io.py +0 -0
  67. {bumble-0.0.216 → bumble-0.0.218}/bumble/avc.py +0 -0
  68. {bumble-0.0.216 → bumble-0.0.218}/bumble/avctp.py +0 -0
  69. {bumble-0.0.216 → bumble-0.0.218}/bumble/avdtp.py +0 -0
  70. {bumble-0.0.216 → bumble-0.0.218}/bumble/avrcp.py +0 -0
  71. {bumble-0.0.216 → bumble-0.0.218}/bumble/bridge.py +0 -0
  72. {bumble-0.0.216 → bumble-0.0.218}/bumble/codecs.py +0 -0
  73. {bumble-0.0.216 → bumble-0.0.218}/bumble/colors.py +0 -0
  74. {bumble-0.0.216 → bumble-0.0.218}/bumble/company_ids.py +0 -0
  75. {bumble-0.0.216 → bumble-0.0.218}/bumble/controller.py +0 -0
  76. {bumble-0.0.216 → bumble-0.0.218}/bumble/core.py +0 -0
  77. {bumble-0.0.216 → bumble-0.0.218}/bumble/crypto/__init__.py +0 -0
  78. {bumble-0.0.216 → bumble-0.0.218}/bumble/crypto/builtin.py +0 -0
  79. {bumble-0.0.216 → bumble-0.0.218}/bumble/crypto/cryptography.py +0 -0
  80. {bumble-0.0.216 → bumble-0.0.218}/bumble/data_types.py +0 -0
  81. {bumble-0.0.216 → bumble-0.0.218}/bumble/decoder.py +0 -0
  82. {bumble-0.0.216 → bumble-0.0.218}/bumble/drivers/common.py +0 -0
  83. {bumble-0.0.216 → bumble-0.0.218}/bumble/drivers/rtk.py +0 -0
  84. {bumble-0.0.216 → bumble-0.0.218}/bumble/gap.py +0 -0
  85. {bumble-0.0.216 → bumble-0.0.218}/bumble/gatt.py +0 -0
  86. {bumble-0.0.216 → bumble-0.0.218}/bumble/gatt_adapters.py +0 -0
  87. {bumble-0.0.216 → bumble-0.0.218}/bumble/gatt_client.py +0 -0
  88. {bumble-0.0.216 → bumble-0.0.218}/bumble/gatt_server.py +0 -0
  89. {bumble-0.0.216 → bumble-0.0.218}/bumble/hci.py +0 -0
  90. {bumble-0.0.216 → bumble-0.0.218}/bumble/helpers.py +0 -0
  91. {bumble-0.0.216 → bumble-0.0.218}/bumble/hid.py +0 -0
  92. {bumble-0.0.216 → bumble-0.0.218}/bumble/keys.py +0 -0
  93. {bumble-0.0.216 → bumble-0.0.218}/bumble/l2cap.py +0 -0
  94. {bumble-0.0.216 → bumble-0.0.218}/bumble/link.py +0 -0
  95. {bumble-0.0.216 → bumble-0.0.218}/bumble/logging.py +0 -0
  96. {bumble-0.0.216 → bumble-0.0.218}/bumble/pairing.py +0 -0
  97. {bumble-0.0.216 → bumble-0.0.218}/bumble/pandora/__init__.py +0 -0
  98. {bumble-0.0.216 → bumble-0.0.218}/bumble/pandora/config.py +0 -0
  99. {bumble-0.0.216 → bumble-0.0.218}/bumble/pandora/device.py +0 -0
  100. {bumble-0.0.216 → bumble-0.0.218}/bumble/pandora/host.py +0 -0
  101. {bumble-0.0.216 → bumble-0.0.218}/bumble/pandora/l2cap.py +0 -0
  102. {bumble-0.0.216 → bumble-0.0.218}/bumble/pandora/py.typed +0 -0
  103. {bumble-0.0.216 → bumble-0.0.218}/bumble/pandora/security.py +0 -0
  104. {bumble-0.0.216 → bumble-0.0.218}/bumble/pandora/utils.py +0 -0
  105. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/__init__.py +0 -0
  106. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/aics.py +0 -0
  107. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/ams.py +0 -0
  108. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/ancs.py +0 -0
  109. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/ascs.py +0 -0
  110. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/asha.py +0 -0
  111. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/bap.py +0 -0
  112. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/bass.py +0 -0
  113. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/battery_service.py +0 -0
  114. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/cap.py +0 -0
  115. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/csip.py +0 -0
  116. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/device_information_service.py +0 -0
  117. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/gap.py +0 -0
  118. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/gatt_service.py +0 -0
  119. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/gmap.py +0 -0
  120. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/heart_rate_service.py +0 -0
  121. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/le_audio.py +0 -0
  122. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/mcp.py +0 -0
  123. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/pacs.py +0 -0
  124. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/pbp.py +0 -0
  125. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/py.typed +0 -0
  126. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/tmap.py +0 -0
  127. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/vcs.py +0 -0
  128. {bumble-0.0.216 → bumble-0.0.218}/bumble/profiles/vocs.py +0 -0
  129. {bumble-0.0.216 → bumble-0.0.218}/bumble/py.typed +0 -0
  130. {bumble-0.0.216 → bumble-0.0.218}/bumble/rfcomm.py +0 -0
  131. {bumble-0.0.216 → bumble-0.0.218}/bumble/rtp.py +0 -0
  132. {bumble-0.0.216 → bumble-0.0.218}/bumble/sdp.py +0 -0
  133. {bumble-0.0.216 → bumble-0.0.218}/bumble/smp.py +0 -0
  134. {bumble-0.0.216 → bumble-0.0.218}/bumble/snoop.py +0 -0
  135. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/android_emulator.py +0 -0
  136. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/common.py +0 -0
  137. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/file.py +0 -0
  138. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/__init__.py +0 -0
  139. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_device_pb2.py +0 -0
  140. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_device_pb2.pyi +0 -0
  141. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_device_pb2_grpc.py +0 -0
  142. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_packets_pb2.py +0 -0
  143. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_packets_pb2.pyi +0 -0
  144. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_packets_pb2_grpc.py +0 -0
  145. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_pb2.py +0 -0
  146. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_pb2.pyi +0 -0
  147. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_pb2_grpc.py +0 -0
  148. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_vhci_pb2.py +0 -0
  149. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_vhci_pb2.pyi +0 -0
  150. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/emulated_bluetooth_vhci_pb2_grpc.py +0 -0
  151. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/grpc_endpoint_description_pb2.py +0 -0
  152. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/grpc_endpoint_description_pb2.pyi +0 -0
  153. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/grpc_endpoint_description_pb2_grpc.py +0 -0
  154. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/__init__.py +0 -0
  155. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/common_pb2.py +0 -0
  156. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/common_pb2.pyi +0 -0
  157. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/common_pb2_grpc.py +0 -0
  158. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/hci_packet_pb2.py +0 -0
  159. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/hci_packet_pb2.pyi +0 -0
  160. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/hci_packet_pb2_grpc.py +0 -0
  161. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/model_pb2.py +0 -0
  162. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/model_pb2.pyi +0 -0
  163. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/model_pb2_grpc.py +0 -0
  164. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/packet_streamer_pb2.py +0 -0
  165. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/packet_streamer_pb2.pyi +0 -0
  166. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/packet_streamer_pb2_grpc.py +0 -0
  167. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/startup_pb2.py +0 -0
  168. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/startup_pb2.pyi +0 -0
  169. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/netsim/startup_pb2_grpc.py +0 -0
  170. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/rootcanal/__init__.py +0 -0
  171. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/rootcanal/configuration_pb2.py +0 -0
  172. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/rootcanal/configuration_pb2.pyi +0 -0
  173. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/grpc_protobuf/rootcanal/configuration_pb2_grpc.py +0 -0
  174. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/hci_socket.py +0 -0
  175. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/pty.py +0 -0
  176. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/py.typed +0 -0
  177. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/pyusb.py +0 -0
  178. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/tcp_client.py +0 -0
  179. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/tcp_server.py +0 -0
  180. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/udp.py +0 -0
  181. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/unix.py +0 -0
  182. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/usb.py +0 -0
  183. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/vhci.py +0 -0
  184. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/ws_client.py +0 -0
  185. {bumble-0.0.216 → bumble-0.0.218}/bumble/transport/ws_server.py +0 -0
  186. {bumble-0.0.216 → bumble-0.0.218}/bumble/utils.py +0 -0
  187. {bumble-0.0.216 → bumble-0.0.218}/bumble/vendor/__init__.py +0 -0
  188. {bumble-0.0.216 → bumble-0.0.218}/bumble/vendor/android/__init__.py +0 -0
  189. {bumble-0.0.216 → bumble-0.0.218}/bumble/vendor/android/hci.py +0 -0
  190. {bumble-0.0.216 → bumble-0.0.218}/bumble/vendor/zephyr/__init__.py +0 -0
  191. {bumble-0.0.216 → bumble-0.0.218}/bumble/vendor/zephyr/hci.py +0 -0
  192. {bumble-0.0.216 → bumble-0.0.218}/bumble.egg-info/SOURCES.txt +0 -0
  193. {bumble-0.0.216 → bumble-0.0.218}/bumble.egg-info/dependency_links.txt +0 -0
  194. {bumble-0.0.216 → bumble-0.0.218}/bumble.egg-info/entry_points.txt +0 -0
  195. {bumble-0.0.216 → bumble-0.0.218}/bumble.egg-info/requires.txt +0 -0
  196. {bumble-0.0.216 → bumble-0.0.218}/bumble.egg-info/top_level.txt +0 -0
  197. {bumble-0.0.216 → bumble-0.0.218}/docs/README.md +0 -0
  198. {bumble-0.0.216 → bumble-0.0.218}/docs/images/favicon.ico +0 -0
  199. {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo.png +0 -0
  200. {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo.svg +0 -0
  201. {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo.vectornator/Artboard0.json +0 -0
  202. {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo.vectornator/Document.json +0 -0
  203. {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo.vectornator/Manifest.json +0 -0
  204. {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo.vectornator/Thumbnail.png +0 -0
  205. {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo.vectornator/UndoHistory.json +0 -0
  206. {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo_framed.png +0 -0
  207. {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo_framed.svg +0 -0
  208. {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo_framed.vectornator/Artboard0.json +0 -0
  209. {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo_framed.vectornator/Document.json +0 -0
  210. {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo_framed.vectornator/Manifest.json +0 -0
  211. {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo_framed.vectornator/Thumbnail.png +0 -0
  212. {bumble-0.0.216 → bumble-0.0.218}/docs/images/logo_framed.vectornator/UndoHistory.json +0 -0
  213. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/mkdocs.yml +0 -0
  214. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/requirements.txt +0 -0
  215. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/api/examples.md +0 -0
  216. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/api/guide.md +0 -0
  217. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/api/reference.md +0 -0
  218. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/auracast.md +0 -0
  219. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/bench.md +0 -0
  220. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/console.md +0 -0
  221. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/gatt_dump.md +0 -0
  222. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/gg_bridge.md +0 -0
  223. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/hci_bridge.md +0 -0
  224. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/index.md +0 -0
  225. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/pair.md +0 -0
  226. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/show.md +0 -0
  227. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/speaker.md +0 -0
  228. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/unbond.md +0 -0
  229. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/apps_and_tools/usb_probe.md +0 -0
  230. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/components/controller.md +0 -0
  231. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/components/gatt.md +0 -0
  232. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/components/host.md +0 -0
  233. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/components/security_manager.md +0 -0
  234. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/development/code_style.md +0 -0
  235. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/development/contributing.md +0 -0
  236. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/development/python_environments.md +0 -0
  237. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/downloads/zephyr/hci_usb.zip +0 -0
  238. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/drivers/index.md +0 -0
  239. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/drivers/intel.md +0 -0
  240. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/drivers/realtek.md +0 -0
  241. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/examples/index.md +0 -0
  242. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/extras/android_bt_bench.md +0 -0
  243. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/extras/android_remote_hci.md +0 -0
  244. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/extras/index.md +0 -0
  245. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/getting_started.md +0 -0
  246. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hardware/index.md +0 -0
  247. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/index.md +0 -0
  248. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/index.toml +0 -0
  249. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/bumble.js +0 -0
  250. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/heart_rate_monitor/heart_rate_monitor.html +0 -0
  251. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/heart_rate_monitor/heart_rate_monitor.js +0 -0
  252. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/heart_rate_monitor/heart_rate_monitor.py +0 -0
  253. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/scanner/scanner.css +0 -0
  254. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/scanner/scanner.html +0 -0
  255. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/scanner/scanner.js +0 -0
  256. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/scanner/scanner.py +0 -0
  257. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/speaker/logo.svg +0 -0
  258. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/speaker/speaker.css +0 -0
  259. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/speaker/speaker.html +0 -0
  260. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/speaker/speaker.js +0 -0
  261. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/speaker/speaker.py +0 -0
  262. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/hive/web/ui.js +0 -0
  263. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/images/bumble_layers.svg +0 -0
  264. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/images/console_screenshot.png +0 -0
  265. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/images/favicon.ico +0 -0
  266. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/images/logo.png +0 -0
  267. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/images/logo_framed.png +0 -0
  268. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/images/speaker_screenshot.png +0 -0
  269. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/index.md +0 -0
  270. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/platforms/android.md +0 -0
  271. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/platforms/index.md +0 -0
  272. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/platforms/linux.md +0 -0
  273. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/platforms/macos.md +0 -0
  274. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/platforms/windows.md +0 -0
  275. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/platforms/winusb_driver.png +0 -0
  276. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/platforms/zephyr.md +0 -0
  277. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/android_emulator.md +0 -0
  278. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/file.md +0 -0
  279. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/hci_socket.md +0 -0
  280. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/index.md +0 -0
  281. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/pty.md +0 -0
  282. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/tcp_client.md +0 -0
  283. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/tcp_server.md +0 -0
  284. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/udp.md +0 -0
  285. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/usb.md +0 -0
  286. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/vhci.md +0 -0
  287. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/ws_client.md +0 -0
  288. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/transports/ws_server.md +0 -0
  289. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/use_cases/index.md +0 -0
  290. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/use_cases/use_case_1.md +0 -0
  291. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/use_cases/use_case_2.md +0 -0
  292. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/use_cases/use_case_3.md +0 -0
  293. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/use_cases/use_case_4.md +0 -0
  294. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/use_cases/use_case_5.md +0 -0
  295. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/src/use_cases/use_case_6.md +0 -0
  296. {bumble-0.0.216 → bumble-0.0.218}/docs/mkdocs/theme/partials/footer.html +0 -0
  297. {bumble-0.0.216 → bumble-0.0.218}/environment.yml +0 -0
  298. {bumble-0.0.216 → bumble-0.0.218}/examples/README.md +0 -0
  299. {bumble-0.0.216 → bumble-0.0.218}/examples/a2dp_sink1.json +0 -0
  300. {bumble-0.0.216 → bumble-0.0.218}/examples/asha_sink.html +0 -0
  301. {bumble-0.0.216 → bumble-0.0.218}/examples/asha_sink1.json +0 -0
  302. {bumble-0.0.216 → bumble-0.0.218}/examples/asha_sink2.json +0 -0
  303. {bumble-0.0.216 → bumble-0.0.218}/examples/async_runner.py +0 -0
  304. {bumble-0.0.216 → bumble-0.0.218}/examples/avrcp_as_sink.html +0 -0
  305. {bumble-0.0.216 → bumble-0.0.218}/examples/battery_client.py +0 -0
  306. {bumble-0.0.216 → bumble-0.0.218}/examples/battery_server.py +0 -0
  307. {bumble-0.0.216 → bumble-0.0.218}/examples/classic1.json +0 -0
  308. {bumble-0.0.216 → bumble-0.0.218}/examples/classic2.json +0 -0
  309. {bumble-0.0.216 → bumble-0.0.218}/examples/cs_initiator.json +0 -0
  310. {bumble-0.0.216 → bumble-0.0.218}/examples/cs_reflector.json +0 -0
  311. {bumble-0.0.216 → bumble-0.0.218}/examples/device1.json +0 -0
  312. {bumble-0.0.216 → bumble-0.0.218}/examples/device2.json +0 -0
  313. {bumble-0.0.216 → bumble-0.0.218}/examples/device3.json +0 -0
  314. {bumble-0.0.216 → bumble-0.0.218}/examples/device_information_client.py +0 -0
  315. {bumble-0.0.216 → bumble-0.0.218}/examples/device_information_server.py +0 -0
  316. {bumble-0.0.216 → bumble-0.0.218}/examples/device_with_rpa.json +0 -0
  317. {bumble-0.0.216 → bumble-0.0.218}/examples/heart_rate_client.py +0 -0
  318. {bumble-0.0.216 → bumble-0.0.218}/examples/heart_rate_server.py +0 -0
  319. {bumble-0.0.216 → bumble-0.0.218}/examples/hfp_gateway.html +0 -0
  320. {bumble-0.0.216 → bumble-0.0.218}/examples/hfp_gateway.json +0 -0
  321. {bumble-0.0.216 → bumble-0.0.218}/examples/hfp_handsfree.html +0 -0
  322. {bumble-0.0.216 → bumble-0.0.218}/examples/hfp_handsfree.json +0 -0
  323. {bumble-0.0.216 → bumble-0.0.218}/examples/hid_key_map.py +0 -0
  324. {bumble-0.0.216 → bumble-0.0.218}/examples/hid_keyboard.json +0 -0
  325. {bumble-0.0.216 → bumble-0.0.218}/examples/hid_report_parser.py +0 -0
  326. {bumble-0.0.216 → bumble-0.0.218}/examples/keyboard.html +0 -0
  327. {bumble-0.0.216 → bumble-0.0.218}/examples/keyboard.json +0 -0
  328. {bumble-0.0.216 → bumble-0.0.218}/examples/keyboard.py +0 -0
  329. {bumble-0.0.216 → bumble-0.0.218}/examples/leaudio.json +0 -0
  330. {bumble-0.0.216 → bumble-0.0.218}/examples/leaudio_with_classic.json +0 -0
  331. {bumble-0.0.216 → bumble-0.0.218}/examples/mcp_server.html +0 -0
  332. {bumble-0.0.216 → bumble-0.0.218}/examples/mobly/bench/one_device_bench_test.py +0 -0
  333. {bumble-0.0.216 → bumble-0.0.218}/examples/mobly/bench/sample_config.yml +0 -0
  334. {bumble-0.0.216 → bumble-0.0.218}/examples/mobly/bench/two_devices_bench_test.py +0 -0
  335. {bumble-0.0.216 → bumble-0.0.218}/examples/run_a2dp_info.py +0 -0
  336. {bumble-0.0.216 → bumble-0.0.218}/examples/run_a2dp_sink.py +0 -0
  337. {bumble-0.0.216 → bumble-0.0.218}/examples/run_a2dp_source.py +0 -0
  338. {bumble-0.0.216 → bumble-0.0.218}/examples/run_advertiser.py +0 -0
  339. {bumble-0.0.216 → bumble-0.0.218}/examples/run_ams_client.py +0 -0
  340. {bumble-0.0.216 → bumble-0.0.218}/examples/run_ancs_client.py +0 -0
  341. {bumble-0.0.216 → bumble-0.0.218}/examples/run_asha_sink.py +0 -0
  342. {bumble-0.0.216 → bumble-0.0.218}/examples/run_avrcp.py +0 -0
  343. {bumble-0.0.216 → bumble-0.0.218}/examples/run_channel_sounding.py +0 -0
  344. {bumble-0.0.216 → bumble-0.0.218}/examples/run_cig_setup.py +0 -0
  345. {bumble-0.0.216 → bumble-0.0.218}/examples/run_classic_connect.py +0 -0
  346. {bumble-0.0.216 → bumble-0.0.218}/examples/run_classic_discoverable.py +0 -0
  347. {bumble-0.0.216 → bumble-0.0.218}/examples/run_classic_discovery.py +0 -0
  348. {bumble-0.0.216 → bumble-0.0.218}/examples/run_connect_and_encrypt.py +0 -0
  349. {bumble-0.0.216 → bumble-0.0.218}/examples/run_controller.py +0 -0
  350. {bumble-0.0.216 → bumble-0.0.218}/examples/run_controller_with_scanner.py +0 -0
  351. {bumble-0.0.216 → bumble-0.0.218}/examples/run_csis_servers.py +0 -0
  352. {bumble-0.0.216 → bumble-0.0.218}/examples/run_device_with_snooper.py +0 -0
  353. {bumble-0.0.216 → bumble-0.0.218}/examples/run_esco_connection.py +0 -0
  354. {bumble-0.0.216 → bumble-0.0.218}/examples/run_extended_advertiser.py +0 -0
  355. {bumble-0.0.216 → bumble-0.0.218}/examples/run_extended_advertiser_2.py +0 -0
  356. {bumble-0.0.216 → bumble-0.0.218}/examples/run_gatt_client.py +0 -0
  357. {bumble-0.0.216 → bumble-0.0.218}/examples/run_gatt_client_and_server.py +0 -0
  358. {bumble-0.0.216 → bumble-0.0.218}/examples/run_gatt_server.py +0 -0
  359. {bumble-0.0.216 → bumble-0.0.218}/examples/run_gatt_server_with_pairing_delegate.py +0 -0
  360. {bumble-0.0.216 → bumble-0.0.218}/examples/run_gatt_with_adapters.py +0 -0
  361. {bumble-0.0.216 → bumble-0.0.218}/examples/run_hap_server.py +0 -0
  362. {bumble-0.0.216 → bumble-0.0.218}/examples/run_hfp_gateway.py +0 -0
  363. {bumble-0.0.216 → bumble-0.0.218}/examples/run_hfp_handsfree.py +0 -0
  364. {bumble-0.0.216 → bumble-0.0.218}/examples/run_hid_device.py +0 -0
  365. {bumble-0.0.216 → bumble-0.0.218}/examples/run_hid_host.py +0 -0
  366. {bumble-0.0.216 → bumble-0.0.218}/examples/run_mcp_client.py +0 -0
  367. {bumble-0.0.216 → bumble-0.0.218}/examples/run_notifier.py +0 -0
  368. {bumble-0.0.216 → bumble-0.0.218}/examples/run_rfcomm_client.py +0 -0
  369. {bumble-0.0.216 → bumble-0.0.218}/examples/run_rfcomm_server.py +0 -0
  370. {bumble-0.0.216 → bumble-0.0.218}/examples/run_scanner.py +0 -0
  371. {bumble-0.0.216 → bumble-0.0.218}/examples/run_unicast_server.py +0 -0
  372. {bumble-0.0.216 → bumble-0.0.218}/examples/run_vcp_renderer.py +0 -0
  373. {bumble-0.0.216 → bumble-0.0.218}/examples/speaker.json +0 -0
  374. {bumble-0.0.216 → bumble-0.0.218}/examples/vcp_renderer.html +0 -0
  375. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/.gitignore +0 -0
  376. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/.gitignore +0 -0
  377. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/build.gradle.kts +0 -0
  378. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/proguard-rules.pro +0 -0
  379. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/AndroidManifest.xml +0 -0
  380. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/ic_launcher-playstore.png +0 -0
  381. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Advertiser.kt +0 -0
  382. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/AutomationSnippet.java +0 -0
  383. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Connection.kt +0 -0
  384. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Gatt.kt +0 -0
  385. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/GattClient.kt +0 -0
  386. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/GattServer.kt +0 -0
  387. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/IoClient.kt +0 -0
  388. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/L2capClient.kt +0 -0
  389. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/L2capServer.kt +0 -0
  390. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/MainActivity.kt +0 -0
  391. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Mode.kt +0 -0
  392. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Model.kt +0 -0
  393. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Packet.kt +0 -0
  394. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Pinger.kt +0 -0
  395. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Ponger.kt +0 -0
  396. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Receiver.kt +0 -0
  397. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/RfcommClient.kt +0 -0
  398. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/RfcommServer.kt +0 -0
  399. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Scan.kt +0 -0
  400. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Sender.kt +0 -0
  401. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/SocketClient.kt +0 -0
  402. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/SocketServer.kt +0 -0
  403. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/ui/theme/Color.kt +0 -0
  404. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/ui/theme/Theme.kt +0 -0
  405. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/ui/theme/Type.kt +0 -0
  406. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/drawable/ic_launcher_background.xml +0 -0
  407. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/drawable/ic_launcher_foreground.xml +0 -0
  408. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
  409. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
  410. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp +0 -0
  411. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
  412. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp +0 -0
  413. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
  414. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp +0 -0
  415. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
  416. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp +0 -0
  417. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
  418. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp +0 -0
  419. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
  420. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/values/colors.xml +0 -0
  421. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/values/ic_launcher_background.xml +0 -0
  422. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/values/strings.xml +0 -0
  423. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/values/themes.xml +0 -0
  424. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/xml/backup_rules.xml +0 -0
  425. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/app/src/main/res/xml/data_extraction_rules.xml +0 -0
  426. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/build.gradle.kts +0 -0
  427. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/gradle/libs.versions.toml +0 -0
  428. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/gradle/wrapper/gradle-wrapper.jar +0 -0
  429. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/gradle/wrapper/gradle-wrapper.properties +0 -0
  430. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/gradle.properties +0 -0
  431. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/gradlew +0 -0
  432. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/gradlew.bat +0 -0
  433. {bumble-0.0.216 → bumble-0.0.218}/extras/android/BtBench/settings.gradle.kts +0 -0
  434. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/.gitignore +0 -0
  435. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/.gitignore +0 -0
  436. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/build.gradle.kts +0 -0
  437. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/proguard-rules.pro +0 -0
  438. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/AndroidManifest.xml +0 -0
  439. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/aidl/android/hardware/bluetooth/IBluetoothHci.aidl +0 -0
  440. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/aidl/android/hardware/bluetooth/IBluetoothHciCallbacks.aidl +0 -0
  441. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/aidl/android/hardware/bluetooth/Status.aidl +0 -0
  442. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/hidl/bluetooth/1.1/IBluetoothHci.hal +0 -0
  443. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/hidl/bluetooth/1.1/IBluetoothHciCallbacks.hal +0 -0
  444. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/ic_launcher-playstore.png +0 -0
  445. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/IBluetoothHci.java +0 -0
  446. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/IBluetoothHciCallbacks.java +0 -0
  447. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/Status.java +0 -0
  448. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_0/IBluetoothHci.java +0 -0
  449. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_0/IBluetoothHciCallbacks.java +0 -0
  450. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_0/Status.java +0 -0
  451. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_1/IBluetoothHci.java +0 -0
  452. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_1/IBluetoothHciCallbacks.java +0 -0
  453. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/CommandLineInterface.kt +0 -0
  454. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciHal.java +0 -0
  455. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciHalCallback.java +0 -0
  456. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciPacket.java +0 -0
  457. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciParser.java +0 -0
  458. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciProxy.java +0 -0
  459. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciServer.java +0 -0
  460. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/MainActivity.kt +0 -0
  461. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/ui/theme/Color.kt +0 -0
  462. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/ui/theme/Theme.kt +0 -0
  463. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/ui/theme/Type.kt +0 -0
  464. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
  465. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
  466. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
  467. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp +0 -0
  468. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
  469. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
  470. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp +0 -0
  471. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
  472. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
  473. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp +0 -0
  474. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
  475. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
  476. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp +0 -0
  477. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
  478. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
  479. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp +0 -0
  480. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
  481. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/values/colors.xml +0 -0
  482. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/values/ic_launcher_background.xml +0 -0
  483. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/values/strings.xml +0 -0
  484. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/values/themes.xml +0 -0
  485. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/xml/backup_rules.xml +0 -0
  486. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/app/src/main/res/xml/data_extraction_rules.xml +0 -0
  487. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/build.gradle.kts +0 -0
  488. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/gradle/libs.versions.toml +0 -0
  489. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/gradle/wrapper/gradle-wrapper.jar +0 -0
  490. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/gradle/wrapper/gradle-wrapper.properties +0 -0
  491. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/gradle.properties +0 -0
  492. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/gradlew +0 -0
  493. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/gradlew.bat +0 -0
  494. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/.gitignore +0 -0
  495. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/build.gradle.kts +0 -0
  496. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/consumer-rules.pro +0 -0
  497. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/proguard-rules.pro +0 -0
  498. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/AndroidManifest.xml +0 -0
  499. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/java/android/internal/hidl/base/V1_0/DebugInfo.java +0 -0
  500. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/java/android/internal/hidl/base/V1_0/IBase.java +0 -0
  501. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/java/android/os/HidlSupport.java +0 -0
  502. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/java/android/os/HwBinder.java +0 -0
  503. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/java/android/os/HwBlob.java +0 -0
  504. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/java/android/os/HwParcel.java +0 -0
  505. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/java/android/os/IHwBinder.java +0 -0
  506. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/java/android/os/IHwInterface.java +0 -0
  507. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/java/android/os/NativeHandle.java +0 -0
  508. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/lib/src/main/java/android/os/ServiceManager.java +0 -0
  509. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/scripts/generate_java_from_aidl.sh +0 -0
  510. {bumble-0.0.216 → bumble-0.0.218}/extras/android/RemoteHCI/settings.gradle.kts +0 -0
  511. {bumble-0.0.216 → bumble-0.0.218}/noxfile.py +0 -0
  512. {bumble-0.0.216 → bumble-0.0.218}/pyproject.toml +0 -0
  513. {bumble-0.0.216 → bumble-0.0.218}/rust/.gitignore +0 -0
  514. {bumble-0.0.216 → bumble-0.0.218}/rust/CHANGELOG.md +0 -0
  515. {bumble-0.0.216 → bumble-0.0.218}/rust/Cargo.lock +0 -0
  516. {bumble-0.0.216 → bumble-0.0.218}/rust/Cargo.toml +0 -0
  517. {bumble-0.0.216 → bumble-0.0.218}/rust/README.md +0 -0
  518. {bumble-0.0.216 → bumble-0.0.218}/rust/examples/battery_client.rs +0 -0
  519. {bumble-0.0.216 → bumble-0.0.218}/rust/examples/broadcast.rs +0 -0
  520. {bumble-0.0.216 → bumble-0.0.218}/rust/examples/scanner.rs +0 -0
  521. {bumble-0.0.216 → bumble-0.0.218}/rust/pytests/assigned_numbers.rs +0 -0
  522. {bumble-0.0.216 → bumble-0.0.218}/rust/pytests/pytests.rs +0 -0
  523. {bumble-0.0.216 → bumble-0.0.218}/rust/pytests/wrapper/drivers.rs +0 -0
  524. {bumble-0.0.216 → bumble-0.0.218}/rust/pytests/wrapper/hci.rs +0 -0
  525. {bumble-0.0.216 → bumble-0.0.218}/rust/pytests/wrapper/mod.rs +0 -0
  526. {bumble-0.0.216 → bumble-0.0.218}/rust/pytests/wrapper/transport.rs +0 -0
  527. {bumble-0.0.216 → bumble-0.0.218}/rust/resources/test/firmware/realtek/README.md +0 -0
  528. {bumble-0.0.216 → bumble-0.0.218}/rust/resources/test/firmware/realtek/rtl8723b_fw_structure.bin +0 -0
  529. {bumble-0.0.216 → bumble-0.0.218}/rust/resources/test/firmware/realtek/rtl8761bu_fw_structure.bin +0 -0
  530. {bumble-0.0.216 → bumble-0.0.218}/rust/src/adv.rs +0 -0
  531. {bumble-0.0.216 → bumble-0.0.218}/rust/src/cli/firmware/mod.rs +0 -0
  532. {bumble-0.0.216 → bumble-0.0.218}/rust/src/cli/firmware/rtk.rs +0 -0
  533. {bumble-0.0.216 → bumble-0.0.218}/rust/src/cli/l2cap/client_bridge.rs +0 -0
  534. {bumble-0.0.216 → bumble-0.0.218}/rust/src/cli/l2cap/mod.rs +0 -0
  535. {bumble-0.0.216 → bumble-0.0.218}/rust/src/cli/l2cap/server_bridge.rs +0 -0
  536. {bumble-0.0.216 → bumble-0.0.218}/rust/src/cli/mod.rs +0 -0
  537. {bumble-0.0.216 → bumble-0.0.218}/rust/src/cli/usb/mod.rs +0 -0
  538. {bumble-0.0.216 → bumble-0.0.218}/rust/src/internal/drivers/mod.rs +0 -0
  539. {bumble-0.0.216 → bumble-0.0.218}/rust/src/internal/drivers/rtk.rs +0 -0
  540. {bumble-0.0.216 → bumble-0.0.218}/rust/src/internal/hci/mod.rs +0 -0
  541. {bumble-0.0.216 → bumble-0.0.218}/rust/src/internal/hci/packets.pdl +0 -0
  542. {bumble-0.0.216 → bumble-0.0.218}/rust/src/internal/hci/tests.rs +0 -0
  543. {bumble-0.0.216 → bumble-0.0.218}/rust/src/internal/mod.rs +0 -0
  544. {bumble-0.0.216 → bumble-0.0.218}/rust/src/lib.rs +0 -0
  545. {bumble-0.0.216 → bumble-0.0.218}/rust/src/main.rs +0 -0
  546. {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/assigned_numbers/company_ids.rs +0 -0
  547. {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/assigned_numbers/mod.rs +0 -0
  548. {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/assigned_numbers/services.rs +0 -0
  549. {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/common.rs +0 -0
  550. {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/controller.rs +0 -0
  551. {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/core.rs +0 -0
  552. {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/device/mod.rs +0 -0
  553. {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/device/tests.rs +0 -0
  554. {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/drivers/mod.rs +0 -0
  555. {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/drivers/rtk.rs +0 -0
  556. {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/gatt_client.rs +0 -0
  557. {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/hci.rs +0 -0
  558. {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/host.rs +0 -0
  559. {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/l2cap.rs +0 -0
  560. {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/link.rs +0 -0
  561. {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/logging.rs +0 -0
  562. {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/mod.rs +0 -0
  563. {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/profile.rs +0 -0
  564. {bumble-0.0.216 → bumble-0.0.218}/rust/src/wrapper/transport.rs +0 -0
  565. {bumble-0.0.216 → bumble-0.0.218}/rust/tools/file_header.rs +0 -0
  566. {bumble-0.0.216 → bumble-0.0.218}/rust/tools/gen_assigned_numbers.rs +0 -0
  567. {bumble-0.0.216 → bumble-0.0.218}/scripts/process_android_emulator_protos.sh +0 -0
  568. {bumble-0.0.216 → bumble-0.0.218}/scripts/process_android_netsim_protos.sh +0 -0
  569. {bumble-0.0.216 → bumble-0.0.218}/setup.cfg +0 -0
  570. {bumble-0.0.216 → bumble-0.0.218}/tasks.py +0 -0
  571. {bumble-0.0.216 → bumble-0.0.218}/tests/__init__.py +0 -0
  572. {bumble-0.0.216 → bumble-0.0.218}/tests/a2dp_test.py +0 -0
  573. {bumble-0.0.216 → bumble-0.0.218}/tests/aics_test.py +0 -0
  574. {bumble-0.0.216 → bumble-0.0.218}/tests/asha_test.py +0 -0
  575. {bumble-0.0.216 → bumble-0.0.218}/tests/at_test.py +0 -0
  576. {bumble-0.0.216 → bumble-0.0.218}/tests/avdtp_test.py +0 -0
  577. {bumble-0.0.216 → bumble-0.0.218}/tests/avrcp_test.py +0 -0
  578. {bumble-0.0.216 → bumble-0.0.218}/tests/bap_test.py +0 -0
  579. {bumble-0.0.216 → bumble-0.0.218}/tests/bass_test.py +0 -0
  580. {bumble-0.0.216 → bumble-0.0.218}/tests/cap_test.py +0 -0
  581. {bumble-0.0.216 → bumble-0.0.218}/tests/codecs_test.py +0 -0
  582. {bumble-0.0.216 → bumble-0.0.218}/tests/core_test.py +0 -0
  583. {bumble-0.0.216 → bumble-0.0.218}/tests/csip_test.py +0 -0
  584. {bumble-0.0.216 → bumble-0.0.218}/tests/decoder_test.py +0 -0
  585. {bumble-0.0.216 → bumble-0.0.218}/tests/g722_sample.g722 +0 -0
  586. {bumble-0.0.216 → bumble-0.0.218}/tests/gatt_service_test.py +0 -0
  587. {bumble-0.0.216 → bumble-0.0.218}/tests/gatt_test.py +0 -0
  588. {bumble-0.0.216 → bumble-0.0.218}/tests/gmap_test.py +0 -0
  589. {bumble-0.0.216 → bumble-0.0.218}/tests/hci_data_001.bin +0 -0
  590. {bumble-0.0.216 → bumble-0.0.218}/tests/hci_test.py +0 -0
  591. {bumble-0.0.216 → bumble-0.0.218}/tests/hfp_test.py +0 -0
  592. {bumble-0.0.216 → bumble-0.0.218}/tests/host_test.py +0 -0
  593. {bumble-0.0.216 → bumble-0.0.218}/tests/import_test.py +0 -0
  594. {bumble-0.0.216 → bumble-0.0.218}/tests/keystore_test.py +0 -0
  595. {bumble-0.0.216 → bumble-0.0.218}/tests/l2cap_test.py +0 -0
  596. {bumble-0.0.216 → bumble-0.0.218}/tests/le_audio_test.py +0 -0
  597. {bumble-0.0.216 → bumble-0.0.218}/tests/mcp_test.py +0 -0
  598. {bumble-0.0.216 → bumble-0.0.218}/tests/pytest.ini +0 -0
  599. {bumble-0.0.216 → bumble-0.0.218}/tests/rfcomm_test.py +0 -0
  600. {bumble-0.0.216 → bumble-0.0.218}/tests/sdp_test.py +0 -0
  601. {bumble-0.0.216 → bumble-0.0.218}/tests/self_test.py +0 -0
  602. {bumble-0.0.216 → bumble-0.0.218}/tests/smp_test.py +0 -0
  603. {bumble-0.0.216 → bumble-0.0.218}/tests/test_utils.py +0 -0
  604. {bumble-0.0.216 → bumble-0.0.218}/tests/transport_tcp_server_test.py +0 -0
  605. {bumble-0.0.216 → bumble-0.0.218}/tests/transport_test.py +0 -0
  606. {bumble-0.0.216 → bumble-0.0.218}/tests/utils_test.py +0 -0
  607. {bumble-0.0.216 → bumble-0.0.218}/tests/vcp_test.py +0 -0
  608. {bumble-0.0.216 → bumble-0.0.218}/tests/vocs_test.py +0 -0
  609. {bumble-0.0.216 → bumble-0.0.218}/tools/__init__.py +0 -0
  610. {bumble-0.0.216 → bumble-0.0.218}/tools/generate_company_id_list.py +0 -0
  611. {bumble-0.0.216 → bumble-0.0.218}/tools/intel_fw_download.py +0 -0
  612. {bumble-0.0.216 → bumble-0.0.218}/tools/intel_util.py +0 -0
  613. {bumble-0.0.216 → bumble-0.0.218}/tools/rtk_fw_download.py +0 -0
  614. {bumble-0.0.216 → bumble-0.0.218}/tools/rtk_util.py +0 -0
  615. {bumble-0.0.216 → bumble-0.0.218}/web/.gitignore +0 -0
  616. {bumble-0.0.216 → bumble-0.0.218}/web/README.md +0 -0
  617. {bumble-0.0.216 → bumble-0.0.218}/web/bumble.js +0 -0
  618. {bumble-0.0.216 → bumble-0.0.218}/web/favicon.ico +0 -0
  619. {bumble-0.0.216 → bumble-0.0.218}/web/heart_rate_monitor/heart_rate_monitor.html +0 -0
  620. {bumble-0.0.216 → bumble-0.0.218}/web/heart_rate_monitor/heart_rate_monitor.js +0 -0
  621. {bumble-0.0.216 → bumble-0.0.218}/web/heart_rate_monitor/heart_rate_monitor.py +0 -0
  622. {bumble-0.0.216 → bumble-0.0.218}/web/scanner/scanner.css +0 -0
  623. {bumble-0.0.216 → bumble-0.0.218}/web/scanner/scanner.html +0 -0
  624. {bumble-0.0.216 → bumble-0.0.218}/web/scanner/scanner.js +0 -0
  625. {bumble-0.0.216 → bumble-0.0.218}/web/scanner/scanner.py +0 -0
  626. {bumble-0.0.216 → bumble-0.0.218}/web/speaker/logo.svg +0 -0
  627. {bumble-0.0.216 → bumble-0.0.218}/web/speaker/speaker.css +0 -0
  628. {bumble-0.0.216 → bumble-0.0.218}/web/speaker/speaker.html +0 -0
  629. {bumble-0.0.216 → bumble-0.0.218}/web/speaker/speaker.js +0 -0
  630. {bumble-0.0.216 → bumble-0.0.218}/web/speaker/speaker.py +0 -0
  631. {bumble-0.0.216 → bumble-0.0.218}/web/ui.js +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bumble
3
- Version: 0.0.216
3
+ Version: 0.0.218
4
4
  Summary: Bluetooth Stack for Apps, Emulation, Test and Experimentation
5
5
  Author-email: Google <bumble-dev@google.com>
6
6
  License-Expression: Apache-2.0
@@ -113,7 +113,7 @@ Bumble is easiest to use with a dedicated USB dongle.
113
113
  This is because internal Bluetooth interfaces tend to be locked down by the operating system.
114
114
  You can use the [usb_probe](/docs/mkdocs/src/apps_and_tools/usb_probe.md) tool (all platforms) or `lsusb` (Linux or macOS) to list the available USB devices on your system.
115
115
 
116
- See the [USB Transport](/docs/mkdocs/src/transports/usb.md) page for details on how to refer to USB devices. Also, if your are on a mac, see [these instructions](docs/mkdocs/src/platforms/macos.md).
116
+ See the [USB Transport](/docs/mkdocs/src/transports/usb.md) page for details on how to refer to USB devices. Also, if you are on a mac, see [these instructions](docs/mkdocs/src/platforms/macos.md).
117
117
 
118
118
  ## License
119
119
 
@@ -50,7 +50,7 @@ Bumble is easiest to use with a dedicated USB dongle.
50
50
  This is because internal Bluetooth interfaces tend to be locked down by the operating system.
51
51
  You can use the [usb_probe](/docs/mkdocs/src/apps_and_tools/usb_probe.md) tool (all platforms) or `lsusb` (Linux or macOS) to list the available USB devices on your system.
52
52
 
53
- See the [USB Transport](/docs/mkdocs/src/transports/usb.md) page for details on how to refer to USB devices. Also, if your are on a mac, see [these instructions](docs/mkdocs/src/platforms/macos.md).
53
+ See the [USB Transport](/docs/mkdocs/src/transports/usb.md) page for details on how to refer to USB devices. Also, if you are on a mac, see [these instructions](docs/mkdocs/src/platforms/macos.md).
54
54
 
55
55
  ## License
56
56
 
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.0.216'
32
- __version_tuple__ = version_tuple = (0, 0, 216)
31
+ __version__ = version = '0.0.218'
32
+ __version_tuple__ = version_tuple = (0, 0, 218)
33
33
 
34
- __commit_id__ = commit_id = 'gf8223ca81'
34
+ __commit_id__ = commit_id = 'g88ef65a4e'
@@ -2171,7 +2171,7 @@ def with_connection_from_address(function):
2171
2171
  @functools.wraps(function)
2172
2172
  def wrapper(device: Device, address: hci.Address, *args, **kwargs):
2173
2173
  if connection := device.pending_connections.get(address):
2174
- return function(device, connection, address, *args, **kwargs)
2174
+ return function(device, connection, *args, **kwargs)
2175
2175
  for connection in device.connections.values():
2176
2176
  if connection.peer_address == address:
2177
2177
  return function(device, connection, *args, **kwargs)
@@ -2263,8 +2263,6 @@ class Device(utils.CompositeEventEmitter):
2263
2263
  EVENT_CONNECTION_FAILURE = "connection_failure"
2264
2264
  EVENT_SCO_REQUEST = "sco_request"
2265
2265
  EVENT_INQUIRY_COMPLETE = "inquiry_complete"
2266
- EVENT_REMOTE_NAME = "remote_name"
2267
- EVENT_REMOTE_NAME_FAILURE = "remote_name_failure"
2268
2266
  EVENT_SCO_CONNECTION = "sco_connection"
2269
2267
  EVENT_SCO_CONNECTION_FAILURE = "sco_connection_failure"
2270
2268
  EVENT_CIS_REQUEST = "cis_request"
@@ -4727,7 +4725,7 @@ class Device(utils.CompositeEventEmitter):
4727
4725
  self, cis_acl_pairs: Sequence[tuple[int, Connection]]
4728
4726
  ) -> list[CisLink]:
4729
4727
  for cis_handle, acl_connection in cis_acl_pairs:
4730
- cis_id, cig_id = self._pending_cis.pop(cis_handle)
4728
+ cis_id, cig_id = self._pending_cis[cis_handle]
4731
4729
  self.cis_links[cis_handle] = CisLink(
4732
4730
  device=self,
4733
4731
  acl_connection=acl_connection,
@@ -4743,6 +4741,7 @@ class Device(utils.CompositeEventEmitter):
4743
4741
  }
4744
4742
 
4745
4743
  def on_cis_establishment(cis_link: CisLink) -> None:
4744
+ self._pending_cis.pop(cis_link.handle)
4746
4745
  if pending_future := pending_cis_establishments.get(cis_link.handle):
4747
4746
  pending_future.set_result(cis_link)
4748
4747
 
@@ -6443,18 +6442,14 @@ class Device(utils.CompositeEventEmitter):
6443
6442
 
6444
6443
  # [Classic only]
6445
6444
  @host_event_handler
6446
- @try_with_connection_from_address
6445
+ @with_connection_from_address
6447
6446
  def on_role_change(
6448
6447
  self,
6449
- connection: Optional[Connection],
6450
- peer_address: hci.Address,
6448
+ connection: Connection,
6451
6449
  new_role: hci.Role,
6452
6450
  ):
6453
- if connection:
6454
- connection.role = new_role
6455
- connection.emit(connection.EVENT_ROLE_CHANGE, new_role)
6456
- else:
6457
- logger.warning("Role change to unknown connection %s", peer_address)
6451
+ connection.role = new_role
6452
+ connection.emit(connection.EVENT_ROLE_CHANGE, new_role)
6458
6453
 
6459
6454
  # [Classic only]
6460
6455
  @host_event_handler
@@ -49,6 +49,10 @@ async def get_driver_for_host(host: Host) -> Optional[Driver]:
49
49
  driver_classes: dict[str, type[Driver]] = {"rtk": rtk.Driver, "intel": intel.Driver}
50
50
  probe_list: Iterable[str]
51
51
  if driver_name := host.hci_metadata.get("driver"):
52
+ # The "driver" metadata may include runtime options after a '/' (for example
53
+ # "intel/ddc=..."). Keep only the base driver name (the portion before the
54
+ # first slash) so it matches a key in driver_classes (e.g. "intel").
55
+ driver_name = driver_name.split("/")[0]
52
56
  # Only probe a single driver
53
57
  probe_list = [driver_name]
54
58
  else:
@@ -459,6 +459,10 @@ class Driver(common.Driver):
459
459
  == ModeOfOperation.OPERATIONAL
460
460
  ):
461
461
  logger.debug("firmware already loaded")
462
+ # If the firmeare is already loaded, still attempt to load any
463
+ # device configuration (DDC). DDC can be applied independently of a
464
+ # firmware reload and may contain runtime overrides or patches.
465
+ await self.load_ddc_if_any()
462
466
  return
463
467
 
464
468
  # We only support some platforms and variants.
@@ -598,17 +602,39 @@ class Driver(common.Driver):
598
602
  await self.reset_complete.wait()
599
603
  logger.debug("reset complete")
600
604
 
601
- # Load the device config if there is one.
605
+ await self.load_ddc_if_any(firmware_base_name)
606
+
607
+ async def load_ddc_if_any(self, firmware_base_name: Optional[str] = None) -> None:
608
+ """
609
+ Check for and load any Device Data Configuration (DDC) blobs.
610
+
611
+ Args:
612
+ firmware_base_name: Base name of the selected firmware (e.g. "ibt-XXXX-YYYY").
613
+ If None, don't attempt to look up a .ddc file that
614
+ corresponds to the firmware image.
615
+ Priority:
616
+ 1. If a ddc_override was provided via driver metadata, use it (highest priority).
617
+ 2. Otherwise, if firmware_base_name is provided, attempt to find a .ddc file
618
+ that corresponds to the selected firmware image.
619
+ 3. Finally, if a ddc_addon was provided, append/load it after the primary DDC.
620
+ """
621
+ # If an explicit DDC override was supplied, use it and skip file lookup.
602
622
  if self.ddc_override:
603
623
  logger.debug("loading overridden DDC")
604
624
  await self.load_device_config(self.ddc_override)
605
625
  else:
606
- ddc_name = f"{firmware_base_name}.ddc"
607
- ddc_path = _find_binary_path(ddc_name)
608
- if ddc_path:
609
- logger.debug(f"loading DDC from {ddc_path}")
610
- ddc_data = ddc_path.read_bytes()
611
- await self.load_device_config(ddc_data)
626
+ # Only attempt .ddc file lookup if a firmware_base_name was provided.
627
+ if firmware_base_name is None:
628
+ logger.debug(
629
+ "no firmware_base_name provided; skipping .ddc file lookup"
630
+ )
631
+ else:
632
+ ddc_name = f"{firmware_base_name}.ddc"
633
+ ddc_path = _find_binary_path(ddc_name)
634
+ if ddc_path:
635
+ logger.debug(f"loading DDC from {ddc_path}")
636
+ ddc_data = ddc_path.read_bytes()
637
+ await self.load_device_config(ddc_data)
612
638
  if self.ddc_addon:
613
639
  logger.debug("loading DDC addon")
614
640
  await self.load_device_config(self.ddc_addon)
@@ -489,9 +489,9 @@ STATUS_CODES = {
489
489
 
490
490
  @dataclasses.dataclass
491
491
  class HfConfiguration:
492
- supported_hf_features: list[HfFeature]
493
- supported_hf_indicators: list[HfIndicator]
494
- supported_audio_codecs: list[AudioCodec]
492
+ supported_hf_features: collections.abc.Sequence[HfFeature]
493
+ supported_hf_indicators: collections.abc.Sequence[HfIndicator]
494
+ supported_audio_codecs: collections.abc.Sequence[AudioCodec]
495
495
 
496
496
 
497
497
  @dataclasses.dataclass
@@ -753,7 +753,7 @@ class HfProtocol(utils.EventEmitter):
753
753
 
754
754
  # Build local features.
755
755
  self.supported_hf_features = sum(configuration.supported_hf_features)
756
- self.supported_audio_codecs = configuration.supported_audio_codecs
756
+ self.supported_audio_codecs = list(configuration.supported_audio_codecs)
757
757
 
758
758
  self.hf_indicators = {
759
759
  indicator: HfIndicatorState(indicator=indicator)
@@ -550,7 +550,7 @@ class Host(utils.EventEmitter):
550
550
  logger.debug(
551
551
  'HCI LE flow control: '
552
552
  f'le_acl_data_packet_length={le_acl_data_packet_length},'
553
- f'total_num_le_acl_data_packets={total_num_le_acl_data_packets}'
553
+ f'total_num_le_acl_data_packets={total_num_le_acl_data_packets},'
554
554
  f'iso_data_packet_length={iso_data_packet_length},'
555
555
  f'total_num_iso_data_packets={total_num_iso_data_packets}'
556
556
  )
@@ -273,12 +273,19 @@ class HearingAccessService(gatt.TemplateService):
273
273
  def on_disconnection(_reason) -> None:
274
274
  self.currently_connected_clients.discard(connection)
275
275
 
276
+ @connection.on(connection.EVENT_CONNECTION_ATT_MTU_UPDATE)
277
+ def on_mtu_update(*_: Any) -> None:
278
+ self.on_incoming_connection(connection)
279
+
280
+ @connection.on(connection.EVENT_CONNECTION_ENCRYPTION_CHANGE)
281
+ def on_encryption_change(*_: Any) -> None:
282
+ self.on_incoming_connection(connection)
283
+
276
284
  @connection.on(connection.EVENT_PAIRING)
277
285
  def on_pairing(*_: Any) -> None:
278
- self.on_incoming_paired_connection(connection)
286
+ self.on_incoming_connection(connection)
279
287
 
280
- if connection.peer_resolvable_address:
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 on_incoming_paired_connection(self, connection: Connection):
325
+ def on_incoming_connection(self, connection: Connection):
319
326
  '''Setup initial operations to handle a remote bonded HAP device'''
320
327
  # TODO Should we filter on HAP device only ?
328
+
329
+ if not connection.is_encrypted:
330
+ logging.debug(f'HAS: {connection.peer_address} is not encrypted')
331
+ return
332
+
333
+ if not connection.peer_resolvable_address:
334
+ logging.debug(f'HAS: {connection.peer_address} is not paired')
335
+ return
336
+
337
+ if connection.att_mtu < 49:
338
+ logging.debug(
339
+ f'HAS: {connection.peer_address} invalid MTU={connection.att_mtu}'
340
+ )
341
+ return
342
+
343
+ if connection.peer_address in self.currently_connected_clients:
344
+ logging.debug(
345
+ f'HAS: Already connected to {connection.peer_address} nothing to do'
346
+ )
347
+ return
348
+
321
349
  self.currently_connected_clients.add(connection)
322
350
  if (
323
351
  connection.peer_address
@@ -457,6 +485,7 @@ class HearingAccessService(gatt.TemplateService):
457
485
  connection,
458
486
  self.hearing_aid_preset_control_point,
459
487
  value=op_list[0].to_bytes(len(op_list) == 1),
488
+ force=True, # TODO GATT notification subscription should be persistent
460
489
  )
461
490
  # Remove item once sent, and keep the non sent item in the list
462
491
  op_list.pop(0)
@@ -84,7 +84,12 @@ async def open_transport(name: str) -> Transport:
84
84
  scheme, *tail = name.split(':', 1)
85
85
  spec = tail[0] if tail else None
86
86
  metadata = None
87
- if spec and (m := re.search(r'\[(\w+=\w+(?:,\w+=\w+)*,?)\]', spec)):
87
+ # If a spec is provided, check for a metadata section in square brackets.
88
+ # The regex captures a comma-separated list of key=value pairs (allowing an
89
+ # optional trailing comma). The key is matched by \w+ and the value by [^,\]]+,
90
+ # meaning the value may contain any character except a comma or a closing
91
+ # bracket (']').
92
+ if spec and (m := re.search(r'\[(\w+=[^,\]]+(?:,\w+=[^,\]]+)*,?)\]', spec)):
88
93
  metadata_str = m.group(1)
89
94
  if m.start() == 0:
90
95
  # <metadata><spec>
@@ -131,7 +131,11 @@ def publish_grpc_port(grpc_port: int, instance_number: int) -> bool:
131
131
 
132
132
  def cleanup():
133
133
  logger.debug("removing .ini file")
134
- ini_file.unlink()
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
- StreamPacketSource,
99
+ SerialPacketSource,
65
100
  device,
66
101
  baudrate=speed,
67
102
  rtscts=rtscts,
@@ -69,4 +104,23 @@ async def open_serial_transport(spec: str) -> Transport:
69
104
  )
70
105
  packet_sink = StreamPacketSink(serial_transport)
71
106
 
107
+ logger.debug('waiting for the port to be ready')
108
+ await packet_source.wait_until_ready()
109
+ logger.debug('port is ready')
110
+
111
+ # Try to assert DTR
112
+ assert serial_transport.serial is not None
113
+ try:
114
+ serial_transport.serial.dtr = True
115
+ logger.debug(
116
+ f"DSR={serial_transport.serial.dsr}, DTR={serial_transport.serial.dtr}"
117
+ )
118
+ except Exception as e:
119
+ logger.warning(f'could not assert DTR: {e}')
120
+
121
+ # Wait a bit after opening the port, if requested
122
+ if delay > 0.0:
123
+ logger.debug(f'waiting {delay} seconds after opening the port')
124
+ await asyncio.sleep(delay)
125
+
72
126
  return Transport(packet_source, packet_sink)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bumble
3
- Version: 0.0.216
3
+ Version: 0.0.218
4
4
  Summary: Bluetooth Stack for Apps, Emulation, Test and Experimentation
5
5
  Author-email: Google <bumble-dev@google.com>
6
6
  License-Expression: Apache-2.0
@@ -113,7 +113,7 @@ Bumble is easiest to use with a dedicated USB dongle.
113
113
  This is because internal Bluetooth interfaces tend to be locked down by the operating system.
114
114
  You can use the [usb_probe](/docs/mkdocs/src/apps_and_tools/usb_probe.md) tool (all platforms) or `lsusb` (Linux or macOS) to list the available USB devices on your system.
115
115
 
116
- See the [USB Transport](/docs/mkdocs/src/transports/usb.md) page for details on how to refer to USB devices. Also, if your are on a mac, see [these instructions](docs/mkdocs/src/platforms/macos.md).
116
+ See the [USB Transport](/docs/mkdocs/src/transports/usb.md) page for details on how to refer to USB devices. Also, if you are on a mac, see [these instructions](docs/mkdocs/src/platforms/macos.md).
117
117
 
118
118
  ## License
119
119
 
@@ -0,0 +1,21 @@
1
+ SERIAL TRANSPORT
2
+ ================
3
+
4
+ The serial transport implements sending/receiving HCI packets over a UART (a.k.a serial port).
5
+
6
+ ## Moniker
7
+ The moniker syntax for a serial transport is:
8
+ `<device-path>[,<speed>][,rtscts][,dsrdtr][,delay]`
9
+
10
+ When `<speed>` is omitted, the default value of 1000000 is used.
11
+ When `rtscts` is specified, RTS/CTS hardware flow control is enabled.
12
+ When `dsrdtr` is specified, DSR/DTR hardware flow control is enabled.
13
+ When `delay` is specified, a short delay is added after opening the port.
14
+
15
+ !!! example
16
+ ```
17
+ /dev/tty.usbmodem0006839912172
18
+ /dev/tty.usbmodem0006839912172,1000000
19
+ /dev/tty.usbmodem0006839912172,rtscts
20
+ /dev/tty.usbmodem0006839912172,rtscts,delay
21
+ ```
@@ -761,6 +761,34 @@ async def test_inquiry_result_with_rssi():
761
761
  m.assert_called_with(hci.Address("00:11:22:33:44:55/P"), 3, mock.ANY, 5)
762
762
 
763
763
 
764
+ # -----------------------------------------------------------------------------
765
+ @pytest.mark.parametrize(
766
+ "roles",
767
+ (
768
+ (hci.Role.PERIPHERAL, hci.Role.CENTRAL),
769
+ (hci.Role.CENTRAL, hci.Role.PERIPHERAL),
770
+ ),
771
+ )
772
+ @pytest.mark.asyncio
773
+ async def test_accept_classic_connection(roles: tuple[hci.Role, hci.Role]):
774
+ devices = TwoDevices()
775
+ devices[0].classic_enabled = True
776
+ devices[1].classic_enabled = True
777
+ await devices[0].power_on()
778
+ await devices[1].power_on()
779
+
780
+ accept_task = asyncio.create_task(devices[1].accept(role=roles[1]))
781
+ await devices[0].connect(
782
+ devices[1].public_address, transport=PhysicalTransport.BR_EDR
783
+ )
784
+ await accept_task
785
+
786
+ assert devices.connections[0]
787
+ assert devices.connections[0].role == roles[0]
788
+ assert devices.connections[1]
789
+ assert devices.connections[1].role == roles[1]
790
+
791
+
764
792
  # -----------------------------------------------------------------------------
765
793
  async def run_test_device():
766
794
  await test_device_connect_parallel()
@@ -82,7 +82,6 @@ async def hap_client():
82
82
  )
83
83
 
84
84
  await devices.setup_connection()
85
- # TODO negotiate MTU > 49 to not truncate preset names
86
85
 
87
86
  # Mock encryption.
88
87
  devices.connections[0].encryption = 1 # type: ignore
@@ -93,6 +92,9 @@ async def hap_client():
93
92
  )
94
93
 
95
94
  peer = device.Peer(devices.connections[1]) # type: ignore
95
+ await peer.request_mtu(49)
96
+ peer2 = device.Peer(devices.connections[0]) # type: ignore
97
+ await peer2.request_mtu(49)
96
98
  hap_client = await peer.discover_service_and_create_proxy(
97
99
  hap.HearingAccessServiceProxy
98
100
  )
@@ -1,12 +0,0 @@
1
- SERIAL TRANSPORT
2
- ================
3
-
4
- The serial transport implements sending/receiving HCI packets over a UART (a.k.a serial port).
5
-
6
- ## Moniker
7
- The moniker syntax for a serial transport is: `serial:<device-path>[,<speed>]`
8
- When `<speed>` is omitted, the default value of 1000000 is used
9
-
10
- !!! example
11
- `serial:/dev/tty.usbmodem0006839912172,1000000`
12
- Opens the serial port `/dev/tty.usbmodem0006839912172` at `1000000`bps
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes