Files
bumble_mirror/api/reference.html
2022-05-16 19:54:59 -07:00

1302 lines
32 KiB
HTML

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="../images/favicon.ico">
<meta name="generator" content="mkdocs-1.2, mkdocs-material-7.1.7">
<title>Reference - Bumble</title>
<link rel="stylesheet" href="../assets/stylesheets/main.ca7ac06f.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.f1a3b89f.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
<link rel="stylesheet" href="../assets/_mkdocstrings.css">
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<script>function __prefix(e){return new URL("..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#bumble-python-api" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../index.html" title="Bumble" class="md-header__button md-logo" aria-label="Bumble" data-md-component="logo">
<img src="../images/logo.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Bumble
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Reference
</span>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../index.html" title="Bumble" class="md-nav__button md-logo" aria-label="Bumble" data-md-component="logo">
<img src="../images/logo.png" alt="logo">
</a>
Bumble
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../index.html" class="md-nav__link">
Introduction
</a>
</li>
<li class="md-nav__item">
<a href="../getting_started.html" class="md-nav__link">
Getting Started
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3">
Use Cases
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Use Cases" data-md-level="1">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Use Cases
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../use_cases/index.html" class="md-nav__link">
Overview
</a>
</li>
<li class="md-nav__item">
<a href="../use_cases/use_case_1.html" class="md-nav__link">
Use Case 1
</a>
</li>
<li class="md-nav__item">
<a href="../use_cases/use_case_2.html" class="md-nav__link">
Use Case 2
</a>
</li>
<li class="md-nav__item">
<a href="../use_cases/use_case_3.html" class="md-nav__link">
Use Case 3
</a>
</li>
<li class="md-nav__item">
<a href="../use_cases/use_case_4.html" class="md-nav__link">
Use Case 4
</a>
</li>
<li class="md-nav__item">
<a href="../use_cases/use_case_5.html" class="md-nav__link">
Use Case 5
</a>
</li>
<li class="md-nav__item">
<a href="../use_cases/use_case_6.html" class="md-nav__link">
Use Case 6
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4">
Components
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Components" data-md-level="1">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Components
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../components/controller.html" class="md-nav__link">
Controller
</a>
</li>
<li class="md-nav__item">
<a href="../components/host.html" class="md-nav__link">
Host
</a>
</li>
<li class="md-nav__item">
<a href="../components/gatt.html" class="md-nav__link">
GATT
</a>
</li>
<li class="md-nav__item">
<a href="../components/security_manager.html" class="md-nav__link">
Security Manager
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5" type="checkbox" id="__nav_5" >
<label class="md-nav__link" for="__nav_5">
Transports
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Transports" data-md-level="1">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Transports
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../transports/index.html" class="md-nav__link">
Overview
</a>
</li>
<li class="md-nav__item">
<a href="../transports/serial.html" class="md-nav__link">
Serial
</a>
</li>
<li class="md-nav__item">
<a href="../transports/usb.html" class="md-nav__link">
USB
</a>
</li>
<li class="md-nav__item">
<a href="../transports/pty.html" class="md-nav__link">
PTY
</a>
</li>
<li class="md-nav__item">
<a href="../transports/udp.html" class="md-nav__link">
UDP
</a>
</li>
<li class="md-nav__item">
<a href="../transports/tcp_client.html" class="md-nav__link">
TCP Client
</a>
</li>
<li class="md-nav__item">
<a href="../transports/tcp_server.html" class="md-nav__link">
TCP Server
</a>
</li>
<li class="md-nav__item">
<a href="../transports/ws_client.html" class="md-nav__link">
WebSocket Client
</a>
</li>
<li class="md-nav__item">
<a href="../transports/ws_server.html" class="md-nav__link">
WebSocket Server
</a>
</li>
<li class="md-nav__item">
<a href="../transports/vhci.html" class="md-nav__link">
VHCI
</a>
</li>
<li class="md-nav__item">
<a href="../transports/hci_socket.html" class="md-nav__link">
HCI Socket
</a>
</li>
<li class="md-nav__item">
<a href="../transports/android_emulator.html" class="md-nav__link">
Android Emulator
</a>
</li>
<li class="md-nav__item">
<a href="../transports/file.html" class="md-nav__link">
File
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6" type="checkbox" id="__nav_6" checked>
<label class="md-nav__link" for="__nav_6">
API
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="API" data-md-level="1">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
API
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="guide.html" class="md-nav__link">
Guide
</a>
</li>
<li class="md-nav__item">
<a href="examples.html" class="md-nav__link">
Examples
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="reference.html" class="md-nav__link md-nav__link--active">
Reference
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7" type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_7">
Apps & Tools
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Apps & Tools" data-md-level="1">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Apps & Tools
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../apps_and_tools/index.html" class="md-nav__link">
Overview
</a>
</li>
<li class="md-nav__item">
<a href="../apps_and_tools/console.html" class="md-nav__link">
Console
</a>
</li>
<li class="md-nav__item">
<a href="../apps_and_tools/link_relay.html" class="md-nav__link">
Link Relay
</a>
</li>
<li class="md-nav__item">
<a href="../apps_and_tools/hci_bridge.html" class="md-nav__link">
HCI Bridge
</a>
</li>
<li class="md-nav__item">
<a href="../apps_and_tools/gg_bridge.html" class="md-nav__link">
Golden Gate Bridge
</a>
</li>
<li class="md-nav__item">
<a href="../apps_and_tools/show.html" class="md-nav__link">
Show
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_8" type="checkbox" id="__nav_8" >
<label class="md-nav__link" for="__nav_8">
Hardware
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Hardware" data-md-level="1">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
Hardware
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../hardware/index.html" class="md-nav__link">
Overview
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_9" type="checkbox" id="__nav_9" >
<label class="md-nav__link" for="__nav_9">
Platforms
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Platforms" data-md-level="1">
<label class="md-nav__title" for="__nav_9">
<span class="md-nav__icon md-icon"></span>
Platforms
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../platforms/index.html" class="md-nav__link">
Overview
</a>
</li>
<li class="md-nav__item">
<a href="../platforms/macos.html" class="md-nav__link">
macOS
</a>
</li>
<li class="md-nav__item">
<a href="../platforms/linux.html" class="md-nav__link">
Linux
</a>
</li>
<li class="md-nav__item">
<a href="../platforms/windows.html" class="md-nav__link">
Windows
</a>
</li>
<li class="md-nav__item">
<a href="../platforms/android.html" class="md-nav__link">
Android
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_10" type="checkbox" id="__nav_10" >
<label class="md-nav__link" for="__nav_10">
Examples
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Examples" data-md-level="1">
<label class="md-nav__title" for="__nav_10">
<span class="md-nav__icon md-icon"></span>
Examples
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../examples/index.html" class="md-nav__link">
Overview
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="bumble-python-api">Bumble Python API<a class="headerlink" href="#bumble-python-api" title="Permanent link">&para;</a></h1>
<h1 id="classes">Classes<a class="headerlink" href="#classes" title="Permanent link">&para;</a></h1>
<h2 id="address">Address<a class="headerlink" href="#address" title="Permanent link">&para;</a></h2>
<div class="doc doc-object doc-class">
<a id="bumble.hci.Address"></a>
<div class="doc doc-contents first">
<p>Bluetooth Address (see Bluetooth spec Vol 6, Part B - 1.3 DEVICE ADDRESS)
NOTE: the address bytes are stored in little-endian byte order here, so
address[0] is the LSB of the address, address[5] is the MSB.</p>
<div class="doc doc-children">
<div class="doc doc-object doc-method">
<h2 id="bumble.hci.Address.__init__" class="doc doc-heading">
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">address</span><span class="p">,</span> <span class="n">address_type</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span></code>
<span class="doc doc-properties">
<small class="doc doc-property doc-property-special"><code>special</code></small>
</span>
<a href="#bumble.hci.Address.__init__" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="doc doc-contents ">
<p>Initialize an instance. <code>address</code> may be a byte array in little-endian
format, or a hex string in big-endian format (with optional ':'
separators between the bytes).
If the address is a string suffixed with '/P', <code>address_type</code> is ignored and the type
is set to PUBLIC_DEVICE_ADDRESS.</p>
<details class="quote">
<summary>Source code in <code>bumble/hci.py</code></summary>
<div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">address</span><span class="p">,</span> <span class="n">address_type</span> <span class="o">=</span> <span class="n">RANDOM_DEVICE_ADDRESS</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;</span>
<span class="sd"> Initialize an instance. `address` may be a byte array in little-endian</span>
<span class="sd"> format, or a hex string in big-endian format (with optional &#39;:&#39;</span>
<span class="sd"> separators between the bytes).</span>
<span class="sd"> If the address is a string suffixed with &#39;/P&#39;, `address_type` is ignored and the type</span>
<span class="sd"> is set to PUBLIC_DEVICE_ADDRESS.</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">address</span><span class="p">)</span> <span class="ow">is</span> <span class="nb">bytes</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">address_bytes</span> <span class="o">=</span> <span class="n">address</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># Check if there&#39;s a &#39;/P&#39; type specifier</span>
<span class="k">if</span> <span class="n">address</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s1">&#39;P&#39;</span><span class="p">):</span>
<span class="n">address_type</span> <span class="o">=</span> <span class="n">Address</span><span class="o">.</span><span class="n">PUBLIC_DEVICE_ADDRESS</span>
<span class="n">address</span> <span class="o">=</span> <span class="n">address</span><span class="p">[:</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">address</span><span class="p">)</span> <span class="o">==</span> <span class="mi">12</span> <span class="o">+</span> <span class="mi">5</span><span class="p">:</span>
<span class="c1"># Form with &#39;:&#39; separators</span>
<span class="n">address</span> <span class="o">=</span> <span class="n">address</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;:&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">address_bytes</span> <span class="o">=</span> <span class="nb">bytes</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="n">address</span><span class="p">)))</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">address_bytes</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">6</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;invalid address length&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">address_type</span> <span class="o">=</span> <span class="n">address_type</span>
</code></pre></div>
</details>
</div>
</div>
<div class="doc doc-object doc-method">
<h2 id="bumble.hci.Address.__str__" class="doc doc-heading">
<code class="highlight language-python"><span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></code>
<span class="doc doc-properties">
<small class="doc doc-property doc-property-special"><code>special</code></small>
</span>
<a href="#bumble.hci.Address.__str__" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="doc doc-contents ">
<p>String representation of the address, MSB first</p>
<details class="quote">
<summary>Source code in <code>bumble/hci.py</code></summary>
<div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;</span>
<span class="sd"> String representation of the address, MSB first</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="k">return</span> <span class="s1">&#39;:&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">x</span><span class="si">:</span><span class="s1">02X</span><span class="si">}</span><span class="s1">&#39;</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">address_bytes</span><span class="p">)])</span>
</code></pre></div>
</details>
</div>
</div>
</div>
</div>
</div>
<h2 id="hci_packet">HCI_Packet<a class="headerlink" href="#hci_packet" title="Permanent link">&para;</a></h2>
<div class="doc doc-object doc-class">
<a id="bumble.hci.HCI_Packet"></a>
<div class="doc doc-contents first">
<p>Abstract Base class for HCI packets</p>
<div class="doc doc-children">
</div>
</div>
</div>
<h2 id="hci-commands">HCI Commands<a class="headerlink" href="#hci-commands" title="Permanent link">&para;</a></h2>
<h3 id="hci_command">HCI_Command<a class="headerlink" href="#hci_command" title="Permanent link">&para;</a></h3>
<div class="doc doc-object doc-class">
<a id="bumble.hci.HCI_Command"></a>
<div class="doc doc-contents first">
<p>See Bluetooth spec @ Vol 2, Part E - 5.4.1 HCI Command Packet</p>
<div class="doc doc-children">
<div class="doc doc-object doc-method">
<h2 id="bumble.hci.HCI_Command.command" class="doc doc-heading">
<code class="highlight language-python"><span class="n">command</span><span class="p">(</span><span class="n">fields</span><span class="o">=</span><span class="p">[],</span> <span class="n">return_parameters_fields</span><span class="o">=</span><span class="p">[])</span></code>
<span class="doc doc-properties">
<small class="doc doc-property doc-property-staticmethod"><code>staticmethod</code></small>
</span>
<a href="#bumble.hci.HCI_Command.command" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="doc doc-contents ">
<p>Decorator used to declare and register subclasses</p>
<details class="quote">
<summary>Source code in <code>bumble/hci.py</code></summary>
<div class="highlight"><pre><span></span><code><span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">command</span><span class="p">(</span><span class="n">fields</span><span class="o">=</span><span class="p">[],</span> <span class="n">return_parameters_fields</span><span class="o">=</span><span class="p">[]):</span>
<span class="sd">&#39;&#39;&#39;</span>
<span class="sd"> Decorator used to declare and register subclasses</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="k">def</span> <span class="nf">inner</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="vm">__name__</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">op_code</span> <span class="o">=</span> <span class="n">key_with_value</span><span class="p">(</span><span class="n">HCI_COMMAND_NAMES</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">op_code</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="s1">&#39;command not found in HCI_COMMAND_NAMES&#39;</span><span class="p">)</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">fields</span> <span class="o">=</span> <span class="n">fields</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">return_parameters_fields</span> <span class="o">=</span> <span class="n">return_parameters_fields</span>
<span class="c1"># Patch the __init__ method to fix the op_code</span>
<span class="k">def</span> <span class="nf">init</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parameters</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">return</span> <span class="n">HCI_Command</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">op_code</span><span class="p">,</span> <span class="n">parameters</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="bp">cls</span><span class="o">.</span><span class="fm">__init__</span> <span class="o">=</span> <span class="n">init</span>
<span class="c1"># Register a factory for this class</span>
<span class="n">HCI_Command</span><span class="o">.</span><span class="n">command_classes</span><span class="p">[</span><span class="bp">cls</span><span class="o">.</span><span class="n">op_code</span><span class="p">]</span> <span class="o">=</span> <span class="bp">cls</span>
<span class="k">return</span> <span class="bp">cls</span>
<span class="k">return</span> <span class="n">inner</span>
</code></pre></div>
</details>
</div>
</div>
</div>
</div>
</div>
<h3 id="hci_disconnect_command">HCI_Disconnect_Command<a class="headerlink" href="#hci_disconnect_command" title="Permanent link">&para;</a></h3>
<div class="doc doc-object doc-class">
<a id="bumble.hci.HCI_Disconnect_Command"></a>
<div class="doc doc-contents first">
<p>See Bluetooth spec @ 7.1.6 Disconnect Command</p>
<div class="doc doc-children">
</div>
</div>
</div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid">
<a href="examples.html" title="Examples" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
</div>
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
Previous
</span>
Examples
</span>
</div>
</a>
<a href="../apps_and_tools/index.html" title="Overview" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
<span class="md-flex__ellipsis">
<span class="md-footer-nav__direction">
Next
</span>
Overview
</span>
</div>
<div class="md-flex__cell md-flex__cell--shrink">
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
</div>
</a>
</nav>
</div>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-copyright__highlight">
Copyright 2021-2022 Google LLC
</div>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing", "select.version.title": "Select version"}, "search": "../assets/javascripts/workers/search.b0710199.min.js", "version": null}</script>
<script src="../assets/javascripts/bundle.76f349be.min.js"></script>
</body>
</html>