xref: /btstack/src/l2cap.c (revision 14c148cad3959931b78cf53470e7f665ec0259cc)
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_LE_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_LE_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                             map[0] = 0x06;  // L2CAP Signaling Channel (0x02) + Connectionless reception (0x04)
1731                             l2cap_send_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, info_type, 0, sizeof(map), &map);
1732                         }
1733                         break;
1734                     default:
1735                         // all other types are not supported
1736                         l2cap_send_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, info_type, 1, 0, NULL);
1737                         break;
1738                 }
1739                 break;
1740             case COMMAND_REJECT:
1741                 l2cap_send_signaling_packet(handle, COMMAND_REJECT, sig_id, result, 0, NULL);
1742                 break;
1743 #endif
1744 #ifdef ENABLE_BLE
1745             case LE_CREDIT_BASED_CONNECTION_REQUEST:
1746                 l2cap_send_le_signaling_packet(handle, LE_CREDIT_BASED_CONNECTION_RESPONSE, sig_id, 0, 0, 0, 0, result);
1747                 break;
1748             case COMMAND_REJECT_LE:
1749                 l2cap_send_le_signaling_packet(handle, COMMAND_REJECT, sig_id, result, 0, NULL);
1750                 break;
1751 #endif
1752             default:
1753                 // should not happen
1754                 break;
1755         }
1756     }
1757 }
1758 
1759 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1760 static bool l2ap_run_ertm(void){
1761     // send l2cap information request if neccessary
1762     btstack_linked_list_iterator_t it;
1763     hci_connections_get_iterator(&it);
1764     while(btstack_linked_list_iterator_has_next(&it)){
1765         hci_connection_t * connection = (hci_connection_t *) btstack_linked_list_iterator_next(&it);
1766         if (connection->l2cap_state.information_state == L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST){
1767             if (!hci_can_send_acl_packet_now(connection->con_handle)) break;
1768             connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W4_EXTENDED_FEATURE_RESPONSE;
1769             uint8_t sig_id = l2cap_next_sig_id();
1770             uint8_t info_type = L2CAP_INFO_TYPE_EXTENDED_FEATURES_SUPPORTED;
1771             l2cap_send_signaling_packet(connection->con_handle, INFORMATION_REQUEST, sig_id, info_type);
1772             return true;
1773         }
1774     }
1775     return false;
1776 }
1777 #endif
1778 
1779 #ifdef ENABLE_LE_DATA_CHANNELS
1780 static void l2cap_run_le_data_channels(void){
1781     btstack_linked_list_iterator_t it;
1782     btstack_linked_list_iterator_init(&it, &l2cap_channels);
1783     while (btstack_linked_list_iterator_has_next(&it)){
1784         uint16_t mps;
1785         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
1786 
1787         if (channel->channel_type != L2CAP_CHANNEL_TYPE_LE_DATA_CHANNEL) continue;
1788 
1789         // log_info("l2cap_run: channel %p, state %u, var 0x%02x", channel, channel->state, channel->state_var);
1790         switch (channel->state){
1791             case L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST:
1792                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1793                 channel->state = L2CAP_STATE_WAIT_LE_CONNECTION_RESPONSE;
1794                 // le psm, source cid, mtu, mps, initial credits
1795                 channel->local_sig_id = l2cap_next_sig_id();
1796                 channel->credits_incoming =  channel->new_credits_incoming;
1797                 channel->new_credits_incoming = 0;
1798                 mps = btstack_min(l2cap_max_le_mtu(), channel->local_mtu);
1799                 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);
1800                 break;
1801             case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_ACCEPT:
1802                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1803                 // TODO: support larger MPS
1804                 channel->state = L2CAP_STATE_OPEN;
1805                 channel->credits_incoming =  channel->new_credits_incoming;
1806                 channel->new_credits_incoming = 0;
1807                 mps = btstack_min(l2cap_max_le_mtu(), channel->local_mtu);
1808                 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);
1809                 // notify client
1810                 l2cap_emit_le_channel_opened(channel, 0);
1811                 break;
1812             case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_DECLINE:
1813                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1814                 channel->state = L2CAP_STATE_INVALID;
1815                 l2cap_send_le_signaling_packet(channel->con_handle, LE_CREDIT_BASED_CONNECTION_RESPONSE, channel->remote_sig_id, 0, 0, 0, 0, channel->reason);
1816                 // discard channel - l2cap_finialize_channel_close without sending l2cap close event
1817                 btstack_linked_list_iterator_remove(&it);
1818                 l2cap_free_channel_entry(channel);
1819                 break;
1820             case L2CAP_STATE_OPEN:
1821                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1822 
1823                 // send credits
1824                 if (channel->new_credits_incoming){
1825                     log_info("l2cap: sending %u credits", channel->new_credits_incoming);
1826                     channel->local_sig_id = l2cap_next_sig_id();
1827                     uint16_t new_credits = channel->new_credits_incoming;
1828                     channel->new_credits_incoming = 0;
1829                     channel->credits_incoming += new_credits;
1830                     l2cap_send_le_signaling_packet(channel->con_handle, LE_FLOW_CONTROL_CREDIT, channel->local_sig_id, channel->remote_cid, new_credits);
1831                 }
1832                 break;
1833 
1834             case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST:
1835                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1836                 channel->local_sig_id = l2cap_next_sig_id();
1837                 channel->state = L2CAP_STATE_WAIT_DISCONNECT;
1838                 l2cap_send_le_signaling_packet( channel->con_handle, DISCONNECTION_REQUEST, channel->local_sig_id, channel->remote_cid, channel->local_cid);
1839                 break;
1840             case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE:
1841                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1842                 channel->state = L2CAP_STATE_INVALID;
1843                 l2cap_send_le_signaling_packet( channel->con_handle, DISCONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid);
1844                 l2cap_le_finialize_channel_close(channel);  // -- remove from list
1845                 break;
1846             default:
1847                 break;
1848         }
1849     }
1850 }
1851 #endif
1852 
1853 // MARK: L2CAP_RUN
1854 // process outstanding signaling tasks
1855 static void l2cap_run(void){
1856 
1857     // log_info("l2cap_run: entered");
1858     l2cap_run_signaling_response();
1859 
1860 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1861     bool done = l2ap_run_ertm();
1862     if (done) return;
1863 #endif
1864 
1865 #if defined(ENABLE_CLASSIC) || defined(ENABLE_BLE)
1866     btstack_linked_list_iterator_t it;
1867 #endif
1868 
1869 #ifdef ENABLE_CLASSIC
1870     btstack_linked_list_iterator_init(&it, &l2cap_channels);
1871     while (btstack_linked_list_iterator_has_next(&it)){
1872 
1873         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
1874 
1875         if (channel->channel_type != L2CAP_CHANNEL_TYPE_CLASSIC) continue;
1876 
1877         // log_info("l2cap_run: channel %p, state %u, var 0x%02x", channel, channel->state, channel->state_var);
1878         bool finalized = l2cap_run_for_classic_channel(channel);
1879 
1880         if (!finalized) {
1881 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1882             l2cap_run_for_classic_channel_ertm(channel);
1883 #endif
1884         }
1885     }
1886 #endif
1887 
1888 #ifdef ENABLE_LE_DATA_CHANNELS
1889     l2cap_run_le_data_channels();
1890 #endif
1891 
1892 #ifdef ENABLE_BLE
1893     // send l2cap con paramter update if necessary
1894     hci_connections_get_iterator(&it);
1895     while(btstack_linked_list_iterator_has_next(&it)){
1896         hci_connection_t * connection = (hci_connection_t *) btstack_linked_list_iterator_next(&it);
1897         if ((connection->address_type != BD_ADDR_TYPE_LE_PUBLIC) && (connection->address_type != BD_ADDR_TYPE_LE_RANDOM)) continue;
1898         if (!hci_can_send_acl_packet_now(connection->con_handle)) continue;
1899         switch (connection->le_con_parameter_update_state){
1900             case CON_PARAMETER_UPDATE_SEND_REQUEST:
1901                 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_NONE;
1902                 l2cap_send_le_signaling_packet(connection->con_handle, CONNECTION_PARAMETER_UPDATE_REQUEST, l2cap_next_sig_id(),
1903                                                connection->le_conn_interval_min, connection->le_conn_interval_max, connection->le_conn_latency, connection->le_supervision_timeout);
1904                 break;
1905             case CON_PARAMETER_UPDATE_SEND_RESPONSE:
1906                 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_CHANGE_HCI_CON_PARAMETERS;
1907                 l2cap_send_le_signaling_packet(connection->con_handle, CONNECTION_PARAMETER_UPDATE_RESPONSE, connection->le_con_param_update_identifier, 0);
1908                 break;
1909             case CON_PARAMETER_UPDATE_DENY:
1910                 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_NONE;
1911                 l2cap_send_le_signaling_packet(connection->con_handle, CONNECTION_PARAMETER_UPDATE_RESPONSE, connection->le_con_param_update_identifier, 1);
1912                 break;
1913             default:
1914                 break;
1915         }
1916     }
1917 #endif
1918 
1919     // log_info("l2cap_run: exit");
1920 }
1921 
1922 #ifdef ENABLE_CLASSIC
1923 static void l2cap_handle_connection_complete(hci_con_handle_t con_handle, l2cap_channel_t * channel){
1924     if ((channel->state == L2CAP_STATE_WAIT_CONNECTION_COMPLETE) || (channel->state == L2CAP_STATE_WILL_SEND_CREATE_CONNECTION)) {
1925         log_info("connection complete con_handle %04x - for channel %p cid 0x%04x", (int) con_handle, channel, channel->local_cid);
1926         // success, start l2cap handshake
1927         channel->con_handle = con_handle;
1928         // check remote SSP feature first
1929         channel->state = L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES;
1930     }
1931 }
1932 
1933 static void l2cap_ready_to_connect(l2cap_channel_t * channel){
1934 
1935 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1936     // assumption: outgoing connection
1937     hci_connection_t * connection = hci_connection_for_handle(channel->con_handle);
1938     if (connection->l2cap_state.information_state == L2CAP_INFORMATION_STATE_IDLE){
1939         connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST;
1940         channel->state = L2CAP_STATE_WAIT_OUTGOING_EXTENDED_FEATURES;
1941         return;
1942     }
1943 #endif
1944 
1945     // fine, go ahead
1946     channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST;
1947 }
1948 
1949 static void l2cap_handle_remote_supported_features_received(l2cap_channel_t * channel){
1950     if (channel->state != L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES) return;
1951 
1952     // abort if Secure Connections Only Mode with legacy connection
1953     if (gap_get_secure_connections_only_mode() && gap_secure_connection(channel->con_handle) == false){
1954         l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY);
1955         btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t  *) channel);
1956         l2cap_free_channel_entry(channel);
1957         return;
1958     }
1959 
1960     // we have been waiting for remote supported features
1961     if (channel->required_security_level > LEVEL_0){
1962         // request security level
1963         channel->state = L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE;
1964         gap_request_security_level(channel->con_handle, channel->required_security_level);
1965         return;
1966     }
1967 
1968     l2cap_ready_to_connect(channel);
1969 }
1970 #endif
1971 
1972 #ifdef L2CAP_USES_CHANNELS
1973 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,
1974     uint16_t psm, uint16_t local_mtu, gap_security_level_t security_level){
1975 
1976     l2cap_channel_t * channel = btstack_memory_l2cap_channel_get();
1977     if (!channel) {
1978         return NULL;
1979     }
1980 
1981     // fill in
1982     channel->packet_handler = packet_handler;
1983     channel->channel_type   = channel_type;
1984     bd_addr_copy(channel->address, address);
1985     channel->address_type = address_type;
1986     channel->psm = psm;
1987     channel->local_mtu  = local_mtu;
1988     channel->remote_mtu = L2CAP_DEFAULT_MTU;
1989     channel->required_security_level = security_level;
1990 
1991     //
1992     channel->local_cid = l2cap_next_local_cid();
1993     channel->con_handle = HCI_CON_HANDLE_INVALID;
1994 
1995     // set initial state
1996     channel->state = L2CAP_STATE_WILL_SEND_CREATE_CONNECTION;
1997     channel->state_var = L2CAP_CHANNEL_STATE_VAR_NONE;
1998     channel->remote_sig_id = L2CAP_SIG_ID_INVALID;
1999     channel->local_sig_id = L2CAP_SIG_ID_INVALID;
2000 
2001     log_info("create channel %p, local_cid 0x%04x", channel, channel->local_cid);
2002 
2003     return channel;
2004 }
2005 
2006 static void l2cap_free_channel_entry(l2cap_channel_t * channel){
2007     log_info("free channel %p, local_cid 0x%04x", channel, channel->local_cid);
2008     // assert all timers are stopped
2009     l2cap_stop_rtx(channel);
2010 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2011     l2cap_ertm_stop_retransmission_timer(channel);
2012     l2cap_ertm_stop_monitor_timer(channel);
2013 #endif
2014     // free  memory
2015     btstack_memory_l2cap_channel_free(channel);
2016 }
2017 #endif
2018 
2019 #ifdef ENABLE_CLASSIC
2020 
2021 /**
2022  * @brief Creates L2CAP channel to the PSM of a remote device with baseband address. A new baseband connection will be initiated if necessary.
2023  * @param packet_handler
2024  * @param address
2025  * @param psm
2026  * @param mtu
2027  * @param local_cid
2028  */
2029 
2030 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){
2031     // limit MTU to the size of our outgoing HCI buffer
2032     uint16_t local_mtu = btstack_min(mtu, l2cap_max_mtu());
2033 
2034 	// determine security level based on psm
2035 	const gap_security_level_t security_level = l2cap_security_level_0_allowed_for_PSM(psm) ? LEVEL_0 : gap_get_security_level();
2036 	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);
2037 
2038     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);
2039     if (!channel) {
2040         return BTSTACK_MEMORY_ALLOC_FAILED;
2041     }
2042 
2043 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2044     channel->mode = L2CAP_CHANNEL_MODE_BASIC;
2045 #endif
2046 
2047     // add to connections list
2048     btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel);
2049 
2050     // store local_cid
2051     if (out_local_cid){
2052        *out_local_cid = channel->local_cid;
2053     }
2054 
2055 	// state: L2CAP_STATE_WILL_SEND_CREATE_CONNECTION
2056 
2057     // check if hci connection is already usable,
2058     hci_connection_t * conn = hci_connection_for_bd_addr_and_type(address, BD_ADDR_TYPE_ACL);
2059     if (conn && conn->state == OPEN){
2060     	// simulate connection complete
2061 	    l2cap_handle_connection_complete(conn->con_handle, channel);
2062 
2063 		// state: L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES
2064 
2065         // check if remote supported features are already received
2066         if (conn->bonding_flags & BONDING_RECEIVED_REMOTE_FEATURES) {
2067         	// simulate remote features received
2068             l2cap_handle_remote_supported_features_received(channel);
2069         }
2070     }
2071 
2072     l2cap_run();
2073 
2074     return ERROR_CODE_SUCCESS;
2075 }
2076 
2077 void l2cap_disconnect(uint16_t local_cid, uint8_t reason){
2078     log_info("disconnect local_cid 0x%x reason 0x%x", local_cid, reason);
2079     UNUSED(reason);
2080     // find channel for local_cid
2081     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
2082     if (channel) {
2083         channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2084     }
2085     // process
2086     l2cap_run();
2087 }
2088 
2089 static void l2cap_handle_connection_failed_for_addr(bd_addr_t address, uint8_t status){
2090     // mark all channels before emitting open events as these could trigger new connetion requests to the same device
2091     btstack_linked_list_iterator_t it;
2092     btstack_linked_list_iterator_init(&it, &l2cap_channels);
2093     while (btstack_linked_list_iterator_has_next(&it)){
2094         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2095         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2096         if (bd_addr_cmp( channel->address, address) != 0) continue;
2097         // channel for this address found
2098         switch (channel->state){
2099             case L2CAP_STATE_WAIT_CONNECTION_COMPLETE:
2100             case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION:
2101                 channel->state = L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD;
2102                 break;
2103             default:
2104                 break;
2105         }
2106     }
2107     // emit and free marked entries. restart loop to deal with list changes
2108     int done = 0;
2109     while (!done) {
2110         done = 1;
2111         btstack_linked_list_iterator_init(&it, &l2cap_channels);
2112         while (btstack_linked_list_iterator_has_next(&it)){
2113             l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2114             if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2115             if (channel->state == L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD){
2116                 done = 0;
2117                 // failure, forward error code
2118                 l2cap_handle_channel_open_failed(channel, status);
2119                 // discard channel
2120                 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
2121                 l2cap_free_channel_entry(channel);
2122                 break;
2123             }
2124         }
2125     }
2126 
2127 }
2128 
2129 static void l2cap_handle_connection_success_for_addr(bd_addr_t address, hci_con_handle_t handle){
2130     btstack_linked_list_iterator_t it;
2131     btstack_linked_list_iterator_init(&it, &l2cap_channels);
2132     while (btstack_linked_list_iterator_has_next(&it)){
2133         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2134         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2135         if ( ! bd_addr_cmp( channel->address, address) ){
2136             l2cap_handle_connection_complete(handle, channel);
2137         }
2138     }
2139     // process
2140     l2cap_run();
2141 }
2142 #endif
2143 
2144 static bool l2cap_channel_ready_to_send(l2cap_channel_t * channel){
2145     switch (channel->channel_type){
2146 #ifdef ENABLE_CLASSIC
2147         case L2CAP_CHANNEL_TYPE_CLASSIC:
2148             if (channel->state != L2CAP_STATE_OPEN) return false;
2149 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2150             // send if we have more data and remote windows isn't full yet
2151             if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) {
2152                 if (channel->unacked_frames >= btstack_min(channel->num_stored_tx_frames, channel->remote_tx_window_size)) return false;
2153                 return hci_can_send_acl_classic_packet_now() != 0;
2154             }
2155 #endif
2156             if (!channel->waiting_for_can_send_now) return false;
2157             return (hci_can_send_acl_classic_packet_now() != 0);
2158         case L2CAP_CHANNEL_TYPE_CONNECTIONLESS:
2159             if (!channel->waiting_for_can_send_now) return false;
2160             return hci_can_send_acl_classic_packet_now() != 0;
2161 #endif
2162 #ifdef ENABLE_BLE
2163         case L2CAP_CHANNEL_TYPE_LE_FIXED:
2164             if (!channel->waiting_for_can_send_now) return false;
2165             return hci_can_send_acl_le_packet_now() != 0;
2166 #ifdef ENABLE_LE_DATA_CHANNELS
2167         case L2CAP_CHANNEL_TYPE_LE_DATA_CHANNEL:
2168             if (channel->state != L2CAP_STATE_OPEN) return false;
2169             if (channel->send_sdu_buffer == NULL) return false;
2170             if (channel->credits_outgoing == 0u) return false;
2171             return hci_can_send_acl_le_packet_now() != 0;
2172 #endif
2173 #endif
2174         default:
2175             return false;
2176     }
2177 }
2178 
2179 static void l2cap_channel_trigger_send(l2cap_channel_t * channel){
2180     switch (channel->channel_type){
2181 #ifdef ENABLE_CLASSIC
2182         case L2CAP_CHANNEL_TYPE_CLASSIC:
2183 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2184             if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) {
2185                 l2cap_ertm_channel_send_information_frame(channel);
2186                 return;
2187             }
2188 #endif
2189             channel->waiting_for_can_send_now = 0;
2190             l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid);
2191             break;
2192         case L2CAP_CHANNEL_TYPE_CONNECTIONLESS:
2193             channel->waiting_for_can_send_now = 0;
2194             l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid);
2195             break;
2196 #endif
2197 #ifdef ENABLE_BLE
2198         case L2CAP_CHANNEL_TYPE_LE_FIXED:
2199             channel->waiting_for_can_send_now = 0;
2200             l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid);
2201             break;
2202 #ifdef ENABLE_LE_DATA_CHANNELS
2203         case L2CAP_CHANNEL_TYPE_LE_DATA_CHANNEL:
2204             l2cap_le_send_pdu(channel);
2205             break;
2206 #endif
2207 #endif
2208         default:
2209             break;
2210     }
2211 }
2212 
2213 static void l2cap_notify_channel_can_send(void){
2214     bool done = false;
2215     while (!done){
2216         done = true;
2217         btstack_linked_list_iterator_t it;
2218         btstack_linked_list_iterator_init(&it, &l2cap_channels);
2219         while (btstack_linked_list_iterator_has_next(&it)){
2220             l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2221             bool ready = l2cap_channel_ready_to_send(channel);
2222             if (!ready) continue;
2223 
2224             // requeue channel for fairness
2225             btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
2226             btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel);
2227 
2228             // trigger sending
2229             l2cap_channel_trigger_send(channel);
2230 
2231             // exit inner loop as we just broke the iterator, but try again
2232             done = false;
2233             break;
2234         }
2235     }
2236 }
2237 
2238 #ifdef L2CAP_USES_CHANNELS
2239 
2240 static int l2cap_send_open_failed_on_hci_disconnect(l2cap_channel_t * channel){
2241     // open cannot fail for for incoming connections
2242     if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) return 0;
2243 
2244     // check state
2245     switch (channel->state){
2246         case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION:
2247         case L2CAP_STATE_WAIT_CONNECTION_COMPLETE:
2248         case L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES:
2249         case L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE:
2250         case L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT:
2251         case L2CAP_STATE_WAIT_OUTGOING_EXTENDED_FEATURES:
2252         case L2CAP_STATE_WAIT_CONNECT_RSP:
2253         case L2CAP_STATE_CONFIG:
2254         case L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST:
2255         case L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST:
2256         case L2CAP_STATE_WAIT_LE_CONNECTION_RESPONSE:
2257         case L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD:
2258             return 1;
2259 
2260         case L2CAP_STATE_OPEN:
2261         case L2CAP_STATE_CLOSED:
2262         case L2CAP_STATE_WAIT_INCOMING_EXTENDED_FEATURES:
2263         case L2CAP_STATE_WAIT_DISCONNECT:
2264         case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_INSUFFICIENT_SECURITY:
2265         case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE:
2266         case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT:
2267         case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST:
2268         case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE:
2269         case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_DECLINE:
2270         case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_ACCEPT:
2271         case L2CAP_STATE_INVALID:
2272         case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE:
2273             return 0;
2274 
2275         default:
2276             // get a "warning" about new states
2277             btstack_assert(false);
2278             return 0;
2279     }
2280 }
2281 #endif
2282 
2283 #ifdef ENABLE_CLASSIC
2284 static void l2cap_handle_hci_disconnect_event(l2cap_channel_t * channel){
2285     if (l2cap_send_open_failed_on_hci_disconnect(channel)){
2286         l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_BASEBAND_DISCONNECT);
2287     } else {
2288         l2cap_handle_channel_closed(channel);
2289     }
2290     l2cap_free_channel_entry(channel);
2291 }
2292 #endif
2293 
2294 #ifdef ENABLE_LE_DATA_CHANNELS
2295 static void l2cap_handle_hci_le_disconnect_event(l2cap_channel_t * channel){
2296     if (l2cap_send_open_failed_on_hci_disconnect(channel)){
2297         l2cap_emit_le_channel_opened(channel, L2CAP_CONNECTION_BASEBAND_DISCONNECT);
2298     } else {
2299         l2cap_emit_le_channel_closed(channel);
2300     }
2301     l2cap_free_channel_entry(channel);
2302 }
2303 #endif
2304 
2305 #ifdef ENABLE_CLASSIC
2306 static void l2cap_check_classic_timeout(hci_con_handle_t handle){
2307     if (gap_get_connection_type(handle) != GAP_CONNECTION_ACL) {
2308         return;
2309     }
2310     if (hci_authentication_active_for_handle(handle)) {
2311         return;
2312     }
2313     bool hci_con_used = false;
2314     btstack_linked_list_iterator_t it;
2315     btstack_linked_list_iterator_init(&it, &l2cap_channels);
2316     while (btstack_linked_list_iterator_has_next(&it)){
2317         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2318         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2319         if (channel->con_handle != handle) continue;
2320         hci_con_used = true;
2321         break;
2322     }
2323     if (hci_con_used) {
2324         return;
2325     }
2326     if (!hci_can_send_command_packet_now()) {
2327         return;
2328     }
2329     hci_send_cmd(&hci_disconnect, handle, 0x13); // remote closed connection
2330 }
2331 static void l2cap_handle_features_complete(hci_con_handle_t handle){
2332     hci_connection_t * hci_connection = hci_connection_for_handle(handle);
2333     if (hci_connection == NULL) {
2334         return;
2335     };
2336     if ((hci_connection->bonding_flags & BONDING_RECEIVED_REMOTE_FEATURES) == 0) {
2337         return;
2338     }
2339     btstack_linked_list_iterator_t it;
2340     btstack_linked_list_iterator_init(&it, &l2cap_channels);
2341     while (btstack_linked_list_iterator_has_next(&it)){
2342         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2343         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2344         if (channel->con_handle != handle) continue;
2345         log_info("remote supported features, channel %p, cid %04x - state %u", channel, channel->local_cid, channel->state);
2346         l2cap_handle_remote_supported_features_received(channel);
2347     }
2348 }
2349 
2350 static void l2cap_handle_security_level_incoming_sufficient(l2cap_channel_t * channel){
2351 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2352     // we need to know if ERTM is supported before sending a config response
2353     hci_connection_t * connection = hci_connection_for_handle(channel->con_handle);
2354     if (connection->l2cap_state.information_state != L2CAP_INFORMATION_STATE_DONE){
2355         connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST;
2356         channel->state = L2CAP_STATE_WAIT_INCOMING_EXTENDED_FEATURES;
2357         return;
2358     }
2359 #endif
2360     channel->state = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT;
2361     l2cap_emit_incoming_connection(channel);
2362 }
2363 
2364 static void l2cap_handle_security_level(hci_con_handle_t handle, gap_security_level_t actual_level){
2365     log_info("security level update for handle 0x%04x", handle);
2366     btstack_linked_list_iterator_t it;
2367     btstack_linked_list_iterator_init(&it, &l2cap_channels);
2368     while (btstack_linked_list_iterator_has_next(&it)){
2369         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2370         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2371         if (channel->con_handle != handle) continue;
2372 
2373         gap_security_level_t required_level = channel->required_security_level;
2374 
2375         log_info("channel %p, cid %04x - state %u: actual %u >= required %u?", channel, channel->local_cid, channel->state, actual_level, required_level);
2376 
2377         switch (channel->state){
2378             case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE:
2379                 if (actual_level >= required_level){
2380                     l2cap_handle_security_level_incoming_sufficient(channel);
2381                 } else {
2382                     channel->reason = 0x0003; // security block
2383                     channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE;
2384                 }
2385                 break;
2386 
2387             case L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE:
2388                 if (actual_level >= required_level){
2389                     l2cap_ready_to_connect(channel);
2390                 } else {
2391                     // security level insufficient, report error and free channel
2392                     l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY);
2393                     btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t  *) channel);
2394                     l2cap_free_channel_entry(channel);
2395                 }
2396                 break;
2397 
2398             default:
2399                 break;
2400         }
2401     }
2402 }
2403 #endif
2404 
2405 #ifdef L2CAP_USES_CHANNELS
2406 static void l2cap_handle_disconnection_complete(hci_con_handle_t handle){
2407     // collect channels to close
2408     btstack_linked_list_t channels_to_close = NULL;
2409     btstack_linked_list_iterator_t it;
2410     btstack_linked_list_iterator_init(&it, &l2cap_channels);
2411     while (btstack_linked_list_iterator_has_next(&it)) {
2412         l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2413         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2414         if (channel->con_handle != handle) continue;
2415         btstack_linked_list_iterator_remove(&it);
2416         btstack_linked_list_add(&channels_to_close, (btstack_linked_item_t *) channel);
2417     }
2418     // send l2cap open failed or closed events for all channels on this handle and free them
2419     btstack_linked_list_iterator_init(&it, &channels_to_close);
2420     while (btstack_linked_list_iterator_has_next(&it)) {
2421         l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2422         btstack_linked_list_iterator_remove(&it);
2423         switch(channel->channel_type){
2424 #ifdef ENABLE_CLASSIC
2425             case L2CAP_CHANNEL_TYPE_CLASSIC:
2426                 l2cap_handle_hci_disconnect_event(channel);
2427                 break;
2428 #endif
2429 #ifdef ENABLE_LE_DATA_CHANNELS
2430             case L2CAP_CHANNEL_TYPE_LE_DATA_CHANNEL:
2431                 l2cap_handle_hci_le_disconnect_event(channel);
2432                 break;
2433 #endif
2434             default:
2435                 break;
2436         }
2437     }
2438 }
2439 #endif
2440 
2441 static void l2cap_hci_event_handler(uint8_t packet_type, uint16_t cid, uint8_t *packet, uint16_t size){
2442 
2443     UNUSED(packet_type); // ok: registered with hci_event_callback_registration
2444     UNUSED(cid);         // ok: there is no channel
2445     UNUSED(size);        // ok: fixed format events read from HCI buffer
2446 
2447 #ifdef ENABLE_CLASSIC
2448     bd_addr_t address;
2449     gap_security_level_t security_level;
2450 #endif
2451 #ifdef L2CAP_USES_CHANNELS
2452     hci_con_handle_t handle;
2453 #endif
2454 
2455     switch(hci_event_packet_get_type(packet)){
2456 
2457         // Notify channel packet handler if they can send now
2458         case HCI_EVENT_TRANSPORT_PACKET_SENT:
2459         case HCI_EVENT_NUMBER_OF_COMPLETED_PACKETS:
2460         case BTSTACK_EVENT_NR_CONNECTIONS_CHANGED:
2461             l2cap_run();    // try sending signaling packets first
2462             l2cap_notify_channel_can_send();
2463             break;
2464 
2465         case HCI_EVENT_COMMAND_STATUS:
2466 #ifdef ENABLE_CLASSIC
2467             // check command status for create connection for errors
2468             if (HCI_EVENT_IS_COMMAND_STATUS(packet, hci_create_connection)){
2469                 // cache outgoing address and reset
2470                 (void)memcpy(address, l2cap_outgoing_classic_addr, 6);
2471                 memset(l2cap_outgoing_classic_addr, 0, 6);
2472                 // error => outgoing connection failed
2473                 uint8_t status = hci_event_command_status_get_status(packet);
2474                 if (status){
2475                     l2cap_handle_connection_failed_for_addr(address, status);
2476                 }
2477             }
2478 #endif
2479             l2cap_run();    // try sending signaling packets first
2480             break;
2481 
2482 #ifdef ENABLE_CLASSIC
2483         // handle connection complete events
2484         case HCI_EVENT_CONNECTION_COMPLETE:
2485             reverse_bd_addr(&packet[5], address);
2486             if (packet[2] == 0){
2487                 handle = little_endian_read_16(packet, 3);
2488                 l2cap_handle_connection_success_for_addr(address, handle);
2489             } else {
2490                 l2cap_handle_connection_failed_for_addr(address, packet[2]);
2491             }
2492             break;
2493 
2494         // handle successful create connection cancel command
2495         case HCI_EVENT_COMMAND_COMPLETE:
2496             if (HCI_EVENT_IS_COMMAND_COMPLETE(packet, hci_create_connection_cancel)) {
2497                 if (packet[5] == 0){
2498                     reverse_bd_addr(&packet[6], address);
2499                     // CONNECTION TERMINATED BY LOCAL HOST (0X16)
2500                     l2cap_handle_connection_failed_for_addr(address, 0x16);
2501                 }
2502             }
2503             l2cap_run();    // try sending signaling packets first
2504             break;
2505 #endif
2506 
2507 #ifdef L2CAP_USES_CHANNELS
2508         // handle disconnection complete events
2509         case HCI_EVENT_DISCONNECTION_COMPLETE:
2510             handle = little_endian_read_16(packet, 3);
2511             l2cap_handle_disconnection_complete(handle);
2512             break;
2513 #endif
2514 
2515         // HCI Connection Timeouts
2516 #ifdef ENABLE_CLASSIC
2517         case L2CAP_EVENT_TIMEOUT_CHECK:
2518             handle = little_endian_read_16(packet, 2);
2519             l2cap_check_classic_timeout(handle);
2520             break;
2521 
2522         case HCI_EVENT_READ_REMOTE_SUPPORTED_FEATURES_COMPLETE:
2523         case HCI_EVENT_READ_REMOTE_EXTENDED_FEATURES_COMPLETE:
2524             handle = little_endian_read_16(packet, 3);
2525             l2cap_handle_features_complete(handle);
2526             break;
2527 
2528         case GAP_EVENT_SECURITY_LEVEL:
2529             handle = little_endian_read_16(packet, 2);
2530             security_level = (gap_security_level_t) packet[4];
2531             l2cap_handle_security_level(handle, security_level);
2532             break;
2533 #endif
2534         default:
2535             break;
2536     }
2537 
2538     l2cap_run();
2539 }
2540 
2541 static void l2cap_register_signaling_response(hci_con_handle_t handle, uint8_t code, uint8_t sig_id, uint16_t cid, uint16_t data){
2542     // Vol 3, Part A, 4.3: "The DCID and SCID fields shall be ignored when the result field indi- cates the connection was refused."
2543     if (l2cap_signaling_responses_pending < NR_PENDING_SIGNALING_RESPONSES) {
2544         l2cap_signaling_responses[l2cap_signaling_responses_pending].handle = handle;
2545         l2cap_signaling_responses[l2cap_signaling_responses_pending].code = code;
2546         l2cap_signaling_responses[l2cap_signaling_responses_pending].sig_id = sig_id;
2547         l2cap_signaling_responses[l2cap_signaling_responses_pending].cid = cid;
2548         l2cap_signaling_responses[l2cap_signaling_responses_pending].data = data;
2549         l2cap_signaling_responses_pending++;
2550         l2cap_run();
2551     }
2552 }
2553 
2554 #ifdef ENABLE_CLASSIC
2555 static void l2cap_handle_disconnect_request(l2cap_channel_t *channel, uint16_t identifier){
2556     switch (channel->state){
2557         case L2CAP_STATE_CONFIG:
2558         case L2CAP_STATE_OPEN:
2559         case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST:
2560         case L2CAP_STATE_WAIT_DISCONNECT:
2561             break;
2562         default:
2563             // ignore in other states
2564             return;
2565     }
2566 
2567     channel->remote_sig_id = identifier;
2568     channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE;
2569     l2cap_run();
2570 }
2571 
2572 static void l2cap_handle_connection_request(hci_con_handle_t handle, uint8_t sig_id, uint16_t psm, uint16_t source_cid){
2573 
2574     // log_info("l2cap_handle_connection_request for handle %u, psm %u cid 0x%02x", handle, psm, source_cid);
2575     l2cap_service_t *service = l2cap_get_service(psm);
2576     if (!service) {
2577         // 0x0002 PSM not supported
2578         l2cap_register_signaling_response(handle, CONNECTION_REQUEST, sig_id, source_cid, 0x0002);
2579         return;
2580     }
2581 
2582     hci_connection_t * hci_connection = hci_connection_for_handle( handle );
2583     if (!hci_connection) {
2584         //
2585         log_error("no hci_connection for handle %u", handle);
2586         return;
2587     }
2588 
2589     // Core V5.2, Vol 3, Part C, 5.2.2.2 - Security Mode 4
2590     //   When a remote device attempts to access a service offered by a Bluetooth device that is in security mode 4
2591     //   and a sufficient link key exists and authentication has not been performed the local device shall authenticate
2592     //   the remote device and enable encryption after the channel establishment request is received but before a channel
2593     //   establishment confirmation (L2CAP_ConnectRsp with result code of 0x0000 or a higher-level channel establishment
2594     //   confirmation such as that of RFCOMM) is sent.
2595 
2596     //   If the remote device has indicated support for Secure Simple Pairing, a channel establishment request is
2597     //   received for a service other than SDP, and encryption has not yet been enabled, then the local device shall
2598     //   disconnect the ACL link with error code 0x05 - Authentication Failure.
2599 
2600     // => Disconnect if l2cap request received in mode 4 and ssp supported, non-sdp psm, not encrypted, no link key available
2601     if ((gap_get_security_mode() == GAP_SECURITY_MODE_4)
2602         && gap_ssp_supported_on_both_sides(handle)
2603         && (psm != PSM_SDP)
2604         && (gap_encryption_key_size(handle) == 0)
2605         && (gap_bonded(handle) == false)){
2606         hci_disconnect_security_block(handle);
2607         return;
2608     }
2609 
2610     // alloc structure
2611     gap_security_level_t required_level = service->required_security_level;
2612     if (gap_get_secure_connections_only_mode() && (required_level != LEVEL_0)){
2613         required_level = LEVEL_4;
2614     }
2615     l2cap_channel_t * channel = l2cap_create_channel_entry(service->packet_handler, L2CAP_CHANNEL_TYPE_CLASSIC, hci_connection->address, BD_ADDR_TYPE_ACL,
2616     psm, service->mtu, required_level);
2617     if (!channel){
2618         // 0x0004 No resources available
2619         l2cap_register_signaling_response(handle, CONNECTION_REQUEST, sig_id, source_cid, 0x0004);
2620         return;
2621     }
2622 
2623     channel->con_handle = handle;
2624     channel->remote_cid = source_cid;
2625     channel->remote_sig_id = sig_id;
2626 
2627     // limit local mtu to max acl packet length - l2cap header
2628     if (channel->local_mtu > l2cap_max_mtu()) {
2629         channel->local_mtu = l2cap_max_mtu();
2630     }
2631 
2632     // set initial state
2633     channel->state =      L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE;
2634 
2635     // add to connections list
2636     btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel);
2637 
2638     // assert security requirements
2639     if (channel->required_security_level <= gap_security_level(handle)){
2640         channel->state_var  = (L2CAP_CHANNEL_STATE_VAR) (L2CAP_CHANNEL_STATE_VAR_INCOMING);
2641         l2cap_handle_security_level_incoming_sufficient(channel);
2642     } else {
2643         channel->state_var  = (L2CAP_CHANNEL_STATE_VAR) (L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND | L2CAP_CHANNEL_STATE_VAR_INCOMING);
2644         gap_request_security_level(handle, channel->required_security_level);
2645     }
2646 }
2647 
2648 void l2cap_accept_connection(uint16_t local_cid){
2649     log_info("L2CAP_ACCEPT_CONNECTION local_cid 0x%x", local_cid);
2650     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
2651     if (!channel) {
2652         log_error("accept called but local_cid 0x%x not found", local_cid);
2653         return;
2654     }
2655 
2656 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2657     // configure L2CAP Basic mode
2658     channel->mode  = L2CAP_CHANNEL_MODE_BASIC;
2659 #endif
2660 
2661     channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT;
2662 
2663     // process
2664     l2cap_run();
2665 }
2666 
2667 void l2cap_decline_connection(uint16_t local_cid){
2668     log_info("decline local_cid 0x%x", local_cid);
2669     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid( local_cid);
2670     if (!channel) {
2671         log_error( "l2cap_decline_connection called but local_cid 0x%x not found", local_cid);
2672         return;
2673     }
2674     channel->state  = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE;
2675     channel->reason = 0x04; // no resources available
2676     l2cap_run();
2677 }
2678 
2679 // @pre command len is valid, see check in l2cap_signaling_handler_channel
2680 static void l2cap_signaling_handle_configure_request(l2cap_channel_t *channel, uint8_t *command){
2681 
2682 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2683     uint8_t use_fcs = 1;
2684 #endif
2685 
2686     channel->remote_sig_id = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET];
2687 
2688     uint16_t flags = little_endian_read_16(command, 6);
2689     if (flags & 1) {
2690         channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT);
2691     }
2692 
2693     // accept the other's configuration options
2694     uint16_t end_pos = 4 + little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
2695     uint16_t pos     = 8;
2696     while (pos < end_pos){
2697         uint8_t option_hint = command[pos] >> 7;
2698         uint8_t option_type = command[pos] & 0x7f;
2699         // log_info("l2cap cid %u, hint %u, type %u", channel->local_cid, option_hint, option_type);
2700         pos++;
2701         uint8_t length = command[pos++];
2702         // MTU { type(8): 1, len(8):2, MTU(16) }
2703         if ((option_type == L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT) && (length == 2)){
2704             channel->remote_mtu = little_endian_read_16(command, pos);
2705             log_info("Remote MTU %u", channel->remote_mtu);
2706             if (channel->remote_mtu > l2cap_max_mtu()){
2707                 log_info("Remote MTU %u larger than outgoing buffer, only using MTU = %u", channel->remote_mtu, l2cap_max_mtu());
2708                 channel->remote_mtu = l2cap_max_mtu();
2709             }
2710             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU);
2711         }
2712         // Flush timeout { type(8):2, len(8): 2, Flush Timeout(16)}
2713         if ((option_type == L2CAP_CONFIG_OPTION_TYPE_FLUSH_TIMEOUT) && (length == 2)){
2714             channel->flush_timeout = little_endian_read_16(command, pos);
2715             log_info("Flush timeout: %u ms", channel->flush_timeout);
2716         }
2717 
2718 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2719         // Retransmission and Flow Control Option
2720         if (option_type == L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL && length == 9){
2721             l2cap_channel_mode_t mode = (l2cap_channel_mode_t) command[pos];
2722             switch(channel->mode){
2723                 case L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION:
2724                     // Store remote config
2725                     channel->remote_tx_window_size = command[pos+1];
2726                     channel->remote_max_transmit   = command[pos+2];
2727                     channel->remote_retransmission_timeout_ms = little_endian_read_16(command, pos + 3);
2728                     channel->remote_monitor_timeout_ms = little_endian_read_16(command, pos + 5);
2729                     channel->remote_mps = little_endian_read_16(command, pos + 7);
2730                     log_info("FC&C config: tx window: %u, max transmit %u, retrans timeout %u, monitor timeout %u, mps %u",
2731                         channel->remote_tx_window_size,
2732                         channel->remote_max_transmit,
2733                         channel->remote_retransmission_timeout_ms,
2734                         channel->remote_monitor_timeout_ms,
2735                         channel->remote_mps);
2736                     // If ERTM mandatory, but remote doens't offer ERTM -> disconnect
2737                     if (channel->ertm_mandatory && mode != L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
2738                         channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2739                     } else {
2740                         channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM);
2741                     }
2742                     break;
2743                 case L2CAP_CHANNEL_MODE_BASIC:
2744                     switch (mode){
2745                         case L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION:
2746                             // remote asks for ERTM, but we want basic mode. disconnect if this happens a second time
2747                             if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_BASIC_FALLBACK_TRIED){
2748                                 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2749                             }
2750                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_BASIC_FALLBACK_TRIED);
2751                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_REJECTED);
2752                             break;
2753                         default: // case L2CAP_CHANNEL_MODE_BASIC:
2754                             // TODO store and evaluate configuration
2755                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM);
2756                             break;
2757                     }
2758                     break;
2759                 default:
2760                     break;
2761             }
2762         }
2763         if (option_type == L2CAP_CONFIG_OPTION_TYPE_FRAME_CHECK_SEQUENCE && length == 1){
2764             use_fcs = command[pos];
2765         }
2766 #endif
2767         // check for unknown options
2768         if ((option_hint == 0) && ((option_type < L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT) || (option_type > L2CAP_CONFIG_OPTION_TYPE_EXTENDED_WINDOW_SIZE))){
2769             log_info("l2cap cid %u, unknown option 0x%02x", channel->local_cid, option_type);
2770             channel->unknown_option = option_type;
2771             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_INVALID);
2772         }
2773         pos += length;
2774     }
2775 
2776 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2777         // "FCS" has precedence over "No FCS"
2778         uint8_t update = channel->fcs_option || use_fcs;
2779         log_info("local fcs: %u, remote fcs: %u -> %u", channel->fcs_option, use_fcs, update);
2780         channel->fcs_option = update;
2781         // If ERTM mandatory, but remote didn't send Retransmission and Flowcontrol options -> disconnect
2782         if (((channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM) == 0) & (channel->ertm_mandatory)){
2783             channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2784         }
2785 #endif
2786 }
2787 
2788 // @pre command len is valid, see check in l2cap_signaling_handler_channel
2789 static void l2cap_signaling_handle_configure_response(l2cap_channel_t *channel, uint8_t result, uint8_t *command){
2790     log_info("l2cap_signaling_handle_configure_response");
2791 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2792     uint16_t end_pos = 4 + little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
2793     uint16_t pos     = 10;
2794     while (pos < end_pos){
2795         uint8_t option_hint = command[pos] >> 7;
2796         uint8_t option_type = command[pos] & 0x7f;
2797         // log_info("l2cap cid %u, hint %u, type %u", channel->local_cid, option_hint, option_type);
2798         pos++;
2799         uint8_t length = command[pos++];
2800 
2801         // Retransmission and Flow Control Option
2802         if (option_type == L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL && length == 9){
2803             switch (channel->mode){
2804                 case L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION:
2805                     if (channel->ertm_mandatory){
2806                         // ??
2807                     } else {
2808                         // On 'Reject - Unacceptable Parameters' to our optional ERTM request, fall back to BASIC mode
2809                         if (result == L2CAP_CONF_RESULT_UNACCEPTABLE_PARAMETERS){
2810                             l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED);
2811                             channel->mode = L2CAP_CHANNEL_MODE_BASIC;
2812                         }
2813                     }
2814                     break;
2815                 case L2CAP_CHANNEL_MODE_BASIC:
2816                     if (result == L2CAP_CONF_RESULT_UNACCEPTABLE_PARAMETERS){
2817                         // On 'Reject - Unacceptable Parameters' to our Basic mode request, disconnect
2818                         channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2819                     }
2820                     break;
2821                 default:
2822                     break;
2823             }
2824         }
2825 
2826         // check for unknown options
2827         if (option_hint == 0 && (option_type < L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT || option_type > L2CAP_CONFIG_OPTION_TYPE_EXTENDED_WINDOW_SIZE)){
2828             log_info("l2cap cid %u, unknown option 0x%02x", channel->local_cid, option_type);
2829             channel->unknown_option = option_type;
2830             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_INVALID);
2831         }
2832 
2833         pos += length;
2834     }
2835 #else
2836     UNUSED(channel);  // ok: no code
2837     UNUSED(result);   // ok: no code
2838     UNUSED(command);  // ok: no code
2839 #endif
2840 }
2841 
2842 static int l2cap_channel_ready_for_open(l2cap_channel_t *channel){
2843     // log_info("l2cap_channel_ready_for_open 0x%02x", channel->state_var);
2844     if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_RSP) == 0) return 0;
2845     if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP) == 0) return 0;
2846     // addition check that fixes re-entrance issue causing l2cap event channel opened twice
2847     if (channel->state == L2CAP_STATE_OPEN) return 0;
2848     return 1;
2849 }
2850 
2851 
2852 // @pre command len is valid, see check in l2cap_signaling_handler_dispatch
2853 static void l2cap_signaling_handler_channel(l2cap_channel_t *channel, uint8_t *command){
2854 
2855     uint8_t  code       = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET];
2856     uint8_t  identifier = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET];
2857     uint16_t cmd_len    = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
2858     uint16_t result = 0;
2859 
2860     log_info("L2CAP signaling handler code %u, state %u", code, channel->state);
2861 
2862     // handle DISCONNECT REQUESTS seperately
2863     if (code == DISCONNECTION_REQUEST){
2864         l2cap_handle_disconnect_request(channel, identifier);
2865         return;
2866     }
2867 
2868     // @STATEMACHINE(l2cap)
2869     switch (channel->state) {
2870 
2871         case L2CAP_STATE_WAIT_CONNECT_RSP:
2872             switch (code){
2873                 case CONNECTION_RESPONSE:
2874                     if (cmd_len < 8){
2875                         // command imcomplete
2876                         l2cap_register_signaling_response(channel->con_handle, COMMAND_REJECT, identifier, 0, L2CAP_REJ_CMD_UNKNOWN);
2877                         break;
2878                     }
2879                     l2cap_stop_rtx(channel);
2880                     result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4);
2881                     switch (result) {
2882                         case 0:
2883                             // successful connection
2884                             channel->remote_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
2885                             channel->state = L2CAP_STATE_CONFIG;
2886                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ);
2887                             break;
2888                         case 1:
2889                             // connection pending. get some coffee, but start the ERTX
2890                             l2cap_start_ertx(channel);
2891                             break;
2892                         default:
2893                             // channel closed
2894                             channel->state = L2CAP_STATE_CLOSED;
2895                             // map l2cap connection response result to BTstack status enumeration
2896                             l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_SUCCESSFUL + result);
2897 
2898                             // drop link key if security block
2899                             if ((L2CAP_CONNECTION_RESPONSE_RESULT_SUCCESSFUL + result) == L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY){
2900                                 gap_drop_link_key_for_bd_addr(channel->address);
2901                             }
2902 
2903                             // discard channel
2904                             btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
2905                             l2cap_free_channel_entry(channel);
2906                             break;
2907                     }
2908                     break;
2909 
2910                 default:
2911                     //@TODO: implement other signaling packets
2912                     break;
2913             }
2914             break;
2915 
2916         case L2CAP_STATE_CONFIG:
2917             switch (code) {
2918                 case CONFIGURE_REQUEST:
2919                     if (cmd_len < 4){
2920                         // command incomplete
2921                         l2cap_register_signaling_response(channel->con_handle, COMMAND_REJECT, identifier, 0, L2CAP_REJ_CMD_UNKNOWN);
2922                         break;
2923                     }
2924                     channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP);
2925                     l2cap_signaling_handle_configure_request(channel, command);
2926                     if (!(channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT)){
2927                         // only done if continuation not set
2928                         channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_REQ);
2929                     }
2930                     break;
2931                 case CONFIGURE_RESPONSE:
2932                     if (cmd_len < 6){
2933                         // command incomplete
2934                         l2cap_register_signaling_response(channel->con_handle, COMMAND_REJECT, identifier, 0, L2CAP_REJ_CMD_UNKNOWN);
2935                         break;
2936                     }
2937                     result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4);
2938                     l2cap_stop_rtx(channel);
2939                     l2cap_signaling_handle_configure_response(channel, result, command);
2940                     switch (result){
2941                         case 0: // success
2942                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_RSP);
2943                             break;
2944                         case 4: // pending
2945                             l2cap_start_ertx(channel);
2946                             break;
2947                         default:
2948 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2949                             if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION && channel->ertm_mandatory){
2950                                 // remote does not offer ertm but it's required
2951                                 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2952                                 break;
2953                             }
2954 #endif
2955                             // retry on negative result
2956                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ);
2957                             break;
2958                     }
2959                     break;
2960                 default:
2961                     break;
2962             }
2963             if (l2cap_channel_ready_for_open(channel)){
2964 
2965 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2966                 // assert that packet can be stored in fragment buffers in ertm
2967                 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
2968                     uint16_t effective_mps = btstack_min(channel->remote_mps, channel->local_mps);
2969                     uint16_t usable_mtu = channel->num_tx_buffers == 1 ? effective_mps : channel->num_tx_buffers * effective_mps - 2;
2970                     if (usable_mtu < channel->remote_mtu){
2971                         log_info("Remote MTU %u > max storable ERTM packet, only using MTU = %u", channel->remote_mtu, usable_mtu);
2972                         channel->remote_mtu = usable_mtu;
2973                     }
2974                 }
2975 #endif
2976                 // for open:
2977                 channel->state = L2CAP_STATE_OPEN;
2978                 l2cap_emit_channel_opened(channel, 0);
2979             }
2980             break;
2981 
2982         case L2CAP_STATE_WAIT_DISCONNECT:
2983             switch (code) {
2984                 case DISCONNECTION_RESPONSE:
2985                     l2cap_finialize_channel_close(channel);
2986                     break;
2987                 default:
2988                     //@TODO: implement other signaling packets
2989                     break;
2990             }
2991             break;
2992 
2993         case L2CAP_STATE_CLOSED:
2994             // @TODO handle incoming requests
2995             break;
2996 
2997         case L2CAP_STATE_OPEN:
2998             //@TODO: implement other signaling packets, e.g. re-configure
2999             break;
3000         default:
3001             break;
3002     }
3003     // log_info("new state %u", channel->state);
3004 }
3005 
3006 
3007 // @pre command len is valid, see check in l2cap_acl_classic_handler
3008 static void l2cap_signaling_handler_dispatch(hci_con_handle_t handle, uint8_t * command){
3009 
3010     btstack_linked_list_iterator_t it;
3011 
3012     // get code, signalind identifier and command len
3013     uint8_t code     = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET];
3014     uint8_t sig_id   = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET];
3015     uint16_t cmd_len = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
3016 
3017     // not for a particular channel, and not CONNECTION_REQUEST, ECHO_[REQUEST|RESPONSE], INFORMATION_RESPONSE
3018     if ((code < 1) || (code == ECHO_RESPONSE) || (code > INFORMATION_RESPONSE)){
3019         l2cap_register_signaling_response(handle, COMMAND_REJECT, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN);
3020         return;
3021     }
3022 
3023     // general commands without an assigned channel
3024     switch(code) {
3025 
3026         case CONNECTION_REQUEST:
3027             if (cmd_len == 4){
3028                 uint16_t psm =        little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
3029                 uint16_t source_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2);
3030                 l2cap_handle_connection_request(handle, sig_id, psm, source_cid);
3031             } else {
3032                 l2cap_register_signaling_response(handle, COMMAND_REJECT, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN);
3033             }
3034             return;
3035 
3036         case ECHO_REQUEST:
3037             l2cap_register_signaling_response(handle, code, sig_id, 0, 0);
3038             return;
3039 
3040         case INFORMATION_REQUEST:
3041             if (cmd_len == 2) {
3042                 uint16_t info_type = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
3043                 l2cap_register_signaling_response(handle, code, sig_id, 0, info_type);
3044             } else {
3045                 l2cap_register_signaling_response(handle, COMMAND_REJECT, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN);
3046             }
3047             return;
3048 
3049 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
3050         case INFORMATION_RESPONSE: {
3051             hci_connection_t * connection = hci_connection_for_handle(handle);
3052             if (!connection) return;
3053             if (connection->l2cap_state.information_state != L2CAP_INFORMATION_STATE_W4_EXTENDED_FEATURE_RESPONSE) return;
3054 
3055             // get extended features from response if valid
3056             connection->l2cap_state.extended_feature_mask = 0;
3057             if (cmd_len >= 6) {
3058                 uint16_t info_type = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
3059                 uint16_t result    = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2);
3060                 if (result == 0 && info_type == L2CAP_INFO_TYPE_EXTENDED_FEATURES_SUPPORTED) {
3061                     connection->l2cap_state.extended_feature_mask = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4);
3062                 }
3063             }
3064             connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_DONE;
3065             log_info("extended features mask 0x%02x", connection->l2cap_state.extended_feature_mask);
3066 
3067             // trigger connection request
3068             btstack_linked_list_iterator_init(&it, &l2cap_channels);
3069             while (btstack_linked_list_iterator_has_next(&it)){
3070                 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
3071                 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
3072                 if (channel->con_handle != handle) continue;
3073 
3074                 // incoming connection: ask user for channel configuration, esp. if ertm will be mandatory
3075                 if (channel->state == L2CAP_STATE_WAIT_INCOMING_EXTENDED_FEATURES){
3076                     channel->state = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT;
3077                     l2cap_emit_incoming_connection(channel);
3078                     continue;
3079                 }
3080 
3081                 // outgoing connection
3082                 if (channel->state == L2CAP_STATE_WAIT_OUTGOING_EXTENDED_FEATURES){
3083 
3084                     // if ERTM was requested, but is not listed in extended feature mask:
3085                     if ((channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) && ((connection->l2cap_state.extended_feature_mask & 0x08) == 0)){
3086 
3087                         if (channel->ertm_mandatory){
3088                             // bail if ERTM is mandatory
3089                             channel->state = L2CAP_STATE_CLOSED;
3090                             // map l2cap connection response result to BTstack status enumeration
3091                             l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_ERTM_NOT_SUPPORTED);
3092                             // discard channel
3093                             btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
3094                             l2cap_free_channel_entry(channel);
3095                             continue;
3096 
3097                         } else {
3098                             // fallback to Basic mode
3099                             l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED);
3100                             channel->mode = L2CAP_CHANNEL_MODE_BASIC;
3101                         }
3102                     }
3103 
3104                     // respond to connection request
3105                     channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST;
3106                     continue;
3107                 }
3108             }
3109             return;
3110         }
3111 #endif
3112 
3113         default:
3114             break;
3115     }
3116 
3117     // Get potential destination CID
3118     uint16_t dest_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
3119 
3120     // Find channel for this sig_id and connection handle
3121     btstack_linked_list_iterator_init(&it, &l2cap_channels);
3122     while (btstack_linked_list_iterator_has_next(&it)){
3123         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
3124         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
3125         if (channel->con_handle != handle) continue;
3126         if (code & 1) {
3127             // match odd commands (responses) by previous signaling identifier
3128             if (channel->local_sig_id == sig_id) {
3129                 l2cap_signaling_handler_channel(channel, command);
3130                 break;
3131             }
3132         } else {
3133             // match even commands (requests) by local channel id
3134             if (channel->local_cid == dest_cid) {
3135                 l2cap_signaling_handler_channel(channel, command);
3136                 break;
3137             }
3138         }
3139     }
3140 }
3141 #endif
3142 
3143 #ifdef ENABLE_BLE
3144 
3145 static void l2cap_emit_connection_parameter_update_response(hci_con_handle_t con_handle, uint16_t result){
3146     uint8_t event[6];
3147     event[0] = L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_RESPONSE;
3148     event[1] = 4;
3149     little_endian_store_16(event, 2, con_handle);
3150     little_endian_store_16(event, 4, result);
3151     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
3152     if (!l2cap_event_packet_handler) return;
3153     (*l2cap_event_packet_handler)(HCI_EVENT_PACKET, 0, event, sizeof(event));
3154 }
3155 
3156 // @returns valid
3157 static int l2cap_le_signaling_handler_dispatch(hci_con_handle_t handle, uint8_t * command, uint8_t sig_id){
3158     hci_connection_t * connection;
3159     uint16_t result;
3160     uint8_t  event[12];
3161 
3162 #ifdef ENABLE_LE_DATA_CHANNELS
3163     btstack_linked_list_iterator_t it;
3164     l2cap_channel_t * channel;
3165     uint16_t local_cid;
3166     uint16_t le_psm;
3167     uint16_t new_credits;
3168     uint16_t credits_before;
3169     l2cap_service_t * service;
3170     uint16_t source_cid;
3171 #endif
3172 
3173     uint8_t code   = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET];
3174     uint16_t len   = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
3175     log_info("le dispatch: command 0x%02x, sig id %u, len %u", code, sig_id, len);
3176 
3177     switch (code){
3178 
3179         case CONNECTION_PARAMETER_UPDATE_REQUEST:
3180             // check size
3181             if (len < 8u) return 0u;
3182             connection = hci_connection_for_handle(handle);
3183             if (connection != NULL){
3184                 if (connection->role != HCI_ROLE_MASTER){
3185                     // reject command without notifying upper layer when not in master role
3186                     return 0;
3187                 }
3188                 le_connection_parameter_range_t existing_range;
3189                 gap_get_connection_parameter_range(&existing_range);
3190                 uint16_t le_conn_interval_min   = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
3191                 uint16_t le_conn_interval_max   = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2);
3192                 uint16_t le_conn_latency        = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4);
3193                 uint16_t le_supervision_timeout = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET+6);
3194 
3195                 int update_parameter = gap_connection_parameter_range_included(&existing_range, le_conn_interval_min, le_conn_interval_max, le_conn_latency, le_supervision_timeout);
3196                 if (update_parameter){
3197                     connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_SEND_RESPONSE;
3198                     connection->le_conn_interval_min = le_conn_interval_min;
3199                     connection->le_conn_interval_max = le_conn_interval_max;
3200                     connection->le_conn_latency = le_conn_latency;
3201                     connection->le_supervision_timeout = le_supervision_timeout;
3202                 } else {
3203                     connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_DENY;
3204                 }
3205                 connection->le_con_param_update_identifier = sig_id;
3206             }
3207 
3208             if (!l2cap_event_packet_handler) break;
3209 
3210             event[0] = L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_REQUEST;
3211             event[1] = 8;
3212             little_endian_store_16(event, 2, handle);
3213             (void)memcpy(&event[4], &command[4], 8);
3214             hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
3215             (*l2cap_event_packet_handler)( HCI_EVENT_PACKET, 0, event, sizeof(event));
3216             break;
3217 
3218         case CONNECTION_PARAMETER_UPDATE_RESPONSE:
3219             // check size
3220             if (len < 2u) return 0u;
3221             result = little_endian_read_16(command, 4);
3222             l2cap_emit_connection_parameter_update_response(handle, result);
3223             break;
3224 
3225 #ifdef ENABLE_LE_DATA_CHANNELS
3226 
3227         case COMMAND_REJECT:
3228             // Find channel for this sig_id and connection handle
3229             channel = NULL;
3230             btstack_linked_list_iterator_init(&it, &l2cap_channels);
3231             while (btstack_linked_list_iterator_has_next(&it)){
3232                 l2cap_channel_t * a_channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
3233                 if (!l2cap_is_dynamic_channel_type(a_channel->channel_type)) continue;
3234                 if (a_channel->con_handle   != handle) continue;
3235                 if (a_channel->local_sig_id != sig_id) continue;
3236                 channel = a_channel;
3237                 break;
3238             }
3239             if (!channel) break;
3240 
3241             // if received while waiting for le connection response, assume legacy device
3242             if (channel->state == L2CAP_STATE_WAIT_LE_CONNECTION_RESPONSE){
3243                 channel->state = L2CAP_STATE_CLOSED;
3244                 // no official value for this, use: Connection refused – LE_PSM not supported - 0x0002
3245                 l2cap_emit_le_channel_opened(channel, 0x0002);
3246 
3247                 // discard channel
3248                 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
3249                 l2cap_free_channel_entry(channel);
3250                 break;
3251             }
3252             break;
3253 
3254         case LE_CREDIT_BASED_CONNECTION_REQUEST:
3255             // check size
3256             if (len < 10u) return 0u;
3257 
3258             // get hci connection, bail if not found (must not happen)
3259             connection = hci_connection_for_handle(handle);
3260             if (!connection) return 0;
3261 
3262             // check if service registered
3263             le_psm  = little_endian_read_16(command, 4);
3264             service = l2cap_le_get_service(le_psm);
3265             source_cid = little_endian_read_16(command, 6);
3266 
3267             if (service){
3268                 if (source_cid < 0x40u){
3269                     // 0x0009 Connection refused - Invalid Source CID
3270                     l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0009);
3271                     return 1;
3272                 }
3273 
3274                 // go through list of channels for this ACL connection and check if we get a match
3275                 btstack_linked_list_iterator_init(&it, &l2cap_channels);
3276                 while (btstack_linked_list_iterator_has_next(&it)){
3277                     l2cap_channel_t * a_channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
3278                     if (!l2cap_is_dynamic_channel_type(a_channel->channel_type)) continue;
3279                     if (a_channel->con_handle != handle) continue;
3280                     if (a_channel->remote_cid != source_cid) continue;
3281                     // 0x000a Connection refused - Source CID already allocated
3282                     l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x000a);
3283                     return 1;
3284                 }
3285 
3286                 // security: check encryption
3287                 if (service->required_security_level >= LEVEL_2){
3288                     if (gap_encryption_key_size(handle) == 0){
3289                         // 0x0008 Connection refused - insufficient encryption
3290                         l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0008);
3291                         return 1;
3292                     }
3293                     // anything less than 16 byte key size is insufficient
3294                     if (gap_encryption_key_size(handle) < 16){
3295                         // 0x0007 Connection refused – insufficient encryption key size
3296                         l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0007);
3297                         return 1;
3298                     }
3299                 }
3300 
3301                 // security: check authencation
3302                 if (service->required_security_level >= LEVEL_3){
3303                     if (!gap_authenticated(handle)){
3304                         // 0x0005 Connection refused – insufficient authentication
3305                         l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0005);
3306                         return 1;
3307                     }
3308                 }
3309 
3310                 // security: check authorization
3311                 if (service->required_security_level >= LEVEL_4){
3312                     if (gap_authorization_state(handle) != AUTHORIZATION_GRANTED){
3313                         // 0x0006 Connection refused – insufficient authorization
3314                         l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0006);
3315                         return 1;
3316                     }
3317                 }
3318 
3319                 // allocate channel
3320                 channel = l2cap_create_channel_entry(service->packet_handler, L2CAP_CHANNEL_TYPE_LE_DATA_CHANNEL, connection->address,
3321                     BD_ADDR_TYPE_LE_RANDOM, le_psm, service->mtu, service->required_security_level);
3322                 if (!channel){
3323                     // 0x0004 Connection refused – no resources available
3324                     l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0004);
3325                     return 1;
3326                 }
3327 
3328                 channel->con_handle = handle;
3329                 channel->remote_cid = source_cid;
3330                 channel->remote_sig_id = sig_id;
3331                 channel->remote_mtu = little_endian_read_16(command, 8);
3332                 channel->remote_mps = little_endian_read_16(command, 10);
3333                 channel->credits_outgoing = little_endian_read_16(command, 12);
3334 
3335                 // set initial state
3336                 channel->state      = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT;
3337                 channel->state_var |= L2CAP_CHANNEL_STATE_VAR_INCOMING;
3338 
3339                 // add to connections list
3340                 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel);
3341 
3342                 // post connection request event
3343                 l2cap_emit_le_incoming_connection(channel);
3344 
3345             } else {
3346                 // Connection refused – LE_PSM not supported
3347                 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0002);
3348             }
3349             break;
3350 
3351         case LE_CREDIT_BASED_CONNECTION_RESPONSE:
3352             // check size
3353             if (len < 10u) return 0u;
3354 
3355             // Find channel for this sig_id and connection handle
3356             channel = NULL;
3357             btstack_linked_list_iterator_init(&it, &l2cap_channels);
3358             while (btstack_linked_list_iterator_has_next(&it)){
3359                 l2cap_channel_t * a_channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
3360                 if (!l2cap_is_dynamic_channel_type(a_channel->channel_type)) continue;
3361                 if (a_channel->con_handle   != handle) continue;
3362                 if (a_channel->local_sig_id != sig_id) continue;
3363                 channel = a_channel;
3364                 break;
3365             }
3366             if (!channel) break;
3367 
3368             // cid + 0
3369             result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+8);
3370             if (result){
3371                 channel->state = L2CAP_STATE_CLOSED;
3372                 // map l2cap connection response result to BTstack status enumeration
3373                 l2cap_emit_le_channel_opened(channel, result);
3374 
3375                 // discard channel
3376                 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
3377                 l2cap_free_channel_entry(channel);
3378                 break;
3379             }
3380 
3381             // success
3382             channel->remote_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0);
3383             channel->remote_mtu = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2);
3384             channel->remote_mps = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 4);
3385             channel->credits_outgoing = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 6);
3386             channel->state = L2CAP_STATE_OPEN;
3387             l2cap_emit_le_channel_opened(channel, result);
3388             break;
3389 
3390         case LE_FLOW_CONTROL_CREDIT:
3391             // check size
3392             if (len < 4u) return 0u;
3393 
3394             // find channel
3395             local_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0);
3396             channel = l2cap_get_channel_for_local_cid_and_handle(local_cid, handle);
3397             if (!channel) {
3398                 log_error("credit: no channel for cid 0x%02x", local_cid);
3399                 break;
3400             }
3401             new_credits = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2);
3402             credits_before = channel->credits_outgoing;
3403             channel->credits_outgoing += new_credits;
3404             // check for credit overrun
3405             if (credits_before > channel->credits_outgoing){
3406                 log_error("credit: new credits caused overrrun for cid 0x%02x, disconnecting", local_cid);
3407                 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
3408                 break;
3409             }
3410             log_info("credit: %u credits for 0x%02x, now %u", new_credits, local_cid, channel->credits_outgoing);
3411             break;
3412 
3413         case DISCONNECTION_REQUEST:
3414 
3415             // check size
3416             if (len < 4u) return 0u;
3417 
3418             // find channel
3419             local_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0);
3420             channel = l2cap_get_channel_for_local_cid_and_handle(local_cid, handle);
3421             if (!channel) {
3422                 log_error("credit: no channel for cid 0x%02x", local_cid);
3423                 break;
3424             }
3425             channel->remote_sig_id = sig_id;
3426             channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE;
3427             break;
3428 
3429 #endif
3430 
3431         case DISCONNECTION_RESPONSE:
3432             break;
3433 
3434         default:
3435             // command unknown -> reject command
3436             return 0;
3437     }
3438     return 1;
3439 }
3440 #endif
3441 
3442 #ifdef ENABLE_CLASSIC
3443 static void l2cap_acl_classic_handler_for_channel(l2cap_channel_t * l2cap_channel, uint8_t * packet, uint16_t size){
3444 
3445     // forward data only in OPEN state
3446     if (l2cap_channel->state != L2CAP_STATE_OPEN) return;
3447 
3448 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
3449     if (l2cap_channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
3450 
3451         int fcs_size = l2cap_channel->fcs_option ? 2 : 0;
3452 
3453         // assert control + FCS fields are inside
3454         if (size < COMPLETE_L2CAP_HEADER+2+fcs_size) return;
3455 
3456         if (l2cap_channel->fcs_option){
3457             // verify FCS (required if one side requested it)
3458             uint16_t fcs_calculated = crc16_calc(&packet[4], size - (4+2));
3459             uint16_t fcs_packet     = little_endian_read_16(packet, size-2);
3460 
3461 #ifdef L2CAP_ERTM_SIMULATE_FCS_ERROR_INTERVAL
3462             // simulate fcs error
3463                         static int counter = 0;
3464                         if (++counter == L2CAP_ERTM_SIMULATE_FCS_ERROR_INTERVAL) {
3465                             log_info("Simulate fcs error");
3466                             fcs_calculated++;
3467                             counter = 0;
3468                         }
3469 #endif
3470 
3471             if (fcs_calculated == fcs_packet){
3472                 log_info("Packet FCS 0x%04x verified", fcs_packet);
3473             } else {
3474                 log_error("FCS mismatch! Packet 0x%04x, calculated 0x%04x", fcs_packet, fcs_calculated);
3475                 // ERTM State Machine in Bluetooth Spec does not handle 'I-Frame with invalid FCS'
3476                 return;
3477             }
3478         }
3479 
3480         // switch on packet type
3481         uint16_t control = little_endian_read_16(packet, COMPLETE_L2CAP_HEADER);
3482         uint8_t  req_seq = (control >> 8) & 0x3f;
3483         int final = (control >> 7) & 0x01;
3484         if (control & 1){
3485             // S-Frame
3486             int poll  = (control >> 4) & 0x01;
3487             l2cap_supervisory_function_t s = (l2cap_supervisory_function_t) ((control >> 2) & 0x03);
3488             log_info("Control: 0x%04x => Supervisory function %u, ReqSeq %02u", control, (int) s, req_seq);
3489             l2cap_ertm_tx_packet_state_t * tx_state;
3490             switch (s){
3491                 case L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY:
3492                     log_info("L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY");
3493                     l2cap_ertm_process_req_seq(l2cap_channel, req_seq);
3494                     if (poll && final){
3495                         // S-frames shall not be transmitted with both the F-bit and the P-bit set to 1 at the same time.
3496                         log_error("P=F=1 in S-Frame");
3497                         break;
3498                     }
3499                     if (poll){
3500                         // check if we did request selective retransmission before <==> we have stored SDU segments
3501                         int i;
3502                         int num_stored_out_of_order_packets = 0;
3503                         for (i=0;i<l2cap_channel->num_rx_buffers;i++){
3504                             int index = l2cap_channel->rx_store_index + i;
3505                             if (index >= l2cap_channel->num_rx_buffers){
3506                                 index -= l2cap_channel->num_rx_buffers;
3507                             }
3508                             l2cap_ertm_rx_packet_state_t * rx_state = &l2cap_channel->rx_packets_state[index];
3509                             if (!rx_state->valid) continue;
3510                             num_stored_out_of_order_packets++;
3511                         }
3512                         if (num_stored_out_of_order_packets){
3513                             l2cap_channel->send_supervisor_frame_selective_reject = 1;
3514                         } else {
3515                             l2cap_channel->send_supervisor_frame_receiver_ready   = 1;
3516                         }
3517                         l2cap_channel->set_final_bit_after_packet_with_poll_bit_set = 1;
3518                     }
3519                     if (final){
3520                         // Stop-MonitorTimer
3521                         l2cap_ertm_stop_monitor_timer(l2cap_channel);
3522                         // If UnackedFrames > 0 then Start-RetransTimer
3523                         if (l2cap_channel->unacked_frames){
3524                             l2cap_ertm_start_retransmission_timer(l2cap_channel);
3525                         }
3526                         // final bit set <- response to RR with poll bit set. All not acknowledged packets need to be retransmitted
3527                         l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel);
3528                     }
3529                     break;
3530                 case L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT:
3531                     log_info("L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT");
3532                     l2cap_ertm_process_req_seq(l2cap_channel, req_seq);
3533                     // restart transmittion from last unacknowledted packet (earlier packets already freed in l2cap_ertm_process_req_seq)
3534                     l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel);
3535                     break;
3536                 case L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY:
3537                     log_error("L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY");
3538                     break;
3539                 case L2CAP_SUPERVISORY_FUNCTION_SREJ_SELECTIVE_REJECT:
3540                     log_info("L2CAP_SUPERVISORY_FUNCTION_SREJ_SELECTIVE_REJECT");
3541                     if (poll){
3542                         l2cap_ertm_process_req_seq(l2cap_channel, req_seq);
3543                     }
3544                     // find requested i-frame
3545                     tx_state = l2cap_ertm_get_tx_state(l2cap_channel, req_seq);
3546                     if (tx_state){
3547                         log_info("Retransmission for tx_seq %u requested", req_seq);
3548                         l2cap_channel->set_final_bit_after_packet_with_poll_bit_set = poll;
3549                         tx_state->retransmission_requested = 1;
3550                         l2cap_channel->srej_active = 1;
3551                     }
3552                     break;
3553                 default:
3554                     break;
3555             }
3556         } else {
3557             // I-Frame
3558             // get control
3559             l2cap_segmentation_and_reassembly_t sar = (l2cap_segmentation_and_reassembly_t) (control >> 14);
3560             uint8_t tx_seq = (control >> 1) & 0x3f;
3561             log_info("Control: 0x%04x => SAR %u, ReqSeq %02u, R?, TxSeq %02u", control, (int) sar, req_seq, tx_seq);
3562             log_info("SAR: pos %u", l2cap_channel->reassembly_pos);
3563             log_info("State: expected_tx_seq %02u, req_seq %02u", l2cap_channel->expected_tx_seq, l2cap_channel->req_seq);
3564             l2cap_ertm_process_req_seq(l2cap_channel, req_seq);
3565             if (final){
3566                 // final bit set <- response to RR with poll bit set. All not acknowledged packets need to be retransmitted
3567                 l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel);
3568             }
3569 
3570             // get SDU
3571             const uint8_t * payload_data = &packet[COMPLETE_L2CAP_HEADER+2];
3572             uint16_t        payload_len  = size-(COMPLETE_L2CAP_HEADER+2+fcs_size);
3573 
3574             // assert SDU size is smaller or equal to our buffers
3575             uint16_t max_payload_size = 0;
3576             switch (sar){
3577                 case L2CAP_SEGMENTATION_AND_REASSEMBLY_UNSEGMENTED_L2CAP_SDU:
3578                 case L2CAP_SEGMENTATION_AND_REASSEMBLY_START_OF_L2CAP_SDU:
3579                     // SDU Length + MPS
3580                     max_payload_size = l2cap_channel->local_mps + 2;
3581                     break;
3582                 case L2CAP_SEGMENTATION_AND_REASSEMBLY_CONTINUATION_OF_L2CAP_SDU:
3583                 case L2CAP_SEGMENTATION_AND_REASSEMBLY_END_OF_L2CAP_SDU:
3584                     max_payload_size = l2cap_channel->local_mps;
3585                     break;
3586                 default:
3587                     btstack_assert(false);
3588                     break;
3589             }
3590             if (payload_len > max_payload_size){
3591                 log_info("payload len %u > max payload %u -> drop packet", payload_len, max_payload_size);
3592                 return;
3593             }
3594 
3595             // check ordering
3596             if (l2cap_channel->expected_tx_seq == tx_seq){
3597                 log_info("Received expected frame with TxSeq == ExpectedTxSeq == %02u", tx_seq);
3598                 l2cap_channel->expected_tx_seq = l2cap_next_ertm_seq_nr(l2cap_channel->expected_tx_seq);
3599                 l2cap_channel->req_seq         = l2cap_channel->expected_tx_seq;
3600 
3601                 // process SDU
3602                 l2cap_ertm_handle_in_sequence_sdu(l2cap_channel, sar, payload_data, payload_len);
3603 
3604                 // process stored segments
3605                 while (true){
3606                     int index = l2cap_channel->rx_store_index;
3607                     l2cap_ertm_rx_packet_state_t * rx_state = &l2cap_channel->rx_packets_state[index];
3608                     if (!rx_state->valid) break;
3609 
3610                     log_info("Processing stored frame with TxSeq == ExpectedTxSeq == %02u", l2cap_channel->expected_tx_seq);
3611                     l2cap_channel->expected_tx_seq = l2cap_next_ertm_seq_nr(l2cap_channel->expected_tx_seq);
3612                     l2cap_channel->req_seq         = l2cap_channel->expected_tx_seq;
3613 
3614                     rx_state->valid = 0;
3615                     l2cap_ertm_handle_in_sequence_sdu(l2cap_channel, rx_state->sar, &l2cap_channel->rx_packets_data[index], rx_state->len);
3616 
3617                     // update rx store index
3618                     index++;
3619                     if (index >= l2cap_channel->num_rx_buffers){
3620                         index = 0;
3621                     }
3622                     l2cap_channel->rx_store_index = index;
3623                 }
3624 
3625                 //
3626                 l2cap_channel->send_supervisor_frame_receiver_ready = 1;
3627 
3628             } else {
3629                 int delta = (tx_seq - l2cap_channel->expected_tx_seq) & 0x3f;
3630                 if (delta < 2){
3631                     // store segment
3632                     l2cap_ertm_handle_out_of_sequence_sdu(l2cap_channel, sar, delta, payload_data, payload_len);
3633 
3634                     log_info("Received unexpected frame TxSeq %u but expected %u -> send S-SREJ", tx_seq, l2cap_channel->expected_tx_seq);
3635                     l2cap_channel->send_supervisor_frame_selective_reject = 1;
3636                 } else {
3637                     log_info("Received unexpected frame TxSeq %u but expected %u -> send S-REJ", tx_seq, l2cap_channel->expected_tx_seq);
3638                     l2cap_channel->send_supervisor_frame_reject = 1;
3639                 }
3640             }
3641         }
3642         return;
3643     }
3644 #endif
3645 
3646     // check size
3647     uint16_t payload_size = size - COMPLETE_L2CAP_HEADER;
3648     if (l2cap_channel->local_mtu < payload_size) return;
3649 
3650     l2cap_dispatch_to_channel(l2cap_channel, L2CAP_DATA_PACKET, &packet[COMPLETE_L2CAP_HEADER], payload_size);
3651 }
3652 #endif
3653 
3654 static void l2cap_acl_classic_handler(hci_con_handle_t handle, uint8_t *packet, uint16_t size){
3655 #ifdef ENABLE_CLASSIC
3656     l2cap_channel_t * l2cap_channel;
3657     l2cap_fixed_channel_t * l2cap_fixed_channel;
3658 
3659     uint16_t channel_id = READ_L2CAP_CHANNEL_ID(packet);
3660     uint8_t  broadcast_flag = READ_ACL_FLAGS(packet) >> 2;
3661     switch (channel_id) {
3662 
3663         case L2CAP_CID_SIGNALING: {
3664             if (broadcast_flag != 0) break;
3665             uint32_t command_offset = 8;
3666             while ((command_offset + L2CAP_SIGNALING_COMMAND_DATA_OFFSET) < size) {
3667                 // assert signaling command is fully inside packet
3668                 uint16_t data_len = little_endian_read_16(packet, command_offset + L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
3669                 uint32_t next_command_offset = command_offset + L2CAP_SIGNALING_COMMAND_DATA_OFFSET + data_len;
3670                 if (next_command_offset > size){
3671                     log_error("l2cap signaling command len invalid -> drop");
3672                     break;
3673                 }
3674                 // handle signaling command
3675                 l2cap_signaling_handler_dispatch(handle, &packet[command_offset]);
3676                 // go to next command
3677                 command_offset = next_command_offset;
3678             }
3679             break;
3680         }
3681         case L2CAP_CID_CONNECTIONLESS_CHANNEL:
3682             if (broadcast_flag == 0) break;
3683             l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_CONNECTIONLESS_CHANNEL);
3684             if (!l2cap_fixed_channel) break;
3685             if (!l2cap_fixed_channel->packet_handler) break;
3686             (*l2cap_fixed_channel->packet_handler)(UCD_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER);
3687             break;
3688 
3689         default:
3690             if (broadcast_flag != 0) break;
3691             // Find channel for this channel_id and connection handle
3692             l2cap_channel = l2cap_get_channel_for_local_cid_and_handle(channel_id, handle);
3693             if (l2cap_channel != NULL){
3694                 l2cap_acl_classic_handler_for_channel(l2cap_channel, packet, size);
3695             }
3696             break;
3697     }
3698 #else
3699     UNUSED(handle); // ok: no code
3700     UNUSED(packet); // ok: no code
3701     UNUSED(size);   // ok: no code
3702 #endif
3703 }
3704 
3705 static void l2cap_acl_le_handler(hci_con_handle_t handle, uint8_t *packet, uint16_t size){
3706 #ifdef ENABLE_BLE
3707 
3708     l2cap_fixed_channel_t * l2cap_fixed_channel;
3709 
3710 #ifdef ENABLE_LE_DATA_CHANNELS
3711     l2cap_channel_t * l2cap_channel;
3712 #endif
3713     uint16_t channel_id = READ_L2CAP_CHANNEL_ID(packet);
3714     switch (channel_id) {
3715 
3716         case L2CAP_CID_SIGNALING_LE: {
3717             uint16_t sig_id = packet[COMPLETE_L2CAP_HEADER + 1];
3718             uint16_t len = little_endian_read_16(packet, COMPLETE_L2CAP_HEADER + 2);
3719             if ((COMPLETE_L2CAP_HEADER + 4u + len) > size) break;
3720             int      valid  = l2cap_le_signaling_handler_dispatch(handle, &packet[COMPLETE_L2CAP_HEADER], sig_id);
3721             if (!valid){
3722                 l2cap_register_signaling_response(handle, COMMAND_REJECT_LE, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN);
3723             }
3724             break;
3725         }
3726 
3727         case L2CAP_CID_ATTRIBUTE_PROTOCOL:
3728             l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_ATTRIBUTE_PROTOCOL);
3729             if (!l2cap_fixed_channel) break;
3730             if (!l2cap_fixed_channel->packet_handler) break;
3731             (*l2cap_fixed_channel->packet_handler)(ATT_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER);
3732             break;
3733 
3734         case L2CAP_CID_SECURITY_MANAGER_PROTOCOL:
3735             l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_SECURITY_MANAGER_PROTOCOL);
3736             if (!l2cap_fixed_channel) break;
3737             if (!l2cap_fixed_channel->packet_handler) break;
3738             (*l2cap_fixed_channel->packet_handler)(SM_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER);
3739             break;
3740 
3741         default:
3742 
3743 #ifdef ENABLE_LE_DATA_CHANNELS
3744             l2cap_channel = l2cap_get_channel_for_local_cid_and_handle(channel_id, handle);
3745             if (l2cap_channel != NULL) {
3746                 // credit counting
3747                 if (l2cap_channel->credits_incoming == 0u){
3748                     log_info("LE Data Channel packet received but no incoming credits");
3749                     l2cap_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
3750                     break;
3751                 }
3752                 l2cap_channel->credits_incoming--;
3753 
3754                 // automatic credits
3755                 if ((l2cap_channel->credits_incoming < L2CAP_LE_DATA_CHANNELS_AUTOMATIC_CREDITS_WATERMARK) && l2cap_channel->automatic_credits){
3756                     l2cap_channel->new_credits_incoming = L2CAP_LE_DATA_CHANNELS_AUTOMATIC_CREDITS_INCREMENT;
3757                 }
3758 
3759                 // first fragment
3760                 uint16_t pos = 0;
3761                 if (!l2cap_channel->receive_sdu_len){
3762                     uint16_t sdu_len = little_endian_read_16(packet, COMPLETE_L2CAP_HEADER);
3763                     if(sdu_len > l2cap_channel->local_mtu) break;   // SDU would be larger than our buffer
3764                     l2cap_channel->receive_sdu_len = sdu_len;
3765                     l2cap_channel->receive_sdu_pos = 0;
3766                     pos  += 2u;
3767                     size -= 2u;
3768                 }
3769                 uint16_t fragment_size   = size-COMPLETE_L2CAP_HEADER;
3770                 uint16_t remaining_space = l2cap_channel->local_mtu - l2cap_channel->receive_sdu_pos;
3771                 if (fragment_size > remaining_space) break;         // SDU would cause buffer overrun
3772                 (void)memcpy(&l2cap_channel->receive_sdu_buffer[l2cap_channel->receive_sdu_pos],
3773                              &packet[COMPLETE_L2CAP_HEADER + pos],
3774                              fragment_size);
3775                 l2cap_channel->receive_sdu_pos += size - COMPLETE_L2CAP_HEADER;
3776                 // done?
3777                 log_debug("le packet pos %u, len %u", l2cap_channel->receive_sdu_pos, l2cap_channel->receive_sdu_len);
3778                 if (l2cap_channel->receive_sdu_pos >= l2cap_channel->receive_sdu_len){
3779                     l2cap_dispatch_to_channel(l2cap_channel, L2CAP_DATA_PACKET, l2cap_channel->receive_sdu_buffer, l2cap_channel->receive_sdu_len);
3780                     l2cap_channel->receive_sdu_len = 0;
3781                 }
3782             }
3783 #endif
3784             break;
3785     }
3786 #else
3787     UNUSED(handle); // ok: no code
3788     UNUSED(packet); // ok: no code
3789     UNUSED(size);   // ok: no code
3790 #endif
3791 }
3792 
3793 static void l2cap_acl_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
3794     UNUSED(packet_type);    // ok: registered with hci_register_acl_packet_handler
3795     UNUSED(channel);        // ok: there is no channel
3796 
3797     // Assert full L2CAP header present
3798     if (size < COMPLETE_L2CAP_HEADER) return;
3799 
3800     // Dispatch to Classic or LE handler (SCO packets are not dispatched to L2CAP)
3801     hci_con_handle_t handle = READ_ACL_CONNECTION_HANDLE(packet);
3802     hci_connection_t *conn = hci_connection_for_handle(handle);
3803     if (!conn) return;
3804     if (conn->address_type == BD_ADDR_TYPE_ACL){
3805         l2cap_acl_classic_handler(handle, packet, size);
3806     } else {
3807         l2cap_acl_le_handler(handle, packet, size);
3808     }
3809 
3810     l2cap_run();
3811 }
3812 
3813 // Bluetooth 4.0 - allows to register handler for Attribute Protocol and Security Manager Protocol
3814 void l2cap_register_fixed_channel(btstack_packet_handler_t packet_handler, uint16_t channel_id) {
3815     l2cap_fixed_channel_t * channel = l2cap_fixed_channel_for_channel_id(channel_id);
3816     if (!channel) return;
3817     channel->packet_handler = packet_handler;
3818 }
3819 
3820 #ifdef ENABLE_CLASSIC
3821 // finalize closed channel - l2cap_handle_disconnect_request & DISCONNECTION_RESPONSE
3822 void l2cap_finialize_channel_close(l2cap_channel_t * channel){
3823     channel->state = L2CAP_STATE_CLOSED;
3824     l2cap_handle_channel_closed(channel);
3825     // discard channel
3826     btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
3827     l2cap_free_channel_entry(channel);
3828 }
3829 #endif
3830 
3831 #ifdef L2CAP_USES_CHANNELS
3832 static l2cap_service_t * l2cap_get_service_internal(btstack_linked_list_t * services, uint16_t psm){
3833     btstack_linked_list_iterator_t it;
3834     btstack_linked_list_iterator_init(&it, services);
3835     while (btstack_linked_list_iterator_has_next(&it)){
3836         l2cap_service_t * service = (l2cap_service_t *) btstack_linked_list_iterator_next(&it);
3837         if ( service->psm == psm){
3838             return service;
3839         };
3840     }
3841     return NULL;
3842 }
3843 #endif
3844 
3845 #ifdef ENABLE_CLASSIC
3846 static inline l2cap_service_t * l2cap_get_service(uint16_t psm){
3847     return l2cap_get_service_internal(&l2cap_services, psm);
3848 }
3849 
3850 static void l2cap_update_minimal_security_level(void){
3851     // update minimal service security level
3852     gap_security_level_t minimal_level = LEVEL_1;
3853     btstack_linked_list_iterator_t it;
3854     btstack_linked_list_iterator_init(&it, &l2cap_services);
3855     while (btstack_linked_list_iterator_has_next(&it)){
3856         l2cap_service_t * service = (l2cap_service_t *) btstack_linked_list_iterator_next(&it);
3857         if (service->required_security_level > minimal_level){
3858             minimal_level = service->required_security_level;
3859         };
3860     }
3861     gap_set_minimal_service_security_level(minimal_level);
3862 }
3863 
3864 uint8_t l2cap_register_service(btstack_packet_handler_t service_packet_handler, uint16_t psm, uint16_t mtu, gap_security_level_t security_level){
3865 
3866     log_info("L2CAP_REGISTER_SERVICE psm 0x%x mtu %u", psm, mtu);
3867 
3868     // check for alread registered psm
3869     l2cap_service_t *service = l2cap_get_service(psm);
3870     if (service) {
3871         log_error("register: PSM %u already registered", psm);
3872         return L2CAP_SERVICE_ALREADY_REGISTERED;
3873     }
3874 
3875     // alloc structure
3876     service = btstack_memory_l2cap_service_get();
3877     if (!service) {
3878         log_error("register: no memory for l2cap_service_t");
3879         return BTSTACK_MEMORY_ALLOC_FAILED;
3880     }
3881 
3882     // fill in
3883     service->psm = psm;
3884     service->mtu = mtu;
3885     service->packet_handler = service_packet_handler;
3886     service->required_security_level = security_level;
3887 
3888     // add to services list
3889     btstack_linked_list_add(&l2cap_services, (btstack_linked_item_t *) service);
3890 
3891     l2cap_update_minimal_security_level();
3892 
3893 #ifndef ENABLE_EXPLICIT_CONNECTABLE_MODE_CONTROL
3894     // enable page scan
3895     gap_connectable_control(1);
3896 #endif
3897 
3898 
3899     return ERROR_CODE_SUCCESS;
3900 }
3901 
3902 uint8_t l2cap_unregister_service(uint16_t psm){
3903 
3904     log_info("unregister psm 0x%x", psm);
3905 
3906     l2cap_service_t *service = l2cap_get_service(psm);
3907     if (!service) return L2CAP_SERVICE_DOES_NOT_EXIST;
3908     btstack_linked_list_remove(&l2cap_services, (btstack_linked_item_t *) service);
3909     btstack_memory_l2cap_service_free(service);
3910 
3911     l2cap_update_minimal_security_level();
3912 
3913 #ifndef ENABLE_EXPLICIT_CONNECTABLE_MODE_CONTROL
3914     // disable page scan when no services registered
3915     if (btstack_linked_list_empty(&l2cap_services)) {
3916         gap_connectable_control(0);
3917     }
3918 #endif
3919 
3920     return ERROR_CODE_SUCCESS;
3921 }
3922 #endif
3923 
3924 
3925 #ifdef ENABLE_LE_DATA_CHANNELS
3926 
3927 static void l2cap_le_notify_channel_can_send(l2cap_channel_t *channel){
3928     if (!channel->waiting_for_can_send_now) return;
3929     if (channel->send_sdu_buffer) return;
3930     channel->waiting_for_can_send_now = 0;
3931     log_debug("le can send now, local_cid 0x%x", channel->local_cid);
3932     l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_LE_CAN_SEND_NOW);
3933 }
3934 
3935 // 1BH2222
3936 static void l2cap_emit_le_incoming_connection(l2cap_channel_t *channel) {
3937     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",
3938              channel->address_type, bd_addr_to_str(channel->address), channel->con_handle,  channel->psm, channel->local_cid, channel->remote_cid, channel->remote_mtu);
3939     uint8_t event[19];
3940     event[0] = L2CAP_EVENT_LE_INCOMING_CONNECTION;
3941     event[1] = sizeof(event) - 2u;
3942     event[2] = channel->address_type;
3943     reverse_bd_addr(channel->address, &event[3]);
3944     little_endian_store_16(event,  9, channel->con_handle);
3945     little_endian_store_16(event, 11, channel->psm);
3946     little_endian_store_16(event, 13, channel->local_cid);
3947     little_endian_store_16(event, 15, channel->remote_cid);
3948     little_endian_store_16(event, 17, channel->remote_mtu);
3949     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
3950     l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event));
3951 }
3952 // 11BH22222
3953 static void l2cap_emit_le_channel_opened(l2cap_channel_t *channel, uint8_t status) {
3954     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",
3955              status, channel->address_type, bd_addr_to_str(channel->address), channel->con_handle, channel->psm,
3956              channel->local_cid, channel->remote_cid, channel->local_mtu, channel->remote_mtu);
3957     uint8_t event[23];
3958     event[0] = L2CAP_EVENT_LE_CHANNEL_OPENED;
3959     event[1] = sizeof(event) - 2u;
3960     event[2] = status;
3961     event[3] = channel->address_type;
3962     reverse_bd_addr(channel->address, &event[4]);
3963     little_endian_store_16(event, 10, channel->con_handle);
3964     event[12] = (channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) ? 1 : 0;
3965     little_endian_store_16(event, 13, channel->psm);
3966     little_endian_store_16(event, 15, channel->local_cid);
3967     little_endian_store_16(event, 17, channel->remote_cid);
3968     little_endian_store_16(event, 19, channel->local_mtu);
3969     little_endian_store_16(event, 21, channel->remote_mtu);
3970     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
3971     l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event));
3972 }
3973 // 2
3974 static void l2cap_emit_le_channel_closed(l2cap_channel_t * channel){
3975     log_info("closed local_cid 0x%x", channel->local_cid);
3976     uint8_t event[4];
3977     event[0] = L2CAP_EVENT_LE_CHANNEL_CLOSED;
3978     event[1] = sizeof(event) - 2u;
3979     little_endian_store_16(event, 2, channel->local_cid);
3980     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
3981     l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event));
3982 }
3983 
3984 static void l2cap_le_send_pdu(l2cap_channel_t *channel){
3985     btstack_assert(channel != NULL);
3986     btstack_assert(channel->send_sdu_buffer != NULL);
3987     btstack_assert(channel->credits_outgoing > 0);
3988 
3989     // send part of SDU
3990     hci_reserve_packet_buffer();
3991     uint8_t * acl_buffer = hci_get_outgoing_packet_buffer();
3992     uint8_t * l2cap_payload = acl_buffer + 8;
3993     uint16_t pos = 0;
3994     if (!channel->send_sdu_pos){
3995         // store SDU len
3996         channel->send_sdu_pos += 2u;
3997         little_endian_store_16(l2cap_payload, pos, channel->send_sdu_len);
3998         pos += 2u;
3999     }
4000     uint16_t payload_size = btstack_min(channel->send_sdu_len + 2u - channel->send_sdu_pos, channel->remote_mps - pos);
4001     log_info("len %u, pos %u => payload %u, credits %u", channel->send_sdu_len, channel->send_sdu_pos, payload_size, channel->credits_outgoing);
4002     (void)memcpy(&l2cap_payload[pos],
4003                  &channel->send_sdu_buffer[channel->send_sdu_pos - 2u],
4004                  payload_size); // -2 for virtual SDU len
4005     pos += payload_size;
4006     channel->send_sdu_pos += payload_size;
4007     l2cap_setup_header(acl_buffer, channel->con_handle, 0, channel->remote_cid, pos);
4008 
4009     channel->credits_outgoing--;
4010 
4011     hci_send_acl_packet_buffer(8u + pos);
4012 
4013     if (channel->send_sdu_pos >= (channel->send_sdu_len + 2u)){
4014         channel->send_sdu_buffer = NULL;
4015         // send done event
4016         l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_LE_PACKET_SENT);
4017         // inform about can send now
4018         l2cap_le_notify_channel_can_send(channel);
4019     }
4020 }
4021 
4022 // finalize closed channel - l2cap_handle_disconnect_request & DISCONNECTION_RESPONSE
4023 void l2cap_le_finialize_channel_close(l2cap_channel_t * channel){
4024     channel->state = L2CAP_STATE_CLOSED;
4025     l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_CHANNEL_CLOSED);
4026     // discard channel
4027     btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
4028     l2cap_free_channel_entry(channel);
4029 }
4030 
4031 static inline l2cap_service_t * l2cap_le_get_service(uint16_t le_psm){
4032     return l2cap_get_service_internal(&l2cap_le_services, le_psm);
4033 }
4034 
4035 uint8_t l2cap_le_register_service(btstack_packet_handler_t packet_handler, uint16_t psm, gap_security_level_t security_level){
4036 
4037     log_info("L2CAP_LE_REGISTER_SERVICE psm 0x%x", psm);
4038 
4039     // check for alread registered psm
4040     l2cap_service_t *service = l2cap_le_get_service(psm);
4041     if (service) {
4042         return L2CAP_SERVICE_ALREADY_REGISTERED;
4043     }
4044 
4045     // alloc structure
4046     service = btstack_memory_l2cap_service_get();
4047     if (!service) {
4048         log_error("register: no memory for l2cap_service_t");
4049         return BTSTACK_MEMORY_ALLOC_FAILED;
4050     }
4051 
4052     // fill in
4053     service->psm = psm;
4054     service->mtu = 0;
4055     service->packet_handler = packet_handler;
4056     service->required_security_level = security_level;
4057 
4058     // add to services list
4059     btstack_linked_list_add(&l2cap_le_services, (btstack_linked_item_t *) service);
4060 
4061     // done
4062     return ERROR_CODE_SUCCESS;
4063 }
4064 
4065 uint8_t l2cap_le_unregister_service(uint16_t psm) {
4066     log_info("L2CAP_LE_UNREGISTER_SERVICE psm 0x%x", psm);
4067     l2cap_service_t *service = l2cap_le_get_service(psm);
4068     if (!service) return L2CAP_SERVICE_DOES_NOT_EXIST;
4069 
4070     btstack_linked_list_remove(&l2cap_le_services, (btstack_linked_item_t *) service);
4071     btstack_memory_l2cap_service_free(service);
4072     return ERROR_CODE_SUCCESS;
4073 }
4074 
4075 uint8_t l2cap_le_accept_connection(uint16_t local_cid, uint8_t * receive_sdu_buffer, uint16_t mtu, uint16_t initial_credits){
4076     // get channel
4077     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
4078     if (!channel) return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
4079 
4080     // validate state
4081     if (channel->state != L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT){
4082         return ERROR_CODE_COMMAND_DISALLOWED;
4083     }
4084 
4085     // set state accept connection
4086     channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_ACCEPT;
4087     channel->receive_sdu_buffer = receive_sdu_buffer;
4088     channel->local_mtu = mtu;
4089     channel->new_credits_incoming = initial_credits;
4090     channel->automatic_credits  = initial_credits == L2CAP_LE_AUTOMATIC_CREDITS;
4091 
4092     // test
4093     // channel->new_credits_incoming = 1;
4094 
4095     // go
4096     l2cap_run();
4097     return ERROR_CODE_SUCCESS;
4098 }
4099 
4100 /**
4101  * @brief Deny incoming LE Data Channel connection due to resource constraints
4102  * @param local_cid             L2CAP LE Data Channel Identifier
4103  */
4104 
4105 uint8_t l2cap_le_decline_connection(uint16_t local_cid){
4106     // get channel
4107     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
4108     if (!channel) return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
4109 
4110     // validate state
4111     if (channel->state != L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT){
4112         return ERROR_CODE_COMMAND_DISALLOWED;
4113     }
4114 
4115     // set state decline connection
4116     channel->state  = L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_DECLINE;
4117     channel->reason = 0x04; // no resources available
4118     l2cap_run();
4119     return ERROR_CODE_SUCCESS;
4120 }
4121 
4122 static gap_security_level_t l2cap_le_security_level_for_connection(hci_con_handle_t con_handle){
4123     uint8_t encryption_key_size = gap_encryption_key_size(con_handle);
4124     if (encryption_key_size == 0) return LEVEL_0;
4125 
4126     uint8_t authenticated = gap_authenticated(con_handle);
4127     if (!authenticated) return LEVEL_2;
4128 
4129     return encryption_key_size == 16 ? LEVEL_4 : LEVEL_3;
4130 }
4131 
4132 // used to handle pairing complete after triggering to increase
4133 static void l2cap_sm_packet_handler(uint8_t packet_type, uint16_t channel_nr, uint8_t *packet, uint16_t size) {
4134     UNUSED(channel_nr);
4135     UNUSED(size);
4136     UNUSED(packet_type);
4137     btstack_assert(packet_type == HCI_EVENT_PACKET);
4138     if (hci_event_packet_get_type(packet) != SM_EVENT_PAIRING_COMPLETE) return;
4139     hci_con_handle_t con_handle = sm_event_pairing_complete_get_handle(packet);
4140     btstack_linked_list_iterator_t it;
4141     btstack_linked_list_iterator_init(&it, &l2cap_channels);
4142     while (btstack_linked_list_iterator_has_next(&it)) {
4143         l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
4144         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
4145         if (channel->con_handle != con_handle) continue;
4146         if (channel->state != L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE) continue;
4147 
4148         // found channel, check security level
4149         if (l2cap_le_security_level_for_connection(con_handle) < channel->required_security_level){
4150             // pairing failed or wasn't good enough, inform user
4151             l2cap_emit_le_channel_opened(channel, ERROR_CODE_INSUFFICIENT_SECURITY);
4152             // discard channel
4153             btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
4154             l2cap_free_channel_entry(channel);
4155         } else {
4156             // send conn request now
4157             channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST;
4158             l2cap_run();
4159         }
4160     }
4161 }
4162 
4163 uint8_t l2cap_le_create_channel(btstack_packet_handler_t packet_handler, hci_con_handle_t con_handle,
4164     uint16_t psm, uint8_t * receive_sdu_buffer, uint16_t mtu, uint16_t initial_credits, gap_security_level_t security_level,
4165     uint16_t * out_local_cid) {
4166 
4167     static btstack_packet_callback_registration_t sm_event_callback_registration;
4168     static bool sm_callback_registered = false;
4169 
4170     log_info("create, handle 0x%04x psm 0x%x mtu %u", con_handle, psm, mtu);
4171 
4172     hci_connection_t * connection = hci_connection_for_handle(con_handle);
4173     if (!connection) {
4174         log_error("no hci_connection for handle 0x%04x", con_handle);
4175         return ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER;
4176     }
4177 
4178     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);
4179     if (!channel) {
4180         return BTSTACK_MEMORY_ALLOC_FAILED;
4181     }
4182     log_info("created %p", channel);
4183 
4184     // store local_cid
4185     if (out_local_cid){
4186        *out_local_cid = channel->local_cid;
4187     }
4188 
4189     // setup channel entry
4190     channel->con_handle = con_handle;
4191     channel->receive_sdu_buffer = receive_sdu_buffer;
4192     channel->new_credits_incoming = initial_credits;
4193     channel->automatic_credits    = initial_credits == L2CAP_LE_AUTOMATIC_CREDITS;
4194 
4195     // add to connections list
4196     btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel);
4197 
4198     // check security level
4199     if (l2cap_le_security_level_for_connection(con_handle) < channel->required_security_level){
4200         if (!sm_callback_registered){
4201             sm_callback_registered = true;
4202             // lazy registration for SM events
4203             sm_event_callback_registration.callback = &l2cap_sm_packet_handler;
4204             sm_add_event_handler(&sm_event_callback_registration);
4205         }
4206 
4207         // start pairing
4208         channel->state = L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE;
4209         sm_request_pairing(con_handle);
4210     } else {
4211         // send conn request right away
4212         channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST;
4213         l2cap_run();
4214     }
4215 
4216     return ERROR_CODE_SUCCESS;
4217 }
4218 
4219 /**
4220  * @brief Provide credtis for LE Data Channel
4221  * @param local_cid             L2CAP LE Data Channel Identifier
4222  * @param credits               Number additional credits for peer
4223  */
4224 uint8_t l2cap_le_provide_credits(uint16_t local_cid, uint16_t credits){
4225 
4226     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
4227     if (!channel) {
4228         log_error("le credits no channel for cid 0x%02x", local_cid);
4229         return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
4230     }
4231 
4232     // check state
4233     if (channel->state != L2CAP_STATE_OPEN){
4234         log_error("le credits but channel 0x%02x not open yet", local_cid);
4235     }
4236 
4237     // assert incoming credits + credits <= 0xffff
4238     uint32_t total_credits = channel->credits_incoming;
4239     total_credits += channel->new_credits_incoming;
4240     total_credits += credits;
4241     if (total_credits > 0xffffu){
4242         log_error("le credits overrun: current %u, scheduled %u, additional %u", channel->credits_incoming,
4243             channel->new_credits_incoming, credits);
4244     }
4245 
4246     // set credits_granted
4247     channel->new_credits_incoming += credits;
4248 
4249     // go
4250     l2cap_run();
4251     return ERROR_CODE_SUCCESS;
4252 }
4253 
4254 /**
4255  * @brief Check if outgoing buffer is available and that there's space on the Bluetooth module
4256  * @param local_cid             L2CAP LE Data Channel Identifier
4257  */
4258 int l2cap_le_can_send_now(uint16_t local_cid){
4259     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
4260     if (!channel) {
4261         log_error("le can send now, no channel for cid 0x%02x", local_cid);
4262         return 0;
4263     }
4264 
4265     // check state
4266     if (channel->state != L2CAP_STATE_OPEN) return 0;
4267 
4268     // check queue
4269     if (channel->send_sdu_buffer) return 0;
4270 
4271     // fine, go ahead
4272     return 1;
4273 }
4274 
4275 /**
4276  * @brief Request emission of L2CAP_EVENT_CAN_SEND_NOW as soon as possible
4277  * @note L2CAP_EVENT_CAN_SEND_NOW might be emitted during call to this function
4278  *       so packet handler should be ready to handle it
4279  * @param local_cid             L2CAP LE Data Channel Identifier
4280  */
4281 uint8_t l2cap_le_request_can_send_now_event(uint16_t local_cid){
4282     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
4283     if (!channel) {
4284         log_error("can send now, no channel for cid 0x%02x", local_cid);
4285         return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
4286     }
4287     channel->waiting_for_can_send_now = 1;
4288     l2cap_le_notify_channel_can_send(channel);
4289     return ERROR_CODE_SUCCESS;
4290 }
4291 
4292 /**
4293  * @brief Send data via LE Data Channel
4294  * @note Since data larger then the maximum PDU needs to be segmented into multiple PDUs, data needs to stay valid until ... event
4295  * @param local_cid             L2CAP LE Data Channel Identifier
4296  * @param data                  data to send
4297  * @param size                  data size
4298  */
4299 uint8_t l2cap_le_send_data(uint16_t local_cid, uint8_t * data, uint16_t size){
4300 
4301     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
4302     if (!channel) {
4303         log_error("l2cap send, no channel for cid 0x%02x", local_cid);
4304         return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
4305     }
4306 
4307     if (size > channel->remote_mtu){
4308         log_error("l2cap send, cid 0x%02x, data length exceeds remote MTU.", local_cid);
4309         return L2CAP_DATA_LEN_EXCEEDS_REMOTE_MTU;
4310     }
4311 
4312     if (channel->send_sdu_buffer){
4313         log_info("l2cap send, cid 0x%02x, cannot send", local_cid);
4314         return BTSTACK_ACL_BUFFERS_FULL;
4315     }
4316 
4317     channel->send_sdu_buffer = data;
4318     channel->send_sdu_len    = size;
4319     channel->send_sdu_pos    = 0;
4320 
4321     l2cap_notify_channel_can_send();
4322     return ERROR_CODE_SUCCESS;
4323 }
4324 
4325 /**
4326  * @brief Disconnect from LE Data Channel
4327  * @param local_cid             L2CAP LE Data Channel Identifier
4328  */
4329 uint8_t l2cap_le_disconnect(uint16_t local_cid)
4330 {
4331     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
4332     if (!channel) {
4333         log_error("l2cap send, no channel for cid 0x%02x", local_cid);
4334         return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
4335     }
4336 
4337     channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
4338     l2cap_run();
4339     return ERROR_CODE_SUCCESS;
4340 }
4341 
4342 #endif
4343