diff options
| author | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-25 19:55:15 -0400 |
|---|---|---|
| committer | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-25 19:55:15 -0400 |
| commit | 253e67c8b3a72b3a4757fdbc5845297628db0a4a (patch) | |
| tree | adf53b66087aa30dfbf8bf391a1dadb044c3bf4d /static/netbsd/man4/bluetooth.4 4.html | |
| parent | a9157ce950dfe2fc30795d43b9d79b9d1bffc48b (diff) | |
docs: Added All NetBSD Manuals
Diffstat (limited to 'static/netbsd/man4/bluetooth.4 4.html')
| -rw-r--r-- | static/netbsd/man4/bluetooth.4 4.html | 363 |
1 files changed, 363 insertions, 0 deletions
diff --git a/static/netbsd/man4/bluetooth.4 4.html b/static/netbsd/man4/bluetooth.4 4.html new file mode 100644 index 00000000..959d6c8d --- /dev/null +++ b/static/netbsd/man4/bluetooth.4 4.html @@ -0,0 +1,363 @@ +<table class="head"> + <tr> + <td class="head-ltitle">BLUETOOTH(4)</td> + <td class="head-vol">Device Drivers Manual</td> + <td class="head-rtitle">BLUETOOTH(4)</td> + </tr> +</table> +<div class="manual-text"> +<section class="Sh"> +<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> +<p class="Pp"><code class="Nm">bluetooth</code> — + <span class="Nd">Bluetooth Protocol Family</span></p> +</section> +<section class="Sh"> +<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> +<p class="Pp"><code class="In">#include + <<a class="In">netbt/bluetooth.h</a>></code> + <br/> + <code class="In">#include <<a class="In">netbt/hci.h</a>></code> + <br/> + <code class="In">#include <<a class="In">netbt/l2cap.h</a>></code> + <br/> + <code class="In">#include <<a class="In">netbt/rfcomm.h</a>></code></p> +</section> +<section class="Sh"> +<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> +<p class="Pp">The Bluetooth Protocol Family</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="ADDRESSING"><a class="permalink" href="#ADDRESSING">ADDRESSING</a></h1> +<p class="Pp">Bluetooth Protocol Family sockets all use a + <var class="Ar">sockaddr_bt</var> structure which contains a Bluetooth + Device Address (BDADDR). This consists of a six byte string in least + significant byte first order.</p> +<div class="Bd Pp Bd-indent Li"> +<pre>struct sockaddr_bt { + uint8_t bt_len; + sa_family_t bt_family; + bdaddr_t bt_bdaddr; + uint16_t bt_psm; + uint8_t bt_channel; +};</pre> +</div> +<p class="Pp">The local address used by the socket can be set with + <a class="Xr">bind(2)</a>.</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="PROTOCOLS"><a class="permalink" href="#PROTOCOLS">PROTOCOLS</a></h1> +<p class="Pp">Protocols included are:</p> +<dl class="Bl-tag"> + <dt id="BTPROTO_HCI"><a class="permalink" href="#BTPROTO_HCI"><code class="Cm">BTPROTO_HCI</code></a></dt> + <dd>This gives raw access to the Host Controller Interface of local devices + using the HCI protocol as described in the Bluetooth Core Specification. + Any user may open an HCI socket but there are limitations on what + unprivileged users can send and receive. The local address specified by + <a class="Xr">bind(2)</a> may be used to select the device that the socket + will receive packets from. If <code class="Dv">BDADDR_ANY</code> is + specified then the socket will receive packets from all devices on the + system. <a class="Xr">connect(2)</a> may be used to create connections + such that packets sent with <a class="Xr">send(2)</a> will be delivered to + the specified device, otherwise <a class="Xr">sendto(2)</a> should be + used. + <p class="Pp">The <var class="Ar">bt_psm</var> and + <var class="Ar">bt_channel</var> fields in the sockaddr_bt structure are + ignored by HCI protocol code and should be set to zero.</p> + <p class="Pp">HCI socket options:</p> + <dl class="Bl-tag"> + <dt id="SO_HCI_EVT_FILTER"><a class="permalink" href="#SO_HCI_EVT_FILTER"><code class="Dv">SO_HCI_EVT_FILTER</code></a> + [<var class="Ar">struct hci_filter</var>]</dt> + <dd>This filter controls which events will be received at the socket. See + <code class="In"><<a class="In">netbt/hci.h</a>></code> for + available events. By default, Command_Complete and Command_Status + events only are enabled.</dd> + <dt id="SO_HCI_PKT_FILTER"><a class="permalink" href="#SO_HCI_PKT_FILTER"><code class="Dv">SO_HCI_PKT_FILTER</code></a> + [<var class="Ar">struct hci_filter</var>]</dt> + <dd>This filter controls the type of packets that will be received at the + socket. By default, Event packets only are enabled.</dd> + <dt id="SO_HCI_DIRECTION"><a class="permalink" href="#SO_HCI_DIRECTION"><code class="Dv">SO_HCI_DIRECTION</code></a> + [<var class="Ar">int</var>]</dt> + <dd>When set, this enables control messages on packets received at the + socket indicating the direction of travel of the packet.</dd> + </dl> + <p class="Pp">HCI <a class="Xr">sysctl(8)</a> controls:</p> + <dl class="Bl-tag"> + <dt id="net.bluetooth.hci.sendspace"><a class="permalink" href="#net.bluetooth.hci.sendspace"><code class="Dv">net.bluetooth.hci.sendspace</code></a></dt> + <dd>Default send buffer size for HCI sockets.</dd> + <dt id="net.bluetooth.hci.recvspace"><a class="permalink" href="#net.bluetooth.hci.recvspace"><code class="Dv">net.bluetooth.hci.recvspace</code></a></dt> + <dd>Default receive buffer size for HCI sockets</dd> + <dt id="net.bluetooth.hci.acl_expiry"><a class="permalink" href="#net.bluetooth.hci.acl_expiry"><code class="Dv">net.bluetooth.hci.acl_expiry</code></a></dt> + <dd>If set, this is the time in seconds after which unused ACL data + connections will be expired. If zero, connections will not be + closed.</dd> + <dt id="net.bluetooth.hci.memo_expiry"><a class="permalink" href="#net.bluetooth.hci.memo_expiry"><code class="Dv">net.bluetooth.hci.memo_expiry</code></a></dt> + <dd>Time, in seconds, that the system will keep records of Bluetooth + devices in the vicinity after an Inquiry Response packet has been + received. This information is used for routing purposes.</dd> + <dt id="net.bluetooth.hci.eventq_max"><a class="permalink" href="#net.bluetooth.hci.eventq_max"><code class="Dv">net.bluetooth.hci.eventq_max</code></a></dt> + <dd>The maximum number of packets on the low level Event queue.</dd> + <dt id="net.bluetooth.hci.aclrxq_max"><a class="permalink" href="#net.bluetooth.hci.aclrxq_max"><code class="Dv">net.bluetooth.hci.aclrxq_max</code></a></dt> + <dd>The maximum number of packets on the low level ACL queue.</dd> + <dt id="net.bluetooth.hci.scorxq_max"><a class="permalink" href="#net.bluetooth.hci.scorxq_max"><code class="Dv">net.bluetooth.hci.scorxq_max</code></a></dt> + <dd>The maximum number of packets on the low level SCO queue.</dd> + </dl> + </dd> + <dt id="BTPROTO_L2CAP"><a class="permalink" href="#BTPROTO_L2CAP"><code class="Cm">BTPROTO_L2CAP</code></a></dt> + <dd>L2CAP sockets give sequential packet access over channels to other + Bluetooth devices and make use of the <var class="Ar">bt_psm</var> field + in the <var class="Ar">sockaddr_bt</var> structure to select the + Protocol/Service Multiplexer to specify when making connections. If the + special value of <code class="Dv">L2CAP_PSM_ANY</code> is bound when the + <a class="Xr">listen(2)</a> call is made, the next available PSM from the + dynamic range above 0x1001 will be selected and may be discovered using + the <a class="Xr">getsockname(2)</a> call. + <p class="Pp">L2CAP socket options:</p> + <dl class="Bl-tag"> + <dt id="SO_L2CAP_IMTU"><a class="permalink" href="#SO_L2CAP_IMTU"><code class="Dv">SO_L2CAP_IMTU</code></a> + [<var class="Ar">uint16_t</var>]</dt> + <dd>Incoming MTU</dd> + <dt id="SO_L2CAP_OMTU"><a class="permalink" href="#SO_L2CAP_OMTU"><code class="Dv">SO_L2CAP_OMTU</code></a> + [<var class="Ar">uint16_t</var>]</dt> + <dd>Outgoing MTU (read-only)</dd> + <dt id="SO_L2CAP_LM"><a class="permalink" href="#SO_L2CAP_LM"><code class="Dv">SO_L2CAP_LM</code></a> + [<var class="Ar">int</var>]</dt> + <dd>Link Mode. The following bits may be set: + <p class="Pp"></p> + <dl class="Bl-tag Bl-compact"> + <dt id="L2CAP_LM_AUTH"><a class="permalink" href="#L2CAP_LM_AUTH"><code class="Dv">L2CAP_LM_AUTH</code></a></dt> + <dd>Request authentication (pairing).</dd> + <dt id="L2CAP_LM_ENCRYPT"><a class="permalink" href="#L2CAP_LM_ENCRYPT"><code class="Dv">L2CAP_LM_ENCRYPT</code></a></dt> + <dd>Request encryption (includes auth).</dd> + <dt id="L2CAP_LM_SECURE"><a class="permalink" href="#L2CAP_LM_SECURE"><code class="Dv">L2CAP_LM_SECURE</code></a></dt> + <dd>Request secured link (encryption, plus change link key).</dd> + </dl> + <p class="Pp">Link mode settings will be applied to the baseband link + during L2CAP connection establishment. If the L2CAP connection is + already established, <code class="Dv">EINPROGRESS</code> may be + returned, and it is not possible to guarantee that data already + queued (from either end) will not be delivered. If the mode change + fails, the L2CAP connection will be aborted.</p> + </dd> + </dl> + <p class="Pp">L2CAP <a class="Xr">sysctl(8)</a> controls:</p> + <dl class="Bl-tag"> + <dt id="net.bluetooth.l2cap.sendspace"><a class="permalink" href="#net.bluetooth.l2cap.sendspace"><code class="Dv">net.bluetooth.l2cap.sendspace</code></a></dt> + <dd>Default send buffer size for L2CAP sockets.</dd> + <dt id="net.bluetooth.l2cap.recvspace"><a class="permalink" href="#net.bluetooth.l2cap.recvspace"><code class="Dv">net.bluetooth.l2cap.recvspace</code></a></dt> + <dd>Default receive buffer size for L2CAP sockets.</dd> + <dt id="net.bluetooth.l2cap.rtx"><a class="permalink" href="#net.bluetooth.l2cap.rtx"><code class="Dv">net.bluetooth.l2cap.rtx</code></a></dt> + <dd>Response Timeout eXpiry for L2CAP signals.</dd> + <dt id="net.bluetooth.l2cap.ertx"><a class="permalink" href="#net.bluetooth.l2cap.ertx"><code class="Dv">net.bluetooth.l2cap.ertx</code></a></dt> + <dd>Extended Response Timeout eXpiry for L2CAP signals.</dd> + </dl> + </dd> + <dt id="BTPROTO_RFCOMM"><a class="permalink" href="#BTPROTO_RFCOMM"><code class="Cm">BTPROTO_RFCOMM</code></a></dt> + <dd>RFCOMM sockets provide streamed data over Bluetooth connection and make + use of the <var class="Ar">bt_psm</var>, and + <var class="Ar">bt_channel</var> fields in the + <var class="Ar">sockaddr_bt</var> structure. The channel number must be + between 1 and 30 inclusive except that if the special value + <code class="Dv">RFCOMM_CHANNEL_ANY</code> is bound, when the + <a class="Xr">listen(2)</a> call is made, the first unused channel for the + relevant bdaddr will be allocated and may be discovered using the + <a class="Xr">getsockname(2)</a> call. If no PSM is specified, a default + value of <code class="Dv">L2CAP_PSM_RFCOMM</code> (0x0003) will be used. + <p class="Pp">RFCOMM socket options:</p> + <dl class="Bl-tag"> + <dt id="SO_RFCOMM_MTU"><a class="permalink" href="#SO_RFCOMM_MTU"><code class="Dv">SO_RFCOMM_MTU</code></a> + [<var class="Ar">uint16_t</var>]</dt> + <dd>Maximum Frame Size to use for this link.</dd> + <dt id="SO_RFCOMM_LM"><a class="permalink" href="#SO_RFCOMM_LM"><code class="Dv">SO_RFCOMM_LM</code></a> + [<var class="Ar">int</var>]</dt> + <dd>Link Mode. The following bits may be set at any time: + <p class="Pp"></p> + <dl class="Bl-tag Bl-compact"> + <dt id="RFCOMM_LM_AUTH"><a class="permalink" href="#RFCOMM_LM_AUTH"><code class="Dv">RFCOMM_LM_AUTH</code></a></dt> + <dd>Request authentication (pairing).</dd> + <dt id="RFCOMM_LM_ENCRYPT"><a class="permalink" href="#RFCOMM_LM_ENCRYPT"><code class="Dv">RFCOMM_LM_ENCRYPT</code></a></dt> + <dd>Request encryption (includes auth).</dd> + <dt id="RFCOMM_LM_SECURE"><a class="permalink" href="#RFCOMM_LM_SECURE"><code class="Dv">RFCOMM_LM_SECURE</code></a></dt> + <dd>Request secured link (encryption, plus change link key).</dd> + </dl> + <p class="Pp">Link mode settings will be applied to the baseband link + during RFCOMM connection establishment. If the RFCOMM connection is + already established, <code class="Dv">EINPROGRESS</code> may be + returned, and it is not possible to guarantee that data already + queued (from either end) will not be delivered. If the mode change + fails, the RFCOMM connection will be aborted.</p> + </dd> + </dl> + <p class="Pp">RFCOMM <a class="Xr">sysctl(8)</a> controls:</p> + <dl class="Bl-tag"> + <dt id="net.bluetooth.rfcomm.sendspace"><a class="permalink" href="#net.bluetooth.rfcomm.sendspace"><code class="Dv">net.bluetooth.rfcomm.sendspace</code></a></dt> + <dd>Default send buffer size for RFCOMM sockets.</dd> + <dt id="net.bluetooth.rfcomm.recvspace"><a class="permalink" href="#net.bluetooth.rfcomm.recvspace"><code class="Dv">net.bluetooth.rfcomm.recvspace</code></a></dt> + <dd>Default receive buffer size for RFCOMM sockets.</dd> + <dt id="net.bluetooth.rfcomm.default_mtu"><a class="permalink" href="#net.bluetooth.rfcomm.default_mtu"><code class="Dv">net.bluetooth.rfcomm.default_mtu</code></a></dt> + <dd>Maximum Frame Size (N1)</dd> + <dt id="net.bluetooth.ack_timeout"><a class="permalink" href="#net.bluetooth.ack_timeout"><code class="Dv">net.bluetooth.ack_timeout</code></a></dt> + <dd>Acknowledgement Timer (T1)</dd> + <dt id="net.bluetooth.mcc_timeout"><a class="permalink" href="#net.bluetooth.mcc_timeout"><code class="Dv">net.bluetooth.mcc_timeout</code></a></dt> + <dd>Response Timer for Multiplexer Control Channel (T2)</dd> + </dl> + </dd> + <dt id="BTPROTO_SCO"><a class="permalink" href="#BTPROTO_SCO"><code class="Cm">BTPROTO_SCO</code></a></dt> + <dd>SCO sockets provide sequential packet access to time sensitive data + channels over Bluetooth connections, typically used for audio data. + <p class="Pp">SCO socket options:</p> + <dl class="Bl-tag"> + <dt id="SO_SCO_MTU"><a class="permalink" href="#SO_SCO_MTU"><code class="Dv">SO_SCO_MTU</code></a> + [<var class="Ar">uint16_t</var>]</dt> + <dd>Maximum packet size for use on this link. This is read-only and will + be set by the protocol code when a connection is made. Currently, due + to limitations in the <a class="Xr">ubt(4)</a> driver, the SCO + protocol code will only accept packets with exactly this size.</dd> + <dt id="SO_SCO_HANDLE"><a class="permalink" href="#SO_SCO_HANDLE"><code class="Dv">SO_SCO_HANDLE</code></a> + [<var class="Ar">uint16_t</var>]</dt> + <dd>Connection handle for this link. This is read-only and provided for + informational purposes only.</dd> + </dl> + <p class="Pp">SCO <a class="Xr">sysctl(8)</a> controls:</p> + <dl class="Bl-tag"> + <dt id="net.bluetooth.sco.sendspace"><a class="permalink" href="#net.bluetooth.sco.sendspace"><code class="Dv">net.bluetooth.sco.sendspace</code></a></dt> + <dd>Default send buffer size for SCO sockets.</dd> + <dt id="net.bluetooth.sco.recvspace"><a class="permalink" href="#net.bluetooth.sco.recvspace"><code class="Dv">net.bluetooth.sco.recvspace</code></a></dt> + <dd>Default receive buffer size for SCO sockets.</dd> + </dl> + </dd> +</dl> +</section> +<section class="Sh"> +<h1 class="Sh" id="INFORMATION"><a class="permalink" href="#INFORMATION">INFORMATION</a></h1> +<p class="Pp">The following <a class="Xr">ioctl(2)</a> calls may be used to + manipulate Bluetooth devices. The <a class="Xr">ioctl(2)</a> must be made on + <code class="Cm">BTPROTO_HCI</code> sockets. All of the requests take a + <var class="Ar">btreq</var> structure defined as follows as their parameter + and unless otherwise specified, use the <var class="Ar">btr_name</var> field + to identify the device.</p> +<div class="Bd Pp Li"> +<pre>struct btreq { + char btr_name[HCI_DEVNAME_SIZE]; /* device name */ + + union { + struct { + bdaddr_t btri_bdaddr; /* device bdaddr */ + uint16_t btri_flags; /* flags */ + uint16_t btri_num_cmd; /* # of free cmd buffers */ + uint16_t btri_num_acl; /* # of free ACL buffers */ + uint16_t btri_num_sco; /* # of free SCO buffers */ + uint16_t btri_acl_mtu; /* ACL mtu */ + uint16_t btri_sco_mtu; /* SCO mtu */ + uint16_t btri_link_policy; /* Link Policy */ + uint16_t btri_packet_type; /* Packet Type */ + uint16_t btri_max_acl; /* max ACL buffers */ + uint16_t btri_max_sco; /* max SCO buffers */ + } btri; + struct { + uint8_t btrf_page0[HCI_FEATURES_SIZE]; /* basic */ + uint8_t btrf_page1[HCI_FEATURES_SIZE]; /* extended page 1 */ + uint8_t btrf_page2[HCI_FEATURES_SIZE]; /* extended page 2 */ + } btrf; + struct bt_stats btrs; /* unit stats */ + } btru; +}; + +#define btr_flags btru.btri.btri_flags +#define btr_bdaddr btru.btri.btri_bdaddr +#define btr_num_cmd btru.btri.btri_num_cmd +#define btr_num_acl btru.btri.btri_num_acl +#define btr_num_sco btru.btri.btri_num_sco +#define btr_acl_mtu btru.btri.btri_acl_mtu +#define btr_sco_mtu btru.btri.btri_sco_mtu +#define btr_link_policy btru.btri.btri_link_policy +#define btr_packet_type btru.btri.btri_packet_type +#define btr_max_acl btru.btri.btri_max_acl +#define btr_max_sco btru.btri.btri_max_sco +#define btr_features0 btru.btrf.btrf_page0 +#define btr_features1 btru.btrf.btrf_page1 +#define btr_features2 btru.btrf.btrf_page2 +#define btr_stats btru.btrs + +/* btr_flags */ +#define BTF_UP (1<<0) /* unit is up */ +#define BTF_RUNNING (1<<1) /* unit is running */ +#define BTF_XMIT_CMD (1<<2) /* transmitting CMD packets */ +#define BTF_XMIT_ACL (1<<3) /* transmitting ACL packets */ +#define BTF_XMIT_SCO (1<<4) /* transmitting SCO packets */ +#define BTF_INIT_BDADDR (1<<5) /* waiting for bdaddr */ +#define BTF_INIT_BUFFER_SIZE (1<<6) /* waiting for buffer size */ +#define BTF_INIT_FEATURES (1<<7) /* waiting for features */ +#define BTF_NOOP_ON_RESET (1<<8) /* wait for No-op on reset */ +#define BTF_INIT_COMMANDS (1<<9) /* waiting for supported commands */ +#define BTF_MASTER (1<<10) /* request Master role */ + +struct bt_stats { + uint32_t err_tx; + uint32_t err_rx; + uint32_t cmd_tx; + uint32_t evt_rx; + uint32_t acl_tx; + uint32_t acl_rx; + uint32_t sco_tx; + uint32_t sco_rx; + uint32_t byte_tx; + uint32_t byte_rx; +}; + +</pre> +</div> +<dl class="Bl-tag"> + <dt id="SIOCGBTINFO"><a class="permalink" href="#SIOCGBTINFO"><code class="Dv">SIOCGBTINFO</code></a></dt> + <dd>Get Bluetooth device Info. Given the device name, fill in the btreq + structure including the address field for use with socket addressing as + above.</dd> + <dt id="SIOCGBTINFOA"><a class="permalink" href="#SIOCGBTINFOA"><code class="Dv">SIOCGBTINFOA</code></a></dt> + <dd>Get Bluetooth device Info from Address. Given the device address, fill in + the btreq structure including the name field.</dd> + <dt id="SIOCNBTINFO"><a class="permalink" href="#SIOCNBTINFO"><code class="Dv">SIOCNBTINFO</code></a></dt> + <dd>Next Bluetooth device Info. If name field is empty, the first device will + be returned. Otherwise, the next device will be returned until no more + devices are found when the call will fail, with error + <code class="Er">ENXIO</code>. Thus, you can cycle through all devices in + the system.</dd> + <dt id="SIOCSBTFLAGS"><a class="permalink" href="#SIOCSBTFLAGS"><code class="Dv">SIOCSBTFLAGS</code></a></dt> + <dd>Set Bluetooth device Flags. Not all flags are settable.</dd> + <dt id="SIOCGBTFEAT"><a class="permalink" href="#SIOCGBTFEAT"><code class="Dv">SIOCGBTFEAT</code></a></dt> + <dd>Get Bluetooth device Features. This returns the cached basic (page 0) and + extended (page 1 & 2) features.</dd> + <dt id="SIOCSBTPOLICY"><a class="permalink" href="#SIOCSBTPOLICY"><code class="Dv">SIOCSBTPOLICY</code></a></dt> + <dd>Set Bluetooth device Link Policy. Link Policy bits are defined in + <code class="In"><<a class="In">netbt/hci.h</a>></code>, though you + can only set bits that the device supports.</dd> + <dt id="SIOCSBTPTYPE"><a class="permalink" href="#SIOCSBTPTYPE"><code class="Dv">SIOCSBTPTYPE</code></a></dt> + <dd>Set Bluetooth device Packet Types. You can only set packet types that the + device supports.</dd> + <dt id="SIOCGBTSTATS"><a class="permalink" href="#SIOCGBTSTATS"><code class="Dv">SIOCGBTSTATS</code></a></dt> + <dd>Read device statistics.</dd> + <dt id="SIOCZBTSTATS"><a class="permalink" href="#SIOCZBTSTATS"><code class="Dv">SIOCZBTSTATS</code></a></dt> + <dd>Read device statistics, and zero them.</dd> +</dl> +<p class="Pp">Only the super-user may change device configurations.</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE + ALSO</a></h1> +<p class="Pp"><a class="Xr">bind(2)</a>, <a class="Xr">getsockname(2)</a>, + <a class="Xr">bluetooth(3)</a>, <a class="Xr">bcsp(4)</a>, + <a class="Xr">bt3c(4)</a>, <a class="Xr">btbc(4)</a>, + <a class="Xr">btuart(4)</a>, <a class="Xr">options(4)</a>, + <a class="Xr">ubt(4)</a></p> +</section> +<section class="Sh"> +<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> +<p class="Pp">The Bluetooth Protocol Stack was written for + <span class="Ux">NetBSD 4.0</span> by <span class="An">Iain Hibbert</span> + under the sponsorship of Itronix, Inc.</p> +</section> +</div> +<table class="foot"> + <tr> + <td class="foot-date">November 20, 2010</td> + <td class="foot-os">NetBSD 10.1</td> + </tr> +</table> |
