bumble 0.0.188__tar.gz → 0.0.190__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 (551) hide show
  1. {bumble-0.0.188 → bumble-0.0.190}/.gitignore +2 -0
  2. {bumble-0.0.188/bumble.egg-info → bumble-0.0.190}/PKG-INFO +10 -10
  3. {bumble-0.0.188 → bumble-0.0.190}/apps/bench.py +17 -12
  4. {bumble-0.0.188 → bumble-0.0.190}/apps/speaker/speaker.py +1 -0
  5. {bumble-0.0.188 → bumble-0.0.190}/apps/unbond.py +1 -0
  6. {bumble-0.0.188 → bumble-0.0.190}/bumble/_version.py +2 -2
  7. {bumble-0.0.188 → bumble-0.0.190}/bumble/a2dp.py +2 -0
  8. {bumble-0.0.188 → bumble-0.0.190}/bumble/att.py +1 -1
  9. {bumble-0.0.188 → bumble-0.0.190}/bumble/avdtp.py +12 -6
  10. {bumble-0.0.188 → bumble-0.0.190}/bumble/avrcp.py +5 -3
  11. {bumble-0.0.188 → bumble-0.0.190}/bumble/controller.py +9 -9
  12. {bumble-0.0.188 → bumble-0.0.190}/bumble/device.py +28 -30
  13. {bumble-0.0.188 → bumble-0.0.190}/bumble/gap.py +1 -0
  14. {bumble-0.0.188 → bumble-0.0.190}/bumble/gatt.py +8 -6
  15. {bumble-0.0.188 → bumble-0.0.190}/bumble/gatt_client.py +1 -3
  16. {bumble-0.0.188 → bumble-0.0.190}/bumble/gatt_server.py +3 -3
  17. {bumble-0.0.188 → bumble-0.0.190}/bumble/hci.py +11 -9
  18. {bumble-0.0.188 → bumble-0.0.190}/bumble/hfp.py +25 -18
  19. {bumble-0.0.188 → bumble-0.0.190}/bumble/hid.py +1 -0
  20. {bumble-0.0.188 → bumble-0.0.190}/bumble/keys.py +4 -4
  21. {bumble-0.0.188 → bumble-0.0.190}/bumble/pandora/host.py +22 -18
  22. {bumble-0.0.188 → bumble-0.0.190}/bumble/pandora/security.py +3 -3
  23. {bumble-0.0.188 → bumble-0.0.190}/bumble/profiles/bap.py +38 -1
  24. {bumble-0.0.188 → bumble-0.0.190}/bumble/profiles/device_information_service.py +2 -2
  25. {bumble-0.0.188 → bumble-0.0.190}/bumble/sdp.py +12 -8
  26. {bumble-0.0.188 → bumble-0.0.190}/bumble/smp.py +3 -3
  27. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/common.py +2 -4
  28. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/tcp_server.py +24 -5
  29. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/usb.py +1 -1
  30. {bumble-0.0.188 → bumble-0.0.190}/bumble/utils.py +10 -8
  31. {bumble-0.0.188 → bumble-0.0.190/bumble.egg-info}/PKG-INFO +10 -10
  32. {bumble-0.0.188 → bumble-0.0.190}/bumble.egg-info/SOURCES.txt +1 -0
  33. {bumble-0.0.188 → bumble-0.0.190}/bumble.egg-info/requires.txt +9 -9
  34. {bumble-0.0.188 → bumble-0.0.190}/examples/async_runner.py +1 -0
  35. bumble-0.0.190/examples/hfp_handsfree.html +132 -0
  36. {bumble-0.0.188 → bumble-0.0.190}/examples/run_device_with_snooper.py +1 -0
  37. {bumble-0.0.188 → bumble-0.0.190}/examples/run_hfp_handsfree.py +38 -31
  38. {bumble-0.0.188 → bumble-0.0.190}/examples/run_hid_device.py +2 -0
  39. {bumble-0.0.188 → bumble-0.0.190}/examples/run_unicast_server.py +4 -3
  40. {bumble-0.0.188 → bumble-0.0.190}/examples/run_vcp_renderer.py +2 -0
  41. {bumble-0.0.188 → bumble-0.0.190}/setup.cfg +9 -9
  42. {bumble-0.0.188 → bumble-0.0.190}/tests/core_test.py +1 -0
  43. {bumble-0.0.188 → bumble-0.0.190}/tests/self_test.py +6 -6
  44. bumble-0.0.190/tests/transport_tcp_server_test.py +64 -0
  45. {bumble-0.0.188 → bumble-0.0.190}/tools/rtk_fw_download.py +2 -1
  46. bumble-0.0.188/examples/hfp_handsfree.html +0 -79
  47. {bumble-0.0.188 → bumble-0.0.190}/.git-blame-ignore-revs +0 -0
  48. {bumble-0.0.188 → bumble-0.0.190}/.github/workflows/code-check.yml +0 -0
  49. {bumble-0.0.188 → bumble-0.0.190}/.github/workflows/codeql-analysis.yml +0 -0
  50. {bumble-0.0.188 → bumble-0.0.190}/.github/workflows/python-avatar.yml +0 -0
  51. {bumble-0.0.188 → bumble-0.0.190}/.github/workflows/python-build-test.yml +0 -0
  52. {bumble-0.0.188 → bumble-0.0.190}/.github/workflows/python-publish.yml +0 -0
  53. {bumble-0.0.188 → bumble-0.0.190}/.vscode/settings.json +0 -0
  54. {bumble-0.0.188 → bumble-0.0.190}/CONTRIBUTING.md +0 -0
  55. {bumble-0.0.188 → bumble-0.0.190}/LICENSE +0 -0
  56. {bumble-0.0.188 → bumble-0.0.190}/README.md +0 -0
  57. {bumble-0.0.188 → bumble-0.0.190}/apps/README.md +0 -0
  58. {bumble-0.0.188 → bumble-0.0.190}/apps/__init__.py +0 -0
  59. {bumble-0.0.188 → bumble-0.0.190}/apps/ble_rpa_tool.py +0 -0
  60. {bumble-0.0.188 → bumble-0.0.190}/apps/console.py +0 -0
  61. {bumble-0.0.188 → bumble-0.0.190}/apps/controller_info.py +0 -0
  62. {bumble-0.0.188 → bumble-0.0.190}/apps/controller_loopback.py +0 -0
  63. {bumble-0.0.188 → bumble-0.0.190}/apps/controllers.py +0 -0
  64. {bumble-0.0.188 → bumble-0.0.190}/apps/gatt_dump.py +0 -0
  65. {bumble-0.0.188 → bumble-0.0.190}/apps/gg_bridge.py +0 -0
  66. {bumble-0.0.188 → bumble-0.0.190}/apps/hci_bridge.py +0 -0
  67. {bumble-0.0.188 → bumble-0.0.190}/apps/l2cap_bridge.py +0 -0
  68. {bumble-0.0.188 → bumble-0.0.190}/apps/link_relay/__init__.py +0 -0
  69. {bumble-0.0.188 → bumble-0.0.190}/apps/link_relay/link_relay.py +0 -0
  70. {bumble-0.0.188 → bumble-0.0.190}/apps/link_relay/logging.yml +0 -0
  71. {bumble-0.0.188 → bumble-0.0.190}/apps/pair.py +0 -0
  72. {bumble-0.0.188 → bumble-0.0.190}/apps/pandora_server.py +0 -0
  73. {bumble-0.0.188 → bumble-0.0.190}/apps/scan.py +0 -0
  74. {bumble-0.0.188 → bumble-0.0.190}/apps/show.py +0 -0
  75. {bumble-0.0.188 → bumble-0.0.190}/apps/speaker/__init__.py +0 -0
  76. {bumble-0.0.188 → bumble-0.0.190}/apps/speaker/logo.svg +0 -0
  77. {bumble-0.0.188 → bumble-0.0.190}/apps/speaker/speaker.css +0 -0
  78. {bumble-0.0.188 → bumble-0.0.190}/apps/speaker/speaker.html +0 -0
  79. {bumble-0.0.188 → bumble-0.0.190}/apps/speaker/speaker.js +0 -0
  80. {bumble-0.0.188 → bumble-0.0.190}/apps/usb_probe.py +0 -0
  81. {bumble-0.0.188 → bumble-0.0.190}/bumble/__init__.py +0 -0
  82. {bumble-0.0.188 → bumble-0.0.190}/bumble/at.py +0 -0
  83. {bumble-0.0.188 → bumble-0.0.190}/bumble/avc.py +0 -0
  84. {bumble-0.0.188 → bumble-0.0.190}/bumble/avctp.py +0 -0
  85. {bumble-0.0.188 → bumble-0.0.190}/bumble/bridge.py +0 -0
  86. {bumble-0.0.188 → bumble-0.0.190}/bumble/codecs.py +0 -0
  87. {bumble-0.0.188 → bumble-0.0.190}/bumble/colors.py +0 -0
  88. {bumble-0.0.188 → bumble-0.0.190}/bumble/company_ids.py +0 -0
  89. {bumble-0.0.188 → bumble-0.0.190}/bumble/core.py +0 -0
  90. {bumble-0.0.188 → bumble-0.0.190}/bumble/crypto.py +0 -0
  91. {bumble-0.0.188 → bumble-0.0.190}/bumble/decoder.py +0 -0
  92. {bumble-0.0.188 → bumble-0.0.190}/bumble/drivers/__init__.py +0 -0
  93. {bumble-0.0.188 → bumble-0.0.190}/bumble/drivers/common.py +0 -0
  94. {bumble-0.0.188 → bumble-0.0.190}/bumble/drivers/intel.py +0 -0
  95. {bumble-0.0.188 → bumble-0.0.190}/bumble/drivers/rtk.py +0 -0
  96. {bumble-0.0.188 → bumble-0.0.190}/bumble/helpers.py +0 -0
  97. {bumble-0.0.188 → bumble-0.0.190}/bumble/host.py +0 -0
  98. {bumble-0.0.188 → bumble-0.0.190}/bumble/l2cap.py +0 -0
  99. {bumble-0.0.188 → bumble-0.0.190}/bumble/link.py +0 -0
  100. {bumble-0.0.188 → bumble-0.0.190}/bumble/pairing.py +0 -0
  101. {bumble-0.0.188 → bumble-0.0.190}/bumble/pandora/__init__.py +0 -0
  102. {bumble-0.0.188 → bumble-0.0.190}/bumble/pandora/config.py +0 -0
  103. {bumble-0.0.188 → bumble-0.0.190}/bumble/pandora/device.py +0 -0
  104. {bumble-0.0.188 → bumble-0.0.190}/bumble/pandora/py.typed +0 -0
  105. {bumble-0.0.188 → bumble-0.0.190}/bumble/pandora/utils.py +0 -0
  106. {bumble-0.0.188 → bumble-0.0.190}/bumble/profiles/__init__.py +0 -0
  107. {bumble-0.0.188 → bumble-0.0.190}/bumble/profiles/asha_service.py +0 -0
  108. {bumble-0.0.188 → bumble-0.0.190}/bumble/profiles/battery_service.py +0 -0
  109. {bumble-0.0.188 → bumble-0.0.190}/bumble/profiles/cap.py +0 -0
  110. {bumble-0.0.188 → bumble-0.0.190}/bumble/profiles/csip.py +0 -0
  111. {bumble-0.0.188 → bumble-0.0.190}/bumble/profiles/heart_rate_service.py +0 -0
  112. {bumble-0.0.188 → bumble-0.0.190}/bumble/profiles/py.typed +0 -0
  113. {bumble-0.0.188 → bumble-0.0.190}/bumble/profiles/vcp.py +0 -0
  114. {bumble-0.0.188 → bumble-0.0.190}/bumble/py.typed +0 -0
  115. {bumble-0.0.188 → bumble-0.0.190}/bumble/rfcomm.py +0 -0
  116. {bumble-0.0.188 → bumble-0.0.190}/bumble/snoop.py +0 -0
  117. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/__init__.py +0 -0
  118. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/android_emulator.py +0 -0
  119. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/android_netsim.py +0 -0
  120. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/file.py +0 -0
  121. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/__init__.py +0 -0
  122. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/common_pb2.py +0 -0
  123. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/common_pb2.pyi +0 -0
  124. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/common_pb2_grpc.py +0 -0
  125. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/emulated_bluetooth_device_pb2.py +0 -0
  126. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/emulated_bluetooth_device_pb2.pyi +0 -0
  127. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/emulated_bluetooth_device_pb2_grpc.py +0 -0
  128. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/emulated_bluetooth_packets_pb2.py +0 -0
  129. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/emulated_bluetooth_packets_pb2.pyi +0 -0
  130. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/emulated_bluetooth_packets_pb2_grpc.py +0 -0
  131. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/emulated_bluetooth_pb2.py +0 -0
  132. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/emulated_bluetooth_pb2.pyi +0 -0
  133. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/emulated_bluetooth_pb2_grpc.py +0 -0
  134. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/emulated_bluetooth_vhci_pb2.py +0 -0
  135. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/emulated_bluetooth_vhci_pb2.pyi +0 -0
  136. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/emulated_bluetooth_vhci_pb2_grpc.py +0 -0
  137. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/grpc_endpoint_description_pb2.py +0 -0
  138. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/grpc_endpoint_description_pb2.pyi +0 -0
  139. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/grpc_endpoint_description_pb2_grpc.py +0 -0
  140. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/hci_packet_pb2.py +0 -0
  141. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/hci_packet_pb2.pyi +0 -0
  142. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/hci_packet_pb2_grpc.py +0 -0
  143. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/packet_streamer_pb2.py +0 -0
  144. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/packet_streamer_pb2.pyi +0 -0
  145. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/packet_streamer_pb2_grpc.py +0 -0
  146. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/startup_pb2.py +0 -0
  147. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/startup_pb2.pyi +0 -0
  148. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/grpc_protobuf/startup_pb2_grpc.py +0 -0
  149. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/hci_socket.py +0 -0
  150. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/pty.py +0 -0
  151. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/py.typed +0 -0
  152. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/pyusb.py +0 -0
  153. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/serial.py +0 -0
  154. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/tcp_client.py +0 -0
  155. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/udp.py +0 -0
  156. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/vhci.py +0 -0
  157. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/ws_client.py +0 -0
  158. {bumble-0.0.188 → bumble-0.0.190}/bumble/transport/ws_server.py +0 -0
  159. {bumble-0.0.188 → bumble-0.0.190}/bumble/vendor/__init__.py +0 -0
  160. {bumble-0.0.188 → bumble-0.0.190}/bumble/vendor/android/__init__.py +0 -0
  161. {bumble-0.0.188 → bumble-0.0.190}/bumble/vendor/android/hci.py +0 -0
  162. {bumble-0.0.188 → bumble-0.0.190}/bumble/vendor/zephyr/__init__.py +0 -0
  163. {bumble-0.0.188 → bumble-0.0.190}/bumble/vendor/zephyr/hci.py +0 -0
  164. {bumble-0.0.188 → bumble-0.0.190}/bumble.egg-info/dependency_links.txt +0 -0
  165. {bumble-0.0.188 → bumble-0.0.190}/bumble.egg-info/entry_points.txt +0 -0
  166. {bumble-0.0.188 → bumble-0.0.190}/bumble.egg-info/top_level.txt +0 -0
  167. {bumble-0.0.188 → bumble-0.0.190}/docs/README.md +0 -0
  168. {bumble-0.0.188 → bumble-0.0.190}/docs/images/logo.png +0 -0
  169. {bumble-0.0.188 → bumble-0.0.190}/docs/images/logo.svg +0 -0
  170. {bumble-0.0.188 → bumble-0.0.190}/docs/images/logo.vectornator/Artboard0.json +0 -0
  171. {bumble-0.0.188 → bumble-0.0.190}/docs/images/logo.vectornator/Document.json +0 -0
  172. {bumble-0.0.188 → bumble-0.0.190}/docs/images/logo.vectornator/Manifest.json +0 -0
  173. {bumble-0.0.188 → bumble-0.0.190}/docs/images/logo.vectornator/Thumbnail.png +0 -0
  174. {bumble-0.0.188 → bumble-0.0.190}/docs/images/logo.vectornator/UndoHistory.json +0 -0
  175. {bumble-0.0.188 → bumble-0.0.190}/docs/images/logo_framed.png +0 -0
  176. {bumble-0.0.188 → bumble-0.0.190}/docs/images/logo_framed.svg +0 -0
  177. {bumble-0.0.188 → bumble-0.0.190}/docs/images/logo_framed.vectornator/Artboard0.json +0 -0
  178. {bumble-0.0.188 → bumble-0.0.190}/docs/images/logo_framed.vectornator/Document.json +0 -0
  179. {bumble-0.0.188 → bumble-0.0.190}/docs/images/logo_framed.vectornator/Manifest.json +0 -0
  180. {bumble-0.0.188 → bumble-0.0.190}/docs/images/logo_framed.vectornator/Thumbnail.png +0 -0
  181. {bumble-0.0.188 → bumble-0.0.190}/docs/images/logo_framed.vectornator/UndoHistory.json +0 -0
  182. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/mkdocs.yml +0 -0
  183. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/requirements.txt +0 -0
  184. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/api/examples.md +0 -0
  185. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/api/guide.md +0 -0
  186. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/api/reference.md +0 -0
  187. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/apps_and_tools/bench.md +0 -0
  188. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/apps_and_tools/console.md +0 -0
  189. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/apps_and_tools/gatt_dump.md +0 -0
  190. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/apps_and_tools/gg_bridge.md +0 -0
  191. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/apps_and_tools/hci_bridge.md +0 -0
  192. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/apps_and_tools/index.md +0 -0
  193. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/apps_and_tools/link_relay.md +0 -0
  194. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/apps_and_tools/pair.md +0 -0
  195. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/apps_and_tools/show.md +0 -0
  196. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/apps_and_tools/speaker.md +0 -0
  197. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/apps_and_tools/unbond.md +0 -0
  198. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/apps_and_tools/usb_probe.md +0 -0
  199. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/components/controller.md +0 -0
  200. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/components/gatt.md +0 -0
  201. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/components/host.md +0 -0
  202. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/components/security_manager.md +0 -0
  203. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/development/code_style.md +0 -0
  204. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/development/contributing.md +0 -0
  205. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/development/python_environments.md +0 -0
  206. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/downloads/zephyr/hci_usb.zip +0 -0
  207. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/drivers/index.md +0 -0
  208. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/drivers/realtek.md +0 -0
  209. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/examples/index.md +0 -0
  210. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/extras/android_bt_bench.md +0 -0
  211. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/extras/android_remote_hci.md +0 -0
  212. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/extras/index.md +0 -0
  213. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/getting_started.md +0 -0
  214. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/hardware/index.md +0 -0
  215. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/hive/index.md +0 -0
  216. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/hive/index.toml +0 -0
  217. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/hive/web/bumble.js +0 -0
  218. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/hive/web/heart_rate_monitor/heart_rate_monitor.html +0 -0
  219. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/hive/web/heart_rate_monitor/heart_rate_monitor.js +0 -0
  220. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/hive/web/heart_rate_monitor/heart_rate_monitor.py +0 -0
  221. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/hive/web/scanner/scanner.css +0 -0
  222. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/hive/web/scanner/scanner.html +0 -0
  223. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/hive/web/scanner/scanner.js +0 -0
  224. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/hive/web/scanner/scanner.py +0 -0
  225. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/hive/web/speaker/logo.svg +0 -0
  226. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/hive/web/speaker/speaker.css +0 -0
  227. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/hive/web/speaker/speaker.html +0 -0
  228. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/hive/web/speaker/speaker.js +0 -0
  229. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/hive/web/speaker/speaker.py +0 -0
  230. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/hive/web/ui.js +0 -0
  231. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/images/bumble_layers.svg +0 -0
  232. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/images/console_screenshot.png +0 -0
  233. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/images/favicon.ico +0 -0
  234. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/images/logo.png +0 -0
  235. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/images/logo_framed.png +0 -0
  236. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/images/speaker_screenshot.png +0 -0
  237. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/index.md +0 -0
  238. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/platforms/android.md +0 -0
  239. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/platforms/index.md +0 -0
  240. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/platforms/linux.md +0 -0
  241. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/platforms/macos.md +0 -0
  242. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/platforms/windows.md +0 -0
  243. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/platforms/winusb_driver.png +0 -0
  244. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/platforms/zephyr.md +0 -0
  245. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/transports/android_emulator.md +0 -0
  246. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/transports/file.md +0 -0
  247. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/transports/hci_socket.md +0 -0
  248. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/transports/index.md +0 -0
  249. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/transports/pty.md +0 -0
  250. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/transports/serial.md +0 -0
  251. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/transports/tcp_client.md +0 -0
  252. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/transports/tcp_server.md +0 -0
  253. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/transports/udp.md +0 -0
  254. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/transports/usb.md +0 -0
  255. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/transports/vhci.md +0 -0
  256. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/transports/ws_client.md +0 -0
  257. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/transports/ws_server.md +0 -0
  258. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/use_cases/index.md +0 -0
  259. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/use_cases/use_case_1.md +0 -0
  260. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/use_cases/use_case_2.md +0 -0
  261. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/use_cases/use_case_3.md +0 -0
  262. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/use_cases/use_case_4.md +0 -0
  263. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/use_cases/use_case_5.md +0 -0
  264. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/src/use_cases/use_case_6.md +0 -0
  265. {bumble-0.0.188 → bumble-0.0.190}/docs/mkdocs/theme/partials/footer.html +0 -0
  266. {bumble-0.0.188 → bumble-0.0.190}/environment.yml +0 -0
  267. {bumble-0.0.188 → bumble-0.0.190}/examples/README.md +0 -0
  268. {bumble-0.0.188 → bumble-0.0.190}/examples/a2dp_sink1.json +0 -0
  269. {bumble-0.0.188 → bumble-0.0.190}/examples/asha_sink1.json +0 -0
  270. {bumble-0.0.188 → bumble-0.0.190}/examples/asha_sink2.json +0 -0
  271. {bumble-0.0.188 → bumble-0.0.190}/examples/avrcp_as_sink.html +0 -0
  272. {bumble-0.0.188 → bumble-0.0.190}/examples/battery_client.py +0 -0
  273. {bumble-0.0.188 → bumble-0.0.190}/examples/battery_server.py +0 -0
  274. {bumble-0.0.188 → bumble-0.0.190}/examples/classic1.json +0 -0
  275. {bumble-0.0.188 → bumble-0.0.190}/examples/classic2.json +0 -0
  276. {bumble-0.0.188 → bumble-0.0.190}/examples/device1.json +0 -0
  277. {bumble-0.0.188 → bumble-0.0.190}/examples/device2.json +0 -0
  278. {bumble-0.0.188 → bumble-0.0.190}/examples/device3.json +0 -0
  279. {bumble-0.0.188 → bumble-0.0.190}/examples/device_information_client.py +0 -0
  280. {bumble-0.0.188 → bumble-0.0.190}/examples/device_information_server.py +0 -0
  281. {bumble-0.0.188 → bumble-0.0.190}/examples/heart_rate_client.py +0 -0
  282. {bumble-0.0.188 → bumble-0.0.190}/examples/heart_rate_server.py +0 -0
  283. {bumble-0.0.188 → bumble-0.0.190}/examples/hfp_gateway.json +0 -0
  284. {bumble-0.0.188 → bumble-0.0.190}/examples/hfp_handsfree.json +0 -0
  285. {bumble-0.0.188 → bumble-0.0.190}/examples/hid_key_map.py +0 -0
  286. {bumble-0.0.188 → bumble-0.0.190}/examples/hid_keyboard.json +0 -0
  287. {bumble-0.0.188 → bumble-0.0.190}/examples/hid_report_parser.py +0 -0
  288. {bumble-0.0.188 → bumble-0.0.190}/examples/keyboard.html +0 -0
  289. {bumble-0.0.188 → bumble-0.0.190}/examples/keyboard.json +0 -0
  290. {bumble-0.0.188 → bumble-0.0.190}/examples/keyboard.py +0 -0
  291. {bumble-0.0.188 → bumble-0.0.190}/examples/leaudio.json +0 -0
  292. {bumble-0.0.188 → bumble-0.0.190}/examples/leaudio_with_classic.json +0 -0
  293. {bumble-0.0.188 → bumble-0.0.190}/examples/run_a2dp_info.py +0 -0
  294. {bumble-0.0.188 → bumble-0.0.190}/examples/run_a2dp_sink.py +0 -0
  295. {bumble-0.0.188 → bumble-0.0.190}/examples/run_a2dp_source.py +0 -0
  296. {bumble-0.0.188 → bumble-0.0.190}/examples/run_advertiser.py +0 -0
  297. {bumble-0.0.188 → bumble-0.0.190}/examples/run_asha_sink.py +0 -0
  298. {bumble-0.0.188 → bumble-0.0.190}/examples/run_avrcp.py +0 -0
  299. {bumble-0.0.188 → bumble-0.0.190}/examples/run_cig_setup.py +0 -0
  300. {bumble-0.0.188 → bumble-0.0.190}/examples/run_classic_connect.py +0 -0
  301. {bumble-0.0.188 → bumble-0.0.190}/examples/run_classic_discoverable.py +0 -0
  302. {bumble-0.0.188 → bumble-0.0.190}/examples/run_classic_discovery.py +0 -0
  303. {bumble-0.0.188 → bumble-0.0.190}/examples/run_connect_and_encrypt.py +0 -0
  304. {bumble-0.0.188 → bumble-0.0.190}/examples/run_controller.py +0 -0
  305. {bumble-0.0.188 → bumble-0.0.190}/examples/run_controller_with_scanner.py +0 -0
  306. {bumble-0.0.188 → bumble-0.0.190}/examples/run_csis_servers.py +0 -0
  307. {bumble-0.0.188 → bumble-0.0.190}/examples/run_esco_connection.py +0 -0
  308. {bumble-0.0.188 → bumble-0.0.190}/examples/run_extended_advertiser.py +0 -0
  309. {bumble-0.0.188 → bumble-0.0.190}/examples/run_extended_advertiser_2.py +0 -0
  310. {bumble-0.0.188 → bumble-0.0.190}/examples/run_gatt_client.py +0 -0
  311. {bumble-0.0.188 → bumble-0.0.190}/examples/run_gatt_client_and_server.py +0 -0
  312. {bumble-0.0.188 → bumble-0.0.190}/examples/run_gatt_server.py +0 -0
  313. {bumble-0.0.188 → bumble-0.0.190}/examples/run_hfp_gateway.py +0 -0
  314. {bumble-0.0.188 → bumble-0.0.190}/examples/run_hid_host.py +0 -0
  315. {bumble-0.0.188 → bumble-0.0.190}/examples/run_notifier.py +0 -0
  316. {bumble-0.0.188 → bumble-0.0.190}/examples/run_rfcomm_client.py +0 -0
  317. {bumble-0.0.188 → bumble-0.0.190}/examples/run_rfcomm_server.py +0 -0
  318. {bumble-0.0.188 → bumble-0.0.190}/examples/run_scanner.py +0 -0
  319. {bumble-0.0.188 → bumble-0.0.190}/examples/speaker.json +0 -0
  320. {bumble-0.0.188 → bumble-0.0.190}/examples/vcp_renderer.html +0 -0
  321. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/.gitignore +0 -0
  322. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/.gitignore +0 -0
  323. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/build.gradle.kts +0 -0
  324. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/proguard-rules.pro +0 -0
  325. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/AndroidManifest.xml +0 -0
  326. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/ic_launcher-playstore.png +0 -0
  327. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/L2capClient.kt +0 -0
  328. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/L2capServer.kt +0 -0
  329. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/MainActivity.kt +0 -0
  330. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Model.kt +0 -0
  331. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Packet.kt +0 -0
  332. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Receiver.kt +0 -0
  333. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/RfcommClient.kt +0 -0
  334. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/RfcommServer.kt +0 -0
  335. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/Sender.kt +0 -0
  336. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/SocketClient.kt +0 -0
  337. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/SocketServer.kt +0 -0
  338. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/ui/theme/Color.kt +0 -0
  339. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/ui/theme/Theme.kt +0 -0
  340. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/java/com/github/google/bumble/btbench/ui/theme/Type.kt +0 -0
  341. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/res/drawable/ic_launcher_background.xml +0 -0
  342. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/res/drawable/ic_launcher_foreground.xml +0 -0
  343. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
  344. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
  345. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp +0 -0
  346. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
  347. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp +0 -0
  348. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
  349. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp +0 -0
  350. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
  351. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp +0 -0
  352. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
  353. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp +0 -0
  354. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
  355. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/res/values/colors.xml +0 -0
  356. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/res/values/ic_launcher_background.xml +0 -0
  357. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/res/values/strings.xml +0 -0
  358. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/res/values/themes.xml +0 -0
  359. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/res/xml/backup_rules.xml +0 -0
  360. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/app/src/main/res/xml/data_extraction_rules.xml +0 -0
  361. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/build.gradle.kts +0 -0
  362. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/gradle/libs.versions.toml +0 -0
  363. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/gradle/wrapper/gradle-wrapper.jar +0 -0
  364. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/gradle/wrapper/gradle-wrapper.properties +0 -0
  365. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/gradle.properties +0 -0
  366. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/gradlew +0 -0
  367. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/gradlew.bat +0 -0
  368. {bumble-0.0.188 → bumble-0.0.190}/extras/android/BtBench/settings.gradle.kts +0 -0
  369. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/.gitignore +0 -0
  370. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/.gitignore +0 -0
  371. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/build.gradle.kts +0 -0
  372. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/proguard-rules.pro +0 -0
  373. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/AndroidManifest.xml +0 -0
  374. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/aidl/android/hardware/bluetooth/IBluetoothHci.aidl +0 -0
  375. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/aidl/android/hardware/bluetooth/IBluetoothHciCallbacks.aidl +0 -0
  376. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/aidl/android/hardware/bluetooth/Status.aidl +0 -0
  377. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/hidl/bluetooth/1.1/IBluetoothHci.hal +0 -0
  378. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/hidl/bluetooth/1.1/IBluetoothHciCallbacks.hal +0 -0
  379. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/ic_launcher-playstore.png +0 -0
  380. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/IBluetoothHci.java +0 -0
  381. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/IBluetoothHciCallbacks.java +0 -0
  382. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/Status.java +0 -0
  383. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_0/IBluetoothHci.java +0 -0
  384. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_0/IBluetoothHciCallbacks.java +0 -0
  385. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_0/Status.java +0 -0
  386. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_1/IBluetoothHci.java +0 -0
  387. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/java/android/hardware/bluetooth/V1_1/IBluetoothHciCallbacks.java +0 -0
  388. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/CommandLineInterface.kt +0 -0
  389. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciHal.java +0 -0
  390. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciHalCallback.java +0 -0
  391. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciPacket.java +0 -0
  392. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciParser.java +0 -0
  393. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciProxy.java +0 -0
  394. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/HciServer.java +0 -0
  395. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/MainActivity.kt +0 -0
  396. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/ui/theme/Color.kt +0 -0
  397. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/ui/theme/Theme.kt +0 -0
  398. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/java/com/github/google/bumble/remotehci/ui/theme/Type.kt +0 -0
  399. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
  400. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
  401. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
  402. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp +0 -0
  403. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
  404. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
  405. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp +0 -0
  406. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
  407. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
  408. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp +0 -0
  409. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
  410. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
  411. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp +0 -0
  412. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
  413. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
  414. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp +0 -0
  415. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
  416. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/values/colors.xml +0 -0
  417. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/values/ic_launcher_background.xml +0 -0
  418. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/values/strings.xml +0 -0
  419. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/values/themes.xml +0 -0
  420. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/xml/backup_rules.xml +0 -0
  421. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/app/src/main/res/xml/data_extraction_rules.xml +0 -0
  422. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/build.gradle.kts +0 -0
  423. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/gradle/libs.versions.toml +0 -0
  424. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/gradle/wrapper/gradle-wrapper.jar +0 -0
  425. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/gradle/wrapper/gradle-wrapper.properties +0 -0
  426. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/gradle.properties +0 -0
  427. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/gradlew +0 -0
  428. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/gradlew.bat +0 -0
  429. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/lib/.gitignore +0 -0
  430. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/lib/build.gradle.kts +0 -0
  431. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/lib/consumer-rules.pro +0 -0
  432. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/lib/proguard-rules.pro +0 -0
  433. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/lib/src/main/AndroidManifest.xml +0 -0
  434. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/lib/src/main/java/android/internal/hidl/base/V1_0/DebugInfo.java +0 -0
  435. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/lib/src/main/java/android/internal/hidl/base/V1_0/IBase.java +0 -0
  436. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/lib/src/main/java/android/os/HidlSupport.java +0 -0
  437. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/lib/src/main/java/android/os/HwBinder.java +0 -0
  438. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/lib/src/main/java/android/os/HwBlob.java +0 -0
  439. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/lib/src/main/java/android/os/HwParcel.java +0 -0
  440. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/lib/src/main/java/android/os/IHwBinder.java +0 -0
  441. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/lib/src/main/java/android/os/IHwInterface.java +0 -0
  442. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/lib/src/main/java/android/os/NativeHandle.java +0 -0
  443. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/lib/src/main/java/android/os/ServiceManager.java +0 -0
  444. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/scripts/generate_java_from_aidl.sh +0 -0
  445. {bumble-0.0.188 → bumble-0.0.190}/extras/android/RemoteHCI/settings.gradle.kts +0 -0
  446. {bumble-0.0.188 → bumble-0.0.190}/noxfile.py +0 -0
  447. {bumble-0.0.188 → bumble-0.0.190}/pyproject.toml +0 -0
  448. {bumble-0.0.188 → bumble-0.0.190}/rust/.gitignore +0 -0
  449. {bumble-0.0.188 → bumble-0.0.190}/rust/CHANGELOG.md +0 -0
  450. {bumble-0.0.188 → bumble-0.0.190}/rust/Cargo.lock +0 -0
  451. {bumble-0.0.188 → bumble-0.0.190}/rust/Cargo.toml +0 -0
  452. {bumble-0.0.188 → bumble-0.0.190}/rust/README.md +0 -0
  453. {bumble-0.0.188 → bumble-0.0.190}/rust/examples/battery_client.rs +0 -0
  454. {bumble-0.0.188 → bumble-0.0.190}/rust/examples/broadcast.rs +0 -0
  455. {bumble-0.0.188 → bumble-0.0.190}/rust/examples/scanner.rs +0 -0
  456. {bumble-0.0.188 → bumble-0.0.190}/rust/pytests/assigned_numbers.rs +0 -0
  457. {bumble-0.0.188 → bumble-0.0.190}/rust/pytests/pytests.rs +0 -0
  458. {bumble-0.0.188 → bumble-0.0.190}/rust/pytests/wrapper/drivers.rs +0 -0
  459. {bumble-0.0.188 → bumble-0.0.190}/rust/pytests/wrapper/hci.rs +0 -0
  460. {bumble-0.0.188 → bumble-0.0.190}/rust/pytests/wrapper/mod.rs +0 -0
  461. {bumble-0.0.188 → bumble-0.0.190}/rust/pytests/wrapper/transport.rs +0 -0
  462. {bumble-0.0.188 → bumble-0.0.190}/rust/resources/test/firmware/realtek/README.md +0 -0
  463. {bumble-0.0.188 → bumble-0.0.190}/rust/resources/test/firmware/realtek/rtl8723b_fw_structure.bin +0 -0
  464. {bumble-0.0.188 → bumble-0.0.190}/rust/resources/test/firmware/realtek/rtl8761bu_fw_structure.bin +0 -0
  465. {bumble-0.0.188 → bumble-0.0.190}/rust/src/adv.rs +0 -0
  466. {bumble-0.0.188 → bumble-0.0.190}/rust/src/cli/firmware/mod.rs +0 -0
  467. {bumble-0.0.188 → bumble-0.0.190}/rust/src/cli/firmware/rtk.rs +0 -0
  468. {bumble-0.0.188 → bumble-0.0.190}/rust/src/cli/l2cap/client_bridge.rs +0 -0
  469. {bumble-0.0.188 → bumble-0.0.190}/rust/src/cli/l2cap/mod.rs +0 -0
  470. {bumble-0.0.188 → bumble-0.0.190}/rust/src/cli/l2cap/server_bridge.rs +0 -0
  471. {bumble-0.0.188 → bumble-0.0.190}/rust/src/cli/mod.rs +0 -0
  472. {bumble-0.0.188 → bumble-0.0.190}/rust/src/cli/usb/mod.rs +0 -0
  473. {bumble-0.0.188 → bumble-0.0.190}/rust/src/internal/drivers/mod.rs +0 -0
  474. {bumble-0.0.188 → bumble-0.0.190}/rust/src/internal/drivers/rtk.rs +0 -0
  475. {bumble-0.0.188 → bumble-0.0.190}/rust/src/internal/hci/mod.rs +0 -0
  476. {bumble-0.0.188 → bumble-0.0.190}/rust/src/internal/hci/packets.pdl +0 -0
  477. {bumble-0.0.188 → bumble-0.0.190}/rust/src/internal/hci/tests.rs +0 -0
  478. {bumble-0.0.188 → bumble-0.0.190}/rust/src/internal/mod.rs +0 -0
  479. {bumble-0.0.188 → bumble-0.0.190}/rust/src/lib.rs +0 -0
  480. {bumble-0.0.188 → bumble-0.0.190}/rust/src/main.rs +0 -0
  481. {bumble-0.0.188 → bumble-0.0.190}/rust/src/wrapper/assigned_numbers/company_ids.rs +0 -0
  482. {bumble-0.0.188 → bumble-0.0.190}/rust/src/wrapper/assigned_numbers/mod.rs +0 -0
  483. {bumble-0.0.188 → bumble-0.0.190}/rust/src/wrapper/assigned_numbers/services.rs +0 -0
  484. {bumble-0.0.188 → bumble-0.0.190}/rust/src/wrapper/common.rs +0 -0
  485. {bumble-0.0.188 → bumble-0.0.190}/rust/src/wrapper/controller.rs +0 -0
  486. {bumble-0.0.188 → bumble-0.0.190}/rust/src/wrapper/core.rs +0 -0
  487. {bumble-0.0.188 → bumble-0.0.190}/rust/src/wrapper/device/mod.rs +0 -0
  488. {bumble-0.0.188 → bumble-0.0.190}/rust/src/wrapper/device/tests.rs +0 -0
  489. {bumble-0.0.188 → bumble-0.0.190}/rust/src/wrapper/drivers/mod.rs +0 -0
  490. {bumble-0.0.188 → bumble-0.0.190}/rust/src/wrapper/drivers/rtk.rs +0 -0
  491. {bumble-0.0.188 → bumble-0.0.190}/rust/src/wrapper/gatt_client.rs +0 -0
  492. {bumble-0.0.188 → bumble-0.0.190}/rust/src/wrapper/hci.rs +0 -0
  493. {bumble-0.0.188 → bumble-0.0.190}/rust/src/wrapper/host.rs +0 -0
  494. {bumble-0.0.188 → bumble-0.0.190}/rust/src/wrapper/l2cap.rs +0 -0
  495. {bumble-0.0.188 → bumble-0.0.190}/rust/src/wrapper/link.rs +0 -0
  496. {bumble-0.0.188 → bumble-0.0.190}/rust/src/wrapper/logging.rs +0 -0
  497. {bumble-0.0.188 → bumble-0.0.190}/rust/src/wrapper/mod.rs +0 -0
  498. {bumble-0.0.188 → bumble-0.0.190}/rust/src/wrapper/profile.rs +0 -0
  499. {bumble-0.0.188 → bumble-0.0.190}/rust/src/wrapper/transport.rs +0 -0
  500. {bumble-0.0.188 → bumble-0.0.190}/rust/tools/file_header.rs +0 -0
  501. {bumble-0.0.188 → bumble-0.0.190}/rust/tools/gen_assigned_numbers.rs +0 -0
  502. {bumble-0.0.188 → bumble-0.0.190}/scripts/process_android_emulator_protos.sh +0 -0
  503. {bumble-0.0.188 → bumble-0.0.190}/scripts/process_android_netsim_protos.sh +0 -0
  504. {bumble-0.0.188 → bumble-0.0.190}/setup.py +0 -0
  505. {bumble-0.0.188 → bumble-0.0.190}/tasks.py +0 -0
  506. {bumble-0.0.188 → bumble-0.0.190}/tests/__init__.py +0 -0
  507. {bumble-0.0.188 → bumble-0.0.190}/tests/a2dp_test.py +0 -0
  508. {bumble-0.0.188 → bumble-0.0.190}/tests/at_test.py +0 -0
  509. {bumble-0.0.188 → bumble-0.0.190}/tests/avdtp_test.py +0 -0
  510. {bumble-0.0.188 → bumble-0.0.190}/tests/avrcp_test.py +0 -0
  511. {bumble-0.0.188 → bumble-0.0.190}/tests/bap_test.py +0 -0
  512. {bumble-0.0.188 → bumble-0.0.190}/tests/cap_test.py +0 -0
  513. {bumble-0.0.188 → bumble-0.0.190}/tests/codecs_test.py +0 -0
  514. {bumble-0.0.188 → bumble-0.0.190}/tests/csip_test.py +0 -0
  515. {bumble-0.0.188 → bumble-0.0.190}/tests/decoder_test.py +0 -0
  516. {bumble-0.0.188 → bumble-0.0.190}/tests/device_test.py +0 -0
  517. {bumble-0.0.188 → bumble-0.0.190}/tests/g722_sample.g722 +0 -0
  518. {bumble-0.0.188 → bumble-0.0.190}/tests/gatt_test.py +0 -0
  519. {bumble-0.0.188 → bumble-0.0.190}/tests/hci_data_001.bin +0 -0
  520. {bumble-0.0.188 → bumble-0.0.190}/tests/hci_test.py +0 -0
  521. {bumble-0.0.188 → bumble-0.0.190}/tests/hfp_test.py +0 -0
  522. {bumble-0.0.188 → bumble-0.0.190}/tests/host_test.py +0 -0
  523. {bumble-0.0.188 → bumble-0.0.190}/tests/import_test.py +0 -0
  524. {bumble-0.0.188 → bumble-0.0.190}/tests/keystore_test.py +0 -0
  525. {bumble-0.0.188 → bumble-0.0.190}/tests/l2cap_test.py +0 -0
  526. {bumble-0.0.188 → bumble-0.0.190}/tests/pytest.ini +0 -0
  527. {bumble-0.0.188 → bumble-0.0.190}/tests/rfcomm_test.py +0 -0
  528. {bumble-0.0.188 → bumble-0.0.190}/tests/sdp_test.py +0 -0
  529. {bumble-0.0.188 → bumble-0.0.190}/tests/smp_test.py +0 -0
  530. {bumble-0.0.188 → bumble-0.0.190}/tests/test_utils.py +0 -0
  531. {bumble-0.0.188 → bumble-0.0.190}/tests/transport_test.py +0 -0
  532. {bumble-0.0.188 → bumble-0.0.190}/tests/utils_test.py +0 -0
  533. {bumble-0.0.188 → bumble-0.0.190}/tests/vcp_test.py +0 -0
  534. {bumble-0.0.188 → bumble-0.0.190}/tools/__init__.py +0 -0
  535. {bumble-0.0.188 → bumble-0.0.190}/tools/generate_company_id_list.py +0 -0
  536. {bumble-0.0.188 → bumble-0.0.190}/tools/rtk_util.py +0 -0
  537. {bumble-0.0.188 → bumble-0.0.190}/web/README.md +0 -0
  538. {bumble-0.0.188 → bumble-0.0.190}/web/bumble.js +0 -0
  539. {bumble-0.0.188 → bumble-0.0.190}/web/heart_rate_monitor/heart_rate_monitor.html +0 -0
  540. {bumble-0.0.188 → bumble-0.0.190}/web/heart_rate_monitor/heart_rate_monitor.js +0 -0
  541. {bumble-0.0.188 → bumble-0.0.190}/web/heart_rate_monitor/heart_rate_monitor.py +0 -0
  542. {bumble-0.0.188 → bumble-0.0.190}/web/scanner/scanner.css +0 -0
  543. {bumble-0.0.188 → bumble-0.0.190}/web/scanner/scanner.html +0 -0
  544. {bumble-0.0.188 → bumble-0.0.190}/web/scanner/scanner.js +0 -0
  545. {bumble-0.0.188 → bumble-0.0.190}/web/scanner/scanner.py +0 -0
  546. {bumble-0.0.188 → bumble-0.0.190}/web/speaker/logo.svg +0 -0
  547. {bumble-0.0.188 → bumble-0.0.190}/web/speaker/speaker.css +0 -0
  548. {bumble-0.0.188 → bumble-0.0.190}/web/speaker/speaker.html +0 -0
  549. {bumble-0.0.188 → bumble-0.0.190}/web/speaker/speaker.js +0 -0
  550. {bumble-0.0.188 → bumble-0.0.190}/web/speaker/speaker.py +0 -0
  551. {bumble-0.0.188 → bumble-0.0.190}/web/ui.js +0 -0
