diff options
Diffstat (limited to 'include/bluetooth.h')
| -rw-r--r-- | include/bluetooth.h | 149 | 
1 files changed, 149 insertions, 0 deletions
| diff --git a/include/bluetooth.h b/include/bluetooth.h new file mode 100644 index 00000000..d886cb80 --- /dev/null +++ b/include/bluetooth.h @@ -0,0 +1,149 @@ +/* + * + *  BlueZ - Bluetooth protocol stack for Linux + * + *  Copyright (C) 2000-2001  Qualcomm Incorporated + *  Copyright (C) 2002-2003  Maxim Krasnyansky <maxk@qualcomm.com> + *  Copyright (C) 2002-2008  Marcel Holtmann <marcel@holtmann.org> + * + * + *  This program is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 2 of the License, or + *  (at your option) any later version. + * + *  This program is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with this program; if not, write to the Free Software + *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA + * + */ + +#ifndef __BLUETOOTH_H +#define __BLUETOOTH_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include <stdio.h> +#include <stdint.h> +#include <string.h> +#include <endian.h> +#include <byteswap.h> + +#ifndef AF_BLUETOOTH +#define AF_BLUETOOTH	31 +#define PF_BLUETOOTH	AF_BLUETOOTH +#endif + +#ifndef SOL_BLUETOOTH +#define SOL_BLUETOOTH	274 +#endif + +#define BTPROTO_L2CAP	0 +#define BTPROTO_HCI	1 +#define BTPROTO_SCO	2 +#define BTPROTO_RFCOMM	3 +#define BTPROTO_BNEP	4 +#define BTPROTO_CMTP	5 +#define BTPROTO_HIDP	6 +#define BTPROTO_AVDTP	7 + +#define SOL_HCI		0 +#define SOL_L2CAP	6 +#define SOL_SCO		17 +#define SOL_RFCOMM	18 + +/* Connection and socket states */ +enum { +	BT_CONNECTED = 1, /* Equal to TCP_ESTABLISHED to make net code happy */ +	BT_OPEN, +	BT_BOUND, +	BT_LISTEN, +	BT_CONNECT, +	BT_CONNECT2, +	BT_CONFIG, +	BT_DISCONN, +	BT_CLOSED +}; + +/* Byte order conversions */ +#if __BYTE_ORDER == __LITTLE_ENDIAN +#define htobs(d)  (d) +#define htobl(d)  (d) +#define btohs(d)  (d) +#define btohl(d)  (d) +#elif __BYTE_ORDER == __BIG_ENDIAN +#define htobs(d)  bswap_16(d) +#define htobl(d)  bswap_32(d) +#define btohs(d)  bswap_16(d) +#define btohl(d)  bswap_32(d) +#else +#error "Unknown byte order" +#endif + +/* Bluetooth unaligned access */ +#define bt_get_unaligned(ptr)			\ +({						\ +	struct __attribute__((packed)) {	\ +		typeof(*(ptr)) __v;		\ +	} *__p = (void *) (ptr);		\ +	__p->__v;				\ +}) + +#define bt_put_unaligned(val, ptr)		\ +do {						\ +	struct __attribute__((packed)) {	\ +		typeof(*(ptr)) __v;		\ +	} *__p = (void *) (ptr);		\ +	__p->__v = (val);			\ +} while(0) + +/* BD Address */ +typedef struct { +	uint8_t b[6]; +} __attribute__((packed)) bdaddr_t; + +#define BDADDR_ANY   (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}}) +#define BDADDR_ALL   (&(bdaddr_t) {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}}) +#define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff}}) + +/* Copy, swap, convert BD Address */ +static inline int bacmp(const bdaddr_t *ba1, const bdaddr_t *ba2) +{ +	return memcmp(ba1, ba2, sizeof(bdaddr_t)); +} +static inline void bacpy(bdaddr_t *dst, const bdaddr_t *src) +{ +	memcpy(dst, src, sizeof(bdaddr_t)); +} + +void baswap(bdaddr_t *dst, const bdaddr_t *src); +bdaddr_t *strtoba(const char *str); +char *batostr(const bdaddr_t *ba); +int ba2str(const bdaddr_t *ba, char *str); +int str2ba(const char *str, bdaddr_t *ba); +int ba2oui(const bdaddr_t *ba, char *oui); +int bachk(const char *str); + +int baprintf(const char *format, ...); +int bafprintf(FILE *stream, const char *format, ...); +int basprintf(char *str, const char *format, ...); +int basnprintf(char *str, size_t size, const char *format, ...); + +void *bt_malloc(size_t size); +void bt_free(void *ptr); + +int bt_error(uint16_t code); +char *bt_compidtostr(int id); + +#ifdef __cplusplus +} +#endif + +#endif /* __BLUETOOTH_H */ | 
