summaryrefslogtreecommitdiff
path: root/static/netbsd/man3/bt_dev.3
diff options
context:
space:
mode:
Diffstat (limited to 'static/netbsd/man3/bt_dev.3')
-rw-r--r--static/netbsd/man3/bt_dev.3373
1 files changed, 373 insertions, 0 deletions
diff --git a/static/netbsd/man3/bt_dev.3 b/static/netbsd/man3/bt_dev.3
new file mode 100644
index 00000000..9c8489ed
--- /dev/null
+++ b/static/netbsd/man3/bt_dev.3
@@ -0,0 +1,373 @@
+.\" $NetBSD: bt_dev.3,v 1.4 2016/01/22 08:51:40 plunky Exp $
+.\"
+.\" Copyright (c) 2009 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" 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.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 THE AUTHOR OR CONTRIBUTORS 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 October 25, 2011
+.Dt BT_DEV 3
+.Os
+.Sh NAME
+.Nm bt_devaddr ,
+.Nm bt_devname ,
+.Nm bt_devenum ,
+.Nm bt_devinfo ,
+.Nm bt_devopen ,
+.Nm bt_devsend ,
+.Nm bt_devrecv ,
+.Nm bt_devreq ,
+.Nm bt_devfilter ,
+.Nm bt_devfilter_pkt_set ,
+.Nm bt_devfilter_pkt_clr ,
+.Nm bt_devfilter_pkt_tst ,
+.Nm bt_devfilter_evt_set ,
+.Nm bt_devfilter_evt_clr ,
+.Nm bt_devfilter_evt_tst ,
+.Nm bt_devinquiry
+.Nd Bluetooth device access routines
+.Sh LIBRARY
+.Lb libbluetooth
+.Sh SYNOPSIS
+.In bluetooth.h
+.Ft int
+.Fn bt_devaddr "const char *name" "bdaddr_t *bdaddr"
+.Ft int
+.Fn bt_devname "char *name" "const bdaddr_t *bdaddr"
+.Ft int
+.Fn bt_devenum "int (*cb)(int, const struct bt_devinfo *, void *)" "void *arg"
+.Ft int
+.Fn bt_devinfo "const char *name" "struct bt_devinfo *info"
+.Ft int
+.Fn bt_devopen "const char *name" "int flags"
+.Ft ssize_t
+.Fn bt_devsend "int s" "uint16_t opcode" "void *param" "size_t plen"
+.Ft ssize_t
+.Fn bt_devrecv "int s" "void *buf" "size_t size" "time_t timeout"
+.Ft int
+.Fn bt_devreq "int s" "struct bt_devreq *req" "time_t timeout"
+.Ft int
+.Fn bt_devfilter "int s" "const struct bt_devfilter *new" "struct bt_devfilter *old"
+.Ft void
+.Fn bt_devfilter_pkt_set "struct bt_devfilter *filter" "uint8_t type"
+.Ft void
+.Fn bt_devfilter_pkt_clr "struct bt_devfilter *filter" "uint8_t type"
+.Ft int
+.Fn bt_devfilter_pkt_tst "const struct bt_devfilter *filter" "uint8_t type"
+.Ft void
+.Fn bt_devfilter_evt_set "struct bt_devfilter *filter" "uint8_t event"
+.Ft void
+.Fn bt_devfilter_evt_clr "struct bt_devfilter *filter" "uint8_t event"
+.Ft int
+.Fn bt_devfilter_evt_tst "const struct bt_devfilter *filter" "uint8_t event"
+.Ft int
+.Fn bt_devinquiry "const char *name" "time_t timeout" "int max_rsp" "struct bt_devinquiry **iip"
+.Sh DESCRIPTION
+These routines are designed to provide access to locally configured Bluetooth
+devices in an operating system independent manner via a socket providing access
+to Bluetooth HCI packets.
+.Sh FUNCTIONS
+.Bl -tag -width 4n
+.It Fn bt_devaddr "name" "bdaddr"
+Return a Bluetooth device address.
+.Fn bt_devaddr
+will return 1 if the NUL-terminated
+.Fa name
+string refers to a Bluetooth device present in the system, otherwise 0.
+The name may be given as a device name
+.Pq eg Qo ubt0 Qc
+or Bluetooth device address
+.Pq eg Qo 00:11:22:33:44:55 Qc
+and the actual device address will be written to
+.Fa bdaddr
+if not
+.Dv NULL .
+.It Fn bt_devname "name" "bdaddr"
+Return a Bluetooth device name.
+.Fn bt_devname
+returns 1 if the
+.Fa bdaddr
+refers to a Bluetooth device present in the system, otherwise 0.
+The
+.Fa name
+buffer, if given, should have space for at least
+.Dv HCI_DEVNAME_SIZE
+bytes and the string will be NUL-terminated.
+.It Fn bt_devenum "cb" "arg"
+Enumerate Bluetooth devices present in the system.
+For each device found, the
+.Fa cb
+function
+.Pq if not Dv NULL
+will be called with the
+.Fa arg
+argument provided, a fully populated
+.Ft bt_devinfo
+structure and, where the device is enabled, a socket handle as returned by
+.Fn bt_devopen .
+The callback function can halt the enumeration by returning a
+non-zero value, and
+.Fn bt_devenum
+returns the number of successfully enumerated devices.
+.It Fn bt_devinfo "name" "info"
+Obtain information from a Bluetooth device present in the system.
+The
+.Fa info
+argument is a pointer to a
+.Ft bt_devinfo
+structure into which information about device
+.Fa name
+is placed.
+The
+.Ft bt_devinfo
+structure contains at least the following members:
+.Bd -literal
+ char devname[HCI_DEVNAME_SIZE];
+ int enabled; /* device is enabled */
+
+ /* device information */
+ bdaddr_t bdaddr;
+ uint8_t features[HCI_FEATURES_SIZE];
+ uint16_t acl_size; /* max ACL data size */
+ uint16_t acl_pkts; /* total ACL packet buffers */
+ uint16_t sco_size; /* max SCO data size */
+ uint16_t sco_pkts; /* total SCO packet buffers */
+
+ /* flow control */
+ uint16_t cmd_free; /* available CMD packet buffers */
+ uint16_t acl_free; /* available ACL packet buffers */
+ uint16_t sco_free; /* available SCO packet buffers */
+
+ /* statistics */
+ uint32_t cmd_sent;
+ uint32_t evnt_recv;
+ uint32_t acl_recv;
+ uint32_t acl_sent;
+ uint32_t sco_recv;
+ uint32_t sco_sent;
+ uint32_t bytes_recv;
+ uint32_t bytes_sent;
+
+ /* device settings */
+ uint16_t link_policy_info;
+ uint16_t packet_type_info;
+ uint16_t role_switch_info;
+.Ed
+.Lp
+Because a Bluetooth device must be enabled in order to retrieve
+information, the
+.Fa enabled
+flag should be tested to be non-zero before relying on further data.
+.It Fn bt_devopen "name" "flags"
+Return a Bluetooth HCI socket handle bound and connected to the
+named Bluetooth device or, if
+.Fa name
+is
+.Dv NULL ,
+enabled to receive packets from any device.
+The socket should be closed using
+.Xr close 2
+after use.
+Any combination of the following
+.Fa flags
+may be used to pre-set the socket options:
+.Bl -tag -width ".Dv BTOPT_DIRECTION"
+.It Dv BTOPT_DIRECTION
+Enable control messages on each packet indicating the direction of travel.
+.It Dv BTOPT_TIMESTAMP
+Enable control messages providing packet timestamps.
+.El
+.Lp
+The default filter on the socket will only allow the HCI Event packets
+.Qq Command Status
+and
+.Qq Command Complete
+to be received.
+.It Fn bt_devsend "s" "opcode" "param" "plen"
+Send an HCI command packet on the socket
+.Fa s .
+The
+.Fa opcode
+should be in host byte order and the
+.Fa param
+and
+.Fa plen
+arguments can be used to provide command parameter data.
+.Fn bt_devsend
+will return the number of bytes successfully written.
+.It Fn bt_devrecv "s" "buf" "size" "timeout"
+Receive a single HCI packet on the socket
+.Fa s .
+.Fn bt_devrecv
+will return the number of bytes successfully received unless the
+provided buffer could not contain the entire packet, or if a timeout was
+requested with a non-negative
+.Fa timeout
+value.
+.It Fn bt_devreq "s" "req" "timeout"
+Make an HCI request on the socket
+.Fa s .
+The
+.Fa req
+argument is a pointer to a
+.Ft bt_devreq
+structure, defined as:
+.Bd -literal -offset indent
+struct bt_devreq {
+ uint16_t opcode;
+ uint8_t event;
+ void *cparam;
+ size_t clen;
+ void *rparam;
+ size_t rlen;
+};
+.Ed
+.Lp
+.Fn bt_devreq
+sends an HCI command packet with the given
+.Fa opcode
+and command parameters of
+.Fa clen
+bytes at
+.Fa cparam
+then waits up to
+.Fa timeout
+seconds for the command to return a
+.Qq Command Complete
+event.
+In the case where the command returns
+.Qq Command Status
+and an additional event, and where the status indicates
+that the command is in progress,
+.Fn bt_devreq
+will wait for the additional
+.Fa event
+specified in the request.
+If required, any response will be copied into the buffer of
+.Fa rlen
+bytes at
+.Fa rparam ,
+and
+.Fa rlen
+will be adjusted to indicate the number of bytes stored.
+.Fn bt_devreq
+temporarily modifies the socket filter.
+.It Fn bt_devfilter "s" "new" "old"
+Update or extract the packet filter on HCI socket
+.Fa s .
+Filters can be set to indicate packet types
+.Pq Commands, Events, ACL and SCO data ,
+and individual event IDs.
+Where
+.Fa old
+is given, the currently set filter will be extracted first, then if
+.Fa new
+is given, the filter will be updated.
+.It Fn bt_devfilter_pkt_set "filter" "type"
+Set packet
+.Fa type
+in
+.Fa filter .
+.It Fn bt_devfilter_pkt_clr "filter" "type"
+Clear packet
+.Fa type
+from
+.Fa filter .
+.It Fn bt_devfilter_pkt_tst "filter" "type"
+Test if
+.Fa filter
+has packet
+.Fa type
+set.
+.It Fn bt_devfilter_evt_set "filter" "event"
+Set
+.Fa event
+ID in
+.Fa filter .
+.It Fn bt_devfilter_evt_clr "filter" "event"
+Clear
+.Fa event
+ID from
+.Fa filter .
+.It Fn bt_devfilter_evt_tst "filter" "event"
+Test if
+.Fa filter
+has
+.Fa event
+ID set.
+.It Fn bt_devinquiry "name" "timeout" "max_rsp" "iip"
+Perform a Bluetooth Inquiry using the device
+.Fa name ,
+or the first available device if
+.Dv NULL
+is passed.
+The inquiry length will be
+.Fa timeout
+seconds, and the number of responses
+.Pq up to a limit of Fa max_rsp
+will be returned.
+A pointer to an array of
+.Ft bt_devinquiry
+structures, defined as:
+.Bd -literal -offset indent
+struct bt_devinquiry {
+ bdaddr_t bdaddr;
+ uint8_t pscan_rep_mode;
+ uint8_t pscan_period_mode;
+ uint8_t dev_class[3];
+ uint16_t clock_offset;
+ int8_t rssi;
+ uint8_t data[240];
+};
+.Ed
+.Lp
+will be stored in the location given by
+.Fa iip
+and this should be released after use with
+.Xr free 3 .
+.El
+.Sh RETURN VALUES
+These Bluetooth device access routines return \-1 on failure, and
+.Va errno
+will be set to indicate the error.
+.Sh ERRORS
+In addition to errors returned by the standard C library IO functions,
+the following errors may be indicated by device access routines.
+.Bl -tag -offset indent -width ".Bq Er ETIMEDOUT"
+.It Bq Er EINVAL
+A provided function argument was not valid.
+.It Bq Er EIO
+A device response was not properly understood.
+.It Bq Er ETIMEDOUT
+An operation exceeded the given time limit.
+.El
+.Sh SEE ALSO
+.Xr bluetooth 3
+.Sh HISTORY
+The Bluetooth device access API was created by
+.An Maksim Yevmenkin
+and first appeared in
+.Fx .
+This implementation written for
+.Nx
+by
+.An Iain Hibbert .