@@ -6,6 +6,8 @@ dist/
6
6
  docs/mkdocs/site
7
7
  test-results.xml
8
8
  __pycache__
9
+ # Vim
10
+ .*.sw*
9
11
  # generated by setuptools_scm
10
12
  bumble/_version.py
11
13
  .vscode/launch.json
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: bumble
3
- Version: 0.0.188
3
+ Version: 0.0.190
4
4
  Summary: Bluetooth Stack for Apps, Emulation, Test and Experimentation
5
5
  Home-page: https://github.com/google/bumble
6
6
  Author: Google
@@ -10,15 +10,15 @@ Description-Content-Type: text/markdown
10
10
  License-File: LICENSE
11
11
  Requires-Dist: aiohttp~=3.8; platform_system != "Emscripten"
12
12
  Requires-Dist: appdirs>=1.4; platform_system != "Emscripten"
13
- Requires-Dist: bt-test-interfaces>=0.0.2; platform_system != "Emscripten"
14
- Requires-Dist: click==8.1.3; platform_system != "Emscripten"
13
+ Requires-Dist: bt-test-interfaces>=0.0.6; platform_system != "Emscripten"
14
+ Requires-Dist: click>=8.1.3; platform_system != "Emscripten"
15
15
  Requires-Dist: cryptography==39; platform_system != "Emscripten"
