xref: /btstack/src/l2cap.c (revision c32dba203d4af5ccae95e4d7b5aa9cabd63fc4ec)
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;
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;
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     uint8_t  config_options[10];
1380     btstack_linked_list_iterator_init(&it, &l2cap_channels);
1381     while (btstack_linked_list_iterator_has_next(&it)){
1382 
1383         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
1384 
1385         if (channel->channel_type != L2CAP_CHANNEL_TYPE_CLASSIC) continue;
1386 
1387         // log_info("l2cap_run: channel %p, state %u, var 0x%02x", channel, channel->state, channel->state_var);
1388         switch (channel->state){
1389 
1390             case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE:
1391             case L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT:
1392                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1393                 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND) {
1394                     channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND);
1395                     l2cap_send_signaling_packet(channel->con_handle, CONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid, 1, 0);
1396                 }
1397                 break;
1398 
1399             case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION:
1400                 if (!hci_can_send_command_packet_now()) break;
1401                 // send connection request - set state first
1402                 channel->state = L2CAP_STATE_WAIT_CONNECTION_COMPLETE;
1403                 // BD_ADDR, Packet_Type, Page_Scan_Repetition_Mode, Reserved, Clock_Offset, Allow_Role_Switch
1404                 hci_send_cmd(&hci_create_connection, channel->address, hci_usable_acl_packet_types(), 0, 0, 0, 1);
1405                 break;
1406 
1407             case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE:
1408                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1409                 channel->state = L2CAP_STATE_INVALID;
1410                 l2cap_send_signaling_packet(channel->con_handle, CONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid, channel->reason, 0);
1411                 // discard channel - l2cap_finialize_channel_close without sending l2cap close event
1412                 l2cap_stop_rtx(channel);
1413                 btstack_linked_list_iterator_remove(&it);
1414                 btstack_memory_l2cap_channel_free(channel);
1415                 break;
1416 
1417             case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT:
1418                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1419                 channel->state = L2CAP_STATE_CONFIG;
1420                 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ);
1421                 l2cap_send_signaling_packet(channel->con_handle, CONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid, 0, 0);
1422                 break;
1423 
1424             case L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST:
1425                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1426                 // success, start l2cap handshake
1427                 channel->local_sig_id = l2cap_next_sig_id();
1428                 channel->state = L2CAP_STATE_WAIT_CONNECT_RSP;
1429                 l2cap_send_signaling_packet( channel->con_handle, CONNECTION_REQUEST, channel->local_sig_id, channel->psm, channel->local_cid);
1430                 l2cap_start_rtx(channel);
1431                 break;
1432 
1433             case L2CAP_STATE_CONFIG:
1434                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1435                 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP){
1436                     uint16_t flags = 0;
1437                     channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP);
1438                     if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT) {
1439                         flags = 1;
1440                     } else {
1441                         channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP);
1442                     }
1443                     if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_INVALID){
1444                         channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP);
1445                         l2cap_send_signaling_packet(channel->con_handle, CONFIGURE_RESPONSE, channel->remote_sig_id, channel->remote_cid, flags, L2CAP_CONF_RESULT_UNKNOWN_OPTIONS, 0, NULL);
1446 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1447                     } else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_REJECTED){
1448                         channelStateVarClearFlag(channel,L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_REJECTED);
1449                         channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP);
1450                         uint16_t options_size = l2cap_setup_options_response(channel, config_options);
1451                         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);
1452 #endif
1453                     } else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU){
1454                         channelStateVarClearFlag(channel,L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU);
1455                         uint16_t options_size = l2cap_setup_options_response(channel, config_options);
1456                         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);
1457                     } else {
1458                         l2cap_send_signaling_packet(channel->con_handle, CONFIGURE_RESPONSE, channel->remote_sig_id, channel->remote_cid, flags, L2CAP_CONF_RESULT_SUCCESS, 0, NULL);
1459                     }
1460                     channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT);
1461                 }
1462                 else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ){
1463                     channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ);
1464                     channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_REQ);
1465                     channel->local_sig_id = l2cap_next_sig_id();
1466                     uint16_t options_size = l2cap_setup_options_request(channel, config_options);
1467                     l2cap_send_signaling_packet(channel->con_handle, CONFIGURE_REQUEST, channel->local_sig_id, channel->remote_cid, 0, options_size, &config_options);
1468                     l2cap_start_rtx(channel);
1469                 }
1470                 if (l2cap_channel_ready_for_open(channel)){
1471                     channel->state = L2CAP_STATE_OPEN;
1472                     l2cap_emit_channel_opened(channel, 0);  // success
1473                 }
1474                 break;
1475 
1476             case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE:
1477                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1478                 channel->state = L2CAP_STATE_INVALID;
1479                 l2cap_send_signaling_packet( channel->con_handle, DISCONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid);
1480                 // 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 :)
1481                 l2cap_finialize_channel_close(channel);  // -- remove from list
1482                 break;
1483 
1484             case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST:
1485                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1486                 channel->local_sig_id = l2cap_next_sig_id();
1487                 channel->state = L2CAP_STATE_WAIT_DISCONNECT;
1488                 l2cap_send_signaling_packet( channel->con_handle, DISCONNECTION_REQUEST, channel->local_sig_id, channel->remote_cid, channel->local_cid);
1489                 break;
1490             default:
1491                 break;
1492         }
1493 
1494 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1495         // send s-frame to acknowledge received packets
1496         if (!hci_can_send_acl_packet_now(channel->con_handle)) continue;
1497 
1498         if (channel->tx_send_index != channel->tx_write_index){
1499             // check remote tx window
1500             log_info("unacknowledged_packets %u, remote tx window size %u", channel->unacked_frames, channel->remote_tx_window_size);
1501             if (channel->unacked_frames < channel->remote_tx_window_size){
1502                 channel->unacked_frames++;
1503                 int index = channel->tx_send_index;
1504                 channel->tx_send_index++;
1505                 if (channel->tx_send_index >= channel->num_tx_buffers){
1506                     channel->tx_send_index = 0;
1507                 }
1508                 l2cap_ertm_send_information_frame(channel, index, 0);   // final = 0
1509                 continue;
1510             }
1511         }
1512 
1513         if (channel->send_supervisor_frame_receiver_ready){
1514             channel->send_supervisor_frame_receiver_ready = 0;
1515             log_info("Send S-Frame: RR %u, final %u", channel->req_seq, channel->set_final_bit_after_packet_with_poll_bit_set);
1516             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);
1517             channel->set_final_bit_after_packet_with_poll_bit_set = 0;
1518             l2cap_ertm_send_supervisor_frame(channel, control);
1519             continue;
1520         }
1521         if (channel->send_supervisor_frame_receiver_ready_poll){
1522             channel->send_supervisor_frame_receiver_ready_poll = 0;
1523             log_info("Send S-Frame: RR %u with poll=1 ", channel->req_seq);
1524             uint16_t control = l2cap_encanced_control_field_for_supevisor_frame( L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY, 1, 0, channel->req_seq);
1525             l2cap_ertm_send_supervisor_frame(channel, control);
1526             continue;
1527         }
1528         if (channel->send_supervisor_frame_receiver_not_ready){
1529             channel->send_supervisor_frame_receiver_not_ready = 0;
1530             log_info("Send S-Frame: RNR %u", channel->req_seq);
1531             uint16_t control = l2cap_encanced_control_field_for_supevisor_frame( L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY, 0, 0, channel->req_seq);
1532             l2cap_ertm_send_supervisor_frame(channel, control);
1533             continue;
1534         }
1535         if (channel->send_supervisor_frame_reject){
1536             channel->send_supervisor_frame_reject = 0;
1537             log_info("Send S-Frame: REJ %u", channel->req_seq);
1538             uint16_t control = l2cap_encanced_control_field_for_supevisor_frame( L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT, 0, 0, channel->req_seq);
1539             l2cap_ertm_send_supervisor_frame(channel, control);
1540             continue;
1541         }
1542         if (channel->send_supervisor_frame_selective_reject){
1543             channel->send_supervisor_frame_selective_reject = 0;
1544             log_info("Send S-Frame: SREJ %u", channel->expected_tx_seq);
1545             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);
1546             channel->set_final_bit_after_packet_with_poll_bit_set = 0;
1547             l2cap_ertm_send_supervisor_frame(channel, control);
1548             continue;
1549         }
1550 
1551         if (channel->srej_active){
1552             int i;
1553             for (i=0;i<channel->num_tx_buffers;i++){
1554                 l2cap_ertm_tx_packet_state_t * tx_state = &channel->tx_packets_state[i];
1555                 if (tx_state->retransmission_requested) {
1556                     tx_state->retransmission_requested = 0;
1557                     uint8_t final = channel->set_final_bit_after_packet_with_poll_bit_set;
1558                     channel->set_final_bit_after_packet_with_poll_bit_set = 0;
1559                     l2cap_ertm_send_information_frame(channel, i, final);
1560                     break;
1561                 }
1562             }
1563             if (i == channel->num_tx_buffers){
1564                 // no retransmission request found
1565                 channel->srej_active = 0;
1566             } else {
1567                 // packet was sent
1568                 continue;
1569             }
1570         }
1571 #endif
1572 
1573     }
1574 #endif
1575 
1576 #ifdef ENABLE_LE_DATA_CHANNELS
1577     btstack_linked_list_iterator_init(&it, &l2cap_channels);
1578     while (btstack_linked_list_iterator_has_next(&it)){
1579         uint8_t  * acl_buffer;
1580         uint8_t  * l2cap_payload;
1581         uint16_t pos;
1582         uint16_t payload_size;
1583         uint16_t mps;
1584         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
1585 
1586         if (channel->channel_type != L2CAP_CHANNEL_TYPE_LE_DATA_CHANNEL) continue;
1587 
1588         // log_info("l2cap_run: channel %p, state %u, var 0x%02x", channel, channel->state, channel->state_var);
1589         switch (channel->state){
1590             case L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST:
1591                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1592                 channel->state = L2CAP_STATE_WAIT_LE_CONNECTION_RESPONSE;
1593                 // le psm, source cid, mtu, mps, initial credits
1594                 channel->local_sig_id = l2cap_next_sig_id();
1595                 channel->credits_incoming =  channel->new_credits_incoming;
1596                 channel->new_credits_incoming = 0;
1597                 mps = btstack_min(l2cap_max_le_mtu(), channel->local_mtu);
1598                 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);
1599                 break;
1600             case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_ACCEPT:
1601                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1602                 // TODO: support larger MPS
1603                 channel->state = L2CAP_STATE_OPEN;
1604                 channel->credits_incoming =  channel->new_credits_incoming;
1605                 channel->new_credits_incoming = 0;
1606                 mps = btstack_min(l2cap_max_le_mtu(), channel->local_mtu);
1607                 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);
1608                 // notify client
1609                 l2cap_emit_le_channel_opened(channel, 0);
1610                 break;
1611             case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_DECLINE:
1612                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1613                 channel->state = L2CAP_STATE_INVALID;
1614                 l2cap_send_le_signaling_packet(channel->con_handle, LE_CREDIT_BASED_CONNECTION_RESPONSE, channel->remote_sig_id, 0, 0, 0, 0, channel->reason);
1615                 // discard channel - l2cap_finialize_channel_close without sending l2cap close event
1616                 l2cap_stop_rtx(channel);
1617                 btstack_linked_list_iterator_remove(&it);
1618                 btstack_memory_l2cap_channel_free(channel);
1619                 break;
1620             case L2CAP_STATE_OPEN:
1621                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1622 
1623                 // send credits
1624                 if (channel->new_credits_incoming){
1625                     log_info("l2cap: sending %u credits", channel->new_credits_incoming);
1626                     channel->local_sig_id = l2cap_next_sig_id();
1627                     uint16_t new_credits = channel->new_credits_incoming;
1628                     channel->new_credits_incoming = 0;
1629                     channel->credits_incoming += new_credits;
1630                     l2cap_send_le_signaling_packet(channel->con_handle, LE_FLOW_CONTROL_CREDIT, channel->local_sig_id, channel->remote_cid, new_credits);
1631                     break;
1632                 }
1633 
1634                 // send data
1635                 if (!channel->send_sdu_buffer) break;
1636                 if (!channel->credits_outgoing) break;
1637 
1638                 // send part of SDU
1639                 hci_reserve_packet_buffer();
1640                 acl_buffer = hci_get_outgoing_packet_buffer();
1641                 l2cap_payload = acl_buffer + 8;
1642                 pos = 0;
1643                 if (!channel->send_sdu_pos){
1644                     // store SDU len
1645                     channel->send_sdu_pos += 2;
1646                     little_endian_store_16(l2cap_payload, pos, channel->send_sdu_len);
1647                     pos += 2;
1648                 }
1649                 payload_size = btstack_min(channel->send_sdu_len + 2 - channel->send_sdu_pos, channel->remote_mps - pos);
1650                 log_info("len %u, pos %u => payload %u, credits %u", channel->send_sdu_len, channel->send_sdu_pos, payload_size, channel->credits_outgoing);
1651                 memcpy(&l2cap_payload[pos], &channel->send_sdu_buffer[channel->send_sdu_pos-2], payload_size); // -2 for virtual SDU len
1652                 pos += payload_size;
1653                 channel->send_sdu_pos += payload_size;
1654                 l2cap_setup_header(acl_buffer, channel->con_handle, 0, channel->remote_cid, pos);
1655                 // done
1656 
1657                 channel->credits_outgoing--;
1658 
1659                 if (channel->send_sdu_pos >= channel->send_sdu_len + 2){
1660                     channel->send_sdu_buffer = NULL;
1661                     // send done event
1662                     l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_LE_PACKET_SENT);
1663                     // inform about can send now
1664                     l2cap_le_notify_channel_can_send(channel);
1665                 }
1666                 hci_send_acl_packet_buffer(8 + pos);
1667                 break;
1668             case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST:
1669                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1670                 channel->local_sig_id = l2cap_next_sig_id();
1671                 channel->state = L2CAP_STATE_WAIT_DISCONNECT;
1672                 l2cap_send_le_signaling_packet( channel->con_handle, DISCONNECTION_REQUEST, channel->local_sig_id, channel->remote_cid, channel->local_cid);
1673                 break;
1674             case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE:
1675                 if (!hci_can_send_acl_packet_now(channel->con_handle)) break;
1676                 channel->state = L2CAP_STATE_INVALID;
1677                 l2cap_send_le_signaling_packet( channel->con_handle, DISCONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid);
1678                 l2cap_le_finialize_channel_close(channel);  // -- remove from list
1679                 break;
1680             default:
1681                 break;
1682         }
1683     }
1684 #endif
1685 
1686 #ifdef ENABLE_BLE
1687     // send l2cap con paramter update if necessary
1688     hci_connections_get_iterator(&it);
1689     while(btstack_linked_list_iterator_has_next(&it)){
1690         hci_connection_t * connection = (hci_connection_t *) btstack_linked_list_iterator_next(&it);
1691         if (connection->address_type != BD_ADDR_TYPE_LE_PUBLIC && connection->address_type != BD_ADDR_TYPE_LE_RANDOM) continue;
1692         if (!hci_can_send_acl_packet_now(connection->con_handle)) continue;
1693         switch (connection->le_con_parameter_update_state){
1694             case CON_PARAMETER_UPDATE_SEND_REQUEST:
1695                 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_NONE;
1696                 l2cap_send_le_signaling_packet(connection->con_handle, CONNECTION_PARAMETER_UPDATE_REQUEST, connection->le_con_param_update_identifier,
1697                                                connection->le_conn_interval_min, connection->le_conn_interval_max, connection->le_conn_latency, connection->le_supervision_timeout);
1698                 break;
1699             case CON_PARAMETER_UPDATE_SEND_RESPONSE:
1700                 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_CHANGE_HCI_CON_PARAMETERS;
1701                 l2cap_send_le_signaling_packet(connection->con_handle, CONNECTION_PARAMETER_UPDATE_RESPONSE, connection->le_con_param_update_identifier, 0);
1702                 break;
1703             case CON_PARAMETER_UPDATE_DENY:
1704                 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_NONE;
1705                 l2cap_send_le_signaling_packet(connection->con_handle, CONNECTION_PARAMETER_UPDATE_RESPONSE, connection->le_con_param_update_identifier, 1);
1706                 break;
1707             default:
1708                 break;
1709         }
1710     }
1711 #endif
1712 
1713     // log_info("l2cap_run: exit");
1714 }
1715 
1716 #ifdef ENABLE_CLASSIC
1717 static void l2cap_handle_connection_complete(hci_con_handle_t con_handle, l2cap_channel_t * channel){
1718     if (channel->state == L2CAP_STATE_WAIT_CONNECTION_COMPLETE || channel->state == L2CAP_STATE_WILL_SEND_CREATE_CONNECTION) {
1719         log_info("l2cap_handle_connection_complete expected state");
1720         // success, start l2cap handshake
1721         channel->con_handle = con_handle;
1722         // check remote SSP feature first
1723         channel->state = L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES;
1724     }
1725 }
1726 
1727 static void l2cap_ready_to_connect(l2cap_channel_t * channel){
1728 
1729 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1730     // assumption: outgoing connection
1731     hci_connection_t * connection = hci_connection_for_handle(channel->con_handle);
1732     if (connection->l2cap_state.information_state == L2CAP_INFORMATION_STATE_IDLE){
1733         connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST;
1734         channel->state = L2CAP_STATE_WAIT_OUTGOING_EXTENDED_FEATURES;
1735         return;
1736     }
1737 #endif
1738 
1739     // fine, go ahead
1740     channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST;
1741 }
1742 
1743 static void l2cap_handle_remote_supported_features_received(l2cap_channel_t * channel){
1744     if (channel->state != L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES) return;
1745 
1746     // we have been waiting for remote supported features, if both support SSP,
1747     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));
1748     if (gap_ssp_supported_on_both_sides(channel->con_handle) && !l2cap_security_level_0_allowed_for_PSM(channel->psm)){
1749         // request security level 2
1750         channel->state = L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE;
1751         channel->required_security_level = LEVEL_2;
1752         gap_request_security_level(channel->con_handle, LEVEL_2);
1753         return;
1754     }
1755 
1756     l2cap_ready_to_connect(channel);
1757 }
1758 #endif
1759 
1760 #ifdef L2CAP_USES_CHANNELS
1761 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,
1762     uint16_t psm, uint16_t local_mtu, gap_security_level_t security_level){
1763 
1764     l2cap_channel_t * channel = btstack_memory_l2cap_channel_get();
1765     if (!channel) {
1766         return NULL;
1767     }
1768 
1769      // Init memory (make valgrind happy)
1770     memset(channel, 0, sizeof(l2cap_channel_t));
1771 
1772     // fill in
1773     channel->packet_handler = packet_handler;
1774     channel->channel_type   = channel_type;
1775     bd_addr_copy(channel->address, address);
1776     channel->address_type = address_type;
1777     channel->psm = psm;
1778     channel->local_mtu  = local_mtu;
1779     channel->remote_mtu = L2CAP_DEFAULT_MTU;
1780     channel->required_security_level = security_level;
1781 
1782     //
1783     channel->local_cid = l2cap_next_local_cid();
1784     channel->con_handle = 0;
1785 
1786     // set initial state
1787     channel->state = L2CAP_STATE_WILL_SEND_CREATE_CONNECTION;
1788     channel->state_var = L2CAP_CHANNEL_STATE_VAR_NONE;
1789     channel->remote_sig_id = L2CAP_SIG_ID_INVALID;
1790     channel->local_sig_id = L2CAP_SIG_ID_INVALID;
1791 
1792     return channel;
1793 }
1794 #endif
1795 
1796 #ifdef ENABLE_CLASSIC
1797 
1798 /**
1799  * @brief Creates L2CAP channel to the PSM of a remote device with baseband address. A new baseband connection will be initiated if necessary.
1800  * @param packet_handler
1801  * @param address
1802  * @param psm
1803  * @param mtu
1804  * @param local_cid
1805  */
1806 
1807 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){
1808     // limit MTU to the size of our outtgoing HCI buffer
1809     uint16_t local_mtu = btstack_min(mtu, l2cap_max_mtu());
1810 
1811     log_info("L2CAP_CREATE_CHANNEL addr %s psm 0x%x mtu %u -> local mtu %u", bd_addr_to_str(address), psm, mtu, local_mtu);
1812 
1813     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);
1814     if (!channel) {
1815         return BTSTACK_MEMORY_ALLOC_FAILED;
1816     }
1817 
1818 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
1819     channel->mode = L2CAP_CHANNEL_MODE_BASIC;
1820 #endif
1821 
1822     // add to connections list
1823     btstack_linked_list_add(&l2cap_channels, (btstack_linked_item_t *) channel);
1824 
1825     // store local_cid
1826     if (out_local_cid){
1827        *out_local_cid = channel->local_cid;
1828     }
1829 
1830     // check if hci connection is already usable
1831     hci_connection_t * conn = hci_connection_for_bd_addr_and_type(address, BD_ADDR_TYPE_CLASSIC);
1832     if (conn){
1833         log_info("l2cap_create_channel, hci connection already exists");
1834         l2cap_handle_connection_complete(conn->con_handle, channel);
1835         // check if remote supported fearures are already received
1836         if (conn->bonding_flags & BONDING_RECEIVED_REMOTE_FEATURES) {
1837             l2cap_handle_remote_supported_features_received(channel);
1838         }
1839     }
1840 
1841     l2cap_run();
1842 
1843     return 0;
1844 }
1845 
1846 void
1847 l2cap_disconnect(uint16_t local_cid, uint8_t reason){
1848     log_info("L2CAP_DISCONNECT local_cid 0x%x reason 0x%x", local_cid, reason);
1849     // find channel for local_cid
1850     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
1851     if (channel) {
1852         channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
1853     }
1854     // process
1855     l2cap_run();
1856 }
1857 
1858 static void l2cap_handle_connection_failed_for_addr(bd_addr_t address, uint8_t status){
1859     // mark all channels before emitting open events as these could trigger new connetion requests to the same device
1860     btstack_linked_list_iterator_t it;
1861     btstack_linked_list_iterator_init(&it, &l2cap_channels);
1862     while (btstack_linked_list_iterator_has_next(&it)){
1863         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
1864         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
1865         if (bd_addr_cmp( channel->address, address) != 0) continue;
1866         // channel for this address found
1867         switch (channel->state){
1868             case L2CAP_STATE_WAIT_CONNECTION_COMPLETE:
1869             case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION:
1870                 channel->state = L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD;
1871                 break;
1872             default:
1873                 break;
1874         }
1875     }
1876     // emit and free marked entries. restart loop to deal with list changes
1877     int done = 0;
1878     while (!done) {
1879         done = 1;
1880         btstack_linked_list_iterator_init(&it, &l2cap_channels);
1881         while (btstack_linked_list_iterator_has_next(&it)){
1882             l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
1883             if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
1884             if (channel->state == L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD){
1885                 done = 0;
1886                 // failure, forward error code
1887                 l2cap_emit_channel_opened(channel, status);
1888                 // discard channel
1889                 l2cap_stop_rtx(channel);
1890                 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
1891                 btstack_memory_l2cap_channel_free(channel);
1892                 break;
1893             }
1894         }
1895     }
1896 
1897 }
1898 
1899 static void l2cap_handle_connection_success_for_addr(bd_addr_t address, hci_con_handle_t handle){
1900     btstack_linked_list_iterator_t it;
1901     btstack_linked_list_iterator_init(&it, &l2cap_channels);
1902     while (btstack_linked_list_iterator_has_next(&it)){
1903         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
1904         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
1905         if ( ! bd_addr_cmp( channel->address, address) ){
1906             l2cap_handle_connection_complete(handle, channel);
1907         }
1908     }
1909     // process
1910     l2cap_run();
1911 }
1912 #endif
1913 
1914 static void l2cap_notify_channel_can_send(void){
1915     int done = 0;
1916     while (!done){
1917         done = 1;
1918         btstack_linked_list_iterator_t it;
1919         btstack_linked_list_iterator_init(&it, &l2cap_channels);
1920         while (btstack_linked_list_iterator_has_next(&it)){
1921             l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
1922             if (!channel->waiting_for_can_send_now) continue;
1923             int can_send = 0;
1924             if (l2cap_is_le_channel_type(channel->channel_type)){
1925 #ifdef ENABLE_BLE
1926                 can_send = hci_can_send_acl_le_packet_now();
1927 #endif
1928             } else {
1929 #ifdef ENABLE_CLASSIC
1930                 can_send = hci_can_send_acl_classic_packet_now();
1931 #endif
1932             }
1933             if (!can_send) continue;
1934             // requeue for fairness
1935             btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
1936             btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel);
1937             // emit can send
1938             channel->waiting_for_can_send_now = 0;
1939             l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid);
1940             // exit inner loop as we just broke the iterator, but try again
1941             done = 0;
1942             break;
1943         }
1944     }
1945 }
1946 
1947 #ifdef L2CAP_USES_CHANNELS
1948 
1949 static int l2cap_send_open_failed_on_hci_disconnect(l2cap_channel_t * channel){
1950     // open cannot fail for for incoming connections
1951     if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) return 0;
1952 
1953     // check state
1954     switch (channel->state){
1955         case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION:
1956         case L2CAP_STATE_WAIT_CONNECTION_COMPLETE:
1957         case L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES:
1958         case L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE:
1959         case L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT:
1960         case L2CAP_STATE_WAIT_OUTGOING_EXTENDED_FEATURES:
1961         case L2CAP_STATE_WAIT_CONNECT_RSP:
1962         case L2CAP_STATE_CONFIG:
1963         case L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST:
1964         case L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST:
1965         case L2CAP_STATE_WAIT_LE_CONNECTION_RESPONSE:
1966         case L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD:
1967             return 1;
1968 
1969         case L2CAP_STATE_OPEN:
1970         case L2CAP_STATE_CLOSED:
1971         case L2CAP_STATE_WAIT_INCOMING_EXTENDED_FEATURES:
1972         case L2CAP_STATE_WAIT_DISCONNECT:
1973         case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_INSUFFICIENT_SECURITY:
1974         case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE:
1975         case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT:
1976         case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST:
1977         case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE:
1978         case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_DECLINE:
1979         case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_ACCEPT:
1980         case L2CAP_STATE_INVALID:
1981         case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE:
1982             return 0;
1983         // no default here, to get a warning about new states
1984     }
1985     // still, the compiler insists on a return value
1986     return 0;
1987 }
1988 #endif
1989 
1990 #ifdef ENABLE_CLASSIC
1991 static void l2cap_handle_hci_disconnect_event(l2cap_channel_t * channel){
1992     if (l2cap_send_open_failed_on_hci_disconnect(channel)){
1993         l2cap_emit_channel_opened(channel, L2CAP_CONNECTION_BASEBAND_DISCONNECT);
1994     } else {
1995         l2cap_emit_channel_closed(channel);
1996     }
1997     btstack_memory_l2cap_channel_free(channel);
1998 }
1999 #endif
2000 
2001 #ifdef ENABLE_LE_DATA_CHANNELS
2002 static void l2cap_handle_hci_le_disconnect_event(l2cap_channel_t * channel){
2003     if (l2cap_send_open_failed_on_hci_disconnect(channel)){
2004         l2cap_emit_le_channel_opened(channel, L2CAP_CONNECTION_BASEBAND_DISCONNECT);
2005     } else {
2006         l2cap_emit_le_channel_closed(channel);
2007     }
2008     btstack_memory_l2cap_channel_free(channel);
2009 }
2010 #endif
2011 
2012 static void l2cap_hci_event_handler(uint8_t packet_type, uint16_t cid, uint8_t *packet, uint16_t size){
2013 
2014     UNUSED(packet_type); // ok: registered with hci_event_callback_registration
2015     UNUSED(cid);         // ok: there is no channel
2016     UNUSED(size);        // ok: fixed format events read from HCI buffer
2017 
2018 #ifdef ENABLE_CLASSIC
2019     bd_addr_t address;
2020     int hci_con_used;
2021 #endif
2022 #ifdef L2CAP_USES_CHANNELS
2023     hci_con_handle_t handle;
2024     btstack_linked_list_iterator_t it;
2025 #endif
2026 
2027     switch(hci_event_packet_get_type(packet)){
2028 
2029         // Notify channel packet handler if they can send now
2030         case HCI_EVENT_TRANSPORT_PACKET_SENT:
2031         case HCI_EVENT_NUMBER_OF_COMPLETED_PACKETS:
2032             l2cap_run();    // try sending signaling packets first
2033             l2cap_notify_channel_can_send();
2034             break;
2035 
2036         case HCI_EVENT_COMMAND_STATUS:
2037             l2cap_run();    // try sending signaling packets first
2038             break;
2039 
2040 #ifdef ENABLE_CLASSIC
2041         // handle connection complete events
2042         case HCI_EVENT_CONNECTION_COMPLETE:
2043             reverse_bd_addr(&packet[5], address);
2044             if (packet[2] == 0){
2045                 handle = little_endian_read_16(packet, 3);
2046                 l2cap_handle_connection_success_for_addr(address, handle);
2047             } else {
2048                 l2cap_handle_connection_failed_for_addr(address, packet[2]);
2049             }
2050             break;
2051 
2052         // handle successful create connection cancel command
2053         case HCI_EVENT_COMMAND_COMPLETE:
2054             if (HCI_EVENT_IS_COMMAND_COMPLETE(packet, hci_create_connection_cancel)) {
2055                 if (packet[5] == 0){
2056                     reverse_bd_addr(&packet[6], address);
2057                     // CONNECTION TERMINATED BY LOCAL HOST (0X16)
2058                     l2cap_handle_connection_failed_for_addr(address, 0x16);
2059                 }
2060             }
2061             l2cap_run();    // try sending signaling packets first
2062             break;
2063 #endif
2064 
2065 #ifdef L2CAP_USES_CHANNELS
2066         // handle disconnection complete events
2067         case HCI_EVENT_DISCONNECTION_COMPLETE:
2068             handle = little_endian_read_16(packet, 3);
2069             // send l2cap open failed or closed events for all channels on this handle and free them
2070             btstack_linked_list_iterator_init(&it, &l2cap_channels);
2071             while (btstack_linked_list_iterator_has_next(&it)){
2072                 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2073                 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2074                 if (channel->con_handle != handle) continue;
2075                 btstack_linked_list_iterator_remove(&it);
2076                 switch(channel->channel_type){
2077 #ifdef ENABLE_CLASSIC
2078                     case L2CAP_CHANNEL_TYPE_CLASSIC:
2079                         l2cap_stop_rtx(channel);
2080                         l2cap_handle_hci_disconnect_event(channel);
2081                         break;
2082 #endif
2083 #ifdef ENABLE_LE_DATA_CHANNELS
2084                     case L2CAP_CHANNEL_TYPE_LE_DATA_CHANNEL:
2085                         l2cap_handle_hci_le_disconnect_event(channel);
2086                         break;
2087 #endif
2088                     default:
2089                         break;
2090                 }
2091             }
2092 #endif
2093 
2094         // HCI Connection Timeouts
2095 #ifdef ENABLE_CLASSIC
2096         case L2CAP_EVENT_TIMEOUT_CHECK:
2097             handle = little_endian_read_16(packet, 2);
2098             if (gap_get_connection_type(handle) != GAP_CONNECTION_ACL) break;
2099             if (hci_authentication_active_for_handle(handle)) break;
2100             hci_con_used = 0;
2101             btstack_linked_list_iterator_init(&it, &l2cap_channels);
2102             while (btstack_linked_list_iterator_has_next(&it)){
2103                 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2104                 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2105                 if (channel->con_handle != handle) continue;
2106                 hci_con_used = 1;
2107                 break;
2108             }
2109             if (hci_con_used) break;
2110             if (!hci_can_send_command_packet_now()) break;
2111             hci_send_cmd(&hci_disconnect, handle, 0x13); // remote closed connection
2112             break;
2113 
2114         case HCI_EVENT_READ_REMOTE_SUPPORTED_FEATURES_COMPLETE:
2115             handle = little_endian_read_16(packet, 3);
2116             btstack_linked_list_iterator_init(&it, &l2cap_channels);
2117             while (btstack_linked_list_iterator_has_next(&it)){
2118                 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2119                 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2120                 if (channel->con_handle != handle) continue;
2121                 l2cap_handle_remote_supported_features_received(channel);
2122                 break;
2123             }
2124             break;
2125 
2126         case GAP_EVENT_SECURITY_LEVEL:
2127             handle = little_endian_read_16(packet, 2);
2128             log_info("l2cap - security level update");
2129             btstack_linked_list_iterator_init(&it, &l2cap_channels);
2130             while (btstack_linked_list_iterator_has_next(&it)){
2131                 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2132                 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2133                 if (channel->con_handle != handle) continue;
2134 
2135                 gap_security_level_t actual_level = (gap_security_level_t) packet[4];
2136                 gap_security_level_t required_level = channel->required_security_level;
2137 
2138                 log_info("channel state %u: actual %u >= required %u?", channel->state, actual_level, required_level);
2139 
2140                 switch (channel->state){
2141                     case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE:
2142                         if (actual_level >= required_level){
2143 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2144                             // we need to know if ERTM is supported before sending a config response
2145                             hci_connection_t * connection = hci_connection_for_handle(channel->con_handle);
2146                             connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST;
2147                             channel->state = L2CAP_STATE_WAIT_INCOMING_EXTENDED_FEATURES;
2148 #else
2149                             channel->state = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT;
2150                             l2cap_emit_incoming_connection(channel);
2151 #endif
2152                         } else {
2153                             channel->reason = 0x0003; // security block
2154                             channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE;
2155                         }
2156                         break;
2157 
2158                     case L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE:
2159                         if (actual_level >= required_level){
2160                             l2cap_ready_to_connect(channel);
2161                         } else {
2162                             // disconnnect, authentication not good enough
2163                             hci_disconnect_security_block(handle);
2164                         }
2165                         break;
2166 
2167                     default:
2168                         break;
2169                 }
2170             }
2171             break;
2172 #endif
2173 
2174         default:
2175             break;
2176     }
2177 
2178     l2cap_run();
2179 }
2180 
2181 static void l2cap_register_signaling_response(hci_con_handle_t handle, uint8_t code, uint8_t sig_id, uint16_t cid, uint16_t data){
2182     // Vol 3, Part A, 4.3: "The DCID and SCID fields shall be ignored when the result field indi- cates the connection was refused."
2183     if (signaling_responses_pending < NR_PENDING_SIGNALING_RESPONSES) {
2184         signaling_responses[signaling_responses_pending].handle = handle;
2185         signaling_responses[signaling_responses_pending].code = code;
2186         signaling_responses[signaling_responses_pending].sig_id = sig_id;
2187         signaling_responses[signaling_responses_pending].cid = cid;
2188         signaling_responses[signaling_responses_pending].data = data;
2189         signaling_responses_pending++;
2190         l2cap_run();
2191     }
2192 }
2193 
2194 #ifdef ENABLE_CLASSIC
2195 static void l2cap_handle_disconnect_request(l2cap_channel_t *channel, uint16_t identifier){
2196     channel->remote_sig_id = identifier;
2197     channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE;
2198     l2cap_run();
2199 }
2200 
2201 static void l2cap_handle_connection_request(hci_con_handle_t handle, uint8_t sig_id, uint16_t psm, uint16_t source_cid){
2202 
2203     // log_info("l2cap_handle_connection_request for handle %u, psm %u cid 0x%02x", handle, psm, source_cid);
2204     l2cap_service_t *service = l2cap_get_service(psm);
2205     if (!service) {
2206         // 0x0002 PSM not supported
2207         l2cap_register_signaling_response(handle, CONNECTION_REQUEST, sig_id, source_cid, 0x0002);
2208         return;
2209     }
2210 
2211     hci_connection_t * hci_connection = hci_connection_for_handle( handle );
2212     if (!hci_connection) {
2213         //
2214         log_error("no hci_connection for handle %u", handle);
2215         return;
2216     }
2217 
2218     // alloc structure
2219     // log_info("l2cap_handle_connection_request register channel");
2220     l2cap_channel_t * channel = l2cap_create_channel_entry(service->packet_handler, L2CAP_CHANNEL_TYPE_CLASSIC, hci_connection->address, BD_ADDR_TYPE_CLASSIC,
2221     psm, service->mtu, service->required_security_level);
2222     if (!channel){
2223         // 0x0004 No resources available
2224         l2cap_register_signaling_response(handle, CONNECTION_REQUEST, sig_id, source_cid, 0x0004);
2225         return;
2226     }
2227 
2228     channel->con_handle = handle;
2229     channel->remote_cid = source_cid;
2230     channel->remote_sig_id = sig_id;
2231 
2232     // limit local mtu to max acl packet length - l2cap header
2233     if (channel->local_mtu > l2cap_max_mtu()) {
2234         channel->local_mtu = l2cap_max_mtu();
2235     }
2236 
2237     // set initial state
2238     channel->state =      L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE;
2239     channel->state_var  = (L2CAP_CHANNEL_STATE_VAR) (L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND | L2CAP_CHANNEL_STATE_VAR_INCOMING);
2240 
2241     // add to connections list
2242     btstack_linked_list_add(&l2cap_channels, (btstack_linked_item_t *) channel);
2243 
2244     // assert security requirements
2245     gap_request_security_level(handle, channel->required_security_level);
2246 }
2247 
2248 void l2cap_accept_connection(uint16_t local_cid){
2249     log_info("L2CAP_ACCEPT_CONNECTION local_cid 0x%x", local_cid);
2250     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
2251     if (!channel) {
2252         log_error("l2cap_accept_connection called but local_cid 0x%x not found", local_cid);
2253         return;
2254     }
2255 
2256 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2257     // configure L2CAP Basic mode
2258     channel->mode  = L2CAP_CHANNEL_MODE_BASIC;
2259 #endif
2260 
2261     channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT;
2262 
2263     // process
2264     l2cap_run();
2265 }
2266 
2267 void l2cap_decline_connection(uint16_t local_cid){
2268     log_info("L2CAP_DECLINE_CONNECTION local_cid 0x%x", local_cid);
2269     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid( local_cid);
2270     if (!channel) {
2271         log_error( "l2cap_decline_connection called but local_cid 0x%x not found", local_cid);
2272         return;
2273     }
2274     channel->state  = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE;
2275     channel->reason = 0x04; // no resources available
2276     l2cap_run();
2277 }
2278 
2279 // @pre command len is valid, see check in l2cap_signaling_handler_channel
2280 static void l2cap_signaling_handle_configure_request(l2cap_channel_t *channel, uint8_t *command){
2281 
2282 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2283     uint8_t use_fcs = 1;
2284 #endif
2285 
2286     channel->remote_sig_id = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET];
2287 
2288     uint16_t flags = little_endian_read_16(command, 6);
2289     if (flags & 1) {
2290         channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT);
2291     }
2292 
2293     // accept the other's configuration options
2294     uint16_t end_pos = 4 + little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
2295     uint16_t pos     = 8;
2296     while (pos < end_pos){
2297         uint8_t option_hint = command[pos] >> 7;
2298         uint8_t option_type = command[pos] & 0x7f;
2299         // log_info("l2cap cid %u, hint %u, type %u", channel->local_cid, option_hint, option_type);
2300         pos++;
2301         uint8_t length = command[pos++];
2302         // MTU { type(8): 1, len(8):2, MTU(16) }
2303         if (option_type == L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT && length == 2){
2304             channel->remote_mtu = little_endian_read_16(command, pos);
2305             log_info("Remote MTU %u", channel->remote_mtu);
2306             if (channel->remote_mtu > l2cap_max_mtu()){
2307                 log_info("Remote MTU %u larger than outgoing buffer, only using MTU = %u", channel->remote_mtu, l2cap_max_mtu());
2308                 channel->remote_mtu = l2cap_max_mtu();
2309             }
2310             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU);
2311         }
2312         // Flush timeout { type(8):2, len(8): 2, Flush Timeout(16)}
2313         if (option_type == L2CAP_CONFIG_OPTION_TYPE_FLUSH_TIMEOUT && length == 2){
2314             channel->flush_timeout = little_endian_read_16(command, pos);
2315             log_info("Flush timeout: %u ms", channel->flush_timeout);
2316         }
2317 
2318 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2319         // Retransmission and Flow Control Option
2320         if (option_type == L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL && length == 9){
2321             l2cap_channel_mode_t mode = (l2cap_channel_mode_t) command[pos];
2322             switch(channel->mode){
2323                 case L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION:
2324                     // Store remote config
2325                     channel->remote_tx_window_size = command[pos+1];
2326                     channel->remote_max_transmit   = command[pos+2];
2327                     channel->remote_retransmission_timeout_ms = little_endian_read_16(command, pos + 3);
2328                     channel->remote_monitor_timeout_ms = little_endian_read_16(command, pos + 5);
2329                     channel->remote_mps = little_endian_read_16(command, pos + 7);
2330                     log_info("FC&C config: tx window: %u, max transmit %u, retrans timeout %u, monitor timeout %u, mps %u",
2331                         channel->remote_tx_window_size,
2332                         channel->remote_max_transmit,
2333                         channel->remote_retransmission_timeout_ms,
2334                         channel->remote_monitor_timeout_ms,
2335                         channel->remote_mps);
2336                     // If ERTM mandatory, but remote doens't offer ERTM -> disconnect
2337                     if (channel->ertm_mandatory && mode != L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
2338                         channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2339                     } else {
2340                         channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU);
2341                     }
2342                     break;
2343                 case L2CAP_CHANNEL_MODE_BASIC:
2344                     switch (mode){
2345                         case L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION:
2346                             // remote asks for ERTM, but we want basic mode. disconnect if this happens a second time
2347                             if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_BASIC_FALLBACK_TRIED){
2348                                 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2349                             }
2350                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_BASIC_FALLBACK_TRIED);
2351                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_REJECTED);
2352                             break;
2353                         default: // case L2CAP_CHANNEL_MODE_BASIC:
2354                             // TODO store and evaluate configuration
2355                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU);
2356                             break;
2357                     }
2358                     break;
2359                 default:
2360                     break;
2361             }
2362         }
2363         if (option_type == L2CAP_CONFIG_OPTION_TYPE_FRAME_CHECK_SEQUENCE && length == 1){
2364             use_fcs = command[pos];
2365         }
2366 #endif
2367         // check for unknown options
2368         if (option_hint == 0 && (option_type < L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT || option_type > L2CAP_CONFIG_OPTION_TYPE_EXTENDED_WINDOW_SIZE)){
2369             log_info("l2cap cid %u, unknown options", channel->local_cid);
2370             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_INVALID);
2371         }
2372         pos += length;
2373     }
2374 
2375 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2376         // "FCS" has precedence over "No FCS"
2377         uint8_t update = channel->fcs_option || use_fcs;
2378         log_info("local fcs: %u, remote fcs: %u -> %u", channel->fcs_option, use_fcs, update);
2379         channel->fcs_option = update;
2380 #endif
2381 }
2382 
2383 // @pre command len is valid, see check in l2cap_signaling_handler_channel
2384 static void l2cap_signaling_handle_configure_response(l2cap_channel_t *channel, uint8_t result, uint8_t *command){
2385     log_info("l2cap_signaling_handle_configure_response");
2386 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2387     uint16_t end_pos = 4 + little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
2388     uint16_t pos     = 10;
2389     while (pos < end_pos){
2390         uint8_t option_hint = command[pos] >> 7;
2391         uint8_t option_type = command[pos] & 0x7f;
2392         // log_info("l2cap cid %u, hint %u, type %u", channel->local_cid, option_hint, option_type);
2393         pos++;
2394         uint8_t length = command[pos++];
2395 
2396         // Retransmission and Flow Control Option
2397         if (option_type == L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL && length == 9){
2398             switch (channel->mode){
2399                 case L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION:
2400                     if (channel->ertm_mandatory){
2401                         // ??
2402                     } else {
2403                         // On 'Reject - Unacceptable Parameters' to our optional ERTM request, fall back to BASIC mode
2404                         if (result == L2CAP_CONF_RESULT_UNACCEPTABLE_PARAMETERS){
2405                             channel->mode = L2CAP_CHANNEL_MODE_BASIC;
2406                         }
2407                     }
2408                     break;
2409                 case L2CAP_CHANNEL_MODE_BASIC:
2410                     if (result == L2CAP_CONF_RESULT_UNACCEPTABLE_PARAMETERS){
2411                         // On 'Reject - Unacceptable Parameters' to our Basic mode request, disconnect
2412                         channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2413                     }
2414                     break;
2415                 default:
2416                     break;
2417             }
2418         }
2419 
2420         // check for unknown options
2421         if (option_hint == 0 && (option_type < L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT || option_type > L2CAP_CONFIG_OPTION_TYPE_EXTENDED_WINDOW_SIZE)){
2422             log_info("l2cap cid %u, unknown options", channel->local_cid);
2423             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_INVALID);
2424         }
2425 
2426         pos += length;
2427     }
2428 #else
2429     UNUSED(channel);  // ok: no code
2430     UNUSED(result);   // ok: no code
2431     UNUSED(command);  // ok: no code
2432 #endif
2433 }
2434 
2435 static int l2cap_channel_ready_for_open(l2cap_channel_t *channel){
2436     // log_info("l2cap_channel_ready_for_open 0x%02x", channel->state_var);
2437     if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_RSP) == 0) return 0;
2438     if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP) == 0) return 0;
2439     // addition check that fixes re-entrance issue causing l2cap event channel opened twice
2440     if (channel->state == L2CAP_STATE_OPEN) return 0;
2441     return 1;
2442 }
2443 
2444 
2445 // @pre command len is valid, see check in l2cap_signaling_handler_dispatch
2446 static void l2cap_signaling_handler_channel(l2cap_channel_t *channel, uint8_t *command){
2447 
2448     uint8_t  code       = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET];
2449     uint8_t  identifier = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET];
2450     uint16_t cmd_len    = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
2451     uint16_t result = 0;
2452 
2453     log_info("L2CAP signaling handler code %u, state %u", code, channel->state);
2454 
2455     // handle DISCONNECT REQUESTS seperately
2456     if (code == DISCONNECTION_REQUEST){
2457         switch (channel->state){
2458             case L2CAP_STATE_CONFIG:
2459             case L2CAP_STATE_OPEN:
2460             case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST:
2461             case L2CAP_STATE_WAIT_DISCONNECT:
2462                 l2cap_handle_disconnect_request(channel, identifier);
2463                 break;
2464 
2465             default:
2466                 // ignore in other states
2467                 break;
2468         }
2469         return;
2470     }
2471 
2472     // @STATEMACHINE(l2cap)
2473     switch (channel->state) {
2474 
2475         case L2CAP_STATE_WAIT_CONNECT_RSP:
2476             switch (code){
2477                 case CONNECTION_RESPONSE:
2478                     if (cmd_len < 8){
2479                         // command imcomplete
2480                         l2cap_register_signaling_response(channel->con_handle, COMMAND_REJECT, identifier, 0, L2CAP_REJ_CMD_UNKNOWN);
2481                         break;
2482                     }
2483                     l2cap_stop_rtx(channel);
2484                     result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4);
2485                     switch (result) {
2486                         case 0:
2487                             // successful connection
2488                             channel->remote_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
2489                             channel->state = L2CAP_STATE_CONFIG;
2490                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ);
2491                             break;
2492                         case 1:
2493                             // connection pending. get some coffee, but start the ERTX
2494                             l2cap_start_ertx(channel);
2495                             break;
2496                         default:
2497                             // channel closed
2498                             channel->state = L2CAP_STATE_CLOSED;
2499                             // map l2cap connection response result to BTstack status enumeration
2500                             l2cap_emit_channel_opened(channel, L2CAP_CONNECTION_RESPONSE_RESULT_SUCCESSFUL + result);
2501 
2502                             // drop link key if security block
2503                             if (L2CAP_CONNECTION_RESPONSE_RESULT_SUCCESSFUL + result == L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY){
2504                                 gap_drop_link_key_for_bd_addr(channel->address);
2505                             }
2506 
2507                             // discard channel
2508                             btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
2509                             btstack_memory_l2cap_channel_free(channel);
2510                             break;
2511                     }
2512                     break;
2513 
2514                 default:
2515                     //@TODO: implement other signaling packets
2516                     break;
2517             }
2518             break;
2519 
2520         case L2CAP_STATE_CONFIG:
2521             switch (code) {
2522                 case CONFIGURE_REQUEST:
2523                     if (cmd_len < 4){
2524                         // command incomplete
2525                         l2cap_register_signaling_response(channel->con_handle, COMMAND_REJECT, identifier, 0, L2CAP_REJ_CMD_UNKNOWN);
2526                         break;
2527                     }
2528                     channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP);
2529                     l2cap_signaling_handle_configure_request(channel, command);
2530                     if (!(channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT)){
2531                         // only done if continuation not set
2532                         channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_REQ);
2533                     }
2534                     break;
2535                 case CONFIGURE_RESPONSE:
2536                     if (cmd_len < 6){
2537                         // command incomplete
2538                         l2cap_register_signaling_response(channel->con_handle, COMMAND_REJECT, identifier, 0, L2CAP_REJ_CMD_UNKNOWN);
2539                         break;
2540                     }
2541                     result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4);
2542                     l2cap_stop_rtx(channel);
2543                     l2cap_signaling_handle_configure_response(channel, result, command);
2544                     switch (result){
2545                         case 0: // success
2546                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_RSP);
2547                             break;
2548                         case 4: // pending
2549                             l2cap_start_ertx(channel);
2550                             break;
2551                         default:
2552 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2553                             if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION && channel->ertm_mandatory){
2554                                 // remote does not offer ertm but it's required
2555                                 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2556                                 break;
2557                             }
2558 #endif
2559                             // retry on negative result
2560                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ);
2561                             break;
2562                     }
2563                     break;
2564                 default:
2565                     break;
2566             }
2567             if (l2cap_channel_ready_for_open(channel)){
2568                 // for open:
2569                 channel->state = L2CAP_STATE_OPEN;
2570                 l2cap_emit_channel_opened(channel, 0);
2571             }
2572             break;
2573 
2574         case L2CAP_STATE_WAIT_DISCONNECT:
2575             switch (code) {
2576                 case DISCONNECTION_RESPONSE:
2577                     l2cap_finialize_channel_close(channel);
2578                     break;
2579                 default:
2580                     //@TODO: implement other signaling packets
2581                     break;
2582             }
2583             break;
2584 
2585         case L2CAP_STATE_CLOSED:
2586             // @TODO handle incoming requests
2587             break;
2588 
2589         case L2CAP_STATE_OPEN:
2590             //@TODO: implement other signaling packets, e.g. re-configure
2591             break;
2592         default:
2593             break;
2594     }
2595     // log_info("new state %u", channel->state);
2596 }
2597 
2598 
2599 // @pre command len is valid, see check in l2cap_acl_classic_handler
2600 static void l2cap_signaling_handler_dispatch(hci_con_handle_t handle, uint8_t * command){
2601 
2602     btstack_linked_list_iterator_t it;
2603 
2604     // get code, signalind identifier and command len
2605     uint8_t code     = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET];
2606     uint8_t sig_id   = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET];
2607     uint16_t cmd_len = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
2608 
2609     // not for a particular channel, and not CONNECTION_REQUEST, ECHO_[REQUEST|RESPONSE], INFORMATION_RESPONSE
2610     if (code < 1 || code == ECHO_RESPONSE || code > INFORMATION_RESPONSE){
2611         l2cap_register_signaling_response(handle, COMMAND_REJECT, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN);
2612         return;
2613     }
2614 
2615     // general commands without an assigned channel
2616     switch(code) {
2617 
2618         case CONNECTION_REQUEST:
2619             if (cmd_len == 4){
2620                 uint16_t psm =        little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
2621                 uint16_t source_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2);
2622                 l2cap_handle_connection_request(handle, sig_id, psm, source_cid);
2623             } else {
2624                 l2cap_register_signaling_response(handle, COMMAND_REJECT, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN);
2625             }
2626             return;
2627 
2628         case ECHO_REQUEST:
2629             l2cap_register_signaling_response(handle, code, sig_id, 0, 0);
2630             return;
2631 
2632         case INFORMATION_REQUEST:
2633             if (cmd_len == 2) {
2634                 uint16_t info_type = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
2635                 l2cap_register_signaling_response(handle, code, sig_id, 0, info_type);
2636             } else {
2637                 l2cap_register_signaling_response(handle, COMMAND_REJECT, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN);
2638             }
2639             return;
2640 
2641 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
2642         case INFORMATION_RESPONSE: {
2643             hci_connection_t * connection = hci_connection_for_handle(handle);
2644             if (!connection) return;
2645             if (cmd_len >= 4) {
2646                 uint16_t info_type = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
2647                 uint16_t result =  little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2);
2648                 if (result != 0) return;
2649                 if (info_type != L2CAP_INFO_TYPE_EXTENDED_FEATURES_SUPPORTED) return;
2650                 if (cmd_len >= 6) {
2651                     connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_DONE;
2652                     connection->l2cap_state.extended_feature_mask = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4);
2653                     log_info("extended features mask 0x%02x", connection->l2cap_state.extended_feature_mask);
2654                     // trigger connection request
2655                     btstack_linked_list_iterator_init(&it, &l2cap_channels);
2656                     while (btstack_linked_list_iterator_has_next(&it)){
2657                         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2658                         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2659                         if (channel->con_handle != handle) continue;
2660                         // bail if ERTM was requested but is not supported
2661                         if ((channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) && ((connection->l2cap_state.extended_feature_mask & 0x08) == 0)){
2662                             if (channel->ertm_mandatory){
2663                                 // channel closed
2664                                 channel->state = L2CAP_STATE_CLOSED;
2665                                 // map l2cap connection response result to BTstack status enumeration
2666                                 l2cap_emit_channel_opened(channel, L2CAP_CONNECTION_RESPONSE_RESULT_ERTM_NOT_SUPPORTED);
2667                                 // discard channel
2668                                 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
2669                                 btstack_memory_l2cap_channel_free(channel);
2670                                 continue;
2671                             } else {
2672                                 // fallback to Basic mode
2673                                 channel->mode = L2CAP_CHANNEL_MODE_BASIC;
2674                             }
2675                         }
2676                         // start connecting
2677                         if (channel->state == L2CAP_STATE_WAIT_OUTGOING_EXTENDED_FEATURES){
2678                             channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST;
2679                         }
2680                         // respond to connection request
2681                         if (channel->state == L2CAP_STATE_WAIT_INCOMING_EXTENDED_FEATURES){
2682                             channel->state = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT;
2683                             l2cap_emit_incoming_connection(channel);
2684                         }
2685                     }
2686                     return; // cmd len valid
2687                 }
2688             }
2689             l2cap_register_signaling_response(handle, COMMAND_REJECT, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN);
2690             return;
2691         }
2692 #endif
2693 
2694         default:
2695             break;
2696     }
2697 
2698     // Get potential destination CID
2699     uint16_t dest_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
2700 
2701     // Find channel for this sig_id and connection handle
2702     btstack_linked_list_iterator_init(&it, &l2cap_channels);
2703     while (btstack_linked_list_iterator_has_next(&it)){
2704         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2705         if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue;
2706         if (channel->con_handle != handle) continue;
2707         if (code & 1) {
2708             // match odd commands (responses) by previous signaling identifier
2709             if (channel->local_sig_id == sig_id) {
2710                 l2cap_signaling_handler_channel(channel, command);
2711                 break;
2712             }
2713         } else {
2714             // match even commands (requests) by local channel id
2715             if (channel->local_cid == dest_cid) {
2716                 l2cap_signaling_handler_channel(channel, command);
2717                 break;
2718             }
2719         }
2720     }
2721 }
2722 #endif
2723 
2724 #ifdef ENABLE_BLE
2725 
2726 static void l2cap_emit_connection_parameter_update_response(hci_con_handle_t con_handle, uint16_t result){
2727     uint8_t event[6];
2728     event[0] = L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_RESPONSE;
2729     event[1] = 4;
2730     little_endian_store_16(event, 2, con_handle);
2731     little_endian_store_16(event, 4, result);
2732     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
2733     if (!l2cap_event_packet_handler) return;
2734     (*l2cap_event_packet_handler)(HCI_EVENT_PACKET, 0, event, sizeof(event));
2735 }
2736 
2737 // @returns valid
2738 static int l2cap_le_signaling_handler_dispatch(hci_con_handle_t handle, uint8_t * command, uint8_t sig_id){
2739     hci_connection_t * connection;
2740     uint16_t result;
2741     uint8_t  event[10];
2742 
2743 #ifdef ENABLE_LE_DATA_CHANNELS
2744     btstack_linked_list_iterator_t it;
2745     l2cap_channel_t * channel;
2746     uint16_t local_cid;
2747     uint16_t le_psm;
2748     uint16_t new_credits;
2749     uint16_t credits_before;
2750     l2cap_service_t * service;
2751     uint16_t source_cid;
2752 #endif
2753 
2754     uint8_t code   = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET];
2755     uint16_t len   = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
2756     log_info("l2cap_le_signaling_handler_dispatch: command 0x%02x, sig id %u, len %u", code, sig_id, len);
2757 
2758     switch (code){
2759 
2760         case CONNECTION_PARAMETER_UPDATE_REQUEST:
2761             // check size
2762             if (len < 8) return 0;
2763             connection = hci_connection_for_handle(handle);
2764             if (connection){
2765                 if (connection->role != HCI_ROLE_MASTER){
2766                     // reject command without notifying upper layer when not in master role
2767                     return 0;
2768                 }
2769                 int update_parameter = 1;
2770                 le_connection_parameter_range_t existing_range;
2771                 gap_get_connection_parameter_range(&existing_range);
2772                 uint16_t le_conn_interval_min   = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
2773                 uint16_t le_conn_interval_max   = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2);
2774                 uint16_t le_conn_latency        = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4);
2775                 uint16_t le_supervision_timeout = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET+6);
2776 
2777                 if (le_conn_interval_min < existing_range.le_conn_interval_min) update_parameter = 0;
2778                 if (le_conn_interval_max > existing_range.le_conn_interval_max) update_parameter = 0;
2779 
2780                 if (le_conn_latency < existing_range.le_conn_latency_min) update_parameter = 0;
2781                 if (le_conn_latency > existing_range.le_conn_latency_max) update_parameter = 0;
2782 
2783                 if (le_supervision_timeout < existing_range.le_supervision_timeout_min) update_parameter = 0;
2784                 if (le_supervision_timeout > existing_range.le_supervision_timeout_max) update_parameter = 0;
2785 
2786                 if (update_parameter){
2787                     connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_SEND_RESPONSE;
2788                     connection->le_conn_interval_min = le_conn_interval_min;
2789                     connection->le_conn_interval_max = le_conn_interval_max;
2790                     connection->le_conn_latency = le_conn_latency;
2791                     connection->le_supervision_timeout = le_supervision_timeout;
2792                 } else {
2793                     connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_DENY;
2794                 }
2795                 connection->le_con_param_update_identifier = sig_id;
2796             }
2797 
2798             if (!l2cap_event_packet_handler) break;
2799 
2800             event[0] = L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_REQUEST;
2801             event[1] = 8;
2802             memcpy(&event[2], &command[4], 8);
2803             hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
2804             (*l2cap_event_packet_handler)( HCI_EVENT_PACKET, 0, event, sizeof(event));
2805             break;
2806 
2807         case CONNECTION_PARAMETER_UPDATE_RESPONSE:
2808             // check size
2809             if (len < 2) return 0;
2810             result = little_endian_read_16(command, 4);
2811             l2cap_emit_connection_parameter_update_response(handle, result);
2812             break;
2813 
2814 #ifdef ENABLE_LE_DATA_CHANNELS
2815 
2816         case COMMAND_REJECT:
2817             // Find channel for this sig_id and connection handle
2818             channel = NULL;
2819             btstack_linked_list_iterator_init(&it, &l2cap_channels);
2820             while (btstack_linked_list_iterator_has_next(&it)){
2821                 l2cap_channel_t * a_channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2822                 if (!l2cap_is_dynamic_channel_type(a_channel->channel_type)) continue;
2823                 if (a_channel->con_handle   != handle) continue;
2824                 if (a_channel->local_sig_id != sig_id) continue;
2825                 channel = a_channel;
2826                 break;
2827             }
2828             if (!channel) break;
2829 
2830             // if received while waiting for le connection response, assume legacy device
2831             if (channel->state == L2CAP_STATE_WAIT_LE_CONNECTION_RESPONSE){
2832                 channel->state = L2CAP_STATE_CLOSED;
2833                 // no official value for this, use: Connection refused – LE_PSM not supported - 0x0002
2834                 l2cap_emit_le_channel_opened(channel, 0x0002);
2835 
2836                 // discard channel
2837                 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
2838                 btstack_memory_l2cap_channel_free(channel);
2839                 break;
2840             }
2841             break;
2842 
2843         case LE_CREDIT_BASED_CONNECTION_REQUEST:
2844             // check size
2845             if (len < 10) return 0;
2846 
2847             // get hci connection, bail if not found (must not happen)
2848             connection = hci_connection_for_handle(handle);
2849             if (!connection) return 0;
2850 
2851             // check if service registered
2852             le_psm  = little_endian_read_16(command, 4);
2853             service = l2cap_le_get_service(le_psm);
2854             source_cid = little_endian_read_16(command, 6);
2855 
2856             if (service){
2857                 if (source_cid < 0x40){
2858                     // 0x0009 Connection refused - Invalid Source CID
2859                     l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0009);
2860                     return 1;
2861                 }
2862 
2863                 // go through list of channels for this ACL connection and check if we get a match
2864                 btstack_linked_list_iterator_init(&it, &l2cap_channels);
2865                 while (btstack_linked_list_iterator_has_next(&it)){
2866                     l2cap_channel_t * a_channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2867                     if (!l2cap_is_dynamic_channel_type(a_channel->channel_type)) continue;
2868                     if (a_channel->con_handle != handle) continue;
2869                     if (a_channel->remote_cid != source_cid) continue;
2870                     // 0x000a Connection refused - Source CID already allocated
2871                     l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x000a);
2872                     return 1;
2873                 }
2874 
2875                 // security: check encryption
2876                 if (service->required_security_level >= LEVEL_2){
2877                     if (gap_encryption_key_size(handle) == 0){
2878                         // 0x0008 Connection refused - insufficient encryption
2879                         l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0008);
2880                         return 1;
2881                     }
2882                     // anything less than 16 byte key size is insufficient
2883                     if (gap_encryption_key_size(handle) < 16){
2884                         // 0x0007 Connection refused – insufficient encryption key size
2885                         l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0007);
2886                         return 1;
2887                     }
2888                 }
2889 
2890                 // security: check authencation
2891                 if (service->required_security_level >= LEVEL_3){
2892                     if (!gap_authenticated(handle)){
2893                         // 0x0005 Connection refused – insufficient authentication
2894                         l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0005);
2895                         return 1;
2896                     }
2897                 }
2898 
2899                 // security: check authorization
2900                 if (service->required_security_level >= LEVEL_4){
2901                     if (gap_authorization_state(handle) != AUTHORIZATION_GRANTED){
2902                         // 0x0006 Connection refused – insufficient authorization
2903                         l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0006);
2904                         return 1;
2905                     }
2906                 }
2907 
2908                 // allocate channel
2909                 channel = l2cap_create_channel_entry(service->packet_handler, L2CAP_CHANNEL_TYPE_LE_DATA_CHANNEL, connection->address,
2910                     BD_ADDR_TYPE_LE_RANDOM, le_psm, service->mtu, service->required_security_level);
2911                 if (!channel){
2912                     // 0x0004 Connection refused – no resources available
2913                     l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0004);
2914                     return 1;
2915                 }
2916 
2917                 channel->con_handle = handle;
2918                 channel->remote_cid = source_cid;
2919                 channel->remote_sig_id = sig_id;
2920                 channel->remote_mtu = little_endian_read_16(command, 8);
2921                 channel->remote_mps = little_endian_read_16(command, 10);
2922                 channel->credits_outgoing = little_endian_read_16(command, 12);
2923 
2924                 // set initial state
2925                 channel->state      = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT;
2926                 channel->state_var |= L2CAP_CHANNEL_STATE_VAR_INCOMING;
2927 
2928                 // add to connections list
2929                 btstack_linked_list_add(&l2cap_channels, (btstack_linked_item_t *) channel);
2930 
2931                 // post connection request event
2932                 l2cap_emit_le_incoming_connection(channel);
2933 
2934             } else {
2935                 // Connection refused – LE_PSM not supported
2936                 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, 0x0002);
2937             }
2938             break;
2939 
2940         case LE_CREDIT_BASED_CONNECTION_RESPONSE:
2941             // check size
2942             if (len < 10) return 0;
2943 
2944             // Find channel for this sig_id and connection handle
2945             channel = NULL;
2946             btstack_linked_list_iterator_init(&it, &l2cap_channels);
2947             while (btstack_linked_list_iterator_has_next(&it)){
2948                 l2cap_channel_t * a_channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
2949                 if (!l2cap_is_dynamic_channel_type(a_channel->channel_type)) continue;
2950                 if (a_channel->con_handle   != handle) continue;
2951                 if (a_channel->local_sig_id != sig_id) continue;
2952                 channel = a_channel;
2953                 break;
2954             }
2955             if (!channel) break;
2956 
2957             // cid + 0
2958             result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+8);
2959             if (result){
2960                 channel->state = L2CAP_STATE_CLOSED;
2961                 // map l2cap connection response result to BTstack status enumeration
2962                 l2cap_emit_le_channel_opened(channel, result);
2963 
2964                 // discard channel
2965                 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
2966                 btstack_memory_l2cap_channel_free(channel);
2967                 break;
2968             }
2969 
2970             // success
2971             channel->remote_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0);
2972             channel->remote_mtu = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2);
2973             channel->remote_mps = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 4);
2974             channel->credits_outgoing = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 6);
2975             channel->state = L2CAP_STATE_OPEN;
2976             l2cap_emit_le_channel_opened(channel, result);
2977             break;
2978 
2979         case LE_FLOW_CONTROL_CREDIT:
2980             // check size
2981             if (len < 4) return 0;
2982 
2983             // find channel
2984             local_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0);
2985             channel = l2cap_get_channel_for_local_cid(local_cid);
2986             if (!channel) {
2987                 log_error("l2cap: no channel for cid 0x%02x", local_cid);
2988                 break;
2989             }
2990             new_credits = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2);
2991             credits_before = channel->credits_outgoing;
2992             channel->credits_outgoing += new_credits;
2993             // check for credit overrun
2994             if (credits_before > channel->credits_outgoing){
2995                 log_error("l2cap: new credits caused overrrun for cid 0x%02x, disconnecting", local_cid);
2996                 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
2997                 break;
2998             }
2999             log_info("l2cap: %u credits for 0x%02x, now %u", new_credits, local_cid, channel->credits_outgoing);
3000             break;
3001 
3002         case DISCONNECTION_REQUEST:
3003 
3004             // check size
3005             if (len < 4) return 0;
3006 
3007             // find channel
3008             local_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0);
3009             channel = l2cap_get_channel_for_local_cid(local_cid);
3010             if (!channel) {
3011                 log_error("l2cap: no channel for cid 0x%02x", local_cid);
3012                 break;
3013             }
3014             channel->remote_sig_id = sig_id;
3015             channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE;
3016             break;
3017 
3018 #endif
3019 
3020         case DISCONNECTION_RESPONSE:
3021             break;
3022 
3023         default:
3024             // command unknown -> reject command
3025             return 0;
3026     }
3027     return 1;
3028 }
3029 #endif
3030 
3031 static void l2cap_acl_classic_handler(hci_con_handle_t handle, uint8_t *packet, uint16_t size){
3032 #ifdef ENABLE_CLASSIC
3033     l2cap_channel_t * l2cap_channel;
3034     l2cap_fixed_channel_t * l2cap_fixed_channel;
3035 
3036     uint16_t channel_id = READ_L2CAP_CHANNEL_ID(packet);
3037     switch (channel_id) {
3038 
3039         case L2CAP_CID_SIGNALING: {
3040             uint16_t command_offset = 8;
3041             while (command_offset < size) {
3042                 // assert signaling command is fully inside packet
3043                 uint16_t data_len = little_endian_read_16(packet, command_offset + L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
3044                 uint32_t next_command_offset = ((uint32_t) command_offset) + L2CAP_SIGNALING_COMMAND_DATA_OFFSET + data_len;
3045                 if (next_command_offset > size){
3046                     log_error("l2cap signaling command len invalid -> drop");
3047                     break;
3048                 }
3049                 // handle signaling command
3050                 l2cap_signaling_handler_dispatch(handle, &packet[command_offset]);
3051                 // go to next command
3052                 command_offset = (uint16_t) next_command_offset;
3053             }
3054             break;
3055         }
3056         case L2CAP_CID_CONNECTIONLESS_CHANNEL:
3057             l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_CONNECTIONLESS_CHANNEL);
3058             if (!l2cap_fixed_channel) break;
3059             if (!l2cap_fixed_channel->packet_handler) break;
3060             (*l2cap_fixed_channel->packet_handler)(UCD_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER);
3061             break;
3062 
3063         default:
3064             // Find channel for this channel_id and connection handle
3065             l2cap_channel = l2cap_get_channel_for_local_cid(channel_id);
3066             if (l2cap_channel) {
3067 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
3068                 if (l2cap_channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){
3069 
3070                     int fcs_size = l2cap_channel->fcs_option ? 2 : 0;
3071 
3072                     // assert control + FCS fields are inside
3073                     if (size < COMPLETE_L2CAP_HEADER+2+fcs_size) break;
3074 
3075                     if (l2cap_channel->fcs_option){
3076                         // verify FCS (required if one side requested it)
3077                         uint16_t fcs_calculated = crc16_calc(&packet[4], size - (4+2));
3078                         uint16_t fcs_packet     = little_endian_read_16(packet, size-2);
3079                         if (fcs_calculated == fcs_packet){
3080                             log_info("Packet FCS 0x%04x verified", fcs_packet);
3081                         } else {
3082                             log_error("FCS mismatch! Packet 0x%04x, calculated 0x%04x", fcs_packet, fcs_calculated);
3083                             // TODO: trigger retransmission or something like that
3084                             break;
3085                         }
3086                     }
3087 
3088                     // switch on packet type
3089                     uint16_t control = little_endian_read_16(packet, COMPLETE_L2CAP_HEADER);
3090                     uint8_t  req_seq = (control >> 8) & 0x3f;
3091                     int final = (control >> 7) & 0x01;
3092                     if (control & 1){
3093                         // S-Frame
3094                         int poll  = (control >> 4) & 0x01;
3095                         l2cap_supervisory_function_t s = (l2cap_supervisory_function_t) ((control >> 2) & 0x03);
3096                         log_info("Control: 0x%04x => Supervisory function %u, ReqSeq %02u", control, (int) s, req_seq);
3097                         l2cap_ertm_tx_packet_state_t * tx_state;
3098                         switch (s){
3099                             case L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY:
3100                                 log_info("L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY");
3101                                 l2cap_ertm_process_req_seq(l2cap_channel, req_seq);
3102                                 if (poll && final){
3103                                     // S-frames shall not be transmitted with both the F-bit and the P-bit set to 1 at the same time.
3104                                     log_error("P=F=1 in S-Frame");
3105                                     break;
3106                                 }
3107                                 if (poll){
3108                                     // check if we did request selective retransmission before <==> we have stored SDU segments
3109                                     int i;
3110                                     int num_stored_out_of_order_packets = 0;
3111                                     for (i=0;i<l2cap_channel->num_rx_buffers;i++){
3112                                         int index = l2cap_channel->rx_store_index + i;
3113                                         if (index >= l2cap_channel->num_rx_buffers){
3114                                             index -= l2cap_channel->num_rx_buffers;
3115                                         }
3116                                         l2cap_ertm_rx_packet_state_t * rx_state = &l2cap_channel->rx_packets_state[index];
3117                                         if (!rx_state->valid) continue;
3118                                         num_stored_out_of_order_packets++;
3119                                     }
3120                                     if (num_stored_out_of_order_packets){
3121                                         l2cap_channel->send_supervisor_frame_selective_reject = 1;
3122                                     } else {
3123                                         l2cap_channel->send_supervisor_frame_receiver_ready   = 1;
3124                                     }
3125                                     l2cap_channel->set_final_bit_after_packet_with_poll_bit_set = 1;
3126                                 }
3127                                 if (final){
3128                                     // Stop-MonitorTimer
3129                                     l2cap_ertm_stop_monitor_timer(l2cap_channel);
3130                                     // If UnackedFrames > 0 then Start-RetransTimer
3131                                     if (l2cap_channel->unacked_frames){
3132                                         l2cap_ertm_start_retransmission_timer(l2cap_channel);
3133                                     }
3134 
3135                                     // final bit set <- response to RR with poll bit set. All not acknowledged packets need to be retransmitted
3136                                     l2cap_channel->tx_send_index = l2cap_channel->tx_read_index;
3137                                 }
3138                                 break;
3139                             case L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT:
3140                                 log_info("L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT");
3141                                 l2cap_ertm_process_req_seq(l2cap_channel, req_seq);
3142                                 // rsetart transmittion from last unacknowledted packet (earlier packets already freed in l2cap_ertm_process_req_seq)
3143                                 l2cap_channel->tx_send_index = l2cap_channel->tx_read_index;
3144                                 break;
3145                             case L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY:
3146                                 log_error("L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY");
3147                                 break;
3148                             case L2CAP_SUPERVISORY_FUNCTION_SREJ_SELECTIVE_REJECT:
3149                                 log_info("L2CAP_SUPERVISORY_FUNCTION_SREJ_SELECTIVE_REJECT");
3150                                 if (poll){
3151                                     l2cap_ertm_process_req_seq(l2cap_channel, req_seq);
3152                                 }
3153                                 // find requested i-frame
3154                                 tx_state = l2cap_ertm_get_tx_state(l2cap_channel, req_seq);
3155                                 if (tx_state){
3156                                     log_info("Retransmission for tx_seq %u requested", req_seq);
3157                                     l2cap_channel->set_final_bit_after_packet_with_poll_bit_set = poll;
3158                                     tx_state->retransmission_requested = 1;
3159                                     l2cap_channel->srej_active = 1;
3160                                 }
3161                                 break;
3162                             default:
3163                                 break;
3164                         }
3165                         break;
3166                     } else {
3167                         // I-Frame
3168                         // get control
3169                         l2cap_segmentation_and_reassembly_t sar = (l2cap_segmentation_and_reassembly_t) (control >> 14);
3170                         uint8_t tx_seq = (control >> 1) & 0x3f;
3171                         log_info("Control: 0x%04x => SAR %u, ReqSeq %02u, R?, TxSeq %02u", control, (int) sar, req_seq, tx_seq);
3172                         log_info("SAR: pos %u", l2cap_channel->reassembly_pos);
3173                         log_info("State: expected_tx_seq %02u, req_seq %02u", l2cap_channel->expected_tx_seq, l2cap_channel->req_seq);
3174                         l2cap_ertm_process_req_seq(l2cap_channel, req_seq);
3175                         if (final){
3176                             // final bit set <- response to RR with poll bit set. All not acknowledged packets need to be retransmitted
3177                             l2cap_channel->tx_send_index = l2cap_channel->tx_read_index;
3178                         }
3179 
3180                         // get SDU
3181                         const uint8_t * sdu_data = &packet[COMPLETE_L2CAP_HEADER+2];
3182                         uint16_t        sdu_len  = size-(COMPLETE_L2CAP_HEADER+2+fcs_size);
3183 
3184                         // assert SDU size is smaller or equal to our buffers
3185                         if (sdu_len > l2cap_channel->local_mps) break;
3186 
3187                         // check ordering
3188                         if (l2cap_channel->expected_tx_seq == tx_seq){
3189                             log_info("Received expected frame with TxSeq == ExpectedTxSeq == %02u", tx_seq);
3190                             l2cap_channel->expected_tx_seq = l2cap_next_ertm_seq_nr(l2cap_channel->expected_tx_seq);
3191                             l2cap_channel->req_seq         = l2cap_channel->expected_tx_seq;
3192 
3193                             // process SDU
3194                             l2cap_ertm_handle_in_sequence_sdu(l2cap_channel, sar, sdu_data, sdu_len);
3195 
3196                             // process stored segments
3197                             while (1){
3198                                 int index = l2cap_channel->rx_store_index;
3199                                 l2cap_ertm_rx_packet_state_t * rx_state = &l2cap_channel->rx_packets_state[index];
3200                                 if (!rx_state->valid) break;
3201 
3202                                 log_info("Processing stored frame with TxSeq == ExpectedTxSeq == %02u", l2cap_channel->expected_tx_seq);
3203                                 l2cap_channel->expected_tx_seq = l2cap_next_ertm_seq_nr(l2cap_channel->expected_tx_seq);
3204                                 l2cap_channel->req_seq         = l2cap_channel->expected_tx_seq;
3205 
3206                                 rx_state->valid = 0;
3207                                 l2cap_ertm_handle_in_sequence_sdu(l2cap_channel, rx_state->sar, &l2cap_channel->rx_packets_data[index], rx_state->len);
3208 
3209                                 // update rx store index
3210                                 index++;
3211                                 if (index >= l2cap_channel->num_rx_buffers){
3212                                     index = 0;
3213                                 }
3214                                 l2cap_channel->rx_store_index = index;
3215                             }
3216 
3217                             //
3218                             l2cap_channel->send_supervisor_frame_receiver_ready = 1;
3219 
3220                         } else {
3221                             int delta = (tx_seq - l2cap_channel->expected_tx_seq) & 0x3f;
3222                             if (delta < 2){
3223                                 // store segment
3224                                 l2cap_ertm_handle_out_of_sequence_sdu(l2cap_channel, sar, delta, sdu_data, sdu_len);
3225 
3226                                 log_info("Received unexpected frame TxSeq %u but expected %u -> send S-SREJ", tx_seq, l2cap_channel->expected_tx_seq);
3227                                 l2cap_channel->send_supervisor_frame_selective_reject = 1;
3228                             } else {
3229                                 log_info("Received unexpected frame TxSeq %u but expected %u -> send S-REJ", tx_seq, l2cap_channel->expected_tx_seq);
3230                                 l2cap_channel->send_supervisor_frame_reject = 1;
3231                             }
3232                         }
3233                     }
3234                     break;
3235                 }
3236 #endif
3237                 l2cap_dispatch_to_channel(l2cap_channel, L2CAP_DATA_PACKET, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER);
3238             }
3239             break;
3240     }
3241 #else
3242     UNUSED(handle); // ok: no code
3243     UNUSED(packet); // ok: no code
3244     UNUSED(size);   // ok: no code
3245 #endif
3246 }
3247 
3248 static void l2cap_acl_le_handler(hci_con_handle_t handle, uint8_t *packet, uint16_t size){
3249 #ifdef ENABLE_BLE
3250 
3251     l2cap_fixed_channel_t * l2cap_fixed_channel;
3252 
3253 #ifdef ENABLE_LE_DATA_CHANNELS
3254     l2cap_channel_t * l2cap_channel;
3255 #endif
3256     uint16_t channel_id = READ_L2CAP_CHANNEL_ID(packet);
3257     switch (channel_id) {
3258 
3259         case L2CAP_CID_SIGNALING_LE: {
3260             uint16_t sig_id = packet[COMPLETE_L2CAP_HEADER + 1];
3261             uint16_t len = little_endian_read_16(packet, COMPLETE_L2CAP_HEADER + 2);
3262             if (COMPLETE_L2CAP_HEADER + 4 + len > size) break;
3263             int      valid  = l2cap_le_signaling_handler_dispatch(handle, &packet[COMPLETE_L2CAP_HEADER], sig_id);
3264             if (!valid){
3265                 l2cap_register_signaling_response(handle, COMMAND_REJECT_LE, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN);
3266             }
3267             break;
3268         }
3269 
3270         case L2CAP_CID_ATTRIBUTE_PROTOCOL:
3271             l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_ATTRIBUTE_PROTOCOL);
3272             if (!l2cap_fixed_channel) break;
3273             if (!l2cap_fixed_channel->packet_handler) break;
3274             (*l2cap_fixed_channel->packet_handler)(ATT_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER);
3275             break;
3276 
3277         case L2CAP_CID_SECURITY_MANAGER_PROTOCOL:
3278             l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_SECURITY_MANAGER_PROTOCOL);
3279             if (!l2cap_fixed_channel) break;
3280             if (!l2cap_fixed_channel->packet_handler) break;
3281             (*l2cap_fixed_channel->packet_handler)(SM_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER);
3282             break;
3283 
3284         default:
3285 
3286 #ifdef ENABLE_LE_DATA_CHANNELS
3287             l2cap_channel = l2cap_get_channel_for_local_cid(channel_id);
3288             if (l2cap_channel) {
3289                 // credit counting
3290                 if (l2cap_channel->credits_incoming == 0){
3291                     log_error("LE Data Channel packet received but no incoming credits");
3292                     l2cap_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
3293                     break;
3294                 }
3295                 l2cap_channel->credits_incoming--;
3296 
3297                 // automatic credits
3298                 if (l2cap_channel->credits_incoming < L2CAP_LE_DATA_CHANNELS_AUTOMATIC_CREDITS_WATERMARK && l2cap_channel->automatic_credits){
3299                     l2cap_channel->new_credits_incoming = L2CAP_LE_DATA_CHANNELS_AUTOMATIC_CREDITS_INCREMENT;
3300                 }
3301 
3302                 // first fragment
3303                 uint16_t pos = 0;
3304                 if (!l2cap_channel->receive_sdu_len){
3305                     uint16_t sdu_len = little_endian_read_16(packet, COMPLETE_L2CAP_HEADER);
3306                     if(sdu_len > l2cap_channel->local_mtu) break;   // SDU would be larger than our buffer
3307                     l2cap_channel->receive_sdu_len = sdu_len;
3308                     l2cap_channel->receive_sdu_pos = 0;
3309                     pos  += 2;
3310                     size -= 2;
3311                 }
3312                 uint16_t fragment_size   = size-COMPLETE_L2CAP_HEADER;
3313                 uint16_t remaining_space = l2cap_channel->local_mtu - l2cap_channel->receive_sdu_pos;
3314                 if (fragment_size > remaining_space) break;         // SDU would cause buffer overrun
3315                 memcpy(&l2cap_channel->receive_sdu_buffer[l2cap_channel->receive_sdu_pos], &packet[COMPLETE_L2CAP_HEADER+pos], fragment_size);
3316                 l2cap_channel->receive_sdu_pos += size - COMPLETE_L2CAP_HEADER;
3317                 // done?
3318                 log_debug("le packet pos %u, len %u", l2cap_channel->receive_sdu_pos, l2cap_channel->receive_sdu_len);
3319                 if (l2cap_channel->receive_sdu_pos >= l2cap_channel->receive_sdu_len){
3320                     l2cap_dispatch_to_channel(l2cap_channel, L2CAP_DATA_PACKET, l2cap_channel->receive_sdu_buffer, l2cap_channel->receive_sdu_len);
3321                     l2cap_channel->receive_sdu_len = 0;
3322                 }
3323             } else {
3324                 log_error("LE Data Channel packet received but no channel found for cid 0x%02x", channel_id);
3325             }
3326 #endif
3327             break;
3328     }
3329 #else
3330     UNUSED(handle); // ok: no code
3331     UNUSED(packet); // ok: no code
3332     UNUSED(size);   // ok: no code
3333 #endif
3334 }
3335 
3336 static void l2cap_acl_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
3337     UNUSED(packet_type);    // ok: registered with hci_register_acl_packet_handler
3338     UNUSED(channel);        // ok: there is no channel
3339 
3340     // Assert full L2CAP header present
3341     if (size < COMPLETE_L2CAP_HEADER) return;
3342 
3343     // Dispatch to Classic or LE handler
3344     hci_con_handle_t handle = READ_ACL_CONNECTION_HANDLE(packet);
3345     hci_connection_t *conn = hci_connection_for_handle(handle);
3346     if (!conn) return;
3347     if (conn->address_type == BD_ADDR_TYPE_CLASSIC){
3348         l2cap_acl_classic_handler(handle, packet, size);
3349     } else {
3350         l2cap_acl_le_handler(handle, packet, size);
3351     }
3352 
3353     l2cap_run();
3354 }
3355 
3356 // Bluetooth 4.0 - allows to register handler for Attribute Protocol and Security Manager Protocol
3357 void l2cap_register_fixed_channel(btstack_packet_handler_t the_packet_handler, uint16_t channel_id) {
3358     l2cap_fixed_channel_t * channel = l2cap_fixed_channel_for_channel_id(channel_id);
3359     if (!channel) return;
3360     channel->packet_handler = the_packet_handler;
3361 }
3362 
3363 #ifdef ENABLE_CLASSIC
3364 // finalize closed channel - l2cap_handle_disconnect_request & DISCONNECTION_RESPONSE
3365 void l2cap_finialize_channel_close(l2cap_channel_t * channel){
3366     channel->state = L2CAP_STATE_CLOSED;
3367     l2cap_emit_channel_closed(channel);
3368     // discard channel
3369     l2cap_stop_rtx(channel);
3370     btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
3371     btstack_memory_l2cap_channel_free(channel);
3372 }
3373 #endif
3374 
3375 #ifdef L2CAP_USES_CHANNELS
3376 static l2cap_service_t * l2cap_get_service_internal(btstack_linked_list_t * services, uint16_t psm){
3377     btstack_linked_list_iterator_t it;
3378     btstack_linked_list_iterator_init(&it, services);
3379     while (btstack_linked_list_iterator_has_next(&it)){
3380         l2cap_service_t * service = (l2cap_service_t *) btstack_linked_list_iterator_next(&it);
3381         if ( service->psm == psm){
3382             return service;
3383         };
3384     }
3385     return NULL;
3386 }
3387 #endif
3388 
3389 #ifdef ENABLE_CLASSIC
3390 static inline l2cap_service_t * l2cap_get_service(uint16_t psm){
3391     return l2cap_get_service_internal(&l2cap_services, psm);
3392 }
3393 
3394 uint8_t l2cap_register_service(btstack_packet_handler_t service_packet_handler, uint16_t psm, uint16_t mtu, gap_security_level_t security_level){
3395 
3396     log_info("L2CAP_REGISTER_SERVICE psm 0x%x mtu %u", psm, mtu);
3397 
3398     // check for alread registered psm
3399     l2cap_service_t *service = l2cap_get_service(psm);
3400     if (service) {
3401         log_error("l2cap_register_service: PSM %u already registered", psm);
3402         return L2CAP_SERVICE_ALREADY_REGISTERED;
3403     }
3404 
3405     // alloc structure
3406     service = btstack_memory_l2cap_service_get();
3407     if (!service) {
3408         log_error("l2cap_register_service: no memory for l2cap_service_t");
3409         return BTSTACK_MEMORY_ALLOC_FAILED;
3410     }
3411 
3412     // fill in
3413     service->psm = psm;
3414     service->mtu = mtu;
3415     service->packet_handler = service_packet_handler;
3416     service->required_security_level = security_level;
3417 
3418     // add to services list
3419     btstack_linked_list_add(&l2cap_services, (btstack_linked_item_t *) service);
3420 
3421     // enable page scan
3422     gap_connectable_control(1);
3423 
3424     return 0;
3425 }
3426 
3427 uint8_t l2cap_unregister_service(uint16_t psm){
3428 
3429     log_info("L2CAP_UNREGISTER_SERVICE psm 0x%x", psm);
3430 
3431     l2cap_service_t *service = l2cap_get_service(psm);
3432     if (!service) return L2CAP_SERVICE_DOES_NOT_EXIST;
3433     btstack_linked_list_remove(&l2cap_services, (btstack_linked_item_t *) service);
3434     btstack_memory_l2cap_service_free(service);
3435 
3436     // disable page scan when no services registered
3437     if (btstack_linked_list_empty(&l2cap_services)) {
3438         gap_connectable_control(0);
3439     }
3440     return 0;
3441 }
3442 #endif
3443 
3444 
3445 #ifdef ENABLE_LE_DATA_CHANNELS
3446 
3447 static void l2cap_le_notify_channel_can_send(l2cap_channel_t *channel){
3448     if (!channel->waiting_for_can_send_now) return;
3449     if (channel->send_sdu_buffer) return;
3450     channel->waiting_for_can_send_now = 0;
3451     log_debug("L2CAP_EVENT_CHANNEL_LE_CAN_SEND_NOW local_cid 0x%x", channel->local_cid);
3452     l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_LE_CAN_SEND_NOW);
3453 }
3454 
3455 // 1BH2222
3456 static void l2cap_emit_le_incoming_connection(l2cap_channel_t *channel) {
3457     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",
3458              channel->address_type, bd_addr_to_str(channel->address), channel->con_handle,  channel->psm, channel->local_cid, channel->remote_cid, channel->remote_mtu);
3459     uint8_t event[19];
3460     event[0] = L2CAP_EVENT_LE_INCOMING_CONNECTION;
3461     event[1] = sizeof(event) - 2;
3462     event[2] = channel->address_type;
3463     reverse_bd_addr(channel->address, &event[3]);
3464     little_endian_store_16(event,  9, channel->con_handle);
3465     little_endian_store_16(event, 11, channel->psm);
3466     little_endian_store_16(event, 13, channel->local_cid);
3467     little_endian_store_16(event, 15, channel->remote_cid);
3468     little_endian_store_16(event, 17, channel->remote_mtu);
3469     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
3470     l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event));
3471 }
3472 // 11BH22222
3473 static void l2cap_emit_le_channel_opened(l2cap_channel_t *channel, uint8_t status) {
3474     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",
3475              status, channel->address_type, bd_addr_to_str(channel->address), channel->con_handle, channel->psm,
3476              channel->local_cid, channel->remote_cid, channel->local_mtu, channel->remote_mtu);
3477     uint8_t event[23];
3478     event[0] = L2CAP_EVENT_LE_CHANNEL_OPENED;
3479     event[1] = sizeof(event) - 2;
3480     event[2] = status;
3481     event[3] = channel->address_type;
3482     reverse_bd_addr(channel->address, &event[4]);
3483     little_endian_store_16(event, 10, channel->con_handle);
3484     event[12] = channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING ? 1 : 0;
3485     little_endian_store_16(event, 13, channel->psm);
3486     little_endian_store_16(event, 15, channel->local_cid);
3487     little_endian_store_16(event, 17, channel->remote_cid);
3488     little_endian_store_16(event, 19, channel->local_mtu);
3489     little_endian_store_16(event, 21, channel->remote_mtu);
3490     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
3491     l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event));
3492 }
3493 // 2
3494 static void l2cap_emit_le_channel_closed(l2cap_channel_t * channel){
3495     log_info("L2CAP_EVENT_LE_CHANNEL_CLOSED local_cid 0x%x", channel->local_cid);
3496     uint8_t event[4];
3497     event[0] = L2CAP_EVENT_LE_CHANNEL_CLOSED;
3498     event[1] = sizeof(event) - 2;
3499     little_endian_store_16(event, 2, channel->local_cid);
3500     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
3501     l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event));
3502 }
3503 
3504 // finalize closed channel - l2cap_handle_disconnect_request & DISCONNECTION_RESPONSE
3505 void l2cap_le_finialize_channel_close(l2cap_channel_t * channel){
3506     channel->state = L2CAP_STATE_CLOSED;
3507     l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_CHANNEL_CLOSED);
3508     // discard channel
3509     btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
3510     btstack_memory_l2cap_channel_free(channel);
3511 }
3512 
3513 static inline l2cap_service_t * l2cap_le_get_service(uint16_t le_psm){
3514     return l2cap_get_service_internal(&l2cap_le_services, le_psm);
3515 }
3516 
3517 uint8_t l2cap_le_register_service(btstack_packet_handler_t packet_handler, uint16_t psm, gap_security_level_t security_level){
3518 
3519     log_info("L2CAP_LE_REGISTER_SERVICE psm 0x%x", psm);
3520 
3521     // check for alread registered psm
3522     l2cap_service_t *service = l2cap_le_get_service(psm);
3523     if (service) {
3524         return L2CAP_SERVICE_ALREADY_REGISTERED;
3525     }
3526 
3527     // alloc structure
3528     service = btstack_memory_l2cap_service_get();
3529     if (!service) {
3530         log_error("l2cap_register_service_internal: no memory for l2cap_service_t");
3531         return BTSTACK_MEMORY_ALLOC_FAILED;
3532     }
3533 
3534     // fill in
3535     service->psm = psm;
3536     service->mtu = 0;
3537     service->packet_handler = packet_handler;
3538     service->required_security_level = security_level;
3539 
3540     // add to services list
3541     btstack_linked_list_add(&l2cap_le_services, (btstack_linked_item_t *) service);
3542 
3543     // done
3544     return 0;
3545 }
3546 
3547 uint8_t l2cap_le_unregister_service(uint16_t psm) {
3548     log_info("L2CAP_LE_UNREGISTER_SERVICE psm 0x%x", psm);
3549     l2cap_service_t *service = l2cap_le_get_service(psm);
3550     if (!service) return L2CAP_SERVICE_DOES_NOT_EXIST;
3551 
3552     btstack_linked_list_remove(&l2cap_le_services, (btstack_linked_item_t *) service);
3553     btstack_memory_l2cap_service_free(service);
3554     return 0;
3555 }
3556 
3557 uint8_t l2cap_le_accept_connection(uint16_t local_cid, uint8_t * receive_sdu_buffer, uint16_t mtu, uint16_t initial_credits){
3558     // get channel
3559     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
3560     if (!channel) return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
3561 
3562     // validate state
3563     if (channel->state != L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT){
3564         return ERROR_CODE_COMMAND_DISALLOWED;
3565     }
3566 
3567     // set state accept connection
3568     channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_ACCEPT;
3569     channel->receive_sdu_buffer = receive_sdu_buffer;
3570     channel->local_mtu = mtu;
3571     channel->new_credits_incoming = initial_credits;
3572     channel->automatic_credits  = initial_credits == L2CAP_LE_AUTOMATIC_CREDITS;
3573 
3574     // test
3575     // channel->new_credits_incoming = 1;
3576 
3577     // go
3578     l2cap_run();
3579     return 0;
3580 }
3581 
3582 /**
3583  * @brief Deny incoming LE Data Channel connection due to resource constraints
3584  * @param local_cid             L2CAP LE Data Channel Identifier
3585  */
3586 
3587 uint8_t l2cap_le_decline_connection(uint16_t local_cid){
3588     // get channel
3589     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
3590     if (!channel) return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
3591 
3592     // validate state
3593     if (channel->state != L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT){
3594         return ERROR_CODE_COMMAND_DISALLOWED;
3595     }
3596 
3597     // set state decline connection
3598     channel->state  = L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_DECLINE;
3599     channel->reason = 0x04; // no resources available
3600     l2cap_run();
3601     return 0;
3602 }
3603 
3604 uint8_t l2cap_le_create_channel(btstack_packet_handler_t packet_handler, hci_con_handle_t con_handle,
3605     uint16_t psm, uint8_t * receive_sdu_buffer, uint16_t mtu, uint16_t initial_credits, gap_security_level_t security_level,
3606     uint16_t * out_local_cid) {
3607 
3608     log_info("L2CAP_LE_CREATE_CHANNEL handle 0x%04x psm 0x%x mtu %u", con_handle, psm, mtu);
3609 
3610 
3611     hci_connection_t * connection = hci_connection_for_handle(con_handle);
3612     if (!connection) {
3613         log_error("no hci_connection for handle 0x%04x", con_handle);
3614         return ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER;
3615     }
3616 
3617     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);
3618     if (!channel) {
3619         return BTSTACK_MEMORY_ALLOC_FAILED;
3620     }
3621     log_info("l2cap_le_create_channel %p", channel);
3622 
3623     // store local_cid
3624     if (out_local_cid){
3625        *out_local_cid = channel->local_cid;
3626     }
3627 
3628     // provide buffer
3629     channel->con_handle = con_handle;
3630     channel->receive_sdu_buffer = receive_sdu_buffer;
3631     channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST;
3632     channel->new_credits_incoming = initial_credits;
3633     channel->automatic_credits    = initial_credits == L2CAP_LE_AUTOMATIC_CREDITS;
3634 
3635     // add to connections list
3636     btstack_linked_list_add(&l2cap_channels, (btstack_linked_item_t *) channel);
3637 
3638     // go
3639     l2cap_run();
3640     return 0;
3641 }
3642 
3643 /**
3644  * @brief Provide credtis for LE Data Channel
3645  * @param local_cid             L2CAP LE Data Channel Identifier
3646  * @param credits               Number additional credits for peer
3647  */
3648 uint8_t l2cap_le_provide_credits(uint16_t local_cid, uint16_t credits){
3649 
3650     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
3651     if (!channel) {
3652         log_error("l2cap_le_provide_credits no channel for cid 0x%02x", local_cid);
3653         return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
3654     }
3655 
3656     // check state
3657     if (channel->state != L2CAP_STATE_OPEN){
3658         log_error("l2cap_le_provide_credits but channel 0x%02x not open yet", local_cid);
3659     }
3660 
3661     // assert incoming credits + credits <= 0xffff
3662     uint32_t total_credits = channel->credits_incoming;
3663     total_credits += channel->new_credits_incoming;
3664     total_credits += credits;
3665     if (total_credits > 0xffff){
3666         log_error("l2cap_le_provide_credits overrun: current %u, scheduled %u, additional %u", channel->credits_incoming,
3667             channel->new_credits_incoming, credits);
3668     }
3669 
3670     // set credits_granted
3671     channel->new_credits_incoming += credits;
3672 
3673     // go
3674     l2cap_run();
3675     return 0;
3676 }
3677 
3678 /**
3679  * @brief Check if outgoing buffer is available and that there's space on the Bluetooth module
3680  * @param local_cid             L2CAP LE Data Channel Identifier
3681  */
3682 int l2cap_le_can_send_now(uint16_t local_cid){
3683     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
3684     if (!channel) {
3685         log_error("l2cap_le_provide_credits no channel for cid 0x%02x", local_cid);
3686         return 0;
3687     }
3688 
3689     // check state
3690     if (channel->state != L2CAP_STATE_OPEN) return 0;
3691 
3692     // check queue
3693     if (channel->send_sdu_buffer) return 0;
3694 
3695     // fine, go ahead
3696     return 1;
3697 }
3698 
3699 /**
3700  * @brief Request emission of L2CAP_EVENT_CAN_SEND_NOW as soon as possible
3701  * @note L2CAP_EVENT_CAN_SEND_NOW might be emitted during call to this function
3702  *       so packet handler should be ready to handle it
3703  * @param local_cid             L2CAP LE Data Channel Identifier
3704  */
3705 uint8_t l2cap_le_request_can_send_now_event(uint16_t local_cid){
3706     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
3707     if (!channel) {
3708         log_error("l2cap_le_request_can_send_now_event no channel for cid 0x%02x", local_cid);
3709         return 0;
3710     }
3711     channel->waiting_for_can_send_now = 1;
3712     l2cap_le_notify_channel_can_send(channel);
3713     return 0;
3714 }
3715 
3716 /**
3717  * @brief Send data via LE Data Channel
3718  * @note Since data larger then the maximum PDU needs to be segmented into multiple PDUs, data needs to stay valid until ... event
3719  * @param local_cid             L2CAP LE Data Channel Identifier
3720  * @param data                  data to send
3721  * @param size                  data size
3722  */
3723 uint8_t l2cap_le_send_data(uint16_t local_cid, uint8_t * data, uint16_t len){
3724 
3725     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
3726     if (!channel) {
3727         log_error("l2cap_send no channel for cid 0x%02x", local_cid);
3728         return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
3729     }
3730 
3731     if (len > channel->remote_mtu){
3732         log_error("l2cap_send cid 0x%02x, data length exceeds remote MTU.", local_cid);
3733         return L2CAP_DATA_LEN_EXCEEDS_REMOTE_MTU;
3734     }
3735 
3736     if (channel->send_sdu_buffer){
3737         log_info("l2cap_send cid 0x%02x, cannot send", local_cid);
3738         return BTSTACK_ACL_BUFFERS_FULL;
3739     }
3740 
3741     channel->send_sdu_buffer = data;
3742     channel->send_sdu_len    = len;
3743     channel->send_sdu_pos    = 0;
3744 
3745     l2cap_run();
3746     return 0;
3747 }
3748 
3749 /**
3750  * @brief Disconnect from LE Data Channel
3751  * @param local_cid             L2CAP LE Data Channel Identifier
3752  */
3753 uint8_t l2cap_le_disconnect(uint16_t local_cid)
3754 {
3755     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
3756     if (!channel) {
3757         log_error("l2cap_send no channel for cid 0x%02x", local_cid);
3758         return L2CAP_LOCAL_CID_DOES_NOT_EXIST;
3759     }
3760 
3761     channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
3762     l2cap_run();
3763     return 0;
3764 }
3765 
3766 #endif
3767