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