ble_gatt_client
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
l2cap.h
Go to the documentation of this file.
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  * 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
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 */
enum att_op_type type
Definition: att.c:141
uint16_t icid
Definition: l2cap.h:253
uint8_t len
Definition: l2cap.h:180
uint16_t dcid
Definition: l2cap.h:137
uint16_t reason
Definition: l2cap.h:126
uint8_t l2_bdaddr_type
Definition: l2cap.h:46
uint16_t status
Definition: l2cap.h:140
uint16_t psm
Definition: l2cap.h:131
uint8_t dev_class[3]
Definition: l2cap.h:64
unsigned short l2_psm
Definition: l2cap.h:43
uint16_t flags
Definition: l2cap.h:158
unsigned short l2_cid
Definition: l2cap.h:45
uint16_t cid
Definition: l2cap.h:114
uint8_t fcs
Definition: l2cap.h:56
uint8_t max_tx
Definition: l2cap.h:57
bdaddr_t l2_bdaddr
Definition: l2cap.h:44
uint16_t result
Definition: l2cap.h:139
uint16_t omtu
Definition: l2cap.h:52
uint16_t flush_to
Definition: l2cap.h:54
uint16_t scid
Definition: l2cap.h:132
uint16_t len
Definition: l2cap.h:113
uint8_t ident
Definition: l2cap.h:120
sa_family_t l2_family
Definition: l2cap.h:42
uint8_t mode
Definition: l2cap.h:55
uint16_t hci_handle
Definition: l2cap.h:63
uint8_t id
Definition: l2cap.h:240
uint16_t txwin_size
Definition: l2cap.h:58
uint16_t imtu
Definition: l2cap.h:53