16
16
  Requires-Dist: cryptography>=39.0; platform_system == "Emscripten"
17
- Requires-Dist: grpcio==1.57.0; platform_system != "Emscripten"
17
+ Requires-Dist: grpcio>=1.62.1; platform_system != "Emscripten"
18
18
  Requires-Dist: humanize>=4.6.0; platform_system != "Emscripten"
19
19
  Requires-Dist: libusb1>=2.0.1; platform_system != "Emscripten"
20
20
  Requires-Dist: libusb-package==1.0.26.1; platform_system != "Emscripten"
21
- Requires-Dist: platformdirs==3.10.0; platform_system != "Emscripten"
21
+ Requires-Dist: platformdirs>=3.10.0; platform_system != "Emscripten"
22
22
  Requires-Dist: prompt_toolkit>=3.0.16; platform_system != "Emscripten"
23
23
  Requires-Dist: prettytable>=3.6.0; platform_system != "Emscripten"
24
24
  Requires-Dist: protobuf>=3.12.4; platform_system != "Emscripten"
@@ -31,12 +31,12 @@ Provides-Extra: build
31
31
  Requires-Dist: build>=0.7; extra == "build"
32
32
  Provides-Extra: test
33
33
  Requires-Dist: pytest>=8.0; extra == "test"
