CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
orangepi-xunlong

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.

GitHub Repository: orangepi-xunlong/orangepi-build
Path: blob/next/external/cache/sources/hcitools/lib/bluetooth/l2cap.h
Views: 3960
1
/*
2
*
3
* BlueZ - Bluetooth protocol stack for Linux
4
*
5
* Copyright (C) 2000-2001 Qualcomm Incorporated
6
* Copyright (C) 2002-2003 Maxim Krasnyansky <[email protected]>
7
* Copyright (C) 2002-2010 Marcel Holtmann <[email protected]>
8
* Copyright (c) 2012 Code Aurora Forum. All rights reserved.
9
*
10
*
11
* This program is free software; you can redistribute it and/or modify
12
* it under the terms of the GNU General Public License as published by
13
* the Free Software Foundation; either version 2 of the License, or
14
* (at your option) any later version.
15
*
16
* This program is distributed in the hope that it will be useful,
17
* but WITHOUT ANY WARRANTY; without even the implied warranty of
18
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
* GNU General Public License for more details.
20
*
21
* You should have received a copy of the GNU General Public License
22
* along with this program; if not, write to the Free Software
23
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24
*
25
*/
26
27
#ifndef __L2CAP_H
28
#define __L2CAP_H
29
30
#ifdef __cplusplus
31
extern "C" {
32
#endif
33
34
#include <sys/socket.h>
35
36
/* L2CAP defaults */
37
#define L2CAP_DEFAULT_MTU 672
38
#define L2CAP_DEFAULT_FLUSH_TO 0xFFFF
39
40
/* L2CAP socket address */
41
struct sockaddr_l2 {
42
sa_family_t l2_family;
43
unsigned short l2_psm;
44
bdaddr_t l2_bdaddr;
45
unsigned short l2_cid;
46
uint8_t l2_bdaddr_type;
47
};
48
49
/* L2CAP socket options */
50
#define L2CAP_OPTIONS 0x01
51
struct l2cap_options {
52
uint16_t omtu;
53
uint16_t imtu;
54
uint16_t flush_to;
55
uint8_t mode;
56
uint8_t fcs;
57
uint8_t max_tx;
58
uint16_t txwin_size;
59
};
60
61
#define L2CAP_CONNINFO 0x02
62
struct l2cap_conninfo {
63
uint16_t hci_handle;
64
uint8_t dev_class[3];
65
};
66
67
#define L2CAP_LM 0x03
68
#define L2CAP_LM_MASTER 0x0001
69
#define L2CAP_LM_AUTH 0x0002
70
#define L2CAP_LM_ENCRYPT 0x0004
71
#define L2CAP_LM_TRUSTED 0x0008
72
#define L2CAP_LM_RELIABLE 0x0010
73
#define L2CAP_LM_SECURE 0x0020
74
75
/* L2CAP command codes */
76
#define L2CAP_COMMAND_REJ 0x01
77
#define L2CAP_CONN_REQ 0x02
78
#define L2CAP_CONN_RSP 0x03
79
#define L2CAP_CONF_REQ 0x04
80
#define L2CAP_CONF_RSP 0x05
81
#define L2CAP_DISCONN_REQ 0x06
82
#define L2CAP_DISCONN_RSP 0x07
83
#define L2CAP_ECHO_REQ 0x08
84
#define L2CAP_ECHO_RSP 0x09
85
#define L2CAP_INFO_REQ 0x0a
86
#define L2CAP_INFO_RSP 0x0b
87
#define L2CAP_CREATE_REQ 0x0c
88
#define L2CAP_CREATE_RSP 0x0d
89
#define L2CAP_MOVE_REQ 0x0e
90
#define L2CAP_MOVE_RSP 0x0f
91
#define L2CAP_MOVE_CFM 0x10
92
#define L2CAP_MOVE_CFM_RSP 0x11
93
94
/* L2CAP extended feature mask */
95
#define L2CAP_FEAT_FLOWCTL 0x00000001
96
#define L2CAP_FEAT_RETRANS 0x00000002
97
#define L2CAP_FEAT_BIDIR_QOS 0x00000004
98
#define L2CAP_FEAT_ERTM 0x00000008
99
#define L2CAP_FEAT_STREAMING 0x00000010
100
#define L2CAP_FEAT_FCS 0x00000020
101
#define L2CAP_FEAT_EXT_FLOW 0x00000040
102
#define L2CAP_FEAT_FIXED_CHAN 0x00000080
103
#define L2CAP_FEAT_EXT_WINDOW 0x00000100
104
#define L2CAP_FEAT_UCD 0x00000200
105
106
/* L2CAP fixed channels */
107
#define L2CAP_FC_L2CAP 0x02
108
#define L2CAP_FC_CONNLESS 0x04
109
#define L2CAP_FC_A2MP 0x08
110
111
/* L2CAP structures */
112
typedef struct {
113
uint16_t len;
114
uint16_t cid;
115
} __attribute__ ((packed)) l2cap_hdr;
116
#define L2CAP_HDR_SIZE 4
117
118
typedef struct {
119
uint8_t code;
120
uint8_t ident;
121
uint16_t len;
122
} __attribute__ ((packed)) l2cap_cmd_hdr;
123
#define L2CAP_CMD_HDR_SIZE 4
124
125
typedef struct {
126
uint16_t reason;
127
} __attribute__ ((packed)) l2cap_cmd_rej;
128
#define L2CAP_CMD_REJ_SIZE 2
129
130
typedef struct {
131
uint16_t psm;
132
uint16_t scid;
133
} __attribute__ ((packed)) l2cap_conn_req;
134
#define L2CAP_CONN_REQ_SIZE 4
135
136
typedef struct {
137
uint16_t dcid;
138
uint16_t scid;
139
uint16_t result;
140
uint16_t status;
141
} __attribute__ ((packed)) l2cap_conn_rsp;
142
#define L2CAP_CONN_RSP_SIZE 8
143
144
/* connect result */
145
#define L2CAP_CR_SUCCESS 0x0000
146
#define L2CAP_CR_PEND 0x0001
147
#define L2CAP_CR_BAD_PSM 0x0002
148
#define L2CAP_CR_SEC_BLOCK 0x0003
149
#define L2CAP_CR_NO_MEM 0x0004
150
151
/* connect status */
152
#define L2CAP_CS_NO_INFO 0x0000
153
#define L2CAP_CS_AUTHEN_PEND 0x0001
154
#define L2CAP_CS_AUTHOR_PEND 0x0002
155
156
typedef struct {
157
uint16_t dcid;
158
uint16_t flags;
159
uint8_t data[0];
160
} __attribute__ ((packed)) l2cap_conf_req;
161
#define L2CAP_CONF_REQ_SIZE 4
162
163
typedef struct {
164
uint16_t scid;
165
uint16_t flags;
166
uint16_t result;
167
uint8_t data[0];
168
} __attribute__ ((packed)) l2cap_conf_rsp;
169
#define L2CAP_CONF_RSP_SIZE 6
170
171
#define L2CAP_CONF_SUCCESS 0x0000
172
#define L2CAP_CONF_UNACCEPT 0x0001
173
#define L2CAP_CONF_REJECT 0x0002
174
#define L2CAP_CONF_UNKNOWN 0x0003
175
#define L2CAP_CONF_PENDING 0x0004
176
#define L2CAP_CONF_EFS_REJECT 0x0005
177
178
typedef struct {
179
uint8_t type;
180
uint8_t len;
181
uint8_t val[0];
182
} __attribute__ ((packed)) l2cap_conf_opt;
183
#define L2CAP_CONF_OPT_SIZE 2
184
185
#define L2CAP_CONF_MTU 0x01
186
#define L2CAP_CONF_FLUSH_TO 0x02
187
#define L2CAP_CONF_QOS 0x03
188
#define L2CAP_CONF_RFC 0x04
189
#define L2CAP_CONF_FCS 0x05
190
#define L2CAP_CONF_EFS 0x06
191
#define L2CAP_CONF_EWS 0x07
192
193
#define L2CAP_CONF_MAX_SIZE 22
194
195
#define L2CAP_MODE_BASIC 0x00
196
#define L2CAP_MODE_RETRANS 0x01
197
#define L2CAP_MODE_FLOWCTL 0x02
198
#define L2CAP_MODE_ERTM 0x03
199
#define L2CAP_MODE_STREAMING 0x04
200
201
#define L2CAP_SERVTYPE_NOTRAFFIC 0x00
202
#define L2CAP_SERVTYPE_BESTEFFORT 0x01
203
#define L2CAP_SERVTYPE_GUARANTEED 0x02
204
205
typedef struct {
206
uint16_t dcid;
207
uint16_t scid;
208
} __attribute__ ((packed)) l2cap_disconn_req;
209
#define L2CAP_DISCONN_REQ_SIZE 4
210
211
typedef struct {
212
uint16_t dcid;
213
uint16_t scid;
214
} __attribute__ ((packed)) l2cap_disconn_rsp;
215
#define L2CAP_DISCONN_RSP_SIZE 4
216
217
typedef struct {
218
uint16_t type;
219
} __attribute__ ((packed)) l2cap_info_req;
220
#define L2CAP_INFO_REQ_SIZE 2
221
222
typedef struct {
223
uint16_t type;
224
uint16_t result;
225
uint8_t data[0];
226
} __attribute__ ((packed)) l2cap_info_rsp;
227
#define L2CAP_INFO_RSP_SIZE 4
228
229
/* info type */
230
#define L2CAP_IT_CL_MTU 0x0001
231
#define L2CAP_IT_FEAT_MASK 0x0002
232
233
/* info result */
234
#define L2CAP_IR_SUCCESS 0x0000
235
#define L2CAP_IR_NOTSUPP 0x0001
236
237
typedef struct {
238
uint16_t psm;
239
uint16_t scid;
240
uint8_t id;
241
} __attribute__ ((packed)) l2cap_create_req;
242
#define L2CAP_CREATE_REQ_SIZE 5
243
244
typedef struct {
245
uint16_t dcid;
246
uint16_t scid;
247
uint16_t result;
248
uint16_t status;
249
} __attribute__ ((packed)) l2cap_create_rsp;
250
#define L2CAP_CREATE_RSP_SIZE 8
251
252
typedef struct {
253
uint16_t icid;
254
uint8_t id;
255
} __attribute__ ((packed)) l2cap_move_req;
256
#define L2CAP_MOVE_REQ_SIZE 3
257
258
typedef struct {
259
uint16_t icid;
260
uint16_t result;
261
} __attribute__ ((packed)) l2cap_move_rsp;
262
#define L2CAP_MOVE_RSP_SIZE 4
263
264
typedef struct {
265
uint16_t icid;
266
uint16_t result;
267
} __attribute__ ((packed)) l2cap_move_cfm;
268
#define L2CAP_MOVE_CFM_SIZE 4
269
270
typedef struct {
271
uint16_t icid;
272
} __attribute__ ((packed)) l2cap_move_cfm_rsp;
273
#define L2CAP_MOVE_CFM_RSP_SIZE 2
274
275
#ifdef __cplusplus
276
}
277
#endif
278
279
#endif /* __L2CAP_H */
280
281