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