天嵌二次封装库使用手册  V1.0
l2cap.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  *
4  * BlueZ - Bluetooth protocol stack for Linux
5  *
6  * Copyright (C) 2000-2001 Qualcomm Incorporated
7  * Copyright (C) 2002-2003 Maxim Krasnyansky <maxk@qualcomm.com>
8  * Copyright (C) 2002-2010 Marcel Holtmann <marcel@holtmann.org>
9  * Copyright (c) 2012 Code Aurora Forum. All rights reserved.
10  *
11  *
12  */
13 
14 #ifndef __L2CAP_H
15 #define __L2CAP_H
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 #include <sys/socket.h>
22 
23 /* L2CAP defaults */
24 #define L2CAP_DEFAULT_MTU 672
25 #define L2CAP_DEFAULT_FLUSH_TO 0xFFFF
26 
27 /* L2CAP socket address */
28 struct sockaddr_l2 {
29  sa_family_t l2_family;
30  unsigned short l2_psm;
31  bdaddr_t l2_bdaddr;
32  unsigned short l2_cid;
33  uint8_t l2_bdaddr_type;
34 };
35 
36 /* L2CAP socket options */
37 #define L2CAP_OPTIONS 0x01
38 struct l2cap_options {
39  uint16_t omtu;
40  uint16_t imtu;
41  uint16_t flush_to;
42  uint8_t mode;
43  uint8_t fcs;
44  uint8_t max_tx;
45  uint16_t txwin_size;
46 };
47 
48 #define L2CAP_CONNINFO 0x02
50  uint16_t hci_handle;
51  uint8_t dev_class[3];
52 };
53 
54 #define L2CAP_LM 0x03
55 #define L2CAP_LM_MASTER 0x0001
56 #define L2CAP_LM_AUTH 0x0002
57 #define L2CAP_LM_ENCRYPT 0x0004
58 #define L2CAP_LM_TRUSTED 0x0008
59 #define L2CAP_LM_RELIABLE 0x0010
60 #define L2CAP_LM_SECURE 0x0020
61 
62 /* L2CAP command codes */
63 #define L2CAP_COMMAND_REJ 0x01
64 #define L2CAP_CONN_REQ 0x02
65 #define L2CAP_CONN_RSP 0x03
66 #define L2CAP_CONF_REQ 0x04
67 #define L2CAP_CONF_RSP 0x05
68 #define L2CAP_DISCONN_REQ 0x06
69 #define L2CAP_DISCONN_RSP 0x07
70 #define L2CAP_ECHO_REQ 0x08
71 #define L2CAP_ECHO_RSP 0x09
72 #define L2CAP_INFO_REQ 0x0a
73 #define L2CAP_INFO_RSP 0x0b
74 #define L2CAP_CREATE_REQ 0x0c
75 #define L2CAP_CREATE_RSP 0x0d
76 #define L2CAP_MOVE_REQ 0x0e
77 #define L2CAP_MOVE_RSP 0x0f
78 #define L2CAP_MOVE_CFM 0x10
79 #define L2CAP_MOVE_CFM_RSP 0x11
80 
81 /* L2CAP extended feature mask */
82 #define L2CAP_FEAT_FLOWCTL 0x00000001
83 #define L2CAP_FEAT_RETRANS 0x00000002
84 #define L2CAP_FEAT_BIDIR_QOS 0x00000004
85 #define L2CAP_FEAT_ERTM 0x00000008
86 #define L2CAP_FEAT_STREAMING 0x00000010
87 #define L2CAP_FEAT_FCS 0x00000020
88 #define L2CAP_FEAT_EXT_FLOW 0x00000040
89 #define L2CAP_FEAT_FIXED_CHAN 0x00000080
90 #define L2CAP_FEAT_EXT_WINDOW 0x00000100
91 #define L2CAP_FEAT_UCD 0x00000200
92 
93 /* L2CAP fixed channels */
94 #define L2CAP_FC_L2CAP 0x02
95 #define L2CAP_FC_CONNLESS 0x04
96 #define L2CAP_FC_A2MP 0x08
97 
98 /* L2CAP structures */
99 typedef struct {
100  uint16_t len;
101  uint16_t cid;
102 } __attribute__ ((packed)) l2cap_hdr;
103 #define L2CAP_HDR_SIZE 4
104 
105 typedef struct {
106  uint8_t code;
107  uint8_t ident;
108  uint16_t len;
109 } __attribute__ ((packed)) l2cap_cmd_hdr;
110 #define L2CAP_CMD_HDR_SIZE 4
111 
112 typedef struct {
113  uint16_t reason;
114 } __attribute__ ((packed)) l2cap_cmd_rej;
115 #define L2CAP_CMD_REJ_SIZE 2
116 
117 typedef struct {
118  uint16_t psm;
119  uint16_t scid;
120 } __attribute__ ((packed)) l2cap_conn_req;
121 #define L2CAP_CONN_REQ_SIZE 4
122 
123 typedef struct {
124  uint16_t dcid;
125  uint16_t scid;
126  uint16_t result;
127  uint16_t status;
128 } __attribute__ ((packed)) l2cap_conn_rsp;
129 #define L2CAP_CONN_RSP_SIZE 8
130 
131 /* connect result */
132 #define L2CAP_CR_SUCCESS 0x0000
133 #define L2CAP_CR_PEND 0x0001
134 #define L2CAP_CR_BAD_PSM 0x0002
135 #define L2CAP_CR_SEC_BLOCK 0x0003
136 #define L2CAP_CR_NO_MEM 0x0004
137 
138 /* connect status */
139 #define L2CAP_CS_NO_INFO 0x0000
140 #define L2CAP_CS_AUTHEN_PEND 0x0001
141 #define L2CAP_CS_AUTHOR_PEND 0x0002
142 
143 typedef struct {
144  uint16_t dcid;
145  uint16_t flags;
146  uint8_t data[0];
147 } __attribute__ ((packed)) l2cap_conf_req;
148 #define L2CAP_CONF_REQ_SIZE 4
149 
150 typedef struct {
151  uint16_t scid;
152  uint16_t flags;
153  uint16_t result;
154  uint8_t data[0];
155 } __attribute__ ((packed)) l2cap_conf_rsp;
156 #define L2CAP_CONF_RSP_SIZE 6
157 
158 #define L2CAP_CONF_SUCCESS 0x0000
159 #define L2CAP_CONF_UNACCEPT 0x0001
160 #define L2CAP_CONF_REJECT 0x0002
161 #define L2CAP_CONF_UNKNOWN 0x0003
162 #define L2CAP_CONF_PENDING 0x0004
163 #define L2CAP_CONF_EFS_REJECT 0x0005
164 
165 typedef struct {
166  uint8_t type;
167  uint8_t len;
168  uint8_t val[0];
169 } __attribute__ ((packed)) l2cap_conf_opt;
170 #define L2CAP_CONF_OPT_SIZE 2
171 
172 #define L2CAP_CONF_MTU 0x01
173 #define L2CAP_CONF_FLUSH_TO 0x02
174 #define L2CAP_CONF_QOS 0x03
175 #define L2CAP_CONF_RFC 0x04
176 #define L2CAP_CONF_FCS 0x05
177 #define L2CAP_CONF_EFS 0x06
178 #define L2CAP_CONF_EWS 0x07
179 
180 #define L2CAP_CONF_MAX_SIZE 22
181 
182 #define L2CAP_MODE_BASIC 0x00
183 #define L2CAP_MODE_RETRANS 0x01
184 #define L2CAP_MODE_FLOWCTL 0x02
185 #define L2CAP_MODE_ERTM 0x03
186 #define L2CAP_MODE_STREAMING 0x04
187 
188 #define L2CAP_SERVTYPE_NOTRAFFIC 0x00
189 #define L2CAP_SERVTYPE_BESTEFFORT 0x01
190 #define L2CAP_SERVTYPE_GUARANTEED 0x02
191 
192 typedef struct {
193  uint16_t dcid;
194  uint16_t scid;
195 } __attribute__ ((packed)) l2cap_disconn_req;
196 #define L2CAP_DISCONN_REQ_SIZE 4
197 
198 typedef struct {
199  uint16_t dcid;
200  uint16_t scid;
201 } __attribute__ ((packed)) l2cap_disconn_rsp;
202 #define L2CAP_DISCONN_RSP_SIZE 4
203 
204 typedef struct {
205  uint16_t type;
206 } __attribute__ ((packed)) l2cap_info_req;
207 #define L2CAP_INFO_REQ_SIZE 2
208 
209 typedef struct {
210  uint16_t type;
211  uint16_t result;
212  uint8_t data[0];
213 } __attribute__ ((packed)) l2cap_info_rsp;
214 #define L2CAP_INFO_RSP_SIZE 4
215 
216 /* info type */
217 #define L2CAP_IT_CL_MTU 0x0001
218 #define L2CAP_IT_FEAT_MASK 0x0002
219 
220 /* info result */
221 #define L2CAP_IR_SUCCESS 0x0000
222 #define L2CAP_IR_NOTSUPP 0x0001
223 
224 typedef struct {
225  uint16_t psm;
226  uint16_t scid;
227  uint8_t id;
228 } __attribute__ ((packed)) l2cap_create_req;
229 #define L2CAP_CREATE_REQ_SIZE 5
230 
231 typedef struct {
232  uint16_t dcid;
233  uint16_t scid;
234  uint16_t result;
235  uint16_t status;
236 } __attribute__ ((packed)) l2cap_create_rsp;
237 #define L2CAP_CREATE_RSP_SIZE 8
238 
239 typedef struct {
240  uint16_t icid;
241  uint8_t id;
242 } __attribute__ ((packed)) l2cap_move_req;
243 #define L2CAP_MOVE_REQ_SIZE 3
244 
245 typedef struct {
246  uint16_t icid;
247  uint16_t result;
248 } __attribute__ ((packed)) l2cap_move_rsp;
249 #define L2CAP_MOVE_RSP_SIZE 4
250 
251 typedef struct {
252  uint16_t icid;
253  uint16_t result;
254 } __attribute__ ((packed)) l2cap_move_cfm;
255 #define L2CAP_MOVE_CFM_SIZE 4
256 
257 typedef struct {
258  uint16_t icid;
259 } __attribute__ ((packed)) l2cap_move_cfm_rsp;
260 #define L2CAP_MOVE_CFM_RSP_SIZE 2
261 
262 #ifdef __cplusplus
263 }
264 #endif
265 
266 #endif /* __L2CAP_H */
Definition: amp.h:35
Definition: l2cap.h:28
Definition: l2cap.h:38
Definition: l2cap.h:49