diff options
| author | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-25 15:32:58 -0400 |
|---|---|---|
| committer | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-25 15:32:58 -0400 |
| commit | 5cb84ec742fd33f78c8022863fadaa8d0d93e176 (patch) | |
| tree | 1a81ca3665e6153923e40db7b0d988f8573ab59c /static/netbsd/man9/bluetooth.9 | |
| parent | a59214f344567c037d5776879bcfc5fcc1d4d5f6 (diff) | |
feat: Added NetBSD man pages
Diffstat (limited to 'static/netbsd/man9/bluetooth.9')
| -rw-r--r-- | static/netbsd/man9/bluetooth.9 | 384 |
1 files changed, 384 insertions, 0 deletions
diff --git a/static/netbsd/man9/bluetooth.9 b/static/netbsd/man9/bluetooth.9 new file mode 100644 index 00000000..d58d1576 --- /dev/null +++ b/static/netbsd/man9/bluetooth.9 @@ -0,0 +1,384 @@ +.\" $NetBSD: bluetooth.9,v 1.6 2017/07/03 21:28:48 wiz Exp $ +.\" +.\" Copyright (c) 2006 Itronix Inc. +.\" All rights reserved. +.\" +.\" Written by Iain Hibbert for Itronix Inc. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. The name of Itronix Inc. may not be used to endorse +.\" or promote products derived from this software without specific +.\" prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY ITRONIX INC. ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ITRONIX INC. BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +.\" ON ANY THEORY OF LIABILITY, WHETHER IN +.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +.\" POSSIBILITY OF SUCH DAMAGE. +.\" +.\" +.Dd November 20, 2007 +.Dt BLUETOOTH 9 +.Os +.Sh NAME +.Nm BLUETOOTH +.Nd Bluetooth Device/Protocol API +.Sh SYNOPSIS +.In netbt/bluetooth.h +.In netbt/hci.h +.In netbt/l2cap.h +.In netbt/rfcomm.h +.Ft struct hci_unit * +.Fn hci_attach "const struct hci_if *hci_if" "device_t dev" "uint16_t flags" +.Ft void +.Fn hci_detach "struct hci_unit *unit" +.Ft void +.Fn hci_input_event "struct hci_unit *unit" "struct mbuf *m" +.Ft void +.Fn hci_input_acl "struct hci_unit *unit" "struct mbuf *m" +.Ft void +.Fn hci_input_sco "struct hci_unit *unit" "struct mbuf *m" +.Ft int +.Fn btproto_attach "btproto_handle *" "const struct btproto *proto" "void *ref" +.Ft int +.Fn btproto_bind "btproto_handle" "struct sockaddr_bt *addr" +.Ft int +.Fn btproto_sockaddr "btproto_handle" "struct sockaddr_bt *addr" +.Ft int +.Fn btproto_connect "btproto_handle" "struct sockaddr_bt *addr" +.Ft int +.Fn btproto_peeraddr "btproto_handle" "struct sockaddr_bt *addr" +.Ft int +.Fn btproto_disconnect "btproto_handle" "int linger" +.Ft int +.Fn btproto_detach "btproto_handle *" +.Ft int +.Fn btproto_listen "btproto_handle" +.Ft int +.Fn btproto_send "btproto_handle" "struct mbuf *mbuf" +.Ft int +.Fn btproto_rcvd "btproto_handle" "size_t space" +.Ft int +.Fn btproto_setopt "btproto_handle" "int optarg" "void *arg" +.Ft int +.Fn btproto_getopt "btproto_handle" "int optarg" "void *arg" +.Sh DESCRIPTION +The Bluetooth Protocol Stack provides socket based access to Bluetooth +Devices. +This document describes device driver access to the stack from +below, and also the general Bluetooth Protocol/Service API for layering +above existing Bluetooth Protocols. +.Sh DATA TYPES +Device drivers attaching to the Bluetooth Protocol Stack should pass a +pointer to a +.Fa struct hci_if +defined in +.In netbt/hci.h +containing the driver information as follows: +.Bd -literal +struct hci_if { + int (*enable)(device_t); + void (*disable)(device_t); + void (*output_cmd)(device_t, struct mbuf *); + void (*output_acl)(device_t, struct mbuf *); + void (*output_sco)(device_t, struct mbuf *); + void (*get_stats)(device_t, struct bt_stats *, int); + int ipl; +}; +.Ed +.Pp +Statistics counters should be updated by the device after packets have +been transmitted or received, or when errors occur. +.Bd -literal +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; +}; +.Ed +.Pp +Bluetooth Protocol layers attaching above the Bluetooth Protocol Stack +will make use of the +.Fa struct btproto +data type, which is defined in +.In netbt/bluetooth.h +and contains the following function callbacks which +should be initialized by the protocol layer before attaching to the +protocol which it uses: +.Bd -literal +struct btproto { + void (*connecting)(void *); + void (*connected)(void *); + void (*disconnected)(void *, int); + void *(*newconn)(void *, struct sockaddr_bt *, struct sockaddr_bt *); + void (*complete)(void *, int); + void (*linkmode)(void *, int); + void (*input)(void *, struct mbuf *); +}; +.Ed +.Sh FUNCTIONS +The following functions are related to the Bluetooth Device API. +.Bl -tag -width XXXX +.It Fn hci_attach "hci_if" "dev" +Attach Bluetooth HCI device +.Ar dev +to the protocol stack in the manner described by +.Ar hci_if . +Driver quirks may be registered by passing the corresponding +.Dv BTF_xxxx +flag in the +.Ar flags +argument. +.Pp +.Fn hci_attach +will return a +.Fa struct hci_unit +handle to be passed to the protocol stack in other calls. +.It Fn hci_detach "unit" +Detach Bluetooth HCI +.Ar unit +from the device. +.It Fn hci_input_event "unit" "mbuf" +This function should be called by the device when it has an event +packet to present to the protocol stack. +It may be called from an interrupt routine at the +.Fa ipl +value given in the +.Ar hci_if +descriptor. +.It Fn hci_input_acl "unit" "mbuf" +This function should be called by the device when it has an ACL data +packet to present to the protocol stack. +It may be called from an interrupt routine at the +.Fa ipl +value given in the +.Ar hci_if +descriptor. +.It Fn hci_input_sco "unit" "mbuf" +This function should be called by the device when it has an SCO data +packet to present to the protocol stack. +It may be called from an interrupt routine at the +.Fa ipl +value given in the +.Ar hci_if +descriptor. +.It Fn "(*enable)" "dev" +This will be called when the protocol stack wishes to enable the device. +.It Fn "(*disable)" "dev" +This will be called when the protocol stack wishes to disable the device. +.It Fn "(*output_cmd)" "dev" "mbuf" +Will be called to output command packets on the device. +The device is responsible for arbitrating access to the output queue, and +output commands should be sent asynchronously. +The device owns the +.Ar mbuf +and should release it when sent. +.It Fn "(*output_acl)" "dev" "mbuf" +Will be called to output ACL data packets on the device. +The device is responsible for arbitrating access to the output queue, and +ACL data packets should be sent asynchronously. +The device owns the +.Ar mbuf +and should release it when sent. +.It Fn "(*output_sco)" "dev" "mbuf" +Will be called to output SCO data packets on the device. +The device is responsible for arbitrating access to the output queue, and +SCO data packets should be sent asynchronously. +When the SCO data packet has been placed on the device and the +.Ar mbuf +is no longer required, it should be returned to the Bluetooth protocol +stack via the +.Fn hci_complete_sco +call. +.It Fn "(*get_stats)" "dev" "dest" "flush" +Will be called when IO statistics are requested. +The +.Fa bt_stats +structure +.Ar dest +should be filled in, and if the +.Ar flush +argument is true, statistics should be reset. +.El +.Pp +The following function definitions are related to the Bluetooth Protocol API. +Note that the "btproto" prefix is representative only, the protocol being +used will have a more specific prefix with prototypes being declared in +the appropriate +.In netbt/btproto.h +file. +.Bl -tag -width XXXX +.It Fn btproto_attach "handle_ptr" "proto" "ref" +Allocate and initialize a new protocol object at the +.Ar handle_ptr +address that should subsequently be passed into the other functions. +.Ar proto +is a pointer to the +.Fa btproto +structure as described above containing relevant callbacks, and +.Ar ref +is the argument that will be supplied to those calls. +.It Fn btproto_bind "handle" "addr" +Set the local address of the protocol object described by +.Ar handle +to +.Ar addr . +.It Fn btproto_sockaddr "handle" "addr" +Copy the local address of the protocol object described by +.Ar handle +into +.Ar addr +.It Fn btproto_connect "handle" "addr" +Initiate a connection by the protocol object described by +.Ar handle +to the remote device described by +.Ar addr . +This will result in a call to either +.Fn proto->connected +or +.Fn proto->disconnected , +and optionally +.Fn proto->connecting +with the appropriate reference as given to +.Fn btproto_attach . +.It Fn btproto_peeraddr "handle" "addr" +Copy the remote address of the protocol object described by +.Ar handle +into +.Ar addr . +.It Fn btproto_disconnect "handle" "linger" +Schedule a disconnection by the protocol object described by +.Ar handle . +This will result in a call to +.Fn proto->disconnected +with the appropriate reference when the connection is torn +down. +If linger is zero, the disconnection will be initiated +immediately and any outstanding data may be lost. +.It Fn btproto_detach "handle_ptr" +Detach the protocol object described by the value in the location of +.Ar handle_ptr , +and free any related memory. +The pointer in the location is cleared. +.It Fn btproto_listen "handle" +Use the protocol object described by +.Ar handle +as a listening post. +This will result in calls to the +.Fn proto->newconn +function when incoming connections are detected. +.It Fn btproto_send "handle" "mbuf" +Send data on the connection described by the protocol object. +.It Fn btproto_rcvd "handle" "space" +Indicate to the protocol that +.Ar space +is now available in the input buffers so that flow control may be +deasserted. +This should also be called to indicate initial buffer space. +Note that +.Ar space +is an absolute value. +.It Fn btproto_setopt "handle" "optarg" "arg" +Set options on the protocol object described by +.Ar handle . +.It Fn btproto_getopt "handle" "optarg" "arg" +Get options for the protocol object described by +.Ar handle . +.It Fn "(*connecting)" "ref" +This function will be called when the protocol receives information +that the connection described by +.Ar ref +is pending. +.It Fn "(*connected)" "ref" +This function will be called when the connection described by +.Ar ref +is successful and indicates that data may now be sent. +.It Fn "(*disconnected)" "ref" "error" +This function will be called when the connection described by +.Ar ref +is disconnected. +.It Fn "*(*newconn)" "ref" "laddr" "raddr" +This function will be called when the protocol receives a new incoming +connection on the local device described by +.Ar laddr +from the remote device described by +.Ar raddr . +The protocol should decide if it wishes to accept the connection and +should attach and return a new instance of the relevant protocol handle +or NULL. +.It Fn "(*complete)" "ref" "count" +This function will be called when the protocol has completed sending +data. +Complete will usually mean that the data has successfully left +the device though for guaranteed protocols it can mean that the data +has arrived at the other end and been acknowledged, and that +.Ar count +amount of data can be removed from the socket buffer. +The units of the +.Ar count +value will be dependent on the protocol being used (e.g. RFCOMM is bytes, +but L2CAP is packets) +.It Fn "(*linkmode)" "ref" "mode" +This function will be called for established connections, when the link mode +of the baseband link has changed. +.Ar mode +is the new mode. +.It Fn "(*input)" "ref" "mbuf" +This function is called to supply new data on the connection described by +.Ar ref . +.El +.Sh CODE REFERENCES +The Bluetooth Protocol Stack is contained in the +.Pa sys/netbt +directory. +.Pp +The Bluetooth Device API as described above is contained +in the +.Pa sys/netbt/hci_unit.c +file. +.Pp +For examples of the Bluetooth Protocol API see the interaction between +the L2CAP upper layer in +.Pa sys/netbt/l2cap_upper.c +and either the L2CAP socket layer in +.Pa sys/netbt/l2cap_socket.c +or the +.Xr bthidev 4 +pseudo-device in +.Pa sys/dev/bluetooth/bthidev.c . +.Pp +Also, the RFCOMM upper layer in +.Pa sys/netbt/rfcomm_upper.c +and the RFCOMM socket layer in +.Pa sys/netbt/rfcomm_socket.c . +.Sh SEE ALSO +.Xr bluetooth 4 , +.Xr bt3c 4 , +.Xr bthidev 4 , +.Xr ubt 4 +.Sh HISTORY +This Bluetooth Protocol Stack was written for +.Nx 4.0 +by +.An Iain Hibbert , +under the sponsorship of Itronix, Inc. |