34
- Requires-Dist: pytest-asyncio==0.21.1; extra == "test"
34
+ Requires-Dist: pytest-asyncio>=0.21.1; extra == "test"
35
35
  Requires-Dist: pytest-html>=3.2.0; extra == "test"
36
36
  Requires-Dist: coverage>=6.4; extra == "test"
37
37
  Provides-Extra: development
38
- Requires-Dist: black==22.10; extra == "development"
39
- Requires-Dist: grpcio-tools>=1.57.0; extra == "development"
38
+ Requires-Dist: black==24.3; extra == "development"
39
+ Requires-Dist: grpcio-tools>=1.62.1; extra == "development"
40
40
  Requires-Dist: invoke>=1.7.3; extra == "development"
41
41
  Requires-Dist: mypy==1.8.0; extra == "development"
42
42
  Requires-Dist: nox>=2022; extra == "development"
@@ -46,8 +46,8 @@ Requires-Dist: types-appdirs>=1.4.3; extra == "development"
46
46
  Requires-Dist: types-invoke>=1.7.3; extra == "development"
47
47
  Requires-Dist: types-protobuf>=4.21.0; extra == "development"
48
48
  Provides-Extra: avatar
49
- Requires-Dist: pandora-avatar==0.0.8; extra == "avatar"
50
- Requires-Dist: rootcanal==1.9.0; python_version >= "3.10" and extra == "avatar"
49
+ Requires-Dist: pandora-avatar==0.0.9; extra == "avatar"
50
+ Requires-Dist: rootcanal==1.10.0; python_version >= "3.10" and extra == "avatar"
51
51
  Provides-Extra: documentation
