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