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

« back to all changes in this revision

Viewing changes to lib/l2cap.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 __L2CAP_H
 
27
#define __L2CAP_H
 
28
 
 
29
#ifdef __cplusplus
 
30
extern "C" {
 
31
#endif
 
32
 
 
33
#include <sys/socket.h>
 
34
 
 
35
/* L2CAP defaults */
 
36
#define L2CAP_DEFAULT_MTU       672
 
37
#define L2CAP_DEFAULT_FLUSH_TO  0xFFFF
 
38
 
 
39
/* L2CAP socket address */
 
40
struct sockaddr_l2 {
 
41
        sa_family_t     l2_family;
 
42
        unsigned short  l2_psm;
 
43
        bdaddr_t        l2_bdaddr;
 
44
        unsigned short  l2_cid;
 
45
};
 
46
 
 
47
/* L2CAP socket options */
 
48
#define L2CAP_OPTIONS   0x01
 
49
struct l2cap_options {
 
50
        uint16_t        omtu;
 
51
        uint16_t        imtu;
 
52
        uint16_t        flush_to;
 
53
        uint8_t         mode;
 
54
        uint8_t         fcs;
 
55
        uint8_t         max_tx;
 
56
        uint16_t        txwin_size;
 
57
};
 
58
 
 
59
#define L2CAP_CONNINFO  0x02
 
60
struct l2cap_conninfo {
 
61
        uint16_t        hci_handle;
 
62
        uint8_t         dev_class[3];
 
63
};
 
64
 
 
65
#define L2CAP_LM        0x03
 
66
#define L2CAP_LM_MASTER         0x0001
 
67
#define L2CAP_LM_AUTH           0x0002
 
68
#define L2CAP_LM_ENCRYPT        0x0004
 
69
#define L2CAP_LM_TRUSTED        0x0008
 
70
#define L2CAP_LM_RELIABLE       0x0010
 
71
#define L2CAP_LM_SECURE         0x0020
 
72
 
 
73
/* L2CAP command codes */
 
74
#define L2CAP_COMMAND_REJ       0x01
 
75
#define L2CAP_CONN_REQ          0x02
 
76
#define L2CAP_CONN_RSP          0x03
 
77
#define L2CAP_CONF_REQ          0x04
 
78
#define L2CAP_CONF_RSP          0x05
 
79
#define L2CAP_DISCONN_REQ       0x06
 
80
#define L2CAP_DISCONN_RSP       0x07
 
81
#define L2CAP_ECHO_REQ          0x08
 
82
#define L2CAP_ECHO_RSP          0x09
 
83
#define L2CAP_INFO_REQ          0x0a
 
84
#define L2CAP_INFO_RSP          0x0b
 
85
 
 
86
/* L2CAP structures */
 
87
typedef struct {
 
88
        uint16_t        len;
 
89
        uint16_t        cid;
 
90
} __attribute__ ((packed)) l2cap_hdr;
 
91
#define L2CAP_HDR_SIZE 4
 
92
 
 
93
typedef struct {
 
94
        uint8_t         code;
 
95
        uint8_t         ident;
 
96
        uint16_t        len;
 
97
} __attribute__ ((packed)) l2cap_cmd_hdr;
 
98
#define L2CAP_CMD_HDR_SIZE 4
 
99
 
 
100
typedef struct {
 
101
        uint16_t        reason;
 
102
} __attribute__ ((packed)) l2cap_cmd_rej;
 
103
#define L2CAP_CMD_REJ_SIZE 2
 
104
 
 
105
typedef struct {
 
106
        uint16_t        psm;
 
107
        uint16_t        scid;
 
108
} __attribute__ ((packed)) l2cap_conn_req;
 
109
#define L2CAP_CONN_REQ_SIZE 4
 
110
 
 
111
typedef struct {
 
112
        uint16_t        dcid;
 
113
        uint16_t        scid;
 
114
        uint16_t        result;
 
115
        uint16_t        status;
 
116
} __attribute__ ((packed)) l2cap_conn_rsp;
 
117
#define L2CAP_CONN_RSP_SIZE 8
 
118
 
 
119
/* connect result */
 
120
#define L2CAP_CR_SUCCESS        0x0000
 
121
#define L2CAP_CR_PEND           0x0001
 
122
#define L2CAP_CR_BAD_PSM        0x0002
 
123
#define L2CAP_CR_SEC_BLOCK      0x0003
 
124
#define L2CAP_CR_NO_MEM         0x0004
 
125
 
 
126
/* connect status */
 
127
#define L2CAP_CS_NO_INFO        0x0000
 
128
#define L2CAP_CS_AUTHEN_PEND    0x0001
 
129
#define L2CAP_CS_AUTHOR_PEND    0x0002
 
130
 
 
131
typedef struct {
 
132
        uint16_t        dcid;
 
133
        uint16_t        flags;
 
134
        uint8_t         data[0];
 
135
} __attribute__ ((packed)) l2cap_conf_req;
 
136
#define L2CAP_CONF_REQ_SIZE 4
 
137
 
 
138
typedef struct {
 
139
        uint16_t        scid;
 
140
        uint16_t        flags;
 
141
        uint16_t        result;
 
142
        uint8_t         data[0];
 
143
} __attribute__ ((packed)) l2cap_conf_rsp;
 
144
#define L2CAP_CONF_RSP_SIZE 6
 
145
 
 
146
#define L2CAP_CONF_SUCCESS      0x0000
 
147
#define L2CAP_CONF_UNACCEPT     0x0001
 
148
#define L2CAP_CONF_REJECT       0x0002
 
149
#define L2CAP_CONF_UNKNOWN      0x0003
 
150
 
 
151
typedef struct {
 
152
        uint8_t         type;
 
153
        uint8_t         len;
 
154
        uint8_t         val[0];
 
155
} __attribute__ ((packed)) l2cap_conf_opt;
 
156
#define L2CAP_CONF_OPT_SIZE 2
 
157
 
 
158
#define L2CAP_CONF_MTU          0x01
 
159
#define L2CAP_CONF_FLUSH_TO     0x02
 
160
#define L2CAP_CONF_QOS          0x03
 
161
#define L2CAP_CONF_RFC          0x04
 
162
#define L2CAP_CONF_FCS          0x05
 
163
 
 
164
#define L2CAP_CONF_MAX_SIZE     22
 
165
 
 
166
#define L2CAP_MODE_BASIC        0x00
 
167
#define L2CAP_MODE_RETRANS      0x01
 
168
#define L2CAP_MODE_FLOWCTL      0x02
 
169
#define L2CAP_MODE_ERTM         0x03
 
170
#define L2CAP_MODE_STREAMING    0x04
 
171
 
 
172
typedef struct {
 
173
        uint16_t        dcid;
 
174
        uint16_t        scid;
 
175
} __attribute__ ((packed)) l2cap_disconn_req;
 
176
#define L2CAP_DISCONN_REQ_SIZE 4
 
177
 
 
178
typedef struct {
 
179
        uint16_t        dcid;
 
180
        uint16_t        scid;
 
181
} __attribute__ ((packed)) l2cap_disconn_rsp;
 
182
#define L2CAP_DISCONN_RSP_SIZE 4
 
183
 
 
184
typedef struct {
 
185
        uint16_t        type;
 
186
} __attribute__ ((packed)) l2cap_info_req;
 
187
#define L2CAP_INFO_REQ_SIZE 2
 
188
 
 
189
typedef struct {
 
190
        uint16_t        type;
 
191
        uint16_t        result;
 
192
        uint8_t         data[0];
 
193
} __attribute__ ((packed)) l2cap_info_rsp;
 
194
#define L2CAP_INFO_RSP_SIZE 4
 
195
 
 
196
/* info type */
 
197
#define L2CAP_IT_CL_MTU         0x0001
 
198
#define L2CAP_IT_FEAT_MASK      0x0002
 
199
 
 
200
/* info result */
 
201
#define L2CAP_IR_SUCCESS        0x0000
 
202
#define L2CAP_IR_NOTSUPP        0x0001
 
203
 
 
204
#ifdef __cplusplus
 
205
}
 
206
#endif
 
207
 
 
208
#endif /* __L2CAP_H */