52
52
  Requires-Dist: mkdocs>=1.4.0; extra == "documentation"
53
53
  Requires-Dist: mkdocs-material>=8.5.6; extra == "documentation"
@@ -509,9 +509,11 @@ class Ping:
509
509
  packet = struct.pack(
510
510
  '>bbI',
511
511
  PacketType.SEQUENCE,
512
- PACKET_FLAG_LAST
513
- if self.current_packet_index == self.tx_packet_count - 1
514
- else 0,
512
+ (
513
+ PACKET_FLAG_LAST
514
+ if self.current_packet_index == self.tx_packet_count - 1
515
+ else 0
516
+ ),
515
517
  self.current_packet_index,
516
518
  ) + bytes(self.tx_packet_size - 6)
517
519
  logging.info(color(f'Sending packet {self.current_packet_index}', 'yellow'))
@@ -1062,9 +1064,9 @@ class Central(Connection.Listener):
1062
1064
 
1063
1065
  if self.phy not in (None, HCI_LE_1M_PHY):
1064
1066
  # Add an connections parameters entry for this PHY.
1065
- self.connection_parameter_preferences[
1066
- self.phy
1067
- ] = connection_parameter_preferences
1067
+ self.connection_parameter_preferences[self.phy] = (
1068
+ connection_parameter_preferences
1069
+ )
1068
1070
  else:
