xref: /btstack/src/l2cap.c (revision 81a22226af4ae182ab27c36250eb1dfeca667c08)
1 /*
2  * Copyright (C) 2014 BlueKitchen GmbH
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. Neither the name of the copyright holders nor the names of
14  *    contributors may be used to endorse or promote products derived
15  *    from this software without specific prior written permission.
16  * 4. Any redistribution, use, or modification is done solely for
17  *    personal benefit and not for any commercial purpose or for
18  *    monetary gain.
19  *
20  * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
21  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
24  * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
27  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
30  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31  * SUCH DAMAGE.
32  *
33  * Please inquire about commercial licensing options at
34  * [email protected]
35  *
36  */
37 
38 #define BTSTACK_FILE__ "l2cap.c"
39 
40 /*
41  *  l2cap.c
42  *  Logical Link Control and Adaption Protocol (L2CAP)
43  */
44 
45 #include "l2cap.h"
46 #include "hci.h"
47 #include "hci_dump.h"
48 #include "bluetooth_sdp.h"
49 #include "bluetooth_psm.h"
50 #include "btstack_bool.h"
51 #include "btstack_debug.h"
52 #include "btstack_event.h"
53 #include "btstack_memory.h"
54 
55 #ifdef ENABLE_LE_DATA_CHANNELS
56 // TODO avoid dependency on higher layer: used to trigger pairing for outgoing connections
57 #include "ble/sm.h"
58 #endif
59 
60 #include <stdarg.h>
61 #include <string.h>
62 
63 /*
64  * @brief L2CAP Supervisory function in S-Frames
65  */
66 typedef enum {
67     L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY = 0,
68     L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT,
69     L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY,
70     L2CAP_SUPERVISORY_FUNCTION_SREJ_SELECTIVE_REJECT
71 } l2cap_supervisory_function_t;
72 
73 /**
74  * @brief L2CAP Information Types used in Information Request & Response
75  */
76 typedef enum {
77   L2CAP_INFO_TYPE_CONNECTIONLESS_MTU = 1,
78   L2CAP_INFO_TYPE_EXTENDED_FEATURES_SUPPORTED,
79   L2CAP_INFO_TYPE_FIXED_CHANNELS_SUPPORTED,
80 } l2cap_info_type_t;
81 
82 /**
83  * @brief L2CAP Configuration Option Types used in Configurateion Request & Response
84  */
85 typedef enum {
86   L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT = 1,
87   L2CAP_CONFIG_OPTION_TYPE_FLUSH_TIMEOUT,
88   L2CAP_CONFIG_OPTION_TYPE_QUALITY_OF_SERVICE,
89   L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL,
90   L2CAP_CONFIG_OPTION_TYPE_FRAME_CHECK_SEQUENCE,
91   L2CAP_CONFIG_OPTION_TYPE_EXTENDED_FLOW_SPECIFICATION,
92   L2CAP_CONFIG_OPTION_TYPE_EXTENDED_WINDOW_SIZE,
93 } l2cap_config_option_type_t;
94 
95 
96 #define L2CAP_SIG_ID_INVALID 0
97 
98 // size of HCI ACL + L2CAP Header for regular data packets (8)
99 #define COMPLETE_L2CAP_HEADER (HCI_ACL_HEADER_SIZE + L2CAP_HEADER_SIZE)
100 
101 // L2CAP Configuration Result Codes
102 #define L2CAP_CONF_RESULT_SUCCESS                  0x0000
103 #define L2CAP_CONF_RESULT_UNACCEPTABLE_PARAMETERS  0x0001
104 #define L2CAP_CONF_RESULT_REJECT                   0x0002
105 #define L2CAP_CONF_RESULT_UNKNOWN_OPTIONS          0x0003
106 #define L2CAP_CONF_RESULT_PENDING                  0x0004
107 #define L2CAP_CONF_RESULT_FLOW_SPEC_REJECTED       0x0005
108 
109 // L2CAP Reject Result Codes
110 #define L2CAP_REJ_CMD_UNKNOWN                      0x0000
111 
112 // Response Timeout eXpired
113 #define L2CAP_RTX_TIMEOUT_MS   10000
114 
115 // Extended Response Timeout eXpired
116 #define L2CAP_ERTX_TIMEOUT_MS 120000
117 
118 // nr of buffered acl packets in outgoing queue to get max performance
119 #define NR_BUFFERED_ACL_PACKETS 3
120 
121 // used to cache l2cap rejects, echo, and informational requests
122 #define NR_PENDING_SIGNALING_RESPONSES 3
123 
124 // nr of credits provided to remote if credits fall below watermark
125 #define L2CAP_LE_DATA_CHANNELS_AUTOMATIC_CREDITS_WATERMARK 5
126 #define L2CAP_LE_DATA_CHANNELS_AUTOMATIC_CREDITS_INCREMENT 5
127 
128 // offsets for L2CAP SIGNALING COMMANDS
129 #define L2CAP_SIGNALING_COMMAND_CODE_OFFSET   0
130 #define L2CAP_SIGNALING_COMMAND_SIGID_OFFSET  1
131 #define L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET 2
132 #define L2CAP_SIGNALING_COMMAND_DATA_OFFSET   4
133 
134 #if defined(ENABLE_LE_DATA_CHANNELS) || defined(ENABLE_CLASSIC)
135 #define L2CAP_USES_CHANNELS
136 #endif
137 
138 // prototypes
139 static void l2cap_run(void);
140 static void l2cap_hci_event_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size);
141 static void l2cap_acl_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size );
142 static void l2cap_notify_channel_can_send(void);
143 static void l2cap_emit_can_send_now(btstack_packet_handler_t packet_handler, uint16_t channel);
144 static uint8_t  l2cap_next_sig_id(void);
145 static l2cap_fixed_channel_t * l2cap_fixed_channel_for_channel_id(uint16_t local_cid);
146 #ifdef ENABLE_CLASSIC
147 static int l2cap_security_level_0_allowed_for_PSM(uint16_t psm);
148 static void l2cap_handle_remote_supported_features_received(l2cap_channel_t * channel);
149 static void l2cap_handle_connection_complete(hci_con_handle_t con_handle, l2cap_channel_t * channel);
150 static void l2cap_finialize_channel_close(l2cap_channel_t *channel);
151 static inline l2cap_service_t * l2cap_get_service(uint16_t psm);
152 static void l2cap_emit_channel_opened(l2cap_channel_t *channel, uint8_t status);
153 static void l2cap_emit_channel_closed(l2cap_channel_t *channel);
154 static void l2cap_emit_incoming_connection(l2cap_channel_t *channel);
155 static int  l2cap_channel_ready_for_open(l2cap_channel_t *channel);
156 #endif
157 #ifdef ENABLE_LE_DATA_CHANNELS
158 static void l2cap_emit_le_channel_opened(l2cap_channel_t *channel, uint8_t status);
159 static void l2cap_emit_le_channel_closed(l2cap_channel_t * channel);
160 static void l2cap_emit_le_incoming_connection(l2cap_channel_t *channel);
161 static void l2cap_le_notify_channel_can_send(l2cap_channel_t *channel);
162 static void l2cap_le_finialize_channel_close(l2cap_channel_t *channel);
163 static void l2cap_le_send_pdu(l2cap_channel_t *channel);
164 static inline l2cap_service_t * l2cap_le_get_service(uint16_t psm);
165 #endif
166 #ifdef L2CAP_USES_CHANNELS
167 static uint16_t l2cap_next_local_cid(void);
168 static l2cap_channel_t * l2cap_get_channel_for_local_cid(uint16_t local_cid);
169 static void l2cap_emit_simple_event_with_cid(l2cap_channel_t * channel, uint8_t event_code);
170 static void l2cap_dispatch_to_channel(l2cap_channel_t *channel, uint8_t type, uint8_t * data, uint16_t size);
171 static l2cap_channel_t * l2cap_create_channel_entry(btstack_packet_handler_t packet_handler, l2cap_channel_type_t channel_type, bd_addr_t address, bd_addr_type_t address_type,
172         uint16_t psm, uint16_t local_mtu, gap_security_level_t security_level);
173 static void l2cap_free_channel_entry(l2cap_channel_t * channel);
174 #endif
175 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
176 static void l2cap_ertm_notify_channel_can_send(l2cap_channel_t * channel);
177 static void l2cap_ertm_monitor_timeout_callback(btstack_timer_source_t * ts);
178 static void l2cap_ertm_retransmission_timeout_callback(btstack_timer_source_t * ts);
179 #endif
180 
181 // l2cap_fixed_channel_t entries
182 #ifdef ENABLE_BLE
183 static l2cap_fixed_channel_t l2cap_fixed_channel_att;
184 static l2cap_fixed_channel_t l2cap_fixed_channel_sm;
185 #endif
186 #ifdef ENABLE_CLASSIC
187 static l2cap_fixed_channel_t l2cap_fixed_channel_connectionless;
188 #endif
189 
190 #ifdef ENABLE_CLASSIC
191 static btstack_linked_list_t l2cap_services;
192 static uint8_t l2cap_require_security_level2_for_outgoing_sdp;
193 static bd_addr_t l2cap_outgoing_classic_addr;
194 #endif
195 
196 #ifdef ENABLE_LE_DATA_CHANNELS
197 static btstack_linked_list_t l2cap_le_services;
198 #endif
199 
200 // single list of channels for Classic Channels, LE Data Channels, Classic Connectionless, ATT, and SM
201 static btstack_linked_list_t l2cap_channels;
202 #ifdef L2CAP_USES_CHANNELS
203 // next channel id for new connections
204 static uint16_t  l2cap_local_source_cid;
205 #endif
206 // next signaling sequence number
207 static uint8_t   l2cap_sig_seq_nr;
208 
209 // used to cache l2cap rejects, echo, and informational requests
210 static l2cap_signaling_response_t l2cap_signaling_responses[NR_PENDING_SIGNALING_RESPONSES];
211 static int l2cap_signaling_responses_pending;
212 static btstack_packet_callback_registration_t l2cap_hci_event_callback_registration;
213 
214 #ifdef ENABLE_BLE
215 // only used for connection parameter update events
216 static btstack_packet_handler_t l2cap_event_packet_handler;
217 static uint16_t l2cap_le_custom_max_mtu;
218 #endif
219 
220 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
221 
222 // enable for testing
223 // #define L2CAP_ERTM_SIMULATE_FCS_ERROR_INTERVAL 16
224 
225 /*
226  * CRC lookup table for generator polynom D^16 + D^15 + D^2 + 1
227  */
228 static const uint16_t crc16_table[256] = {
229     0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440,
230     0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841,
231     0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41,
232     0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040,
233     0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441,
234     0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41, 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840,
235     0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40,
236     0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041,
237     0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441,
238     0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840,
239     0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40,
240     0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041,
241     0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440,
242     0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841,
243     0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41,
244     0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040,
245 };
246 
247 static uint16_t crc16_calc(uint8_t * data, uint16_t len){
248     uint16_t crc = 0;   // initial value = 0
249     while (len--){
250         crc = (crc >> 8) ^ crc16_table[ (crc ^ ((uint16_t) *data++)) & 0x00FF ];
251     }
252     return crc;
253 }
254 
255 static inline uint16_t l2cap_encanced_control_field_for_information_frame(uint8_t tx_seq, int final, uint8_t req_seq, l2cap_segmentation_and_reassembly_t sar){
256     return (((uint16_t) sar) << 14) | (req_seq << 8) | (final << 7) | (tx_seq << 1) | 0;
257 }
258 
259 static inline uint16_t l2cap_encanced_control_field_for_supevisor_frame(l2cap_supervisory_function_t supervisory_function, int poll, int final, uint8_t req_seq){
260     return (req_seq << 8) | (final << 7) | (poll << 4) | (((int) supervisory_function) << 2) | 1;
261 }
262 
263 static int l2cap_next_ertm_seq_nr(int seq_nr){
264     return (seq_nr + 1) & 0x3f;
265 }
266 
267 static int l2cap_ertm_can_store_packet_now(l2cap_channel_t * channel){
268     // get num free tx buffers
269     int num_free_tx_buffers = channel->num_tx_buffers - channel->num_stored_tx_frames;
270     // calculate num tx buffers for remote MTU
271     int num_tx_buffers_for_max_remote_mtu;
272     uint16_t effective_mps = btstack_min(channel->remote_mps, channel->local_mps);
273     if (channel->remote_mtu <= effective_mps){
274         // MTU fits into single packet
275         num_tx_buffers_for_max_remote_mtu = 1;
276     } else {
277         // include SDU Length
278         num_tx_buffers_for_max_remote_mtu = (channel->remote_mtu + 2 + (effective_mps - 1)) / effective_mps;
279     }
280     log_debug("num_free_tx_buffers %u, num_tx_buffers_for_max_remote_mtu %u", num_free_tx_buffers, num_tx_buffers_for_max_remote_mtu);
281     return num_tx_buffers_for_max_remote_mtu <= num_free_tx_buffers;
282 }
283 
284 static void l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel_t * l2cap_channel){
285     log_info("Retransmit unacknowleged frames");
286     l2cap_channel->unacked_frames = 0;;
287     l2cap_channel->tx_send_index  = l2cap_channel->tx_read_index;
288 }
289 
290 static void l2cap_ertm_next_tx_write_index(l2cap_channel_t * channel){
291     channel->tx_write_index++;
292     if (channel->tx_write_index < channel->num_tx_buffers) return;
293     channel->tx_write_index = 0;
294 }
295 
296 static void l2cap_ertm_start_monitor_timer(l2cap_channel_t * channel){
297     log_info("Start Monitor timer");
298     btstack_run_loop_remove_timer(&channel->monitor_timer);
299     btstack_run_loop_set_timer_handler(&channel->monitor_timer, &l2cap_ertm_monitor_timeout_callback);
300     btstack_run_loop_set_timer_context(&channel->monitor_timer, channel);
301     btstack_run_loop_set_timer(&channel->monitor_timer, channel->local_monitor_timeout_ms);
302     btstack_run_loop_add_timer(&channel->monitor_timer);
303 }
304 
305 static void l2cap_ertm_stop_monitor_timer(l2cap_channel_t * channel){
306     log_info("Stop Monitor timer");
307     btstack_run_loop_remove_timer(&channel->monitor_timer);
308 }
309 
310 static void l2cap_ertm_start_retransmission_timer(l2cap_channel_t * channel){
311     log_info("Start Retransmission timer");
312     btstack_run_loop_remove_timer(&channel->retransmission_timer);
313     btstack_run_loop_set_timer_handler(&channel->retransmission_timer, &l2cap_ertm_retransmission_timeout_callback);
314     btstack_run_loop_set_timer_context(&channel->retransmission_timer, channel);
315     btstack_run_loop_set_timer(&channel->retransmission_timer, channel->local_retransmission_timeout_ms);
316     btstack_run_loop_add_timer(&channel->retransmission_timer);
317 }
318 
319 static void l2cap_ertm_stop_retransmission_timer(l2cap_channel_t * l2cap_channel){
320     log_info("Stop Retransmission timer");
321     btstack_run_loop_remove_timer(&l2cap_channel->retransmission_timer);
322 }
323 
324 static void l2cap_ertm_monitor_timeout_callback(btstack_timer_source_t * ts){
325     log_info("Monitor timeout");
326     l2cap_channel_t * l2cap_channel = (l2cap_channel_t *) btstack_run_loop_get_timer_context(ts);
327 
328     // TODO: we assume that it's the oldest packet
329     l2cap_ertm_tx_packet_state_t * tx_state;
330     tx_state = &l2cap_channel->tx_packets_state[l2cap_channel->tx_read_index];
331 
332     // check retry count
333     if (tx_state->retry_count < l2cap_channel->remote_max_transmit){
334         // increment retry count
335         tx_state->retry_count++;
336 
337         // start retransmit
338         l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel);
339 
340         // start monitor timer
341         l2cap_ertm_start_monitor_timer(l2cap_channel);
342 
343         // send RR/P=1
344         l2cap_channel->send_supervisor_frame_receiver_ready_poll = 1;
345     } else {
346         log_info("Monitor timer expired & retry count >= max transmit -> disconnect");
347         l2cap_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
348     }
349     l2cap_run();
350 }
351 
352 static void l2cap_ertm_retransmission_timeout_callback(btstack_timer_source_t * ts){
353     log_info("Retransmission timeout");
354     l2cap_channel_t * l2cap_channel = (l2cap_channel_t *) btstack_run_loop_get_timer_context(ts);
355 
356     // TODO: we assume that it's the oldest packet
357     l2cap_ertm_tx_packet_state_t * tx_state;
358     tx_state = &l2cap_channel->tx_packets_state[l2cap_channel->tx_read_index];
359 
360     // set retry count = 1
361     tx_state->retry_count = 1;
362 
363     // start retransmit
364     l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel);
365 
366     // start monitor timer
367     l2cap_ertm_start_monitor_timer(l2cap_channel);
368 
369     // send RR/P=1
370     l2cap_channel->send_supervisor_frame_receiver_ready_poll = 1;
371     l2cap_run();
372 }
373 
374 static int l2cap_ertm_send_information_frame(l2cap_channel_t * channel, int index, int final){
375     l2cap_ertm_tx_packet_state_t * tx_state = &channel->tx_packets_state[index];
376     hci_reserve_packet_buffer();
377     uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
378     uint16_t control = l2cap_encanced_control_field_for_information_frame(tx_state->tx_seq, final, channel->req_seq, tx_state->sar);
379     log_info("I-Frame: control 0x%04x", control);
380     little_endian_store_16(acl_buffer, 8, control);
381     (void)memcpy(&acl_buffer[8 + 2],
382                  &channel->tx_packets_data[index * channel->local_mps],
383                  tx_state->len);
384     // (re-)start retransmission timer on
385     l2cap_ertm_start_retransmission_timer(channel);
386     // send
387     return l2cap_send_prepared(channel->local_cid, 2 + tx_state->len);
388 }
389 
390 static void l2cap_ertm_store_fragment(l2cap_channel_t * channel, l2cap_segmentation_and_reassembly_t sar, uint16_t sdu_length, uint8_t * data, uint16_t len){
391     // get next index for storing packets
392     int index = channel->tx_write_index;
393 
394     l2cap_ertm_tx_packet_state_t * tx_state = &channel->tx_packets_state[index];
395     tx_state->tx_seq = channel->next_tx_seq;
396     tx_state->sar = sar;
397     tx_state->retry_count = 0;
398 
399     uint8_t * tx_packet = &channel->tx_packets_data[index * channel->local_mps];
400     log_debug("index %u, local mps %u, remote mps %u, packet tx %p, len %u", index, channel->local_mps, channel->remote_mps, tx_packet, len);
401     int pos = 0;
402     if (sar == L2CAP_SEGMENTATION_AND_REASSEMBLY_START_OF_L2CAP_SDU){
403         little_endian_store_16(tx_packet, 0, sdu_length);
404         pos += 2;
405     }
406     (void)memcpy(&tx_packet[pos], data, len);
407     tx_state->len = pos + len;
408 
409     // update
410     channel->num_stored_tx_frames++;
411     channel->next_tx_seq = l2cap_next_ertm_seq_nr(channel->next_tx_seq);
412     l2cap_ertm_next_tx_write_index(channel);
413 
414     log_info("l2cap_ertm_store_fragment: tx_read_index %u, tx_write_index %u, num stored %u", channel->tx_read_index, channel->tx_write_index, channel->num_stored_tx_frames);
415 
416 }
417 
418 static int l2cap_ertm_send(l2cap_channel_t * channel, uint8_t * data, uint16_t len){
419     if (len > channel->remote_mtu){
420         log_error("l2cap_ertm_send cid 0x%02x, data length exceeds remote MTU.", channel->local_cid);
421         return L2CAP_DATA_LEN_EXCEEDS_REMOTE_MTU;
422     }
423 
424     if (!l2cap_ertm_can_store_packet_now(channel)){
425         log_error("l2cap_ertm_send cid 0x%02x, fragment store full", channel->local_cid);
426         return BTSTACK_ACL_BUFFERS_FULL;
427     }
428 
429     // check if it needs to get fragmented
430     uint16_t effective_mps = btstack_min(channel->remote_mps, channel->local_mps);
431     if (len > effective_mps){
432         // fragmentation needed.
433         l2cap_segmentation_and_reassembly_t sar =  L2CAP_SEGMENTATION_AND_REASSEMBLY_START_OF_L2CAP_SDU;
434         int chunk_len;
435         while (len){
436             switch (sar){
437                 case L2CAP_SEGMENTATION_AND_REASSEMBLY_START_OF_L2CAP_SDU:
438                     chunk_len = effective_mps - 2;    // sdu_length
439                     l2cap_ertm_store_fragment(channel, sar, len, data, chunk_len);
440                     len -= chunk_len;
441                     sar = L2CAP_SEGMENTATION_AND_REASSEMBLY_CONTINUATION_OF_L2CAP_SDU;
442                     break;
443                 case L2CAP_SEGMENTATION_AND_REASSEMBLY_CONTINUATION_OF_L2CAP_SDU:
444                     chunk_len = effective_mps;
445                     if (chunk_len >= len){
446                         sar = L2CAP_SEGMENTATION_AND_REASSEMBLY_END_OF_L2CAP_SDU;
447                         chunk_len = len;
448                     }
449                     l2cap_ertm_store_fragment(channel, sar, len, data, chunk_len);
450                     len -= chunk_len;
451                     break;
452                 default:
453                     break;
454             }
455         }
456 
457     } else {
458         l2cap_ertm_store_fragment(channel, L2CAP_SEGMENTATION_AND_REASSEMBLY_UNSEGMENTED_L2CAP_SDU, 0, data, len);
459     }
460 
461     // try to send
462     l2cap_notify_channel_can_send();
463     return 0;
464 }
465 
466 static uint16_t l2cap_setup_options_ertm_request(l2cap_channel_t * channel, uint8_t * config_options){
467     int pos = 0;
468     config_options[pos++] = L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL;
469     config_options[pos++] = 9;      // length
470     config_options[pos++] = (uint8_t) channel->mode;
471     config_options[pos++] = channel->num_rx_buffers;    // == TxWindows size
472     config_options[pos++] = channel->local_max_transmit;
473     little_endian_store_16( config_options, pos, channel->local_retransmission_timeout_ms);
474     pos += 2;
475     little_endian_store_16( config_options, pos, channel->local_monitor_timeout_ms);
476     pos += 2;
477     little_endian_store_16( config_options, pos, channel->local_mps);
478     pos += 2;
479     //
480     config_options[pos++] = L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT;
481     config_options[pos++] = 2;     // length
482     little_endian_store_16(config_options, pos, channel->local_mtu);
483     pos += 2;
484 
485     // Issue: iOS (e.g. 10.2) uses "No FCS" as default while Core 5.0 specifies "FCS" as default
486     // Workaround: try to actively negotiate FCS option
487     config_options[pos++] = L2CAP_CONFIG_OPTION_TYPE_FRAME_CHECK_SEQUENCE;
488     config_options[pos++] = 1;     // length
489     config_options[pos++] = channel->fcs_option;
490     return pos; // 11+4+3=18
491 }
492 
493 static uint16_t l2cap_setup_options_ertm_response(l2cap_channel_t * channel, uint8_t * config_options){
494     int pos = 0;
495     config_options[pos++] = L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL;
496     config_options[pos++] = 9;      // length
497     config_options[pos++] = (uint8_t) channel->mode;
498     // less or equal to remote tx window size
499     config_options[pos++] = btstack_min(channel->num_tx_buffers, channel->remote_tx_window_size);
500     // max transmit in response shall be ignored -> use sender values
501     config_options[pos++] = channel->remote_max_transmit;
502     // A value for the Retransmission time-out shall be sent in a positive Configuration Response
503     // and indicates the value that will be used by the sender of the Configuration Response -> use our value
504     little_endian_store_16( config_options, pos, channel->local_retransmission_timeout_ms);
505     pos += 2;
506     // A value for the Monitor time-out shall be sent in a positive Configuration Response
507     // and indicates the value that will be used by the sender of the Configuration Response -> use our value
508     little_endian_store_16( config_options, pos, channel->local_monitor_timeout_ms);
509     pos += 2;
510     // less or equal to remote mps
511     uint16_t effective_mps = btstack_min(channel->remote_mps, channel->local_mps);
512     little_endian_store_16( config_options, pos, effective_mps);
513     pos += 2;
514     //
515     config_options[pos++] = L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT; // MTU
516     config_options[pos++] = 2;     // length
517     little_endian_store_16(config_options, pos, channel->remote_mtu);
518     pos += 2;
519 #if 0
520     //
521     config_options[pos++] = L2CAP_CONFIG_OPTION_TYPE_FRAME_CHECK_SEQUENCE;
522     config_options[pos++] = 1;     // length
523     config_options[pos++] = channel->fcs_option;
524 #endif
525     return pos; // 11+4=15
526 }
527 
528 static int l2cap_ertm_send_supervisor_frame(l2cap_channel_t * channel, uint16_t control){
529     hci_reserve_packet_buffer();
530     uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
531     log_info("S-Frame: control 0x%04x", control);
532     little_endian_store_16(acl_buffer, 8, control);
533     return l2cap_send_prepared(channel->local_cid, 2);
534 }
535 
536 static uint8_t l2cap_ertm_validate_local_config(l2cap_ertm_config_t * ertm_config){
537 
538     uint8_t result = ERROR_CODE_SUCCESS;
539     if (ertm_config->max_transmit < 1){
540         log_error("max_transmit must be >= 1");
541         result = ERROR_CODE_INVALID_HCI_COMMAND_PARAMETERS;
542     }
543     if (ertm_config->retransmission_timeout_ms < 2000){
544         log_error("retransmission_timeout_ms must be >= 2000 ms");
545         result = ERROR_CODE_INVALID_HCI_COMMAND_PARAMETERS;
546     }
547     if (ertm_config->monitor_timeout_ms < 12000){
548         log_error("monitor_timeout_ms must be >= 12000 ms");
549         result = ERROR_CODE_INVALID_HCI_COMMAND_PARAMETERS;
550     }
551     if (ertm_config->local_mtu < 48){
552         log_error("local_mtu must be >= 48");
553         result = ERROR_CODE_INVALID_HCI_COMMAND_PARAMETERS;
554     }
555     if (ertm_config->num_rx_buffers < 1){
556         log_error("num_rx_buffers must be >= 1");
557         result = ERROR_CODE_INVALID_HCI_COMMAND_PARAMETERS;
558     }
559     if (ertm_config->num_tx_buffers < 1){
560         log_error("num_rx_buffers must be >= 1");
561         result = ERROR_CODE_INVALID_HCI_COMMAND_PARAMETERS;
562     }
563     return result;
564 }
565 
566 static void l2cap_ertm_configure_channel(l2cap_channel_t * channel, l2cap_ertm_config_t * ertm_config, uint8_t * buffer, uint32_t size){
567 
568     channel->mode  = L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION;
569     channel->ertm_mandatory = ertm_config->ertm_mandatory;
570     channel->local_max_transmit = ertm_config->max_transmit;
571     channel->local_retransmission_timeout_ms = ertm_config->retransmission_timeout_ms;
572     channel->local_monitor_timeout_ms = ertm_config->monitor_timeout_ms;
573     channel->local_mtu = ertm_config->local_mtu;
574     channel->num_rx_buffers = ertm_config->num_rx_buffers;
575     channel->num_tx_buffers = ertm_config->num_tx_buffers;
576 
577     // align buffer to 16-byte boundary to assert l2cap_ertm_rx_packet_state_t is aligned
578     int bytes_till_alignment = 16 - (((uintptr_t) buffer) & 0x0f);
579     buffer += bytes_till_alignment;
580     size   -= bytes_till_alignment;
581 
582     // setup state buffers - use void cast to avoid -Wcast-align warning
583     uint32_t pos = 0;
584     channel->rx_packets_state = (l2cap_ertm_rx_packet_state_t *) (void *) &buffer[pos];
585     pos += ertm_config->num_rx_buffers * sizeof(l2cap_ertm_rx_packet_state_t);
586     channel->tx_packets_state = (l2cap_ertm_tx_packet_state_t *) (void *) &buffer[pos];
587     pos += ertm_config->num_tx_buffers * sizeof(l2cap_ertm_tx_packet_state_t);
588 
589     // setup reassembly buffer
590     channel->reassembly_buffer = &buffer[pos];
591     pos += ertm_config->local_mtu;
592 
593     // divide rest of data equally
594     channel->local_mps = (size - pos) / (ertm_config->num_rx_buffers + ertm_config->num_tx_buffers);
595     log_info("Local MPS: %u", channel->local_mps);
596     channel->rx_packets_data = &buffer[pos];
597     pos += ertm_config->num_rx_buffers * channel->local_mps;
598     channel->tx_packets_data = &buffer[pos];
599 
600     channel->fcs_option = ertm_config->fcs_option;
601 }
602 
603 uint8_t l2cap_create_ertm_channel(btstack_packet_handler_t packet_handler, bd_addr_t address, uint16_t psm,
604     l2cap_ertm_config_t * ertm_config, uint8_t * buffer, uint32_t size, uint16_t * out_local_cid){
605 
606     log_info("L2CAP_CREATE_ERTM_CHANNEL addr %s, psm 0x%x, local mtu %u", bd_addr_to_str(address), psm, ertm_config->local_mtu);
607 
608     // validate local config
609     uint8_t result = l2cap_ertm_validate_local_config(ertm_config);
610     if (result) return result;
611 
612     // determine security level based on psm
613     const gap_security_level_t security_level = l2cap_security_level_0_allowed_for_PSM(psm) ? LEVEL_0 : gap_get_security_level();
614 
615     l2cap_channel_t * channel = l2cap_create_channel_entry(packet_handler, L2CAP_CHANNEL_TYPE_CLASSIC, address, BD_ADDR_TYPE_ACL, psm, ertm_config->local_mtu, security_level);
616     if (!channel) {
617         return BTSTACK_MEMORY_ALLOC_FAILED;
618     }
619 
620     // configure ERTM
621     l2cap_ertm_configure_channel(channel, ertm_config, buffer, size);
622 
623     // add to connections list
624     btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel);
625 
626     // store local_cid
627     if (out_local_cid){
628        *out_local_cid = channel->local_cid;
629     }
630 
631     // check if hci connection is already usable
632     hci_connection_t * conn = hci_connection_for_bd_addr_and_type(address, BD_ADDR_TYPE_ACL);
633     if (conn){
634         log_info("l2cap_create_channel, hci connection already exists");
635         l2cap_handle_connection_complete(conn->con_handle, channel);
636         // check if remote supported fearures are already received
637         if (conn->bonding_flags & BONDING_RECEIVED_REMOTE_FEATURES) {
638             l2cap_handle_remote_supported_features_received(channel);
639         }
640     }
641 
642     l2cap_run();
643 
644     return 0;
645 }
646 
647 static void l2cap_ertm_notify_channel_can_send(l2cap_channel_t * channel){
648     if (l2cap_ertm_can_store_packet_now(channel)){
649         channel->waiting_for_can_send_now = 0;
650         l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid);
651     }
652 }
653 
654 uint8_t l2cap_accept_ertm_connection(uint16_t local_cid, l2cap_ertm_config_t * ertm_config, uint8_t * buffer, uint32_t size){
655 
656     log_info("L2CAP_ACCEPT_ERTM_CONNECTION local_cid 0x%x", local_cid);
657     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
658     if (!channel) {
659         log_error("l2cap_accept_connection called but local_cid 0x%x not found", local_cid);
660         return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
661     }
662 
663     // validate local config
664     uint8_t result = l2cap_ertm_validate_local_config(ertm_config);
665     if (result) return result;
666 
667     // configure L2CAP ERTM
668     l2cap_ertm_configure_channel(channel, ertm_config, buffer, size);
669 
670     // default: continue
671     channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT;
672 
673     // verify remote ERTM support
674     hci_connection_t * connection = hci_connection_for_handle(channel->con_handle);
675     if (connection == NULL) return ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER;
676 
677     if ((channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) && ((connection->l2cap_state.extended_feature_mask & 0x08) == 0)){
678         // ERTM not possible, select basic mode and release buffer
679         channel->mode = L2CAP_CHANNEL_MODE_BASIC;
680         l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED);
681 
682         // bail if ERTM is mandatory
683         if (channel->ertm_mandatory){
684             // We chose 'no resources available' for "ERTM mandatory but you don't even know ERTM exists"
685             log_info("ERTM mandatory -> reject connection");
686             channel->state  = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE;
687             channel->reason = 0x04; // no resources available
688         }  else {
689             log_info("ERTM not supported by remote -> use Basic mode");
690         }
691     }
692 
693     // process
694     l2cap_run();
695 
696     return ERROR_CODE_SUCCESS;
697 }
698 
699 uint8_t l2cap_ertm_set_busy(uint16_t local_cid){
700     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid( local_cid);
701     if (!channel) {
702         log_error( "l2cap_decline_connection called but local_cid 0x%x not found", local_cid);
703         return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
704     }
705     if (!channel->local_busy){
706         channel->local_busy = 1;
707         channel->send_supervisor_frame_receiver_not_ready = 1;
708         l2cap_run();
709     }
710     return ERROR_CODE_SUCCESS;
711 }
712 
713 uint8_t l2cap_ertm_set_ready(uint16_t local_cid){
714     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid( local_cid);
715     if (!channel) {
716         log_error( "l2cap_decline_connection called but local_cid 0x%x not found", local_cid);
717         return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
718     }
719     if (channel->local_busy){
720         channel->local_busy = 0;
721         channel->send_supervisor_frame_receiver_ready_poll = 1;
722         l2cap_run();
723     }
724     return ERROR_CODE_SUCCESS;
725 }
726 
727 // Process-ReqSeq
728 static void l2cap_ertm_process_req_seq(l2cap_channel_t * l2cap_channel, uint8_t req_seq){
729     int num_buffers_acked = 0;
730     l2cap_ertm_tx_packet_state_t * tx_state;
731     log_info("l2cap_ertm_process_req_seq: tx_read_index %u, tx_write_index %u, req_seq %u", l2cap_channel->tx_read_index, l2cap_channel->tx_write_index, req_seq);
732     while (true){
733 
734         // no unack packets left
735         if (l2cap_channel->unacked_frames == 0) {
736             // stop retransmission timer
737             l2cap_ertm_stop_retransmission_timer(l2cap_channel);
738             break;
739         }
740 
741         tx_state = &l2cap_channel->tx_packets_state[l2cap_channel->tx_read_index];
742         // calc delta
743         int delta = (req_seq - tx_state->tx_seq) & 0x03f;
744         if (delta == 0) break;  // all packets acknowledged
745         if (delta > l2cap_channel->remote_tx_window_size) break;
746 
747         num_buffers_acked++;
748         l2cap_channel->num_stored_tx_frames--;
749         l2cap_channel->unacked_frames--;
750         log_info("RR seq %u => packet with tx_seq %u done", req_seq, tx_state->tx_seq);
751 
752         l2cap_channel->tx_read_index++;
753         if (l2cap_channel->tx_read_index >= l2cap_channel->num_rx_buffers){
754             l2cap_channel->tx_read_index = 0;
755         }
756     }
757     if (num_buffers_acked){
758         log_info("num_buffers_acked %u", num_buffers_acked);
759     l2cap_ertm_notify_channel_can_send(l2cap_channel);
760 }
761 }
762 
763 static l2cap_ertm_tx_packet_state_t * l2cap_ertm_get_tx_state(l2cap_channel_t * l2cap_channel, uint8_t tx_seq){
764     int i;
765     for (i=0;i<l2cap_channel->num_tx_buffers;i++){
766         l2cap_ertm_tx_packet_state_t * tx_state = &l2cap_channel->tx_packets_state[i];
767         if (tx_state->tx_seq == tx_seq) return tx_state;
768     }
769     return NULL;
770 }
771 
772 // @param delta number of frames in the future, >= 1
773 // @assumption size <= l2cap_channel->local_mps (checked in l2cap_acl_classic_handler)
774 static void l2cap_ertm_handle_out_of_sequence_sdu(l2cap_channel_t * l2cap_channel, l2cap_segmentation_and_reassembly_t sar, int delta, const uint8_t * payload, uint16_t size){
775     log_info("Store SDU with delta %u", delta);
776     // get rx state for packet to store
777     int index = l2cap_channel->rx_store_index + delta - 1;
778     if (index > l2cap_channel->num_rx_buffers){
779         index -= l2cap_channel->num_rx_buffers;
780     }
781     log_info("Index of packet to store %u", index);
782     l2cap_ertm_rx_packet_state_t * rx_state = &l2cap_channel->rx_packets_state[index];
783     // check if buffer is free
784     if (rx_state->valid){
785         log_error("Packet buffer already used");
786         return;
787     }
788     rx_state->valid = 1;
789     rx_state->sar = sar;
790     rx_state->len = size;
791     uint8_t * rx_buffer = &l2cap_channel->rx_packets_data[index];
792     (void)memcpy(rx_buffer, payload, size);
793 }
794 
795 // @assumption size <= l2cap_channel->local_mps (checked in l2cap_acl_classic_handler)
796 static void l2cap_ertm_handle_in_sequence_sdu(l2cap_channel_t * l2cap_channel, l2cap_segmentation_and_reassembly_t sar, const uint8_t * payload, uint16_t size){
797     uint16_t reassembly_sdu_length;
798     switch (sar){
799         case L2CAP_SEGMENTATION_AND_REASSEMBLY_UNSEGMENTED_L2CAP_SDU:
800             // assert total packet size <= our mtu
801             if (size > l2cap_channel->local_mtu) break;
802             // packet complete -> disapatch
803             l2cap_dispatch_to_channel(l2cap_channel, L2CAP_DATA_PACKET, (uint8_t*) payload, size);
804             break;
805         case L2CAP_SEGMENTATION_AND_REASSEMBLY_START_OF_L2CAP_SDU:
806             // read SDU len
807             reassembly_sdu_length = little_endian_read_16(payload, 0);
808             payload += 2;
809             size    -= 2;
810             // assert reassembled size <= our mtu
811             if (reassembly_sdu_length > l2cap_channel->local_mtu) break;
812             // store start segment
813             l2cap_channel->reassembly_sdu_length = reassembly_sdu_length;
814             (void)memcpy(&l2cap_channel->reassembly_buffer[0], payload, size);
815             l2cap_channel->reassembly_pos = size;
816             break;
817         case L2CAP_SEGMENTATION_AND_REASSEMBLY_CONTINUATION_OF_L2CAP_SDU:
818             // assert size of reassembled data <= our mtu
819             if (l2cap_channel->reassembly_pos + size > l2cap_channel->local_mtu) break;
820             // store continuation segment
821             (void)memcpy(&l2cap_channel->reassembly_buffer[l2cap_channel->reassembly_pos],
822                          payload, size);
823             l2cap_channel->reassembly_pos += size;
824             break;
825         case L2CAP_SEGMENTATION_AND_REASSEMBLY_END_OF_L2CAP_SDU:
826             // assert size of reassembled data <= our mtu
827             if (l2cap_channel->reassembly_pos + size > l2cap_channel->local_mtu) break;
828             // store continuation segment
829             (void)memcpy(&l2cap_channel->reassembly_buffer[l2cap_channel->reassembly_pos],
830                          payload, size);
831             l2cap_channel->reassembly_pos += size;
832             // assert size of reassembled data matches announced sdu length
833             if (l2cap_channel->reassembly_pos != l2cap_channel->reassembly_sdu_length) break;
834             // packet complete -> disapatch
835             l2cap_dispatch_to_channel(l2cap_channel, L2CAP_DATA_PACKET, l2cap_channel->reassembly_buffer, l2cap_channel->reassembly_pos);
836             l2cap_channel->reassembly_pos = 0;
837             break;
838         default:
839             btstack_assert(false);
840             break;
841     }
842 }
843 
844 static void l2cap_ertm_channel_send_information_frame(l2cap_channel_t * channel){
845     channel->unacked_frames++;
846     int index = channel->tx_send_index;
847     channel->tx_send_index++;
848     if (channel->tx_send_index >= channel->num_tx_buffers){
849         channel->tx_send_index = 0;
850     }
851     l2cap_ertm_send_information_frame(channel, index, 0);   // final = 0
852 }
853 
854 #endif
855 
856 #ifdef L2CAP_USES_CHANNELS
857 static uint16_t l2cap_next_local_cid(void){
858     do {
859         if (l2cap_local_source_cid == 0xffffu) {
860             l2cap_local_source_cid = 0x40;
861         } else {
862             l2cap_local_source_cid++;
863         }
864     } while (l2cap_get_channel_for_local_cid(l2cap_local_source_cid) != NULL);
865     return l2cap_local_source_cid;
866 }
867 #endif
868 
869 static uint8_t l2cap_next_sig_id(void){
870     if (l2cap_sig_seq_nr == 0xffu) {
871         l2cap_sig_seq_nr = 1;
872     } else {
873         l2cap_sig_seq_nr++;
874     }
875     return l2cap_sig_seq_nr;
876 }
877 
878 void l2cap_init(void){
879 #ifdef L2CAP_USES_CHANNELS
880     l2cap_local_source_cid  = 0x40;
881 #endif
882     l2cap_sig_seq_nr  = 0xff;
883 
884 #ifdef ENABLE_CLASSIC
885     // Setup Connectionless Channel
886     l2cap_fixed_channel_connectionless.local_cid     = L2CAP_CID_CONNECTIONLESS_CHANNEL;
887     l2cap_fixed_channel_connectionless.channel_type  = L2CAP_CHANNEL_TYPE_CONNECTIONLESS;
888     btstack_linked_list_add(&l2cap_channels, (btstack_linked_item_t *) &l2cap_fixed_channel_connectionless);
889 #endif
890 
891 #ifdef ENABLE_BLE
892     // Setup fixed ATT Channel
893     l2cap_fixed_channel_att.local_cid    = L2CAP_CID_ATTRIBUTE_PROTOCOL;
894     l2cap_fixed_channel_att.channel_type = L2CAP_CHANNEL_TYPE_FIXED;
895     btstack_linked_list_add(&l2cap_channels, (btstack_linked_item_t *) &l2cap_fixed_channel_att);
896 
897     // Setup fixed SM Channel
898     l2cap_fixed_channel_sm.local_cid     = L2CAP_CID_SECURITY_MANAGER_PROTOCOL;
899     l2cap_fixed_channel_sm.channel_type  = L2CAP_CHANNEL_TYPE_FIXED;
900     btstack_linked_list_add(&l2cap_channels, (btstack_linked_item_t *) &l2cap_fixed_channel_sm);
901 #endif
902 
903     //
904     // register callback with HCI
905     //
906     l2cap_hci_event_callback_registration.callback = &l2cap_hci_event_handler;
907     hci_add_event_handler(&l2cap_hci_event_callback_registration);
908 
909     hci_register_acl_packet_handler(&l2cap_acl_handler);
910 
911 #ifndef ENABLE_EXPLICIT_CONNECTABLE_MODE_CONTROL
912 #ifdef ENABLE_CLASSIC
913     gap_connectable_control(0); // no services yet
914 #endif
915 #endif
916 }
917 
918 /**
919  * @brief De-Init L2CAP
920  */
921 void l2cap_deinit(void){
922     l2cap_channels = NULL;
923     l2cap_signaling_responses_pending = 0;
924 #ifdef ENABLE_CLASSIC
925     l2cap_require_security_level2_for_outgoing_sdp = 0;
926     (void)memset(&l2cap_fixed_channel_connectionless, 0, sizeof(l2cap_fixed_channel_connectionless));
927     l2cap_services = NULL;
928     (void)memset(l2cap_outgoing_classic_addr, 0, 6);
929 #endif
930 #ifdef ENABLE_BLE
931     l2cap_event_packet_handler = NULL;
932     l2cap_le_custom_max_mtu = 0;
933     (void)memset(&l2cap_fixed_channel_att, 0, sizeof(l2cap_fixed_channel_att));
934     (void)memset(&l2cap_fixed_channel_sm, 0, sizeof(l2cap_fixed_channel_sm));
935 #endif
936 #ifdef ENABLE_LE_DATA_CHANNELS
937     l2cap_le_services = NULL;
938 #endif
939     l2cap_signaling_responses_pending = 0;
940 }
941 
942 void l2cap_register_packet_handler(void (*handler)(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size)){
943 #ifdef ENABLE_BLE
944     l2cap_event_packet_handler = handler;
945 #else
946     UNUSED(handler);    // ok: no code
947 #endif
948 }
949 
950 void l2cap_request_can_send_fix_channel_now_event(hci_con_handle_t con_handle, uint16_t channel_id){
951     UNUSED(con_handle);  // ok: there is no con handle
952 
953     l2cap_fixed_channel_t * channel = l2cap_fixed_channel_for_channel_id(channel_id);
954     if (!channel) return;
955     channel->waiting_for_can_send_now = 1;
956     l2cap_notify_channel_can_send();
957 }
958 
959 int  l2cap_can_send_fixed_channel_packet_now(hci_con_handle_t con_handle, uint16_t channel_id){
960     UNUSED(channel_id); // ok: only depends on Controller LE buffers
961 
962     return hci_can_send_acl_packet_now(con_handle);
963 }
964 
965 uint8_t *l2cap_get_outgoing_buffer(void){
966     return hci_get_outgoing_packet_buffer() + COMPLETE_L2CAP_HEADER; // 8 bytes
967 }
968 
969 // only for L2CAP Basic Channels
970 int l2cap_reserve_packet_buffer(void){
971     return hci_reserve_packet_buffer();
972 }
973 
974 // only for L2CAP Basic Channels
975 void l2cap_release_packet_buffer(void){
976     hci_release_packet_buffer();
977 }
978 
979 static void l2cap_setup_header(uint8_t * acl_buffer, hci_con_handle_t con_handle, uint8_t packet_boundary, uint16_t remote_cid, uint16_t len){
980     // 0 - Connection handle : PB=pb : BC=00
981     little_endian_store_16(acl_buffer, 0u, con_handle | (packet_boundary << 12u) | (0u << 14u));
982     // 2 - ACL length
983     little_endian_store_16(acl_buffer, 2u,  len + 4u);
984     // 4 - L2CAP packet length
985     little_endian_store_16(acl_buffer, 4u,  len + 0u);
986     // 6 - L2CAP channel DEST
987     little_endian_store_16(acl_buffer, 6,  remote_cid);
988 }
989 
990 // assumption - only on LE connections
991 int l2cap_send_prepared_connectionless(hci_con_handle_t con_handle, uint16_t cid, uint16_t len){
992 
993     if (!hci_is_packet_buffer_reserved()){
994         log_error("l2cap_send_prepared_connectionless called without reserving packet first");
995         return BTSTACK_ACL_BUFFERS_FULL;
996     }
997 
998     if (!hci_can_send_prepared_acl_packet_now(con_handle)){
999         log_info("l2cap_send_prepared_connectionless handle 0x%02x, cid 0x%02x, cannot send", con_handle, cid);
1000         return BTSTACK_ACL_BUFFERS_FULL;
1001     }
1002 
1003     log_debug("l2cap_send_prepared_connectionless handle %u, cid 0x%02x", con_handle, cid);
1004 
1005     uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
1006     l2cap_setup_header(acl_buffer, con_handle, 0, cid, len);
1007     // send
1008     return hci_send_acl_packet_buffer(len+8u);
1009 }
1010 
1011 // assumption - only on LE connections
1012 int l2cap_send_connectionless(hci_con_handle_t con_handle, uint16_t cid, uint8_t *data, uint16_t len){
1013 
1014     if (!hci_can_send_acl_packet_now(con_handle)){
1015         log_info("l2cap_send cid 0x%02x, cannot send", cid);
1016         return BTSTACK_ACL_BUFFERS_FULL;
1017     }
1018 
1019     hci_reserve_packet_buffer();
1020     uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
1021 
1022     (void)memcpy(&acl_buffer[8], data, len);
1023 
1024     return l2cap_send_prepared_connectionless(con_handle, cid, len);
1025 }
1026 
1027 static void l2cap_emit_can_send_now(btstack_packet_handler_t packet_handler, uint16_t channel) {
1028     log_debug("L2CAP_EVENT_CHANNEL_CAN_SEND_NOW local_cid 0x%x", channel);
1029     uint8_t event[4];
1030     event[0] = L2CAP_EVENT_CAN_SEND_NOW;
1031     event[1] = sizeof(event) - 2u;
1032     little_endian_store_16(event, 2, channel);
1033     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
1034     packet_handler(HCI_EVENT_PACKET, channel, event, sizeof(event));
1035 }
1036 
1037 #ifdef L2CAP_USES_CHANNELS
1038 static void l2cap_dispatch_to_channel(l2cap_channel_t *channel, uint8_t type, uint8_t * data, uint16_t size){
1039     (* (channel->packet_handler))(type, channel->local_cid, data, size);
1040 }
1041 
1042 static void l2cap_emit_simple_event_with_cid(l2cap_channel_t * channel, uint8_t event_code){
1043     uint8_t event[4];
1044     event[0] = event_code;
1045     event[1] = sizeof(event) - 2u;
1046     little_endian_store_16(event, 2, channel->local_cid);
1047     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
1048     l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event));
1049 }
1050 #endif
1051 
1052 #ifdef ENABLE_CLASSIC
1053 void l2cap_emit_channel_opened(l2cap_channel_t *channel, uint8_t status) {
1054     log_info("L2CAP_EVENT_CHANNEL_OPENED status 0x%x addr %s handle 0x%x psm 0x%x local_cid 0x%x remote_cid 0x%x local_mtu %u, remote_mtu %u, flush_timeout %u",
1055              status, bd_addr_to_str(channel->address), channel->con_handle, channel->psm,
1056              channel->local_cid, channel->remote_cid, channel->local_mtu, channel->remote_mtu, channel->flush_timeout);
1057     uint8_t event[26];
1058     event[0] = L2CAP_EVENT_CHANNEL_OPENED;
1059     event[1] = sizeof(event) - 2;
1060     event[2] = status;
1061     reverse_bd_addr(channel->address, &event[3]);
1062     little_endian_store_16(event,  9, channel->con_handle);
1063     little_endian_store_16(event, 11, channel->psm);
1064     little_endian_store_16(event, 13, channel->local_cid);
1065     little_endian_store_16(event, 15, channel->remote_cid);
1066     little_endian_store_16(event, 17, channel->local_mtu);
1067     little_endian_store_16(event, 19, channel->remote_mtu);
1068     little_endian_store_16(event, 21, channel->flush_timeout);
1069     event[23] = (channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) ? 1 : 0;
1070 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1071     log_info("ERTM mode %u, fcs enabled %u", channel->mode, channel->fcs_option);
1072     event[24] = channel->mode;
1073     event[25] = channel->fcs_option;
1074 
1075 #else
1076     event[24] = L2CAP_CHANNEL_MODE_BASIC;
1077     event[25] = 0;
1078 #endif
1079     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
1080     l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event));
1081 }
1082 
1083 static void l2cap_emit_channel_closed(l2cap_channel_t *channel) {
1084     log_info("L2CAP_EVENT_CHANNEL_CLOSED local_cid 0x%x", channel->local_cid);
1085     l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_CHANNEL_CLOSED);
1086 }
1087 
1088 static void l2cap_emit_incoming_connection(l2cap_channel_t *channel) {
1089     log_info("L2CAP_EVENT_INCOMING_CONNECTION addr %s handle 0x%x psm 0x%x local_cid 0x%x remote_cid 0x%x",
1090              bd_addr_to_str(channel->address), channel->con_handle,  channel->psm, channel->local_cid, channel->remote_cid);
1091     uint8_t event[16];
1092     event[0] = L2CAP_EVENT_INCOMING_CONNECTION;
1093     event[1] = sizeof(event) - 2;
1094     reverse_bd_addr(channel->address, &event[2]);
1095     little_endian_store_16(event,  8, channel->con_handle);
1096     little_endian_store_16(event, 10, channel->psm);
1097     little_endian_store_16(event, 12, channel->local_cid);
1098     little_endian_store_16(event, 14, channel->remote_cid);
1099     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
1100     l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event));
1101 }
1102 
1103 static void l2cap_handle_channel_open_failed(l2cap_channel_t * channel, uint8_t status){
1104 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1105     // emit ertm buffer released, as it's not needed. if in basic mode, it was either not allocated or already released
1106     if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
1107         l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED);
1108     }
1109 #endif
1110     l2cap_emit_channel_opened(channel, status);
1111 }
1112 
1113 static void l2cap_handle_channel_closed(l2cap_channel_t * channel){
1114 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1115     // emit ertm buffer released, as it's not needed anymore. if in basic mode, it was either not allocated or already released
1116     if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
1117         l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED);
1118     }
1119 #endif
1120     l2cap_emit_channel_closed(channel);
1121 }
1122 #endif
1123 
1124 static l2cap_fixed_channel_t * l2cap_channel_item_by_cid(uint16_t cid){
1125     btstack_linked_list_iterator_t it;
1126     btstack_linked_list_iterator_init(&it, &l2cap_channels);
1127     while (btstack_linked_list_iterator_has_next(&it)){
1128         l2cap_fixed_channel_t * channel = (l2cap_fixed_channel_t*) btstack_linked_list_iterator_next(&it);
1129         if (channel->local_cid == cid) {
1130             return channel;
1131         }
1132     }
1133     return NULL;
1134 }
1135 
1136 // used for fixed channels in LE (ATT/SM) and Classic (Connectionless Channel). CID < 0x04
1137 static l2cap_fixed_channel_t * l2cap_fixed_channel_for_channel_id(uint16_t local_cid){
1138     if (local_cid >= 0x40u) return NULL;
1139     return (l2cap_fixed_channel_t*) l2cap_channel_item_by_cid(local_cid);
1140 }
1141 
1142 // used for Classic Channels + LE Data Channels. local_cid >= 0x40
1143 #ifdef L2CAP_USES_CHANNELS
1144 static l2cap_channel_t * l2cap_get_channel_for_local_cid(uint16_t local_cid){
1145     if (local_cid < 0x40u) return NULL;
1146     return (l2cap_channel_t*) l2cap_channel_item_by_cid(local_cid);
1147 }
1148 
1149 static l2cap_channel_t * l2cap_get_channel_for_local_cid_and_handle(uint16_t local_cid, hci_con_handle_t con_handle){
1150     if (local_cid < 0x40u) return NULL;
1151     l2cap_channel_t * l2cap_channel = (l2cap_channel_t*) l2cap_channel_item_by_cid(local_cid);
1152     if (l2cap_channel == NULL)  return NULL;
1153     if (l2cap_channel->con_handle != con_handle) return NULL;
1154     return l2cap_channel;
1155 }
1156 #endif
1157 
1158 #ifdef ENABLE_CLASSIC
1159 void l2cap_request_can_send_now_event(uint16_t local_cid){
1160     l2cap_channel_t *channel = l2cap_get_channel_for_local_cid(local_cid);
1161     if (!channel) return;
1162     channel->waiting_for_can_send_now = 1;
1163 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1164     if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
1165         l2cap_ertm_notify_channel_can_send(channel);
1166         return;
1167     }
1168 #endif
1169     l2cap_notify_channel_can_send();
1170 }
1171 
1172 int  l2cap_can_send_packet_now(uint16_t local_cid){
1173     l2cap_channel_t *channel = l2cap_get_channel_for_local_cid(local_cid);
1174     if (!channel) return 0;
1175 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1176     if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
1177         return l2cap_ertm_can_store_packet_now(channel);
1178     }
1179 #endif
1180     return hci_can_send_acl_packet_now(channel->con_handle);
1181 }
1182 
1183 int  l2cap_can_send_prepared_packet_now(uint16_t local_cid){
1184     l2cap_channel_t *channel = l2cap_get_channel_for_local_cid(local_cid);
1185     if (!channel) return 0;
1186 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1187     if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
1188         return 0;
1189     }
1190 #endif
1191     return hci_can_send_prepared_acl_packet_now(channel->con_handle);
1192 }
1193 
1194 uint16_t l2cap_get_remote_mtu_for_local_cid(uint16_t local_cid){
1195     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
1196     if (channel) {
1197         return channel->remote_mtu;
1198     }
1199     return 0;
1200 }
1201 #endif
1202 
1203 #ifdef L2CAP_USES_CHANNELS
1204 static int l2cap_is_dynamic_channel_type(l2cap_channel_type_t channel_type){
1205     switch (channel_type){
1206         case L2CAP_CHANNEL_TYPE_CLASSIC:
1207         case L2CAP_CHANNEL_TYPE_LE_DATA_CHANNEL:
1208             return 1;
1209         default:
1210             return 0;
1211     }
1212 }
1213 #endif
1214 
1215 #ifdef ENABLE_CLASSIC
1216 // RTX Timer only exist for dynamic channels
1217 static l2cap_channel_t * l2cap_channel_for_rtx_timer(btstack_timer_source_t * ts){
1218     btstack_linked_list_iterator_t it;
1219     btstack_linked_list_iterator_init(&it, &l2cap_channels);
1220     while (btstack_linked_list_iterator_has_next(&it)){
1221         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
1222         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
1223         if (&channel->rtx == ts) {
1224             return channel;
1225         }
1226     }
1227     return NULL;
1228 }
1229 
1230 static void l2cap_rtx_timeout(btstack_timer_source_t * ts){
1231     l2cap_channel_t * channel = l2cap_channel_for_rtx_timer(ts);
1232     if (!channel) return;
1233 
1234     log_info("l2cap_rtx_timeout for local cid 0x%02x", channel->local_cid);
1235 
1236     // "When terminating the channel, it is not necessary to send a L2CAP_DisconnectReq
1237     //  and enter WAIT_DISCONNECT state. Channels can be transitioned directly to the CLOSED state."
1238     // notify client
1239     l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_RTX_TIMEOUT);
1240 
1241     // discard channel
1242     btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
1243     l2cap_free_channel_entry(channel);
1244 }
1245 
1246 #endif
1247 
1248 #ifdef L2CAP_USES_CHANNELS
1249 static void l2cap_stop_rtx(l2cap_channel_t * channel){
1250     log_info("l2cap_stop_rtx for local cid 0x%02x", channel->local_cid);
1251     btstack_run_loop_remove_timer(&channel->rtx);
1252 }
1253 #endif
1254 
1255 #ifdef ENABLE_CLASSIC
1256 
1257 static void l2cap_start_rtx(l2cap_channel_t * channel){
1258     l2cap_stop_rtx(channel);
1259     log_info("l2cap_start_rtx for local cid 0x%02x", channel->local_cid);
1260     btstack_run_loop_set_timer_handler(&channel->rtx, l2cap_rtx_timeout);
1261     btstack_run_loop_set_timer(&channel->rtx, L2CAP_RTX_TIMEOUT_MS);
1262     btstack_run_loop_add_timer(&channel->rtx);
1263 }
1264 
1265 static void l2cap_start_ertx(l2cap_channel_t * channel){
1266     log_info("l2cap_start_ertx for local cid 0x%02x", channel->local_cid);
1267     l2cap_stop_rtx(channel);
1268     btstack_run_loop_set_timer_handler(&channel->rtx, l2cap_rtx_timeout);
1269     btstack_run_loop_set_timer(&channel->rtx, L2CAP_ERTX_TIMEOUT_MS);
1270     btstack_run_loop_add_timer(&channel->rtx);
1271 }
1272 
1273 void l2cap_require_security_level_2_for_outgoing_sdp(void){
1274     l2cap_require_security_level2_for_outgoing_sdp = 1;
1275 }
1276 
1277 static int l2cap_security_level_0_allowed_for_PSM(uint16_t psm){
1278     return (psm == BLUETOOTH_PSM_SDP) && (!l2cap_require_security_level2_for_outgoing_sdp);
1279 }
1280 
1281 static int l2cap_send_signaling_packet(hci_con_handle_t handle, L2CAP_SIGNALING_COMMANDS cmd, int identifier, ...){
1282     if (!hci_can_send_acl_packet_now(handle)){
1283         log_info("l2cap_send_signaling_packet, cannot send");
1284         return BTSTACK_ACL_BUFFERS_FULL;
1285     }
1286 
1287     // log_info("l2cap_send_signaling_packet type %u", cmd);
1288     hci_reserve_packet_buffer();
1289     uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
1290     va_list argptr;
1291     va_start(argptr, identifier);
1292     uint16_t len = l2cap_create_signaling_classic(acl_buffer, handle, cmd, identifier, argptr);
1293     va_end(argptr);
1294     // log_info("l2cap_send_signaling_packet con %u!", handle);
1295     return hci_send_acl_packet_buffer(len);
1296 }
1297 
1298 // assumption - only on Classic connections
1299 // cannot be used for L2CAP ERTM
1300 int l2cap_send_prepared(uint16_t local_cid, uint16_t len){
1301 
1302     if (!hci_is_packet_buffer_reserved()){
1303         log_error("l2cap_send_prepared called without reserving packet first");
1304         return BTSTACK_ACL_BUFFERS_FULL;
1305     }
1306 
1307     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
1308     if (!channel) {
1309         log_error("l2cap_send_prepared no channel for cid 0x%02x", local_cid);
1310         return -1;   // TODO: define error
1311     }
1312 
1313     if (!hci_can_send_prepared_acl_packet_now(channel->con_handle)){
1314         log_info("l2cap_send_prepared cid 0x%02x, cannot send", local_cid);
1315         return BTSTACK_ACL_BUFFERS_FULL;
1316     }
1317 
1318     log_debug("l2cap_send_prepared cid 0x%02x, handle %u, 1 credit used", local_cid, channel->con_handle);
1319 
1320     int fcs_size = 0;
1321 
1322 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1323     if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION && channel->fcs_option){
1324         fcs_size = 2;
1325     }
1326 #endif
1327 
1328     // set non-flushable packet boundary flag if supported on Controller
1329     uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
1330     uint8_t packet_boundary_flag = hci_non_flushable_packet_boundary_flag_supported() ? 0x00 : 0x02;
1331     l2cap_setup_header(acl_buffer, channel->con_handle, packet_boundary_flag, channel->remote_cid, len + fcs_size);
1332 
1333 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1334     if (fcs_size){
1335         // calculate FCS over l2cap data
1336         uint16_t fcs = crc16_calc(acl_buffer + 4, 4 + len);
1337         log_info("I-Frame: fcs 0x%04x", fcs);
1338         little_endian_store_16(acl_buffer, 8 + len, fcs);
1339     }
1340 #endif
1341 
1342     // send
1343     return hci_send_acl_packet_buffer(len+8+fcs_size);
1344 }
1345 
1346 // assumption - only on Classic connections
1347 int l2cap_send(uint16_t local_cid, uint8_t *data, uint16_t len){
1348     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
1349     if (!channel) {
1350         log_error("l2cap_send no channel for cid 0x%02x", local_cid);
1351         return -1;   // TODO: define error
1352     }
1353 
1354 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1355     // send in ERTM
1356     if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
1357         return l2cap_ertm_send(channel, data, len);
1358     }
1359 #endif
1360 
1361     if (len > channel->remote_mtu){
1362         log_error("l2cap_send cid 0x%02x, data length exceeds remote MTU.", local_cid);
1363         return L2CAP_DATA_LEN_EXCEEDS_REMOTE_MTU;
1364     }
1365 
1366     if (!hci_can_send_acl_packet_now(channel->con_handle)){
1367         log_info("l2cap_send cid 0x%02x, cannot send", local_cid);
1368         return BTSTACK_ACL_BUFFERS_FULL;
1369     }
1370 
1371     hci_reserve_packet_buffer();
1372     uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
1373     (void)memcpy(&acl_buffer[8], data, len);
1374     return l2cap_send_prepared(local_cid, len);
1375 }
1376 
1377 int l2cap_send_echo_request(hci_con_handle_t con_handle, uint8_t *data, uint16_t len){
1378     return l2cap_send_signaling_packet(con_handle, ECHO_REQUEST,  l2cap_next_sig_id(), len, data);
1379 }
1380 
1381 static inline void channelStateVarSetFlag(l2cap_channel_t *channel, L2CAP_CHANNEL_STATE_VAR flag){
1382     channel->state_var = (L2CAP_CHANNEL_STATE_VAR) (channel->state_var | flag);
1383 }
1384 
1385 static inline void channelStateVarClearFlag(l2cap_channel_t *channel, L2CAP_CHANNEL_STATE_VAR flag){
1386     channel->state_var = (L2CAP_CHANNEL_STATE_VAR) (channel->state_var & ~flag);
1387 }
1388 #endif
1389 
1390 
1391 #ifdef ENABLE_BLE
1392 static int l2cap_send_le_signaling_packet(hci_con_handle_t handle, L2CAP_SIGNALING_COMMANDS cmd, int identifier, ...){
1393 
1394     if (!hci_can_send_acl_packet_now(handle)){
1395         log_info("l2cap_send_le_signaling_packet, cannot send");
1396         return BTSTACK_ACL_BUFFERS_FULL;
1397     }
1398 
1399     // log_info("l2cap_send_le_signaling_packet type %u", cmd);
1400     hci_reserve_packet_buffer();
1401     uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
1402     va_list argptr;
1403     va_start(argptr, identifier);
1404     uint16_t len = l2cap_create_signaling_le(acl_buffer, handle, cmd, identifier, argptr);
1405     va_end(argptr);
1406     // log_info("l2cap_send_le_signaling_packet con %u!", handle);
1407     return hci_send_acl_packet_buffer(len);
1408 }
1409 #endif
1410 
1411 uint16_t l2cap_max_mtu(void){
1412     return HCI_ACL_PAYLOAD_SIZE - L2CAP_HEADER_SIZE;
1413 }
1414 
1415 #ifdef ENABLE_BLE
1416 uint16_t l2cap_max_le_mtu(void){
1417     if (l2cap_le_custom_max_mtu != 0u) return l2cap_le_custom_max_mtu;
1418     return l2cap_max_mtu();
1419 }
1420 
1421 void l2cap_set_max_le_mtu(uint16_t max_mtu){
1422     if (max_mtu < l2cap_max_mtu()){
1423         l2cap_le_custom_max_mtu = max_mtu;
1424     }
1425 }
1426 #endif
1427 
1428 #ifdef ENABLE_CLASSIC
1429 
1430 static uint16_t l2cap_setup_options_mtu(uint8_t * config_options, uint16_t mtu){
1431     config_options[0] = L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT; // MTU
1432     config_options[1] = 2; // len param
1433     little_endian_store_16(config_options, 2, mtu);
1434     return 4;
1435 }
1436 
1437 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1438 static int l2cap_ertm_mode(l2cap_channel_t * channel){
1439     hci_connection_t * connection = hci_connection_for_handle(channel->con_handle);
1440     return ((connection->l2cap_state.information_state == L2CAP_INFORMATION_STATE_DONE)
1441         &&  (connection->l2cap_state.extended_feature_mask & 0x08));
1442 }
1443 #endif
1444 
1445 static uint16_t l2cap_setup_options_request(l2cap_channel_t * channel, uint8_t * config_options){
1446 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1447     // use ERTM options if supported by remote and channel ready to use it
1448     if (l2cap_ertm_mode(channel) && channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
1449         return l2cap_setup_options_ertm_request(channel, config_options);
1450     }
1451 #endif
1452     uint16_t mtu = channel->local_mtu;
1453     return l2cap_setup_options_mtu(config_options, mtu);
1454 }
1455 
1456 static uint16_t l2cap_setup_options_mtu_response(l2cap_channel_t * channel, uint8_t * config_options){
1457     uint16_t mtu = btstack_min(channel->local_mtu, channel->remote_mtu);
1458     return l2cap_setup_options_mtu(config_options, mtu);
1459 }
1460 
1461 static uint32_t l2cap_extended_features_mask(void){
1462     // extended features request supported, features: fixed channels, unicast connectionless data reception
1463     uint32_t features = 0x280;
1464 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1465     features |= 0x0028;
1466 #endif
1467     return features;
1468 }
1469 #endif
1470 
1471 //
1472 #ifdef ENABLE_CLASSIC
1473 
1474 // returns true if channel was finalized
1475 static bool l2cap_run_for_classic_channel(l2cap_channel_t * channel){
1476 
1477 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1478     uint8_t  config_options[18];
1479 #else
1480     uint8_t  config_options[10];
1481 #endif
1482 
1483     switch (channel->state){
1484 
1485         case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE:
1486         case L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT:
1487             if (!hci_can_send_acl_packet_now(channel->con_handle)) return false;
1488             if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND) {
1489                 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND);
1490                 l2cap_send_signaling_packet(channel->con_handle, CONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid, 1, 0);
1491             }
1492             break;
1493 
1494         case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION:
1495             if (!hci_can_send_command_packet_now()) break;
1496             // send connection request - set state first
1497             channel->state = L2CAP_STATE_WAIT_CONNECTION_COMPLETE;
1498             // BD_ADDR, Packet_Type, Page_Scan_Repetition_Mode, Reserved, Clock_Offset, Allow_Role_Switch
1499             (void)memcpy(l2cap_outgoing_classic_addr, channel->address, 6);
1500             hci_send_cmd(&hci_create_connection, channel->address, hci_usable_acl_packet_types(), 0, 0, 0, hci_get_allow_role_switch());
1501             break;
1502 
1503         case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE:
1504             if (!hci_can_send_acl_packet_now(channel->con_handle)) return false;
1505             channel->state = L2CAP_STATE_INVALID;
1506             l2cap_send_signaling_packet(channel->con_handle, CONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid, channel->reason, 0);
1507             // discard channel - l2cap_finialize_channel_close without sending l2cap close event
1508             btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
1509             l2cap_free_channel_entry(channel);
1510             channel = NULL;
1511             break;
1512 
1513         case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT:
1514             if (!hci_can_send_acl_packet_now(channel->con_handle)) return false;
1515             channel->state = L2CAP_STATE_CONFIG;
1516             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ);
1517             l2cap_send_signaling_packet(channel->con_handle, CONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid, 0, 0);
1518             break;
1519 
1520         case L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST:
1521             if (!hci_can_send_acl_packet_now(channel->con_handle)) return false;
1522             // success, start l2cap handshake
1523             channel->local_sig_id = l2cap_next_sig_id();
1524             channel->state = L2CAP_STATE_WAIT_CONNECT_RSP;
1525             l2cap_send_signaling_packet( channel->con_handle, CONNECTION_REQUEST, channel->local_sig_id, channel->psm, channel->local_cid);
1526             l2cap_start_rtx(channel);
1527             break;
1528 
1529         case L2CAP_STATE_CONFIG:
1530             if (!hci_can_send_acl_packet_now(channel->con_handle)) return false;
1531 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1532             // fallback to basic mode if ERTM requested but not not supported by remote
1533             if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
1534                 if (!l2cap_ertm_mode(channel)){
1535                     l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED);
1536                     channel->mode = L2CAP_CHANNEL_MODE_BASIC;
1537                 }
1538             }
1539 #endif
1540             if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP){
1541                 uint16_t flags = 0;
1542                 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP);
1543                 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT) {
1544                     flags = 1;
1545                 } else {
1546                     channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP);
1547                 }
1548                 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_INVALID){
1549                     channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP);
1550                     l2cap_send_signaling_packet(channel->con_handle, CONFIGURE_RESPONSE, channel->remote_sig_id, channel->remote_cid, flags, L2CAP_CONF_RESULT_UNKNOWN_OPTIONS, 1, &channel->unknown_option);
1551 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1552                 } else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_REJECTED){
1553                     channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_REJECTED);
1554                     channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP);
1555                     uint16_t options_size = l2cap_setup_options_ertm_response(channel, config_options);
1556                     l2cap_send_signaling_packet(channel->con_handle, CONFIGURE_RESPONSE, channel->remote_sig_id, channel->remote_cid, flags, L2CAP_CONF_RESULT_UNACCEPTABLE_PARAMETERS, options_size, &config_options);
1557                 } else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM){
1558                     channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM);
1559                     channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU);
1560                     uint16_t options_size = l2cap_setup_options_ertm_response(channel, config_options);
1561                     l2cap_send_signaling_packet(channel->con_handle, CONFIGURE_RESPONSE, channel->remote_sig_id, channel->remote_cid, flags, L2CAP_CONF_RESULT_SUCCESS, options_size, &config_options);
1562 #endif
1563                 } else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU){
1564                     channelStateVarClearFlag(channel,L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU);
1565                     uint16_t options_size = l2cap_setup_options_mtu_response(channel, config_options);
1566                     l2cap_send_signaling_packet(channel->con_handle, CONFIGURE_RESPONSE, channel->remote_sig_id, channel->remote_cid, flags, L2CAP_CONF_RESULT_SUCCESS, options_size, &config_options);
1567                 } else {
1568                     l2cap_send_signaling_packet(channel->con_handle, CONFIGURE_RESPONSE, channel->remote_sig_id, channel->remote_cid, flags, L2CAP_CONF_RESULT_SUCCESS, 0, NULL);
1569                 }
1570                 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT);
1571             }
1572             else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ){
1573                 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ);
1574                 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_REQ);
1575                 channel->local_sig_id = l2cap_next_sig_id();
1576                 uint16_t options_size = l2cap_setup_options_request(channel, config_options);
1577                 l2cap_send_signaling_packet(channel->con_handle, CONFIGURE_REQUEST, channel->local_sig_id, channel->remote_cid, 0, options_size, &config_options);
1578                 l2cap_start_rtx(channel);
1579             }
1580             if (l2cap_channel_ready_for_open(channel)){
1581                 channel->state = L2CAP_STATE_OPEN;
1582                 l2cap_emit_channel_opened(channel, 0);  // success
1583             }
1584             break;
1585 
1586         case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE:
1587             if (!hci_can_send_acl_packet_now(channel->con_handle)) return false;
1588             channel->state = L2CAP_STATE_INVALID;
1589             l2cap_send_signaling_packet( channel->con_handle, DISCONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid);
1590             // we don't start an RTX timer for a disconnect - there's no point in closing the channel if the other side doesn't respond :)
1591             l2cap_finialize_channel_close(channel);  // -- remove from list
1592             channel = NULL;
1593             break;
1594 
1595         case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST:
1596             if (!hci_can_send_acl_packet_now(channel->con_handle)) return false;
1597             channel->local_sig_id = l2cap_next_sig_id();
1598             channel->state = L2CAP_STATE_WAIT_DISCONNECT;
1599             l2cap_send_signaling_packet( channel->con_handle, DISCONNECTION_REQUEST, channel->local_sig_id, channel->remote_cid, channel->local_cid);
1600             break;
1601         default:
1602             break;
1603     }
1604 
1605     // handle channel finalize on L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE and L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE
1606     return channel == NULL;
1607 }
1608 
1609 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1610 static void l2cap_run_for_classic_channel_ertm(l2cap_channel_t * channel){
1611 
1612     // ERTM mode
1613     if (channel->mode != L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) return;
1614 
1615     // check if we can still send
1616     if (channel->con_handle == HCI_CON_HANDLE_INVALID) return;
1617     if (!hci_can_send_acl_packet_now(channel->con_handle)) return;
1618 
1619     if (channel->send_supervisor_frame_receiver_ready){
1620         channel->send_supervisor_frame_receiver_ready = 0;
1621         log_info("Send S-Frame: RR %u, final %u", channel->req_seq, channel->set_final_bit_after_packet_with_poll_bit_set);
1622         uint16_t control = l2cap_encanced_control_field_for_supevisor_frame( L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY, 0,  channel->set_final_bit_after_packet_with_poll_bit_set, channel->req_seq);
1623         channel->set_final_bit_after_packet_with_poll_bit_set = 0;
1624         l2cap_ertm_send_supervisor_frame(channel, control);
1625         return;
1626     }
1627     if (channel->send_supervisor_frame_receiver_ready_poll){
1628         channel->send_supervisor_frame_receiver_ready_poll = 0;
1629         log_info("Send S-Frame: RR %u with poll=1 ", channel->req_seq);
1630         uint16_t control = l2cap_encanced_control_field_for_supevisor_frame( L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY, 1, 0, channel->req_seq);
1631         l2cap_ertm_send_supervisor_frame(channel, control);
1632         return;
1633     }
1634     if (channel->send_supervisor_frame_receiver_not_ready){
1635         channel->send_supervisor_frame_receiver_not_ready = 0;
1636         log_info("Send S-Frame: RNR %u", channel->req_seq);
1637         uint16_t control = l2cap_encanced_control_field_for_supevisor_frame( L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY, 0, 0, channel->req_seq);
1638         l2cap_ertm_send_supervisor_frame(channel, control);
1639         return;
1640     }
1641     if (channel->send_supervisor_frame_reject){
1642         channel->send_supervisor_frame_reject = 0;
1643         log_info("Send S-Frame: REJ %u", channel->req_seq);
1644         uint16_t control = l2cap_encanced_control_field_for_supevisor_frame( L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT, 0, 0, channel->req_seq);
1645         l2cap_ertm_send_supervisor_frame(channel, control);
1646         return;
1647     }
1648     if (channel->send_supervisor_frame_selective_reject){
1649         channel->send_supervisor_frame_selective_reject = 0;
1650         log_info("Send S-Frame: SREJ %u", channel->expected_tx_seq);
1651         uint16_t control = l2cap_encanced_control_field_for_supevisor_frame( L2CAP_SUPERVISORY_FUNCTION_SREJ_SELECTIVE_REJECT, 0, channel->set_final_bit_after_packet_with_poll_bit_set, channel->expected_tx_seq);
1652         channel->set_final_bit_after_packet_with_poll_bit_set = 0;
1653         l2cap_ertm_send_supervisor_frame(channel, control);
1654         return;
1655     }
1656 
1657     if (channel->srej_active){
1658         int i;
1659         for (i=0;i<channel->num_tx_buffers;i++){
1660             l2cap_ertm_tx_packet_state_t * tx_state = &channel->tx_packets_state[i];
1661             if (tx_state->retransmission_requested) {
1662                 tx_state->retransmission_requested = 0;
1663                 uint8_t final = channel->set_final_bit_after_packet_with_poll_bit_set;
1664                 channel->set_final_bit_after_packet_with_poll_bit_set = 0;
1665                 l2cap_ertm_send_information_frame(channel, i, final);
1666                 break;
1667             }
1668         }
1669         if (i == channel->num_tx_buffers){
1670             // no retransmission request found
1671             channel->srej_active = 0;
1672         } else {
1673             // packet was sent
1674             return;
1675         }
1676     }
1677 }
1678 #endif /* ERTM */
1679 #endif /* Classic */
1680 
1681 static void l2cap_run_signaling_response(void) {
1682 
1683     // check pending signaling responses
1684     while (l2cap_signaling_responses_pending){
1685 
1686         hci_con_handle_t handle = l2cap_signaling_responses[0].handle;
1687 
1688         if (!hci_can_send_acl_packet_now(handle)) break;
1689 
1690         uint8_t  sig_id        = l2cap_signaling_responses[0].sig_id;
1691         uint8_t  response_code = l2cap_signaling_responses[0].code;
1692         uint16_t result        = l2cap_signaling_responses[0].data;  // CONNECTION_REQUEST, COMMAND_REJECT
1693 #ifdef ENABLE_CLASSIC
1694         uint16_t info_type     = l2cap_signaling_responses[0].data;  // INFORMATION_REQUEST
1695         uint16_t source_cid    = l2cap_signaling_responses[0].cid;   // CONNECTION_REQUEST
1696 #endif
1697 
1698         // remove first item before sending (to avoid sending response mutliple times)
1699         l2cap_signaling_responses_pending--;
1700         int i;
1701         for (i=0; i < l2cap_signaling_responses_pending; i++){
1702             (void)memcpy(&l2cap_signaling_responses[i],
1703                          &l2cap_signaling_responses[i + 1],
1704                          sizeof(l2cap_signaling_response_t));
1705         }
1706 
1707         switch (response_code){
1708 #ifdef ENABLE_CLASSIC
1709             case CONNECTION_REQUEST:
1710                 l2cap_send_signaling_packet(handle, CONNECTION_RESPONSE, sig_id, source_cid, 0, result, 0);
1711                 break;
1712             case ECHO_REQUEST:
1713                 l2cap_send_signaling_packet(handle, ECHO_RESPONSE, sig_id, 0, NULL);
1714                 break;
1715             case INFORMATION_REQUEST:
1716                 switch (info_type){
1717                     case L2CAP_INFO_TYPE_CONNECTIONLESS_MTU: {
1718                             uint16_t connectionless_mtu = hci_max_acl_data_packet_length();
1719                             l2cap_send_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, info_type, 0, sizeof(connectionless_mtu), &connectionless_mtu);
1720                         }
1721                         break;
1722                     case L2CAP_INFO_TYPE_EXTENDED_FEATURES_SUPPORTED: {
1723                             uint32_t features = l2cap_extended_features_mask();
1724                             l2cap_send_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, info_type, 0, sizeof(features), &features);
1725                         }
1726                         break;
1727                     case L2CAP_INFO_TYPE_FIXED_CHANNELS_SUPPORTED: {
1728                             uint8_t map[8];
1729                             memset(map, 0, 8);
1730                             // L2CAP Signaling Channel (bit 1) + Connectionless reception (bit 2)
1731                             map[0] = (1 << 1) | (1 << 2);
1732 #ifdef ENABLE_BLE
1733                             // BR/EDR Security Manager (bit 7)
1734                             map[0] |= (1 << 7);
1735 #endif
1736                             l2cap_send_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, info_type, 0, sizeof(map), &map);
1737                         }
1738                         break;
1739                     default:
1740                         // all other types are not supported
1741                         l2cap_send_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, info_type, 1, 0, NULL);
1742                         break;
1743                 }
1744                 break;
1745             case COMMAND_REJECT:
1746                 l2cap_send_signaling_packet(handle, COMMAND_REJECT, sig_id, result, 0, NULL);
1747                 break;
1748 #endif
1749 #ifdef ENABLE_BLE
1750             case LE_CREDIT_BASED_CONNECTION_REQUEST:
1751                 l2cap_send_le_signaling_packet(handle, LE_CREDIT_BASED_CONNECTION_RESPONSE, sig_id, 0, 0, 0, 0, result);
1752                 break;
1753             case COMMAND_REJECT_LE:
1754                 l2cap_send_le_signaling_packet(handle, COMMAND_REJECT, sig_id, result, 0, NULL);
1755                 break;
1756 #endif
1757             default:
1758                 // should not happen
1759                 break;
1760         }
1761     }
1762 }
1763 
1764 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1765 static bool l2ap_run_ertm(void){
1766     // send l2cap information request if neccessary
1767     btstack_linked_list_iterator_t it;
1768     hci_connections_get_iterator(&it);
1769     while(btstack_linked_list_iterator_has_next(&it)){
1770         hci_connection_t * connection = (hci_connection_t *) btstack_linked_list_iterator_next(&it);
1771         if (connection->l2cap_state.information_state == L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST){
1772             if (!hci_can_send_acl_packet_now(connection->con_handle)) break;
1773             connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W4_EXTENDED_FEATURE_RESPONSE;
1774             uint8_t sig_id = l2cap_next_sig_id();
1775             uint8_t info_type = L2CAP_INFO_TYPE_EXTENDED_FEATURES_SUPPORTED;
1776             l2cap_send_signaling_packet(connection->con_handle, INFORMATION_REQUEST, sig_id, info_type);
1777             return true;
1778         }
1779     }
1780     return false;
1781 }
1782 #endif
1783 
1784 #ifdef ENABLE_LE_DATA_CHANNELS
1785 static void l2cap_run_le_data_channels(void){
1786     btstack_linked_list_iterator_t it;
1787     btstack_linked_list_iterator_init(&it, &l2cap_channels);
1788     while (btstack_linked_list_iterator_has_next(&it)){
1789         uint16_t mps;
1790         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
1791 
1792         if (channel->channel_type != L2CAP_CHANNEL_TYPE_LE_DATA_CHANNEL) continue;
1793 
1794         // log_info("l2cap_run: channel %p, state %u, var 0x%02x", channel, channel->state, channel->state_var);
1795         switch (channel->state){
1796             case L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST:
1797                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1798                 channel->state = L2CAP_STATE_WAIT_LE_CONNECTION_RESPONSE;
1799                 // le psm, source cid, mtu, mps, initial credits
1800                 channel->local_sig_id = l2cap_next_sig_id();
1801                 channel->credits_incoming =  channel->new_credits_incoming;
1802                 channel->new_credits_incoming = 0;
1803                 mps = btstack_min(l2cap_max_le_mtu(), channel->local_mtu);
1804                 l2cap_send_le_signaling_packet( channel->con_handle, LE_CREDIT_BASED_CONNECTION_REQUEST, channel->local_sig_id, channel->psm, channel->local_cid, channel->local_mtu, mps, channel->credits_incoming);
1805                 break;
1806             case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_ACCEPT:
1807                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1808                 // TODO: support larger MPS
1809                 channel->state = L2CAP_STATE_OPEN;
1810                 channel->credits_incoming =  channel->new_credits_incoming;
1811                 channel->new_credits_incoming = 0;
1812                 mps = btstack_min(l2cap_max_le_mtu(), channel->local_mtu);
1813                 l2cap_send_le_signaling_packet(channel->con_handle, LE_CREDIT_BASED_CONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->local_mtu, mps, channel->credits_incoming, 0);
1814                 // notify client
1815                 l2cap_emit_le_channel_opened(channel, 0);
1816                 break;
1817             case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_DECLINE:
1818                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1819                 channel->state = L2CAP_STATE_INVALID;
1820                 l2cap_send_le_signaling_packet(channel->con_handle, LE_CREDIT_BASED_CONNECTION_RESPONSE, channel->remote_sig_id, 0, 0, 0, 0, channel->reason);
1821                 // discard channel - l2cap_finialize_channel_close without sending l2cap close event
1822                 btstack_linked_list_iterator_remove(&it);
1823                 l2cap_free_channel_entry(channel);
1824                 break;
1825             case L2CAP_STATE_OPEN:
1826                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1827 
1828                 // send credits
1829                 if (channel->new_credits_incoming){
1830                     log_info("l2cap: sending %u credits", channel->new_credits_incoming);
1831                     channel->local_sig_id = l2cap_next_sig_id();
1832                     uint16_t new_credits = channel->new_credits_incoming;
1833                     channel->new_credits_incoming = 0;
1834                     channel->credits_incoming += new_credits;
1835                     l2cap_send_le_signaling_packet(channel->con_handle, LE_FLOW_CONTROL_CREDIT, channel->local_sig_id, channel->remote_cid, new_credits);
1836                 }
1837                 break;
1838 
1839             case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST:
1840                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1841                 channel->local_sig_id = l2cap_next_sig_id();
1842                 channel->state = L2CAP_STATE_WAIT_DISCONNECT;
1843                 l2cap_send_le_signaling_packet( channel->con_handle, DISCONNECTION_REQUEST, channel->local_sig_id, channel->remote_cid, channel->local_cid);
1844                 break;
1845             case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE:
1846                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1847                 channel->state = L2CAP_STATE_INVALID;
1848                 l2cap_send_le_signaling_packet( channel->con_handle, DISCONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid);
1849                 l2cap_le_finialize_channel_close(channel);  // -- remove from list
1850                 break;
1851             default:
1852                 break;
1853         }
1854     }
1855 }
1856 #endif
1857 
1858 // MARK: L2CAP_RUN
1859 // process outstanding signaling tasks
1860 static void l2cap_run(void){
1861 
1862     // log_info("l2cap_run: entered");
1863     l2cap_run_signaling_response();
1864 
1865 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1866     bool done = l2ap_run_ertm();
1867     if (done) return;
1868 #endif
1869 
1870 #if defined(ENABLE_CLASSIC) || defined(ENABLE_BLE)
1871     btstack_linked_list_iterator_t it;
1872 #endif
1873 
1874 #ifdef ENABLE_CLASSIC
1875     btstack_linked_list_iterator_init(&it, &l2cap_channels);
1876     while (btstack_linked_list_iterator_has_next(&it)){
1877 
1878         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
1879 
1880         if (channel->channel_type != L2CAP_CHANNEL_TYPE_CLASSIC) continue;
1881 
1882         // log_info("l2cap_run: channel %p, state %u, var 0x%02x", channel, channel->state, channel->state_var);
1883         bool finalized = l2cap_run_for_classic_channel(channel);
1884 
1885         if (!finalized) {
1886 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1887             l2cap_run_for_classic_channel_ertm(channel);
1888 #endif
1889         }
1890     }
1891 #endif
1892 
1893 #ifdef ENABLE_LE_DATA_CHANNELS
1894     l2cap_run_le_data_channels();
1895 #endif
1896 
1897 #ifdef ENABLE_BLE
1898     // send l2cap con paramter update if necessary
1899     hci_connections_get_iterator(&it);
1900     while(btstack_linked_list_iterator_has_next(&it)){
1901         hci_connection_t * connection = (hci_connection_t *) btstack_linked_list_iterator_next(&it);
1902         if ((connection->address_type != BD_ADDR_TYPE_LE_PUBLIC) && (connection->address_type != BD_ADDR_TYPE_LE_RANDOM)) continue;
1903         if (!hci_can_send_acl_packet_now(connection->con_handle)) continue;
1904         switch (connection->le_con_parameter_update_state){
1905             case CON_PARAMETER_UPDATE_SEND_REQUEST:
1906                 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_NONE;
1907                 l2cap_send_le_signaling_packet(connection->con_handle, CONNECTION_PARAMETER_UPDATE_REQUEST, l2cap_next_sig_id(),
1908                                                connection->le_conn_interval_min, connection->le_conn_interval_max, connection->le_conn_latency, connection->le_supervision_timeout);
1909                 break;
1910             case CON_PARAMETER_UPDATE_SEND_RESPONSE:
1911                 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_CHANGE_HCI_CON_PARAMETERS;
1912                 l2cap_send_le_signaling_packet(connection->con_handle, CONNECTION_PARAMETER_UPDATE_RESPONSE, connection->le_con_param_update_identifier, 0);
1913                 break;
1914             case CON_PARAMETER_UPDATE_DENY:
1915                 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_NONE;
1916                 l2cap_send_le_signaling_packet(connection->con_handle, CONNECTION_PARAMETER_UPDATE_RESPONSE, connection->le_con_param_update_identifier, 1);
1917                 break;
1918             default:
1919                 break;
1920         }
1921     }
1922 #endif
1923 
1924     // log_info("l2cap_run: exit");
1925 }
1926 
1927 #ifdef ENABLE_CLASSIC
1928 static void l2cap_handle_connection_complete(hci_con_handle_t con_handle, l2cap_channel_t * channel){
1929     if ((channel->state == L2CAP_STATE_WAIT_CONNECTION_COMPLETE) || (channel->state == L2CAP_STATE_WILL_SEND_CREATE_CONNECTION)) {
1930         log_info("connection complete con_handle %04x - for channel %p cid 0x%04x", (int) con_handle, channel, channel->local_cid);
1931         // success, start l2cap handshake
1932         channel->con_handle = con_handle;
1933         // check remote SSP feature first
1934         channel->state = L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES;
1935     }
1936 }
1937 
1938 static void l2cap_ready_to_connect(l2cap_channel_t * channel){
1939 
1940 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1941     // assumption: outgoing connection
1942     hci_connection_t * connection = hci_connection_for_handle(channel->con_handle);
1943     if (connection->l2cap_state.information_state == L2CAP_INFORMATION_STATE_IDLE){
1944         connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST;
1945         channel->state = L2CAP_STATE_WAIT_OUTGOING_EXTENDED_FEATURES;
1946         return;
1947     }
1948 #endif
1949 
1950     // fine, go ahead
1951     channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST;
1952 }
1953 
1954 static void l2cap_handle_remote_supported_features_received(l2cap_channel_t * channel){
1955     if (channel->state != L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES) return;
1956 
1957     // abort if Secure Connections Only Mode with legacy connection
1958     if (gap_get_secure_connections_only_mode() && gap_secure_connection(channel->con_handle) == false){
1959         l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY);
1960         btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t  *) channel);
1961         l2cap_free_channel_entry(channel);
1962         return;
1963     }
1964 
1965     // we have been waiting for remote supported features
1966     if (channel->required_security_level > LEVEL_0){
1967         // request security level
1968         channel->state = L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE;
1969         gap_request_security_level(channel->con_handle, channel->required_security_level);
1970         return;
1971     }
1972 
1973     l2cap_ready_to_connect(channel);
1974 }
1975 #endif
1976 
1977 #ifdef L2CAP_USES_CHANNELS
1978 static l2cap_channel_t * l2cap_create_channel_entry(btstack_packet_handler_t packet_handler, l2cap_channel_type_t channel_type, bd_addr_t address, bd_addr_type_t address_type,
1979     uint16_t psm, uint16_t local_mtu, gap_security_level_t security_level){
1980 
1981     l2cap_channel_t * channel = btstack_memory_l2cap_channel_get();
1982     if (!channel) {
1983         return NULL;
1984     }
1985 
1986     // fill in
1987     channel->packet_handler = packet_handler;
1988     channel->channel_type   = channel_type;
1989     bd_addr_copy(channel->address, address);
1990     channel->address_type = address_type;
1991     channel->psm = psm;
1992     channel->local_mtu  = local_mtu;
1993     channel->remote_mtu = L2CAP_DEFAULT_MTU;
1994     channel->required_security_level = security_level;
1995 
1996     //
1997     channel->local_cid = l2cap_next_local_cid();
1998     channel->con_handle = HCI_CON_HANDLE_INVALID;
1999 
2000     // set initial state
2001     channel->state = L2CAP_STATE_WILL_SEND_CREATE_CONNECTION;
2002     channel->state_var = L2CAP_CHANNEL_STATE_VAR_NONE;
2003     channel->remote_sig_id = L2CAP_SIG_ID_INVALID;
2004     channel->local_sig_id = L2CAP_SIG_ID_INVALID;
2005 
2006     log_info("create channel %p, local_cid 0x%04x", channel, channel->local_cid);
2007 
2008     return channel;
2009 }
2010 
2011 static void l2cap_free_channel_entry(l2cap_channel_t * channel){
2012     log_info("free channel %p, local_cid 0x%04x", channel, channel->local_cid);
2013     // assert all timers are stopped
2014     l2cap_stop_rtx(channel);
2015 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2016     l2cap_ertm_stop_retransmission_timer(channel);
2017     l2cap_ertm_stop_monitor_timer(channel);
2018 #endif
2019     // free  memory
2020     btstack_memory_l2cap_channel_free(channel);
2021 }
2022 #endif
2023 
2024 #ifdef ENABLE_CLASSIC
2025 
2026 /**
2027  * @brief Creates L2CAP channel to the PSM of a remote device with baseband address. A new baseband connection will be initiated if necessary.
2028  * @param packet_handler
2029  * @param address
2030  * @param psm
2031  * @param mtu
2032  * @param local_cid
2033  */
2034 
2035 uint8_t l2cap_create_channel(btstack_packet_handler_t channel_packet_handler, bd_addr_t address, uint16_t psm, uint16_t mtu, uint16_t * out_local_cid){
2036     // limit MTU to the size of our outgoing HCI buffer
2037     uint16_t local_mtu = btstack_min(mtu, l2cap_max_mtu());
2038 
2039 	// determine security level based on psm
2040 	const gap_security_level_t security_level = l2cap_security_level_0_allowed_for_PSM(psm) ? LEVEL_0 : gap_get_security_level();
2041 	log_info("create channel addr %s psm 0x%x mtu %u -> local mtu %u, sec level %u", bd_addr_to_str(address), psm, mtu, local_mtu, (int) security_level);
2042 
2043     l2cap_channel_t * channel = l2cap_create_channel_entry(channel_packet_handler, L2CAP_CHANNEL_TYPE_CLASSIC, address, BD_ADDR_TYPE_ACL, psm, local_mtu, security_level);
2044     if (!channel) {
2045         return BTSTACK_MEMORY_ALLOC_FAILED;
2046     }
2047 
2048 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2049     channel->mode = L2CAP_CHANNEL_MODE_BASIC;
2050 #endif
2051 
2052     // add to connections list
2053     btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel);
2054 
2055     // store local_cid
2056     if (out_local_cid){
2057        *out_local_cid = channel->local_cid;
2058     }
2059 
2060 	// state: L2CAP_STATE_WILL_SEND_CREATE_CONNECTION
2061 
2062     // check if hci connection is already usable,
2063     hci_connection_t * conn = hci_connection_for_bd_addr_and_type(address, BD_ADDR_TYPE_ACL);
2064     if (conn && conn->state == OPEN){
2065     	// simulate connection complete
2066 	    l2cap_handle_connection_complete(conn->con_handle, channel);
2067 
2068 		// state: L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES
2069 
2070         // check if remote supported features are already received
2071         if (conn->bonding_flags & BONDING_RECEIVED_REMOTE_FEATURES) {
2072         	// simulate remote features received
2073             l2cap_handle_remote_supported_features_received(channel);
2074         }
2075     }
2076 
2077     l2cap_run();
2078 
2079     return ERROR_CODE_SUCCESS;
2080 }
2081 
2082 void l2cap_disconnect(uint16_t local_cid, uint8_t reason){
2083     log_info("disconnect local_cid 0x%x reason 0x%x", local_cid, reason);
2084     UNUSED(reason);
2085     // find channel for local_cid
2086     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
2087     if (channel) {
2088         channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2089     }
2090     // process
2091     l2cap_run();
2092 }
2093 
2094 static void l2cap_handle_connection_failed_for_addr(bd_addr_t address, uint8_t status){
2095     // mark all channels before emitting open events as these could trigger new connetion requests to the same device
2096     btstack_linked_list_iterator_t it;
2097     btstack_linked_list_iterator_init(&it, &l2cap_channels);
2098     while (btstack_linked_list_iterator_has_next(&it)){
2099         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2100         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2101         if (bd_addr_cmp( channel->address, address) != 0) continue;
2102         // channel for this address found
2103         switch (channel->state){
2104             case L2CAP_STATE_WAIT_CONNECTION_COMPLETE:
2105             case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION:
2106                 channel->state = L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD;
2107                 break;
2108             default:
2109                 break;
2110         }
2111     }
2112     // emit and free marked entries. restart loop to deal with list changes
2113     int done = 0;
2114     while (!done) {
2115         done = 1;
2116         btstack_linked_list_iterator_init(&it, &l2cap_channels);
2117         while (btstack_linked_list_iterator_has_next(&it)){
2118             l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2119             if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2120             if (channel->state == L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD){
2121                 done = 0;
2122                 // failure, forward error code
2123                 l2cap_handle_channel_open_failed(channel, status);
2124                 // discard channel
2125                 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
2126                 l2cap_free_channel_entry(channel);
2127                 break;
2128             }
2129         }
2130     }
2131 
2132 }
2133 
2134 static void l2cap_handle_connection_success_for_addr(bd_addr_t address, hci_con_handle_t handle){
2135     btstack_linked_list_iterator_t it;
2136     btstack_linked_list_iterator_init(&it, &l2cap_channels);
2137     while (btstack_linked_list_iterator_has_next(&it)){
2138         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2139         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2140         if ( ! bd_addr_cmp( channel->address, address) ){
2141             l2cap_handle_connection_complete(handle, channel);
2142         }
2143     }
2144     // process
2145     l2cap_run();
2146 }
2147 #endif
2148 
2149 static bool l2cap_channel_ready_to_send(l2cap_channel_t * channel){
2150     switch (channel->channel_type){
2151 #ifdef ENABLE_CLASSIC
2152         case L2CAP_CHANNEL_TYPE_CLASSIC:
2153             if (channel->state != L2CAP_STATE_OPEN) return false;
2154 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2155             // send if we have more data and remote windows isn't full yet
2156             if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) {
2157                 if (channel->unacked_frames >= btstack_min(channel->num_stored_tx_frames, channel->remote_tx_window_size)) return false;
2158                 return hci_can_send_acl_classic_packet_now() != 0;
2159             }
2160 #endif
2161             if (!channel->waiting_for_can_send_now) return false;
2162             return (hci_can_send_acl_classic_packet_now() != 0);
2163         case L2CAP_CHANNEL_TYPE_CONNECTIONLESS:
2164             if (!channel->waiting_for_can_send_now) return false;
2165             return hci_can_send_acl_classic_packet_now() != 0;
2166 #endif
2167 #ifdef ENABLE_BLE
2168         case L2CAP_CHANNEL_TYPE_FIXED:
2169             if (!channel->waiting_for_can_send_now) return false;
2170             return hci_can_send_acl_le_packet_now() != 0;
2171 #ifdef ENABLE_LE_DATA_CHANNELS
2172         case L2CAP_CHANNEL_TYPE_LE_DATA_CHANNEL:
2173             if (channel->state != L2CAP_STATE_OPEN) return false;
2174             if (channel->send_sdu_buffer == NULL) return false;
2175             if (channel->credits_outgoing == 0u) return false;
2176             return hci_can_send_acl_le_packet_now() != 0;
2177 #endif
2178 #endif
2179         default:
2180             return false;
2181     }
2182 }
2183 
2184 static void l2cap_channel_trigger_send(l2cap_channel_t * channel){
2185     switch (channel->channel_type){
2186 #ifdef ENABLE_CLASSIC
2187         case L2CAP_CHANNEL_TYPE_CLASSIC:
2188 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2189             if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) {
2190                 l2cap_ertm_channel_send_information_frame(channel);
2191                 return;
2192             }
2193 #endif
2194             channel->waiting_for_can_send_now = 0;
2195             l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid);
2196             break;
2197         case L2CAP_CHANNEL_TYPE_CONNECTIONLESS:
2198             channel->waiting_for_can_send_now = 0;
2199             l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid);
2200             break;
2201 #endif
2202 #ifdef ENABLE_BLE
2203         case L2CAP_CHANNEL_TYPE_FIXED:
2204             channel->waiting_for_can_send_now = 0;
2205             l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid);
2206             break;
2207 #ifdef ENABLE_LE_DATA_CHANNELS
2208         case L2CAP_CHANNEL_TYPE_LE_DATA_CHANNEL:
2209             l2cap_le_send_pdu(channel);
2210             break;
2211 #endif
2212 #endif
2213         default:
2214             break;
2215     }
2216 }
2217 
2218 static void l2cap_notify_channel_can_send(void){
2219     bool done = false;
2220     while (!done){
2221         done = true;
2222         btstack_linked_list_iterator_t it;
2223         btstack_linked_list_iterator_init(&it, &l2cap_channels);
2224         while (btstack_linked_list_iterator_has_next(&it)){
2225             l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2226             bool ready = l2cap_channel_ready_to_send(channel);
2227             if (!ready) continue;
2228 
2229             // requeue channel for fairness
2230             btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
2231             btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel);
2232 
2233             // trigger sending
2234             l2cap_channel_trigger_send(channel);
2235 
2236             // exit inner loop as we just broke the iterator, but try again
2237             done = false;
2238             break;
2239         }
2240     }
2241 }
2242 
2243 #ifdef L2CAP_USES_CHANNELS
2244 
2245 static int l2cap_send_open_failed_on_hci_disconnect(l2cap_channel_t * channel){
2246     // open cannot fail for for incoming connections
2247     if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) return 0;
2248 
2249     // check state
2250     switch (channel->state){
2251         case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION:
2252         case L2CAP_STATE_WAIT_CONNECTION_COMPLETE:
2253         case L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES:
2254         case L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE:
2255         case L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT:
2256         case L2CAP_STATE_WAIT_OUTGOING_EXTENDED_FEATURES:
2257         case L2CAP_STATE_WAIT_CONNECT_RSP:
2258         case L2CAP_STATE_CONFIG:
2259         case L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST:
2260         case L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST:
2261         case L2CAP_STATE_WAIT_LE_CONNECTION_RESPONSE:
2262         case L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD:
2263             return 1;
2264 
2265         case L2CAP_STATE_OPEN:
2266         case L2CAP_STATE_CLOSED:
2267         case L2CAP_STATE_WAIT_INCOMING_EXTENDED_FEATURES:
2268         case L2CAP_STATE_WAIT_DISCONNECT:
2269         case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_INSUFFICIENT_SECURITY:
2270         case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE:
2271         case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT:
2272         case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST:
2273         case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE:
2274         case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_DECLINE:
2275         case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_ACCEPT:
2276         case L2CAP_STATE_INVALID:
2277         case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE:
2278             return 0;
2279 
2280         default:
2281             // get a "warning" about new states
2282             btstack_assert(false);
2283             return 0;
2284     }
2285 }
2286 #endif
2287 
2288 #ifdef ENABLE_CLASSIC
2289 static void l2cap_handle_hci_disconnect_event(l2cap_channel_t * channel){
2290     if (l2cap_send_open_failed_on_hci_disconnect(channel)){
2291         l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_BASEBAND_DISCONNECT);
2292     } else {
2293         l2cap_handle_channel_closed(channel);
2294     }
2295     l2cap_free_channel_entry(channel);
2296 }
2297 #endif
2298 
2299 #ifdef ENABLE_LE_DATA_CHANNELS
2300 static void l2cap_handle_hci_le_disconnect_event(l2cap_channel_t * channel){
2301     if (l2cap_send_open_failed_on_hci_disconnect(channel)){
2302         l2cap_emit_le_channel_opened(channel, L2CAP_CONNECTION_BASEBAND_DISCONNECT);
2303     } else {
2304         l2cap_emit_le_channel_closed(channel);
2305     }
2306     l2cap_free_channel_entry(channel);
2307 }
2308 #endif
2309 
2310 #ifdef ENABLE_CLASSIC
2311 static void l2cap_check_classic_timeout(hci_con_handle_t handle){
2312     if (gap_get_connection_type(handle) != GAP_CONNECTION_ACL) {
2313         return;
2314     }
2315     if (hci_authentication_active_for_handle(handle)) {
2316         return;
2317     }
2318     bool hci_con_used = false;
2319     btstack_linked_list_iterator_t it;
2320     btstack_linked_list_iterator_init(&it, &l2cap_channels);
2321     while (btstack_linked_list_iterator_has_next(&it)){
2322         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2323         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2324         if (channel->con_handle != handle) continue;
2325         hci_con_used = true;
2326         break;
2327     }
2328     if (hci_con_used) {
2329         return;
2330     }
2331     if (!hci_can_send_command_packet_now()) {
2332         return;
2333     }
2334     hci_send_cmd(&hci_disconnect, handle, 0x13); // remote closed connection
2335 }
2336 static void l2cap_handle_features_complete(hci_con_handle_t handle){
2337     hci_connection_t * hci_connection = hci_connection_for_handle(handle);
2338     if (hci_connection == NULL) {
2339         return;
2340     };
2341     if ((hci_connection->bonding_flags & BONDING_RECEIVED_REMOTE_FEATURES) == 0) {
2342         return;
2343     }
2344     btstack_linked_list_iterator_t it;
2345     btstack_linked_list_iterator_init(&it, &l2cap_channels);
2346     while (btstack_linked_list_iterator_has_next(&it)){
2347         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2348         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2349         if (channel->con_handle != handle) continue;
2350         log_info("remote supported features, channel %p, cid %04x - state %u", channel, channel->local_cid, channel->state);
2351         l2cap_handle_remote_supported_features_received(channel);
2352     }
2353 }
2354 
2355 static void l2cap_handle_security_level_incoming_sufficient(l2cap_channel_t * channel){
2356 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2357     // we need to know if ERTM is supported before sending a config response
2358     hci_connection_t * connection = hci_connection_for_handle(channel->con_handle);
2359     if (connection->l2cap_state.information_state != L2CAP_INFORMATION_STATE_DONE){
2360         connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST;
2361         channel->state = L2CAP_STATE_WAIT_INCOMING_EXTENDED_FEATURES;
2362         return;
2363     }
2364 #endif
2365     channel->state = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT;
2366     l2cap_emit_incoming_connection(channel);
2367 }
2368 
2369 static void l2cap_handle_security_level(hci_con_handle_t handle, gap_security_level_t actual_level){
2370     log_info("security level update for handle 0x%04x", handle);
2371     btstack_linked_list_iterator_t it;
2372     btstack_linked_list_iterator_init(&it, &l2cap_channels);
2373     while (btstack_linked_list_iterator_has_next(&it)){
2374         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2375         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2376         if (channel->con_handle != handle) continue;
2377 
2378         gap_security_level_t required_level = channel->required_security_level;
2379 
2380         log_info("channel %p, cid %04x - state %u: actual %u >= required %u?", channel, channel->local_cid, channel->state, actual_level, required_level);
2381 
2382         switch (channel->state){
2383             case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE:
2384                 if (actual_level >= required_level){
2385                     l2cap_handle_security_level_incoming_sufficient(channel);
2386                 } else {
2387                     channel->reason = 0x0003; // security block
2388                     channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE;
2389                 }
2390                 break;
2391 
2392             case L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE:
2393                 if (actual_level >= required_level){
2394                     l2cap_ready_to_connect(channel);
2395                 } else {
2396                     // security level insufficient, report error and free channel
2397                     l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY);
2398                     btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t  *) channel);
2399                     l2cap_free_channel_entry(channel);
2400                 }
2401                 break;
2402 
2403             default:
2404                 break;
2405         }
2406     }
2407 }
2408 #endif
2409 
2410 #ifdef L2CAP_USES_CHANNELS
2411 static void l2cap_handle_disconnection_complete(hci_con_handle_t handle){
2412     // collect channels to close
2413     btstack_linked_list_t channels_to_close = NULL;
2414     btstack_linked_list_iterator_t it;
2415     btstack_linked_list_iterator_init(&it, &l2cap_channels);
2416     while (btstack_linked_list_iterator_has_next(&it)) {
2417         l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2418         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2419         if (channel->con_handle != handle) continue;
2420         btstack_linked_list_iterator_remove(&it);
2421         btstack_linked_list_add(&channels_to_close, (btstack_linked_item_t *) channel);
2422     }
2423     // send l2cap open failed or closed events for all channels on this handle and free them
2424     btstack_linked_list_iterator_init(&it, &channels_to_close);
2425     while (btstack_linked_list_iterator_has_next(&it)) {
2426         l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2427         btstack_linked_list_iterator_remove(&it);
2428         switch(channel->channel_type){
2429 #ifdef ENABLE_CLASSIC
2430             case L2CAP_CHANNEL_TYPE_CLASSIC:
2431                 l2cap_handle_hci_disconnect_event(channel);
2432                 break;
2433 #endif
2434 #ifdef ENABLE_LE_DATA_CHANNELS
2435             case L2CAP_CHANNEL_TYPE_LE_DATA_CHANNEL:
2436                 l2cap_handle_hci_le_disconnect_event(channel);
2437                 break;
2438 #endif
2439             default:
2440                 break;
2441         }
2442     }
2443 }
2444 #endif
2445 
2446 static void l2cap_hci_event_handler(uint8_t packet_type, uint16_t cid, uint8_t *packet, uint16_t size){
2447 
2448     UNUSED(packet_type); // ok: registered with hci_event_callback_registration
2449     UNUSED(cid);         // ok: there is no channel
2450     UNUSED(size);        // ok: fixed format events read from HCI buffer
2451 
2452 #ifdef ENABLE_CLASSIC
2453     bd_addr_t address;
2454     gap_security_level_t security_level;
2455 #endif
2456 #ifdef L2CAP_USES_CHANNELS
2457     hci_con_handle_t handle;
2458 #endif
2459 
2460     switch(hci_event_packet_get_type(packet)){
2461 
2462         // Notify channel packet handler if they can send now
2463         case HCI_EVENT_TRANSPORT_PACKET_SENT:
2464         case HCI_EVENT_NUMBER_OF_COMPLETED_PACKETS:
2465         case BTSTACK_EVENT_NR_CONNECTIONS_CHANGED:
2466             l2cap_run();    // try sending signaling packets first
2467             l2cap_notify_channel_can_send();
2468             break;
2469 
2470         case HCI_EVENT_COMMAND_STATUS:
2471 #ifdef ENABLE_CLASSIC
2472             // check command status for create connection for errors
2473             if (HCI_EVENT_IS_COMMAND_STATUS(packet, hci_create_connection)){
2474                 // cache outgoing address and reset
2475                 (void)memcpy(address, l2cap_outgoing_classic_addr, 6);
2476                 memset(l2cap_outgoing_classic_addr, 0, 6);
2477                 // error => outgoing connection failed
2478                 uint8_t status = hci_event_command_status_get_status(packet);
2479                 if (status){
2480                     l2cap_handle_connection_failed_for_addr(address, status);
2481                 }
2482             }
2483 #endif
2484             l2cap_run();    // try sending signaling packets first
2485             break;
2486 
2487 #ifdef ENABLE_CLASSIC
2488         // handle connection complete events
2489         case HCI_EVENT_CONNECTION_COMPLETE:
2490             reverse_bd_addr(&packet[5], address);
2491             if (packet[2] == 0){
2492                 handle = little_endian_read_16(packet, 3);
2493                 l2cap_handle_connection_success_for_addr(address, handle);
2494             } else {
2495                 l2cap_handle_connection_failed_for_addr(address, packet[2]);
2496             }
2497             break;
2498 
2499         // handle successful create connection cancel command
2500         case HCI_EVENT_COMMAND_COMPLETE:
2501             if (HCI_EVENT_IS_COMMAND_COMPLETE(packet, hci_create_connection_cancel)) {
2502                 if (packet[5] == 0){
2503                     reverse_bd_addr(&packet[6], address);
2504                     // CONNECTION TERMINATED BY LOCAL HOST (0X16)
2505                     l2cap_handle_connection_failed_for_addr(address, 0x16);
2506                 }
2507             }
2508             l2cap_run();    // try sending signaling packets first
2509             break;
2510 #endif
2511 
2512 #ifdef L2CAP_USES_CHANNELS
2513         // handle disconnection complete events
2514         case HCI_EVENT_DISCONNECTION_COMPLETE:
2515             handle = little_endian_read_16(packet, 3);
2516             l2cap_handle_disconnection_complete(handle);
2517             break;
2518 #endif
2519 
2520         // HCI Connection Timeouts
2521 #ifdef ENABLE_CLASSIC
2522         case L2CAP_EVENT_TIMEOUT_CHECK:
2523             handle = little_endian_read_16(packet, 2);
2524             l2cap_check_classic_timeout(handle);
2525             break;
2526 
2527         case HCI_EVENT_READ_REMOTE_SUPPORTED_FEATURES_COMPLETE:
2528         case HCI_EVENT_READ_REMOTE_EXTENDED_FEATURES_COMPLETE:
2529             handle = little_endian_read_16(packet, 3);
2530             l2cap_handle_features_complete(handle);
2531             break;
2532 
2533         case GAP_EVENT_SECURITY_LEVEL:
2534             handle = little_endian_read_16(packet, 2);
2535             security_level = (gap_security_level_t) packet[4];
2536             l2cap_handle_security_level(handle, security_level);
2537             break;
2538 #endif
2539         default:
2540             break;
2541     }
2542 
2543     l2cap_run();
2544 }
2545 
2546 static void l2cap_register_signaling_response(hci_con_handle_t handle, uint8_t code, uint8_t sig_id, uint16_t cid, uint16_t data){
2547     // Vol 3, Part A, 4.3: "The DCID and SCID fields shall be ignored when the result field indi- cates the connection was refused."
2548     if (l2cap_signaling_responses_pending < NR_PENDING_SIGNALING_RESPONSES) {
2549         l2cap_signaling_responses[l2cap_signaling_responses_pending].handle = handle;
2550         l2cap_signaling_responses[l2cap_signaling_responses_pending].code = code;
2551         l2cap_signaling_responses[l2cap_signaling_responses_pending].sig_id = sig_id;
2552         l2cap_signaling_responses[l2cap_signaling_responses_pending].cid = cid;
2553         l2cap_signaling_responses[l2cap_signaling_responses_pending].data = data;
2554         l2cap_signaling_responses_pending++;
2555         l2cap_run();
2556     }
2557 }
2558 
2559 #ifdef ENABLE_CLASSIC
2560 static void l2cap_handle_disconnect_request(l2cap_channel_t *channel, uint16_t identifier){
2561     switch (channel->state){
2562         case L2CAP_STATE_CONFIG:
2563         case L2CAP_STATE_OPEN:
2564         case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST:
2565         case L2CAP_STATE_WAIT_DISCONNECT:
2566             break;
2567         default:
2568             // ignore in other states
2569             return;
2570     }
2571 
2572     channel->remote_sig_id = identifier;
2573     channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE;
2574     l2cap_run();
2575 }
2576 
2577 static void l2cap_handle_connection_request(hci_con_handle_t handle, uint8_t sig_id, uint16_t psm, uint16_t source_cid){
2578 
2579     // log_info("l2cap_handle_connection_request for handle %u, psm %u cid 0x%02x", handle, psm, source_cid);
2580     l2cap_service_t *service = l2cap_get_service(psm);
2581     if (!service) {
2582         // 0x0002 PSM not supported
2583         l2cap_register_signaling_response(handle, CONNECTION_REQUEST, sig_id, source_cid, 0x0002);
2584         return;
2585     }
2586 
2587     hci_connection_t * hci_connection = hci_connection_for_handle( handle );
2588     if (!hci_connection) {
2589         //
2590         log_error("no hci_connection for handle %u", handle);
2591         return;
2592     }
2593 
2594     // Core V5.2, Vol 3, Part C, 5.2.2.2 - Security Mode 4
2595     //   When a remote device attempts to access a service offered by a Bluetooth device that is in security mode 4
2596     //   and a sufficient link key exists and authentication has not been performed the local device shall authenticate
2597     //   the remote device and enable encryption after the channel establishment request is received but before a channel
2598     //   establishment confirmation (L2CAP_ConnectRsp with result code of 0x0000 or a higher-level channel establishment
2599     //   confirmation such as that of RFCOMM) is sent.
2600 
2601     //   If the remote device has indicated support for Secure Simple Pairing, a channel establishment request is
2602     //   received for a service other than SDP, and encryption has not yet been enabled, then the local device shall
2603     //   disconnect the ACL link with error code 0x05 - Authentication Failure.
2604 
2605     // => Disconnect if l2cap request received in mode 4 and ssp supported, non-sdp psm, not encrypted, no link key available
2606     if ((gap_get_security_mode() == GAP_SECURITY_MODE_4)
2607         && gap_ssp_supported_on_both_sides(handle)
2608         && (psm != PSM_SDP)
2609         && (gap_encryption_key_size(handle) == 0)
2610         && (gap_bonded(handle) == false)){
2611         hci_disconnect_security_block(handle);
2612         return;
2613     }
2614 
2615     // alloc structure
2616     gap_security_level_t required_level = service->required_security_level;
2617     if (gap_get_secure_connections_only_mode() && (required_level != LEVEL_0)){
2618         required_level = LEVEL_4;
2619     }
2620     l2cap_channel_t * channel = l2cap_create_channel_entry(service->packet_handler, L2CAP_CHANNEL_TYPE_CLASSIC, hci_connection->address, BD_ADDR_TYPE_ACL,
2621     psm, service->mtu, required_level);
2622     if (!channel){
2623         // 0x0004 No resources available
2624         l2cap_register_signaling_response(handle, CONNECTION_REQUEST, sig_id, source_cid, 0x0004);
2625         return;
2626     }
2627 
2628     channel->con_handle = handle;
2629     channel->remote_cid = source_cid;
2630     channel->remote_sig_id = sig_id;
2631 
2632     // limit local mtu to max acl packet length - l2cap header
2633     if (channel->local_mtu > l2cap_max_mtu()) {
2634         channel->local_mtu = l2cap_max_mtu();
2635     }
2636 
2637     // set initial state
2638     channel->state =      L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE;
2639 
2640     // add to connections list
2641     btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel);
2642 
2643     // assert security requirements
2644     if (channel->required_security_level <= gap_security_level(handle)){
2645         channel->state_var  = (L2CAP_CHANNEL_STATE_VAR) (L2CAP_CHANNEL_STATE_VAR_INCOMING);
2646         l2cap_handle_security_level_incoming_sufficient(channel);
2647     } else {
2648         channel->state_var  = (L2CAP_CHANNEL_STATE_VAR) (L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND | L2CAP_CHANNEL_STATE_VAR_INCOMING);
2649         gap_request_security_level(handle, channel->required_security_level);
2650     }
2651 }
2652 
2653 void l2cap_accept_connection(uint16_t local_cid){
2654     log_info("L2CAP_ACCEPT_CONNECTION local_cid 0x%x", local_cid);
2655     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
2656     if (!channel) {
2657         log_error("accept called but local_cid 0x%x not found", local_cid);
2658         return;
2659     }
2660 
2661 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2662     // configure L2CAP Basic mode
2663     channel->mode  = L2CAP_CHANNEL_MODE_BASIC;
2664 #endif
2665 
2666     channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT;
2667 
2668     // process
2669     l2cap_run();
2670 }
2671 
2672 void l2cap_decline_connection(uint16_t local_cid){
2673     log_info("decline local_cid 0x%x", local_cid);
2674     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid( local_cid);
2675     if (!channel) {
2676         log_error( "l2cap_decline_connection called but local_cid 0x%x not found", local_cid);
2677         return;
2678     }
2679     channel->state  = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE;
2680     channel->reason = 0x04; // no resources available
2681     l2cap_run();
2682 }
2683 
2684 // @pre command len is valid, see check in l2cap_signaling_handler_channel
2685 static void l2cap_signaling_handle_configure_request(l2cap_channel_t *channel, uint8_t *command){
2686 
2687 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2688     uint8_t use_fcs = 1;
2689 #endif
2690 
2691     channel->remote_sig_id = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET];
2692 
2693     uint16_t flags = little_endian_read_16(command, 6);
2694     if (flags & 1) {
2695         channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT);
2696     }
2697 
2698     // accept the other's configuration options
2699     uint16_t end_pos = 4 + little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
2700     uint16_t pos     = 8;
2701     while (pos < end_pos){
2702         uint8_t option_hint = command[pos] >> 7;
2703         uint8_t option_type = command[pos] & 0x7f;
2704         // log_info("l2cap cid %u, hint %u, type %u", channel->local_cid, option_hint, option_type);
2705         pos++;
2706         uint8_t length = command[pos++];
2707         // MTU { type(8): 1, len(8):2, MTU(16) }
2708         if ((option_type == L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT) && (length == 2)){
2709             channel->remote_mtu = little_endian_read_16(command, pos);
2710             log_info("Remote MTU %u", channel->remote_mtu);
2711             if (channel->remote_mtu > l2cap_max_mtu()){
2712                 log_info("Remote MTU %u larger than outgoing buffer, only using MTU = %u", channel->remote_mtu, l2cap_max_mtu());
2713                 channel->remote_mtu = l2cap_max_mtu();
2714             }
2715             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU);
2716         }
2717         // Flush timeout { type(8):2, len(8): 2, Flush Timeout(16)}
2718         if ((option_type == L2CAP_CONFIG_OPTION_TYPE_FLUSH_TIMEOUT) && (length == 2)){
2719             channel->flush_timeout = little_endian_read_16(command, pos);
2720             log_info("Flush timeout: %u ms", channel->flush_timeout);
2721         }
2722 
2723 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2724         // Retransmission and Flow Control Option
2725         if (option_type == L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL && length == 9){
2726             l2cap_channel_mode_t mode = (l2cap_channel_mode_t) command[pos];
2727             switch(channel->mode){
2728                 case L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION:
2729                     // Store remote config
2730                     channel->remote_tx_window_size = command[pos+1];
2731                     channel->remote_max_transmit   = command[pos+2];
2732                     channel->remote_retransmission_timeout_ms = little_endian_read_16(command, pos + 3);
2733                     channel->remote_monitor_timeout_ms = little_endian_read_16(command, pos + 5);
2734                     channel->remote_mps = little_endian_read_16(command, pos + 7);
2735                     log_info("FC&C config: tx window: %u, max transmit %u, retrans timeout %u, monitor timeout %u, mps %u",
2736                         channel->remote_tx_window_size,
2737                         channel->remote_max_transmit,
2738                         channel->remote_retransmission_timeout_ms,
2739                         channel->remote_monitor_timeout_ms,
2740                         channel->remote_mps);
2741                     // If ERTM mandatory, but remote doens't offer ERTM -> disconnect
2742                     if (channel->ertm_mandatory && mode != L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
2743                         channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2744                     } else {
2745                         channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM);
2746                     }
2747                     break;
2748                 case L2CAP_CHANNEL_MODE_BASIC:
2749                     switch (mode){
2750                         case L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION:
2751                             // remote asks for ERTM, but we want basic mode. disconnect if this happens a second time
2752                             if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_BASIC_FALLBACK_TRIED){
2753                                 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2754                             }
2755                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_BASIC_FALLBACK_TRIED);
2756                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_REJECTED);
2757                             break;
2758                         default: // case L2CAP_CHANNEL_MODE_BASIC:
2759                             // TODO store and evaluate configuration
2760                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM);
2761                             break;
2762                     }
2763                     break;
2764                 default:
2765                     break;
2766             }
2767         }
2768         if (option_type == L2CAP_CONFIG_OPTION_TYPE_FRAME_CHECK_SEQUENCE && length == 1){
2769             use_fcs = command[pos];
2770         }
2771 #endif
2772         // check for unknown options
2773         if ((option_hint == 0) && ((option_type < L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT) || (option_type > L2CAP_CONFIG_OPTION_TYPE_EXTENDED_WINDOW_SIZE))){
2774             log_info("l2cap cid %u, unknown option 0x%02x", channel->local_cid, option_type);
2775             channel->unknown_option = option_type;
2776             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_INVALID);
2777         }
2778         pos += length;
2779     }
2780 
2781 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2782         // "FCS" has precedence over "No FCS"
2783         uint8_t update = channel->fcs_option || use_fcs;
2784         log_info("local fcs: %u, remote fcs: %u -> %u", channel->fcs_option, use_fcs, update);
2785         channel->fcs_option = update;
2786         // If ERTM mandatory, but remote didn't send Retransmission and Flowcontrol options -> disconnect
2787         if (((channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM) == 0) & (channel->ertm_mandatory)){
2788             channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2789         }
2790 #endif
2791 }
2792 
2793 // @pre command len is valid, see check in l2cap_signaling_handler_channel
2794 static void l2cap_signaling_handle_configure_response(l2cap_channel_t *channel, uint8_t result, uint8_t *command){
2795     log_info("l2cap_signaling_handle_configure_response");
2796 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2797     uint16_t end_pos = 4 + little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
2798     uint16_t pos     = 10;
2799     while (pos < end_pos){
2800         uint8_t option_hint = command[pos] >> 7;
2801         uint8_t option_type = command[pos] & 0x7f;
2802         // log_info("l2cap cid %u, hint %u, type %u", channel->local_cid, option_hint, option_type);
2803         pos++;
2804         uint8_t length = command[pos++];
2805 
2806         // Retransmission and Flow Control Option
2807         if (option_type == L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL && length == 9){
2808             switch (channel->mode){
2809                 case L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION:
2810                     if (channel->ertm_mandatory){
2811                         // ??
2812                     } else {
2813                         // On 'Reject - Unacceptable Parameters' to our optional ERTM request, fall back to BASIC mode
2814                         if (result == L2CAP_CONF_RESULT_UNACCEPTABLE_PARAMETERS){
2815                             l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED);
2816                             channel->mode = L2CAP_CHANNEL_MODE_BASIC;
2817                         }
2818                     }
2819                     break;
2820                 case L2CAP_CHANNEL_MODE_BASIC:
2821                     if (result == L2CAP_CONF_RESULT_UNACCEPTABLE_PARAMETERS){
2822                         // On 'Reject - Unacceptable Parameters' to our Basic mode request, disconnect
2823                         channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2824                     }
2825                     break;
2826                 default:
2827                     break;
2828             }
2829         }
2830 
2831         // check for unknown options
2832         if (option_hint == 0 && (option_type < L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT || option_type > L2CAP_CONFIG_OPTION_TYPE_EXTENDED_WINDOW_SIZE)){
2833             log_info("l2cap cid %u, unknown option 0x%02x", channel->local_cid, option_type);
2834             channel->unknown_option = option_type;
2835             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_INVALID);
2836         }
2837 
2838         pos += length;
2839     }
2840 #else
2841     UNUSED(channel);  // ok: no code
2842     UNUSED(result);   // ok: no code
2843     UNUSED(command);  // ok: no code
2844 #endif
2845 }
2846 
2847 static int l2cap_channel_ready_for_open(l2cap_channel_t *channel){
2848     // log_info("l2cap_channel_ready_for_open 0x%02x", channel->state_var);
2849     if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_RSP) == 0) return 0;
2850     if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP) == 0) return 0;
2851     // addition check that fixes re-entrance issue causing l2cap event channel opened twice
2852     if (channel->state == L2CAP_STATE_OPEN) return 0;
2853     return 1;
2854 }
2855 
2856 
2857 // @pre command len is valid, see check in l2cap_signaling_handler_dispatch
2858 static void l2cap_signaling_handler_channel(l2cap_channel_t *channel, uint8_t *command){
2859 
2860     uint8_t  code       = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET];
2861     uint8_t  identifier = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET];
2862     uint16_t cmd_len    = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
2863     uint16_t result = 0;
2864 
2865     log_info("L2CAP signaling handler code %u, state %u", code, channel->state);
2866 
2867     // handle DISCONNECT REQUESTS seperately
2868     if (code == DISCONNECTION_REQUEST){
2869         l2cap_handle_disconnect_request(channel, identifier);
2870         return;
2871     }
2872 
2873     // @STATEMACHINE(l2cap)
2874     switch (channel->state) {
2875 
2876         case L2CAP_STATE_WAIT_CONNECT_RSP:
2877             switch (code){
2878                 case CONNECTION_RESPONSE:
2879                     if (cmd_len < 8){
2880                         // command imcomplete
2881                         l2cap_register_signaling_response(channel->con_handle, COMMAND_REJECT, identifier, 0, L2CAP_REJ_CMD_UNKNOWN);
2882                         break;
2883                     }
2884                     l2cap_stop_rtx(channel);
2885                     result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4);
2886                     switch (result) {
2887                         case 0:
2888                             // successful connection
2889                             channel->remote_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
2890                             channel->state = L2CAP_STATE_CONFIG;
2891                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ);
2892                             break;
2893                         case 1:
2894                             // connection pending. get some coffee, but start the ERTX
2895                             l2cap_start_ertx(channel);
2896                             break;
2897                         default:
2898                             // channel closed
2899                             channel->state = L2CAP_STATE_CLOSED;
2900                             // map l2cap connection response result to BTstack status enumeration
2901                             l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_SUCCESSFUL + result);
2902 
2903                             // drop link key if security block
2904                             if ((L2CAP_CONNECTION_RESPONSE_RESULT_SUCCESSFUL + result) == L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY){
2905                                 gap_drop_link_key_for_bd_addr(channel->address);
2906                             }
2907 
2908                             // discard channel
2909                             btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
2910                             l2cap_free_channel_entry(channel);
2911                             break;
2912                     }
2913                     break;
2914 
2915                 default:
2916                     //@TODO: implement other signaling packets
2917                     break;
2918             }
2919             break;
2920 
2921         case L2CAP_STATE_CONFIG:
2922             switch (code) {
2923                 case CONFIGURE_REQUEST:
2924                     if (cmd_len < 4){
2925                         // command incomplete
2926                         l2cap_register_signaling_response(channel->con_handle, COMMAND_REJECT, identifier, 0, L2CAP_REJ_CMD_UNKNOWN);
2927                         break;
2928                     }
2929                     channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP);
2930                     l2cap_signaling_handle_configure_request(channel, command);
2931                     if (!(channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT)){
2932                         // only done if continuation not set
2933                         channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_REQ);
2934                     }
2935                     break;
2936                 case CONFIGURE_RESPONSE:
2937                     if (cmd_len < 6){
2938                         // command incomplete
2939                         l2cap_register_signaling_response(channel->con_handle, COMMAND_REJECT, identifier, 0, L2CAP_REJ_CMD_UNKNOWN);
2940                         break;
2941                     }
2942                     result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4);
2943                     l2cap_stop_rtx(channel);
2944                     l2cap_signaling_handle_configure_response(channel, result, command);
2945                     switch (result){
2946                         case 0: // success
2947                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_RSP);
2948                             break;
2949                         case 4: // pending
2950                             l2cap_start_ertx(channel);
2951                             break;
2952                         default:
2953 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2954                             if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION && channel->ertm_mandatory){
2955                                 // remote does not offer ertm but it's required
2956                                 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2957                                 break;
2958                             }
2959 #endif
2960                             // retry on negative result
2961                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ);
2962                             break;
2963                     }
2964                     break;
2965                 default:
2966                     break;
2967             }
2968             if (l2cap_channel_ready_for_open(channel)){
2969 
2970 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2971                 // assert that packet can be stored in fragment buffers in ertm
2972                 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
2973                     uint16_t effective_mps = btstack_min(channel->remote_mps, channel->local_mps);
2974                     uint16_t usable_mtu = channel->num_tx_buffers == 1 ? effective_mps : channel->num_tx_buffers * effective_mps - 2;
2975                     if (usable_mtu < channel->remote_mtu){
2976                         log_info("Remote MTU %u > max storable ERTM packet, only using MTU = %u", channel->remote_mtu, usable_mtu);
2977                         channel->remote_mtu = usable_mtu;
2978                     }
2979                 }
2980 #endif
2981                 // for open:
2982                 channel->state = L2CAP_STATE_OPEN;
2983                 l2cap_emit_channel_opened(channel, 0);
2984             }
2985             break;
2986 
2987         case L2CAP_STATE_WAIT_DISCONNECT:
2988             switch (code) {
2989                 case DISCONNECTION_RESPONSE:
2990                     l2cap_finialize_channel_close(channel);
2991                     break;
2992                 default:
2993                     //@TODO: implement other signaling packets
2994                     break;
2995             }
2996             break;
2997 
2998         case L2CAP_STATE_CLOSED:
2999             // @TODO handle incoming requests
3000             break;
3001 
3002         case L2CAP_STATE_OPEN:
3003             //@TODO: implement other signaling packets, e.g. re-configure
3004             break;
3005         default:
3006             break;
3007     }
3008     // log_info("new state %u", channel->state);
3009 }
3010 
3011 
3012 // @pre command len is valid, see check in l2cap_acl_classic_handler
3013 static void l2cap_signaling_handler_dispatch(hci_con_handle_t handle, uint8_t * command){
3014 
3015     btstack_linked_list_iterator_t it;
3016 
3017     // get code, signalind identifier and command len
3018     uint8_t code     = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET];
3019     uint8_t sig_id   = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET];
3020     uint16_t cmd_len = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
3021 
3022     // not for a particular channel, and not CONNECTION_REQUEST, ECHO_[REQUEST|RESPONSE], INFORMATION_RESPONSE
3023     if ((code < 1) || (code == ECHO_RESPONSE) || (code > INFORMATION_RESPONSE)){
3024         l2cap_register_signaling_response(handle, COMMAND_REJECT, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN);
3025         return;
3026     }
3027 
3028     // general commands without an assigned channel
3029     switch(code) {
3030 
3031         case CONNECTION_REQUEST:
3032             if (cmd_len == 4){
3033                 uint16_t psm =        little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
3034                 uint16_t source_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2);
3035                 l2cap_handle_connection_request(handle, sig_id, psm, source_cid);
3036             } else {
3037                 l2cap_register_signaling_response(handle, COMMAND_REJECT, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN);
3038             }
3039             return;
3040 
3041         case ECHO_REQUEST:
3042             l2cap_register_signaling_response(handle, code, sig_id, 0, 0);
3043             return;
3044 
3045         case INFORMATION_REQUEST:
3046             if (cmd_len == 2) {
3047                 uint16_t info_type = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
3048                 l2cap_register_signaling_response(handle, code, sig_id, 0, info_type);
3049             } else {
3050                 l2cap_register_signaling_response(handle, COMMAND_REJECT, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN);
3051             }
3052             return;
3053 
3054 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
3055         case INFORMATION_RESPONSE: {
3056             hci_connection_t * connection = hci_connection_for_handle(handle);
3057             if (!connection) return;
3058             if (connection->l2cap_state.information_state != L2CAP_INFORMATION_STATE_W4_EXTENDED_FEATURE_RESPONSE) return;
3059 
3060             // get extended features from response if valid
3061             connection->l2cap_state.extended_feature_mask = 0;
3062             if (cmd_len >= 6) {
3063                 uint16_t info_type = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
3064                 uint16_t result    = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2);
3065                 if (result == 0 && info_type == L2CAP_INFO_TYPE_EXTENDED_FEATURES_SUPPORTED) {
3066                     connection->l2cap_state.extended_feature_mask = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4);
3067                 }
3068             }
3069             connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_DONE;
3070             log_info("extended features mask 0x%02x", connection->l2cap_state.extended_feature_mask);
3071 
3072             // trigger connection request
3073             btstack_linked_list_iterator_init(&it, &l2cap_channels);
3074             while (btstack_linked_list_iterator_has_next(&it)){
3075                 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
3076                 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
3077                 if (channel->con_handle != handle) continue;
3078 
3079                 // incoming connection: ask user for channel configuration, esp. if ertm will be mandatory
3080                 if (channel->state == L2CAP_STATE_WAIT_INCOMING_EXTENDED_FEATURES){
3081                     channel->state = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT;
3082                     l2cap_emit_incoming_connection(channel);
3083                     continue;
3084                 }
3085 
3086                 // outgoing connection
3087                 if (channel->state == L2CAP_STATE_WAIT_OUTGOING_EXTENDED_FEATURES){
3088 
3089                     // if ERTM was requested, but is not listed in extended feature mask:
3090                     if ((channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) && ((connection->l2cap_state.extended_feature_mask & 0x08) == 0)){
3091 
3092                         if (channel->ertm_mandatory){
3093                             // bail if ERTM is mandatory
3094                             channel->state = L2CAP_STATE_CLOSED;
3095                             // map l2cap connection response result to BTstack status enumeration
3096                             l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_ERTM_NOT_SUPPORTED);
3097                             // discard channel
3098                             btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
3099                             l2cap_free_channel_entry(channel);
3100                             continue;
3101 
3102                         } else {
3103                             // fallback to Basic mode
3104                             l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED);
3105                             channel->mode = L2CAP_CHANNEL_MODE_BASIC;
3106                         }
3107                     }
3108 
3109                     // respond to connection request
3110                     channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST;
3111                     continue;
3112                 }
3113             }
3114             return;
3115         }
3116 #endif
3117 
3118         default:
3119             break;
3120     }
3121 
3122     // Get potential destination CID
3123     uint16_t dest_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
3124 
3125     // Find channel for this sig_id and connection handle
3126     btstack_linked_list_iterator_init(&it, &l2cap_channels);
3127     while (btstack_linked_list_iterator_has_next(&it)){
3128         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
3129         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
3130         if (channel->con_handle != handle) continue;
3131         if (code & 1) {
3132             // match odd commands (responses) by previous signaling identifier
3133             if (channel->local_sig_id == sig_id) {
3134                 l2cap_signaling_handler_channel(channel, command);
3135                 break;
3136             }
3137         } else {
3138             // match even commands (requests) by local channel id
3139             if (channel->local_cid == dest_cid) {
3140                 l2cap_signaling_handler_channel(channel, command);
3141                 break;
3142             }
3143         }
3144     }
3145 }
3146 #endif
3147 
3148 #ifdef ENABLE_BLE
3149 
3150 static void l2cap_emit_connection_parameter_update_response(hci_con_handle_t con_handle, uint16_t result){
3151     uint8_t event[6];
3152     event[0] = L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_RESPONSE;
3153     event[1] = 4;
3154     little_endian_store_16(event, 2, con_handle);
3155     little_endian_store_16(event, 4, result);
3156     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
3157     if (!l2cap_event_packet_handler) return;
3158     (*l2cap_event_packet_handler)(HCI_EVENT_PACKET, 0, event, sizeof(event));
3159 }
3160 
3161 // @returns valid
3162 static int l2cap_le_signaling_handler_dispatch(hci_con_handle_t handle, uint8_t * command, uint8_t sig_id){
3163     hci_connection_t * connection;
3164     uint16_t result;
3165     uint8_t  event[12];
3166 
3167 #ifdef ENABLE_LE_DATA_CHANNELS
3168     btstack_linked_list_iterator_t it;
3169     l2cap_channel_t * channel;
3170     uint16_t local_cid;
3171     uint16_t le_psm;
3172     uint16_t new_credits;
3173     uint16_t credits_before;
3174     l2cap_service_t * service;
3175     uint16_t source_cid;
3176 #endif
3177 
3178     uint8_t code   = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET];
3179     uint16_t len   = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
3180     log_info("le dispatch: command 0x%02x, sig id %u, len %u", code, sig_id, len);
3181 
3182     switch (code){
3183 
3184         case CONNECTION_PARAMETER_UPDATE_REQUEST:
3185             // check size
3186             if (len < 8u) return 0u;
3187             connection = hci_connection_for_handle(handle);
3188             if (connection != NULL){
3189                 if (connection->role != HCI_ROLE_MASTER){
3190                     // reject command without notifying upper layer when not in master role
3191                     return 0;
3192                 }
3193                 le_connection_parameter_range_t existing_range;
3194                 gap_get_connection_parameter_range(&existing_range);
3195                 uint16_t le_conn_interval_min   = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
3196                 uint16_t le_conn_interval_max   = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2);
3197                 uint16_t le_conn_latency        = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4);
3198                 uint16_t le_supervision_timeout = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET+6);
3199 
3200                 int update_parameter = gap_connection_parameter_range_included(&existing_range, le_conn_interval_min, le_conn_interval_max, le_conn_latency, le_supervision_timeout);
3201                 if (update_parameter){
3202                     connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_SEND_RESPONSE;
3203                     connection->le_conn_interval_min = le_conn_interval_min;
3204                     connection->le_conn_interval_max = le_conn_interval_max;
3205                     connection->le_conn_latency = le_conn_latency;
3206                     connection->le_supervision_timeout = le_supervision_timeout;
3207                 } else {
3208                     connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_DENY;
3209                 }
3210                 connection->le_con_param_update_identifier = sig_id;
3211             }
3212 
3213             if (!l2cap_event_packet_handler) break;
3214 
3215             event[0] = L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_REQUEST;
3216             event[1] = 8;
3217             little_endian_store_16(event, 2, handle);
3218             (void)memcpy(&event[4], &command[4], 8);
3219             hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
3220             (*l2cap_event_packet_handler)( HCI_EVENT_PACKET, 0, event, sizeof(event));
3221             break;
3222 
3223         case CONNECTION_PARAMETER_UPDATE_RESPONSE:
3224             // check size
3225             if (len < 2u) return 0u;
3226             result = little_endian_read_16(command, 4);
3227             l2cap_emit_connection_parameter_update_response(handle, result);
3228             break;
3229 
3230 #ifdef ENABLE_LE_DATA_CHANNELS
3231 
3232         case COMMAND_REJECT:
3233             // Find channel for this sig_id and connection handle
3234             channel = NULL;
3235             btstack_linked_list_iterator_init(&it, &l2cap_channels);
3236             while (btstack_linked_list_iterator_has_next(&it)){
3237                 l2cap_channel_t * a_channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
3238                 if (!l2cap_is_dynamic_channel_type(a_channel->channel_type)) continue;
3239                 if (a_channel->con_handle   != handle) continue;
3240                 if (a_channel->local_sig_id != sig_id) continue;
3241                 channel = a_channel;
3242                 break;
3243             }
3244             if (!channel) break;
3245 
3246             // if received while waiting for le connection response, assume legacy device
3247             if (channel->state == L2CAP_STATE_WAIT_LE_CONNECTION_RESPONSE){
3248                 channel->state = L2CAP_STATE_CLOSED;
3249                 // no official value for this, use: Connection refused – LE_PSM not supported - 0x0002
3250                 l2cap_emit_le_channel_opened(channel, 0x0002);
3251 
3252                 // discard channel
3253                 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
3254                 l2cap_free_channel_entry(channel);
3255                 break;
3256             }
3257             break;
3258 
3259         case LE_CREDIT_BASED_CONNECTION_REQUEST:
3260             // check size
3261             if (len < 10u) return 0u;
3262 
3263             // get hci connection, bail if not found (must not happen)
3264             connection = hci_connection_for_handle(handle);
3265             if (!connection) return 0;
3266 
3267             // check if service registered
3268             le_psm  = little_endian_read_16(command, 4);
3269             service = l2cap_le_get_service(le_psm);
3270             source_cid = little_endian_read_16(command, 6);
3271 
3272             if (service){
3273                 if (source_cid < 0x40u){
3274                     // 0x0009 Connection refused - Invalid Source CID
3275                     l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0009);
3276                     return 1;
3277                 }
3278 
3279                 // go through list of channels for this ACL connection and check if we get a match
3280                 btstack_linked_list_iterator_init(&it, &l2cap_channels);
3281                 while (btstack_linked_list_iterator_has_next(&it)){
3282                     l2cap_channel_t * a_channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
3283                     if (!l2cap_is_dynamic_channel_type(a_channel->channel_type)) continue;
3284                     if (a_channel->con_handle != handle) continue;
3285                     if (a_channel->remote_cid != source_cid) continue;
3286                     // 0x000a Connection refused - Source CID already allocated
3287                     l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x000a);
3288                     return 1;
3289                 }
3290 
3291                 // security: check encryption
3292                 if (service->required_security_level >= LEVEL_2){
3293                     if (gap_encryption_key_size(handle) == 0){
3294                         // 0x0008 Connection refused - insufficient encryption
3295                         l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0008);
3296                         return 1;
3297                     }
3298                     // anything less than 16 byte key size is insufficient
3299                     if (gap_encryption_key_size(handle) < 16){
3300                         // 0x0007 Connection refused – insufficient encryption key size
3301                         l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0007);
3302                         return 1;
3303                     }
3304                 }
3305 
3306                 // security: check authencation
3307                 if (service->required_security_level >= LEVEL_3){
3308                     if (!gap_authenticated(handle)){
3309                         // 0x0005 Connection refused – insufficient authentication
3310                         l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0005);
3311                         return 1;
3312                     }
3313                 }
3314 
3315                 // security: check authorization
3316                 if (service->required_security_level >= LEVEL_4){
3317                     if (gap_authorization_state(handle) != AUTHORIZATION_GRANTED){
3318                         // 0x0006 Connection refused – insufficient authorization
3319                         l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0006);
3320                         return 1;
3321                     }
3322                 }
3323 
3324                 // allocate channel
3325                 channel = l2cap_create_channel_entry(service->packet_handler, L2CAP_CHANNEL_TYPE_LE_DATA_CHANNEL, connection->address,
3326                     BD_ADDR_TYPE_LE_RANDOM, le_psm, service->mtu, service->required_security_level);
3327                 if (!channel){
3328                     // 0x0004 Connection refused – no resources available
3329                     l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0004);
3330                     return 1;
3331                 }
3332 
3333                 channel->con_handle = handle;
3334                 channel->remote_cid = source_cid;
3335                 channel->remote_sig_id = sig_id;
3336                 channel->remote_mtu = little_endian_read_16(command, 8);
3337                 channel->remote_mps = little_endian_read_16(command, 10);
3338                 channel->credits_outgoing = little_endian_read_16(command, 12);
3339 
3340                 // set initial state
3341                 channel->state      = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT;
3342                 channel->state_var |= L2CAP_CHANNEL_STATE_VAR_INCOMING;
3343 
3344                 // add to connections list
3345                 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel);
3346 
3347                 // post connection request event
3348                 l2cap_emit_le_incoming_connection(channel);
3349 
3350             } else {
3351                 // Connection refused – LE_PSM not supported
3352                 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0002);
3353             }
3354             break;
3355 
3356         case LE_CREDIT_BASED_CONNECTION_RESPONSE:
3357             // check size
3358             if (len < 10u) return 0u;
3359 
3360             // Find channel for this sig_id and connection handle
3361             channel = NULL;
3362             btstack_linked_list_iterator_init(&it, &l2cap_channels);
3363             while (btstack_linked_list_iterator_has_next(&it)){
3364                 l2cap_channel_t * a_channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
3365                 if (!l2cap_is_dynamic_channel_type(a_channel->channel_type)) continue;
3366                 if (a_channel->con_handle   != handle) continue;
3367                 if (a_channel->local_sig_id != sig_id) continue;
3368                 channel = a_channel;
3369                 break;
3370             }
3371             if (!channel) break;
3372 
3373             // cid + 0
3374             result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+8);
3375             if (result){
3376                 channel->state = L2CAP_STATE_CLOSED;
3377                 // map l2cap connection response result to BTstack status enumeration
3378                 l2cap_emit_le_channel_opened(channel, result);
3379 
3380                 // discard channel
3381                 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
3382                 l2cap_free_channel_entry(channel);
3383                 break;
3384             }
3385 
3386             // success
3387             channel->remote_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0);
3388             channel->remote_mtu = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2);
3389             channel->remote_mps = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 4);
3390             channel->credits_outgoing = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 6);
3391             channel->state = L2CAP_STATE_OPEN;
3392             l2cap_emit_le_channel_opened(channel, result);
3393             break;
3394 
3395         case LE_FLOW_CONTROL_CREDIT:
3396             // check size
3397             if (len < 4u) return 0u;
3398 
3399             // find channel
3400             local_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0);
3401             channel = l2cap_get_channel_for_local_cid_and_handle(local_cid, handle);
3402             if (!channel) {
3403                 log_error("credit: no channel for cid 0x%02x", local_cid);
3404                 break;
3405             }
3406             new_credits = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2);
3407             credits_before = channel->credits_outgoing;
3408             channel->credits_outgoing += new_credits;
3409             // check for credit overrun
3410             if (credits_before > channel->credits_outgoing){
3411                 log_error("credit: new credits caused overrrun for cid 0x%02x, disconnecting", local_cid);
3412                 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
3413                 break;
3414             }
3415             log_info("credit: %u credits for 0x%02x, now %u", new_credits, local_cid, channel->credits_outgoing);
3416             break;
3417 
3418         case DISCONNECTION_REQUEST:
3419 
3420             // check size
3421             if (len < 4u) return 0u;
3422 
3423             // find channel
3424             local_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0);
3425             channel = l2cap_get_channel_for_local_cid_and_handle(local_cid, handle);
3426             if (!channel) {
3427                 log_error("credit: no channel for cid 0x%02x", local_cid);
3428                 break;
3429             }
3430             channel->remote_sig_id = sig_id;
3431             channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE;
3432             break;
3433 
3434 #endif
3435 
3436         case DISCONNECTION_RESPONSE:
3437             break;
3438 
3439         default:
3440             // command unknown -> reject command
3441             return 0;
3442     }
3443     return 1;
3444 }
3445 #endif
3446 
3447 #ifdef ENABLE_CLASSIC
3448 static void l2cap_acl_classic_handler_for_channel(l2cap_channel_t * l2cap_channel, uint8_t * packet, uint16_t size){
3449 
3450     // forward data only in OPEN state
3451     if (l2cap_channel->state != L2CAP_STATE_OPEN) return;
3452 
3453 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
3454     if (l2cap_channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
3455 
3456         int fcs_size = l2cap_channel->fcs_option ? 2 : 0;
3457 
3458         // assert control + FCS fields are inside
3459         if (size < COMPLETE_L2CAP_HEADER+2+fcs_size) return;
3460 
3461         if (l2cap_channel->fcs_option){
3462             // verify FCS (required if one side requested it)
3463             uint16_t fcs_calculated = crc16_calc(&packet[4], size - (4+2));
3464             uint16_t fcs_packet     = little_endian_read_16(packet, size-2);
3465 
3466 #ifdef L2CAP_ERTM_SIMULATE_FCS_ERROR_INTERVAL
3467             // simulate fcs error
3468                         static int counter = 0;
3469                         if (++counter == L2CAP_ERTM_SIMULATE_FCS_ERROR_INTERVAL) {
3470                             log_info("Simulate fcs error");
3471                             fcs_calculated++;
3472                             counter = 0;
3473                         }
3474 #endif
3475 
3476             if (fcs_calculated == fcs_packet){
3477                 log_info("Packet FCS 0x%04x verified", fcs_packet);
3478             } else {
3479                 log_error("FCS mismatch! Packet 0x%04x, calculated 0x%04x", fcs_packet, fcs_calculated);
3480                 // ERTM State Machine in Bluetooth Spec does not handle 'I-Frame with invalid FCS'
3481                 return;
3482             }
3483         }
3484 
3485         // switch on packet type
3486         uint16_t control = little_endian_read_16(packet, COMPLETE_L2CAP_HEADER);
3487         uint8_t  req_seq = (control >> 8) & 0x3f;
3488         int final = (control >> 7) & 0x01;
3489         if (control & 1){
3490             // S-Frame
3491             int poll  = (control >> 4) & 0x01;
3492             l2cap_supervisory_function_t s = (l2cap_supervisory_function_t) ((control >> 2) & 0x03);
3493             log_info("Control: 0x%04x => Supervisory function %u, ReqSeq %02u", control, (int) s, req_seq);
3494             l2cap_ertm_tx_packet_state_t * tx_state;
3495             switch (s){
3496                 case L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY:
3497                     log_info("L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY");
3498                     l2cap_ertm_process_req_seq(l2cap_channel, req_seq);
3499                     if (poll && final){
3500                         // S-frames shall not be transmitted with both the F-bit and the P-bit set to 1 at the same time.
3501                         log_error("P=F=1 in S-Frame");
3502                         break;
3503                     }
3504                     if (poll){
3505                         // check if we did request selective retransmission before <==> we have stored SDU segments
3506                         int i;
3507                         int num_stored_out_of_order_packets = 0;
3508                         for (i=0;i<l2cap_channel->num_rx_buffers;i++){
3509                             int index = l2cap_channel->rx_store_index + i;
3510                             if (index >= l2cap_channel->num_rx_buffers){
3511                                 index -= l2cap_channel->num_rx_buffers;
3512                             }
3513                             l2cap_ertm_rx_packet_state_t * rx_state = &l2cap_channel->rx_packets_state[index];
3514                             if (!rx_state->valid) continue;
3515                             num_stored_out_of_order_packets++;
3516                         }
3517                         if (num_stored_out_of_order_packets){
3518                             l2cap_channel->send_supervisor_frame_selective_reject = 1;
3519                         } else {
3520                             l2cap_channel->send_supervisor_frame_receiver_ready   = 1;
3521                         }
3522                         l2cap_channel->set_final_bit_after_packet_with_poll_bit_set = 1;
3523                     }
3524                     if (final){
3525                         // Stop-MonitorTimer
3526                         l2cap_ertm_stop_monitor_timer(l2cap_channel);
3527                         // If UnackedFrames > 0 then Start-RetransTimer
3528                         if (l2cap_channel->unacked_frames){
3529                             l2cap_ertm_start_retransmission_timer(l2cap_channel);
3530                         }
3531                         // final bit set <- response to RR with poll bit set. All not acknowledged packets need to be retransmitted
3532                         l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel);
3533                     }
3534                     break;
3535                 case L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT:
3536                     log_info("L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT");
3537                     l2cap_ertm_process_req_seq(l2cap_channel, req_seq);
3538                     // restart transmittion from last unacknowledted packet (earlier packets already freed in l2cap_ertm_process_req_seq)
3539                     l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel);
3540                     break;
3541                 case L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY:
3542                     log_error("L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY");
3543                     break;
3544                 case L2CAP_SUPERVISORY_FUNCTION_SREJ_SELECTIVE_REJECT:
3545                     log_info("L2CAP_SUPERVISORY_FUNCTION_SREJ_SELECTIVE_REJECT");
3546                     if (poll){
3547                         l2cap_ertm_process_req_seq(l2cap_channel, req_seq);
3548                     }
3549                     // find requested i-frame
3550                     tx_state = l2cap_ertm_get_tx_state(l2cap_channel, req_seq);
3551                     if (tx_state){
3552                         log_info("Retransmission for tx_seq %u requested", req_seq);
3553                         l2cap_channel->set_final_bit_after_packet_with_poll_bit_set = poll;
3554                         tx_state->retransmission_requested = 1;
3555                         l2cap_channel->srej_active = 1;
3556                     }
3557                     break;
3558                 default:
3559                     break;
3560             }
3561         } else {
3562             // I-Frame
3563             // get control
3564             l2cap_segmentation_and_reassembly_t sar = (l2cap_segmentation_and_reassembly_t) (control >> 14);
3565             uint8_t tx_seq = (control >> 1) & 0x3f;
3566             log_info("Control: 0x%04x => SAR %u, ReqSeq %02u, R?, TxSeq %02u", control, (int) sar, req_seq, tx_seq);
3567             log_info("SAR: pos %u", l2cap_channel->reassembly_pos);
3568             log_info("State: expected_tx_seq %02u, req_seq %02u", l2cap_channel->expected_tx_seq, l2cap_channel->req_seq);
3569             l2cap_ertm_process_req_seq(l2cap_channel, req_seq);
3570             if (final){
3571                 // final bit set <- response to RR with poll bit set. All not acknowledged packets need to be retransmitted
3572                 l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel);
3573             }
3574 
3575             // get SDU
3576             const uint8_t * payload_data = &packet[COMPLETE_L2CAP_HEADER+2];
3577             uint16_t        payload_len  = size-(COMPLETE_L2CAP_HEADER+2+fcs_size);
3578 
3579             // assert SDU size is smaller or equal to our buffers
3580             uint16_t max_payload_size = 0;
3581             switch (sar){
3582                 case L2CAP_SEGMENTATION_AND_REASSEMBLY_UNSEGMENTED_L2CAP_SDU:
3583                 case L2CAP_SEGMENTATION_AND_REASSEMBLY_START_OF_L2CAP_SDU:
3584                     // SDU Length + MPS
3585                     max_payload_size = l2cap_channel->local_mps + 2;
3586                     break;
3587                 case L2CAP_SEGMENTATION_AND_REASSEMBLY_CONTINUATION_OF_L2CAP_SDU:
3588                 case L2CAP_SEGMENTATION_AND_REASSEMBLY_END_OF_L2CAP_SDU:
3589                     max_payload_size = l2cap_channel->local_mps;
3590                     break;
3591                 default:
3592                     btstack_assert(false);
3593                     break;
3594             }
3595             if (payload_len > max_payload_size){
3596                 log_info("payload len %u > max payload %u -> drop packet", payload_len, max_payload_size);
3597                 return;
3598             }
3599 
3600             // check ordering
3601             if (l2cap_channel->expected_tx_seq == tx_seq){
3602                 log_info("Received expected frame with TxSeq == ExpectedTxSeq == %02u", tx_seq);
3603                 l2cap_channel->expected_tx_seq = l2cap_next_ertm_seq_nr(l2cap_channel->expected_tx_seq);
3604                 l2cap_channel->req_seq         = l2cap_channel->expected_tx_seq;
3605 
3606                 // process SDU
3607                 l2cap_ertm_handle_in_sequence_sdu(l2cap_channel, sar, payload_data, payload_len);
3608 
3609                 // process stored segments
3610                 while (true){
3611                     int index = l2cap_channel->rx_store_index;
3612                     l2cap_ertm_rx_packet_state_t * rx_state = &l2cap_channel->rx_packets_state[index];
3613                     if (!rx_state->valid) break;
3614 
3615                     log_info("Processing stored frame with TxSeq == ExpectedTxSeq == %02u", l2cap_channel->expected_tx_seq);
3616                     l2cap_channel->expected_tx_seq = l2cap_next_ertm_seq_nr(l2cap_channel->expected_tx_seq);
3617                     l2cap_channel->req_seq         = l2cap_channel->expected_tx_seq;
3618 
3619                     rx_state->valid = 0;
3620                     l2cap_ertm_handle_in_sequence_sdu(l2cap_channel, rx_state->sar, &l2cap_channel->rx_packets_data[index], rx_state->len);
3621 
3622                     // update rx store index
3623                     index++;
3624                     if (index >= l2cap_channel->num_rx_buffers){
3625                         index = 0;
3626                     }
3627                     l2cap_channel->rx_store_index = index;
3628                 }
3629 
3630                 //
3631                 l2cap_channel->send_supervisor_frame_receiver_ready = 1;
3632 
3633             } else {
3634                 int delta = (tx_seq - l2cap_channel->expected_tx_seq) & 0x3f;
3635                 if (delta < 2){
3636                     // store segment
3637                     l2cap_ertm_handle_out_of_sequence_sdu(l2cap_channel, sar, delta, payload_data, payload_len);
3638 
3639                     log_info("Received unexpected frame TxSeq %u but expected %u -> send S-SREJ", tx_seq, l2cap_channel->expected_tx_seq);
3640                     l2cap_channel->send_supervisor_frame_selective_reject = 1;
3641                 } else {
3642                     log_info("Received unexpected frame TxSeq %u but expected %u -> send S-REJ", tx_seq, l2cap_channel->expected_tx_seq);
3643                     l2cap_channel->send_supervisor_frame_reject = 1;
3644                 }
3645             }
3646         }
3647         return;
3648     }
3649 #endif
3650 
3651     // check size
3652     uint16_t payload_size = size - COMPLETE_L2CAP_HEADER;
3653     if (l2cap_channel->local_mtu < payload_size) return;
3654 
3655     l2cap_dispatch_to_channel(l2cap_channel, L2CAP_DATA_PACKET, &packet[COMPLETE_L2CAP_HEADER], payload_size);
3656 }
3657 #endif
3658 
3659 static void l2cap_acl_classic_handler(hci_con_handle_t handle, uint8_t *packet, uint16_t size){
3660 #ifdef ENABLE_CLASSIC
3661     l2cap_channel_t * l2cap_channel;
3662     l2cap_fixed_channel_t * l2cap_fixed_channel;
3663 
3664     uint16_t channel_id = READ_L2CAP_CHANNEL_ID(packet);
3665     uint8_t  broadcast_flag = READ_ACL_FLAGS(packet) >> 2;
3666     switch (channel_id) {
3667 
3668         case L2CAP_CID_SIGNALING: {
3669             if (broadcast_flag != 0) break;
3670             uint32_t command_offset = 8;
3671             while ((command_offset + L2CAP_SIGNALING_COMMAND_DATA_OFFSET) < size) {
3672                 // assert signaling command is fully inside packet
3673                 uint16_t data_len = little_endian_read_16(packet, command_offset + L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
3674                 uint32_t next_command_offset = command_offset + L2CAP_SIGNALING_COMMAND_DATA_OFFSET + data_len;
3675                 if (next_command_offset > size){
3676                     log_error("l2cap signaling command len invalid -> drop");
3677                     break;
3678                 }
3679                 // handle signaling command
3680                 l2cap_signaling_handler_dispatch(handle, &packet[command_offset]);
3681                 // go to next command
3682                 command_offset = next_command_offset;
3683             }
3684             break;
3685         }
3686 
3687         case L2CAP_CID_CONNECTIONLESS_CHANNEL:
3688             if (broadcast_flag == 0) break;
3689             l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_CONNECTIONLESS_CHANNEL);
3690             if (!l2cap_fixed_channel) break;
3691             if (!l2cap_fixed_channel->packet_handler) break;
3692             (*l2cap_fixed_channel->packet_handler)(UCD_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER);
3693             break;
3694 
3695 #ifdef ENABLE_BLE
3696         case L2CAP_CID_BR_EDR_SECURITY_MANAGER:
3697             l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_SECURITY_MANAGER_PROTOCOL);
3698             if (!l2cap_fixed_channel) break;
3699             if (!l2cap_fixed_channel->packet_handler) break;
3700             (*l2cap_fixed_channel->packet_handler)(SM_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER);
3701             break;
3702 #endif
3703 
3704         default:
3705             if (broadcast_flag != 0) break;
3706             // Find channel for this channel_id and connection handle
3707             l2cap_channel = l2cap_get_channel_for_local_cid_and_handle(channel_id, handle);
3708             if (l2cap_channel != NULL){
3709                 l2cap_acl_classic_handler_for_channel(l2cap_channel, packet, size);
3710             }
3711             break;
3712     }
3713 #else
3714     UNUSED(handle); // ok: no code
3715     UNUSED(packet); // ok: no code
3716     UNUSED(size);   // ok: no code
3717 #endif
3718 }
3719 
3720 static void l2cap_acl_le_handler(hci_con_handle_t handle, uint8_t *packet, uint16_t size){
3721 #ifdef ENABLE_BLE
3722 
3723     l2cap_fixed_channel_t * l2cap_fixed_channel;
3724 
3725 #ifdef ENABLE_LE_DATA_CHANNELS
3726     l2cap_channel_t * l2cap_channel;
3727 #endif
3728     uint16_t channel_id = READ_L2CAP_CHANNEL_ID(packet);
3729     switch (channel_id) {
3730 
3731         case L2CAP_CID_SIGNALING_LE: {
3732             uint16_t sig_id = packet[COMPLETE_L2CAP_HEADER + 1];
3733             uint16_t len = little_endian_read_16(packet, COMPLETE_L2CAP_HEADER + 2);
3734             if ((COMPLETE_L2CAP_HEADER + 4u + len) > size) break;
3735             int      valid  = l2cap_le_signaling_handler_dispatch(handle, &packet[COMPLETE_L2CAP_HEADER], sig_id);
3736             if (!valid){
3737                 l2cap_register_signaling_response(handle, COMMAND_REJECT_LE, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN);
3738             }
3739             break;
3740         }
3741 
3742         case L2CAP_CID_ATTRIBUTE_PROTOCOL:
3743             l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_ATTRIBUTE_PROTOCOL);
3744             if (!l2cap_fixed_channel) break;
3745             if (!l2cap_fixed_channel->packet_handler) break;
3746             (*l2cap_fixed_channel->packet_handler)(ATT_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER);
3747             break;
3748 
3749         case L2CAP_CID_SECURITY_MANAGER_PROTOCOL:
3750             l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_SECURITY_MANAGER_PROTOCOL);
3751             if (!l2cap_fixed_channel) break;
3752             if (!l2cap_fixed_channel->packet_handler) break;
3753             (*l2cap_fixed_channel->packet_handler)(SM_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER);
3754             break;
3755 
3756         default:
3757 
3758 #ifdef ENABLE_LE_DATA_CHANNELS
3759             l2cap_channel = l2cap_get_channel_for_local_cid_and_handle(channel_id, handle);
3760             if (l2cap_channel != NULL) {
3761                 // credit counting
3762                 if (l2cap_channel->credits_incoming == 0u){
3763                     log_info("LE Data Channel packet received but no incoming credits");
3764                     l2cap_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
3765                     break;
3766                 }
3767                 l2cap_channel->credits_incoming--;
3768 
3769                 // automatic credits
3770                 if ((l2cap_channel->credits_incoming < L2CAP_LE_DATA_CHANNELS_AUTOMATIC_CREDITS_WATERMARK) && l2cap_channel->automatic_credits){
3771                     l2cap_channel->new_credits_incoming = L2CAP_LE_DATA_CHANNELS_AUTOMATIC_CREDITS_INCREMENT;
3772                 }
3773 
3774                 // first fragment
3775                 uint16_t pos = 0;
3776                 if (!l2cap_channel->receive_sdu_len){
3777                     uint16_t sdu_len = little_endian_read_16(packet, COMPLETE_L2CAP_HEADER);
3778                     if(sdu_len > l2cap_channel->local_mtu) break;   // SDU would be larger than our buffer
3779                     l2cap_channel->receive_sdu_len = sdu_len;
3780                     l2cap_channel->receive_sdu_pos = 0;
3781                     pos  += 2u;
3782                     size -= 2u;
3783                 }
3784                 uint16_t fragment_size   = size-COMPLETE_L2CAP_HEADER;
3785                 uint16_t remaining_space = l2cap_channel->local_mtu - l2cap_channel->receive_sdu_pos;
3786                 if (fragment_size > remaining_space) break;         // SDU would cause buffer overrun
3787                 (void)memcpy(&l2cap_channel->receive_sdu_buffer[l2cap_channel->receive_sdu_pos],
3788                              &packet[COMPLETE_L2CAP_HEADER + pos],
3789                              fragment_size);
3790                 l2cap_channel->receive_sdu_pos += size - COMPLETE_L2CAP_HEADER;
3791                 // done?
3792                 log_debug("le packet pos %u, len %u", l2cap_channel->receive_sdu_pos, l2cap_channel->receive_sdu_len);
3793                 if (l2cap_channel->receive_sdu_pos >= l2cap_channel->receive_sdu_len){
3794                     l2cap_dispatch_to_channel(l2cap_channel, L2CAP_DATA_PACKET, l2cap_channel->receive_sdu_buffer, l2cap_channel->receive_sdu_len);
3795                     l2cap_channel->receive_sdu_len = 0;
3796                 }
3797             }
3798 #endif
3799             break;
3800     }
3801 #else
3802     UNUSED(handle); // ok: no code
3803     UNUSED(packet); // ok: no code
3804     UNUSED(size);   // ok: no code
3805 #endif
3806 }
3807 
3808 static void l2cap_acl_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
3809     UNUSED(packet_type);    // ok: registered with hci_register_acl_packet_handler
3810     UNUSED(channel);        // ok: there is no channel
3811 
3812     // Assert full L2CAP header present
3813     if (size < COMPLETE_L2CAP_HEADER) return;
3814 
3815     // Dispatch to Classic or LE handler (SCO packets are not dispatched to L2CAP)
3816     hci_con_handle_t handle = READ_ACL_CONNECTION_HANDLE(packet);
3817     hci_connection_t *conn = hci_connection_for_handle(handle);
3818     if (!conn) return;
3819     if (conn->address_type == BD_ADDR_TYPE_ACL){
3820         l2cap_acl_classic_handler(handle, packet, size);
3821     } else {
3822         l2cap_acl_le_handler(handle, packet, size);
3823     }
3824 
3825     l2cap_run();
3826 }
3827 
3828 // Bluetooth 4.0 - allows to register handler for Attribute Protocol and Security Manager Protocol
3829 void l2cap_register_fixed_channel(btstack_packet_handler_t packet_handler, uint16_t channel_id) {
3830     l2cap_fixed_channel_t * channel = l2cap_fixed_channel_for_channel_id(channel_id);
3831     if (!channel) return;
3832     channel->packet_handler = packet_handler;
3833 }
3834 
3835 #ifdef ENABLE_CLASSIC
3836 // finalize closed channel - l2cap_handle_disconnect_request & DISCONNECTION_RESPONSE
3837 void l2cap_finialize_channel_close(l2cap_channel_t * channel){
3838     channel->state = L2CAP_STATE_CLOSED;
3839     l2cap_handle_channel_closed(channel);
3840     // discard channel
3841     btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
3842     l2cap_free_channel_entry(channel);
3843 }
3844 #endif
3845 
3846 #ifdef L2CAP_USES_CHANNELS
3847 static l2cap_service_t * l2cap_get_service_internal(btstack_linked_list_t * services, uint16_t psm){
3848     btstack_linked_list_iterator_t it;
3849     btstack_linked_list_iterator_init(&it, services);
3850     while (btstack_linked_list_iterator_has_next(&it)){
3851         l2cap_service_t * service = (l2cap_service_t *) btstack_linked_list_iterator_next(&it);
3852         if ( service->psm == psm){
3853             return service;
3854         };
3855     }
3856     return NULL;
3857 }
3858 #endif
3859 
3860 #ifdef ENABLE_CLASSIC
3861 static inline l2cap_service_t * l2cap_get_service(uint16_t psm){
3862     return l2cap_get_service_internal(&l2cap_services, psm);
3863 }
3864 
3865 static void l2cap_update_minimal_security_level(void){
3866     // update minimal service security level
3867     gap_security_level_t minimal_level = LEVEL_1;
3868     btstack_linked_list_iterator_t it;
3869     btstack_linked_list_iterator_init(&it, &l2cap_services);
3870     while (btstack_linked_list_iterator_has_next(&it)){
3871         l2cap_service_t * service = (l2cap_service_t *) btstack_linked_list_iterator_next(&it);
3872         if (service->required_security_level > minimal_level){
3873             minimal_level = service->required_security_level;
3874         };
3875     }
3876     gap_set_minimal_service_security_level(minimal_level);
3877 }
3878 
3879 uint8_t l2cap_register_service(btstack_packet_handler_t service_packet_handler, uint16_t psm, uint16_t mtu, gap_security_level_t security_level){
3880 
3881     log_info("L2CAP_REGISTER_SERVICE psm 0x%x mtu %u", psm, mtu);
3882 
3883     // check for alread registered psm
3884     l2cap_service_t *service = l2cap_get_service(psm);
3885     if (service) {
3886         log_error("register: PSM %u already registered", psm);
3887         return L2CAP_SERVICE_ALREADY_REGISTERED;
3888     }
3889 
3890     // alloc structure
3891     service = btstack_memory_l2cap_service_get();
3892     if (!service) {
3893         log_error("register: no memory for l2cap_service_t");
3894         return BTSTACK_MEMORY_ALLOC_FAILED;
3895     }
3896 
3897     // fill in
3898     service->psm = psm;
3899     service->mtu = mtu;
3900     service->packet_handler = service_packet_handler;
3901     service->required_security_level = security_level;
3902 
3903     // add to services list
3904     btstack_linked_list_add(&l2cap_services, (btstack_linked_item_t *) service);
3905 
3906     l2cap_update_minimal_security_level();
3907 
3908 #ifndef ENABLE_EXPLICIT_CONNECTABLE_MODE_CONTROL
3909     // enable page scan
3910     gap_connectable_control(1);
3911 #endif
3912 
3913 
3914     return ERROR_CODE_SUCCESS;
3915 }
3916 
3917 uint8_t l2cap_unregister_service(uint16_t psm){
3918 
3919     log_info("unregister psm 0x%x", psm);
3920 
3921     l2cap_service_t *service = l2cap_get_service(psm);
3922     if (!service) return L2CAP_SERVICE_DOES_NOT_EXIST;
3923     btstack_linked_list_remove(&l2cap_services, (btstack_linked_item_t *) service);
3924     btstack_memory_l2cap_service_free(service);
3925 
3926     l2cap_update_minimal_security_level();
3927 
3928 #ifndef ENABLE_EXPLICIT_CONNECTABLE_MODE_CONTROL
3929     // disable page scan when no services registered
3930     if (btstack_linked_list_empty(&l2cap_services)) {
3931         gap_connectable_control(0);
3932     }
3933 #endif
3934 
3935     return ERROR_CODE_SUCCESS;
3936 }
3937 #endif
3938 
3939 
3940 #ifdef ENABLE_LE_DATA_CHANNELS
3941 
3942 static void l2cap_le_notify_channel_can_send(l2cap_channel_t *channel){
3943     if (!channel->waiting_for_can_send_now) return;
3944     if (channel->send_sdu_buffer) return;
3945     channel->waiting_for_can_send_now = 0;
3946     log_debug("le can send now, local_cid 0x%x", channel->local_cid);
3947     l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_LE_CAN_SEND_NOW);
3948 }
3949 
3950 // 1BH2222
3951 static void l2cap_emit_le_incoming_connection(l2cap_channel_t *channel) {
3952     log_info("le incoming addr_type %u, addr %s handle 0x%x psm 0x%x local_cid 0x%x remote_cid 0x%x, remote_mtu %u",
3953              channel->address_type, bd_addr_to_str(channel->address), channel->con_handle,  channel->psm, channel->local_cid, channel->remote_cid, channel->remote_mtu);
3954     uint8_t event[19];
3955     event[0] = L2CAP_EVENT_LE_INCOMING_CONNECTION;
3956     event[1] = sizeof(event) - 2u;
3957     event[2] = channel->address_type;
3958     reverse_bd_addr(channel->address, &event[3]);
3959     little_endian_store_16(event,  9, channel->con_handle);
3960     little_endian_store_16(event, 11, channel->psm);
3961     little_endian_store_16(event, 13, channel->local_cid);
3962     little_endian_store_16(event, 15, channel->remote_cid);
3963     little_endian_store_16(event, 17, channel->remote_mtu);
3964     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
3965     l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event));
3966 }
3967 // 11BH22222
3968 static void l2cap_emit_le_channel_opened(l2cap_channel_t *channel, uint8_t status) {
3969     log_info("opened le channel status 0x%x addr_type %u addr %s handle 0x%x psm 0x%x local_cid 0x%x remote_cid 0x%x local_mtu %u, remote_mtu %u",
3970              status, channel->address_type, bd_addr_to_str(channel->address), channel->con_handle, channel->psm,
3971              channel->local_cid, channel->remote_cid, channel->local_mtu, channel->remote_mtu);
3972     uint8_t event[23];
3973     event[0] = L2CAP_EVENT_LE_CHANNEL_OPENED;
3974     event[1] = sizeof(event) - 2u;
3975     event[2] = status;
3976     event[3] = channel->address_type;
3977     reverse_bd_addr(channel->address, &event[4]);
3978     little_endian_store_16(event, 10, channel->con_handle);
3979     event[12] = (channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) ? 1 : 0;
3980     little_endian_store_16(event, 13, channel->psm);
3981     little_endian_store_16(event, 15, channel->local_cid);
3982     little_endian_store_16(event, 17, channel->remote_cid);
3983     little_endian_store_16(event, 19, channel->local_mtu);
3984     little_endian_store_16(event, 21, channel->remote_mtu);
3985     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
3986     l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event));
3987 }
3988 // 2
3989 static void l2cap_emit_le_channel_closed(l2cap_channel_t * channel){
3990     log_info("closed local_cid 0x%x", channel->local_cid);
3991     uint8_t event[4];
3992     event[0] = L2CAP_EVENT_LE_CHANNEL_CLOSED;
3993     event[1] = sizeof(event) - 2u;
3994     little_endian_store_16(event, 2, channel->local_cid);
3995     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
3996     l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event));
3997 }
3998 
3999 static void l2cap_le_send_pdu(l2cap_channel_t *channel){
4000     btstack_assert(channel != NULL);
4001     btstack_assert(channel->send_sdu_buffer != NULL);
4002     btstack_assert(channel->credits_outgoing > 0);
4003 
4004     // send part of SDU
4005     hci_reserve_packet_buffer();
4006     uint8_t * acl_buffer = hci_get_outgoing_packet_buffer();
4007     uint8_t * l2cap_payload = acl_buffer + 8;
4008     uint16_t pos = 0;
4009     if (!channel->send_sdu_pos){
4010         // store SDU len
4011         channel->send_sdu_pos += 2u;
4012         little_endian_store_16(l2cap_payload, pos, channel->send_sdu_len);
4013         pos += 2u;
4014     }
4015     uint16_t payload_size = btstack_min(channel->send_sdu_len + 2u - channel->send_sdu_pos, channel->remote_mps - pos);
4016     log_info("len %u, pos %u => payload %u, credits %u", channel->send_sdu_len, channel->send_sdu_pos, payload_size, channel->credits_outgoing);
4017     (void)memcpy(&l2cap_payload[pos],
4018                  &channel->send_sdu_buffer[channel->send_sdu_pos - 2u],
4019                  payload_size); // -2 for virtual SDU len
4020     pos += payload_size;
4021     channel->send_sdu_pos += payload_size;
4022     l2cap_setup_header(acl_buffer, channel->con_handle, 0, channel->remote_cid, pos);
4023 
4024     channel->credits_outgoing--;
4025 
4026     hci_send_acl_packet_buffer(8u + pos);
4027 
4028     if (channel->send_sdu_pos >= (channel->send_sdu_len + 2u)){
4029         channel->send_sdu_buffer = NULL;
4030         // send done event
4031         l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_LE_PACKET_SENT);
4032         // inform about can send now
4033         l2cap_le_notify_channel_can_send(channel);
4034     }
4035 }
4036 
4037 // finalize closed channel - l2cap_handle_disconnect_request & DISCONNECTION_RESPONSE
4038 void l2cap_le_finialize_channel_close(l2cap_channel_t * channel){
4039     channel->state = L2CAP_STATE_CLOSED;
4040     l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_CHANNEL_CLOSED);
4041     // discard channel
4042     btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
4043     l2cap_free_channel_entry(channel);
4044 }
4045 
4046 static inline l2cap_service_t * l2cap_le_get_service(uint16_t le_psm){
4047     return l2cap_get_service_internal(&l2cap_le_services, le_psm);
4048 }
4049 
4050 uint8_t l2cap_le_register_service(btstack_packet_handler_t packet_handler, uint16_t psm, gap_security_level_t security_level){
4051 
4052     log_info("L2CAP_LE_REGISTER_SERVICE psm 0x%x", psm);
4053 
4054     // check for alread registered psm
4055     l2cap_service_t *service = l2cap_le_get_service(psm);
4056     if (service) {
4057         return L2CAP_SERVICE_ALREADY_REGISTERED;
4058     }
4059 
4060     // alloc structure
4061     service = btstack_memory_l2cap_service_get();
4062     if (!service) {
4063         log_error("register: no memory for l2cap_service_t");
4064         return BTSTACK_MEMORY_ALLOC_FAILED;
4065     }
4066 
4067     // fill in
4068     service->psm = psm;
4069     service->mtu = 0;
4070     service->packet_handler = packet_handler;
4071     service->required_security_level = security_level;
4072 
4073     // add to services list
4074     btstack_linked_list_add(&l2cap_le_services, (btstack_linked_item_t *) service);
4075 
4076     // done
4077     return ERROR_CODE_SUCCESS;
4078 }
4079 
4080 uint8_t l2cap_le_unregister_service(uint16_t psm) {
4081     log_info("L2CAP_LE_UNREGISTER_SERVICE psm 0x%x", psm);
4082     l2cap_service_t *service = l2cap_le_get_service(psm);
4083     if (!service) return L2CAP_SERVICE_DOES_NOT_EXIST;
4084 
4085     btstack_linked_list_remove(&l2cap_le_services, (btstack_linked_item_t *) service);
4086     btstack_memory_l2cap_service_free(service);
4087     return ERROR_CODE_SUCCESS;
4088 }
4089 
4090 uint8_t l2cap_le_accept_connection(uint16_t local_cid, uint8_t * receive_sdu_buffer, uint16_t mtu, uint16_t initial_credits){
4091     // get channel
4092     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
4093     if (!channel) return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
4094 
4095     // validate state
4096     if (channel->state != L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT){
4097         return ERROR_CODE_COMMAND_DISALLOWED;
4098     }
4099 
4100     // set state accept connection
4101     channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_ACCEPT;
4102     channel->receive_sdu_buffer = receive_sdu_buffer;
4103     channel->local_mtu = mtu;
4104     channel->new_credits_incoming = initial_credits;
4105     channel->automatic_credits  = initial_credits == L2CAP_LE_AUTOMATIC_CREDITS;
4106 
4107     // test
4108     // channel->new_credits_incoming = 1;
4109 
4110     // go
4111     l2cap_run();
4112     return ERROR_CODE_SUCCESS;
4113 }
4114 
4115 /**
4116  * @brief Deny incoming LE Data Channel connection due to resource constraints
4117  * @param local_cid             L2CAP LE Data Channel Identifier
4118  */
4119 
4120 uint8_t l2cap_le_decline_connection(uint16_t local_cid){
4121     // get channel
4122     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
4123     if (!channel) return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
4124 
4125     // validate state
4126     if (channel->state != L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT){
4127         return ERROR_CODE_COMMAND_DISALLOWED;
4128     }
4129 
4130     // set state decline connection
4131     channel->state  = L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_DECLINE;
4132     channel->reason = 0x04; // no resources available
4133     l2cap_run();
4134     return ERROR_CODE_SUCCESS;
4135 }
4136 
4137 static gap_security_level_t l2cap_le_security_level_for_connection(hci_con_handle_t con_handle){
4138     uint8_t encryption_key_size = gap_encryption_key_size(con_handle);
4139     if (encryption_key_size == 0) return LEVEL_0;
4140 
4141     uint8_t authenticated = gap_authenticated(con_handle);
4142     if (!authenticated) return LEVEL_2;
4143 
4144     return encryption_key_size == 16 ? LEVEL_4 : LEVEL_3;
4145 }
4146 
4147 // used to handle pairing complete after triggering to increase
4148 static void l2cap_sm_packet_handler(uint8_t packet_type, uint16_t channel_nr, uint8_t *packet, uint16_t size) {
4149     UNUSED(channel_nr);
4150     UNUSED(size);
4151     UNUSED(packet_type);
4152     btstack_assert(packet_type == HCI_EVENT_PACKET);
4153     if (hci_event_packet_get_type(packet) != SM_EVENT_PAIRING_COMPLETE) return;
4154     hci_con_handle_t con_handle = sm_event_pairing_complete_get_handle(packet);
4155     btstack_linked_list_iterator_t it;
4156     btstack_linked_list_iterator_init(&it, &l2cap_channels);
4157     while (btstack_linked_list_iterator_has_next(&it)) {
4158         l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
4159         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
4160         if (channel->con_handle != con_handle) continue;
4161         if (channel->state != L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE) continue;
4162 
4163         // found channel, check security level
4164         if (l2cap_le_security_level_for_connection(con_handle) < channel->required_security_level){
4165             // pairing failed or wasn't good enough, inform user
4166             l2cap_emit_le_channel_opened(channel, ERROR_CODE_INSUFFICIENT_SECURITY);
4167             // discard channel
4168             btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
4169             l2cap_free_channel_entry(channel);
4170         } else {
4171             // send conn request now
4172             channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST;
4173             l2cap_run();
4174         }
4175     }
4176 }
4177 
4178 uint8_t l2cap_le_create_channel(btstack_packet_handler_t packet_handler, hci_con_handle_t con_handle,
4179     uint16_t psm, uint8_t * receive_sdu_buffer, uint16_t mtu, uint16_t initial_credits, gap_security_level_t security_level,
4180     uint16_t * out_local_cid) {
4181 
4182     static btstack_packet_callback_registration_t sm_event_callback_registration;
4183     static bool sm_callback_registered = false;
4184 
4185     log_info("create, handle 0x%04x psm 0x%x mtu %u", con_handle, psm, mtu);
4186 
4187     hci_connection_t * connection = hci_connection_for_handle(con_handle);
4188     if (!connection) {
4189         log_error("no hci_connection for handle 0x%04x", con_handle);
4190         return ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER;
4191     }
4192 
4193     l2cap_channel_t * channel = l2cap_create_channel_entry(packet_handler, L2CAP_CHANNEL_TYPE_LE_DATA_CHANNEL, connection->address, connection->address_type, psm, mtu, security_level);
4194     if (!channel) {
4195         return BTSTACK_MEMORY_ALLOC_FAILED;
4196     }
4197     log_info("created %p", channel);
4198 
4199     // store local_cid
4200     if (out_local_cid){
4201        *out_local_cid = channel->local_cid;
4202     }
4203 
4204     // setup channel entry
4205     channel->con_handle = con_handle;
4206     channel->receive_sdu_buffer = receive_sdu_buffer;
4207     channel->new_credits_incoming = initial_credits;
4208     channel->automatic_credits    = initial_credits == L2CAP_LE_AUTOMATIC_CREDITS;
4209 
4210     // add to connections list
4211     btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel);
4212 
4213     // check security level
4214     if (l2cap_le_security_level_for_connection(con_handle) < channel->required_security_level){
4215         if (!sm_callback_registered){
4216             sm_callback_registered = true;
4217             // lazy registration for SM events
4218             sm_event_callback_registration.callback = &l2cap_sm_packet_handler;
4219             sm_add_event_handler(&sm_event_callback_registration);
4220         }
4221 
4222         // start pairing
4223         channel->state = L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE;
4224         sm_request_pairing(con_handle);
4225     } else {
4226         // send conn request right away
4227         channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST;
4228         l2cap_run();
4229     }
4230 
4231     return ERROR_CODE_SUCCESS;
4232 }
4233 
4234 /**
4235  * @brief Provide credtis for LE Data Channel
4236  * @param local_cid             L2CAP LE Data Channel Identifier
4237  * @param credits               Number additional credits for peer
4238  */
4239 uint8_t l2cap_le_provide_credits(uint16_t local_cid, uint16_t credits){
4240 
4241     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
4242     if (!channel) {
4243         log_error("le credits no channel for cid 0x%02x", local_cid);
4244         return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
4245     }
4246 
4247     // check state
4248     if (channel->state != L2CAP_STATE_OPEN){
4249         log_error("le credits but channel 0x%02x not open yet", local_cid);
4250     }
4251 
4252     // assert incoming credits + credits <= 0xffff
4253     uint32_t total_credits = channel->credits_incoming;
4254     total_credits += channel->new_credits_incoming;
4255     total_credits += credits;
4256     if (total_credits > 0xffffu){
4257         log_error("le credits overrun: current %u, scheduled %u, additional %u", channel->credits_incoming,
4258             channel->new_credits_incoming, credits);
4259     }
4260 
4261     // set credits_granted
4262     channel->new_credits_incoming += credits;
4263 
4264     // go
4265     l2cap_run();
4266     return ERROR_CODE_SUCCESS;
4267 }
4268 
4269 /**
4270  * @brief Check if outgoing buffer is available and that there's space on the Bluetooth module
4271  * @param local_cid             L2CAP LE Data Channel Identifier
4272  */
4273 int l2cap_le_can_send_now(uint16_t local_cid){
4274     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
4275     if (!channel) {
4276         log_error("le can send now, no channel for cid 0x%02x", local_cid);
4277         return 0;
4278     }
4279 
4280     // check state
4281     if (channel->state != L2CAP_STATE_OPEN) return 0;
4282 
4283     // check queue
4284     if (channel->send_sdu_buffer) return 0;
4285 
4286     // fine, go ahead
4287     return 1;
4288 }
4289 
4290 /**
4291  * @brief Request emission of L2CAP_EVENT_CAN_SEND_NOW as soon as possible
4292  * @note L2CAP_EVENT_CAN_SEND_NOW might be emitted during call to this function
4293  *       so packet handler should be ready to handle it
4294  * @param local_cid             L2CAP LE Data Channel Identifier
4295  */
4296 uint8_t l2cap_le_request_can_send_now_event(uint16_t local_cid){
4297     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
4298     if (!channel) {
4299         log_error("can send now, no channel for cid 0x%02x", local_cid);
4300         return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
4301     }
4302     channel->waiting_for_can_send_now = 1;
4303     l2cap_le_notify_channel_can_send(channel);
4304     return ERROR_CODE_SUCCESS;
4305 }
4306 
4307 /**
4308  * @brief Send data via LE Data Channel
4309  * @note Since data larger then the maximum PDU needs to be segmented into multiple PDUs, data needs to stay valid until ... event
4310  * @param local_cid             L2CAP LE Data Channel Identifier
4311  * @param data                  data to send
4312  * @param size                  data size
4313  */
4314 uint8_t l2cap_le_send_data(uint16_t local_cid, uint8_t * data, uint16_t size){
4315 
4316     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
4317     if (!channel) {
4318         log_error("l2cap send, no channel for cid 0x%02x", local_cid);
4319         return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
4320     }
4321 
4322     if (size > channel->remote_mtu){
4323         log_error("l2cap send, cid 0x%02x, data length exceeds remote MTU.", local_cid);
4324         return L2CAP_DATA_LEN_EXCEEDS_REMOTE_MTU;
4325     }
4326 
4327     if (channel->send_sdu_buffer){
4328         log_info("l2cap send, cid 0x%02x, cannot send", local_cid);
4329         return BTSTACK_ACL_BUFFERS_FULL;
4330     }
4331 
4332     channel->send_sdu_buffer = data;
4333     channel->send_sdu_len    = size;
4334     channel->send_sdu_pos    = 0;
4335 
4336     l2cap_notify_channel_can_send();
4337     return ERROR_CODE_SUCCESS;
4338 }
4339 
4340 /**
4341  * @brief Disconnect from LE Data Channel
4342  * @param local_cid             L2CAP LE Data Channel Identifier
4343  */
4344 uint8_t l2cap_le_disconnect(uint16_t local_cid)
4345 {
4346     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
4347     if (!channel) {
4348         log_error("l2cap send, no channel for cid 0x%02x", local_cid);
4349         return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
4350     }
4351 
4352     channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
4353     l2cap_run();
4354     return ERROR_CODE_SUCCESS;
4355 }
4356 
4357 #endif
4358