1 /* $DragonFly: src/sys/netbt/bluetooth.h,v 1.2 2008/03/18 13:41:42 hasso Exp $ */ 2 /* $OpenBSD: src/sys/netbt/bluetooth.h,v 1.5 2008/02/24 21:34:48 uwe Exp $ */ 3 /* $NetBSD: bluetooth.h,v 1.6 2007/09/17 01:23:17 rillig Exp $ */ 4 5 /*- 6 * Copyright (c) 2005 Iain Hibbert. 7 * Copyright (c) 2006 Itronix Inc. 8 * All rights reserved. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 3. The name of Itronix Inc. may not be used to endorse 19 * or promote products derived from this software without specific 20 * prior written permission. 21 * 22 * THIS SOFTWARE IS PROVIDED BY ITRONIX INC. ``AS IS'' AND 23 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 24 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 25 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ITRONIX INC. BE LIABLE FOR ANY 26 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 27 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 28 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 29 * ON ANY THEORY OF LIABILITY, WHETHER IN 30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 32 * POSSIBILITY OF SUCH DAMAGE. 33 */ 34 35 #ifndef _NETBT_BLUETOOTH_H_ 36 #define _NETBT_BLUETOOTH_H_ 37 38 #include <sys/socket.h> 39 #include <sys/types.h> 40 41 /* 42 * Bluetooth Address Family Protocol Numbers 43 */ 44 #define BTPROTO_HCI 1 45 #define BTPROTO_L2CAP 2 46 #define BTPROTO_RFCOMM 3 47 #define BTPROTO_SCO 4 48 49 /* All sizes are in bytes */ 50 #define BLUETOOTH_BDADDR_SIZE 6 51 52 /* 53 * Bluetooth device address 54 */ 55 typedef struct { 56 uint8_t b[BLUETOOTH_BDADDR_SIZE]; 57 } __attribute__ ((packed)) bdaddr_t; 58 59 /* 60 * bdaddr utility functions 61 */ 62 static __inline int 63 bdaddr_same(const bdaddr_t *a, const bdaddr_t *b) 64 { 65 66 return (a->b[0] == b->b[0] && a->b[1] == b->b[1] 67 && a->b[2] == b->b[2] && a->b[3] == b->b[3] 68 && a->b[4] == b->b[4] && a->b[5] == b->b[5]); 69 } 70 71 static __inline int 72 bdaddr_any(const bdaddr_t *a) 73 { 74 75 return (a->b[0] == 0 && a->b[1] == 0 && a->b[2] == 0 76 && a->b[3] == 0 && a->b[4] == 0 && a->b[5] == 0); 77 } 78 79 static __inline void 80 bdaddr_copy(bdaddr_t *d, const bdaddr_t *s) 81 { 82 83 d->b[0] = s->b[0]; 84 d->b[1] = s->b[1]; 85 d->b[2] = s->b[2]; 86 d->b[3] = s->b[3]; 87 d->b[4] = s->b[4]; 88 d->b[5] = s->b[5]; 89 } 90 91 /* 92 * Socket address used by Bluetooth protocols 93 */ 94 struct sockaddr_bt { 95 uint8_t bt_len; 96 sa_family_t bt_family; 97 bdaddr_t bt_bdaddr; 98 uint16_t bt_psm; 99 uint8_t bt_channel; 100 uint8_t bt_zero[5]; 101 }; 102 103 /* Note: this is actually 6 bytes including terminator */ 104 #define BDADDR_ANY ((const bdaddr_t *) "\000\000\000\000\000") 105 106 #ifdef _KERNEL 107 #include <sys/bus.h> 108 109 #ifdef MALLOC_DECLARE 110 MALLOC_DECLARE(M_BLUETOOTH); 111 #endif 112 113 /* 114 * Bluetooth Protocol API callback methods 115 */ 116 struct mbuf; 117 struct btproto { 118 void (*connecting)(void *); 119 void (*connected)(void *); 120 void (*disconnected)(void *, int); 121 void *(*newconn)(void *, struct sockaddr_bt *, struct sockaddr_bt *); 122 void (*complete)(void *, int); 123 void (*linkmode)(void *, int); 124 void (*input)(void *, struct mbuf *); 125 }; 126 127 /* 128 * Debugging stuff 129 */ 130 #ifdef BLUETOOTH_DEBUG 131 extern int bluetooth_debug; 132 # define DPRINTF(fmt, args...) do { \ 133 if (bluetooth_debug) \ 134 kprintf("%s: "fmt, __func__ , ##args); \ 135 } while (/* CONSTCOND */0) 136 137 # define DPRINTFN(n, fmt, args...) do { \ 138 if (bluetooth_debug > (n)) \ 139 kprintf("%s: "fmt, __func__ , ##args); \ 140 } while (/* CONSTCOND */0) 141 142 # define UNKNOWN(value) \ 143 kprintf("%s: %s = %d unknown!\n", __func__, #value, (value)); 144 #else 145 # define DPRINTF(...) ((void)0) 146 # define DPRINTFN(...) ((void)0) 147 # define UNKNOWN(x) ((void)0) 148 #endif /* BLUETOOTH_DEBUG */ 149 150 #define sbspace(sb) \ 151 ((long) imin((int)((sb)->ssb_hiwat - (sb)->ssb_cc), \ 152 (int)((sb)->ssb_mbmax - (sb)->ssb_mbcnt))) 153 #endif /* _KERNEL */ 154 155 #define letoh16(x) le16toh(x) 156 #define letoh32(x) le32toh(x) 157 158 #endif /* _NETBT_BLUETOOTH_H_ */ 159