1069
1071
  self.connection_parameter_preferences = None
1070
1072
 
@@ -1232,6 +1234,7 @@ class Peripheral(Device.Listener, Connection.Listener):
1232
1234
  'cyan',
1233
1235
  )
1234
1236
  )
1237
+
1235
1238
  await self.connected.wait()
1236
1239
  logging.info(color('### Connected', 'cyan'))
1237
1240
 
@@ -1591,8 +1594,8 @@ def central(
1591
1594
  mode_factory = create_mode_factory(ctx, 'gatt-client')
1592
1595
  classic = ctx.obj['classic']
1593
1596
 
1594
- asyncio.run(
1595
- Central(
1597
+ async def run_central():
1598
+ await Central(
1596
1599
  transport,
1597
1600
  peripheral_address,
1598
1601
  classic,
@@ -1604,7 +1607,8 @@ def central(
1604
1607
  encrypt or authenticate,
1605
1608
  ctx.obj['extended_data_length'],
1606
1609
  ).run()
1607
- )
1610
+
1611
+ asyncio.run(run_central())
1608
1612
 
1609
1613
 
1610
1614
  @bench.command()
@@ -1615,15 +1619,16 @@ def peripheral(ctx, transport):
1615
1619
  role_factory = create_role_factory(ctx, 'receiver')
1616
1620
  mode_factory = create_mode_factory(ctx, 'gatt-server')
1617
1621
 
1618
- asyncio.run(
1619
- Peripheral(
1622
+ async def run_peripheral():
1623
+ await Peripheral(
1620
1624
  transport,
1621
1625
  ctx.obj['classic'],
1622
1626
  ctx.obj['extended_data_length'],
1623
1627
  role_factory,
1624
1628
  mode_factory,
1625
1629
  ).run()
1626
- )
1630
+
1631
+ asyncio.run(run_peripheral())
1627
1632
 
1628
1633
 
1629
1634
  def main():
@@ -76,6 +76,7 @@ logger = logging.getLogger(__name__)
76
76
  # -----------------------------------------------------------------------------
77
77
  DEFAULT_UI_PORT = 7654
78
78
 
79
+
79
80
  # -----------------------------------------------------------------------------
80
81
  class AudioExtractor:
81
82
  @staticmethod
@@ -24,6 +24,7 @@ from bumble.device import Device
24
24
  from bumble.keys import JsonKeyStore
25
25
  from bumble.transport import open_transport
26
26
 
27
+
27
28
  # -----------------------------------------------------------------------------
28
29
  async def unbond_with_keystore(keystore, address):
29
30
  if address is None:
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.0.188'
16
- __version_tuple__ = version_tuple = (0, 0, 188)
15
+ __version__ = version = '0.0.190'
16
+ __version_tuple__ = version_tuple = (0, 0, 190)
@@ -652,7 +652,9 @@ class SbcPacketSource:
652
652
 
653
653
  # Prepare for next packets
654
654
  sequence_number += 1
655
+ sequence_number &= 0xFFFF
655
656
  timestamp += sum((frame.sample_count for frame in frames))
657
+ timestamp &= 0xFFFFFFFF
656
658
  frames = [frame]
657
659
  frames_size = len(frame.payload)
658
660
  else:
@@ -655,7 +655,7 @@ class ATT_Write_Command(ATT_PDU):
655
655
  @ATT_PDU.subclass(
656
656
  [
657
657
  ('attribute_handle', HANDLE_FIELD_SPEC),
658
- ('attribute_value', '*')
658
+ ('attribute_value', '*'),
659
659
  # ('authentication_signature', 'TODO')
660
660
  ]
661
661
  )
@@ -325,8 +325,8 @@ class MediaPacket:
325
325
  self.padding = padding
326
326
  self.extension = extension
327
327
  self.marker = marker
328
- self.sequence_number = sequence_number
329
- self.timestamp = timestamp
328
+ self.sequence_number = sequence_number & 0xFFFF
329
+ self.timestamp = timestamp & 0xFFFFFFFF
330
330
  self.ssrc = ssrc
331
331
  self.csrc_list = csrc_list
332
332
  self.payload_type = payload_type
@@ -341,7 +341,12 @@ class MediaPacket:
341
341
  | len(self.csrc_list),
342
342
  self.marker << 7 | self.payload_type,
343
343
  ]
344
- ) + struct.pack('>HII', self.sequence_number, self.timestamp, self.ssrc)
344
+ ) + struct.pack(
345
+ '>HII',
346
+ self.sequence_number,
347
+ self.timestamp,
348
+ self.ssrc,
349
+ )
345
350
  for csrc in self.csrc_list:
346
351
  header += struct.pack('>I', csrc)
347
352
  return header + self.payload
@@ -1545,9 +1550,10 @@ class Protocol(EventEmitter):
1545
1550
 
1546
1551
  assert False # Should never reach this
1547
1552
 
1548
- async def get_capabilities(
1549
- self, seid: int
1550
- ) -> Union[Get_Capabilities_Response, Get_All_Capabilities_Response,]:
1553
+ async def get_capabilities(self, seid: int) -> Union[
1554
+ Get_Capabilities_Response,
1555
+ Get_All_Capabilities_Response,
1556
+ ]:
1551
1557
  if self.version > (1, 2):
1552
1558
  return await self.send_command(Get_All_Capabilities_Command(seid))
1553
1559
 
@@ -1745,9 +1745,11 @@ class Protocol(pyee.EventEmitter):
1745
1745
  avc.CommandFrame.CommandType.CONTROL,
1746
1746
  avc.Frame.SubunitType.PANEL,
1747
1747
  0,
1748
- avc.PassThroughFrame.StateFlag.PRESSED
1749
- if pressed
1750
- else avc.PassThroughFrame.StateFlag.RELEASED,
1748
+ (
1749
+ avc.PassThroughFrame.StateFlag.PRESSED
1750
+ if pressed
1751
+ else avc.PassThroughFrame.StateFlag.RELEASED
1752
+ ),
1751
1753
  key,
1752
1754
  b'',
1753
1755
  )
