bumble 0.0.208__tar.gz → 0.0.209__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 (625) hide show
  1. {bumble-0.0.208 → bumble-0.0.209}/PKG-INFO +1 -1
  2. {bumble-0.0.208 → bumble-0.0.209}/bumble/_version.py +2 -2
  3. {bumble-0.0.208 → bumble-0.0.209}/bumble/att.py +10 -2
  4. {bumble-0.0.208 → bumble-0.0.209}/bumble/controller.py +7 -8
  5. {bumble-0.0.208 → bumble-0.0.209}/bumble/core.py +5 -4
  6. {bumble-0.0.208 → bumble-0.0.209}/bumble/device.py +25 -26
  7. {bumble-0.0.208 → bumble-0.0.209}/bumble/gatt.py +16 -0
  8. {bumble-0.0.208 → bumble-0.0.209}/bumble/hci.py +76 -71
  9. {bumble-0.0.208 → bumble-0.0.209}/bumble/host.py +8 -3
  10. {bumble-0.0.208 → bumble-0.0.209}/bumble/l2cap.py +2 -2
  11. {bumble-0.0.208 → bumble-0.0.209}/bumble/link.py +2 -2
  12. {bumble-0.0.208 → bumble-0.0.209}/bumble/pandora/host.py +12 -11
  13. {bumble-0.0.208 → bumble-0.0.209}/bumble/pandora/security.py +2 -3
  14. {bumble-0.0.208 → bumble-0.0.209}/bumble/pandora/utils.py +2 -2
  15. bumble-0.0.209/bumble/profiles/ancs.py +514 -0
  16. {bumble-0.0.208 → bumble-0.0.209}/bumble/smp.py +3 -3
  17. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/usb.py +1 -3
  18. {bumble-0.0.208 → bumble-0.0.209}/bumble.egg-info/PKG-INFO +1 -1
  19. {bumble-0.0.208 → bumble-0.0.209}/bumble.egg-info/SOURCES.txt +3 -0
  20. bumble-0.0.209/docs/mkdocs/src/apps_and_tools/auracast.md +202 -0
  21. bumble-0.0.209/examples/run_ancs_client.py +215 -0
  22. {bumble-0.0.208 → bumble-0.0.209}/tests/device_test.py +4 -4
  23. {bumble-0.0.208 → bumble-0.0.209}/tests/self_test.py +3 -2
  24. {bumble-0.0.208 → bumble-0.0.209}/.devcontainer/devcontainer.json +0 -0
  25. {bumble-0.0.208 → bumble-0.0.209}/.git-blame-ignore-revs +0 -0
  26. {bumble-0.0.208 → bumble-0.0.209}/.github/workflows/code-check.yml +0 -0
  27. {bumble-0.0.208 → bumble-0.0.209}/.github/workflows/codeql-analysis.yml +0 -0
  28. {bumble-0.0.208 → bumble-0.0.209}/.github/workflows/python-avatar.yml +0 -0
  29. {bumble-0.0.208 → bumble-0.0.209}/.github/workflows/python-build-test.yml +0 -0
  30. {bumble-0.0.208 → bumble-0.0.209}/.github/workflows/python-publish.yml +0 -0
  31. {bumble-0.0.208 → bumble-0.0.209}/.gitignore +0 -0
  32. {bumble-0.0.208 → bumble-0.0.209}/.vscode/settings.json +0 -0
  33. {bumble-0.0.208 → bumble-0.0.209}/CONTRIBUTING.md +0 -0
  34. {bumble-0.0.208 → bumble-0.0.209}/LICENSE +0 -0
  35. {bumble-0.0.208 → bumble-0.0.209}/README.md +0 -0
  36. {bumble-0.0.208 → bumble-0.0.209}/apps/README.md +0 -0
  37. {bumble-0.0.208 → bumble-0.0.209}/apps/__init__.py +0 -0
  38. {bumble-0.0.208 → bumble-0.0.209}/apps/auracast.py +0 -0
  39. {bumble-0.0.208 → bumble-0.0.209}/apps/bench.py +0 -0
  40. {bumble-0.0.208 → bumble-0.0.209}/apps/ble_rpa_tool.py +0 -0
  41. {bumble-0.0.208 → bumble-0.0.209}/apps/console.py +0 -0
  42. {bumble-0.0.208 → bumble-0.0.209}/apps/controller_info.py +0 -0
  43. {bumble-0.0.208 → bumble-0.0.209}/apps/controller_loopback.py +0 -0
  44. {bumble-0.0.208 → bumble-0.0.209}/apps/controllers.py +0 -0
  45. {bumble-0.0.208 → bumble-0.0.209}/apps/device_info.py +0 -0
  46. {bumble-0.0.208 → bumble-0.0.209}/apps/gatt_dump.py +0 -0
  47. {bumble-0.0.208 → bumble-0.0.209}/apps/gg_bridge.py +0 -0
  48. {bumble-0.0.208 → bumble-0.0.209}/apps/hci_bridge.py +0 -0
  49. {bumble-0.0.208 → bumble-0.0.209}/apps/l2cap_bridge.py +0 -0
  50. {bumble-0.0.208 → bumble-0.0.209}/apps/lea_unicast/app.py +0 -0
  51. {bumble-0.0.208 → bumble-0.0.209}/apps/lea_unicast/index.html +0 -0
  52. {bumble-0.0.208 → bumble-0.0.209}/apps/link_relay/__init__.py +0 -0
  53. {bumble-0.0.208 → bumble-0.0.209}/apps/link_relay/link_relay.py +0 -0
  54. {bumble-0.0.208 → bumble-0.0.209}/apps/link_relay/logging.yml +0 -0
  55. {bumble-0.0.208 → bumble-0.0.209}/apps/pair.py +0 -0
  56. {bumble-0.0.208 → bumble-0.0.209}/apps/pandora_server.py +0 -0
  57. {bumble-0.0.208 → bumble-0.0.209}/apps/player/player.py +0 -0
  58. {bumble-0.0.208 → bumble-0.0.209}/apps/rfcomm_bridge.py +0 -0
  59. {bumble-0.0.208 → bumble-0.0.209}/apps/scan.py +0 -0
  60. {bumble-0.0.208 → bumble-0.0.209}/apps/show.py +0 -0
  61. {bumble-0.0.208 → bumble-0.0.209}/apps/speaker/__init__.py +0 -0
  62. {bumble-0.0.208 → bumble-0.0.209}/apps/speaker/logo.svg +0 -0
  63. {bumble-0.0.208 → bumble-0.0.209}/apps/speaker/speaker.css +0 -0
  64. {bumble-0.0.208 → bumble-0.0.209}/apps/speaker/speaker.html +0 -0
  65. {bumble-0.0.208 → bumble-0.0.209}/apps/speaker/speaker.js +0 -0
  66. {bumble-0.0.208 → bumble-0.0.209}/apps/speaker/speaker.py +0 -0
  67. {bumble-0.0.208 → bumble-0.0.209}/apps/unbond.py +0 -0
  68. {bumble-0.0.208 → bumble-0.0.209}/apps/usb_probe.py +0 -0
  69. {bumble-0.0.208 → bumble-0.0.209}/bumble/__init__.py +0 -0
  70. {bumble-0.0.208 → bumble-0.0.209}/bumble/a2dp.py +0 -0
  71. {bumble-0.0.208 → bumble-0.0.209}/bumble/at.py +0 -0
  72. {bumble-0.0.208 → bumble-0.0.209}/bumble/audio/__init__.py +0 -0
  73. {bumble-0.0.208 → bumble-0.0.209}/bumble/audio/io.py +0 -0
  74. {bumble-0.0.208 → bumble-0.0.209}/bumble/avc.py +0 -0
  75. {bumble-0.0.208 → bumble-0.0.209}/bumble/avctp.py +0 -0
  76. {bumble-0.0.208 → bumble-0.0.209}/bumble/avdtp.py +0 -0
  77. {bumble-0.0.208 → bumble-0.0.209}/bumble/avrcp.py +0 -0
  78. {bumble-0.0.208 → bumble-0.0.209}/bumble/bridge.py +0 -0
  79. {bumble-0.0.208 → bumble-0.0.209}/bumble/codecs.py +0 -0
  80. {bumble-0.0.208 → bumble-0.0.209}/bumble/colors.py +0 -0
  81. {bumble-0.0.208 → bumble-0.0.209}/bumble/company_ids.py +0 -0
  82. {bumble-0.0.208 → bumble-0.0.209}/bumble/crypto.py +0 -0
  83. {bumble-0.0.208 → bumble-0.0.209}/bumble/decoder.py +0 -0
  84. {bumble-0.0.208 → bumble-0.0.209}/bumble/drivers/__init__.py +0 -0
  85. {bumble-0.0.208 → bumble-0.0.209}/bumble/drivers/common.py +0 -0
  86. {bumble-0.0.208 → bumble-0.0.209}/bumble/drivers/intel.py +0 -0
  87. {bumble-0.0.208 → bumble-0.0.209}/bumble/drivers/rtk.py +0 -0
  88. {bumble-0.0.208 → bumble-0.0.209}/bumble/gap.py +0 -0
  89. {bumble-0.0.208 → bumble-0.0.209}/bumble/gatt_adapters.py +0 -0
  90. {bumble-0.0.208 → bumble-0.0.209}/bumble/gatt_client.py +0 -0
  91. {bumble-0.0.208 → bumble-0.0.209}/bumble/gatt_server.py +0 -0
  92. {bumble-0.0.208 → bumble-0.0.209}/bumble/helpers.py +0 -0
  93. {bumble-0.0.208 → bumble-0.0.209}/bumble/hfp.py +0 -0
  94. {bumble-0.0.208 → bumble-0.0.209}/bumble/hid.py +0 -0
  95. {bumble-0.0.208 → bumble-0.0.209}/bumble/keys.py +0 -0
  96. {bumble-0.0.208 → bumble-0.0.209}/bumble/pairing.py +0 -0
  97. {bumble-0.0.208 → bumble-0.0.209}/bumble/pandora/__init__.py +0 -0
  98. {bumble-0.0.208 → bumble-0.0.209}/bumble/pandora/config.py +0 -0
  99. {bumble-0.0.208 → bumble-0.0.209}/bumble/pandora/device.py +0 -0
  100. {bumble-0.0.208 → bumble-0.0.209}/bumble/pandora/l2cap.py +0 -0
  101. {bumble-0.0.208 → bumble-0.0.209}/bumble/pandora/py.typed +0 -0
  102. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/__init__.py +0 -0
  103. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/aics.py +0 -0
  104. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/ascs.py +0 -0
  105. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/asha.py +0 -0
  106. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/bap.py +0 -0
  107. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/bass.py +0 -0
  108. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/battery_service.py +0 -0
  109. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/cap.py +0 -0
  110. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/csip.py +0 -0
  111. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/device_information_service.py +0 -0
  112. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/gap.py +0 -0
  113. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/gatt_service.py +0 -0
  114. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/gmap.py +0 -0
  115. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/hap.py +0 -0
  116. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/heart_rate_service.py +0 -0
  117. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/le_audio.py +0 -0
  118. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/mcp.py +0 -0
  119. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/pacs.py +0 -0
  120. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/pbp.py +0 -0
  121. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/py.typed +0 -0
  122. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/tmap.py +0 -0
  123. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/vcs.py +0 -0
  124. {bumble-0.0.208 → bumble-0.0.209}/bumble/profiles/vocs.py +0 -0
  125. {bumble-0.0.208 → bumble-0.0.209}/bumble/py.typed +0 -0
  126. {bumble-0.0.208 → bumble-0.0.209}/bumble/rfcomm.py +0 -0
  127. {bumble-0.0.208 → bumble-0.0.209}/bumble/rtp.py +0 -0
  128. {bumble-0.0.208 → bumble-0.0.209}/bumble/sdp.py +0 -0
  129. {bumble-0.0.208 → bumble-0.0.209}/bumble/snoop.py +0 -0
  130. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/__init__.py +0 -0
  131. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/android_emulator.py +0 -0
  132. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/android_netsim.py +0 -0
  133. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/common.py +0 -0
  134. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/file.py +0 -0
  135. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/__init__.py +0 -0
  136. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/emulated_bluetooth_device_pb2.py +0 -0
  137. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/emulated_bluetooth_device_pb2.pyi +0 -0
  138. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/emulated_bluetooth_device_pb2_grpc.py +0 -0
  139. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/emulated_bluetooth_packets_pb2.py +0 -0
  140. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/emulated_bluetooth_packets_pb2.pyi +0 -0
  141. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/emulated_bluetooth_packets_pb2_grpc.py +0 -0
  142. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/emulated_bluetooth_pb2.py +0 -0
  143. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/emulated_bluetooth_pb2.pyi +0 -0
  144. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/emulated_bluetooth_pb2_grpc.py +0 -0
  145. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/emulated_bluetooth_vhci_pb2.py +0 -0
  146. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/emulated_bluetooth_vhci_pb2.pyi +0 -0
  147. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/emulated_bluetooth_vhci_pb2_grpc.py +0 -0
  148. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/grpc_endpoint_description_pb2.py +0 -0
  149. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/grpc_endpoint_description_pb2.pyi +0 -0
  150. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/grpc_endpoint_description_pb2_grpc.py +0 -0
  151. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/netsim/__init__.py +0 -0
  152. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/netsim/common_pb2.py +0 -0
  153. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/netsim/common_pb2.pyi +0 -0
  154. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/netsim/common_pb2_grpc.py +0 -0
  155. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/netsim/hci_packet_pb2.py +0 -0
  156. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/netsim/hci_packet_pb2.pyi +0 -0
  157. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/netsim/hci_packet_pb2_grpc.py +0 -0
  158. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/netsim/model_pb2.py +0 -0
  159. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/netsim/model_pb2.pyi +0 -0
  160. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/netsim/model_pb2_grpc.py +0 -0
  161. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/netsim/packet_streamer_pb2.py +0 -0
  162. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/netsim/packet_streamer_pb2.pyi +0 -0
  163. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/netsim/packet_streamer_pb2_grpc.py +0 -0
  164. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/netsim/startup_pb2.py +0 -0
  165. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/netsim/startup_pb2.pyi +0 -0
  166. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/netsim/startup_pb2_grpc.py +0 -0
  167. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/rootcanal/__init__.py +0 -0
  168. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/rootcanal/configuration_pb2.py +0 -0
  169. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/rootcanal/configuration_pb2.pyi +0 -0
  170. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/grpc_protobuf/rootcanal/configuration_pb2_grpc.py +0 -0
  171. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/hci_socket.py +0 -0
  172. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/pty.py +0 -0
  173. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/py.typed +0 -0
  174. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/pyusb.py +0 -0
  175. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/serial.py +0 -0
  176. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/tcp_client.py +0 -0
  177. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/tcp_server.py +0 -0
  178. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/udp.py +0 -0
  179. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/unix.py +0 -0
  180. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/vhci.py +0 -0
  181. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/ws_client.py +0 -0
  182. {bumble-0.0.208 → bumble-0.0.209}/bumble/transport/ws_server.py +0 -0
  183. {bumble-0.0.208 → bumble-0.0.209}/bumble/utils.py +0 -0
  184. {bumble-0.0.208 → bumble-0.0.209}/bumble/vendor/__init__.py +0 -0
  185. {bumble-0.0.208 → bumble-0.0.209}/bumble/vendor/android/__init__.py +0 -0
  186. {bumble-0.0.208 → bumble-0.0.209}/bumble/vendor/android/hci.py +0 -0
  187. {bumble-0.0.208 → bumble-0.0.209}/bumble/vendor/zephyr/__init__.py +0 -0
  188. {bumble-0.0.208 → bumble-0.0.209}/bumble/vendor/zephyr/hci.py +0 -0
  189. {bumble-0.0.208 → bumble-0.0.209}/bumble.egg-info/dependency_links.txt +0 -0
  190. {bumble-0.0.208 → bumble-0.0.209}/bumble.egg-info/entry_points.txt +0 -0
  191. {bumble-0.0.208 → bumble-0.0.209}/bumble.egg-info/requires.txt +0 -0
  192. {bumble-0.0.208 → bumble-0.0.209}/bumble.egg-info/top_level.txt +0 -0
  193. {bumble-0.0.208 → bumble-0.0.209}/docs/README.md +0 -0
  194. {bumble-0.0.208 → bumble-0.0.209}/docs/images/favicon.ico +0 -0
  195. {bumble-0.0.208 → bumble-0.0.209}/docs/images/logo.png +0 -0
  196. {bumble-0.0.208 → bumble-0.0.209}/docs/images/logo.svg +0 -0
  197. {bumble-0.0.208 → bumble-0.0.209}/docs/images/logo.vectornator/Artboard0.json +0 -0
  198. {bumble-0.0.208 → bumble-0.0.209}/docs/images/logo.vectornator/Document.json +0 -0
  199. {bumble-0.0.208 → bumble-0.0.209}/docs/images/logo.vectornator/Manifest.json +0 -0
  200. {bumble-0.0.208 → bumble-0.0.209}/docs/images/logo.vectornator/Thumbnail.png +0 -0
  201. {bumble-0.0.208 → bumble-0.0.209}/docs/images/logo.vectornator/UndoHistory.json +0 -0
  202. {bumble-0.0.208 → bumble-0.0.209}/docs/images/logo_framed.png +0 -0
  203. {bumble-0.0.208 → bumble-0.0.209}/docs/images/logo_framed.svg +0 -0
  204. {bumble-0.0.208 → bumble-0.0.209}/docs/images/logo_framed.vectornator/Artboard0.json +0 -0
  205. {bumble-0.0.208 → bumble-0.0.209}/docs/images/logo_framed.vectornator/Document.json +0 -0
  206. {bumble-0.0.208 → bumble-0.0.209}/docs/images/logo_framed.vectornator/Manifest.json +0 -0
  207. {bumble-0.0.208 → bumble-0.0.209}/docs/images/logo_framed.vectornator/Thumbnail.png +0 -0
  208. {bumble-0.0.208 → bumble-0.0.209}/docs/images/logo_framed.vectornator/UndoHistory.json +0 -0
  209. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/mkdocs.yml +0 -0
  210. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/requirements.txt +0 -0
  211. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/api/examples.md +0 -0
  212. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/api/guide.md +0 -0
  213. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/api/reference.md +0 -0
  214. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/apps_and_tools/bench.md +0 -0
  215. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/apps_and_tools/console.md +0 -0
  216. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/apps_and_tools/gatt_dump.md +0 -0
  217. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/apps_and_tools/gg_bridge.md +0 -0
  218. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/apps_and_tools/hci_bridge.md +0 -0
  219. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/apps_and_tools/index.md +0 -0
  220. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/apps_and_tools/link_relay.md +0 -0
  221. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/apps_and_tools/pair.md +0 -0
  222. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/apps_and_tools/show.md +0 -0
  223. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/apps_and_tools/speaker.md +0 -0
  224. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/apps_and_tools/unbond.md +0 -0
  225. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/apps_and_tools/usb_probe.md +0 -0
  226. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/components/controller.md +0 -0
  227. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/components/gatt.md +0 -0
  228. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/components/host.md +0 -0
  229. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/components/security_manager.md +0 -0
  230. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/development/code_style.md +0 -0
  231. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/development/contributing.md +0 -0
  232. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/development/python_environments.md +0 -0
  233. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/downloads/zephyr/hci_usb.zip +0 -0
  234. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/drivers/index.md +0 -0
  235. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/drivers/intel.md +0 -0
  236. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/drivers/realtek.md +0 -0
  237. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/examples/index.md +0 -0
  238. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/extras/android_bt_bench.md +0 -0
  239. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/extras/android_remote_hci.md +0 -0
  240. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/extras/index.md +0 -0
  241. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/getting_started.md +0 -0
  242. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/hardware/index.md +0 -0
  243. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/hive/index.md +0 -0
  244. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/hive/index.toml +0 -0
  245. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/hive/web/bumble.js +0 -0
  246. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/hive/web/heart_rate_monitor/heart_rate_monitor.html +0 -0
  247. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/hive/web/heart_rate_monitor/heart_rate_monitor.js +0 -0
  248. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/hive/web/heart_rate_monitor/heart_rate_monitor.py +0 -0
  249. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/hive/web/scanner/scanner.css +0 -0
  250. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/hive/web/scanner/scanner.html +0 -0
  251. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/hive/web/scanner/scanner.js +0 -0
  252. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/hive/web/scanner/scanner.py +0 -0
  253. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/hive/web/speaker/logo.svg +0 -0
  254. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/hive/web/speaker/speaker.css +0 -0
  255. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/hive/web/speaker/speaker.html +0 -0
  256. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/hive/web/speaker/speaker.js +0 -0
  257. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/hive/web/speaker/speaker.py +0 -0
  258. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/hive/web/ui.js +0 -0
  259. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/images/bumble_layers.svg +0 -0
  260. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/images/console_screenshot.png +0 -0
  261. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/images/favicon.ico +0 -0
  262. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/images/logo.png +0 -0
  263. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/images/logo_framed.png +0 -0
  264. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/images/speaker_screenshot.png +0 -0
  265. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/index.md +0 -0
  266. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/platforms/android.md +0 -0
  267. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/platforms/index.md +0 -0
  268. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/platforms/linux.md +0 -0
  269. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/platforms/macos.md +0 -0
  270. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/platforms/windows.md +0 -0
  271. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/platforms/winusb_driver.png +0 -0
  272. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/platforms/zephyr.md +0 -0
  273. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/transports/android_emulator.md +0 -0
  274. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/transports/file.md +0 -0
  275. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/transports/hci_socket.md +0 -0
  276. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/transports/index.md +0 -0
  277. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/transports/pty.md +0 -0
  278. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/transports/serial.md +0 -0
  279. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/transports/tcp_client.md +0 -0
  280. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/transports/tcp_server.md +0 -0
  281. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/transports/udp.md +0 -0
  282. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/transports/usb.md +0 -0
  283. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/transports/vhci.md +0 -0
  284. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/transports/ws_client.md +0 -0
  285. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/transports/ws_server.md +0 -0
  286. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/use_cases/index.md +0 -0
  287. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/use_cases/use_case_1.md +0 -0
  288. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/use_cases/use_case_2.md +0 -0
  289. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/use_cases/use_case_3.md +0 -0
  290. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/use_cases/use_case_4.md +0 -0
  291. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/use_cases/use_case_5.md +0 -0
  292. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/src/use_cases/use_case_6.md +0 -0
  293. {bumble-0.0.208 → bumble-0.0.209}/docs/mkdocs/theme/partials/footer.html +0 -0
  294. {bumble-0.0.208 → bumble-0.0.209}/environment.yml +0 -0
  295. {bumble-0.0.208 → bumble-0.0.209}/examples/README.md +0 -0
  296. {bumble-0.0.208 → bumble-0.0.209}/examples/a2dp_sink1.json +0 -0
  297. {bumble-0.0.208 → bumble-0.0.209}/examples/asha_sink.html +0 -0
  298. {bumble-0.0.208 → bumble-0.0.209}/examples/asha_sink1.json +0 -0
  299. {bumble-0.0.208 → bumble-0.0.209}/examples/asha_sink2.json +0 -0
  300. {bumble-0.0.208 → bumble-0.0.209}/examples/async_runner.py +0 -0
  301. {bumble-0.0.208 → bumble-0.0.209}/examples/avrcp_as_sink.html +0 -0
  302. {bumble-0.0.208 → bumble-0.0.209}/examples/battery_client.py +0 -0
  303. {bumble-0.0.208 → bumble-0.0.209}/examples/battery_server.py +0 -0
  304. {bumble-0.0.208 → bumble-0.0.209}/examples/classic1.json +0 -0
  305. {bumble-0.0.208 → bumble-0.0.209}/examples/classic2.json +0 -0
  306. {bumble-0.0.208 → bumble-0.0.209}/examples/cs_initiator.json +0 -0
  307. {bumble-0.0.208 → bumble-0.0.209}/examples/cs_reflector.json +0 -0
  308. {bumble-0.0.208 → bumble-0.0.209}/examples/device1.json +0 -0
  309. {bumble-0.0.208 → bumble-0.0.209}/examples/device2.json +0 -0
  310. {bumble-0.0.208 → bumble-0.0.209}/examples/device3.json +0 -0
  311. {bumble-0.0.208 → bumble-0.0.209}/examples/device_information_client.py +0 -0
  312. {bumble-0.0.208 → bumble-0.0.209}/examples/device_information_server.py +0 -0
  313. {bumble-0.0.208 → bumble-0.0.209}/examples/device_with_rpa.json +0 -0
  314. {bumble-0.0.208 → bumble-0.0.209}/examples/heart_rate_client.py +0 -0
  315. {bumble-0.0.208 → bumble-0.0.209}/examples/heart_rate_server.py +0 -0
  316. {bumble-0.0.208 → bumble-0.0.209}/examples/hfp_gateway.html +0 -0
  317. {bumble-0.0.208 → bumble-0.0.209}/examples/hfp_gateway.json +0 -0
  318. {bumble-0.0.208 → bumble-0.0.209}/examples/hfp_handsfree.html +0 -0
  319. {bumble-0.0.208 → bumble-0.0.209}/examples/hfp_handsfree.json +0 -0
  320. {bumble-0.0.208 → bumble-0.0.209}/examples/hid_key_map.py +0 -0
  321. {bumble-0.0.208 → bumble-0.0.209}/examples/hid_keyboard.json +0 -0
  322. {bumble-0.0.208 → bumble-0.0.209}/examples/hid_report_parser.py +0 -0
  323. {bumble-0.0.208 → bumble-0.0.209}/examples/keyboard.html +0 -0
  324. {bumble-0.0.208 → bumble-0.0.209}/examples/keyboard.json +0 -0
  325. {bumble-0.0.208 → bumble-0.0.209}/examples/keyboard.py +0 -0
  326. {bumble-0.0.208 → bumble-0.0.209}/examples/leaudio.json +0 -0
  327. {bumble-0.0.208 → bumble-0.0.209}/examples/leaudio_with_classic.json +0 -0
  328. {bumble-0.0.208 → bumble-0.0.209}/examples/mcp_server.html +0 -0
  329. {bumble-0.0.208 → bumble-0.0.209}/examples/mobly/bench/one_device_bench_test.py +0 -0
  330. {bumble-0.0.208 → bumble-0.0.209}/examples/mobly/bench/sample_config.yml +0 -0
  331. {bumble-0.0.208 → bumble-0.0.209}/examples/mobly/bench/two_devices_bench_test.py +0 -0
  332. {bumble-0.0.208 → bumble-0.0.209}/examples/run_a2dp_info.py +0 -0
  333. {bumble-0.0.208 → bumble-0.0.209}/examples/run_a2dp_sink.py +0 -0
  334. {bumble-0.0.208 → bumble-0.0.209}/examples/run_a2dp_source.py +0 -0
  335. {bumble-0.0.208 → bumble-0.0.209}/examples/run_advertiser.py +0 -0
  336. {bumble-0.0.208 → bumble-0.0.209}/examples/run_asha_sink.py +0 -0
  337. {bumble-0.0.208 → bumble-0.0.209}/examples/run_avrcp.py +0 -0
  338. {bumble-0.0.208 → bumble-0.0.209}/examples/run_channel_sounding.py +0 -0
  339. {bumble-0.0.208 → bumble-0.0.209}/examples/run_cig_setup.py +0 -0
  340. {bumble-0.0.208 → bumble-0.0.209}/examples/run_classic_connect.py +0 -0
  341. {bumble-0.0.208 → bumble-0.0.209}/examples/run_classic_discoverable.py +0 -0
  342. {bumble-0.0.208 → bumble-0.0.209}/examples/run_classic_discovery.py +0 -0
  343. {bumble-0.0.208 → bumble-0.0.209}/examples/run_connect_and_encrypt.py +0 -0
  344. {bumble-0.0.208 → bumble-0.0.209}/examples/run_controller.py +0 -0
  345. {bumble-0.0.208 → bumble-0.0.209}/examples/run_controller_with_scanner.py +0 -0
  346. {bumble-0.0.208 → bumble-0.0.209}/examples/run_csis_servers.py +0 -0
  347. {bumble-0.0.208 → bumble-0.0.209}/examples/run_device_with_snooper.py +0 -0
  348. {bumble-0.0.208 → bumble-0.0.209}/examples/run_esco_connection.py +0 -0
  349. {bumble-0.0.208 → bumble-0.0.209}/examples/run_extended_advertiser.py +0 -0
  350. {bumble-0.0.208 → bumble-0.0.209}/examples/run_extended_advertiser_2.py +0 -0
  351. {bumble-0.0.208 → bumble-0.0.209}/examples/run_gatt_client.py +0 -0
  352. {bumble-0.0.208 → bumble-0.0.209}/examples/run_gatt_client_and_server.py +0 -0
  353. {bumble-0.0.208 → bumble-0.0.209}/examples/run_gatt_server.py +0 -0
  354. {bumble-0.0.208 → bumble-0.0.209}/examples/run_gatt_with_adapters.py +0 -0
  355. {bumble-0.0.208 → bumble-0.0.209}/examples/run_hap_server.py +0 -0
  356. {bumble-0.0.208 → bumble-0.0.209}/examples/run_hfp_gateway.py +0 -0
  357. {bumble-0.0.208 → bumble-0.0.209}/examples/run_hfp_handsfree.py +0 -0
  358. {bumble-0.0.208 → bumble-0.0.209}/examples/run_hid_device.py +0 -0
  359. {bumble-0.0.208 → bumble-0.0.209}/examples/run_hid_host.py +0 -0
  360. {bumble-0.0.208 → bumble-0.0.209}/examples/run_mcp_client.py +0 -0
  361. {bumble-0.0.208 → bumble-0.0.209}/examples/run_notifier.py +0 -0
  362. {bumble-0.0.208 → bumble-0.0.209}/examples/run_rfcomm_client.py +0 -0
  363. {bumble-0.0.208 → bumble-0.0.209}/examples/run_rfcomm_server.py +0 -0
  364. {bumble-0.0.208 → bumble-0.0.209}/examples/run_scanner.py +0 -0
  365. {bumble-0.0.208 → bumble-0.0.209}/examples/run_unicast_server.py +0 -0
  366. {bumble-0.0.208 → bumble-0.0.209}/examples/run_vcp_renderer.py +0 -0
  367. {bumble-0.0.208 → bumble-0.0.209}/examples/speaker.json +0 -0
  368. {bumble-0.0.208 → bumble-0.0.209}/examples/vcp_renderer.html +0 -0
  369. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/.gitignore +0 -0
  370. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/.gitignore +0 -0
  371. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/build.gradle.kts +0 -0
  372. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/proguard-rules.pro +0 -0
  373. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/AndroidManifest.xml +0 -0
  374. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/ic_launcher-playstore.png +0 -0
  375. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Advertiser.kt +0 -0
  376. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/AutomationSnippet.java +0 -0
  377. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Connection.kt +0 -0
  378. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Gatt.kt +0 -0
  379. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/GattClient.kt +0 -0
  380. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/GattServer.kt +0 -0
  381. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/IoClient.kt +0 -0
  382. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/L2capClient.kt +0 -0
  383. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/L2capServer.kt +0 -0
  384. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/MainActivity.kt +0 -0
  385. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Mode.kt +0 -0
  386. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Model.kt +0 -0
  387. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Packet.kt +0 -0
  388. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Pinger.kt +0 -0
  389. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Ponger.kt +0 -0
  390. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Receiver.kt +0 -0
  391. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/RfcommClient.kt +0 -0
  392. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/RfcommServer.kt +0 -0
  393. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Scan.kt +0 -0
  394. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Sender.kt +0 -0
  395. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/SocketClient.kt +0 -0
  396. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/SocketServer.kt +0 -0
  397. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/ui/theme/Color.kt +0 -0
  398. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/ui/theme/Theme.kt +0 -0
  399. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/ui/theme/Type.kt +0 -0
  400. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/res/drawable/ic_launcher_background.xml +0 -0
  401. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/res/drawable/ic_launcher_foreground.xml +0 -0
  402. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
  403. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
  404. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp +0 -0
  405. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
  406. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp +0 -0
  407. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
  408. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp +0 -0
  409. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
  410. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp +0 -0
  411. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
  412. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp +0 -0
  413. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
  414. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/res/values/colors.xml +0 -0
  415. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/res/values/ic_launcher_background.xml +0 -0
  416. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/res/values/strings.xml +0 -0
  417. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/res/values/themes.xml +0 -0
  418. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/res/xml/backup_rules.xml +0 -0
  419. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/app/src/main/res/xml/data_extraction_rules.xml +0 -0
  420. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/build.gradle.kts +0 -0
  421. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/gradle/libs.versions.toml +0 -0
  422. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/gradle/wrapper/gradle-wrapper.jar +0 -0
  423. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/gradle/wrapper/gradle-wrapper.properties +0 -0
  424. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/gradle.properties +0 -0
  425. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/gradlew +0 -0
  426. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/gradlew.bat +0 -0
  427. {bumble-0.0.208 → bumble-0.0.209}/extras/android/BtBench/settings.gradle.kts +0 -0
  428. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/.gitignore +0 -0
  429. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/.gitignore +0 -0
  430. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/build.gradle.kts +0 -0
  431. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/proguard-rules.pro +0 -0
  432. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/AndroidManifest.xml +0 -0
  433. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/aidl/android/hardware/bluetooth/IBluetoothHci.aidl +0 -0
  434. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/aidl/android/hardware/bluetooth/IBluetoothHciCallbacks.aidl +0 -0
  435. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/aidl/android/hardware/bluetooth/Status.aidl +0 -0
  436. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/hidl/bluetooth/1.1/IBluetoothHci.hal +0 -0
  437. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/hidl/bluetooth/1.1/IBluetoothHciCallbacks.hal +0 -0
  438. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/ic_launcher-playstore.png +0 -0
  439. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/IBluetoothHci.java +0 -0
  440. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/IBluetoothHciCallbacks.java +0 -0
  441. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/Status.java +0 -0
  442. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_0/IBluetoothHci.java +0 -0
  443. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_0/IBluetoothHciCallbacks.java +0 -0
  444. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_0/Status.java +0 -0
  445. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_1/IBluetoothHci.java +0 -0
  446. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_1/IBluetoothHciCallbacks.java +0 -0
  447. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/CommandLineInterface.kt +0 -0
  448. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciHal.java +0 -0
  449. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciHalCallback.java +0 -0
  450. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciPacket.java +0 -0
  451. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciParser.java +0 -0
  452. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciProxy.java +0 -0
  453. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciServer.java +0 -0
  454. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/MainActivity.kt +0 -0
  455. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/ui/theme/Color.kt +0 -0
  456. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/ui/theme/Theme.kt +0 -0
  457. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/ui/theme/Type.kt +0 -0
  458. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
  459. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
  460. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
  461. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp +0 -0
  462. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
  463. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
  464. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp +0 -0
  465. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
  466. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
  467. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp +0 -0
  468. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
  469. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
  470. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp +0 -0
  471. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
  472. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
  473. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp +0 -0
  474. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
  475. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/values/colors.xml +0 -0
  476. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/values/ic_launcher_background.xml +0 -0
  477. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/values/strings.xml +0 -0
  478. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/values/themes.xml +0 -0
  479. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/xml/backup_rules.xml +0 -0
  480. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/app/src/main/res/xml/data_extraction_rules.xml +0 -0
  481. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/build.gradle.kts +0 -0
  482. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/gradle/libs.versions.toml +0 -0
  483. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/gradle/wrapper/gradle-wrapper.jar +0 -0
  484. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/gradle/wrapper/gradle-wrapper.properties +0 -0
  485. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/gradle.properties +0 -0
  486. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/gradlew +0 -0
  487. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/gradlew.bat +0 -0
  488. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/lib/.gitignore +0 -0
  489. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/lib/build.gradle.kts +0 -0
  490. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/lib/consumer-rules.pro +0 -0
  491. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/lib/proguard-rules.pro +0 -0
  492. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/lib/src/main/AndroidManifest.xml +0 -0
  493. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/lib/src/main/java/android/internal/hidl/base/V1_0/DebugInfo.java +0 -0
  494. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/lib/src/main/java/android/internal/hidl/base/V1_0/IBase.java +0 -0
  495. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/lib/src/main/java/android/os/HidlSupport.java +0 -0
  496. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/lib/src/main/java/android/os/HwBinder.java +0 -0
  497. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/lib/src/main/java/android/os/HwBlob.java +0 -0
  498. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/lib/src/main/java/android/os/HwParcel.java +0 -0
  499. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/lib/src/main/java/android/os/IHwBinder.java +0 -0
  500. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/lib/src/main/java/android/os/IHwInterface.java +0 -0
  501. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/lib/src/main/java/android/os/NativeHandle.java +0 -0
  502. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/lib/src/main/java/android/os/ServiceManager.java +0 -0
  503. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/scripts/generate_java_from_aidl.sh +0 -0
  504. {bumble-0.0.208 → bumble-0.0.209}/extras/android/RemoteHCI/settings.gradle.kts +0 -0
  505. {bumble-0.0.208 → bumble-0.0.209}/noxfile.py +0 -0
  506. {bumble-0.0.208 → bumble-0.0.209}/pyproject.toml +0 -0
  507. {bumble-0.0.208 → bumble-0.0.209}/rust/.gitignore +0 -0
  508. {bumble-0.0.208 → bumble-0.0.209}/rust/CHANGELOG.md +0 -0
  509. {bumble-0.0.208 → bumble-0.0.209}/rust/Cargo.lock +0 -0
  510. {bumble-0.0.208 → bumble-0.0.209}/rust/Cargo.toml +0 -0
  511. {bumble-0.0.208 → bumble-0.0.209}/rust/README.md +0 -0
  512. {bumble-0.0.208 → bumble-0.0.209}/rust/examples/battery_client.rs +0 -0
  513. {bumble-0.0.208 → bumble-0.0.209}/rust/examples/broadcast.rs +0 -0
  514. {bumble-0.0.208 → bumble-0.0.209}/rust/examples/scanner.rs +0 -0
  515. {bumble-0.0.208 → bumble-0.0.209}/rust/pytests/assigned_numbers.rs +0 -0
  516. {bumble-0.0.208 → bumble-0.0.209}/rust/pytests/pytests.rs +0 -0
  517. {bumble-0.0.208 → bumble-0.0.209}/rust/pytests/wrapper/drivers.rs +0 -0
  518. {bumble-0.0.208 → bumble-0.0.209}/rust/pytests/wrapper/hci.rs +0 -0
  519. {bumble-0.0.208 → bumble-0.0.209}/rust/pytests/wrapper/mod.rs +0 -0
  520. {bumble-0.0.208 → bumble-0.0.209}/rust/pytests/wrapper/transport.rs +0 -0
  521. {bumble-0.0.208 → bumble-0.0.209}/rust/resources/test/firmware/realtek/README.md +0 -0
  522. {bumble-0.0.208 → bumble-0.0.209}/rust/resources/test/firmware/realtek/rtl8723b_fw_structure.bin +0 -0
  523. {bumble-0.0.208 → bumble-0.0.209}/rust/resources/test/firmware/realtek/rtl8761bu_fw_structure.bin +0 -0
  524. {bumble-0.0.208 → bumble-0.0.209}/rust/src/adv.rs +0 -0
  525. {bumble-0.0.208 → bumble-0.0.209}/rust/src/cli/firmware/mod.rs +0 -0
  526. {bumble-0.0.208 → bumble-0.0.209}/rust/src/cli/firmware/rtk.rs +0 -0
  527. {bumble-0.0.208 → bumble-0.0.209}/rust/src/cli/l2cap/client_bridge.rs +0 -0
  528. {bumble-0.0.208 → bumble-0.0.209}/rust/src/cli/l2cap/mod.rs +0 -0
  529. {bumble-0.0.208 → bumble-0.0.209}/rust/src/cli/l2cap/server_bridge.rs +0 -0
  530. {bumble-0.0.208 → bumble-0.0.209}/rust/src/cli/mod.rs +0 -0
  531. {bumble-0.0.208 → bumble-0.0.209}/rust/src/cli/usb/mod.rs +0 -0
  532. {bumble-0.0.208 → bumble-0.0.209}/rust/src/internal/drivers/mod.rs +0 -0
  533. {bumble-0.0.208 → bumble-0.0.209}/rust/src/internal/drivers/rtk.rs +0 -0
  534. {bumble-0.0.208 → bumble-0.0.209}/rust/src/internal/hci/mod.rs +0 -0
  535. {bumble-0.0.208 → bumble-0.0.209}/rust/src/internal/hci/packets.pdl +0 -0
  536. {bumble-0.0.208 → bumble-0.0.209}/rust/src/internal/hci/tests.rs +0 -0
  537. {bumble-0.0.208 → bumble-0.0.209}/rust/src/internal/mod.rs +0 -0
  538. {bumble-0.0.208 → bumble-0.0.209}/rust/src/lib.rs +0 -0
  539. {bumble-0.0.208 → bumble-0.0.209}/rust/src/main.rs +0 -0
  540. {bumble-0.0.208 → bumble-0.0.209}/rust/src/wrapper/assigned_numbers/company_ids.rs +0 -0
  541. {bumble-0.0.208 → bumble-0.0.209}/rust/src/wrapper/assigned_numbers/mod.rs +0 -0
  542. {bumble-0.0.208 → bumble-0.0.209}/rust/src/wrapper/assigned_numbers/services.rs +0 -0
  543. {bumble-0.0.208 → bumble-0.0.209}/rust/src/wrapper/common.rs +0 -0
  544. {bumble-0.0.208 → bumble-0.0.209}/rust/src/wrapper/controller.rs +0 -0
  545. {bumble-0.0.208 → bumble-0.0.209}/rust/src/wrapper/core.rs +0 -0
  546. {bumble-0.0.208 → bumble-0.0.209}/rust/src/wrapper/device/mod.rs +0 -0
  547. {bumble-0.0.208 → bumble-0.0.209}/rust/src/wrapper/device/tests.rs +0 -0
  548. {bumble-0.0.208 → bumble-0.0.209}/rust/src/wrapper/drivers/mod.rs +0 -0
  549. {bumble-0.0.208 → bumble-0.0.209}/rust/src/wrapper/drivers/rtk.rs +0 -0
  550. {bumble-0.0.208 → bumble-0.0.209}/rust/src/wrapper/gatt_client.rs +0 -0
  551. {bumble-0.0.208 → bumble-0.0.209}/rust/src/wrapper/hci.rs +0 -0
  552. {bumble-0.0.208 → bumble-0.0.209}/rust/src/wrapper/host.rs +0 -0
  553. {bumble-0.0.208 → bumble-0.0.209}/rust/src/wrapper/l2cap.rs +0 -0
  554. {bumble-0.0.208 → bumble-0.0.209}/rust/src/wrapper/link.rs +0 -0
  555. {bumble-0.0.208 → bumble-0.0.209}/rust/src/wrapper/logging.rs +0 -0
  556. {bumble-0.0.208 → bumble-0.0.209}/rust/src/wrapper/mod.rs +0 -0
  557. {bumble-0.0.208 → bumble-0.0.209}/rust/src/wrapper/profile.rs +0 -0
  558. {bumble-0.0.208 → bumble-0.0.209}/rust/src/wrapper/transport.rs +0 -0
  559. {bumble-0.0.208 → bumble-0.0.209}/rust/tools/file_header.rs +0 -0
  560. {bumble-0.0.208 → bumble-0.0.209}/rust/tools/gen_assigned_numbers.rs +0 -0
  561. {bumble-0.0.208 → bumble-0.0.209}/scripts/process_android_emulator_protos.sh +0 -0
  562. {bumble-0.0.208 → bumble-0.0.209}/scripts/process_android_netsim_protos.sh +0 -0
  563. {bumble-0.0.208 → bumble-0.0.209}/setup.cfg +0 -0
  564. {bumble-0.0.208 → bumble-0.0.209}/tasks.py +0 -0
  565. {bumble-0.0.208 → bumble-0.0.209}/tests/__init__.py +0 -0
  566. {bumble-0.0.208 → bumble-0.0.209}/tests/a2dp_test.py +0 -0
  567. {bumble-0.0.208 → bumble-0.0.209}/tests/aics_test.py +0 -0
  568. {bumble-0.0.208 → bumble-0.0.209}/tests/asha_test.py +0 -0
  569. {bumble-0.0.208 → bumble-0.0.209}/tests/at_test.py +0 -0
  570. {bumble-0.0.208 → bumble-0.0.209}/tests/avdtp_test.py +0 -0
  571. {bumble-0.0.208 → bumble-0.0.209}/tests/avrcp_test.py +0 -0
  572. {bumble-0.0.208 → bumble-0.0.209}/tests/bap_test.py +0 -0
  573. {bumble-0.0.208 → bumble-0.0.209}/tests/bass_test.py +0 -0
  574. {bumble-0.0.208 → bumble-0.0.209}/tests/cap_test.py +0 -0
  575. {bumble-0.0.208 → bumble-0.0.209}/tests/codecs_test.py +0 -0
  576. {bumble-0.0.208 → bumble-0.0.209}/tests/core_test.py +0 -0
  577. {bumble-0.0.208 → bumble-0.0.209}/tests/csip_test.py +0 -0
  578. {bumble-0.0.208 → bumble-0.0.209}/tests/decoder_test.py +0 -0
  579. {bumble-0.0.208 → bumble-0.0.209}/tests/g722_sample.g722 +0 -0
  580. {bumble-0.0.208 → bumble-0.0.209}/tests/gatt_service_test.py +0 -0
  581. {bumble-0.0.208 → bumble-0.0.209}/tests/gatt_test.py +0 -0
  582. {bumble-0.0.208 → bumble-0.0.209}/tests/gmap_test.py +0 -0
  583. {bumble-0.0.208 → bumble-0.0.209}/tests/hap_test.py +0 -0
  584. {bumble-0.0.208 → bumble-0.0.209}/tests/hci_data_001.bin +0 -0
  585. {bumble-0.0.208 → bumble-0.0.209}/tests/hci_test.py +0 -0
  586. {bumble-0.0.208 → bumble-0.0.209}/tests/hfp_test.py +0 -0
  587. {bumble-0.0.208 → bumble-0.0.209}/tests/host_test.py +0 -0
  588. {bumble-0.0.208 → bumble-0.0.209}/tests/import_test.py +0 -0
  589. {bumble-0.0.208 → bumble-0.0.209}/tests/keystore_test.py +0 -0
  590. {bumble-0.0.208 → bumble-0.0.209}/tests/l2cap_test.py +0 -0
  591. {bumble-0.0.208 → bumble-0.0.209}/tests/le_audio_test.py +0 -0
  592. {bumble-0.0.208 → bumble-0.0.209}/tests/mcp_test.py +0 -0
  593. {bumble-0.0.208 → bumble-0.0.209}/tests/pytest.ini +0 -0
  594. {bumble-0.0.208 → bumble-0.0.209}/tests/rfcomm_test.py +0 -0
  595. {bumble-0.0.208 → bumble-0.0.209}/tests/sdp_test.py +0 -0
  596. {bumble-0.0.208 → bumble-0.0.209}/tests/smp_test.py +0 -0
  597. {bumble-0.0.208 → bumble-0.0.209}/tests/test_utils.py +0 -0
  598. {bumble-0.0.208 → bumble-0.0.209}/tests/transport_tcp_server_test.py +0 -0
  599. {bumble-0.0.208 → bumble-0.0.209}/tests/transport_test.py +0 -0
  600. {bumble-0.0.208 → bumble-0.0.209}/tests/utils_test.py +0 -0
  601. {bumble-0.0.208 → bumble-0.0.209}/tests/vcp_test.py +0 -0
  602. {bumble-0.0.208 → bumble-0.0.209}/tests/vocs_test.py +0 -0
  603. {bumble-0.0.208 → bumble-0.0.209}/tools/__init__.py +0 -0
  604. {bumble-0.0.208 → bumble-0.0.209}/tools/generate_company_id_list.py +0 -0
  605. {bumble-0.0.208 → bumble-0.0.209}/tools/intel_fw_download.py +0 -0
  606. {bumble-0.0.208 → bumble-0.0.209}/tools/intel_util.py +0 -0
  607. {bumble-0.0.208 → bumble-0.0.209}/tools/rtk_fw_download.py +0 -0
  608. {bumble-0.0.208 → bumble-0.0.209}/tools/rtk_util.py +0 -0
  609. {bumble-0.0.208 → bumble-0.0.209}/web/.gitignore +0 -0
  610. {bumble-0.0.208 → bumble-0.0.209}/web/README.md +0 -0
  611. {bumble-0.0.208 → bumble-0.0.209}/web/bumble.js +0 -0
  612. {bumble-0.0.208 → bumble-0.0.209}/web/favicon.ico +0 -0
  613. {bumble-0.0.208 → bumble-0.0.209}/web/heart_rate_monitor/heart_rate_monitor.html +0 -0
  614. {bumble-0.0.208 → bumble-0.0.209}/web/heart_rate_monitor/heart_rate_monitor.js +0 -0
  615. {bumble-0.0.208 → bumble-0.0.209}/web/heart_rate_monitor/heart_rate_monitor.py +0 -0
  616. {bumble-0.0.208 → bumble-0.0.209}/web/scanner/scanner.css +0 -0
  617. {bumble-0.0.208 → bumble-0.0.209}/web/scanner/scanner.html +0 -0
  618. {bumble-0.0.208 → bumble-0.0.209}/web/scanner/scanner.js +0 -0
  619. {bumble-0.0.208 → bumble-0.0.209}/web/scanner/scanner.py +0 -0
  620. {bumble-0.0.208 → bumble-0.0.209}/web/speaker/logo.svg +0 -0
  621. {bumble-0.0.208 → bumble-0.0.209}/web/speaker/speaker.css +0 -0
  622. {bumble-0.0.208 → bumble-0.0.209}/web/speaker/speaker.html +0 -0
  623. {bumble-0.0.208 → bumble-0.0.209}/web/speaker/speaker.js +0 -0
  624. {bumble-0.0.208 → bumble-0.0.209}/web/speaker/speaker.py +0 -0
  625. {bumble-0.0.208 → bumble-0.0.209}/web/ui.js +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: bumble
