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