@@ -134,15 +134,15 @@ class Controller:
134
134
  self.hci_sink = None
135
135
  self.link = link
136
136
 
137
- self.central_connections: Dict[
138
- Address, Connection
139
- ] = {} # Connections where this controller is the central
140
- self.peripheral_connections: Dict[
141
- Address, Connection
142
- ] = {} # Connections where this controller is the peripheral
143
- self.classic_connections: Dict[
144
- Address, Connection
145
- ] = {} # Connections in BR/EDR
137
+ self.central_connections: Dict[Address, Connection] = (
138
+ {}
139
+ ) # Connections where this controller is the central
140
+ self.peripheral_connections: Dict[Address, Connection] = (
141
+ {}
142
+ ) # Connections where this controller is the peripheral
143
+ self.classic_connections: Dict[Address, Connection] = (
144
+ {}
145
+ ) # Connections in BR/EDR
146
146
  self.central_cis_links: Dict[int, CisLink] = {} # CIS links by handle
147
147
  self.peripheral_cis_links: Dict[int, CisLink] = {} # CIS links by handle
148
148
 
@@ -276,12 +276,12 @@ class Advertisement:
276
276
  data_bytes: bytes = b''
277
277
 
278
278
  # Constants
279
- TX_POWER_NOT_AVAILABLE: ClassVar[
280
- int
281
- ] = HCI_LE_Extended_Advertising_Report_Event.TX_POWER_INFORMATION_NOT_AVAILABLE
282
- RSSI_NOT_AVAILABLE: ClassVar[
283
- int
284
- ] = HCI_LE_Extended_Advertising_Report_Event.RSSI_NOT_AVAILABLE
279
+ TX_POWER_NOT_AVAILABLE: ClassVar[int] = (
280
+ HCI_LE_Extended_Advertising_Report_Event.TX_POWER_INFORMATION_NOT_AVAILABLE
281
+ )
282
+ RSSI_NOT_AVAILABLE: ClassVar[int] = (
283
+ HCI_LE_Extended_Advertising_Report_Event.RSSI_NOT_AVAILABLE
284
+ )
285
285
 
286
286
  def __post_init__(self) -> None:
287
287
  self.data = AdvertisingData.from_bytes(self.data_bytes)
@@ -558,7 +558,9 @@ class AdvertisingParameters:
558
558
  )
559
559
  primary_advertising_interval_min: int = DEVICE_DEFAULT_ADVERTISING_INTERVAL
560
560
  primary_advertising_interval_max: int = DEVICE_DEFAULT_ADVERTISING_INTERVAL
561
- primary_advertising_channel_map: HCI_LE_Set_Extended_Advertising_Parameters_Command.ChannelMap = (
561
+ primary_advertising_channel_map: (
562
+ HCI_LE_Set_Extended_Advertising_Parameters_Command.ChannelMap
563
+ ) = (
562
564
  AdvertisingChannelMap.CHANNEL_37
563
565
  | AdvertisingChannelMap.CHANNEL_38
564
566
  | AdvertisingChannelMap.CHANNEL_39
@@ -1138,14 +1140,12 @@ class Connection(CompositeEventEmitter):
1138
1140
  @overload
1139
1141
  async def create_l2cap_channel(
1140
1142
  self, spec: l2cap.ClassicChannelSpec
1141
- ) -> l2cap.ClassicChannel:
1142
- ...
1143
+ ) -> l2cap.ClassicChannel: ...
1143
1144
 
1144
1145
  @overload
1145
1146
  async def create_l2cap_channel(
1146
1147
  self, spec: l2cap.LeCreditBasedChannelSpec
1147
- ) -> l2cap.LeCreditBasedChannel:
1148
- ...
1148
+ ) -> l2cap.LeCreditBasedChannel: ...
1149
1149
 
1150
1150
  async def create_l2cap_channel(
1151
1151
  self, spec: Union[l2cap.ClassicChannelSpec, l2cap.LeCreditBasedChannelSpec]
@@ -1723,16 +1723,14 @@ class Device(CompositeEventEmitter):
1723
1723
  self,
1724
1724
  connection: Connection,
1725
1725
  spec: l2cap.ClassicChannelSpec,
1726
- ) -> l2cap.ClassicChannel:
1727
- ...
1726
+ ) -> l2cap.ClassicChannel: ...
1728
1727
 
1729
1728
  @overload
1730
1729
  async def create_l2cap_channel(
1731
1730
  self,
1732
1731
  connection: Connection,
1733
1732
  spec: l2cap.LeCreditBasedChannelSpec,
1734
- ) -> l2cap.LeCreditBasedChannel:
1735
- ...
1733
+ ) -> l2cap.LeCreditBasedChannel: ...
1736
1734
 
1737
1735
  async def create_l2cap_channel(
1738
1736
  self,
@@ -1753,16 +1751,14 @@ class Device(CompositeEventEmitter):
1753
1751
  self,
1754
1752
  spec: l2cap.ClassicChannelSpec,
1755
1753
  handler: Optional[Callable[[l2cap.ClassicChannel], Any]] = None,
1756
- ) -> l2cap.ClassicChannelServer:
1757
- ...
1754
+ ) -> l2cap.ClassicChannelServer: ...
1758
1755
 
1759
1756
  @overload
1760
1757
  def create_l2cap_server(
1761
1758
  self,
1762
1759
  spec: l2cap.LeCreditBasedChannelSpec,
1763
1760
  handler: Optional[Callable[[l2cap.LeCreditBasedChannel], Any]] = None,
1764
- ) -> l2cap.LeCreditBasedChannelServer:
1765
- ...
1761
+ ) -> l2cap.LeCreditBasedChannelServer: ...
1766
1762
 
