1 /* 2 * 3 * BlueZ - Bluetooth protocol stack for Linux 4 * 5 * Copyright (C) 2000-2001 Qualcomm Incorporated 6 * Copyright (C) 2002-2003 Maxim Krasnyansky <maxk (at) qualcomm.com> 7 * Copyright (C) 2002-2009 Marcel Holtmann <marcel (at) holtmann.org> 8 * 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License as published by 12 * the Free Software Foundation; either version 2 of the License, or 13 * (at your option) any later version. 14 * 15 * This program is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU General Public License for more details. 19 * 20 * You should have received a copy of the GNU General Public License 21 * along with this program; if not, write to the Free Software 22 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 23 * 24 */ 25 26 #ifndef __BLUETOOTH_H 27 #define __BLUETOOTH_H 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 #include <stdio.h> 34 #include <stdint.h> 35 #include <string.h> 36 #include <endian.h> 37 #include <byteswap.h> 38 39 #ifndef AF_BLUETOOTH 40 #define AF_BLUETOOTH 31 41 #define PF_BLUETOOTH AF_BLUETOOTH 42 #endif 43 44 #define BTPROTO_L2CAP 0 45 #define BTPROTO_HCI 1 46 #define BTPROTO_SCO 2 47 #define BTPROTO_RFCOMM 3 48 #define BTPROTO_BNEP 4 49 #define BTPROTO_CMTP 5 50 #define BTPROTO_HIDP 6 51 #define BTPROTO_AVDTP 7 52 53 #define SOL_HCI 0 54 #define SOL_L2CAP 6 55 #define SOL_SCO 17 56 #define SOL_RFCOMM 18 57 58 #ifndef SOL_BLUETOOTH 59 #define SOL_BLUETOOTH 274 60 #endif 61 62 #define BT_SECURITY 4 63 struct bt_security { 64 uint8_t level; 65 }; 66 #define BT_SECURITY_SDP 0 67 #define BT_SECURITY_LOW 1 68 #define BT_SECURITY_MEDIUM 2 69 #define BT_SECURITY_HIGH 3 70 71 #define BT_DEFER_SETUP 7 72 73 /* Connection and socket states */ 74 enum { 75 BT_CONNECTED = 1, /* Equal to TCP_ESTABLISHED to make net code happy */ 76 BT_OPEN, 77 BT_BOUND, 78 BT_LISTEN, 79 BT_CONNECT, 80 BT_CONNECT2, 81 BT_CONFIG, 82 BT_DISCONN, 83 BT_CLOSED 84 }; 85 86 /* Byte order conversions */ 87 #if __BYTE_ORDER == __LITTLE_ENDIAN 88 #define htobs(d) (d) 89 #define htobl(d) (d) 90 #define btohs(d) (d) 91 #define btohl(d) (d) 92 #elif __BYTE_ORDER == __BIG_ENDIAN 93 #define htobs(d) bswap_16(d) 94 #define htobl(d) bswap_32(d) 95 #define btohs(d) bswap_16(d) 96 #define btohl(d) bswap_32(d) 97 #else 98 #error "Unknown byte order" 99 #endif 100 101 /* Bluetooth unaligned access */ 102 #define bt_get_unaligned(ptr) \ 103 ({ \ 104 struct __attribute__((packed)) { \ 105 typeof(*(ptr)) __v; \ 106 } *__p = (void *) (ptr); \ 107 __p->__v; \ 108 }) 109 110 #define bt_put_unaligned(val, ptr) \ 111 do { \ 112 struct __attribute__((packed)) { \ 113 typeof(*(ptr)) __v; \ 114 } *__p = (void *) (ptr); \ 115 __p->__v = (val); \ 116 } while(0) 117 118 /* BD Address */ 119 typedef struct { 120 uint8_t b[6]; 121 } __attribute__((packed)) bdaddr_t; 122 123 #define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}}) 124 #define BDADDR_ALL (&(bdaddr_t) {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}}) 125 #define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff}}) 126 127 /* Copy, swap, convert BD Address */ 128 static inline int bacmp(const bdaddr_t *ba1, const bdaddr_t *ba2) 129 { 130 return memcmp(ba1, ba2, sizeof(bdaddr_t)); 131 } 132 static inline void bacpy(bdaddr_t *dst, const bdaddr_t *src) 133 { 134 memcpy(dst, src, sizeof(bdaddr_t)); 135 } 136 137 void baswap(bdaddr_t *dst, const bdaddr_t *src); 138 bdaddr_t *strtoba(const char *str); 139 char *batostr(const bdaddr_t *ba); 140 int ba2str(const bdaddr_t *ba, char *str); 141 int str2ba(const char *str, bdaddr_t *ba); 142 int ba2oui(const bdaddr_t *ba, char *oui); 143 int bachk(const char *str); 144 145 int baprintf(const char *format, ...); 146 int bafprintf(FILE *stream, const char *format, ...); 147 int basprintf(char *str, const char *format, ...); 148 int basnprintf(char *str, size_t size, const char *format, ...); 149 150 void *bt_malloc(size_t size); 151 void bt_free(void *ptr); 152 153 int bt_error(uint16_t code); 154 char *bt_compidtostr(int id); 155 156 #ifdef __cplusplus 157 } 158 #endif 159 160 #endif /* __BLUETOOTH_H */ 161