xref: /btstack/src/l2cap.c (revision a536dfcc0cc0eb4d5bd5adb4f8c62edc50e38e9a)
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 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  local_source_cid;
205 #endif
206 // next signaling sequence number
207 static uint8_t   sig_seq_nr;
208 
209 // used to cache l2cap rejects, echo, and informational requests
210 static l2cap_signaling_response_t signaling_responses[NR_PENDING_SIGNALING_RESPONSES];
211 static int signaling_responses_pending;
212 static btstack_packet_callback_registration_t 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 (local_source_cid == 0xffffu) {
860             local_source_cid = 0x40;
861         } else {
862             local_source_cid++;
863         }
864     } while (l2cap_get_channel_for_local_cid(local_source_cid) != NULL);
865     return local_source_cid;
866 }
867 #endif
868 
869 static uint8_t l2cap_next_sig_id(void){
870     if (sig_seq_nr == 0xffu) {
871         sig_seq_nr = 1;
872     } else {
873         sig_seq_nr++;
874     }
875     return sig_seq_nr;
876 }
877 
878 void l2cap_init(void){
879     signaling_responses_pending = 0;
880 #ifdef L2CAP_USES_CHANNELS
881     local_source_cid  = 0x40;
882 #endif
883     sig_seq_nr  = 0xff;
884     l2cap_channels = NULL;
885 
886 #ifdef ENABLE_CLASSIC
887     l2cap_services = NULL;
888     require_security_level2_for_outgoing_sdp = 0;
889 
890     // Setup Connectionless Channel
891     l2cap_fixed_channel_connectionless.local_cid     = L2CAP_CID_CONNECTIONLESS_CHANNEL;
892     l2cap_fixed_channel_connectionless.channel_type  = L2CAP_CHANNEL_TYPE_CONNECTIONLESS;
893     btstack_linked_list_add(&l2cap_channels, (btstack_linked_item_t *) &l2cap_fixed_channel_connectionless);
894 #endif
895 
896 #ifdef ENABLE_LE_DATA_CHANNELS
897     l2cap_le_services = NULL;
898 #endif
899 
900 #ifdef ENABLE_BLE
901     l2cap_event_packet_handler = NULL;
902     l2cap_le_custom_max_mtu = 0;
903 
904     // Setup fixed ATT Channel
905     l2cap_fixed_channel_att.local_cid    = L2CAP_CID_ATTRIBUTE_PROTOCOL;
906     l2cap_fixed_channel_att.channel_type = L2CAP_CHANNEL_TYPE_LE_FIXED;
907     btstack_linked_list_add(&l2cap_channels, (btstack_linked_item_t *) &l2cap_fixed_channel_att);
908 
909     // Setup fixed SM Channel
910     l2cap_fixed_channel_sm.local_cid     = L2CAP_CID_SECURITY_MANAGER_PROTOCOL;
911     l2cap_fixed_channel_sm.channel_type  = L2CAP_CHANNEL_TYPE_LE_FIXED;
912     btstack_linked_list_add(&l2cap_channels, (btstack_linked_item_t *) &l2cap_fixed_channel_sm);
913 #endif
914 
915     //
916     // register callback with HCI
917     //
918     hci_event_callback_registration.callback = &l2cap_hci_event_handler;
919     hci_add_event_handler(&hci_event_callback_registration);
920 
921     hci_register_acl_packet_handler(&l2cap_acl_handler);
922 
923 #ifndef ENABLE_EXPLICIT_CONNECTABLE_MODE_CONTROL
924 #ifdef ENABLE_CLASSIC
925     gap_connectable_control(0); // no services yet
926 #endif
927 #endif
928 }
929 
930 /**
931  * @brief De-Init L2CAP
932  */
933 void l2cap_deinit(void){
934 #ifdef ENABLE_CLASSIC
935     memset(l2cap_outgoing_classic_addr, 0, 6);
936 #endif
937     signaling_responses_pending = 0;
938 }
939 
940 void l2cap_register_packet_handler(void (*handler)(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size)){
941 #ifdef ENABLE_BLE
942     l2cap_event_packet_handler = handler;
943 #else
944     UNUSED(handler);    // ok: no code
945 #endif
946 }
947 
948 void l2cap_request_can_send_fix_channel_now_event(hci_con_handle_t con_handle, uint16_t channel_id){
949     UNUSED(con_handle);  // ok: there is no con handle
950 
951     l2cap_fixed_channel_t * channel = l2cap_fixed_channel_for_channel_id(channel_id);
952     if (!channel) return;
953     channel->waiting_for_can_send_now = 1;
954     l2cap_notify_channel_can_send();
955 }
956 
957 int  l2cap_can_send_fixed_channel_packet_now(hci_con_handle_t con_handle, uint16_t channel_id){
958     UNUSED(channel_id); // ok: only depends on Controller LE buffers
959 
960     return hci_can_send_acl_packet_now(con_handle);
961 }
962 
963 uint8_t *l2cap_get_outgoing_buffer(void){
964     return hci_get_outgoing_packet_buffer() + COMPLETE_L2CAP_HEADER; // 8 bytes
965 }
966 
967 // only for L2CAP Basic Channels
968 int l2cap_reserve_packet_buffer(void){
969     return hci_reserve_packet_buffer();
970 }
971 
972 // only for L2CAP Basic Channels
973 void l2cap_release_packet_buffer(void){
974     hci_release_packet_buffer();
975 }
976 
977 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){
978     // 0 - Connection handle : PB=pb : BC=00
979     little_endian_store_16(acl_buffer, 0u, con_handle | (packet_boundary << 12u) | (0u << 14u));
980     // 2 - ACL length
981     little_endian_store_16(acl_buffer, 2u,  len + 4u);
982     // 4 - L2CAP packet length
983     little_endian_store_16(acl_buffer, 4u,  len + 0u);
984     // 6 - L2CAP channel DEST
985     little_endian_store_16(acl_buffer, 6,  remote_cid);
986 }
987 
988 // assumption - only on LE connections
989 int l2cap_send_prepared_connectionless(hci_con_handle_t con_handle, uint16_t cid, uint16_t len){
990 
991     if (!hci_is_packet_buffer_reserved()){
992         log_error("l2cap_send_prepared_connectionless called without reserving packet first");
993         return BTSTACK_ACL_BUFFERS_FULL;
994     }
995 
996     if (!hci_can_send_prepared_acl_packet_now(con_handle)){
997         log_info("l2cap_send_prepared_connectionless handle 0x%02x, cid 0x%02x, cannot send", con_handle, cid);
998         return BTSTACK_ACL_BUFFERS_FULL;
999     }
1000 
1001     log_debug("l2cap_send_prepared_connectionless handle %u, cid 0x%02x", con_handle, cid);
1002 
1003     uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
1004     l2cap_setup_header(acl_buffer, con_handle, 0, cid, len);
1005     // send
1006     return hci_send_acl_packet_buffer(len+8u);
1007 }
1008 
1009 // assumption - only on LE connections
1010 int l2cap_send_connectionless(hci_con_handle_t con_handle, uint16_t cid, uint8_t *data, uint16_t len){
1011 
1012     if (!hci_can_send_acl_packet_now(con_handle)){
1013         log_info("l2cap_send cid 0x%02x, cannot send", cid);
1014         return BTSTACK_ACL_BUFFERS_FULL;
1015     }
1016 
1017     hci_reserve_packet_buffer();
1018     uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
1019 
1020     (void)memcpy(&acl_buffer[8], data, len);
1021 
1022     return l2cap_send_prepared_connectionless(con_handle, cid, len);
1023 }
1024 
1025 static void l2cap_emit_can_send_now(btstack_packet_handler_t packet_handler, uint16_t channel) {
1026     log_debug("L2CAP_EVENT_CHANNEL_CAN_SEND_NOW local_cid 0x%x", channel);
1027     uint8_t event[4];
1028     event[0] = L2CAP_EVENT_CAN_SEND_NOW;
1029     event[1] = sizeof(event) - 2u;
1030     little_endian_store_16(event, 2, channel);
1031     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
1032     packet_handler(HCI_EVENT_PACKET, channel, event, sizeof(event));
1033 }
1034 
1035 #ifdef L2CAP_USES_CHANNELS
1036 static void l2cap_dispatch_to_channel(l2cap_channel_t *channel, uint8_t type, uint8_t * data, uint16_t size){
1037     (* (channel->packet_handler))(type, channel->local_cid, data, size);
1038 }
1039 
1040 static void l2cap_emit_simple_event_with_cid(l2cap_channel_t * channel, uint8_t event_code){
1041     uint8_t event[4];
1042     event[0] = event_code;
1043     event[1] = sizeof(event) - 2u;
1044     little_endian_store_16(event, 2, channel->local_cid);
1045     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
1046     l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event));
1047 }
1048 #endif
1049 
1050 #ifdef ENABLE_CLASSIC
1051 void l2cap_emit_channel_opened(l2cap_channel_t *channel, uint8_t status) {
1052     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",
1053              status, bd_addr_to_str(channel->address), channel->con_handle, channel->psm,
1054              channel->local_cid, channel->remote_cid, channel->local_mtu, channel->remote_mtu, channel->flush_timeout);
1055     uint8_t event[26];
1056     event[0] = L2CAP_EVENT_CHANNEL_OPENED;
1057     event[1] = sizeof(event) - 2;
1058     event[2] = status;
1059     reverse_bd_addr(channel->address, &event[3]);
1060     little_endian_store_16(event,  9, channel->con_handle);
1061     little_endian_store_16(event, 11, channel->psm);
1062     little_endian_store_16(event, 13, channel->local_cid);
1063     little_endian_store_16(event, 15, channel->remote_cid);
1064     little_endian_store_16(event, 17, channel->local_mtu);
1065     little_endian_store_16(event, 19, channel->remote_mtu);
1066     little_endian_store_16(event, 21, channel->flush_timeout);
1067     event[23] = (channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) ? 1 : 0;
1068 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1069     log_info("ERTM mode %u, fcs enabled %u", channel->mode, channel->fcs_option);
1070     event[24] = channel->mode;
1071     event[25] = channel->fcs_option;
1072 
1073 #else
1074     event[24] = L2CAP_CHANNEL_MODE_BASIC;
1075     event[25] = 0;
1076 #endif
1077     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
1078     l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event));
1079 }
1080 
1081 static void l2cap_emit_channel_closed(l2cap_channel_t *channel) {
1082     log_info("L2CAP_EVENT_CHANNEL_CLOSED local_cid 0x%x", channel->local_cid);
1083     l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_CHANNEL_CLOSED);
1084 }
1085 
1086 static void l2cap_emit_incoming_connection(l2cap_channel_t *channel) {
1087     log_info("L2CAP_EVENT_INCOMING_CONNECTION addr %s handle 0x%x psm 0x%x local_cid 0x%x remote_cid 0x%x",
1088              bd_addr_to_str(channel->address), channel->con_handle,  channel->psm, channel->local_cid, channel->remote_cid);
1089     uint8_t event[16];
1090     event[0] = L2CAP_EVENT_INCOMING_CONNECTION;
1091     event[1] = sizeof(event) - 2;
1092     reverse_bd_addr(channel->address, &event[2]);
1093     little_endian_store_16(event,  8, channel->con_handle);
1094     little_endian_store_16(event, 10, channel->psm);
1095     little_endian_store_16(event, 12, channel->local_cid);
1096     little_endian_store_16(event, 14, channel->remote_cid);
1097     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
1098     l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event));
1099 }
1100 
1101 static void l2cap_handle_channel_open_failed(l2cap_channel_t * channel, uint8_t status){
1102 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1103     // emit ertm buffer released, as it's not needed. if in basic mode, it was either not allocated or already released
1104     if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
1105         l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED);
1106     }
1107 #endif
1108     l2cap_emit_channel_opened(channel, status);
1109 }
1110 
1111 static void l2cap_handle_channel_closed(l2cap_channel_t * channel){
1112 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1113     // emit ertm buffer released, as it's not needed anymore. if in basic mode, it was either not allocated or already released
1114     if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
1115         l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED);
1116     }
1117 #endif
1118     l2cap_emit_channel_closed(channel);
1119 }
1120 #endif
1121 
1122 static l2cap_fixed_channel_t * l2cap_channel_item_by_cid(uint16_t cid){
1123     btstack_linked_list_iterator_t it;
1124     btstack_linked_list_iterator_init(&it, &l2cap_channels);
1125     while (btstack_linked_list_iterator_has_next(&it)){
1126         l2cap_fixed_channel_t * channel = (l2cap_fixed_channel_t*) btstack_linked_list_iterator_next(&it);
1127         if (channel->local_cid == cid) {
1128             return channel;
1129         }
1130     }
1131     return NULL;
1132 }
1133 
1134 // used for fixed channels in LE (ATT/SM) and Classic (Connectionless Channel). CID < 0x04
1135 static l2cap_fixed_channel_t * l2cap_fixed_channel_for_channel_id(uint16_t local_cid){
1136     if (local_cid >= 0x40u) return NULL;
1137     return (l2cap_fixed_channel_t*) l2cap_channel_item_by_cid(local_cid);
1138 }
1139 
1140 // used for Classic Channels + LE Data Channels. local_cid >= 0x40
1141 #ifdef L2CAP_USES_CHANNELS
1142 static l2cap_channel_t * l2cap_get_channel_for_local_cid(uint16_t local_cid){
1143     if (local_cid < 0x40u) return NULL;
1144     return (l2cap_channel_t*) l2cap_channel_item_by_cid(local_cid);
1145 }
1146 
1147 static l2cap_channel_t * l2cap_get_channel_for_local_cid_and_handle(uint16_t local_cid, hci_con_handle_t con_handle){
1148     if (local_cid < 0x40u) return NULL;
1149     l2cap_channel_t * l2cap_channel = (l2cap_channel_t*) l2cap_channel_item_by_cid(local_cid);
1150     if (l2cap_channel == NULL)  return NULL;
1151     if (l2cap_channel->con_handle != con_handle) return NULL;
1152     return l2cap_channel;
1153 }
1154 
1155 void l2cap_request_can_send_now_event(uint16_t local_cid){
1156     l2cap_channel_t *channel = l2cap_get_channel_for_local_cid(local_cid);
1157     if (!channel) return;
1158     channel->waiting_for_can_send_now = 1;
1159 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1160     if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
1161         l2cap_ertm_notify_channel_can_send(channel);
1162         return;
1163     }
1164 #endif
1165     l2cap_notify_channel_can_send();
1166 }
1167 
1168 int  l2cap_can_send_packet_now(uint16_t local_cid){
1169     l2cap_channel_t *channel = l2cap_get_channel_for_local_cid(local_cid);
1170     if (!channel) return 0;
1171 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1172     if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
1173         return l2cap_ertm_can_store_packet_now(channel);
1174     }
1175 #endif
1176     return hci_can_send_acl_packet_now(channel->con_handle);
1177 }
1178 
1179 int  l2cap_can_send_prepared_packet_now(uint16_t local_cid){
1180     l2cap_channel_t *channel = l2cap_get_channel_for_local_cid(local_cid);
1181     if (!channel) return 0;
1182 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1183     if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
1184         return 0;
1185     }
1186 #endif
1187     return hci_can_send_prepared_acl_packet_now(channel->con_handle);
1188 }
1189 
1190 uint16_t l2cap_get_remote_mtu_for_local_cid(uint16_t local_cid){
1191     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
1192     if (channel) {
1193         return channel->remote_mtu;
1194     }
1195     return 0;
1196 }
1197 #endif
1198 
1199 #ifdef L2CAP_USES_CHANNELS
1200 static int l2cap_is_dynamic_channel_type(l2cap_channel_type_t channel_type){
1201     switch (channel_type){
1202         case L2CAP_CHANNEL_TYPE_CLASSIC:
1203         case L2CAP_CHANNEL_TYPE_LE_DATA_CHANNEL:
1204             return 1;
1205         default:
1206             return 0;
1207     }
1208 }
1209 #endif
1210 
1211 #ifdef ENABLE_CLASSIC
1212 // RTX Timer only exist for dynamic channels
1213 static l2cap_channel_t * l2cap_channel_for_rtx_timer(btstack_timer_source_t * ts){
1214     btstack_linked_list_iterator_t it;
1215     btstack_linked_list_iterator_init(&it, &l2cap_channels);
1216     while (btstack_linked_list_iterator_has_next(&it)){
1217         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
1218         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
1219         if (&channel->rtx == ts) {
1220             return channel;
1221         }
1222     }
1223     return NULL;
1224 }
1225 
1226 static void l2cap_rtx_timeout(btstack_timer_source_t * ts){
1227     l2cap_channel_t * channel = l2cap_channel_for_rtx_timer(ts);
1228     if (!channel) return;
1229 
1230     log_info("l2cap_rtx_timeout for local cid 0x%02x", channel->local_cid);
1231 
1232     // "When terminating the channel, it is not necessary to send a L2CAP_DisconnectReq
1233     //  and enter WAIT_DISCONNECT state. Channels can be transitioned directly to the CLOSED state."
1234     // notify client
1235     l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_RTX_TIMEOUT);
1236 
1237     // discard channel
1238     btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
1239     l2cap_free_channel_entry(channel);
1240 }
1241 
1242 #endif
1243 
1244 #ifdef L2CAP_USES_CHANNELS
1245 static void l2cap_stop_rtx(l2cap_channel_t * channel){
1246     log_info("l2cap_stop_rtx for local cid 0x%02x", channel->local_cid);
1247     btstack_run_loop_remove_timer(&channel->rtx);
1248 }
1249 #endif
1250 
1251 #ifdef ENABLE_CLASSIC
1252 
1253 static void l2cap_start_rtx(l2cap_channel_t * channel){
1254     l2cap_stop_rtx(channel);
1255     log_info("l2cap_start_rtx for local cid 0x%02x", channel->local_cid);
1256     btstack_run_loop_set_timer_handler(&channel->rtx, l2cap_rtx_timeout);
1257     btstack_run_loop_set_timer(&channel->rtx, L2CAP_RTX_TIMEOUT_MS);
1258     btstack_run_loop_add_timer(&channel->rtx);
1259 }
1260 
1261 static void l2cap_start_ertx(l2cap_channel_t * channel){
1262     log_info("l2cap_start_ertx for local cid 0x%02x", channel->local_cid);
1263     l2cap_stop_rtx(channel);
1264     btstack_run_loop_set_timer_handler(&channel->rtx, l2cap_rtx_timeout);
1265     btstack_run_loop_set_timer(&channel->rtx, L2CAP_ERTX_TIMEOUT_MS);
1266     btstack_run_loop_add_timer(&channel->rtx);
1267 }
1268 
1269 void l2cap_require_security_level_2_for_outgoing_sdp(void){
1270     require_security_level2_for_outgoing_sdp = 1;
1271 }
1272 
1273 static int l2cap_security_level_0_allowed_for_PSM(uint16_t psm){
1274     return (psm == BLUETOOTH_PSM_SDP) && (!require_security_level2_for_outgoing_sdp);
1275 }
1276 
1277 static int l2cap_send_signaling_packet(hci_con_handle_t handle, L2CAP_SIGNALING_COMMANDS cmd, int identifier, ...){
1278     if (!hci_can_send_acl_packet_now(handle)){
1279         log_info("l2cap_send_signaling_packet, cannot send");
1280         return BTSTACK_ACL_BUFFERS_FULL;
1281     }
1282 
1283     // log_info("l2cap_send_signaling_packet type %u", cmd);
1284     hci_reserve_packet_buffer();
1285     uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
1286     va_list argptr;
1287     va_start(argptr, identifier);
1288     uint16_t len = l2cap_create_signaling_classic(acl_buffer, handle, cmd, identifier, argptr);
1289     va_end(argptr);
1290     // log_info("l2cap_send_signaling_packet con %u!", handle);
1291     return hci_send_acl_packet_buffer(len);
1292 }
1293 
1294 // assumption - only on Classic connections
1295 // cannot be used for L2CAP ERTM
1296 int l2cap_send_prepared(uint16_t local_cid, uint16_t len){
1297 
1298     if (!hci_is_packet_buffer_reserved()){
1299         log_error("l2cap_send_prepared called without reserving packet first");
1300         return BTSTACK_ACL_BUFFERS_FULL;
1301     }
1302 
1303     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
1304     if (!channel) {
1305         log_error("l2cap_send_prepared no channel for cid 0x%02x", local_cid);
1306         return -1;   // TODO: define error
1307     }
1308 
1309     if (!hci_can_send_prepared_acl_packet_now(channel->con_handle)){
1310         log_info("l2cap_send_prepared cid 0x%02x, cannot send", local_cid);
1311         return BTSTACK_ACL_BUFFERS_FULL;
1312     }
1313 
1314     log_debug("l2cap_send_prepared cid 0x%02x, handle %u, 1 credit used", local_cid, channel->con_handle);
1315 
1316     int fcs_size = 0;
1317 
1318 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1319     if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION && channel->fcs_option){
1320         fcs_size = 2;
1321     }
1322 #endif
1323 
1324     // set non-flushable packet boundary flag if supported on Controller
1325     uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
1326     uint8_t packet_boundary_flag = hci_non_flushable_packet_boundary_flag_supported() ? 0x00 : 0x02;
1327     l2cap_setup_header(acl_buffer, channel->con_handle, packet_boundary_flag, channel->remote_cid, len + fcs_size);
1328 
1329 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1330     if (fcs_size){
1331         // calculate FCS over l2cap data
1332         uint16_t fcs = crc16_calc(acl_buffer + 4, 4 + len);
1333         log_info("I-Frame: fcs 0x%04x", fcs);
1334         little_endian_store_16(acl_buffer, 8 + len, fcs);
1335     }
1336 #endif
1337 
1338     // send
1339     return hci_send_acl_packet_buffer(len+8+fcs_size);
1340 }
1341 
1342 // assumption - only on Classic connections
1343 int l2cap_send(uint16_t local_cid, uint8_t *data, uint16_t len){
1344     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
1345     if (!channel) {
1346         log_error("l2cap_send no channel for cid 0x%02x", local_cid);
1347         return -1;   // TODO: define error
1348     }
1349 
1350 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1351     // send in ERTM
1352     if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
1353         return l2cap_ertm_send(channel, data, len);
1354     }
1355 #endif
1356 
1357     if (len > channel->remote_mtu){
1358         log_error("l2cap_send cid 0x%02x, data length exceeds remote MTU.", local_cid);
1359         return L2CAP_DATA_LEN_EXCEEDS_REMOTE_MTU;
1360     }
1361 
1362     if (!hci_can_send_acl_packet_now(channel->con_handle)){
1363         log_info("l2cap_send cid 0x%02x, cannot send", local_cid);
1364         return BTSTACK_ACL_BUFFERS_FULL;
1365     }
1366 
1367     hci_reserve_packet_buffer();
1368     uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
1369     (void)memcpy(&acl_buffer[8], data, len);
1370     return l2cap_send_prepared(local_cid, len);
1371 }
1372 
1373 int l2cap_send_echo_request(hci_con_handle_t con_handle, uint8_t *data, uint16_t len){
1374     return l2cap_send_signaling_packet(con_handle, ECHO_REQUEST,  l2cap_next_sig_id(), len, data);
1375 }
1376 
1377 static inline void channelStateVarSetFlag(l2cap_channel_t *channel, L2CAP_CHANNEL_STATE_VAR flag){
1378     channel->state_var = (L2CAP_CHANNEL_STATE_VAR) (channel->state_var | flag);
1379 }
1380 
1381 static inline void channelStateVarClearFlag(l2cap_channel_t *channel, L2CAP_CHANNEL_STATE_VAR flag){
1382     channel->state_var = (L2CAP_CHANNEL_STATE_VAR) (channel->state_var & ~flag);
1383 }
1384 #endif
1385 
1386 
1387 #ifdef ENABLE_BLE
1388 static int l2cap_send_le_signaling_packet(hci_con_handle_t handle, L2CAP_SIGNALING_COMMANDS cmd, int identifier, ...){
1389 
1390     if (!hci_can_send_acl_packet_now(handle)){
1391         log_info("l2cap_send_le_signaling_packet, cannot send");
1392         return BTSTACK_ACL_BUFFERS_FULL;
1393     }
1394 
1395     // log_info("l2cap_send_le_signaling_packet type %u", cmd);
1396     hci_reserve_packet_buffer();
1397     uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
1398     va_list argptr;
1399     va_start(argptr, identifier);
1400     uint16_t len = l2cap_create_signaling_le(acl_buffer, handle, cmd, identifier, argptr);
1401     va_end(argptr);
1402     // log_info("l2cap_send_le_signaling_packet con %u!", handle);
1403     return hci_send_acl_packet_buffer(len);
1404 }
1405 #endif
1406 
1407 uint16_t l2cap_max_mtu(void){
1408     return HCI_ACL_PAYLOAD_SIZE - L2CAP_HEADER_SIZE;
1409 }
1410 
1411 #ifdef ENABLE_BLE
1412 uint16_t l2cap_max_le_mtu(void){
1413     if (l2cap_le_custom_max_mtu != 0u) return l2cap_le_custom_max_mtu;
1414     return l2cap_max_mtu();
1415 }
1416 
1417 void l2cap_set_max_le_mtu(uint16_t max_mtu){
1418     if (max_mtu < l2cap_max_mtu()){
1419         l2cap_le_custom_max_mtu = max_mtu;
1420     }
1421 }
1422 #endif
1423 
1424 #ifdef ENABLE_CLASSIC
1425 
1426 static uint16_t l2cap_setup_options_mtu(uint8_t * config_options, uint16_t mtu){
1427     config_options[0] = L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT; // MTU
1428     config_options[1] = 2; // len param
1429     little_endian_store_16(config_options, 2, mtu);
1430     return 4;
1431 }
1432 
1433 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1434 static int l2cap_ertm_mode(l2cap_channel_t * channel){
1435     hci_connection_t * connection = hci_connection_for_handle(channel->con_handle);
1436     return ((connection->l2cap_state.information_state == L2CAP_INFORMATION_STATE_DONE)
1437         &&  (connection->l2cap_state.extended_feature_mask & 0x08));
1438 }
1439 #endif
1440 
1441 static uint16_t l2cap_setup_options_request(l2cap_channel_t * channel, uint8_t * config_options){
1442 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1443     // use ERTM options if supported by remote and channel ready to use it
1444     if (l2cap_ertm_mode(channel) && channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
1445         return l2cap_setup_options_ertm_request(channel, config_options);
1446     }
1447 #endif
1448     uint16_t mtu = channel->local_mtu;
1449     return l2cap_setup_options_mtu(config_options, mtu);
1450 }
1451 
1452 static uint16_t l2cap_setup_options_mtu_response(l2cap_channel_t * channel, uint8_t * config_options){
1453     uint16_t mtu = btstack_min(channel->local_mtu, channel->remote_mtu);
1454     return l2cap_setup_options_mtu(config_options, mtu);
1455 }
1456 
1457 static uint32_t l2cap_extended_features_mask(void){
1458     // extended features request supported, features: fixed channels, unicast connectionless data reception
1459     uint32_t features = 0x280;
1460 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1461     features |= 0x0028;
1462 #endif
1463     return features;
1464 }
1465 #endif
1466 
1467 //
1468 #ifdef ENABLE_CLASSIC
1469 
1470 // returns true if channel was finalized
1471 static bool l2cap_run_for_classic_channel(l2cap_channel_t * channel){
1472 
1473 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1474     uint8_t  config_options[18];
1475 #else
1476     uint8_t  config_options[10];
1477 #endif
1478 
1479     switch (channel->state){
1480 
1481         case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE:
1482         case L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT:
1483             if (!hci_can_send_acl_packet_now(channel->con_handle)) return false;
1484             if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND) {
1485                 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND);
1486                 l2cap_send_signaling_packet(channel->con_handle, CONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid, 1, 0);
1487             }
1488             break;
1489 
1490         case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION:
1491             if (!hci_can_send_command_packet_now()) break;
1492             // send connection request - set state first
1493             channel->state = L2CAP_STATE_WAIT_CONNECTION_COMPLETE;
1494             // BD_ADDR, Packet_Type, Page_Scan_Repetition_Mode, Reserved, Clock_Offset, Allow_Role_Switch
1495             (void)memcpy(l2cap_outgoing_classic_addr, channel->address, 6);
1496             hci_send_cmd(&hci_create_connection, channel->address, hci_usable_acl_packet_types(), 0, 0, 0, hci_get_allow_role_switch());
1497             break;
1498 
1499         case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE:
1500             if (!hci_can_send_acl_packet_now(channel->con_handle)) return false;
1501             channel->state = L2CAP_STATE_INVALID;
1502             l2cap_send_signaling_packet(channel->con_handle, CONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid, channel->reason, 0);
1503             // discard channel - l2cap_finialize_channel_close without sending l2cap close event
1504             btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
1505             l2cap_free_channel_entry(channel);
1506             channel = NULL;
1507             break;
1508 
1509         case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT:
1510             if (!hci_can_send_acl_packet_now(channel->con_handle)) return false;
1511             channel->state = L2CAP_STATE_CONFIG;
1512             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ);
1513             l2cap_send_signaling_packet(channel->con_handle, CONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid, 0, 0);
1514             break;
1515 
1516         case L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST:
1517             if (!hci_can_send_acl_packet_now(channel->con_handle)) return false;
1518             // success, start l2cap handshake
1519             channel->local_sig_id = l2cap_next_sig_id();
1520             channel->state = L2CAP_STATE_WAIT_CONNECT_RSP;
1521             l2cap_send_signaling_packet( channel->con_handle, CONNECTION_REQUEST, channel->local_sig_id, channel->psm, channel->local_cid);
1522             l2cap_start_rtx(channel);
1523             break;
1524 
1525         case L2CAP_STATE_CONFIG:
1526             if (!hci_can_send_acl_packet_now(channel->con_handle)) return false;
1527 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1528             // fallback to basic mode if ERTM requested but not not supported by remote
1529             if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
1530                 if (!l2cap_ertm_mode(channel)){
1531                     l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED);
1532                     channel->mode = L2CAP_CHANNEL_MODE_BASIC;
1533                 }
1534             }
1535 #endif
1536             if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP){
1537                 uint16_t flags = 0;
1538                 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP);
1539                 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT) {
1540                     flags = 1;
1541                 } else {
1542                     channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP);
1543                 }
1544                 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_INVALID){
1545                     channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP);
1546                     l2cap_send_signaling_packet(channel->con_handle, CONFIGURE_RESPONSE, channel->remote_sig_id, channel->remote_cid, flags, L2CAP_CONF_RESULT_UNKNOWN_OPTIONS, 0, NULL);
1547 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1548                 } else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_REJECTED){
1549                     channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_REJECTED);
1550                     channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP);
1551                     uint16_t options_size = l2cap_setup_options_ertm_response(channel, config_options);
1552                     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);
1553                 } else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM){
1554                     channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM);
1555                     channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU);
1556                     uint16_t options_size = l2cap_setup_options_ertm_response(channel, config_options);
1557                     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);
1558 #endif
1559                 } else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU){
1560                     channelStateVarClearFlag(channel,L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU);
1561                     uint16_t options_size = l2cap_setup_options_mtu_response(channel, config_options);
1562                     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);
1563                 } else {
1564                     l2cap_send_signaling_packet(channel->con_handle, CONFIGURE_RESPONSE, channel->remote_sig_id, channel->remote_cid, flags, L2CAP_CONF_RESULT_SUCCESS, 0, NULL);
1565                 }
1566                 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT);
1567             }
1568             else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ){
1569                 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ);
1570                 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_REQ);
1571                 channel->local_sig_id = l2cap_next_sig_id();
1572                 uint16_t options_size = l2cap_setup_options_request(channel, config_options);
1573                 l2cap_send_signaling_packet(channel->con_handle, CONFIGURE_REQUEST, channel->local_sig_id, channel->remote_cid, 0, options_size, &config_options);
1574                 l2cap_start_rtx(channel);
1575             }
1576             if (l2cap_channel_ready_for_open(channel)){
1577                 channel->state = L2CAP_STATE_OPEN;
1578                 l2cap_emit_channel_opened(channel, 0);  // success
1579             }
1580             break;
1581 
1582         case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE:
1583             if (!hci_can_send_acl_packet_now(channel->con_handle)) return false;
1584             channel->state = L2CAP_STATE_INVALID;
1585             l2cap_send_signaling_packet( channel->con_handle, DISCONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid);
1586             // 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 :)
1587             l2cap_finialize_channel_close(channel);  // -- remove from list
1588             channel = NULL;
1589             break;
1590 
1591         case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST:
1592             if (!hci_can_send_acl_packet_now(channel->con_handle)) return false;
1593             channel->local_sig_id = l2cap_next_sig_id();
1594             channel->state = L2CAP_STATE_WAIT_DISCONNECT;
1595             l2cap_send_signaling_packet( channel->con_handle, DISCONNECTION_REQUEST, channel->local_sig_id, channel->remote_cid, channel->local_cid);
1596             break;
1597         default:
1598             break;
1599     }
1600 
1601     // handle channel finalize on L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE and L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE
1602     return channel == NULL;
1603 }
1604 
1605 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1606 static void l2cap_run_for_classic_channel_ertm(l2cap_channel_t * channel){
1607 
1608     // ERTM mode
1609     if (channel->mode != L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) return;
1610 
1611     // check if we can still send
1612     if (channel->con_handle == HCI_CON_HANDLE_INVALID) return;
1613     if (!hci_can_send_acl_packet_now(channel->con_handle)) return;
1614 
1615     if (channel->send_supervisor_frame_receiver_ready){
1616         channel->send_supervisor_frame_receiver_ready = 0;
1617         log_info("Send S-Frame: RR %u, final %u", channel->req_seq, channel->set_final_bit_after_packet_with_poll_bit_set);
1618         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);
1619         channel->set_final_bit_after_packet_with_poll_bit_set = 0;
1620         l2cap_ertm_send_supervisor_frame(channel, control);
1621         return;
1622     }
1623     if (channel->send_supervisor_frame_receiver_ready_poll){
1624         channel->send_supervisor_frame_receiver_ready_poll = 0;
1625         log_info("Send S-Frame: RR %u with poll=1 ", channel->req_seq);
1626         uint16_t control = l2cap_encanced_control_field_for_supevisor_frame( L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY, 1, 0, channel->req_seq);
1627         l2cap_ertm_send_supervisor_frame(channel, control);
1628         return;
1629     }
1630     if (channel->send_supervisor_frame_receiver_not_ready){
1631         channel->send_supervisor_frame_receiver_not_ready = 0;
1632         log_info("Send S-Frame: RNR %u", channel->req_seq);
1633         uint16_t control = l2cap_encanced_control_field_for_supevisor_frame( L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY, 0, 0, channel->req_seq);
1634         l2cap_ertm_send_supervisor_frame(channel, control);
1635         return;
1636     }
1637     if (channel->send_supervisor_frame_reject){
1638         channel->send_supervisor_frame_reject = 0;
1639         log_info("Send S-Frame: REJ %u", channel->req_seq);
1640         uint16_t control = l2cap_encanced_control_field_for_supevisor_frame( L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT, 0, 0, channel->req_seq);
1641         l2cap_ertm_send_supervisor_frame(channel, control);
1642         return;
1643     }
1644     if (channel->send_supervisor_frame_selective_reject){
1645         channel->send_supervisor_frame_selective_reject = 0;
1646         log_info("Send S-Frame: SREJ %u", channel->expected_tx_seq);
1647         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);
1648         channel->set_final_bit_after_packet_with_poll_bit_set = 0;
1649         l2cap_ertm_send_supervisor_frame(channel, control);
1650         return;
1651     }
1652 
1653     if (channel->srej_active){
1654         int i;
1655         for (i=0;i<channel->num_tx_buffers;i++){
1656             l2cap_ertm_tx_packet_state_t * tx_state = &channel->tx_packets_state[i];
1657             if (tx_state->retransmission_requested) {
1658                 tx_state->retransmission_requested = 0;
1659                 uint8_t final = channel->set_final_bit_after_packet_with_poll_bit_set;
1660                 channel->set_final_bit_after_packet_with_poll_bit_set = 0;
1661                 l2cap_ertm_send_information_frame(channel, i, final);
1662                 break;
1663             }
1664         }
1665         if (i == channel->num_tx_buffers){
1666             // no retransmission request found
1667             channel->srej_active = 0;
1668         } else {
1669             // packet was sent
1670             return;
1671         }
1672     }
1673 }
1674 #endif /* ERTM */
1675 #endif /* Classic */
1676 
1677 static void l2cap_run_signaling_response(void) {
1678 
1679     // check pending signaling responses
1680     while (signaling_responses_pending){
1681 
1682         hci_con_handle_t handle = signaling_responses[0].handle;
1683 
1684         if (!hci_can_send_acl_packet_now(handle)) break;
1685 
1686         uint8_t  sig_id        = signaling_responses[0].sig_id;
1687         uint8_t  response_code = signaling_responses[0].code;
1688         uint16_t result        = signaling_responses[0].data;  // CONNECTION_REQUEST, COMMAND_REJECT
1689 #ifdef ENABLE_CLASSIC
1690         uint16_t info_type     = signaling_responses[0].data;  // INFORMATION_REQUEST
1691         uint16_t source_cid    = signaling_responses[0].cid;   // CONNECTION_REQUEST
1692 #endif
1693 
1694         // remove first item before sending (to avoid sending response mutliple times)
1695         signaling_responses_pending--;
1696         int i;
1697         for (i=0; i < signaling_responses_pending; i++){
1698             (void)memcpy(&signaling_responses[i],
1699                          &signaling_responses[i + 1],
1700                          sizeof(l2cap_signaling_response_t));
1701         }
1702 
1703         switch (response_code){
1704 #ifdef ENABLE_CLASSIC
1705             case CONNECTION_REQUEST:
1706                 l2cap_send_signaling_packet(handle, CONNECTION_RESPONSE, sig_id, source_cid, 0, result, 0);
1707                 // also disconnect if result is 0x0003 - security blocked
1708                 if (result == 0x0003){
1709                     hci_disconnect_security_block(handle);
1710                 }
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("L2CAP_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("L2CAP_DISCONNECT local_cid 0x%x reason 0x%x", local_cid, reason);
2079     // find channel for local_cid
2080     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
2081     if (channel) {
2082         channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2083     }
2084     // process
2085     l2cap_run();
2086 }
2087 
2088 static void l2cap_handle_connection_failed_for_addr(bd_addr_t address, uint8_t status){
2089     // mark all channels before emitting open events as these could trigger new connetion requests to the same device
2090     btstack_linked_list_iterator_t it;
2091     btstack_linked_list_iterator_init(&it, &l2cap_channels);
2092     while (btstack_linked_list_iterator_has_next(&it)){
2093         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2094         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2095         if (bd_addr_cmp( channel->address, address) != 0) continue;
2096         // channel for this address found
2097         switch (channel->state){
2098             case L2CAP_STATE_WAIT_CONNECTION_COMPLETE:
2099             case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION:
2100                 channel->state = L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD;
2101                 break;
2102             default:
2103                 break;
2104         }
2105     }
2106     // emit and free marked entries. restart loop to deal with list changes
2107     int done = 0;
2108     while (!done) {
2109         done = 1;
2110         btstack_linked_list_iterator_init(&it, &l2cap_channels);
2111         while (btstack_linked_list_iterator_has_next(&it)){
2112             l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2113             if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2114             if (channel->state == L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD){
2115                 done = 0;
2116                 // failure, forward error code
2117                 l2cap_handle_channel_open_failed(channel, status);
2118                 // discard channel
2119                 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
2120                 l2cap_free_channel_entry(channel);
2121                 break;
2122             }
2123         }
2124     }
2125 
2126 }
2127 
2128 static void l2cap_handle_connection_success_for_addr(bd_addr_t address, hci_con_handle_t handle){
2129     btstack_linked_list_iterator_t it;
2130     btstack_linked_list_iterator_init(&it, &l2cap_channels);
2131     while (btstack_linked_list_iterator_has_next(&it)){
2132         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2133         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2134         if ( ! bd_addr_cmp( channel->address, address) ){
2135             l2cap_handle_connection_complete(handle, channel);
2136         }
2137     }
2138     // process
2139     l2cap_run();
2140 }
2141 #endif
2142 
2143 static bool l2cap_channel_ready_to_send(l2cap_channel_t * channel){
2144     switch (channel->channel_type){
2145 #ifdef ENABLE_CLASSIC
2146         case L2CAP_CHANNEL_TYPE_CLASSIC:
2147             if (channel->state != L2CAP_STATE_OPEN) return false;
2148 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2149             // send if we have more data and remote windows isn't full yet
2150             if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) {
2151                 if (channel->unacked_frames >= btstack_min(channel->num_stored_tx_frames, channel->remote_tx_window_size)) return false;
2152                 return hci_can_send_acl_classic_packet_now() != 0;
2153             }
2154 #endif
2155             if (!channel->waiting_for_can_send_now) return false;
2156             return (hci_can_send_acl_classic_packet_now() != 0);
2157         case L2CAP_CHANNEL_TYPE_CONNECTIONLESS:
2158             if (!channel->waiting_for_can_send_now) return false;
2159             return hci_can_send_acl_classic_packet_now() != 0;
2160 #endif
2161 #ifdef ENABLE_BLE
2162         case L2CAP_CHANNEL_TYPE_LE_FIXED:
2163             if (!channel->waiting_for_can_send_now) return false;
2164             return hci_can_send_acl_le_packet_now() != 0;
2165 #ifdef ENABLE_LE_DATA_CHANNELS
2166         case L2CAP_CHANNEL_TYPE_LE_DATA_CHANNEL:
2167             if (channel->state != L2CAP_STATE_OPEN) return false;
2168             if (channel->send_sdu_buffer == NULL) return false;
2169             if (channel->credits_outgoing == 0u) return false;
2170             return hci_can_send_acl_le_packet_now() != 0;
2171 #endif
2172 #endif
2173         default:
2174             return false;
2175     }
2176 }
2177 
2178 static void l2cap_channel_trigger_send(l2cap_channel_t * channel){
2179     switch (channel->channel_type){
2180 #ifdef ENABLE_CLASSIC
2181         case L2CAP_CHANNEL_TYPE_CLASSIC:
2182 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2183             if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) {
2184                 l2cap_ertm_channel_send_information_frame(channel);
2185                 return;
2186             }
2187 #endif
2188             channel->waiting_for_can_send_now = 0;
2189             l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid);
2190             break;
2191         case L2CAP_CHANNEL_TYPE_CONNECTIONLESS:
2192             channel->waiting_for_can_send_now = 0;
2193             l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid);
2194             break;
2195 #endif
2196 #ifdef ENABLE_BLE
2197         case L2CAP_CHANNEL_TYPE_LE_FIXED:
2198             channel->waiting_for_can_send_now = 0;
2199             l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid);
2200             break;
2201 #ifdef ENABLE_LE_DATA_CHANNELS
2202         case L2CAP_CHANNEL_TYPE_LE_DATA_CHANNEL:
2203             l2cap_le_send_pdu(channel);
2204             break;
2205 #endif
2206 #endif
2207         default:
2208             break;
2209     }
2210 }
2211 
2212 static void l2cap_notify_channel_can_send(void){
2213     bool done = false;
2214     while (!done){
2215         done = true;
2216         btstack_linked_list_iterator_t it;
2217         btstack_linked_list_iterator_init(&it, &l2cap_channels);
2218         while (btstack_linked_list_iterator_has_next(&it)){
2219             l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2220             bool ready = l2cap_channel_ready_to_send(channel);
2221             if (!ready) continue;
2222 
2223             // requeue channel for fairness
2224             btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
2225             btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel);
2226 
2227             // trigger sending
2228             l2cap_channel_trigger_send(channel);
2229 
2230             // exit inner loop as we just broke the iterator, but try again
2231             done = false;
2232             break;
2233         }
2234     }
2235 }
2236 
2237 #ifdef L2CAP_USES_CHANNELS
2238 
2239 static int l2cap_send_open_failed_on_hci_disconnect(l2cap_channel_t * channel){
2240     // open cannot fail for for incoming connections
2241     if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) return 0;
2242 
2243     // check state
2244     switch (channel->state){
2245         case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION:
2246         case L2CAP_STATE_WAIT_CONNECTION_COMPLETE:
2247         case L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES:
2248         case L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE:
2249         case L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT:
2250         case L2CAP_STATE_WAIT_OUTGOING_EXTENDED_FEATURES:
2251         case L2CAP_STATE_WAIT_CONNECT_RSP:
2252         case L2CAP_STATE_CONFIG:
2253         case L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST:
2254         case L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST:
2255         case L2CAP_STATE_WAIT_LE_CONNECTION_RESPONSE:
2256         case L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD:
2257             return 1;
2258 
2259         case L2CAP_STATE_OPEN:
2260         case L2CAP_STATE_CLOSED:
2261         case L2CAP_STATE_WAIT_INCOMING_EXTENDED_FEATURES:
2262         case L2CAP_STATE_WAIT_DISCONNECT:
2263         case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_INSUFFICIENT_SECURITY:
2264         case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE:
2265         case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT:
2266         case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST:
2267         case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE:
2268         case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_DECLINE:
2269         case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_ACCEPT:
2270         case L2CAP_STATE_INVALID:
2271         case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE:
2272             return 0;
2273 
2274         default:
2275             // get a "warning" about new states
2276             btstack_assert(false);
2277             return 0;
2278     }
2279 }
2280 #endif
2281 
2282 #ifdef ENABLE_CLASSIC
2283 static void l2cap_handle_hci_disconnect_event(l2cap_channel_t * channel){
2284     if (l2cap_send_open_failed_on_hci_disconnect(channel)){
2285         l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_BASEBAND_DISCONNECT);
2286     } else {
2287         l2cap_handle_channel_closed(channel);
2288     }
2289     l2cap_free_channel_entry(channel);
2290 }
2291 #endif
2292 
2293 #ifdef ENABLE_LE_DATA_CHANNELS
2294 static void l2cap_handle_hci_le_disconnect_event(l2cap_channel_t * channel){
2295     if (l2cap_send_open_failed_on_hci_disconnect(channel)){
2296         l2cap_emit_le_channel_opened(channel, L2CAP_CONNECTION_BASEBAND_DISCONNECT);
2297     } else {
2298         l2cap_emit_le_channel_closed(channel);
2299     }
2300     l2cap_free_channel_entry(channel);
2301 }
2302 #endif
2303 
2304 #ifdef ENABLE_CLASSIC
2305 static void l2cap_check_classic_timeout(hci_con_handle_t handle){
2306     if (gap_get_connection_type(handle) != GAP_CONNECTION_ACL) {
2307         return;
2308     }
2309     if (hci_authentication_active_for_handle(handle)) {
2310         return;
2311     }
2312     bool hci_con_used = false;
2313     btstack_linked_list_iterator_t it;
2314     btstack_linked_list_iterator_init(&it, &l2cap_channels);
2315     while (btstack_linked_list_iterator_has_next(&it)){
2316         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2317         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2318         if (channel->con_handle != handle) continue;
2319         hci_con_used = true;
2320         break;
2321     }
2322     if (hci_con_used) {
2323         return;
2324     }
2325     if (!hci_can_send_command_packet_now()) {
2326         return;
2327     }
2328     hci_send_cmd(&hci_disconnect, handle, 0x13); // remote closed connection
2329 }
2330 static void l2cap_handle_features_complete(hci_con_handle_t handle){
2331     hci_connection_t * hci_connection = hci_connection_for_handle(handle);
2332     if (hci_connection == NULL) {
2333         return;
2334     };
2335     if ((hci_connection->bonding_flags & BONDING_RECEIVED_REMOTE_FEATURES) == 0) {
2336         return;
2337     }
2338     btstack_linked_list_iterator_t it;
2339     btstack_linked_list_iterator_init(&it, &l2cap_channels);
2340     while (btstack_linked_list_iterator_has_next(&it)){
2341         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2342         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2343         if (channel->con_handle != handle) continue;
2344         log_info("remote supported features, channel %p, cid %04x - state %u", channel, channel->local_cid, channel->state);
2345         l2cap_handle_remote_supported_features_received(channel);
2346     }
2347 }
2348 static void l2cap_handle_security_level(hci_con_handle_t handle, gap_security_level_t actual_level){
2349     log_info("l2cap - security level update for handle 0x%04x", handle);
2350     btstack_linked_list_iterator_t it;
2351     btstack_linked_list_iterator_init(&it, &l2cap_channels);
2352     while (btstack_linked_list_iterator_has_next(&it)){
2353         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2354         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2355         if (channel->con_handle != handle) continue;
2356 
2357          gap_security_level_t required_level = channel->required_security_level;
2358 
2359         log_info("channel %p, cid %04x - state %u: actual %u >= required %u?", channel, channel->local_cid, channel->state, actual_level, required_level);
2360 
2361         switch (channel->state){
2362             case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE:
2363                 if ((actual_level >= required_level) &&
2364                         ((gap_get_secure_connections_only_mode() == false) || gap_secure_connection(channel->con_handle))){
2365 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2366                     // we need to know if ERTM is supported before sending a config response
2367                     hci_connection_t * connection = hci_connection_for_handle(channel->con_handle);
2368                     if (connection->l2cap_state.information_state != L2CAP_INFORMATION_STATE_DONE){
2369                         connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST;
2370                         channel->state = L2CAP_STATE_WAIT_INCOMING_EXTENDED_FEATURES;
2371                         break;
2372                     }
2373 #endif
2374                     channel->state = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT;
2375                     l2cap_emit_incoming_connection(channel);
2376                 } else {
2377                     channel->reason = 0x0003; // security block
2378                     channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE;
2379                 }
2380                 break;
2381 
2382             case L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE:
2383                 if (actual_level >= required_level){
2384                     l2cap_ready_to_connect(channel);
2385                 } else {
2386                     // disconnnect, authentication not good enough
2387                     hci_disconnect_security_block(handle);
2388                 }
2389                 break;
2390 
2391             default:
2392                 break;
2393         }
2394     }
2395 }
2396 #endif
2397 
2398 #ifdef L2CAP_USES_CHANNELS
2399 static void l2cap_handle_disconnection_complete(hci_con_handle_t handle){
2400     // collect channels to close
2401     btstack_linked_list_t channels_to_close = NULL;
2402     btstack_linked_list_iterator_t it;
2403     btstack_linked_list_iterator_init(&it, &l2cap_channels);
2404     while (btstack_linked_list_iterator_has_next(&it)) {
2405         l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2406         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2407         if (channel->con_handle != handle) continue;
2408         btstack_linked_list_iterator_remove(&it);
2409         btstack_linked_list_add(&channels_to_close, (btstack_linked_item_t *) channel);
2410     }
2411     // send l2cap open failed or closed events for all channels on this handle and free them
2412     btstack_linked_list_iterator_init(&it, &channels_to_close);
2413     while (btstack_linked_list_iterator_has_next(&it)) {
2414         l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2415         btstack_linked_list_iterator_remove(&it);
2416         switch(channel->channel_type){
2417 #ifdef ENABLE_CLASSIC
2418             case L2CAP_CHANNEL_TYPE_CLASSIC:
2419                 l2cap_handle_hci_disconnect_event(channel);
2420                 break;
2421 #endif
2422 #ifdef ENABLE_LE_DATA_CHANNELS
2423             case L2CAP_CHANNEL_TYPE_LE_DATA_CHANNEL:
2424                 l2cap_handle_hci_le_disconnect_event(channel);
2425                 break;
2426 #endif
2427             default:
2428                 break;
2429         }
2430     }
2431 }
2432 #endif
2433 
2434 static void l2cap_hci_event_handler(uint8_t packet_type, uint16_t cid, uint8_t *packet, uint16_t size){
2435 
2436     UNUSED(packet_type); // ok: registered with hci_event_callback_registration
2437     UNUSED(cid);         // ok: there is no channel
2438     UNUSED(size);        // ok: fixed format events read from HCI buffer
2439 
2440 #ifdef ENABLE_CLASSIC
2441     bd_addr_t address;
2442     gap_security_level_t security_level;
2443 #endif
2444 #ifdef L2CAP_USES_CHANNELS
2445     hci_con_handle_t handle;
2446 #endif
2447 
2448     switch(hci_event_packet_get_type(packet)){
2449 
2450         // Notify channel packet handler if they can send now
2451         case HCI_EVENT_TRANSPORT_PACKET_SENT:
2452         case HCI_EVENT_NUMBER_OF_COMPLETED_PACKETS:
2453         case BTSTACK_EVENT_NR_CONNECTIONS_CHANGED:
2454             l2cap_run();    // try sending signaling packets first
2455             l2cap_notify_channel_can_send();
2456             break;
2457 
2458         case HCI_EVENT_COMMAND_STATUS:
2459 #ifdef ENABLE_CLASSIC
2460             // check command status for create connection for errors
2461             if (HCI_EVENT_IS_COMMAND_STATUS(packet, hci_create_connection)){
2462                 // cache outgoing address and reset
2463                 (void)memcpy(address, l2cap_outgoing_classic_addr, 6);
2464                 memset(l2cap_outgoing_classic_addr, 0, 6);
2465                 // error => outgoing connection failed
2466                 uint8_t status = hci_event_command_status_get_status(packet);
2467                 if (status){
2468                     l2cap_handle_connection_failed_for_addr(address, status);
2469                 }
2470             }
2471 #endif
2472             l2cap_run();    // try sending signaling packets first
2473             break;
2474 
2475 #ifdef ENABLE_CLASSIC
2476         // handle connection complete events
2477         case HCI_EVENT_CONNECTION_COMPLETE:
2478             reverse_bd_addr(&packet[5], address);
2479             if (packet[2] == 0){
2480                 handle = little_endian_read_16(packet, 3);
2481                 l2cap_handle_connection_success_for_addr(address, handle);
2482             } else {
2483                 l2cap_handle_connection_failed_for_addr(address, packet[2]);
2484             }
2485             break;
2486 
2487         // handle successful create connection cancel command
2488         case HCI_EVENT_COMMAND_COMPLETE:
2489             if (HCI_EVENT_IS_COMMAND_COMPLETE(packet, hci_create_connection_cancel)) {
2490                 if (packet[5] == 0){
2491                     reverse_bd_addr(&packet[6], address);
2492                     // CONNECTION TERMINATED BY LOCAL HOST (0X16)
2493                     l2cap_handle_connection_failed_for_addr(address, 0x16);
2494                 }
2495             }
2496             l2cap_run();    // try sending signaling packets first
2497             break;
2498 #endif
2499 
2500 #ifdef L2CAP_USES_CHANNELS
2501         // handle disconnection complete events
2502         case HCI_EVENT_DISCONNECTION_COMPLETE:
2503             handle = little_endian_read_16(packet, 3);
2504             l2cap_handle_disconnection_complete(handle);
2505             break;
2506 #endif
2507 
2508         // HCI Connection Timeouts
2509 #ifdef ENABLE_CLASSIC
2510         case L2CAP_EVENT_TIMEOUT_CHECK:
2511             handle = little_endian_read_16(packet, 2);
2512             l2cap_check_classic_timeout(handle);
2513             break;
2514 
2515         case HCI_EVENT_READ_REMOTE_SUPPORTED_FEATURES_COMPLETE:
2516         case HCI_EVENT_READ_REMOTE_EXTENDED_FEATURES_COMPLETE:
2517             handle = little_endian_read_16(packet, 3);
2518             l2cap_handle_features_complete(handle);
2519             break;
2520 
2521         case GAP_EVENT_SECURITY_LEVEL:
2522             handle = little_endian_read_16(packet, 2);
2523             security_level = (gap_security_level_t) packet[4];
2524             l2cap_handle_security_level(handle, security_level);
2525             break;
2526 #endif
2527         default:
2528             break;
2529     }
2530 
2531     l2cap_run();
2532 }
2533 
2534 static void l2cap_register_signaling_response(hci_con_handle_t handle, uint8_t code, uint8_t sig_id, uint16_t cid, uint16_t data){
2535     // Vol 3, Part A, 4.3: "The DCID and SCID fields shall be ignored when the result field indi- cates the connection was refused."
2536     if (signaling_responses_pending < NR_PENDING_SIGNALING_RESPONSES) {
2537         signaling_responses[signaling_responses_pending].handle = handle;
2538         signaling_responses[signaling_responses_pending].code = code;
2539         signaling_responses[signaling_responses_pending].sig_id = sig_id;
2540         signaling_responses[signaling_responses_pending].cid = cid;
2541         signaling_responses[signaling_responses_pending].data = data;
2542         signaling_responses_pending++;
2543         l2cap_run();
2544     }
2545 }
2546 
2547 #ifdef ENABLE_CLASSIC
2548 static void l2cap_handle_disconnect_request(l2cap_channel_t *channel, uint16_t identifier){
2549     switch (channel->state){
2550         case L2CAP_STATE_CONFIG:
2551         case L2CAP_STATE_OPEN:
2552         case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST:
2553         case L2CAP_STATE_WAIT_DISCONNECT:
2554             break;
2555         default:
2556             // ignore in other states
2557             return;
2558     }
2559 
2560     channel->remote_sig_id = identifier;
2561     channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE;
2562     l2cap_run();
2563 }
2564 
2565 static void l2cap_handle_connection_request(hci_con_handle_t handle, uint8_t sig_id, uint16_t psm, uint16_t source_cid){
2566 
2567     // log_info("l2cap_handle_connection_request for handle %u, psm %u cid 0x%02x", handle, psm, source_cid);
2568     l2cap_service_t *service = l2cap_get_service(psm);
2569     if (!service) {
2570         // 0x0002 PSM not supported
2571         l2cap_register_signaling_response(handle, CONNECTION_REQUEST, sig_id, source_cid, 0x0002);
2572         return;
2573     }
2574 
2575     hci_connection_t * hci_connection = hci_connection_for_handle( handle );
2576     if (!hci_connection) {
2577         //
2578         log_error("no hci_connection for handle %u", handle);
2579         return;
2580     }
2581 
2582     // Core V5.2, Vol 3, Part C, 5.2.2.2 - Security Mode 4
2583     //   If the remote device has indicated support for Secure Simple Pairing, a channel establishment request is
2584     //   received for a service other than SDP, and encryption has not yet been enabled, then the local device shall
2585     //   disconnect the ACL link with error code 0x05 - Authentication Failure.
2586     if ((gap_get_security_mode() == GAP_SECURITY_MODE_4) && gap_ssp_supported_on_both_sides(handle) && (psm != PSM_SDP) && (gap_encryption_key_size(handle) == 0)){
2587         hci_disconnect_security_block(handle);
2588         return;
2589     }
2590 
2591     // alloc structure
2592     // log_info("l2cap_handle_connection_request register channel");
2593     l2cap_channel_t * channel = l2cap_create_channel_entry(service->packet_handler, L2CAP_CHANNEL_TYPE_CLASSIC, hci_connection->address, BD_ADDR_TYPE_ACL,
2594     psm, service->mtu, service->required_security_level);
2595     if (!channel){
2596         // 0x0004 No resources available
2597         l2cap_register_signaling_response(handle, CONNECTION_REQUEST, sig_id, source_cid, 0x0004);
2598         return;
2599     }
2600 
2601     channel->con_handle = handle;
2602     channel->remote_cid = source_cid;
2603     channel->remote_sig_id = sig_id;
2604 
2605     // limit local mtu to max acl packet length - l2cap header
2606     if (channel->local_mtu > l2cap_max_mtu()) {
2607         channel->local_mtu = l2cap_max_mtu();
2608     }
2609 
2610     // set initial state
2611     channel->state =      L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE;
2612     channel->state_var  = (L2CAP_CHANNEL_STATE_VAR) (L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND | L2CAP_CHANNEL_STATE_VAR_INCOMING);
2613 
2614     // add to connections list
2615     btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel);
2616 
2617     // assert security requirements
2618     gap_request_security_level(handle, channel->required_security_level);
2619 }
2620 
2621 void l2cap_accept_connection(uint16_t local_cid){
2622     log_info("L2CAP_ACCEPT_CONNECTION local_cid 0x%x", local_cid);
2623     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
2624     if (!channel) {
2625         log_error("l2cap_accept_connection called but local_cid 0x%x not found", local_cid);
2626         return;
2627     }
2628 
2629 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2630     // configure L2CAP Basic mode
2631     channel->mode  = L2CAP_CHANNEL_MODE_BASIC;
2632 #endif
2633 
2634     channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT;
2635 
2636     // process
2637     l2cap_run();
2638 }
2639 
2640 void l2cap_decline_connection(uint16_t local_cid){
2641     log_info("L2CAP_DECLINE_CONNECTION local_cid 0x%x", local_cid);
2642     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid( local_cid);
2643     if (!channel) {
2644         log_error( "l2cap_decline_connection called but local_cid 0x%x not found", local_cid);
2645         return;
2646     }
2647     channel->state  = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE;
2648     channel->reason = 0x04; // no resources available
2649     l2cap_run();
2650 }
2651 
2652 // @pre command len is valid, see check in l2cap_signaling_handler_channel
2653 static void l2cap_signaling_handle_configure_request(l2cap_channel_t *channel, uint8_t *command){
2654 
2655 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2656     uint8_t use_fcs = 1;
2657 #endif
2658 
2659     channel->remote_sig_id = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET];
2660 
2661     uint16_t flags = little_endian_read_16(command, 6);
2662     if (flags & 1) {
2663         channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT);
2664     }
2665 
2666     // accept the other's configuration options
2667     uint16_t end_pos = 4 + little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
2668     uint16_t pos     = 8;
2669     while (pos < end_pos){
2670         uint8_t option_hint = command[pos] >> 7;
2671         uint8_t option_type = command[pos] & 0x7f;
2672         // log_info("l2cap cid %u, hint %u, type %u", channel->local_cid, option_hint, option_type);
2673         pos++;
2674         uint8_t length = command[pos++];
2675         // MTU { type(8): 1, len(8):2, MTU(16) }
2676         if ((option_type == L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT) && (length == 2)){
2677             channel->remote_mtu = little_endian_read_16(command, pos);
2678             log_info("Remote MTU %u", channel->remote_mtu);
2679             if (channel->remote_mtu > l2cap_max_mtu()){
2680                 log_info("Remote MTU %u larger than outgoing buffer, only using MTU = %u", channel->remote_mtu, l2cap_max_mtu());
2681                 channel->remote_mtu = l2cap_max_mtu();
2682             }
2683             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU);
2684         }
2685         // Flush timeout { type(8):2, len(8): 2, Flush Timeout(16)}
2686         if ((option_type == L2CAP_CONFIG_OPTION_TYPE_FLUSH_TIMEOUT) && (length == 2)){
2687             channel->flush_timeout = little_endian_read_16(command, pos);
2688             log_info("Flush timeout: %u ms", channel->flush_timeout);
2689         }
2690 
2691 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2692         // Retransmission and Flow Control Option
2693         if (option_type == L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL && length == 9){
2694             l2cap_channel_mode_t mode = (l2cap_channel_mode_t) command[pos];
2695             switch(channel->mode){
2696                 case L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION:
2697                     // Store remote config
2698                     channel->remote_tx_window_size = command[pos+1];
2699                     channel->remote_max_transmit   = command[pos+2];
2700                     channel->remote_retransmission_timeout_ms = little_endian_read_16(command, pos + 3);
2701                     channel->remote_monitor_timeout_ms = little_endian_read_16(command, pos + 5);
2702                     channel->remote_mps = little_endian_read_16(command, pos + 7);
2703                     log_info("FC&C config: tx window: %u, max transmit %u, retrans timeout %u, monitor timeout %u, mps %u",
2704                         channel->remote_tx_window_size,
2705                         channel->remote_max_transmit,
2706                         channel->remote_retransmission_timeout_ms,
2707                         channel->remote_monitor_timeout_ms,
2708                         channel->remote_mps);
2709                     // If ERTM mandatory, but remote doens't offer ERTM -> disconnect
2710                     if (channel->ertm_mandatory && mode != L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
2711                         channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2712                     } else {
2713                         channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM);
2714                     }
2715                     break;
2716                 case L2CAP_CHANNEL_MODE_BASIC:
2717                     switch (mode){
2718                         case L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION:
2719                             // remote asks for ERTM, but we want basic mode. disconnect if this happens a second time
2720                             if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_BASIC_FALLBACK_TRIED){
2721                                 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2722                             }
2723                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_BASIC_FALLBACK_TRIED);
2724                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_REJECTED);
2725                             break;
2726                         default: // case L2CAP_CHANNEL_MODE_BASIC:
2727                             // TODO store and evaluate configuration
2728                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM);
2729                             break;
2730                     }
2731                     break;
2732                 default:
2733                     break;
2734             }
2735         }
2736         if (option_type == L2CAP_CONFIG_OPTION_TYPE_FRAME_CHECK_SEQUENCE && length == 1){
2737             use_fcs = command[pos];
2738         }
2739 #endif
2740         // check for unknown options
2741         if ((option_hint == 0) && ((option_type < L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT) || (option_type > L2CAP_CONFIG_OPTION_TYPE_EXTENDED_WINDOW_SIZE))){
2742             log_info("l2cap cid %u, unknown options", channel->local_cid);
2743             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_INVALID);
2744         }
2745         pos += length;
2746     }
2747 
2748 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2749         // "FCS" has precedence over "No FCS"
2750         uint8_t update = channel->fcs_option || use_fcs;
2751         log_info("local fcs: %u, remote fcs: %u -> %u", channel->fcs_option, use_fcs, update);
2752         channel->fcs_option = update;
2753         // If ERTM mandatory, but remote didn't send Retransmission and Flowcontrol options -> disconnect
2754         if (((channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM) == 0) & (channel->ertm_mandatory)){
2755             channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2756         }
2757 #endif
2758 }
2759 
2760 // @pre command len is valid, see check in l2cap_signaling_handler_channel
2761 static void l2cap_signaling_handle_configure_response(l2cap_channel_t *channel, uint8_t result, uint8_t *command){
2762     log_info("l2cap_signaling_handle_configure_response");
2763 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2764     uint16_t end_pos = 4 + little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
2765     uint16_t pos     = 10;
2766     while (pos < end_pos){
2767         uint8_t option_hint = command[pos] >> 7;
2768         uint8_t option_type = command[pos] & 0x7f;
2769         // log_info("l2cap cid %u, hint %u, type %u", channel->local_cid, option_hint, option_type);
2770         pos++;
2771         uint8_t length = command[pos++];
2772 
2773         // Retransmission and Flow Control Option
2774         if (option_type == L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL && length == 9){
2775             switch (channel->mode){
2776                 case L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION:
2777                     if (channel->ertm_mandatory){
2778                         // ??
2779                     } else {
2780                         // On 'Reject - Unacceptable Parameters' to our optional ERTM request, fall back to BASIC mode
2781                         if (result == L2CAP_CONF_RESULT_UNACCEPTABLE_PARAMETERS){
2782                             l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED);
2783                             channel->mode = L2CAP_CHANNEL_MODE_BASIC;
2784                         }
2785                     }
2786                     break;
2787                 case L2CAP_CHANNEL_MODE_BASIC:
2788                     if (result == L2CAP_CONF_RESULT_UNACCEPTABLE_PARAMETERS){
2789                         // On 'Reject - Unacceptable Parameters' to our Basic mode request, disconnect
2790                         channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2791                     }
2792                     break;
2793                 default:
2794                     break;
2795             }
2796         }
2797 
2798         // check for unknown options
2799         if (option_hint == 0 && (option_type < L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT || option_type > L2CAP_CONFIG_OPTION_TYPE_EXTENDED_WINDOW_SIZE)){
2800             log_info("l2cap cid %u, unknown options", channel->local_cid);
2801             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_INVALID);
2802         }
2803 
2804         pos += length;
2805     }
2806 #else
2807     UNUSED(channel);  // ok: no code
2808     UNUSED(result);   // ok: no code
2809     UNUSED(command);  // ok: no code
2810 #endif
2811 }
2812 
2813 static int l2cap_channel_ready_for_open(l2cap_channel_t *channel){
2814     // log_info("l2cap_channel_ready_for_open 0x%02x", channel->state_var);
2815     if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_RSP) == 0) return 0;
2816     if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP) == 0) return 0;
2817     // addition check that fixes re-entrance issue causing l2cap event channel opened twice
2818     if (channel->state == L2CAP_STATE_OPEN) return 0;
2819     return 1;
2820 }
2821 
2822 
2823 // @pre command len is valid, see check in l2cap_signaling_handler_dispatch
2824 static void l2cap_signaling_handler_channel(l2cap_channel_t *channel, uint8_t *command){
2825 
2826     uint8_t  code       = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET];
2827     uint8_t  identifier = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET];
2828     uint16_t cmd_len    = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
2829     uint16_t result = 0;
2830 
2831     log_info("L2CAP signaling handler code %u, state %u", code, channel->state);
2832 
2833     // handle DISCONNECT REQUESTS seperately
2834     if (code == DISCONNECTION_REQUEST){
2835         l2cap_handle_disconnect_request(channel, identifier);
2836         return;
2837     }
2838 
2839     // @STATEMACHINE(l2cap)
2840     switch (channel->state) {
2841 
2842         case L2CAP_STATE_WAIT_CONNECT_RSP:
2843             switch (code){
2844                 case CONNECTION_RESPONSE:
2845                     if (cmd_len < 8){
2846                         // command imcomplete
2847                         l2cap_register_signaling_response(channel->con_handle, COMMAND_REJECT, identifier, 0, L2CAP_REJ_CMD_UNKNOWN);
2848                         break;
2849                     }
2850                     l2cap_stop_rtx(channel);
2851                     result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4);
2852                     switch (result) {
2853                         case 0:
2854                             // successful connection
2855                             channel->remote_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
2856                             channel->state = L2CAP_STATE_CONFIG;
2857                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ);
2858                             break;
2859                         case 1:
2860                             // connection pending. get some coffee, but start the ERTX
2861                             l2cap_start_ertx(channel);
2862                             break;
2863                         default:
2864                             // channel closed
2865                             channel->state = L2CAP_STATE_CLOSED;
2866                             // map l2cap connection response result to BTstack status enumeration
2867                             l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_SUCCESSFUL + result);
2868 
2869                             // drop link key if security block
2870                             if ((L2CAP_CONNECTION_RESPONSE_RESULT_SUCCESSFUL + result) == L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY){
2871                                 gap_drop_link_key_for_bd_addr(channel->address);
2872                             }
2873 
2874                             // discard channel
2875                             btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
2876                             l2cap_free_channel_entry(channel);
2877                             break;
2878                     }
2879                     break;
2880 
2881                 default:
2882                     //@TODO: implement other signaling packets
2883                     break;
2884             }
2885             break;
2886 
2887         case L2CAP_STATE_CONFIG:
2888             switch (code) {
2889                 case CONFIGURE_REQUEST:
2890                     if (cmd_len < 4){
2891                         // command incomplete
2892                         l2cap_register_signaling_response(channel->con_handle, COMMAND_REJECT, identifier, 0, L2CAP_REJ_CMD_UNKNOWN);
2893                         break;
2894                     }
2895                     channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP);
2896                     l2cap_signaling_handle_configure_request(channel, command);
2897                     if (!(channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT)){
2898                         // only done if continuation not set
2899                         channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_REQ);
2900                     }
2901                     break;
2902                 case CONFIGURE_RESPONSE:
2903                     if (cmd_len < 6){
2904                         // command incomplete
2905                         l2cap_register_signaling_response(channel->con_handle, COMMAND_REJECT, identifier, 0, L2CAP_REJ_CMD_UNKNOWN);
2906                         break;
2907                     }
2908                     result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4);
2909                     l2cap_stop_rtx(channel);
2910                     l2cap_signaling_handle_configure_response(channel, result, command);
2911                     switch (result){
2912                         case 0: // success
2913                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_RSP);
2914                             break;
2915                         case 4: // pending
2916                             l2cap_start_ertx(channel);
2917                             break;
2918                         default:
2919 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2920                             if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION && channel->ertm_mandatory){
2921                                 // remote does not offer ertm but it's required
2922                                 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2923                                 break;
2924                             }
2925 #endif
2926                             // retry on negative result
2927                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ);
2928                             break;
2929                     }
2930                     break;
2931                 default:
2932                     break;
2933             }
2934             if (l2cap_channel_ready_for_open(channel)){
2935 
2936 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2937                 // assert that packet can be stored in fragment buffers in ertm
2938                 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
2939                     uint16_t effective_mps = btstack_min(channel->remote_mps, channel->local_mps);
2940                     uint16_t usable_mtu = channel->num_tx_buffers == 1 ? effective_mps : channel->num_tx_buffers * effective_mps - 2;
2941                     if (usable_mtu < channel->remote_mtu){
2942                         log_info("Remote MTU %u > max storable ERTM packet, only using MTU = %u", channel->remote_mtu, usable_mtu);
2943                         channel->remote_mtu = usable_mtu;
2944                     }
2945                 }
2946 #endif
2947                 // for open:
2948                 channel->state = L2CAP_STATE_OPEN;
2949                 l2cap_emit_channel_opened(channel, 0);
2950             }
2951             break;
2952 
2953         case L2CAP_STATE_WAIT_DISCONNECT:
2954             switch (code) {
2955                 case DISCONNECTION_RESPONSE:
2956                     l2cap_finialize_channel_close(channel);
2957                     break;
2958                 default:
2959                     //@TODO: implement other signaling packets
2960                     break;
2961             }
2962             break;
2963 
2964         case L2CAP_STATE_CLOSED:
2965             // @TODO handle incoming requests
2966             break;
2967 
2968         case L2CAP_STATE_OPEN:
2969             //@TODO: implement other signaling packets, e.g. re-configure
2970             break;
2971         default:
2972             break;
2973     }
2974     // log_info("new state %u", channel->state);
2975 }
2976 
2977 
2978 // @pre command len is valid, see check in l2cap_acl_classic_handler
2979 static void l2cap_signaling_handler_dispatch(hci_con_handle_t handle, uint8_t * command){
2980 
2981     btstack_linked_list_iterator_t it;
2982 
2983     // get code, signalind identifier and command len
2984     uint8_t code     = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET];
2985     uint8_t sig_id   = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET];
2986     uint16_t cmd_len = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
2987 
2988     // not for a particular channel, and not CONNECTION_REQUEST, ECHO_[REQUEST|RESPONSE], INFORMATION_RESPONSE
2989     if ((code < 1) || (code == ECHO_RESPONSE) || (code > INFORMATION_RESPONSE)){
2990         l2cap_register_signaling_response(handle, COMMAND_REJECT, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN);
2991         return;
2992     }
2993 
2994     // general commands without an assigned channel
2995     switch(code) {
2996 
2997         case CONNECTION_REQUEST:
2998             if (cmd_len == 4){
2999                 uint16_t psm =        little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
3000                 uint16_t source_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2);
3001                 l2cap_handle_connection_request(handle, sig_id, psm, source_cid);
3002             } else {
3003                 l2cap_register_signaling_response(handle, COMMAND_REJECT, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN);
3004             }
3005             return;
3006 
3007         case ECHO_REQUEST:
3008             l2cap_register_signaling_response(handle, code, sig_id, 0, 0);
3009             return;
3010 
3011         case INFORMATION_REQUEST:
3012             if (cmd_len == 2) {
3013                 uint16_t info_type = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
3014                 l2cap_register_signaling_response(handle, code, sig_id, 0, info_type);
3015             } else {
3016                 l2cap_register_signaling_response(handle, COMMAND_REJECT, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN);
3017             }
3018             return;
3019 
3020 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
3021         case INFORMATION_RESPONSE: {
3022             hci_connection_t * connection = hci_connection_for_handle(handle);
3023             if (!connection) return;
3024             if (connection->l2cap_state.information_state != L2CAP_INFORMATION_STATE_W4_EXTENDED_FEATURE_RESPONSE) return;
3025 
3026             // get extended features from response if valid
3027             connection->l2cap_state.extended_feature_mask = 0;
3028             if (cmd_len >= 6) {
3029                 uint16_t info_type = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
3030                 uint16_t result    = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2);
3031                 if (result == 0 && info_type == L2CAP_INFO_TYPE_EXTENDED_FEATURES_SUPPORTED) {
3032                     connection->l2cap_state.extended_feature_mask = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4);
3033                 }
3034             }
3035             connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_DONE;
3036             log_info("extended features mask 0x%02x", connection->l2cap_state.extended_feature_mask);
3037 
3038             // trigger connection request
3039             btstack_linked_list_iterator_init(&it, &l2cap_channels);
3040             while (btstack_linked_list_iterator_has_next(&it)){
3041                 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
3042                 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
3043                 if (channel->con_handle != handle) continue;
3044 
3045                 // incoming connection: ask user for channel configuration, esp. if ertm will be mandatory
3046                 if (channel->state == L2CAP_STATE_WAIT_INCOMING_EXTENDED_FEATURES){
3047                     channel->state = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT;
3048                     l2cap_emit_incoming_connection(channel);
3049                     continue;
3050                 }
3051 
3052                 // outgoing connection
3053                 if (channel->state == L2CAP_STATE_WAIT_OUTGOING_EXTENDED_FEATURES){
3054 
3055                     // if ERTM was requested, but is not listed in extended feature mask:
3056                     if ((channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) && ((connection->l2cap_state.extended_feature_mask & 0x08) == 0)){
3057 
3058                         if (channel->ertm_mandatory){
3059                             // bail if ERTM is mandatory
3060                             channel->state = L2CAP_STATE_CLOSED;
3061                             // map l2cap connection response result to BTstack status enumeration
3062                             l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_ERTM_NOT_SUPPORTED);
3063                             // discard channel
3064                             btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
3065                             l2cap_free_channel_entry(channel);
3066                             continue;
3067 
3068                         } else {
3069                             // fallback to Basic mode
3070                             l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED);
3071                             channel->mode = L2CAP_CHANNEL_MODE_BASIC;
3072                         }
3073                     }
3074 
3075                     // respond to connection request
3076                     channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST;
3077                     continue;
3078                 }
3079             }
3080             return;
3081         }
3082 #endif
3083 
3084         default:
3085             break;
3086     }
3087 
3088     // Get potential destination CID
3089     uint16_t dest_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
3090 
3091     // Find channel for this sig_id and connection handle
3092     btstack_linked_list_iterator_init(&it, &l2cap_channels);
3093     while (btstack_linked_list_iterator_has_next(&it)){
3094         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
3095         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
3096         if (channel->con_handle != handle) continue;
3097         if (code & 1) {
3098             // match odd commands (responses) by previous signaling identifier
3099             if (channel->local_sig_id == sig_id) {
3100                 l2cap_signaling_handler_channel(channel, command);
3101                 break;
3102             }
3103         } else {
3104             // match even commands (requests) by local channel id
3105             if (channel->local_cid == dest_cid) {
3106                 l2cap_signaling_handler_channel(channel, command);
3107                 break;
3108             }
3109         }
3110     }
3111 }
3112 #endif
3113 
3114 #ifdef ENABLE_BLE
3115 
3116 static void l2cap_emit_connection_parameter_update_response(hci_con_handle_t con_handle, uint16_t result){
3117     uint8_t event[6];
3118     event[0] = L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_RESPONSE;
3119     event[1] = 4;
3120     little_endian_store_16(event, 2, con_handle);
3121     little_endian_store_16(event, 4, result);
3122     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
3123     if (!l2cap_event_packet_handler) return;
3124     (*l2cap_event_packet_handler)(HCI_EVENT_PACKET, 0, event, sizeof(event));
3125 }
3126 
3127 // @returns valid
3128 static int l2cap_le_signaling_handler_dispatch(hci_con_handle_t handle, uint8_t * command, uint8_t sig_id){
3129     hci_connection_t * connection;
3130     uint16_t result;
3131     uint8_t  event[12];
3132 
3133 #ifdef ENABLE_LE_DATA_CHANNELS
3134     btstack_linked_list_iterator_t it;
3135     l2cap_channel_t * channel;
3136     uint16_t local_cid;
3137     uint16_t le_psm;
3138     uint16_t new_credits;
3139     uint16_t credits_before;
3140     l2cap_service_t * service;
3141     uint16_t source_cid;
3142 #endif
3143 
3144     uint8_t code   = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET];
3145     uint16_t len   = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
3146     log_info("l2cap_le_signaling_handler_dispatch: command 0x%02x, sig id %u, len %u", code, sig_id, len);
3147 
3148     switch (code){
3149 
3150         case CONNECTION_PARAMETER_UPDATE_REQUEST:
3151             // check size
3152             if (len < 8u) return 0u;
3153             connection = hci_connection_for_handle(handle);
3154             if (connection != NULL){
3155                 if (connection->role != HCI_ROLE_MASTER){
3156                     // reject command without notifying upper layer when not in master role
3157                     return 0;
3158                 }
3159                 le_connection_parameter_range_t existing_range;
3160                 gap_get_connection_parameter_range(&existing_range);
3161                 uint16_t le_conn_interval_min   = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
3162                 uint16_t le_conn_interval_max   = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2);
3163                 uint16_t le_conn_latency        = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4);
3164                 uint16_t le_supervision_timeout = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET+6);
3165 
3166                 int update_parameter = gap_connection_parameter_range_included(&existing_range, le_conn_interval_min, le_conn_interval_max, le_conn_latency, le_supervision_timeout);
3167                 if (update_parameter){
3168                     connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_SEND_RESPONSE;
3169                     connection->le_conn_interval_min = le_conn_interval_min;
3170                     connection->le_conn_interval_max = le_conn_interval_max;
3171                     connection->le_conn_latency = le_conn_latency;
3172                     connection->le_supervision_timeout = le_supervision_timeout;
3173                 } else {
3174                     connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_DENY;
3175                 }
3176                 connection->le_con_param_update_identifier = sig_id;
3177             }
3178 
3179             if (!l2cap_event_packet_handler) break;
3180 
3181             event[0] = L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_REQUEST;
3182             event[1] = 8;
3183             little_endian_store_16(event, 2, handle);
3184             (void)memcpy(&event[4], &command[4], 8);
3185             hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
3186             (*l2cap_event_packet_handler)( HCI_EVENT_PACKET, 0, event, sizeof(event));
3187             break;
3188 
3189         case CONNECTION_PARAMETER_UPDATE_RESPONSE:
3190             // check size
3191             if (len < 2u) return 0u;
3192             result = little_endian_read_16(command, 4);
3193             l2cap_emit_connection_parameter_update_response(handle, result);
3194             break;
3195 
3196 #ifdef ENABLE_LE_DATA_CHANNELS
3197 
3198         case COMMAND_REJECT:
3199             // Find channel for this sig_id and connection handle
3200             channel = NULL;
3201             btstack_linked_list_iterator_init(&it, &l2cap_channels);
3202             while (btstack_linked_list_iterator_has_next(&it)){
3203                 l2cap_channel_t * a_channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
3204                 if (!l2cap_is_dynamic_channel_type(a_channel->channel_type)) continue;
3205                 if (a_channel->con_handle   != handle) continue;
3206                 if (a_channel->local_sig_id != sig_id) continue;
3207                 channel = a_channel;
3208                 break;
3209             }
3210             if (!channel) break;
3211 
3212             // if received while waiting for le connection response, assume legacy device
3213             if (channel->state == L2CAP_STATE_WAIT_LE_CONNECTION_RESPONSE){
3214                 channel->state = L2CAP_STATE_CLOSED;
3215                 // no official value for this, use: Connection refused – LE_PSM not supported - 0x0002
3216                 l2cap_emit_le_channel_opened(channel, 0x0002);
3217 
3218                 // discard channel
3219                 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
3220                 l2cap_free_channel_entry(channel);
3221                 break;
3222             }
3223             break;
3224 
3225         case LE_CREDIT_BASED_CONNECTION_REQUEST:
3226             // check size
3227             if (len < 10u) return 0u;
3228 
3229             // get hci connection, bail if not found (must not happen)
3230             connection = hci_connection_for_handle(handle);
3231             if (!connection) return 0;
3232 
3233             // check if service registered
3234             le_psm  = little_endian_read_16(command, 4);
3235             service = l2cap_le_get_service(le_psm);
3236             source_cid = little_endian_read_16(command, 6);
3237 
3238             if (service){
3239                 if (source_cid < 0x40u){
3240                     // 0x0009 Connection refused - Invalid Source CID
3241                     l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0009);
3242                     return 1;
3243                 }
3244 
3245                 // go through list of channels for this ACL connection and check if we get a match
3246                 btstack_linked_list_iterator_init(&it, &l2cap_channels);
3247                 while (btstack_linked_list_iterator_has_next(&it)){
3248                     l2cap_channel_t * a_channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
3249                     if (!l2cap_is_dynamic_channel_type(a_channel->channel_type)) continue;
3250                     if (a_channel->con_handle != handle) continue;
3251                     if (a_channel->remote_cid != source_cid) continue;
3252                     // 0x000a Connection refused - Source CID already allocated
3253                     l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x000a);
3254                     return 1;
3255                 }
3256 
3257                 // security: check encryption
3258                 if (service->required_security_level >= LEVEL_2){
3259                     if (gap_encryption_key_size(handle) == 0){
3260                         // 0x0008 Connection refused - insufficient encryption
3261                         l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0008);
3262                         return 1;
3263                     }
3264                     // anything less than 16 byte key size is insufficient
3265                     if (gap_encryption_key_size(handle) < 16){
3266                         // 0x0007 Connection refused – insufficient encryption key size
3267                         l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0007);
3268                         return 1;
3269                     }
3270                 }
3271 
3272                 // security: check authencation
3273                 if (service->required_security_level >= LEVEL_3){
3274                     if (!gap_authenticated(handle)){
3275                         // 0x0005 Connection refused – insufficient authentication
3276                         l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0005);
3277                         return 1;
3278                     }
3279                 }
3280 
3281                 // security: check authorization
3282                 if (service->required_security_level >= LEVEL_4){
3283                     if (gap_authorization_state(handle) != AUTHORIZATION_GRANTED){
3284                         // 0x0006 Connection refused – insufficient authorization
3285                         l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0006);
3286                         return 1;
3287                     }
3288                 }
3289 
3290                 // allocate channel
3291                 channel = l2cap_create_channel_entry(service->packet_handler, L2CAP_CHANNEL_TYPE_LE_DATA_CHANNEL, connection->address,
3292                     BD_ADDR_TYPE_LE_RANDOM, le_psm, service->mtu, service->required_security_level);
3293                 if (!channel){
3294                     // 0x0004 Connection refused – no resources available
3295                     l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0004);
3296                     return 1;
3297                 }
3298 
3299                 channel->con_handle = handle;
3300                 channel->remote_cid = source_cid;
3301                 channel->remote_sig_id = sig_id;
3302                 channel->remote_mtu = little_endian_read_16(command, 8);
3303                 channel->remote_mps = little_endian_read_16(command, 10);
3304                 channel->credits_outgoing = little_endian_read_16(command, 12);
3305 
3306                 // set initial state
3307                 channel->state      = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT;
3308                 channel->state_var |= L2CAP_CHANNEL_STATE_VAR_INCOMING;
3309 
3310                 // add to connections list
3311                 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel);
3312 
3313                 // post connection request event
3314                 l2cap_emit_le_incoming_connection(channel);
3315 
3316             } else {
3317                 // Connection refused – LE_PSM not supported
3318                 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0002);
3319             }
3320             break;
3321 
3322         case LE_CREDIT_BASED_CONNECTION_RESPONSE:
3323             // check size
3324             if (len < 10u) return 0u;
3325 
3326             // Find channel for this sig_id and connection handle
3327             channel = NULL;
3328             btstack_linked_list_iterator_init(&it, &l2cap_channels);
3329             while (btstack_linked_list_iterator_has_next(&it)){
3330                 l2cap_channel_t * a_channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
3331                 if (!l2cap_is_dynamic_channel_type(a_channel->channel_type)) continue;
3332                 if (a_channel->con_handle   != handle) continue;
3333                 if (a_channel->local_sig_id != sig_id) continue;
3334                 channel = a_channel;
3335                 break;
3336             }
3337             if (!channel) break;
3338 
3339             // cid + 0
3340             result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+8);
3341             if (result){
3342                 channel->state = L2CAP_STATE_CLOSED;
3343                 // map l2cap connection response result to BTstack status enumeration
3344                 l2cap_emit_le_channel_opened(channel, result);
3345 
3346                 // discard channel
3347                 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
3348                 l2cap_free_channel_entry(channel);
3349                 break;
3350             }
3351 
3352             // success
3353             channel->remote_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0);
3354             channel->remote_mtu = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2);
3355             channel->remote_mps = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 4);
3356             channel->credits_outgoing = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 6);
3357             channel->state = L2CAP_STATE_OPEN;
3358             l2cap_emit_le_channel_opened(channel, result);
3359             break;
3360 
3361         case LE_FLOW_CONTROL_CREDIT:
3362             // check size
3363             if (len < 4u) return 0u;
3364 
3365             // find channel
3366             local_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0);
3367             channel = l2cap_get_channel_for_local_cid_and_handle(local_cid, handle);
3368             if (!channel) {
3369                 log_error("l2cap: no channel for cid 0x%02x", local_cid);
3370                 break;
3371             }
3372             new_credits = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2);
3373             credits_before = channel->credits_outgoing;
3374             channel->credits_outgoing += new_credits;
3375             // check for credit overrun
3376             if (credits_before > channel->credits_outgoing){
3377                 log_error("l2cap: new credits caused overrrun for cid 0x%02x, disconnecting", local_cid);
3378                 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
3379                 break;
3380             }
3381             log_info("l2cap: %u credits for 0x%02x, now %u", new_credits, local_cid, channel->credits_outgoing);
3382             break;
3383 
3384         case DISCONNECTION_REQUEST:
3385 
3386             // check size
3387             if (len < 4u) return 0u;
3388 
3389             // find channel
3390             local_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0);
3391             channel = l2cap_get_channel_for_local_cid_and_handle(local_cid, handle);
3392             if (!channel) {
3393                 log_error("l2cap: no channel for cid 0x%02x", local_cid);
3394                 break;
3395             }
3396             channel->remote_sig_id = sig_id;
3397             channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE;
3398             break;
3399 
3400 #endif
3401 
3402         case DISCONNECTION_RESPONSE:
3403             break;
3404 
3405         default:
3406             // command unknown -> reject command
3407             return 0;
3408     }
3409     return 1;
3410 }
3411 #endif
3412 
3413 #ifdef ENABLE_CLASSIC
3414 static void l2cap_acl_classic_handler_for_channel(l2cap_channel_t * l2cap_channel, uint8_t * packet, uint16_t size){
3415 
3416     // forward data only in OPEN state
3417     if (l2cap_channel->state != L2CAP_STATE_OPEN) return;
3418 
3419 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
3420     if (l2cap_channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
3421 
3422         int fcs_size = l2cap_channel->fcs_option ? 2 : 0;
3423 
3424         // assert control + FCS fields are inside
3425         if (size < COMPLETE_L2CAP_HEADER+2+fcs_size) return;
3426 
3427         if (l2cap_channel->fcs_option){
3428             // verify FCS (required if one side requested it)
3429             uint16_t fcs_calculated = crc16_calc(&packet[4], size - (4+2));
3430             uint16_t fcs_packet     = little_endian_read_16(packet, size-2);
3431 
3432 #ifdef L2CAP_ERTM_SIMULATE_FCS_ERROR_INTERVAL
3433             // simulate fcs error
3434                         static int counter = 0;
3435                         if (++counter == L2CAP_ERTM_SIMULATE_FCS_ERROR_INTERVAL) {
3436                             log_info("Simulate fcs error");
3437                             fcs_calculated++;
3438                             counter = 0;
3439                         }
3440 #endif
3441 
3442             if (fcs_calculated == fcs_packet){
3443                 log_info("Packet FCS 0x%04x verified", fcs_packet);
3444             } else {
3445                 log_error("FCS mismatch! Packet 0x%04x, calculated 0x%04x", fcs_packet, fcs_calculated);
3446                 // ERTM State Machine in Bluetooth Spec does not handle 'I-Frame with invalid FCS'
3447                 return;
3448             }
3449         }
3450 
3451         // switch on packet type
3452         uint16_t control = little_endian_read_16(packet, COMPLETE_L2CAP_HEADER);
3453         uint8_t  req_seq = (control >> 8) & 0x3f;
3454         int final = (control >> 7) & 0x01;
3455         if (control & 1){
3456             // S-Frame
3457             int poll  = (control >> 4) & 0x01;
3458             l2cap_supervisory_function_t s = (l2cap_supervisory_function_t) ((control >> 2) & 0x03);
3459             log_info("Control: 0x%04x => Supervisory function %u, ReqSeq %02u", control, (int) s, req_seq);
3460             l2cap_ertm_tx_packet_state_t * tx_state;
3461             switch (s){
3462                 case L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY:
3463                     log_info("L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY");
3464                     l2cap_ertm_process_req_seq(l2cap_channel, req_seq);
3465                     if (poll && final){
3466                         // S-frames shall not be transmitted with both the F-bit and the P-bit set to 1 at the same time.
3467                         log_error("P=F=1 in S-Frame");
3468                         break;
3469                     }
3470                     if (poll){
3471                         // check if we did request selective retransmission before <==> we have stored SDU segments
3472                         int i;
3473                         int num_stored_out_of_order_packets = 0;
3474                         for (i=0;i<l2cap_channel->num_rx_buffers;i++){
3475                             int index = l2cap_channel->rx_store_index + i;
3476                             if (index >= l2cap_channel->num_rx_buffers){
3477                                 index -= l2cap_channel->num_rx_buffers;
3478                             }
3479                             l2cap_ertm_rx_packet_state_t * rx_state = &l2cap_channel->rx_packets_state[index];
3480                             if (!rx_state->valid) continue;
3481                             num_stored_out_of_order_packets++;
3482                         }
3483                         if (num_stored_out_of_order_packets){
3484                             l2cap_channel->send_supervisor_frame_selective_reject = 1;
3485                         } else {
3486                             l2cap_channel->send_supervisor_frame_receiver_ready   = 1;
3487                         }
3488                         l2cap_channel->set_final_bit_after_packet_with_poll_bit_set = 1;
3489                     }
3490                     if (final){
3491                         // Stop-MonitorTimer
3492                         l2cap_ertm_stop_monitor_timer(l2cap_channel);
3493                         // If UnackedFrames > 0 then Start-RetransTimer
3494                         if (l2cap_channel->unacked_frames){
3495                             l2cap_ertm_start_retransmission_timer(l2cap_channel);
3496                         }
3497                         // final bit set <- response to RR with poll bit set. All not acknowledged packets need to be retransmitted
3498                         l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel);
3499                     }
3500                     break;
3501                 case L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT:
3502                     log_info("L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT");
3503                     l2cap_ertm_process_req_seq(l2cap_channel, req_seq);
3504                     // restart transmittion from last unacknowledted packet (earlier packets already freed in l2cap_ertm_process_req_seq)
3505                     l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel);
3506                     break;
3507                 case L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY:
3508                     log_error("L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY");
3509                     break;
3510                 case L2CAP_SUPERVISORY_FUNCTION_SREJ_SELECTIVE_REJECT:
3511                     log_info("L2CAP_SUPERVISORY_FUNCTION_SREJ_SELECTIVE_REJECT");
3512                     if (poll){
3513                         l2cap_ertm_process_req_seq(l2cap_channel, req_seq);
3514                     }
3515                     // find requested i-frame
3516                     tx_state = l2cap_ertm_get_tx_state(l2cap_channel, req_seq);
3517                     if (tx_state){
3518                         log_info("Retransmission for tx_seq %u requested", req_seq);
3519                         l2cap_channel->set_final_bit_after_packet_with_poll_bit_set = poll;
3520                         tx_state->retransmission_requested = 1;
3521                         l2cap_channel->srej_active = 1;
3522                     }
3523                     break;
3524                 default:
3525                     break;
3526             }
3527         } else {
3528             // I-Frame
3529             // get control
3530             l2cap_segmentation_and_reassembly_t sar = (l2cap_segmentation_and_reassembly_t) (control >> 14);
3531             uint8_t tx_seq = (control >> 1) & 0x3f;
3532             log_info("Control: 0x%04x => SAR %u, ReqSeq %02u, R?, TxSeq %02u", control, (int) sar, req_seq, tx_seq);
3533             log_info("SAR: pos %u", l2cap_channel->reassembly_pos);
3534             log_info("State: expected_tx_seq %02u, req_seq %02u", l2cap_channel->expected_tx_seq, l2cap_channel->req_seq);
3535             l2cap_ertm_process_req_seq(l2cap_channel, req_seq);
3536             if (final){
3537                 // final bit set <- response to RR with poll bit set. All not acknowledged packets need to be retransmitted
3538                 l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel);
3539             }
3540 
3541             // get SDU
3542             const uint8_t * payload_data = &packet[COMPLETE_L2CAP_HEADER+2];
3543             uint16_t        payload_len  = size-(COMPLETE_L2CAP_HEADER+2+fcs_size);
3544 
3545             // assert SDU size is smaller or equal to our buffers
3546             uint16_t max_payload_size = 0;
3547             switch (sar){
3548                 case L2CAP_SEGMENTATION_AND_REASSEMBLY_UNSEGMENTED_L2CAP_SDU:
3549                 case L2CAP_SEGMENTATION_AND_REASSEMBLY_START_OF_L2CAP_SDU:
3550                     // SDU Length + MPS
3551                     max_payload_size = l2cap_channel->local_mps + 2;
3552                     break;
3553                 case L2CAP_SEGMENTATION_AND_REASSEMBLY_CONTINUATION_OF_L2CAP_SDU:
3554                 case L2CAP_SEGMENTATION_AND_REASSEMBLY_END_OF_L2CAP_SDU:
3555                     max_payload_size = l2cap_channel->local_mps;
3556                     break;
3557                 default:
3558                     btstack_assert(false);
3559                     break;
3560             }
3561             if (payload_len > max_payload_size){
3562                 log_info("payload len %u > max payload %u -> drop packet", payload_len, max_payload_size);
3563                 return;
3564             }
3565 
3566             // check ordering
3567             if (l2cap_channel->expected_tx_seq == tx_seq){
3568                 log_info("Received expected frame with TxSeq == ExpectedTxSeq == %02u", tx_seq);
3569                 l2cap_channel->expected_tx_seq = l2cap_next_ertm_seq_nr(l2cap_channel->expected_tx_seq);
3570                 l2cap_channel->req_seq         = l2cap_channel->expected_tx_seq;
3571 
3572                 // process SDU
3573                 l2cap_ertm_handle_in_sequence_sdu(l2cap_channel, sar, payload_data, payload_len);
3574 
3575                 // process stored segments
3576                 while (true){
3577                     int index = l2cap_channel->rx_store_index;
3578                     l2cap_ertm_rx_packet_state_t * rx_state = &l2cap_channel->rx_packets_state[index];
3579                     if (!rx_state->valid) break;
3580 
3581                     log_info("Processing stored frame with TxSeq == ExpectedTxSeq == %02u", l2cap_channel->expected_tx_seq);
3582                     l2cap_channel->expected_tx_seq = l2cap_next_ertm_seq_nr(l2cap_channel->expected_tx_seq);
3583                     l2cap_channel->req_seq         = l2cap_channel->expected_tx_seq;
3584 
3585                     rx_state->valid = 0;
3586                     l2cap_ertm_handle_in_sequence_sdu(l2cap_channel, rx_state->sar, &l2cap_channel->rx_packets_data[index], rx_state->len);
3587 
3588                     // update rx store index
3589                     index++;
3590                     if (index >= l2cap_channel->num_rx_buffers){
3591                         index = 0;
3592                     }
3593                     l2cap_channel->rx_store_index = index;
3594                 }
3595 
3596                 //
3597                 l2cap_channel->send_supervisor_frame_receiver_ready = 1;
3598 
3599             } else {
3600                 int delta = (tx_seq - l2cap_channel->expected_tx_seq) & 0x3f;
3601                 if (delta < 2){
3602                     // store segment
3603                     l2cap_ertm_handle_out_of_sequence_sdu(l2cap_channel, sar, delta, payload_data, payload_len);
3604 
3605                     log_info("Received unexpected frame TxSeq %u but expected %u -> send S-SREJ", tx_seq, l2cap_channel->expected_tx_seq);
3606                     l2cap_channel->send_supervisor_frame_selective_reject = 1;
3607                 } else {
3608                     log_info("Received unexpected frame TxSeq %u but expected %u -> send S-REJ", tx_seq, l2cap_channel->expected_tx_seq);
3609                     l2cap_channel->send_supervisor_frame_reject = 1;
3610                 }
3611             }
3612         }
3613         return;
3614     }
3615 #endif
3616 
3617     // check size
3618     uint16_t payload_size = size - COMPLETE_L2CAP_HEADER;
3619     if (l2cap_channel->local_mtu < payload_size) return;
3620 
3621     l2cap_dispatch_to_channel(l2cap_channel, L2CAP_DATA_PACKET, &packet[COMPLETE_L2CAP_HEADER], payload_size);
3622 }
3623 #endif
3624 
3625 static void l2cap_acl_classic_handler(hci_con_handle_t handle, uint8_t *packet, uint16_t size){
3626 #ifdef ENABLE_CLASSIC
3627     l2cap_channel_t * l2cap_channel;
3628     l2cap_fixed_channel_t * l2cap_fixed_channel;
3629 
3630     uint16_t channel_id = READ_L2CAP_CHANNEL_ID(packet);
3631     uint8_t  broadcast_flag = READ_ACL_FLAGS(packet) >> 2;
3632     switch (channel_id) {
3633 
3634         case L2CAP_CID_SIGNALING: {
3635             if (broadcast_flag != 0) break;
3636             uint32_t command_offset = 8;
3637             while ((command_offset + L2CAP_SIGNALING_COMMAND_DATA_OFFSET) < size) {
3638                 // assert signaling command is fully inside packet
3639                 uint16_t data_len = little_endian_read_16(packet, command_offset + L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
3640                 uint32_t next_command_offset = command_offset + L2CAP_SIGNALING_COMMAND_DATA_OFFSET + data_len;
3641                 if (next_command_offset > size){
3642                     log_error("l2cap signaling command len invalid -> drop");
3643                     break;
3644                 }
3645                 // handle signaling command
3646                 l2cap_signaling_handler_dispatch(handle, &packet[command_offset]);
3647                 // go to next command
3648                 command_offset = next_command_offset;
3649             }
3650             break;
3651         }
3652         case L2CAP_CID_CONNECTIONLESS_CHANNEL:
3653             if (broadcast_flag == 0) break;
3654             l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_CONNECTIONLESS_CHANNEL);
3655             if (!l2cap_fixed_channel) break;
3656             if (!l2cap_fixed_channel->packet_handler) break;
3657             (*l2cap_fixed_channel->packet_handler)(UCD_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER);
3658             break;
3659 
3660         default:
3661             if (broadcast_flag != 0) break;
3662             // Find channel for this channel_id and connection handle
3663             l2cap_channel = l2cap_get_channel_for_local_cid_and_handle(channel_id, handle);
3664             if (l2cap_channel != NULL){
3665                 l2cap_acl_classic_handler_for_channel(l2cap_channel, packet, size);
3666             }
3667             break;
3668     }
3669 #else
3670     UNUSED(handle); // ok: no code
3671     UNUSED(packet); // ok: no code
3672     UNUSED(size);   // ok: no code
3673 #endif
3674 }
3675 
3676 static void l2cap_acl_le_handler(hci_con_handle_t handle, uint8_t *packet, uint16_t size){
3677 #ifdef ENABLE_BLE
3678 
3679     l2cap_fixed_channel_t * l2cap_fixed_channel;
3680 
3681 #ifdef ENABLE_LE_DATA_CHANNELS
3682     l2cap_channel_t * l2cap_channel;
3683 #endif
3684     uint16_t channel_id = READ_L2CAP_CHANNEL_ID(packet);
3685     switch (channel_id) {
3686 
3687         case L2CAP_CID_SIGNALING_LE: {
3688             uint16_t sig_id = packet[COMPLETE_L2CAP_HEADER + 1];
3689             uint16_t len = little_endian_read_16(packet, COMPLETE_L2CAP_HEADER + 2);
3690             if ((COMPLETE_L2CAP_HEADER + 4u + len) > size) break;
3691             int      valid  = l2cap_le_signaling_handler_dispatch(handle, &packet[COMPLETE_L2CAP_HEADER], sig_id);
3692             if (!valid){
3693                 l2cap_register_signaling_response(handle, COMMAND_REJECT_LE, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN);
3694             }
3695             break;
3696         }
3697 
3698         case L2CAP_CID_ATTRIBUTE_PROTOCOL:
3699             l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_ATTRIBUTE_PROTOCOL);
3700             if (!l2cap_fixed_channel) break;
3701             if (!l2cap_fixed_channel->packet_handler) break;
3702             (*l2cap_fixed_channel->packet_handler)(ATT_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER);
3703             break;
3704 
3705         case L2CAP_CID_SECURITY_MANAGER_PROTOCOL:
3706             l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_SECURITY_MANAGER_PROTOCOL);
3707             if (!l2cap_fixed_channel) break;
3708             if (!l2cap_fixed_channel->packet_handler) break;
3709             (*l2cap_fixed_channel->packet_handler)(SM_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER);
3710             break;
3711 
3712         default:
3713 
3714 #ifdef ENABLE_LE_DATA_CHANNELS
3715             l2cap_channel = l2cap_get_channel_for_local_cid_and_handle(channel_id, handle);
3716             if (l2cap_channel != NULL) {
3717                 // credit counting
3718                 if (l2cap_channel->credits_incoming == 0u){
3719                     log_info("LE Data Channel packet received but no incoming credits");
3720                     l2cap_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
3721                     break;
3722                 }
3723                 l2cap_channel->credits_incoming--;
3724 
3725                 // automatic credits
3726                 if ((l2cap_channel->credits_incoming < L2CAP_LE_DATA_CHANNELS_AUTOMATIC_CREDITS_WATERMARK) && l2cap_channel->automatic_credits){
3727                     l2cap_channel->new_credits_incoming = L2CAP_LE_DATA_CHANNELS_AUTOMATIC_CREDITS_INCREMENT;
3728                 }
3729 
3730                 // first fragment
3731                 uint16_t pos = 0;
3732                 if (!l2cap_channel->receive_sdu_len){
3733                     uint16_t sdu_len = little_endian_read_16(packet, COMPLETE_L2CAP_HEADER);
3734                     if(sdu_len > l2cap_channel->local_mtu) break;   // SDU would be larger than our buffer
3735                     l2cap_channel->receive_sdu_len = sdu_len;
3736                     l2cap_channel->receive_sdu_pos = 0;
3737                     pos  += 2u;
3738                     size -= 2u;
3739                 }
3740                 uint16_t fragment_size   = size-COMPLETE_L2CAP_HEADER;
3741                 uint16_t remaining_space = l2cap_channel->local_mtu - l2cap_channel->receive_sdu_pos;
3742                 if (fragment_size > remaining_space) break;         // SDU would cause buffer overrun
3743                 (void)memcpy(&l2cap_channel->receive_sdu_buffer[l2cap_channel->receive_sdu_pos],
3744                              &packet[COMPLETE_L2CAP_HEADER + pos],
3745                              fragment_size);
3746                 l2cap_channel->receive_sdu_pos += size - COMPLETE_L2CAP_HEADER;
3747                 // done?
3748                 log_debug("le packet pos %u, len %u", l2cap_channel->receive_sdu_pos, l2cap_channel->receive_sdu_len);
3749                 if (l2cap_channel->receive_sdu_pos >= l2cap_channel->receive_sdu_len){
3750                     l2cap_dispatch_to_channel(l2cap_channel, L2CAP_DATA_PACKET, l2cap_channel->receive_sdu_buffer, l2cap_channel->receive_sdu_len);
3751                     l2cap_channel->receive_sdu_len = 0;
3752                 }
3753             }
3754 #endif
3755             break;
3756     }
3757 #else
3758     UNUSED(handle); // ok: no code
3759     UNUSED(packet); // ok: no code
3760     UNUSED(size);   // ok: no code
3761 #endif
3762 }
3763 
3764 static void l2cap_acl_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
3765     UNUSED(packet_type);    // ok: registered with hci_register_acl_packet_handler
3766     UNUSED(channel);        // ok: there is no channel
3767 
3768     // Assert full L2CAP header present
3769     if (size < COMPLETE_L2CAP_HEADER) return;
3770 
3771     // Dispatch to Classic or LE handler (SCO packets are not dispatched to L2CAP)
3772     hci_con_handle_t handle = READ_ACL_CONNECTION_HANDLE(packet);
3773     hci_connection_t *conn = hci_connection_for_handle(handle);
3774     if (!conn) return;
3775     if (conn->address_type == BD_ADDR_TYPE_ACL){
3776         l2cap_acl_classic_handler(handle, packet, size);
3777     } else {
3778         l2cap_acl_le_handler(handle, packet, size);
3779     }
3780 
3781     l2cap_run();
3782 }
3783 
3784 // Bluetooth 4.0 - allows to register handler for Attribute Protocol and Security Manager Protocol
3785 void l2cap_register_fixed_channel(btstack_packet_handler_t the_packet_handler, uint16_t channel_id) {
3786     l2cap_fixed_channel_t * channel = l2cap_fixed_channel_for_channel_id(channel_id);
3787     if (!channel) return;
3788     channel->packet_handler = the_packet_handler;
3789 }
3790 
3791 #ifdef ENABLE_CLASSIC
3792 // finalize closed channel - l2cap_handle_disconnect_request & DISCONNECTION_RESPONSE
3793 void l2cap_finialize_channel_close(l2cap_channel_t * channel){
3794     channel->state = L2CAP_STATE_CLOSED;
3795     l2cap_handle_channel_closed(channel);
3796     // discard channel
3797     btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
3798     l2cap_free_channel_entry(channel);
3799 }
3800 #endif
3801 
3802 #ifdef L2CAP_USES_CHANNELS
3803 static l2cap_service_t * l2cap_get_service_internal(btstack_linked_list_t * services, uint16_t psm){
3804     btstack_linked_list_iterator_t it;
3805     btstack_linked_list_iterator_init(&it, services);
3806     while (btstack_linked_list_iterator_has_next(&it)){
3807         l2cap_service_t * service = (l2cap_service_t *) btstack_linked_list_iterator_next(&it);
3808         if ( service->psm == psm){
3809             return service;
3810         };
3811     }
3812     return NULL;
3813 }
3814 #endif
3815 
3816 #ifdef ENABLE_CLASSIC
3817 static inline l2cap_service_t * l2cap_get_service(uint16_t psm){
3818     return l2cap_get_service_internal(&l2cap_services, psm);
3819 }
3820 
3821 uint8_t l2cap_register_service(btstack_packet_handler_t service_packet_handler, uint16_t psm, uint16_t mtu, gap_security_level_t security_level){
3822 
3823     log_info("L2CAP_REGISTER_SERVICE psm 0x%x mtu %u", psm, mtu);
3824 
3825     // check for alread registered psm
3826     l2cap_service_t *service = l2cap_get_service(psm);
3827     if (service) {
3828         log_error("l2cap_register_service: PSM %u already registered", psm);
3829         return L2CAP_SERVICE_ALREADY_REGISTERED;
3830     }
3831 
3832     // alloc structure
3833     service = btstack_memory_l2cap_service_get();
3834     if (!service) {
3835         log_error("l2cap_register_service: no memory for l2cap_service_t");
3836         return BTSTACK_MEMORY_ALLOC_FAILED;
3837     }
3838 
3839     // fill in
3840     service->psm = psm;
3841     service->mtu = mtu;
3842     service->packet_handler = service_packet_handler;
3843     service->required_security_level = security_level;
3844 
3845     // add to services list
3846     btstack_linked_list_add(&l2cap_services, (btstack_linked_item_t *) service);
3847 
3848 #ifndef ENABLE_EXPLICIT_CONNECTABLE_MODE_CONTROL
3849     // enable page scan
3850     gap_connectable_control(1);
3851 #endif
3852 
3853     return ERROR_CODE_SUCCESS;
3854 }
3855 
3856 uint8_t l2cap_unregister_service(uint16_t psm){
3857 
3858     log_info("L2CAP_UNREGISTER_SERVICE psm 0x%x", psm);
3859 
3860     l2cap_service_t *service = l2cap_get_service(psm);
3861     if (!service) return L2CAP_SERVICE_DOES_NOT_EXIST;
3862     btstack_linked_list_remove(&l2cap_services, (btstack_linked_item_t *) service);
3863     btstack_memory_l2cap_service_free(service);
3864 
3865 #ifndef ENABLE_EXPLICIT_CONNECTABLE_MODE_CONTROL
3866     // disable page scan when no services registered
3867     if (btstack_linked_list_empty(&l2cap_services)) {
3868         gap_connectable_control(0);
3869     }
3870 #endif
3871 
3872     return ERROR_CODE_SUCCESS;
3873 }
3874 #endif
3875 
3876 
3877 #ifdef ENABLE_LE_DATA_CHANNELS
3878 
3879 static void l2cap_le_notify_channel_can_send(l2cap_channel_t *channel){
3880     if (!channel->waiting_for_can_send_now) return;
3881     if (channel->send_sdu_buffer) return;
3882     channel->waiting_for_can_send_now = 0;
3883     log_debug("L2CAP_EVENT_CHANNEL_LE_CAN_SEND_NOW local_cid 0x%x", channel->local_cid);
3884     l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_LE_CAN_SEND_NOW);
3885 }
3886 
3887 // 1BH2222
3888 static void l2cap_emit_le_incoming_connection(l2cap_channel_t *channel) {
3889     log_info("L2CAP_EVENT_LE_INCOMING_CONNECTION addr_type %u, addr %s handle 0x%x psm 0x%x local_cid 0x%x remote_cid 0x%x, remote_mtu %u",
3890              channel->address_type, bd_addr_to_str(channel->address), channel->con_handle,  channel->psm, channel->local_cid, channel->remote_cid, channel->remote_mtu);
3891     uint8_t event[19];
3892     event[0] = L2CAP_EVENT_LE_INCOMING_CONNECTION;
3893     event[1] = sizeof(event) - 2u;
3894     event[2] = channel->address_type;
3895     reverse_bd_addr(channel->address, &event[3]);
3896     little_endian_store_16(event,  9, channel->con_handle);
3897     little_endian_store_16(event, 11, channel->psm);
3898     little_endian_store_16(event, 13, channel->local_cid);
3899     little_endian_store_16(event, 15, channel->remote_cid);
3900     little_endian_store_16(event, 17, channel->remote_mtu);
3901     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
3902     l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event));
3903 }
3904 // 11BH22222
3905 static void l2cap_emit_le_channel_opened(l2cap_channel_t *channel, uint8_t status) {
3906     log_info("L2CAP_EVENT_LE_CHANNEL_OPENED 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",
3907              status, channel->address_type, bd_addr_to_str(channel->address), channel->con_handle, channel->psm,
3908              channel->local_cid, channel->remote_cid, channel->local_mtu, channel->remote_mtu);
3909     uint8_t event[23];
3910     event[0] = L2CAP_EVENT_LE_CHANNEL_OPENED;
3911     event[1] = sizeof(event) - 2u;
3912     event[2] = status;
3913     event[3] = channel->address_type;
3914     reverse_bd_addr(channel->address, &event[4]);
3915     little_endian_store_16(event, 10, channel->con_handle);
3916     event[12] = (channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) ? 1 : 0;
3917     little_endian_store_16(event, 13, channel->psm);
3918     little_endian_store_16(event, 15, channel->local_cid);
3919     little_endian_store_16(event, 17, channel->remote_cid);
3920     little_endian_store_16(event, 19, channel->local_mtu);
3921     little_endian_store_16(event, 21, channel->remote_mtu);
3922     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
3923     l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event));
3924 }
3925 // 2
3926 static void l2cap_emit_le_channel_closed(l2cap_channel_t * channel){
3927     log_info("L2CAP_EVENT_LE_CHANNEL_CLOSED local_cid 0x%x", channel->local_cid);
3928     uint8_t event[4];
3929     event[0] = L2CAP_EVENT_LE_CHANNEL_CLOSED;
3930     event[1] = sizeof(event) - 2u;
3931     little_endian_store_16(event, 2, channel->local_cid);
3932     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
3933     l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event));
3934 }
3935 
3936 static void l2cap_le_send_pdu(l2cap_channel_t *channel){
3937     btstack_assert(channel != NULL);
3938     btstack_assert(channel->send_sdu_buffer != NULL);
3939     btstack_assert(channel->credits_outgoing > 0);
3940 
3941     // send part of SDU
3942     hci_reserve_packet_buffer();
3943     uint8_t * acl_buffer = hci_get_outgoing_packet_buffer();
3944     uint8_t * l2cap_payload = acl_buffer + 8;
3945     uint16_t pos = 0;
3946     if (!channel->send_sdu_pos){
3947         // store SDU len
3948         channel->send_sdu_pos += 2u;
3949         little_endian_store_16(l2cap_payload, pos, channel->send_sdu_len);
3950         pos += 2u;
3951     }
3952     uint16_t payload_size = btstack_min(channel->send_sdu_len + 2u - channel->send_sdu_pos, channel->remote_mps - pos);
3953     log_info("len %u, pos %u => payload %u, credits %u", channel->send_sdu_len, channel->send_sdu_pos, payload_size, channel->credits_outgoing);
3954     (void)memcpy(&l2cap_payload[pos],
3955                  &channel->send_sdu_buffer[channel->send_sdu_pos - 2u],
3956                  payload_size); // -2 for virtual SDU len
3957     pos += payload_size;
3958     channel->send_sdu_pos += payload_size;
3959     l2cap_setup_header(acl_buffer, channel->con_handle, 0, channel->remote_cid, pos);
3960 
3961     channel->credits_outgoing--;
3962 
3963     hci_send_acl_packet_buffer(8u + pos);
3964 
3965     if (channel->send_sdu_pos >= (channel->send_sdu_len + 2u)){
3966         channel->send_sdu_buffer = NULL;
3967         // send done event
3968         l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_LE_PACKET_SENT);
3969         // inform about can send now
3970         l2cap_le_notify_channel_can_send(channel);
3971     }
3972 }
3973 
3974 // finalize closed channel - l2cap_handle_disconnect_request & DISCONNECTION_RESPONSE
3975 void l2cap_le_finialize_channel_close(l2cap_channel_t * channel){
3976     channel->state = L2CAP_STATE_CLOSED;
3977     l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_CHANNEL_CLOSED);
3978     // discard channel
3979     btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
3980     l2cap_free_channel_entry(channel);
3981 }
3982 
3983 static inline l2cap_service_t * l2cap_le_get_service(uint16_t le_psm){
3984     return l2cap_get_service_internal(&l2cap_le_services, le_psm);
3985 }
3986 
3987 uint8_t l2cap_le_register_service(btstack_packet_handler_t packet_handler, uint16_t psm, gap_security_level_t security_level){
3988 
3989     log_info("L2CAP_LE_REGISTER_SERVICE psm 0x%x", psm);
3990 
3991     // check for alread registered psm
3992     l2cap_service_t *service = l2cap_le_get_service(psm);
3993     if (service) {
3994         return L2CAP_SERVICE_ALREADY_REGISTERED;
3995     }
3996 
3997     // alloc structure
3998     service = btstack_memory_l2cap_service_get();
3999     if (!service) {
4000         log_error("l2cap_register_service_internal: no memory for l2cap_service_t");
4001         return BTSTACK_MEMORY_ALLOC_FAILED;
4002     }
4003 
4004     // fill in
4005     service->psm = psm;
4006     service->mtu = 0;
4007     service->packet_handler = packet_handler;
4008     service->required_security_level = security_level;
4009 
4010     // add to services list
4011     btstack_linked_list_add(&l2cap_le_services, (btstack_linked_item_t *) service);
4012 
4013     // done
4014     return ERROR_CODE_SUCCESS;
4015 }
4016 
4017 uint8_t l2cap_le_unregister_service(uint16_t psm) {
4018     log_info("L2CAP_LE_UNREGISTER_SERVICE psm 0x%x", psm);
4019     l2cap_service_t *service = l2cap_le_get_service(psm);
4020     if (!service) return L2CAP_SERVICE_DOES_NOT_EXIST;
4021 
4022     btstack_linked_list_remove(&l2cap_le_services, (btstack_linked_item_t *) service);
4023     btstack_memory_l2cap_service_free(service);
4024     return ERROR_CODE_SUCCESS;
4025 }
4026 
4027 uint8_t l2cap_le_accept_connection(uint16_t local_cid, uint8_t * receive_sdu_buffer, uint16_t mtu, uint16_t initial_credits){
4028     // get channel
4029     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
4030     if (!channel) return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
4031 
4032     // validate state
4033     if (channel->state != L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT){
4034         return ERROR_CODE_COMMAND_DISALLOWED;
4035     }
4036 
4037     // set state accept connection
4038     channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_ACCEPT;
4039     channel->receive_sdu_buffer = receive_sdu_buffer;
4040     channel->local_mtu = mtu;
4041     channel->new_credits_incoming = initial_credits;
4042     channel->automatic_credits  = initial_credits == L2CAP_LE_AUTOMATIC_CREDITS;
4043 
4044     // test
4045     // channel->new_credits_incoming = 1;
4046 
4047     // go
4048     l2cap_run();
4049     return ERROR_CODE_SUCCESS;
4050 }
4051 
4052 /**
4053  * @brief Deny incoming LE Data Channel connection due to resource constraints
4054  * @param local_cid             L2CAP LE Data Channel Identifier
4055  */
4056 
4057 uint8_t l2cap_le_decline_connection(uint16_t local_cid){
4058     // get channel
4059     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
4060     if (!channel) return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
4061 
4062     // validate state
4063     if (channel->state != L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT){
4064         return ERROR_CODE_COMMAND_DISALLOWED;
4065     }
4066 
4067     // set state decline connection
4068     channel->state  = L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_DECLINE;
4069     channel->reason = 0x04; // no resources available
4070     l2cap_run();
4071     return ERROR_CODE_SUCCESS;
4072 }
4073 
4074 static gap_security_level_t l2cap_le_security_level_for_connection(hci_con_handle_t con_handle){
4075     uint8_t encryption_key_size = gap_encryption_key_size(con_handle);
4076     if (encryption_key_size == 0) return LEVEL_0;
4077 
4078     uint8_t authenticated = gap_authenticated(con_handle);
4079     if (!authenticated) return LEVEL_2;
4080 
4081     return encryption_key_size == 16 ? LEVEL_4 : LEVEL_3;
4082 }
4083 
4084 // used to handle pairing complete after triggering to increase
4085 static void l2cap_sm_packet_handler(uint8_t packet_type, uint16_t channel_nr, uint8_t *packet, uint16_t size) {
4086     UNUSED(channel_nr);
4087     UNUSED(size);
4088     UNUSED(packet_type);
4089     btstack_assert(packet_type == HCI_EVENT_PACKET);
4090     if (hci_event_packet_get_type(packet) != SM_EVENT_PAIRING_COMPLETE) return;
4091     hci_con_handle_t con_handle = sm_event_pairing_complete_get_handle(packet);
4092     btstack_linked_list_iterator_t it;
4093     btstack_linked_list_iterator_init(&it, &l2cap_channels);
4094     while (btstack_linked_list_iterator_has_next(&it)) {
4095         l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
4096         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
4097         if (channel->con_handle != con_handle) continue;
4098         if (channel->state != L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE) continue;
4099 
4100         // found channel, check security level
4101         if (l2cap_le_security_level_for_connection(con_handle) < channel->required_security_level){
4102             // pairing failed or wasn't good enough, inform user
4103             l2cap_emit_le_channel_opened(channel, ERROR_CODE_INSUFFICIENT_SECURITY);
4104             // discard channel
4105             btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
4106             l2cap_free_channel_entry(channel);
4107         } else {
4108             // send conn request now
4109             channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST;
4110             l2cap_run();
4111         }
4112     }
4113 }
4114 
4115 uint8_t l2cap_le_create_channel(btstack_packet_handler_t packet_handler, hci_con_handle_t con_handle,
4116     uint16_t psm, uint8_t * receive_sdu_buffer, uint16_t mtu, uint16_t initial_credits, gap_security_level_t security_level,
4117     uint16_t * out_local_cid) {
4118 
4119     static btstack_packet_callback_registration_t sm_event_callback_registration;
4120     static bool sm_callback_registered = false;
4121 
4122     log_info("L2CAP_LE_CREATE_CHANNEL handle 0x%04x psm 0x%x mtu %u", con_handle, psm, mtu);
4123 
4124     hci_connection_t * connection = hci_connection_for_handle(con_handle);
4125     if (!connection) {
4126         log_error("no hci_connection for handle 0x%04x", con_handle);
4127         return ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER;
4128     }
4129 
4130     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);
4131     if (!channel) {
4132         return BTSTACK_MEMORY_ALLOC_FAILED;
4133     }
4134     log_info("l2cap_le_create_channel %p", channel);
4135 
4136     // store local_cid
4137     if (out_local_cid){
4138        *out_local_cid = channel->local_cid;
4139     }
4140 
4141     // setup channel entry
4142     channel->con_handle = con_handle;
4143     channel->receive_sdu_buffer = receive_sdu_buffer;
4144     channel->new_credits_incoming = initial_credits;
4145     channel->automatic_credits    = initial_credits == L2CAP_LE_AUTOMATIC_CREDITS;
4146 
4147     // add to connections list
4148     btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel);
4149 
4150     // check security level
4151     if (l2cap_le_security_level_for_connection(con_handle) < channel->required_security_level){
4152         if (!sm_callback_registered){
4153             sm_callback_registered = true;
4154             // lazy registration for SM events
4155             sm_event_callback_registration.callback = &l2cap_sm_packet_handler;
4156             sm_add_event_handler(&sm_event_callback_registration);
4157         }
4158 
4159         // start pairing
4160         channel->state = L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE;
4161         sm_request_pairing(con_handle);
4162     } else {
4163         // send conn request right away
4164         channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST;
4165         l2cap_run();
4166     }
4167 
4168     return ERROR_CODE_SUCCESS;
4169 }
4170 
4171 /**
4172  * @brief Provide credtis for LE Data Channel
4173  * @param local_cid             L2CAP LE Data Channel Identifier
4174  * @param credits               Number additional credits for peer
4175  */
4176 uint8_t l2cap_le_provide_credits(uint16_t local_cid, uint16_t credits){
4177 
4178     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
4179     if (!channel) {
4180         log_error("l2cap_le_provide_credits no channel for cid 0x%02x", local_cid);
4181         return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
4182     }
4183 
4184     // check state
4185     if (channel->state != L2CAP_STATE_OPEN){
4186         log_error("l2cap_le_provide_credits but channel 0x%02x not open yet", local_cid);
4187     }
4188 
4189     // assert incoming credits + credits <= 0xffff
4190     uint32_t total_credits = channel->credits_incoming;
4191     total_credits += channel->new_credits_incoming;
4192     total_credits += credits;
4193     if (total_credits > 0xffffu){
4194         log_error("l2cap_le_provide_credits overrun: current %u, scheduled %u, additional %u", channel->credits_incoming,
4195             channel->new_credits_incoming, credits);
4196     }
4197 
4198     // set credits_granted
4199     channel->new_credits_incoming += credits;
4200 
4201     // go
4202     l2cap_run();
4203     return ERROR_CODE_SUCCESS;
4204 }
4205 
4206 /**
4207  * @brief Check if outgoing buffer is available and that there's space on the Bluetooth module
4208  * @param local_cid             L2CAP LE Data Channel Identifier
4209  */
4210 int l2cap_le_can_send_now(uint16_t local_cid){
4211     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
4212     if (!channel) {
4213         log_error("l2cap_le_provide_credits no channel for cid 0x%02x", local_cid);
4214         return 0;
4215     }
4216 
4217     // check state
4218     if (channel->state != L2CAP_STATE_OPEN) return 0;
4219 
4220     // check queue
4221     if (channel->send_sdu_buffer) return 0;
4222 
4223     // fine, go ahead
4224     return 1;
4225 }
4226 
4227 /**
4228  * @brief Request emission of L2CAP_EVENT_CAN_SEND_NOW as soon as possible
4229  * @note L2CAP_EVENT_CAN_SEND_NOW might be emitted during call to this function
4230  *       so packet handler should be ready to handle it
4231  * @param local_cid             L2CAP LE Data Channel Identifier
4232  */
4233 uint8_t l2cap_le_request_can_send_now_event(uint16_t local_cid){
4234     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
4235     if (!channel) {
4236         log_error("l2cap_le_request_can_send_now_event no channel for cid 0x%02x", local_cid);
4237         return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
4238     }
4239     channel->waiting_for_can_send_now = 1;
4240     l2cap_le_notify_channel_can_send(channel);
4241     return ERROR_CODE_SUCCESS;
4242 }
4243 
4244 /**
4245  * @brief Send data via LE Data Channel
4246  * @note Since data larger then the maximum PDU needs to be segmented into multiple PDUs, data needs to stay valid until ... event
4247  * @param local_cid             L2CAP LE Data Channel Identifier
4248  * @param data                  data to send
4249  * @param size                  data size
4250  */
4251 uint8_t l2cap_le_send_data(uint16_t local_cid, uint8_t * data, uint16_t len){
4252 
4253     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
4254     if (!channel) {
4255         log_error("l2cap_send no channel for cid 0x%02x", local_cid);
4256         return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
4257     }
4258 
4259     if (len > channel->remote_mtu){
4260         log_error("l2cap_send cid 0x%02x, data length exceeds remote MTU.", local_cid);
4261         return L2CAP_DATA_LEN_EXCEEDS_REMOTE_MTU;
4262     }
4263 
4264     if (channel->send_sdu_buffer){
4265         log_info("l2cap_send cid 0x%02x, cannot send", local_cid);
4266         return BTSTACK_ACL_BUFFERS_FULL;
4267     }
4268 
4269     channel->send_sdu_buffer = data;
4270     channel->send_sdu_len    = len;
4271     channel->send_sdu_pos    = 0;
4272 
4273     l2cap_notify_channel_can_send();
4274     return ERROR_CODE_SUCCESS;
4275 }
4276 
4277 /**
4278  * @brief Disconnect from LE Data Channel
4279  * @param local_cid             L2CAP LE Data Channel Identifier
4280  */
4281 uint8_t l2cap_le_disconnect(uint16_t local_cid)
4282 {
4283     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
4284     if (!channel) {
4285         log_error("l2cap_send no channel for cid 0x%02x", local_cid);
4286         return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
4287     }
4288 
4289     channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
4290     l2cap_run();
4291     return ERROR_CODE_SUCCESS;
4292 }
4293 
4294 #endif
4295