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