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