~ubuntu-branches/ubuntu/wily/bluez/wily

« back to all changes in this revision

Viewing changes to lib/bluetooth.h

ImportĀ upstreamĀ versionĀ 4.81

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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@qualcomm.com>
 
7
 *  Copyright (C) 2002-2010  Marcel Holtmann <marcel@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 */