1767
1763
  def create_l2cap_server(
1768
1764
  self,
@@ -3289,17 +3285,19 @@ class Device(CompositeEventEmitter):
3289
3285
 
3290
3286
  handler = self.on(
3291
3287
  'remote_name',
3292
- lambda address, remote_name: pending_name.set_result(remote_name)
3293
- if address == peer_address
3294
- else None,
3288
+ lambda address, remote_name: (
3289
+ pending_name.set_result(remote_name)
3290
+ if address == peer_address
3291
+ else None
3292
+ ),
3295
3293
  )
3296
3294
  failure_handler = self.on(
3297
3295
  'remote_name_failure',
3298
- lambda address, error_code: pending_name.set_exception(
3299
- HCI_Error(error_code)
3300
- )
3301
- if address == peer_address
3302
- else None,
3296
+ lambda address, error_code: (
3297
+ pending_name.set_exception(HCI_Error(error_code))
3298
+ if address == peer_address
3299
+ else None
3300
+ ),
3303
3301
  )
3304
3302
 
3305
3303
  try:
@@ -3475,9 +3473,9 @@ class Device(CompositeEventEmitter):
3475
3473
  LE features supported by the remote device.
3476
3474
  """
3477
3475
  with closing(EventWatcher()) as watcher:
3478
- read_feature_future: asyncio.Future[
3479
- LeFeatureMask
3480
- ] = asyncio.get_running_loop().create_future()
3476
+ read_feature_future: asyncio.Future[LeFeatureMask] = (
3477
+ asyncio.get_running_loop().create_future()
3478
+ )
3481
3479
 
3482
3480
  def on_le_remote_features(handle: int, features: int):
3483
3481
  if handle == connection.handle:
@@ -36,6 +36,7 @@ logger = logging.getLogger(__name__)
36
36
  # Classes
37
37
  # -----------------------------------------------------------------------------
38
38
 
39
+
39
40
  # -----------------------------------------------------------------------------
40
41
  class GenericAccessService(Service):
41
42
  def __init__(self, device_name, appearance=(0, 0)):
@@ -342,9 +342,11 @@ class Service(Attribute):
342
342
  uuid = UUID(uuid)
343
343
 
344
344
  super().__init__(
345
- GATT_PRIMARY_SERVICE_ATTRIBUTE_TYPE
346
- if primary
347
- else GATT_SECONDARY_SERVICE_ATTRIBUTE_TYPE,
345
+ (
346
+ GATT_PRIMARY_SERVICE_ATTRIBUTE_TYPE
347
+ if primary
348
+ else GATT_SECONDARY_SERVICE_ATTRIBUTE_TYPE
349
+ ),
348
350
  Attribute.READABLE,
349
351
  uuid.to_pdu_bytes(),
350
352
  )
@@ -560,9 +562,9 @@ class CharacteristicAdapter:
560
562
 
561
563
  def __init__(self, characteristic: Union[Characteristic, AttributeProxy]):
562
564
  self.wrapped_characteristic = characteristic
563
- self.subscribers: Dict[
564
- Callable, Callable
565
- ] = {} # Map from subscriber to proxy subscriber
565
+ self.subscribers: Dict[Callable, Callable] = (
566
+ {}
567
+ ) # Map from subscriber to proxy subscriber
566
568
 
567
569
  if isinstance(characteristic, Characteristic):
568
570
  self.read_value = self.read_encoded_value
@@ -352,9 +352,7 @@ class Client:
352
352
  if c.uuid == uuid
353
353
  ]
354
354
 
355
- def get_attribute_grouping(
356
- self, attribute_handle: int
357
- ) -> Optional[
355
+ def get_attribute_grouping(self, attribute_handle: int) -> Optional[
358
356
  Union[
359
357
  ServiceProxy,
360
358
  Tuple[ServiceProxy, CharacteristicProxy],
@@ -445,9 +445,9 @@ class Server(EventEmitter):
445
445
  assert self.pending_confirmations[connection.handle] is None
446
446
 
447
447
  # Create a future value to hold the eventual response
448
- pending_confirmation = self.pending_confirmations[
449
- connection.handle
450
- ] = asyncio.get_running_loop().create_future()
448
+ pending_confirmation = self.pending_confirmations[connection.handle] = (
449
+ asyncio.get_running_loop().create_future()
450
+ )
451
451
 
452
452
  try:
453
453
  self.send_gatt_pdu(connection.handle, indication.to_bytes())
@@ -4249,9 +4249,11 @@ class HCI_LE_Set_Extended_Scan_Parameters_Command(HCI_Command):
4249
4249
  fields.append(
4250
4250
  (
4251
4251
  f'{scanning_phy_str}.scan_type: ',
4252
- 'PASSIVE'
4253
- if self.scan_types[i] == self.PASSIVE_SCANNING
4254
- else 'ACTIVE',
4252
+ (
4253
+ 'PASSIVE'
4254
+ if self.scan_types[i] == self.PASSIVE_SCANNING
4255
+ else 'ACTIVE'
4256
+ ),
4255
4257
  )
4256
4258
  )
4257
4259
  fields.append(
@@ -5010,9 +5012,9 @@ class HCI_LE_Advertising_Report_Event(HCI_LE_Meta_Event):
5010
5012
  return f'{color(self.subevent_name(self.subevent_code), "magenta")}:\n{reports}'
5011
5013
 
5012
5014
 
5013
- HCI_LE_Meta_Event.subevent_classes[
5014
- HCI_LE_ADVERTISING_REPORT_EVENT
5015
- ] = HCI_LE_Advertising_Report_Event
5015
+ HCI_LE_Meta_Event.subevent_classes[HCI_LE_ADVERTISING_REPORT_EVENT] = (
5016
+ HCI_LE_Advertising_Report_Event
5017
+ )
5016
5018
 
5017
5019
 
5018
5020
  # -----------------------------------------------------------------------------
@@ -5264,9 +5266,9 @@ class HCI_LE_Extended_Advertising_Report_Event(HCI_LE_Meta_Event):
5264
5266
  return f'{color(self.subevent_name(self.subevent_code), "magenta")}:\n{reports}'
5265
5267
 
5266
5268
 
5267
- HCI_LE_Meta_Event.subevent_classes[
5268
- HCI_LE_EXTENDED_ADVERTISING_REPORT_EVENT
5269
- ] = HCI_LE_Extended_Advertising_Report_Event
5269
+ HCI_LE_Meta_Event.subevent_classes[HCI_LE_EXTENDED_ADVERTISING_REPORT_EVENT] = (
5270
+ HCI_LE_Extended_Advertising_Report_Event
5271
+ )
5270
5272
 
5271
5273
 
5272
5274
  # -----------------------------------------------------------------------------
@@ -22,7 +22,8 @@ import dataclasses
22
22
  import enum
23
23
  import traceback
24
24
  import pyee
25
- from typing import Dict, List, Union, Set, Any, Optional, TYPE_CHECKING
25
+ from typing import Dict, List, Union, Set, Any, Optional, Type, TYPE_CHECKING
26
+ from typing_extensions import Self
26
27
 
27
28
  from bumble import at
28
29
  from bumble import rfcomm
@@ -417,17 +418,21 @@ class AtResponseType(enum.Enum):
417
418
  MULTIPLE = 2
418
419
 
419
420
 
421
+ @dataclasses.dataclass
420
422
  class AtResponse:
421
423
  code: str
422
424
  parameters: list
423
425
 
424
- def __init__(self, response: bytearray):
425
- code_and_parameters = response.split(b':')
426
+ @classmethod
427
+ def parse_from(cls: Type[Self], buffer: bytearray) -> Self:
428
+ code_and_parameters = buffer.split(b':')
426
429
  parameters = (
427
430
  code_and_parameters[1] if len(code_and_parameters) > 1 else bytearray()
428
431
  )
429
- self.code = code_and_parameters[0].decode()
430
- self.parameters = at.parse_parameters(parameters)
432
+ return cls(
433
+ code=code_and_parameters[0].decode(),
434
+ parameters=at.parse_parameters(parameters),
435
+ )
431
436
 
432
437
 
433
438
  @dataclasses.dataclass
@@ -530,7 +535,7 @@ class HfProtocol(pyee.EventEmitter):
530
535
 
531
536
  # Isolate the AT response code and parameters.
532
537
  raw_response = self.read_buffer[header + 2 : trailer]
533
- response = AtResponse(raw_response)
538
+ response = AtResponse.parse_from(raw_response)
534
539
  logger.debug(f"<<< {raw_response.decode()}")
535
540
 
536
541
  # Consume the response bytes.
@@ -815,11 +820,11 @@ class HfProtocol(pyee.EventEmitter):
815
820
  return calls
816
821
 
817
822
  async def update_ag_indicator(self, index: int, value: int):
818
- self.ag_indicators[index].current_status = value
819
- self.emit('ag_indicator', self.ag_indicators[index])
820
- logger.info(
821
- f"AG indicator updated: {self.ag_indicators[index].description}, {value}"
822
- )
823
+ # CIEV is in 1-index, while ag_indicators is in 0-index.
824
+ ag_indicator = self.ag_indicators[index - 1]
825
+ ag_indicator.current_status = value
826
+ self.emit('ag_indicator', ag_indicator)
827
+ logger.info(f"AG indicator updated: {ag_indicator.description}, {value}")
823
828
 
824
829
  async def handle_unsolicited(self):
825
830
  """Handle unsolicited result codes sent by the audio gateway."""
@@ -1006,7 +1011,9 @@ class EscoParameters:
1006
1011
  transmit_coding_format: CodingFormat
1007
1012
  receive_coding_format: CodingFormat
1008
1013
  packet_type: HCI_Enhanced_Setup_Synchronous_Connection_Command.PacketType
1009
- retransmission_effort: HCI_Enhanced_Setup_Synchronous_Connection_Command.RetransmissionEffort
1014
+ retransmission_effort: (
1015
+ HCI_Enhanced_Setup_Synchronous_Connection_Command.RetransmissionEffort
1016
+ )
1010
1017
  max_latency: int
1011
1018
 
1012
1019
  # Common
@@ -1014,12 +1021,12 @@ class EscoParameters:
1014
1021
  output_coding_format: CodingFormat = CodingFormat(CodecID.LINEAR_PCM)
1015
1022
  input_coded_data_size: int = 16
1016
1023
  output_coded_data_size: int = 16
1017
- input_pcm_data_format: HCI_Enhanced_Setup_Synchronous_Connection_Command.PcmDataFormat = (
1018
- HCI_Enhanced_Setup_Synchronous_Connection_Command.PcmDataFormat.TWOS_COMPLEMENT
1019
- )
1020
- output_pcm_data_format: HCI_Enhanced_Setup_Synchronous_Connection_Command.PcmDataFormat = (
1021
- HCI_Enhanced_Setup_Synchronous_Connection_Command.PcmDataFormat.TWOS_COMPLEMENT
1022
- )
1024
+ input_pcm_data_format: (
1025
+ HCI_Enhanced_Setup_Synchronous_Connection_Command.PcmDataFormat
1026
+ ) = HCI_Enhanced_Setup_Synchronous_Connection_Command.PcmDataFormat.TWOS_COMPLEMENT
1027
+ output_pcm_data_format: (
1028
+ HCI_Enhanced_Setup_Synchronous_Connection_Command.PcmDataFormat
1029
+ ) = HCI_Enhanced_Setup_Synchronous_Connection_Command.PcmDataFormat.TWOS_COMPLEMENT
1023
1030
  input_pcm_sample_payload_msb_position: int = 0
1024
1031
  output_pcm_sample_payload_msb_position: int = 0
1025
1032
  input_data_path: HCI_Enhanced_Setup_Synchronous_Connection_Command.DataPath = (
@@ -48,6 +48,7 @@ HID_INTERRUPT_PSM = 0x0013
48
48
 
49
49
  class Message:
50
50
  message_type: MessageType
51
+
51
52
  # Report types
52
53
  class ReportType(enum.IntEnum):
53
54
  OTHER_REPORT = 0x00
@@ -128,10 +128,10 @@ class PairingKeys:
128
128
 
129
129
  def print(self, prefix=''):
130
130
  keys_dict = self.to_dict()
131
- for (container_property, value) in keys_dict.items():
131
+ for container_property, value in keys_dict.items():
132
132
  if isinstance(value, dict):
133
133
  print(f'{prefix}{color(container_property, "cyan")}:')
134
- for (key_property, key_value) in value.items():
134
+ for key_property, key_value in value.items():
135
135
  print(f'{prefix} {color(key_property, "green")}: {key_value}')
136
136
  else:
137
137
  print(f'{prefix}{color(container_property, "cyan")}: {value}')
@@ -158,7 +158,7 @@ class KeyStore:
158
158
  async def get_resolving_keys(self):
159
159
  all_keys = await self.get_all()
160
160
  resolving_keys = []
161
- for (name, keys) in all_keys:
161
+ for name, keys in all_keys:
162
162
  if keys.irk is not None:
163
163
  if keys.address_type is None:
164
164
  address_type = Address.RANDOM_DEVICE_ADDRESS
@@ -171,7 +171,7 @@ class KeyStore:
171
171
  async def print(self, prefix=''):
172
172
  entries = await self.get_all()
173
173
  separator = ''
174
- for (name, keys) in entries:
174
+ for name, keys in entries:
175
175
  print(separator + prefix + color(name, 'yellow'))
176
176
  keys.print(prefix=prefix + ' ')
177
177
  separator = '\n'