xref: /freebsd-src/lib/libbluetooth/bluetooth.3 (revision b2c76c41be32f904179efed29c0ca04d53f3996c)
1baeef614SMaksim Yevmenkin.\" Copyright (c) 2003-2009 Maksim Yevmenkin <m_evmenkin@yahoo.com>
20986ab12SMaksim Yevmenkin.\" All rights reserved.
30986ab12SMaksim Yevmenkin.\"
40986ab12SMaksim Yevmenkin.\" Redistribution and use in source and binary forms, with or without
50986ab12SMaksim Yevmenkin.\" modification, are permitted provided that the following conditions
60986ab12SMaksim Yevmenkin.\" are met:
70986ab12SMaksim Yevmenkin.\" 1. Redistributions of source code must retain the above copyright
80986ab12SMaksim Yevmenkin.\"    notice, this list of conditions and the following disclaimer.
90986ab12SMaksim Yevmenkin.\" 2. Redistributions in binary form must reproduce the above copyright
100986ab12SMaksim Yevmenkin.\"    notice, this list of conditions and the following disclaimer in the
110986ab12SMaksim Yevmenkin.\"    documentation and/or other materials provided with the distribution.
120986ab12SMaksim Yevmenkin.\"
130986ab12SMaksim Yevmenkin.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
140986ab12SMaksim Yevmenkin.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
150986ab12SMaksim Yevmenkin.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
160986ab12SMaksim Yevmenkin.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
170986ab12SMaksim Yevmenkin.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
180986ab12SMaksim Yevmenkin.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
190986ab12SMaksim Yevmenkin.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
200986ab12SMaksim Yevmenkin.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
210986ab12SMaksim Yevmenkin.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
220986ab12SMaksim Yevmenkin.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
230986ab12SMaksim Yevmenkin.\" SUCH DAMAGE.
240986ab12SMaksim Yevmenkin.\"
250986ab12SMaksim Yevmenkin.\" $Id: bluetooth.3,v 1.5 2003/05/20 23:04:30 max Exp $
260986ab12SMaksim Yevmenkin.\"
27*fa338505SVladimir Kondratyev.Dd May 1, 2018
280986ab12SMaksim Yevmenkin.Dt BLUETOOTH 3
290986ab12SMaksim Yevmenkin.Os
300986ab12SMaksim Yevmenkin.Sh NAME
310986ab12SMaksim Yevmenkin.Nm bt_gethostbyname ,
320986ab12SMaksim Yevmenkin.Nm bt_gethostbyaddr ,
330986ab12SMaksim Yevmenkin.Nm bt_gethostent ,
340986ab12SMaksim Yevmenkin.Nm bt_sethostent ,
3537266c4bSRuslan Ermilov.Nm bt_endhostent ,
360986ab12SMaksim Yevmenkin.Nm bt_getprotobyname ,
370986ab12SMaksim Yevmenkin.Nm bt_getprotobynumber ,
380986ab12SMaksim Yevmenkin.Nm bt_getprotoent ,
390986ab12SMaksim Yevmenkin.Nm bt_setprotoent ,
4037266c4bSRuslan Ermilov.Nm bt_endprotoent ,
410986ab12SMaksim Yevmenkin.Nm bt_aton ,
4255034c7dSMaksim Yevmenkin.Nm bt_ntoa ,
4378b96635SMaksim Yevmenkin.Nm bt_devaddr ,
4478b96635SMaksim Yevmenkin.Nm bt_devname ,
4578b96635SMaksim Yevmenkin.Nm bt_devinfo ,
4678b96635SMaksim Yevmenkin.Nm bt_devenum ,
4778b96635SMaksim Yevmenkin.Nm bt_devopen ,
4878b96635SMaksim Yevmenkin.Nm bt_devclose ,
4978b96635SMaksim Yevmenkin.Nm bt_devsend ,
5078b96635SMaksim Yevmenkin.Nm bt_devrecv ,
5178b96635SMaksim Yevmenkin.Nm bt_devreq ,
5278b96635SMaksim Yevmenkin.Nm bt_devfilter ,
5378b96635SMaksim Yevmenkin.Nm bt_devfilter_pkt_set ,
5478b96635SMaksim Yevmenkin.Nm bt_devfilter_pkt_clr ,
5578b96635SMaksim Yevmenkin.Nm bt_devfilter_pkt_tst ,
5678b96635SMaksim Yevmenkin.Nm bt_devfilter_evt_set ,
5778b96635SMaksim Yevmenkin.Nm bt_devfilter_evt_clr ,
5878b96635SMaksim Yevmenkin.Nm bt_devfilter_evt_tst ,
5978b96635SMaksim Yevmenkin.Nm bt_devinquiry ,
603ee5c554SVladimir Kondratyev.Nm bt_devremote_name ,
613ee5c554SVladimir Kondratyev.Nm bt_devremote_name_gen ,
6255034c7dSMaksim Yevmenkin.Nm bdaddr_same ,
6355034c7dSMaksim Yevmenkin.Nm bdaddr_any ,
6455034c7dSMaksim Yevmenkin.Nm bdaddr_copy
6537266c4bSRuslan Ermilov.Nd Bluetooth routines
660986ab12SMaksim Yevmenkin.Sh LIBRARY
670986ab12SMaksim Yevmenkin.Lb libbluetooth
680986ab12SMaksim Yevmenkin.Sh SYNOPSIS
690986ab12SMaksim Yevmenkin.In bluetooth.h
700986ab12SMaksim Yevmenkin.Ft struct hostent *
710986ab12SMaksim Yevmenkin.Fn bt_gethostbyname "const char *name"
720986ab12SMaksim Yevmenkin.Ft struct hostent *
730986ab12SMaksim Yevmenkin.Fn bt_gethostbyaddr "const char *addr" "int len" "int type"
740986ab12SMaksim Yevmenkin.Ft struct hostent *
750986ab12SMaksim Yevmenkin.Fn bt_gethostent void
760986ab12SMaksim Yevmenkin.Ft void
770986ab12SMaksim Yevmenkin.Fn bt_sethostent "int stayopen"
780986ab12SMaksim Yevmenkin.Ft void
790986ab12SMaksim Yevmenkin.Fn bt_endhostent void
800986ab12SMaksim Yevmenkin.Ft struct protoent *
810986ab12SMaksim Yevmenkin.Fn bt_getprotobyname "const char *name"
820986ab12SMaksim Yevmenkin.Ft struct protoent *
830986ab12SMaksim Yevmenkin.Fn bt_getprotobynumber "int proto"
840986ab12SMaksim Yevmenkin.Ft struct protoent *
850986ab12SMaksim Yevmenkin.Fn bt_getprotoent void
860986ab12SMaksim Yevmenkin.Ft void
870986ab12SMaksim Yevmenkin.Fn bt_setprotoent "int stayopen"
880986ab12SMaksim Yevmenkin.Ft void
890986ab12SMaksim Yevmenkin.Fn bt_endprotoent void
900986ab12SMaksim Yevmenkin.Ft int
910986ab12SMaksim Yevmenkin.Fn bt_aton "const char *str" "bdaddr_t *ba"
920986ab12SMaksim Yevmenkin.Ft const char *
930986ab12SMaksim Yevmenkin.Fn bt_ntoa "const bdaddr_t *ba" "char *str"
9455034c7dSMaksim Yevmenkin.Ft int
95baeef614SMaksim Yevmenkin.Fn bt_devaddr "const char *devname" "bdaddr_t *addr"
96baeef614SMaksim Yevmenkin.Ft int
97baeef614SMaksim Yevmenkin.Fn bt_devname "char *devname" "const bdaddr_t *addr"
98baeef614SMaksim Yevmenkin.Ft int
99baeef614SMaksim Yevmenkin.Fn (bt_devenum_cb_t) "int s" "struct bt_devinfo const *di" "void *arg"
100baeef614SMaksim Yevmenkin.Ft int
101baeef614SMaksim Yevmenkin.Fn bt_devinfo "struct bt_devinfo *di"
102baeef614SMaksim Yevmenkin.Ft int
103baeef614SMaksim Yevmenkin.Fn bt_devenum "bt_devenum_cb_t *cb" "void *arg"
104baeef614SMaksim Yevmenkin.Ft int
10578b96635SMaksim Yevmenkin.Fn bt_devopen "char const *devname"
10678b96635SMaksim Yevmenkin.Ft int
10778b96635SMaksim Yevmenkin.Fn bt_devclose "int s"
10878b96635SMaksim Yevmenkin.Ft int
10978b96635SMaksim Yevmenkin.Fn bt_devsend "int s" "uint16_t opcode" "void *param" "size_t plen"
11078b96635SMaksim Yevmenkin.Ft ssize_t
11178b96635SMaksim Yevmenkin.Fn bt_devrecv "int s" "void *buf" "size_t size" "time_t to"
11278b96635SMaksim Yevmenkin.Ft int
11378b96635SMaksim Yevmenkin.Fn bt_devreq "int s" "struct bt_devreq *r" "time_t to"
11478b96635SMaksim Yevmenkin.Ft int
11578b96635SMaksim Yevmenkin.Fn bt_devfilter "int s" "struct bt_devfilter const *new" "struct bt_devfilter *old"
11678b96635SMaksim Yevmenkin.Ft void
11778b96635SMaksim Yevmenkin.Fn bt_devfilter_pkt_set "struct bt_devfilter *filter" "uint8_t type"
11878b96635SMaksim Yevmenkin.Ft void
11978b96635SMaksim Yevmenkin.Fn bt_devfilter_pkt_clt "struct bt_devfilter *filter" "uint8_t type"
12078b96635SMaksim Yevmenkin.Ft int
12178b96635SMaksim Yevmenkin.Fn bt_devfilter_pkt_tst "struct bt_devfilter const *filter" "uint8_t type"
12278b96635SMaksim Yevmenkin.Ft void
12378b96635SMaksim Yevmenkin.Fn bt_devfilter_evt_set "struct bt_devfilter *filter" "uint8_t event"
12478b96635SMaksim Yevmenkin.Ft void
12578b96635SMaksim Yevmenkin.Fn bt_devfilter_evt_clt "struct bt_devfilter *filter" "uint8_t event"
12678b96635SMaksim Yevmenkin.Ft int
12778b96635SMaksim Yevmenkin.Fn bt_devfilter_evt_tst "struct bt_devfilter const *filter" "uint8_t event"
12878b96635SMaksim Yevmenkin.Ft int
12978b96635SMaksim Yevmenkin.Fn bt_devinquiry "char const *devname" "time_t length" "int num_rsp" "struct bt_devinquiry **ii"
1303ee5c554SVladimir Kondratyev.Ft char *
1313ee5c554SVladimir Kondratyev.Fn bt_devremote_name "char const *devname" "const bdaddr_t *remote" \
1323ee5c554SVladimir Kondratyev"time_t to" "uint16_t clk_off" "uint8_t ps_rep_mode" "uint8_t ps_mode"
1333ee5c554SVladimir Kondratyev.Ft char *
134*fa338505SVladimir Kondratyev.Fn bt_devremote_name_gen "char const *btooth_devname" "const bdaddr_t *remote"
13578b96635SMaksim Yevmenkin.Ft int
13655034c7dSMaksim Yevmenkin.Fn bdaddr_same "const bdaddr_t *a" "const bdaddr_t *b"
13755034c7dSMaksim Yevmenkin.Ft int
13855034c7dSMaksim Yevmenkin.Fn bdaddr_any "const bdaddr_t *a"
13955034c7dSMaksim Yevmenkin.Ft int
14055034c7dSMaksim Yevmenkin.Fn bdaddr_copy "const bdaddr_t *dst" "const bdaddr_t *src"
1410986ab12SMaksim Yevmenkin.Sh DESCRIPTION
1420986ab12SMaksim YevmenkinThe
1430986ab12SMaksim Yevmenkin.Fn bt_gethostent ,
1440986ab12SMaksim Yevmenkin.Fn bt_gethostbyname
1450986ab12SMaksim Yevmenkinand
1460986ab12SMaksim Yevmenkin.Fn bt_gethostbyaddr
1470986ab12SMaksim Yevmenkinfunctions
1480986ab12SMaksim Yevmenkineach return a pointer to an object with the
1490986ab12SMaksim Yevmenkin.Vt hostent
1500986ab12SMaksim Yevmenkinstructure describing a Bluetooth host
1510986ab12SMaksim Yevmenkinreferenced by name or by address, respectively.
1520986ab12SMaksim Yevmenkin.Pp
1530986ab12SMaksim YevmenkinThe
1540986ab12SMaksim Yevmenkin.Fa name
1550986ab12SMaksim Yevmenkinargument passed to
1560986ab12SMaksim Yevmenkin.Fn bt_gethostbyname
1570986ab12SMaksim Yevmenkinshould point to a
1589448d36cSRuslan Ermilov.Dv NUL Ns -terminated
1590986ab12SMaksim Yevmenkinhostname.
1600986ab12SMaksim YevmenkinThe
1610986ab12SMaksim Yevmenkin.Fa addr
1620986ab12SMaksim Yevmenkinargument passed to
1630986ab12SMaksim Yevmenkin.Fn bt_gethostbyaddr
1640986ab12SMaksim Yevmenkinshould point to an address which is
1650986ab12SMaksim Yevmenkin.Fa len
1660986ab12SMaksim Yevmenkinbytes long,
1670986ab12SMaksim Yevmenkinin binary form
16837266c4bSRuslan Ermilov(i.e., not a Bluetooth BD_ADDR in human readable
1690986ab12SMaksim Yevmenkin.Tn ASCII
1700986ab12SMaksim Yevmenkinform).
1710986ab12SMaksim YevmenkinThe
1720986ab12SMaksim Yevmenkin.Fa type
1730986ab12SMaksim Yevmenkinargument specifies the address family of this address and must be set to
1740986ab12SMaksim Yevmenkin.Dv AF_BLUETOOTH .
1750986ab12SMaksim Yevmenkin.Pp
1760986ab12SMaksim YevmenkinThe structure returned contains the information obtained from a line in
1770986ab12SMaksim Yevmenkin.Pa /etc/bluetooth/hosts
1780986ab12SMaksim Yevmenkinfile.
1790986ab12SMaksim Yevmenkin.Pp
1800986ab12SMaksim YevmenkinThe
1810986ab12SMaksim Yevmenkin.Fn bt_sethostent
1820986ab12SMaksim Yevmenkinfunction controls whether
1830986ab12SMaksim Yevmenkin.Pa /etc/bluetooth/hosts
1840986ab12SMaksim Yevmenkinfile should stay open after each call to
1850986ab12SMaksim Yevmenkin.Fn bt_gethostbyname
1860986ab12SMaksim Yevmenkinor
1870986ab12SMaksim Yevmenkin.Fn bt_gethostbyaddr .
1880986ab12SMaksim YevmenkinIf the
1890986ab12SMaksim Yevmenkin.Fa stayopen
1900986ab12SMaksim Yevmenkinflag is non-zero, the file will not be closed.
1910986ab12SMaksim Yevmenkin.Pp
1920986ab12SMaksim YevmenkinThe
1930986ab12SMaksim Yevmenkin.Fn bt_endhostent
1940986ab12SMaksim Yevmenkinfunction closes the
1950986ab12SMaksim Yevmenkin.Pa /etc/bluetooth/hosts
1960986ab12SMaksim Yevmenkinfile.
1970986ab12SMaksim Yevmenkin.Pp
1980986ab12SMaksim YevmenkinThe
1990986ab12SMaksim Yevmenkin.Fn bt_getprotoent ,
2000986ab12SMaksim Yevmenkin.Fn bt_getprotobyname
2010986ab12SMaksim Yevmenkinand
2020986ab12SMaksim Yevmenkin.Fn bt_getprotobynumber
2030986ab12SMaksim Yevmenkinfunctions each return a pointer to an object with the
2040986ab12SMaksim Yevmenkin.Vt protoent
2050986ab12SMaksim Yevmenkinstructure describing a Bluetooth Protocol Service Multiplexor referenced
2060986ab12SMaksim Yevmenkinby name or number, respectively.
2070986ab12SMaksim Yevmenkin.Pp
2080986ab12SMaksim YevmenkinThe
2090986ab12SMaksim Yevmenkin.Fa name
2100986ab12SMaksim Yevmenkinargument passed to
2110986ab12SMaksim Yevmenkin.Fn bt_getprotobyname
2120986ab12SMaksim Yevmenkinshould point to a
2139448d36cSRuslan Ermilov.Dv NUL Ns -terminated
2140986ab12SMaksim YevmenkinBluetooth Protocol Service Multiplexor name.
2150986ab12SMaksim YevmenkinThe
2160986ab12SMaksim Yevmenkin.Fa proto
2170986ab12SMaksim Yevmenkinargument passed to
2180986ab12SMaksim Yevmenkin.Fn bt_getprotobynumber
2190986ab12SMaksim Yevmenkinshould have numeric value of the desired Bluetooth Protocol Service Multiplexor.
2200986ab12SMaksim Yevmenkin.Pp
2210986ab12SMaksim YevmenkinThe structure returned contains the information obtained from a line in
2220986ab12SMaksim Yevmenkin.Pa /etc/bluetooth/protocols
2230986ab12SMaksim Yevmenkinfile.
2240986ab12SMaksim Yevmenkin.Pp
2250986ab12SMaksim YevmenkinThe
2260986ab12SMaksim Yevmenkin.Fn bt_setprotoent
2270986ab12SMaksim Yevmenkinfunction controls whether
2280986ab12SMaksim Yevmenkin.Pa /etc/bluetooth/protocols
2290986ab12SMaksim Yevmenkinfile should stay open after each call to
2300986ab12SMaksim Yevmenkin.Fn bt_getprotobyname
2310986ab12SMaksim Yevmenkinor
2320986ab12SMaksim Yevmenkin.Fn bt_getprotobynumber .
2330986ab12SMaksim YevmenkinIf the
2340986ab12SMaksim Yevmenkin.Fa stayopen
2350986ab12SMaksim Yevmenkinflag is non-zero, the file will not be closed.
2360986ab12SMaksim Yevmenkin.Pp
2370986ab12SMaksim YevmenkinThe
2380986ab12SMaksim Yevmenkin.Fn bt_endprotoent
2390986ab12SMaksim Yevmenkinfunction closes the
2400986ab12SMaksim Yevmenkin.Pa /etc/bluetooth/protocols
2410986ab12SMaksim Yevmenkinfile.
2420986ab12SMaksim Yevmenkin.Pp
2430986ab12SMaksim YevmenkinThe
2440986ab12SMaksim Yevmenkin.Fn bt_aton
2450986ab12SMaksim Yevmenkinroutine interprets the specified character string as a Bluetooth address,
2460986ab12SMaksim Yevmenkinplacing the address into the structure provided.
2470986ab12SMaksim YevmenkinIt returns 1 if the string was successfully interpreted,
2480986ab12SMaksim Yevmenkinor 0 if the string is invalid.
2490986ab12SMaksim Yevmenkin.Pp
2500986ab12SMaksim YevmenkinThe routine
2510986ab12SMaksim Yevmenkin.Fn bt_ntoa
2520986ab12SMaksim Yevmenkintakes a Bluetooth address and places an
2530986ab12SMaksim Yevmenkin.Tn ASCII
2540986ab12SMaksim Yevmenkinstring representing the address into the buffer provided.
2550986ab12SMaksim YevmenkinIt is up to the caller to ensure that provided buffer has enough space.
2560986ab12SMaksim YevmenkinIf no buffer was provided then internal static buffer will be used.
25755034c7dSMaksim Yevmenkin.Pp
25855034c7dSMaksim YevmenkinThe
259baeef614SMaksim Yevmenkin.Fn bt_devaddr
260baeef614SMaksim Yevmenkinfunction interprets the specified
261baeef614SMaksim Yevmenkin.Fa devname
262baeef614SMaksim Yevmenkinstring as the address or device name of a Bluetooth device on the local system,
263baeef614SMaksim Yevmenkinand places the device address in the provided
264baeef614SMaksim Yevmenkin.Fa bdaddr ,
265baeef614SMaksim Yevmenkinif any.
266baeef614SMaksim YevmenkinThe function returns 1 if the string was successfully interpreted,
267baeef614SMaksim Yevmenkinor 0 if the string did not match any local device.
268baeef614SMaksim YevmenkinThe
269baeef614SMaksim Yevmenkin.Fn bt_devname
270baeef614SMaksim Yevmenkinfunction takes a Bluetooth device address and copies the local device
271baeef614SMaksim Yevmenkinname associated with that address into the buffer provided,
272baeef614SMaksim Yevmenkinif any.
273baeef614SMaksim YevmenkinCaller must ensure that provided buffer is at least
274baeef614SMaksim Yevmenkin.Dv HCI_DEVNAME_SIZE
275baeef614SMaksim Yevmenkincharacters in size.
276baeef614SMaksim YevmenkinThe function returns 1 when the device was found,
277baeef614SMaksim Yevmenkinotherwise 0.
278baeef614SMaksim Yevmenkin.Pp
279baeef614SMaksim YevmenkinThe
280baeef614SMaksim Yevmenkin.Fn bt_devinfo
281808de0aeSMaksim Yevmenkinfunction populates provided
282baeef614SMaksim Yevmenkin.Vt bt_devinfo
283baeef614SMaksim Yevmenkinstructure with the information about given Bluetooth device.
284baeef614SMaksim YevmenkinThe caller is expected to pass Bluetooth device name in the
285baeef614SMaksim Yevmenkin.Fa devname
286baeef614SMaksim Yevmenkinfield of the passed
287baeef614SMaksim Yevmenkin.Vt bt_devinfo
288baeef614SMaksim Yevmenkinstructure.
289baeef614SMaksim YevmenkinThe function returns 0 when successful,
290baeef614SMaksim Yevmenkinotherwise -1.
291baeef614SMaksim YevmenkinThe
292baeef614SMaksim Yevmenkin.Vt bt_devinfo
293baeef614SMaksim Yevmenkinstructure is defined as follows
294baeef614SMaksim Yevmenkin.Bd -literal -offset indent
295baeef614SMaksim Yevmenkinstruct bt_devinfo
296baeef614SMaksim Yevmenkin{
297baeef614SMaksim Yevmenkin        char            devname[HCI_DEVNAME_SIZE];
298baeef614SMaksim Yevmenkin
299baeef614SMaksim Yevmenkin        uint32_t        state;
300baeef614SMaksim Yevmenkin
301baeef614SMaksim Yevmenkin        bdaddr_t        bdaddr;
302baeef614SMaksim Yevmenkin        uint16_t        _reserved0;
303baeef614SMaksim Yevmenkin
304baeef614SMaksim Yevmenkin        uint8_t         features[HCI_DEVFEATURES_SIZE];
305baeef614SMaksim Yevmenkin
306baeef614SMaksim Yevmenkin        /* buffer info */
307baeef614SMaksim Yevmenkin        uint16_t        _reserved1;
308baeef614SMaksim Yevmenkin        uint16_t        cmd_free;
309baeef614SMaksim Yevmenkin        uint16_t        sco_size;
310baeef614SMaksim Yevmenkin        uint16_t        sco_pkts;
311baeef614SMaksim Yevmenkin        uint16_t        sco_free;
312baeef614SMaksim Yevmenkin        uint16_t        acl_size;
313baeef614SMaksim Yevmenkin        uint16_t        acl_pkts;
314baeef614SMaksim Yevmenkin        uint16_t        acl_free;
315baeef614SMaksim Yevmenkin
316baeef614SMaksim Yevmenkin        /* stats */
317baeef614SMaksim Yevmenkin        uint32_t        cmd_sent;
318baeef614SMaksim Yevmenkin        uint32_t        evnt_recv;
319baeef614SMaksim Yevmenkin        uint32_t        acl_recv;
320baeef614SMaksim Yevmenkin        uint32_t        acl_sent;
321baeef614SMaksim Yevmenkin        uint32_t        sco_recv;
322baeef614SMaksim Yevmenkin        uint32_t        sco_sent;
323baeef614SMaksim Yevmenkin        uint32_t        bytes_recv;
324baeef614SMaksim Yevmenkin        uint32_t        bytes_sent;
325baeef614SMaksim Yevmenkin
326baeef614SMaksim Yevmenkin        /* misc/specific */
327baeef614SMaksim Yevmenkin        uint16_t        link_policy_info;
328baeef614SMaksim Yevmenkin        uint16_t        packet_type_info;
329baeef614SMaksim Yevmenkin        uint16_t        role_switch_info;
330baeef614SMaksim Yevmenkin        uint16_t        debug;
331baeef614SMaksim Yevmenkin
332baeef614SMaksim Yevmenkin        uint8_t         _padding[20];
333baeef614SMaksim Yevmenkin};
334baeef614SMaksim Yevmenkin.Ed
335baeef614SMaksim Yevmenkin.Pp
336baeef614SMaksim YevmenkinThe
337baeef614SMaksim Yevmenkin.Fn bt_devenum
338baeef614SMaksim Yevmenkinfunction enumerates Bluetooth devices present in the system.
339baeef614SMaksim YevmenkinFor every device found,
340baeef614SMaksim Yevmenkinthe function will call provided
341baeef614SMaksim Yevmenkin.Fa cb
342baeef614SMaksim Yevmenkincallback function which should be of
343baeef614SMaksim Yevmenkin.Vt bt_devenum_cb_t
344baeef614SMaksim Yevmenkintype.
345baeef614SMaksim YevmenkinThe callback function is passed a
346baeef614SMaksim Yevmenkin.Dv HCI
347baeef614SMaksim Yevmenkinsocket
348baeef614SMaksim Yevmenkin.Fa s ,
349baeef614SMaksim Yevmenkinfully populated
350baeef614SMaksim Yevmenkin.Vt bt_devinfo
351baeef614SMaksim Yevmenkinstructure
352baeef614SMaksim Yevmenkin.Fa di
353baeef614SMaksim Yevmenkinand
354baeef614SMaksim Yevmenkin.Fa arg
355baeef614SMaksim Yevmenkinargument provided to the
356baeef614SMaksim Yevmenkin.Fn bt_devenum .
357baeef614SMaksim YevmenkinThe callback function can stop enumeration by returning a value
358baeef614SMaksim Yevmenkinthat is greater than zero.
359baeef614SMaksim YevmenkinThe function returns number of successfully enumerated devices,
360baeef614SMaksim Yevmenkinor -1 if an error occurred.
361baeef614SMaksim Yevmenkin.Pp
362baeef614SMaksim YevmenkinThe
36378b96635SMaksim Yevmenkin.Fn bt_devopen
36478b96635SMaksim Yevmenkinfunction opens a Bluetooth device with the given
36578b96635SMaksim Yevmenkin.Fa devname
36678b96635SMaksim Yevmenkinand returns a connected and bound
36778b96635SMaksim Yevmenkin.Dv HCI
36878b96635SMaksim Yevmenkinsocket handle.
36978b96635SMaksim YevmenkinThe function returns -1 if an error has occurred.
37078b96635SMaksim Yevmenkin.Pp
37178b96635SMaksim YevmenkinThe
37278b96635SMaksim Yevmenkin.Fn bt_devclose
37378b96635SMaksim Yevmenkincloses the passed
37478b96635SMaksim Yevmenkin.Dv HCI
37578b96635SMaksim Yevmenkinsocket handle
37678b96635SMaksim Yevmenkin.Fa s ,
37778b96635SMaksim Yevmenkinpreviously obtained with
37878b96635SMaksim Yevmenkin.Xr bt_devopen 3 .
37978b96635SMaksim Yevmenkin.Pp
38078b96635SMaksim YevmenkinThe
38178b96635SMaksim Yevmenkin.Fn bt_devsend
38278b96635SMaksim Yevmenkinfunction sends a Bluetooth
38378b96635SMaksim Yevmenkin.Dv HCI
38478b96635SMaksim Yevmenkincommand with the given
38578b96635SMaksim Yevmenkin.Fa opcode
38678b96635SMaksim Yevmenkinto the provided socket
38778b96635SMaksim Yevmenkin.Fa s ,
38878b96635SMaksim Yevmenkinpreviously obtained with
38978b96635SMaksim Yevmenkin.Xr bt_devopen 3 .
39078b96635SMaksim YevmenkinThe
39178b96635SMaksim Yevmenkin.Fa opcode
392799162a6SJoel Dahlparameter is expected to be in the host byte order.
39378b96635SMaksim YevmenkinThe
39478b96635SMaksim Yevmenkin.Fa param
39578b96635SMaksim Yevmenkinand
39678b96635SMaksim Yevmenkin.Fa plen
39778b96635SMaksim Yevmenkinparameters specify command parameters.
39878b96635SMaksim YevmenkinThe
39978b96635SMaksim Yevmenkin.Fn bt_devsend
40078b96635SMaksim Yevmenkinfunction does not modify the
40178b96635SMaksim Yevmenkin.Dv HCI
40278b96635SMaksim Yevmenkinfilter on the provided socket
40378b96635SMaksim Yevmenkin.Fa s .
40478b96635SMaksim YevmenkinThe function returns 0 on success,
40578b96635SMaksim Yevmenkinor -1 if an error occurred.
40678b96635SMaksim Yevmenkin.Pp
40778b96635SMaksim YevmenkinThe
40878b96635SMaksim Yevmenkin.Fn bt_devrecv
40978b96635SMaksim Yevmenkinfunction receives one Bluetooth
41078b96635SMaksim Yevmenkin.Dv HCI
41178b96635SMaksim Yevmenkinpacket from the socket
41278b96635SMaksim Yevmenkin.Fa s ,
41378b96635SMaksim Yevmenkinpreviously obtained with
41478b96635SMaksim Yevmenkin.Xr bt_devopen 3 .
41578b96635SMaksim YevmenkinThe packet is placed into the provided buffer
41678b96635SMaksim Yevmenkin.Fa buf
41778b96635SMaksim Yevmenkinof size
41878b96635SMaksim Yevmenkin.Fa size .
41978b96635SMaksim YevmenkinThe
42078b96635SMaksim Yevmenkin.Fa to
42178b96635SMaksim Yevmenkinparameter specifies receive timeout in seconds.
42278b96635SMaksim YevmenkinInfinite timeout can be specified by passing negative value in the
42378b96635SMaksim Yevmenkin.Fa to
42478b96635SMaksim Yevmenkinparameter.
42578b96635SMaksim YevmenkinThe
42678b96635SMaksim Yevmenkin.Fn bt_devrecv
42778b96635SMaksim Yevmenkinfunction does not modify the
42878b96635SMaksim Yevmenkin.Dv HCI
42978b96635SMaksim Yevmenkinfilter on the provided socket
43078b96635SMaksim Yevmenkin.Fa s .
431799162a6SJoel DahlThe function returns total number of bytes received,
43278b96635SMaksim Yevmenkinor -1 if an error occurred.
43378b96635SMaksim Yevmenkin.Pp
43478b96635SMaksim YevmenkinThe
43578b96635SMaksim Yevmenkin.Fn bt_devreq
43678b96635SMaksim Yevmenkinfunction makes a Bluetooth
43778b96635SMaksim Yevmenkin.Dv HCI
43878b96635SMaksim Yevmenkinrequest to the socket
43978b96635SMaksim Yevmenkin.Fa s ,
44078b96635SMaksim Yevmenkinpreviously obtained with
44178b96635SMaksim Yevmenkin.Xr bt_devopen 3 .
44278b96635SMaksim YevmenkinThe function will send the specified command and will wait for the specified
44378b96635SMaksim Yevmenkinevent,
44478b96635SMaksim Yevmenkinor timeout
44578b96635SMaksim Yevmenkin.Fa to
44678b96635SMaksim Yevmenkinseconds to occur.
44778b96635SMaksim YevmenkinThe
44878b96635SMaksim Yevmenkin.Vt bt_devreq
44978b96635SMaksim Yevmenkinstructure is defined as follows
45078b96635SMaksim Yevmenkin.Bd -literal -offset indent
45178b96635SMaksim Yevmenkinstruct bt_devreq
45278b96635SMaksim Yevmenkin{
45378b96635SMaksim Yevmenkin        uint16_t        opcode;
45478b96635SMaksim Yevmenkin        uint8_t         event;
45578b96635SMaksim Yevmenkin        void            *cparam;
45678b96635SMaksim Yevmenkin        size_t          clen;
45778b96635SMaksim Yevmenkin        void            *rparam;
45878b96635SMaksim Yevmenkin        size_t          rlen;
45978b96635SMaksim Yevmenkin};
46078b96635SMaksim Yevmenkin.Ed
46178b96635SMaksim Yevmenkin.Pp
46278b96635SMaksim YevmenkinThe
46378b96635SMaksim Yevmenkin.Fa opcode
46478b96635SMaksim Yevmenkinfield specifies the command and is expected to be in the host byte order.
46578b96635SMaksim YevmenkinThe
46678b96635SMaksim Yevmenkin.Fa cparam
46778b96635SMaksim Yevmenkinand
46878b96635SMaksim Yevmenkin.Fa clen
46978b96635SMaksim Yevmenkinfields specify command parameters data and command parameters data size
47078b96635SMaksim Yevmenkinrespectively.
47178b96635SMaksim YevmenkinThe
47278b96635SMaksim Yevmenkin.Fa event
47378b96635SMaksim Yevmenkinfield specifies which Bluetooth
47478b96635SMaksim Yevmenkin.Dv HCI
47578b96635SMaksim Yevmenkinevent ID the function should wait for, otherwise it should be set to zero.
47678b96635SMaksim YevmenkinThe
47778b96635SMaksim Yevmenkin.Dv HCI
47878b96635SMaksim YevmenkinCommand Complete and Command Status events are enabled by default.
47978b96635SMaksim YevmenkinThe
48078b96635SMaksim Yevmenkin.Fa rparam
48178b96635SMaksim Yevmenkinand
48278b96635SMaksim Yevmenkin.Fa rlen
48378b96635SMaksim Yevmenkinparameters specify buffer and buffer size respectively where return
48478b96635SMaksim Yevmenkinparameters should be placed.
48578b96635SMaksim YevmenkinThe
48678b96635SMaksim Yevmenkin.Fn bt_devreq
48778b96635SMaksim Yevmenkinfunction temporarily modifies filter on the provided
48878b96635SMaksim Yevmenkin.Dv HCI
48978b96635SMaksim Yevmenkinsocket
49078b96635SMaksim Yevmenkin.Fa s .
49178b96635SMaksim YevmenkinThe function returns 0 on success, or -1 if an error occurred.
49278b96635SMaksim Yevmenkin.Pp
49378b96635SMaksim YevmenkinThe
49478b96635SMaksim Yevmenkin.Fn bt_devfilter
49578b96635SMaksim Yevmenkincontrols the local
49678b96635SMaksim Yevmenkin.Dv HCI
49778b96635SMaksim Yevmenkinfilter associated with the socket
49878b96635SMaksim Yevmenkin.Fa s ,
49978b96635SMaksim Yevmenkinpreviously obtained with
50078b96635SMaksim Yevmenkin.Xr bt_devopen 3 .
50178b96635SMaksim YevmenkinFiltering can be done on packet types, i.e.
50278b96635SMaksim Yevmenkin.Dv ACL ,
503a3fb6da9SGlen Barber.Dv SCO
504a3fb6da9SGlen Barberor
50578b96635SMaksim Yevmenkin.Dv HCI ,
50678b96635SMaksim Yevmenkincommand and event packets, and, in addition, on
50778b96635SMaksim Yevmenkin.Dv HCI
50878b96635SMaksim Yevmenkinevent IDs.
50978b96635SMaksim YevmenkinBefore applying the
51078b96635SMaksim Yevmenkin.Fa new
51178b96635SMaksim Yevmenkinfilter (if provided) the function will try to obtain the current filter
51278b96635SMaksim Yevmenkinfrom the socket
51378b96635SMaksim Yevmenkin.Fa s
51478b96635SMaksim Yevmenkinand place it into the
51578b96635SMaksim Yevmenkin.Fa old
51678b96635SMaksim Yevmenkinparameter (if provided).
51778b96635SMaksim YevmenkinThe function returns 0 on success, or -1 if an error occurred.
51878b96635SMaksim Yevmenkin.Pp
51978b96635SMaksim YevmenkinThe
52078b96635SMaksim Yevmenkin.Fn bt_devfilter_pkt_set ,
52178b96635SMaksim Yevmenkin.Fn bt_devfilter_pkt_clr
52278b96635SMaksim Yevmenkinand
52378b96635SMaksim Yevmenkin.Fn bt_devfilter_pkt_tst
52478b96635SMaksim Yevmenkinfunctions can be used to modify and test the
52578b96635SMaksim Yevmenkin.Dv HCI
52678b96635SMaksim Yevmenkinfilter
52778b96635SMaksim Yevmenkin.Fa filter .
52878b96635SMaksim YevmenkinThe
52978b96635SMaksim Yevmenkin.Fa type
53078b96635SMaksim Yevmenkinparameter specifies
53178b96635SMaksim Yevmenkin.Dv HCI
53278b96635SMaksim Yevmenkinpacket type.
53378b96635SMaksim Yevmenkin.Pp
53478b96635SMaksim YevmenkinThe
53578b96635SMaksim Yevmenkin.Fn bt_devfilter_evt_set ,
53678b96635SMaksim Yevmenkin.Fn bt_devfilter_evt_clr
53778b96635SMaksim Yevmenkinand
53878b96635SMaksim Yevmenkin.Fn bt_devfilter_evt_tst
53978b96635SMaksim Yevmenkinfunctions can be used to modify and test the
54078b96635SMaksim Yevmenkin.Dv HCI
54178b96635SMaksim Yevmenkinevent filter
54278b96635SMaksim Yevmenkin.Fa filter .
54378b96635SMaksim YevmenkinThe
54478b96635SMaksim Yevmenkin.Fa event
54578b96635SMaksim Yevmenkinparameter specifies
54678b96635SMaksim Yevmenkin.Dv HCI
54778b96635SMaksim Yevmenkinevent ID.
54878b96635SMaksim Yevmenkin.Pp
54978b96635SMaksim YevmenkinThe
55078b96635SMaksim Yevmenkin.Fn bt_devinquiry
55178b96635SMaksim Yevmenkinfunction performs Bluetooth inquiry.
55278b96635SMaksim YevmenkinThe
55378b96635SMaksim Yevmenkin.Fa devname
55478b96635SMaksim Yevmenkinparameter specifies which local Bluetooth device should perform an inquiry.
555c2025a76SJoel DahlIf not specified, i.e.
55678b96635SMaksim Yevmenkin.Dv NULL ,
55778b96635SMaksim Yevmenkinthen first available device will be used.
55878b96635SMaksim YevmenkinThe
55978b96635SMaksim Yevmenkin.Fa length
56078b96635SMaksim Yevmenkinparameters specifies the total length of an inquiry in seconds.
56178b96635SMaksim YevmenkinIf not specified, i.e. 0, default value will be used.
56278b96635SMaksim YevmenkinThe
56378b96635SMaksim Yevmenkin.Fa num_rsp
56478b96635SMaksim Yevmenkinparameter specifies the number of responses that can be received before
56578b96635SMaksim Yevmenkinthe inquiry is halted.
56678b96635SMaksim YevmenkinIf not specified, i.e. 0, default value will be used.
56778b96635SMaksim YevmenkinThe
56878b96635SMaksim Yevmenkin.Fa ii
56978b96635SMaksim Yevmenkinparameter specifies where to place inquiry results.
57078b96635SMaksim YevmenkinOn success, the function will return total number of inquiry results,
57178b96635SMaksim Yevmenkinwill allocate,
57278b96635SMaksim Yevmenkinusing
57378b96635SMaksim Yevmenkin.Xr calloc 3 ,
57478b96635SMaksim Yevmenkinbuffer to store all the inquiry results and
57578b96635SMaksim Yevmenkinwill return pointer to the allocated buffer in the
57678b96635SMaksim Yevmenkin.Fa ii
57778b96635SMaksim Yevmenkinparameter.
57878b96635SMaksim YevmenkinIt is up to the caller of the function to dispose of the buffer using
57978b96635SMaksim Yevmenkin.Xr free 3
58078b96635SMaksim Yevmenkincall.
58178b96635SMaksim YevmenkinThe function returns -1 if an error has occurred.
58278b96635SMaksim YevmenkinThe
58378b96635SMaksim Yevmenkin.Vt bt_devinquiry
58478b96635SMaksim Yevmenkinstructure is defined as follows
58578b96635SMaksim Yevmenkin.Bd -literal -offset indent
58678b96635SMaksim Yevmenkinstruct bt_devinquiry {
58778b96635SMaksim Yevmenkin        bdaddr_t        bdaddr;
58878b96635SMaksim Yevmenkin        uint8_t         pscan_rep_mode;
58978b96635SMaksim Yevmenkin        uint8_t         pscan_period_mode;
59078b96635SMaksim Yevmenkin        uint8_t         dev_class[3];
59178b96635SMaksim Yevmenkin        uint16_t        clock_offset;
59278b96635SMaksim Yevmenkin        int8_t          rssi;
59378b96635SMaksim Yevmenkin        uint8_t         data[240];
59478b96635SMaksim Yevmenkin};
59578b96635SMaksim Yevmenkin.Ed
59678b96635SMaksim Yevmenkin.Pp
59778b96635SMaksim YevmenkinThe
5983ee5c554SVladimir Kondratyev.Fn bt_devremote_name
5993ee5c554SVladimir Kondratyevfunction performs Bluetooth Remote Name Request procedure to obtain the
6003ee5c554SVladimir Kondratyevuser-friendly name of another Bluetooth unit.
6013ee5c554SVladimir KondratyevThe
6023ee5c554SVladimir Kondratyev.Fa devname
6033ee5c554SVladimir Kondratyevparameter specifies which local Bluetooth device should perform the request.
6043ee5c554SVladimir KondratyevIf not specified
6053ee5c554SVladimir Kondratyev.Dv ( NULL ) ,
6063ee5c554SVladimir Kondratyevthe first available device is used.
6073ee5c554SVladimir KondratyevThe
6083ee5c554SVladimir Kondratyev.Fa remote
6093ee5c554SVladimir Kondratyevparameter specifies the Bluetooth BD_ADDR of the remote device to query.
6103ee5c554SVladimir KondratyevThe
6113ee5c554SVladimir Kondratyev.Fa to
6123ee5c554SVladimir Kondratyevparameter specifies response timeout in seconds.
6133ee5c554SVladimir KondratyevIf not specified (0), the default value is taken from the
6143ee5c554SVladimir Kondratyevnet.bluetooth.hci.command_timeout
6153ee5c554SVladimir Kondratyev.Xr sysctl 8
6163ee5c554SVladimir Kondratyevvalue.
6173ee5c554SVladimir KondratyevThe
6183ee5c554SVladimir Kondratyev.Fa clk_off ,
6193ee5c554SVladimir Kondratyev.Fa ps_rep_mode ,
6203ee5c554SVladimir Kondratyevand
6213ee5c554SVladimir Kondratyev.Fa ps_mode
6223ee5c554SVladimir Kondratyevparameters specify Clock_Offset, Page_Scan_Repetition_Mode, and Page_Scan_Mode
6233ee5c554SVladimir Kondratyevfields of HCI_Remote_Name_Request respectively.
6243ee5c554SVladimir KondratyevOn success, the function returns a pointer to dynamically allocated
6253ee5c554SVladimir KondratyevNUL-terminated string or
6263ee5c554SVladimir Kondratyev.Dv NULL
6273ee5c554SVladimir Kondratyevif an error occurred.
6283ee5c554SVladimir KondratyevIt is up to the caller to release returned string using
6293ee5c554SVladimir Kondratyev.Xr free 3 .
6303ee5c554SVladimir Kondratyev.Pp
6313ee5c554SVladimir KondratyevThe
6323ee5c554SVladimir Kondratyev.Fn bt_devremote_name_gen
6333ee5c554SVladimir Kondratyevfunction is a shortcut to
6343ee5c554SVladimir Kondratyev.Fn bt_devremote_name
6353ee5c554SVladimir Kondratyevthat passes generic defaults for
6363ee5c554SVladimir Kondratyev.Fa to ,
6373ee5c554SVladimir Kondratyev.Fa clk_off ,
6383ee5c554SVladimir Kondratyev.Fa ps_rep_mode ,
6393ee5c554SVladimir Kondratyevand
6403ee5c554SVladimir Kondratyev.Fa ps_mode
6413ee5c554SVladimir Kondratyevparameters.
6423ee5c554SVladimir Kondratyev.Pp
6433ee5c554SVladimir KondratyevThe
64455034c7dSMaksim Yevmenkin.Fn bdaddr_same ,
6453ee5c554SVladimir Kondratyev.Fn bdaddr_any ,
64655034c7dSMaksim Yevmenkinand
64755034c7dSMaksim Yevmenkin.Fn bdaddr_copy
64855034c7dSMaksim Yevmenkinare handy shorthand Bluetooth address utility functions.
64955034c7dSMaksim YevmenkinThe
65055034c7dSMaksim Yevmenkin.Fn bdaddr_same
65155034c7dSMaksim Yevmenkinfunction will test if two provided BD_ADDRs are the same.
65255034c7dSMaksim YevmenkinThe
65355034c7dSMaksim Yevmenkin.Fn bdaddr_any
65455034c7dSMaksim Yevmenkinfunction will test if provided BD_ADDR is
65555034c7dSMaksim Yevmenkin.Dv ANY
65655034c7dSMaksim YevmenkinBD_ADDR.
65755034c7dSMaksim YevmenkinThe
65855034c7dSMaksim Yevmenkin.Fn bdaddr_copy
65955034c7dSMaksim Yevmenkinfunction will copy provided
66055034c7dSMaksim Yevmenkin.Fa src
66155034c7dSMaksim YevmenkinBD_ADDR into provided
66255034c7dSMaksim Yevmenkin.Fa dst
66355034c7dSMaksim YevmenkinBD_ADDR.
6640986ab12SMaksim Yevmenkin.Sh FILES
66537266c4bSRuslan Ermilov.Bl -tag -width ".Pa /etc/bluetooth/hosts" -compact
6660986ab12SMaksim Yevmenkin.It Pa /etc/bluetooth/hosts
6670986ab12SMaksim Yevmenkin.It Pa /etc/bluetooth/protocols
6680986ab12SMaksim Yevmenkin.El
6690986ab12SMaksim Yevmenkin.Sh EXAMPLES
6700986ab12SMaksim YevmenkinPrint out the hostname associated with a specific BD_ADDR:
6710986ab12SMaksim Yevmenkin.Bd -literal -offset indent
6720986ab12SMaksim Yevmenkinconst char *bdstr = "00:01:02:03:04:05";
6730986ab12SMaksim Yevmenkinbdaddr_t bd;
6740986ab12SMaksim Yevmenkinstruct hostent *hp;
6750986ab12SMaksim Yevmenkin
6760986ab12SMaksim Yevmenkinif (!bt_aton(bdstr, &bd))
6770986ab12SMaksim Yevmenkin	errx(1, "can't parse BD_ADDR %s", bdstr);
6780986ab12SMaksim Yevmenkin
6790986ab12SMaksim Yevmenkinif ((hp = bt_gethostbyaddr((const char *)&bd,
6800986ab12SMaksim Yevmenkin    sizeof(bd), AF_BLUETOOTH)) == NULL)
6810986ab12SMaksim Yevmenkin	errx(1, "no name associated with %s", bdstr);
6820986ab12SMaksim Yevmenkin
6830986ab12SMaksim Yevmenkinprintf("name associated with %s is %s\en", bdstr, hp->h_name);
6840986ab12SMaksim Yevmenkin.Ed
6850986ab12SMaksim Yevmenkin.Sh DIAGNOSTICS
6860986ab12SMaksim YevmenkinError return status from
6870986ab12SMaksim Yevmenkin.Fn bt_gethostent ,
6880986ab12SMaksim Yevmenkin.Fn bt_gethostbyname
6890986ab12SMaksim Yevmenkinand
6900986ab12SMaksim Yevmenkin.Fn bt_gethostbyaddr
6910986ab12SMaksim Yevmenkinis indicated by return of a
6920986ab12SMaksim Yevmenkin.Dv NULL
6930986ab12SMaksim Yevmenkinpointer.
6940986ab12SMaksim YevmenkinThe external integer
6950986ab12SMaksim Yevmenkin.Va h_errno
6960986ab12SMaksim Yevmenkinmay then be checked to see whether this is a temporary failure
6970986ab12SMaksim Yevmenkinor an invalid or unknown host.
6980986ab12SMaksim YevmenkinThe routine
69937266c4bSRuslan Ermilov.Xr herror 3
7000986ab12SMaksim Yevmenkincan be used to print an error message describing the failure.
7010986ab12SMaksim YevmenkinIf its argument
7020986ab12SMaksim Yevmenkin.Fa string
7030986ab12SMaksim Yevmenkinis
7040986ab12SMaksim Yevmenkin.Pf non- Dv NULL ,
7050986ab12SMaksim Yevmenkinit is printed, followed by a colon and a space.
7060986ab12SMaksim YevmenkinThe error message is printed with a trailing newline.
7070986ab12SMaksim Yevmenkin.Pp
7080986ab12SMaksim YevmenkinThe variable
7090986ab12SMaksim Yevmenkin.Va h_errno
7100986ab12SMaksim Yevmenkincan have the following values:
71137266c4bSRuslan Ermilov.Bl -tag -width ".Dv HOST_NOT_FOUND"
7120986ab12SMaksim Yevmenkin.It Dv HOST_NOT_FOUND
7130986ab12SMaksim YevmenkinNo such host is known.
7140986ab12SMaksim Yevmenkin.It Dv NO_RECOVERY
7150986ab12SMaksim YevmenkinSome unexpected server failure was encountered.
7160986ab12SMaksim YevmenkinThis is a non-recoverable error.
7170986ab12SMaksim Yevmenkin.El
7180986ab12SMaksim Yevmenkin.Pp
7190986ab12SMaksim YevmenkinThe
7200986ab12SMaksim Yevmenkin.Fn bt_getprotoent ,
7210986ab12SMaksim Yevmenkin.Fn bt_getprotobyname
7220986ab12SMaksim Yevmenkinand
7230986ab12SMaksim Yevmenkin.Fn bt_getprotobynumber
72437266c4bSRuslan Ermilovreturn
72537266c4bSRuslan Ermilov.Dv NULL
72637266c4bSRuslan Ermilovon EOF or error.
7270986ab12SMaksim Yevmenkin.Sh SEE ALSO
7280986ab12SMaksim Yevmenkin.Xr gethostbyaddr 3 ,
7290986ab12SMaksim Yevmenkin.Xr gethostbyname 3 ,
7303ac17febSRuslan Ermilov.Xr getprotobyname 3 ,
7310986ab12SMaksim Yevmenkin.Xr getprotobynumber 3 ,
7320986ab12SMaksim Yevmenkin.Xr herror 3 ,
7330986ab12SMaksim Yevmenkin.Xr inet_aton 3 ,
734baeef614SMaksim Yevmenkin.Xr inet_ntoa 3 ,
735baeef614SMaksim Yevmenkin.Xr ng_hci 4
7360986ab12SMaksim Yevmenkin.Sh CAVEAT
7370986ab12SMaksim YevmenkinThe
7380986ab12SMaksim Yevmenkin.Fn bt_gethostent
7390986ab12SMaksim Yevmenkinfunction reads the next line of
7400986ab12SMaksim Yevmenkin.Pa /etc/bluetooth/hosts ,
7410986ab12SMaksim Yevmenkinopening the file if necessary.
7420986ab12SMaksim Yevmenkin.Pp
7430986ab12SMaksim YevmenkinThe
7440986ab12SMaksim Yevmenkin.Fn bt_sethostent
7450986ab12SMaksim Yevmenkinfunction opens and/or rewinds the
7460986ab12SMaksim Yevmenkin.Pa /etc/bluetooth/hosts
7470986ab12SMaksim Yevmenkinfile.
7480986ab12SMaksim Yevmenkin.Pp
7490986ab12SMaksim YevmenkinThe
7500986ab12SMaksim Yevmenkin.Fn bt_getprotoent
7510986ab12SMaksim Yevmenkinfunction reads the next line of
7520986ab12SMaksim Yevmenkin.Pa /etc/bluetooth/protocols ,
7530986ab12SMaksim Yevmenkinopening the file if necessary.
7540986ab12SMaksim Yevmenkin.Pp
7550986ab12SMaksim YevmenkinThe
7560986ab12SMaksim Yevmenkin.Fn bt_setprotoent
7570986ab12SMaksim Yevmenkinfunction opens and/or rewinds the
7580986ab12SMaksim Yevmenkin.Pa /etc/bluetooth/protocols
7590986ab12SMaksim Yevmenkinfile.
760baeef614SMaksim Yevmenkin.Pp
761baeef614SMaksim YevmenkinThe
762baeef614SMaksim Yevmenkin.Fn bt_devenum
763baeef614SMaksim Yevmenkinfunction enumerates up to
764baeef614SMaksim Yevmenkin.Dv HCI_DEVMAX
765baeef614SMaksim YevmenkinBluetooth devices.
766baeef614SMaksim YevmenkinDuring enumeration the
767baeef614SMaksim Yevmenkin.Fn bt_devenum
768baeef614SMaksim Yevmenkinfunction uses the same
769baeef614SMaksim Yevmenkin.Dv HCI
770baeef614SMaksim Yevmenkinsocket.
771baeef614SMaksim YevmenkinThe function guarantees that the socket,
772baeef614SMaksim Yevmenkinpassed to the callback function,
773baeef614SMaksim Yevmenkinwill be bound and connected to the Bluetooth device being enumerated.
77424a0682cSRuslan Ermilov.Sh AUTHORS
7752b7af31cSBaptiste Daroussin.An Maksim Yevmenkin Aq Mt m_evmenkin@yahoo.com
7760986ab12SMaksim Yevmenkin.Sh BUGS
77778b96635SMaksim YevmenkinSome of those functions use static data storage;
7780986ab12SMaksim Yevmenkinif the data is needed for future use, it should be
7790986ab12SMaksim Yevmenkincopied before any subsequent calls overwrite it.
780