3
- Version: 0.0.208
3
+ Version: 0.0.209
4
4
  Summary: Bluetooth Stack for Apps, Emulation, Test and Experimentation
5
5
  Author-email: Google <bumble-dev@google.com>
6
6
  Project-URL: Homepage, https://github.com/google/bumble
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.0.208'
21
- __version_tuple__ = version_tuple = (0, 0, 208)
20
+ __version__ = version = '0.0.209'
21
+ __version_tuple__ = version_tuple = (0, 0, 209)
@@ -223,7 +223,12 @@ UUID_2_FIELD_SPEC = lambda x, y: UUID.parse_uuid_2(x, y) # noqa: E731
223
223
  # Exceptions
224
224
  # -----------------------------------------------------------------------------
225
225
  class ATT_Error(ProtocolError):
226
- def __init__(self, error_code, att_handle=0x0000, message=''):
226
+ error_code: int
227
+ att_handle: int
228
+
229
+ def __init__(
230
+ self, error_code: int, att_handle: int = 0x0000, message: str = ''
231
+ ) -> None:
227
232
  super().__init__(
228
233
  error_code,
229
234
  error_namespace='att',
@@ -233,7 +238,10 @@ class ATT_Error(ProtocolError):
233
238
  self.message = message
234
239
 
235
240
  def __str__(self):
236
- return f'ATT_Error(error={self.error_name}, handle={self.att_handle:04X}): {self.message}'
241
+ return (
242
+ f'ATT_Error(error={self.error_name}, '
243
+ f'handle={self.att_handle:04X}): {self.message}'
244
+ )
237
245
 
238
246
 
239
247
  # -----------------------------------------------------------------------------
@@ -25,8 +25,6 @@ import random
25
25
  import struct
26
26
  from bumble.colors import color
27
27
  from bumble.core import (
28
- BT_CENTRAL_ROLE,
29
- BT_PERIPHERAL_ROLE,
30
28
  BT_LE_TRANSPORT,
31
29
  BT_BR_EDR_TRANSPORT,
32
30
  )
@@ -47,6 +45,7 @@ from bumble.hci import (
47
45
  HCI_REMOTE_USER_TERMINATED_CONNECTION_ERROR,
48
46
  HCI_VERSION_BLUETOOTH_CORE_5_0,
49
47
  Address,
48
+ Role,
50
49
  HCI_AclDataPacket,
51
50
  HCI_AclDataPacketAssembler,
52
51
  HCI_Command_Complete_Event,
@@ -98,7 +97,7 @@ class CisLink:
98
97
  class Connection:
99
98
  controller: Controller
100
99
  handle: int
101
- role: int
100
+ role: Role
102
101
  peer_address: Address
103
102
  link: Any
104
103
  transport: int
@@ -390,7 +389,7 @@ class Controller:
390
389
  connection = Connection(
391
390
  controller=self,
392
391
  handle=connection_handle,
393
- role=BT_PERIPHERAL_ROLE,
392
+ role=Role.PERIPHERAL,
394
393
  peer_address=peer_address,
395
394
  link=self.link,
396
395
  transport=BT_LE_TRANSPORT,
@@ -450,7 +449,7 @@ class Controller:
450
449
  connection = Connection(
451
450
  controller=self,
452
451
  handle=connection_handle,
453
- role=BT_CENTRAL_ROLE,
452
+ role=Role.CENTRAL,
454
453
  peer_address=peer_address,
455
454
  link=self.link,
456
455
  transport=BT_LE_TRANSPORT,
@@ -469,7 +468,7 @@ class Controller:
469
468
  HCI_LE_Connection_Complete_Event(
470
469
  status=status,
471
470
  connection_handle=connection.handle if connection else 0,
472
- role=BT_CENTRAL_ROLE,
471
+ role=Role.CENTRAL,
473
472
  peer_address_type=le_create_connection_command.peer_address_type,
474
473
  peer_address=le_create_connection_command.peer_address,
475
474
  connection_interval=le_create_connection_command.connection_interval_min,
@@ -693,7 +692,7 @@ class Controller:
693
692
  controller=self,
694
693
  handle=connection_handle,
695
694
  # Role doesn't matter in Classic because they are managed by HCI_Role_Change and HCI_Role_Discovery
696
- role=BT_CENTRAL_ROLE,
695
+ role=Role.CENTRAL,
697
696
  peer_address=peer_address,
698
697
  link=self.link,
699
698
  transport=BT_BR_EDR_TRANSPORT,
@@ -761,7 +760,7 @@ class Controller:
761
760
  controller=self,
762
761
  handle=connection_handle,
763
762
  # Role doesn't matter in SCO.
764
- role=BT_CENTRAL_ROLE,
763
+ role=Role.CENTRAL,
765
764
  peer_address=peer_address,
766
765
  link=self.link,
767
766
  transport=BT_BR_EDR_TRANSPORT,
@@ -31,11 +31,12 @@ from bumble.utils import OpenIntEnum
31
31
  # -----------------------------------------------------------------------------
32
32
  # fmt: off
33
33
 
34
- BT_CENTRAL_ROLE = 0
35
- BT_PERIPHERAL_ROLE = 1
34
+ class PhysicalTransport(enum.IntEnum):
35
+ BR_EDR = 0
36
+ LE = 1
36
37
 
37
- BT_BR_EDR_TRANSPORT = 0
38
- BT_LE_TRANSPORT = 1
38
+ BT_BR_EDR_TRANSPORT = PhysicalTransport.BR_EDR
39
+ BT_LE_TRANSPORT = PhysicalTransport.LE
39
40
 
40
41
 
41
42
  # fmt: on
@@ -58,9 +58,7 @@ from .host import DataPacketQueue, Host
58
58
  from .profiles.gap import GenericAccessService
59
59
  from .core import (
60
60
  BT_BR_EDR_TRANSPORT,
61
- BT_CENTRAL_ROLE,
62
61
  BT_LE_TRANSPORT,
63
- BT_PERIPHERAL_ROLE,
64
62
  AdvertisingData,
65
63
  BaseBumbleError,
66
64
  ConnectionParameterUpdateError,
@@ -1555,13 +1553,13 @@ class IsoPacketStream:
1555
1553
  class Connection(CompositeEventEmitter):
1556
1554
  device: Device
1557
1555
  handle: int
1558
- transport: int
1556
+ transport: core.PhysicalTransport
1559
1557
  self_address: hci.Address
1560
1558
  self_resolvable_address: Optional[hci.Address]
1561
1559
  peer_address: hci.Address
1562
1560
  peer_resolvable_address: Optional[hci.Address]
1563
1561
  peer_le_features: Optional[hci.LeFeatureMask]
1564
- role: int
1562
+ role: hci.Role
1565
1563
  encryption: int
1566
1564
  authenticated: bool
1567
1565
  sc: bool
@@ -1674,9 +1672,9 @@ class Connection(CompositeEventEmitter):
1674
1672
  def role_name(self):
1675
1673
  if self.role is None:
1676
1674
  return 'NOT-SET'
1677
- if self.role == BT_CENTRAL_ROLE:
1675
+ if self.role == hci.Role.CENTRAL:
1678
1676
  return 'CENTRAL'
1679
- if self.role == BT_PERIPHERAL_ROLE:
1677
+ if self.role == hci.Role.PERIPHERAL:
1680
1678
  return 'PERIPHERAL'
1681
1679
  return f'UNKNOWN[{self.role}]'
1682
1680
 
@@ -1734,7 +1732,7 @@ class Connection(CompositeEventEmitter):
1734
1732
  async def encrypt(self, enable: bool = True) -> None:
1735
1733
  return await self.device.encrypt(self, enable)
1736
1734
 
1737
- async def switch_role(self, role: int) -> None:
1735
+ async def switch_role(self, role: hci.Role) -> None:
1738
1736
  return await self.device.switch_role(self, role)
1739
1737
 
1740
1738
  async def sustain(self, timeout: Optional[float] = None) -> None:
@@ -2713,7 +2711,7 @@ class Device(CompositeEventEmitter):
2713
2711
  if phy == hci.HCI_LE_1M_PHY:
2714
2712
  return True
2715
2713
 
2716
- feature_map = {
2714
+ feature_map: dict[int, hci.LeFeatureMask] = {
2717
2715
  hci.HCI_LE_2M_PHY: hci.LeFeatureMask.LE_2M_PHY,
2718
2716
  hci.HCI_LE_CODED_PHY: hci.LeFeatureMask.LE_CODED_PHY,
2719
2717
  }
@@ -2734,7 +2732,7 @@ class Device(CompositeEventEmitter):
2734
2732
  self,
2735
2733
  advertising_type: AdvertisingType = AdvertisingType.UNDIRECTED_CONNECTABLE_SCANNABLE,
2736
2734
  target: Optional[hci.Address] = None,
2737
- own_address_type: int = hci.OwnAddressType.RANDOM,
2735
+ own_address_type: hci.OwnAddressType = hci.OwnAddressType.RANDOM,
2738
2736
  auto_restart: bool = False,
2739
2737
  advertising_data: Optional[bytes] = None,
2740
2738
  scan_response_data: Optional[bytes] = None,
@@ -3015,7 +3013,7 @@ class Device(CompositeEventEmitter):
3015
3013
  active: bool = True,
3016
3014
  scan_interval: float = DEVICE_DEFAULT_SCAN_INTERVAL, # Scan interval in ms
3017
3015
  scan_window: float = DEVICE_DEFAULT_SCAN_WINDOW, # Scan window in ms
3018
- own_address_type: int = hci.OwnAddressType.RANDOM,
3016
+ own_address_type: hci.OwnAddressType = hci.OwnAddressType.RANDOM,
3019
3017
  filter_duplicates: bool = False,
3020
3018
  scanning_phys: Sequence[int] = (hci.HCI_LE_1M_PHY, hci.HCI_LE_CODED_PHY),
3021
3019
  ) -> None:
@@ -3091,7 +3089,7 @@ class Device(CompositeEventEmitter):
3091
3089
  # pylint: disable=line-too-long
3092
3090
  hci.HCI_LE_Set_Scan_Parameters_Command(
3093
3091
  le_scan_type=scan_type,
3094
- le_scan_interval=int(scan_window / 0.625),
3092
+ le_scan_interval=int(scan_interval / 0.625),
3095
3093
  le_scan_window=int(scan_window / 0.625),
3096
3094
  own_address_type=own_address_type,
3097
3095
  scanning_filter_policy=hci.HCI_LE_Set_Scan_Parameters_Command.BASIC_UNFILTERED_POLICY,
@@ -3381,11 +3379,11 @@ class Device(CompositeEventEmitter):
3381
3379
  async def connect(
3382
3380
  self,
3383
3381
  peer_address: Union[hci.Address, str],
3384
- transport: int = BT_LE_TRANSPORT,
3382
+ transport: core.PhysicalTransport = BT_LE_TRANSPORT,
3385
3383
  connection_parameters_preferences: Optional[
3386
- Dict[int, ConnectionParametersPreferences]
3384
+ dict[hci.Phy, ConnectionParametersPreferences]
3387
3385
  ] = None,
3388
- own_address_type: int = hci.OwnAddressType.RANDOM,
3386
+ own_address_type: hci.OwnAddressType = hci.OwnAddressType.RANDOM,
3389
3387
  timeout: Optional[float] = DEVICE_DEFAULT_CONNECT_TIMEOUT,
3390
3388
  always_resolve: bool = False,
3391
3389
  ) -> Connection:
@@ -3433,6 +3431,7 @@ class Device(CompositeEventEmitter):
3433
3431
  # Check parameters
3434
3432
  if transport not in (BT_LE_TRANSPORT, BT_BR_EDR_TRANSPORT):
3435
3433
  raise InvalidArgumentError('invalid transport')
3434
+ transport = core.PhysicalTransport(transport)
3436
3435
 
3437
3436
  # Adjust the transport automatically if we need to
3438
3437
  if transport == BT_LE_TRANSPORT and not self.le_enabled:
@@ -3628,7 +3627,7 @@ class Device(CompositeEventEmitter):
3628
3627
  else:
3629
3628
  # Save pending connection
3630
3629
  self.pending_connections[peer_address] = Connection.incomplete(
3631
- self, peer_address, BT_CENTRAL_ROLE
3630
+ self, peer_address, hci.Role.CENTRAL
3632
3631
  )
3633
3632
 
3634
3633
  # TODO: allow passing other settings
@@ -3683,7 +3682,7 @@ class Device(CompositeEventEmitter):
3683
3682
  async def accept(
3684
3683
  self,
3685
3684
  peer_address: Union[hci.Address, str] = hci.Address.ANY,
3686
- role: int = BT_PERIPHERAL_ROLE,
3685
+ role: hci.Role = hci.Role.PERIPHERAL,
3687
3686
  timeout: Optional[float] = DEVICE_DEFAULT_CONNECT_TIMEOUT,
3688
3687
  ) -> Connection:
3689
3688
  '''
@@ -3769,12 +3768,12 @@ class Device(CompositeEventEmitter):
3769
3768
  self.on('connection', on_connection)
3770
3769
  self.on('connection_failure', on_connection_failure)
3771
3770
 
3772
- # Save pending connection, with the Peripheral role.
3771
+ # Save pending connection, with the Peripheral hci.role.
3773
3772
  # Even if we requested a role switch in the hci.HCI_Accept_Connection_Request
3774
3773
  # command, this connection is still considered Peripheral until an eventual
3775
3774
  # role change event.
3776
3775
  self.pending_connections[peer_address] = Connection.incomplete(
3777
- self, peer_address, BT_PERIPHERAL_ROLE
3776
+ self, peer_address, hci.Role.PERIPHERAL
3778
3777
  )
3779
3778
 
3780
3779
  try:
@@ -3903,7 +3902,7 @@ class Device(CompositeEventEmitter):
3903
3902
  '''
3904
3903
 
3905
3904
  if use_l2cap:
3906
- if connection.role != BT_PERIPHERAL_ROLE:
3905
+ if connection.role != hci.Role.PERIPHERAL:
3907
3906
  raise InvalidStateError(
3908
3907
  'only peripheral can update connection parameters with l2cap'
3909
3908
  )
@@ -4148,10 +4147,10 @@ class Device(CompositeEventEmitter):
4148
4147
  if keys.ltk:
4149
4148
  return keys.ltk.value
4150
4149
 
4151
- if connection.role == BT_CENTRAL_ROLE and keys.ltk_central:
4150
+ if connection.role == hci.Role.CENTRAL and keys.ltk_central:
4152
4151
  return keys.ltk_central.value
4153
4152
 
4154
- if connection.role == BT_PERIPHERAL_ROLE and keys.ltk_peripheral:
4153
+ if connection.role == hci.Role.PERIPHERAL and keys.ltk_peripheral:
4155
4154
  return keys.ltk_peripheral.value
4156
4155
  return None
4157
4156
 
@@ -4303,7 +4302,7 @@ class Device(CompositeEventEmitter):
4303
4302
  self.emit('key_store_update')
4304
4303
 
4305
4304
  # [Classic only]
4306
- async def switch_role(self, connection: Connection, role: int):
4305
+ async def switch_role(self, connection: Connection, role: hci.Role):
4307
4306
  pending_role_change = asyncio.get_running_loop().create_future()
4308
4307
 
4309
4308
  def on_role_change(new_role):
@@ -5178,11 +5177,11 @@ class Device(CompositeEventEmitter):
5178
5177
  def on_connection(
5179
5178
  self,
5180
5179
  connection_handle: int,
5181
- transport: int,
5180
+ transport: core.PhysicalTransport,
5182
5181
  peer_address: hci.Address,
5183
5182
  self_resolvable_address: Optional[hci.Address],
5184
5183
  peer_resolvable_address: Optional[hci.Address],
5185
- role: int,
5184
+ role: hci.Role,
5186
5185
  connection_parameters: ConnectionParameters,
5187
5186
  ) -> None:
5188
5187
  # Convert all-zeros addresses into None.
@@ -5225,7 +5224,7 @@ class Device(CompositeEventEmitter):
5225
5224
  peer_address = resolved_address
5226
5225
 
5227
5226
  self_address = None
5228
- own_address_type: Optional[int] = None
5227
+ own_address_type: Optional[hci.OwnAddressType] = None
5229
5228
  if role == hci.HCI_CENTRAL_ROLE:
5230
5229
  own_address_type = self.connect_own_address_type
5231
5230
  assert own_address_type is not None
@@ -5353,7 +5352,7 @@ class Device(CompositeEventEmitter):
5353
5352
  elif self.classic_accept_any:
5354
5353
  # Save pending connection
5355
5354
  self.pending_connections[bd_addr] = Connection.incomplete(
5356
- self, bd_addr, BT_PERIPHERAL_ROLE
5355
+ self, bd_addr, hci.Role.PERIPHERAL
5357
5356
  )
5358
5357
 
5359
5358
  self.host.send_command_sync(
@@ -286,6 +286,22 @@ GATT_ASHA_AUDIO_STATUS_CHARACTERISTIC = UUID('38663f1a-e711-4cac-b641-32
286
286
  GATT_ASHA_VOLUME_CHARACTERISTIC = UUID('00e4ca9e-ab14-41e4-8823-f9e70c7e91df', 'Volume')
287
287
  GATT_ASHA_LE_PSM_OUT_CHARACTERISTIC = UUID('2d410339-82b6-42aa-b34e-e2e01df8cc1a', 'LE_PSM_OUT')
288
288
 
289
+ # Apple Notification Center Service
290
+ GATT_ANCS_SERVICE = UUID('7905F431-B5CE-4E99-A40F-4B1E122D00D0', 'Apple Notification Center')
291
+ GATT_ANCS_NOTIFICATION_SOURCE_CHARACTERISTIC = UUID('9FBF120D-6301-42D9-8C58-25E699A21DBD', 'Notification Source')
292
+ GATT_ANCS_CONTROL_POINT_CHARACTERISTIC = UUID('69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9', 'Control Point')
293
+ GATT_ANCS_DATA_SOURCE_CHARACTERISTIC = UUID('22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB', 'Data Source')
294
+
295
+ # Apple Media Service
296
+ GATT_AMS_SERVICE = UUID('89D3502B-0F36-433A-8EF4-C502AD55F8DC', 'Apple Media')
297
+ GATT_AMS_REMOTE_COMMAND_CHARACTERISTIC = UUID('9B3C81D8-57B1-4A8A-B8DF-0E56F7CA51C2', 'Remote Command')
298
+ GATT_AMS_ENTITY_UPDATE_CHARACTERISTIC = UUID('2F7CABCE-808D-411F-9A0C-BB92BA96C102', 'Entity Update')
299
+ GATT_AMS_ENTITY_ATTRIBUTE_CHARACTERISTIC = UUID('C6B2F38C-23AB-46D8-A6AB-A3A870BBD5D7', 'Entity Attribute')
300
+
301
+ # Misc Apple Services
302
+ GATT_APPLE_CONTINUITY_SERVICE = UUID('D0611E78-BBB4-4591-A5F8-487910AE4366', 'Apple Continuity')
303
+ GATT_APPLE_NEARBY_SERVICE = UUID('9FA480E0-4967-4542-9390-D343DC5D04AE', 'Apple Nearby')
304
+
289
305
  # Misc
290
306
  GATT_DEVICE_NAME_CHARACTERISTIC = UUID.from_16_bits(0x2A00, 'Device Name')
291
307
  GATT_APPEARANCE_CHARACTERISTIC = UUID.from_16_bits(0x2A01, 'Appearance')
@@ -24,6 +24,7 @@ import logging
24
24
  import secrets
25
25
  import struct
26
26
  from typing import Any, Callable, Dict, Iterable, List, Optional, Type, Union, ClassVar
27
+ from typing_extensions import Self
27
28
 
28
29
  from bumble import crypto
29
30
  from bumble.colors import color
@@ -34,6 +35,7 @@ from bumble.core import (
34
35
  InvalidArgumentError,
35
36
  InvalidPacketError,
36
37
  ProtocolError,
38
+ PhysicalTransport,
37
39
  bit_flags_to_strings,
38
40
  name_or_number,
39
41
  padded_bytes,
@@ -94,7 +96,7 @@ def map_class_of_device(class_of_device):
94
96
  )
95
97
 
96
98
 
97
- def phy_list_to_bits(phys: Optional[Iterable[int]]) -> int:
99
+ def phy_list_to_bits(phys: Optional[Iterable[Phy]]) -> int:
98
100
  if phys is None:
99
101
  return 0
100
102
 
@@ -700,30 +702,22 @@ HCI_ERROR_NAMES[HCI_SUCCESS] = 'HCI_SUCCESS'
700
702
  HCI_COMMAND_STATUS_PENDING = 0
701
703
 
702
704
 
705
+ class Phy(enum.IntEnum):
706
+ LE_1M = 1
707
+ LE_2M = 2
708
+ LE_CODED = 3
709
+
710
+
703
711
  # ACL
704
712
  HCI_ACL_PB_FIRST_NON_FLUSHABLE = 0
705
713
  HCI_ACL_PB_CONTINUATION = 1
706
714
  HCI_ACL_PB_FIRST_FLUSHABLE = 2
707
715
  HCI_ACK_PB_COMPLETE_L2CAP = 3
708
716
 
709
- # Roles
710
- HCI_CENTRAL_ROLE = 0
711
- HCI_PERIPHERAL_ROLE = 1
712
-
713
- HCI_ROLE_NAMES = {
714
- HCI_CENTRAL_ROLE: 'CENTRAL',
715
- HCI_PERIPHERAL_ROLE: 'PERIPHERAL'
716
- }
717
-
718
- # LE PHY Types
719
- HCI_LE_1M_PHY = 1
720
- HCI_LE_2M_PHY = 2
721
- HCI_LE_CODED_PHY = 3
722
-
723
- HCI_LE_PHY_NAMES = {
724
- HCI_LE_1M_PHY: 'LE 1M',
725
- HCI_LE_2M_PHY: 'LE 2M',
726
- HCI_LE_CODED_PHY: 'LE Coded'
717
+ HCI_LE_PHY_NAMES: dict[int,str] = {
718
+ Phy.LE_1M: 'LE 1M',
719
+ Phy.LE_2M: 'LE 2M',
720
+ Phy.LE_CODED: 'LE Coded'
727
721
  }
728
722
 
729
723
  HCI_LE_1M_PHY_BIT = 0
@@ -732,19 +726,13 @@ HCI_LE_CODED_PHY_BIT = 2
732
726
 
733
727
  HCI_LE_PHY_BIT_NAMES = ['LE_1M_PHY', 'LE_2M_PHY', 'LE_CODED_PHY']
734
728
 
735
- HCI_LE_PHY_TYPE_TO_BIT = {
736
- HCI_LE_1M_PHY: HCI_LE_1M_PHY_BIT,
737
- HCI_LE_2M_PHY: HCI_LE_2M_PHY_BIT,
738
- HCI_LE_CODED_PHY: HCI_LE_CODED_PHY_BIT
729
+ HCI_LE_PHY_TYPE_TO_BIT: dict[Phy, int] = {
730
+ Phy.LE_1M: HCI_LE_1M_PHY_BIT,
731
+ Phy.LE_2M: HCI_LE_2M_PHY_BIT,
732
+ Phy.LE_CODED: HCI_LE_CODED_PHY_BIT,
739
733
  }
740
734
 
741
735
 
742
- class Phy(enum.IntEnum):
743
- LE_1M = HCI_LE_1M_PHY
744
- LE_2M = HCI_LE_2M_PHY
745
- LE_CODED = HCI_LE_CODED_PHY
746
-
747
-
748
736
  class PhyBit(enum.IntFlag):
749
737
  LE_1M = 1 << HCI_LE_1M_PHY_BIT
750
738
  LE_2M = 1 << HCI_LE_2M_PHY_BIT
@@ -811,6 +799,19 @@ class CsSubeventAbortReason(OpenIntEnum):
811
799
  SCHEDULING_CONFLICT_OR_LIMITED_RESOURCES = 0x03
812
800
  UNSPECIFIED = 0x0F
813
801
 
802
+ class Role(enum.IntEnum):
803
+ CENTRAL = 0
804
+ PERIPHERAL = 1
805
+
806
+ # For Backward Compatibility.
807
+ HCI_CENTRAL_ROLE = Role.CENTRAL
808
+ HCI_PERIPHERAL_ROLE = Role.PERIPHERAL
809
+
810
+
811
+ HCI_LE_1M_PHY = Phy.LE_1M
812
+ HCI_LE_2M_PHY = Phy.LE_2M
813
+ HCI_LE_CODED_PHY = Phy.LE_CODED
814
+
814
815
 
815
816
  # Connection Parameters
816
817
  HCI_CONNECTION_INTERVAL_MS_PER_UNIT = 1.25
@@ -889,10 +890,15 @@ HCI_LINK_TYPE_NAMES = {
889
890
  }
890
891
 
891
892
  # Address types
892
- HCI_PUBLIC_DEVICE_ADDRESS_TYPE = 0x00
893
- HCI_RANDOM_DEVICE_ADDRESS_TYPE = 0x01
894
- HCI_PUBLIC_IDENTITY_ADDRESS_TYPE = 0x02
895
- HCI_RANDOM_IDENTITY_ADDRESS_TYPE = 0x03
893
+ class AddressType(OpenIntEnum):
894
+ PUBLIC_DEVICE = 0x00
895
+ RANDOM_DEVICE = 0x01
896
+ PUBLIC_IDENTITY = 0x02
897
+ RANDOM_IDENTITY = 0x03
898
+ # (Directed Only) Address is RPA, but controller cannot resolve.
899
+ UNABLE_TO_RESOLVE = 0xFE
900
+ # (Extended Only) No address.
901
+ ANONYMOUS = 0xFF
896
902
 
897
903
  # Supported Commands Masks
898
904
  # See Bluetooth spec @ 6.27 SUPPORTED COMMANDS
@@ -1582,8 +1588,8 @@ class HCI_Constant:
1582
1588
  return HCI_ERROR_NAMES.get(status, f'0x{status:02X}')
1583
1589
 
1584
1590
  @staticmethod
1585
- def role_name(role):
1586
- return HCI_ROLE_NAMES.get(role, str(role))
1591
+ def role_name(role: int) -> str:
1592
+ return Role(role).name
1587
1593
 
1588
1594
  @staticmethod
1589
1595
  def le_phy_name(phy):
@@ -1949,17 +1955,10 @@ class Address:
1949
1955
  address[0] is the LSB of the address, address[5] is the MSB.
1950
1956
  '''
1951
1957
 
1952
- PUBLIC_DEVICE_ADDRESS = 0x00
1953
- RANDOM_DEVICE_ADDRESS = 0x01
1954
- PUBLIC_IDENTITY_ADDRESS = 0x02
1955
- RANDOM_IDENTITY_ADDRESS = 0x03
1956
-
1957
- ADDRESS_TYPE_NAMES = {
1958
- PUBLIC_DEVICE_ADDRESS: 'PUBLIC_DEVICE_ADDRESS',
1959
- RANDOM_DEVICE_ADDRESS: 'RANDOM_DEVICE_ADDRESS',
1960
- PUBLIC_IDENTITY_ADDRESS: 'PUBLIC_IDENTITY_ADDRESS',
1961
- RANDOM_IDENTITY_ADDRESS: 'RANDOM_IDENTITY_ADDRESS',
1962
- }
1958
+ PUBLIC_DEVICE_ADDRESS = AddressType.PUBLIC_DEVICE
1959
+ RANDOM_DEVICE_ADDRESS = AddressType.RANDOM_DEVICE
1960
+ PUBLIC_IDENTITY_ADDRESS = AddressType.PUBLIC_IDENTITY
1961
+ RANDOM_IDENTITY_ADDRESS = AddressType.RANDOM_IDENTITY
1963
1962
 
1964
1963
  # Type declarations
1965
1964
  NIL: Address
@@ -1969,40 +1968,44 @@ class Address:
1969
1968
  # pylint: disable-next=unnecessary-lambda
1970
1969
  ADDRESS_TYPE_SPEC = {'size': 1, 'mapper': lambda x: Address.address_type_name(x)}
1971
1970
 
1972
- @staticmethod
1973
- def address_type_name(address_type):
1974
- return name_or_number(Address.ADDRESS_TYPE_NAMES, address_type)
1971
+ @classmethod
1972
+ def address_type_name(cls: type[Self], address_type: int) -> str:
1973
+ return AddressType(address_type).name
1975
1974
 
1976
- @staticmethod
1977
- def from_string_for_transport(string, transport):
1975
+ @classmethod
1976
+ def from_string_for_transport(
1977
+ cls: type[Self], string: str, transport: PhysicalTransport
1978
+ ) -> Self:
1978
1979
  if transport == BT_BR_EDR_TRANSPORT:
1979
1980
  address_type = Address.PUBLIC_DEVICE_ADDRESS
1980
1981
  else:
1981
1982
  address_type = Address.RANDOM_DEVICE_ADDRESS
1982
- return Address(string, address_type)
1983
+ return cls(string, address_type)
1983
1984
 
1984
- @staticmethod
1985
- def parse_address(data, offset):
1985
+ @classmethod
1986
+ def parse_address(cls: type[Self], data: bytes, offset: int) -> tuple[int, Self]:
1986
1987
  # Fix the type to a default value. This is used for parsing type-less Classic
1987
1988
  # addresses
1988
- return Address.parse_address_with_type(
1989
- data, offset, Address.PUBLIC_DEVICE_ADDRESS
1990
- )
1989
+ return cls.parse_address_with_type(data, offset, Address.PUBLIC_DEVICE_ADDRESS)
1991
1990
 
1992
- @staticmethod
1993
- def parse_random_address(data, offset):
1994
- return Address.parse_address_with_type(
1995
- data, offset, Address.RANDOM_DEVICE_ADDRESS
1996
- )
1991
+ @classmethod
1992
+ def parse_random_address(
1993
+ cls: type[Self], data: bytes, offset: int
1994
+ ) -> tuple[int, Self]:
1995
+ return cls.parse_address_with_type(data, offset, Address.RANDOM_DEVICE_ADDRESS)
1997
1996
 
1998
- @staticmethod
1999
- def parse_address_with_type(data, offset, address_type):
2000
- return offset + 6, Address(data[offset : offset + 6], address_type)
1997
+ @classmethod
1998
+ def parse_address_with_type(
1999
+ cls: type[Self], data: bytes, offset: int, address_type: AddressType
2000
+ ) -> tuple[int, Self]:
2001
+ return offset + 6, cls(data[offset : offset + 6], address_type)
2001
2002
 
2002
- @staticmethod
2003
- def parse_address_preceded_by_type(data, offset):
2004
- address_type = data[offset - 1]
2005
- return Address.parse_address_with_type(data, offset, address_type)
2003
+ @classmethod
2004
+ def parse_address_preceded_by_type(
2005
+ cls: type[Self], data: bytes, offset: int
2006
+ ) -> tuple[int, Self]:
2007
+ address_type = AddressType(data[offset - 1])
2008
+ return cls.parse_address_with_type(data, offset, address_type)
2006
2009
 
2007
2010
  @classmethod
2008
2011
  def generate_static_address(cls) -> Address:
@@ -2042,8 +2045,10 @@ class Address:
2042
2045
  )
2043
2046
 
2044
2047
  def __init__(
2045
- self, address: Union[bytes, str], address_type: int = RANDOM_DEVICE_ADDRESS
2046
- ):
2048
+ self,
2049
+ address: Union[bytes, str],
2050
+ address_type: AddressType = RANDOM_DEVICE_ADDRESS,
2051
+ ) -> None:
2047
2052
  '''
2048
2053
  Initialize an instance. `address` may be a byte array in little-endian
2049
2054
  format, or a hex string in big-endian format (with optional ':'
@@ -44,6 +44,7 @@ from bumble import hci
44
44
  from bumble.core import (
45
45
  BT_BR_EDR_TRANSPORT,
46
46
  BT_LE_TRANSPORT,
47
+ PhysicalTransport,
47
48
  ConnectionPHY,
48
49
  ConnectionParameters,
49
50
  )
@@ -186,7 +187,11 @@ class DataPacketQueue(pyee.EventEmitter):
186
187
  # -----------------------------------------------------------------------------
187
188
  class Connection:
188
189
  def __init__(
189
- self, host: Host, handle: int, peer_address: hci.Address, transport: int
190
+ self,
191
+ host: Host,
192
+ handle: int,
193
+ peer_address: hci.Address,
194
+ transport: PhysicalTransport,
190
195
  ):
191
196
  self.host = host
192
197
  self.handle = handle
@@ -979,7 +984,7 @@ class Host(AbortableEventEmitter):
979
984
  event.peer_address,
980
985
  getattr(event, 'local_resolvable_private_address', None),
981
986
  getattr(event, 'peer_resolvable_private_address', None),
982
- event.role,
987
+ hci.Role(event.role),
983
988
  connection_parameters,
984
989
  )
985
990
  else:
@@ -1337,7 +1342,7 @@ class Host(AbortableEventEmitter):
1337
1342
  f'role change for {event.bd_addr}: '
1338
1343
  f'{hci.HCI_Constant.role_name(event.new_role)}'
1339
1344
  )
1340
- self.emit('role_change', event.bd_addr, event.new_role)
1345
+ self.emit('role_change', event.bd_addr, hci.Role(event.new_role))
1341
1346
  else:
1342
1347
  logger.debug(
1343
1348
  f'role change for {event.bd_addr} failed: '
@@ -42,7 +42,6 @@ from typing import (
42
42
  from .utils import deprecated
43
43
  from .colors import color
44
44
  from .core import (
45
- BT_CENTRAL_ROLE,
46
45
  InvalidStateError,
47
46
  InvalidArgumentError,
48
47
  InvalidPacketError,
@@ -52,6 +51,7 @@ from .core import (
52
51
  from .hci import (
53
52
  HCI_LE_Connection_Update_Command,
54
53
  HCI_Object,
54
+ Role,
55
55
  key_with_value,
56
56
  name_or_number,
57
57
  )
@@ -1908,7 +1908,7 @@ class ChannelManager:
1908
1908
  def on_l2cap_connection_parameter_update_request(
1909
1909
  self, connection: Connection, cid: int, request
1910
1910
  ):
1911
- if connection.role == BT_CENTRAL_ROLE:
1911
+ if connection.role == Role.CENTRAL:
1912
1912
  self.send_control_frame(
1913
1913
  connection,
1914
1914
  cid,