Home | History | Annotate | Download | only in bluetooth
      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