xref: /btstack/src/l2cap.c (revision c5b64319fd1903e30aff6b2e3991ac91d814ea66)
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 /*
39  *  l2cap.c
40  *
41  *  Logical Link Control and Adaption Protocl (L2CAP)
42  *
43  *  Created by Matthias Ringwald on 5/16/09.
44  */
45 
46 #include "l2cap.h"
47 #include "hci.h"
48 #include "hci_dump.h"
49 #include "btstack_debug.h"
50 #include "btstack_memory.h"
51 
52 #include <stdarg.h>
53 #include <string.h>
54 
55 #include <stdio.h>
56 
57 // nr of buffered acl packets in outgoing queue to get max performance
58 #define NR_BUFFERED_ACL_PACKETS 3
59 
60 // used to cache l2cap rejects, echo, and informational requests
61 #define NR_PENDING_SIGNALING_RESPONSES 3
62 
63 // offsets for L2CAP SIGNALING COMMANDS
64 #define L2CAP_SIGNALING_COMMAND_CODE_OFFSET   0
65 #define L2CAP_SIGNALING_COMMAND_SIGID_OFFSET  1
66 #define L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET 2
67 #define L2CAP_SIGNALING_COMMAND_DATA_OFFSET   4
68 
69 static void null_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size);
70 static void l2cap_packet_handler(uint8_t packet_type, uint8_t *packet, uint16_t size);
71 
72 // used to cache l2cap rejects, echo, and informational requests
73 static l2cap_signaling_response_t signaling_responses[NR_PENDING_SIGNALING_RESPONSES];
74 static int signaling_responses_pending;
75 
76 static btstack_packet_callback_registration_t hci_event_callback_registration;
77 
78 static btstack_linked_list_t l2cap_channels;
79 static btstack_linked_list_t l2cap_services;
80 static btstack_linked_list_t l2cap_le_channels;
81 static btstack_linked_list_t l2cap_le_services;
82 static void (*packet_handler) (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size) = null_packet_handler;
83 
84 static btstack_packet_handler_t attribute_protocol_packet_handler;
85 static btstack_packet_handler_t security_protocol_packet_handler;
86 static btstack_packet_handler_t connectionless_channel_packet_handler;
87 static uint8_t require_security_level2_for_outgoing_sdp;
88 
89 // prototypes
90 static void l2cap_finialize_channel_close(l2cap_channel_t *channel);
91 static inline l2cap_service_t * l2cap_get_service(uint16_t psm);
92 static void l2cap_emit_channel_opened(l2cap_channel_t *channel, uint8_t status);
93 static void l2cap_emit_channel_closed(l2cap_channel_t *channel);
94 static void l2cap_emit_connection_request(l2cap_channel_t *channel);
95 static int l2cap_channel_ready_for_open(l2cap_channel_t *channel);
96 
97 
98 void l2cap_init(void){
99     signaling_responses_pending = 0;
100 
101     l2cap_channels = NULL;
102     l2cap_services = NULL;
103     l2cap_le_services = NULL;
104     l2cap_le_channels = NULL;
105 
106     packet_handler = null_packet_handler;
107     attribute_protocol_packet_handler = NULL;
108     security_protocol_packet_handler = NULL;
109     connectionless_channel_packet_handler = NULL;
110 
111     require_security_level2_for_outgoing_sdp = 0;
112 
113     //
114     // register callback with HCI
115     //
116     hci_event_callback_registration.callback = &l2cap_packet_handler;
117     hci_add_event_handler(&hci_event_callback_registration);
118 
119     hci_register_acl_packet_handler(&l2cap_packet_handler);
120 
121     hci_connectable_control(0); // no services yet
122 }
123 
124 
125 /** Register L2CAP packet handlers */
126 static void null_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
127 }
128 void l2cap_register_packet_handler(void (*handler)(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size)){
129     packet_handler = handler;
130 }
131 
132 static void l2cap_dispatch_to_channel(l2cap_channel_t *channel, uint8_t type, uint8_t * data, uint16_t size){
133     (* (channel->packet_handler))(type, channel->local_cid, data, size);
134 }
135 
136 void l2cap_emit_channel_opened(l2cap_channel_t *channel, uint8_t status) {
137     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",
138              status, bd_addr_to_str(channel->address), channel->handle, channel->psm,
139              channel->local_cid, channel->remote_cid, channel->local_mtu, channel->remote_mtu, channel->flush_timeout);
140     uint8_t event[23];
141     event[0] = L2CAP_EVENT_CHANNEL_OPENED;
142     event[1] = sizeof(event) - 2;
143     event[2] = status;
144     bt_flip_addr(&event[3], channel->address);
145     little_endian_store_16(event,  9, channel->handle);
146     little_endian_store_16(event, 11, channel->psm);
147     little_endian_store_16(event, 13, channel->local_cid);
148     little_endian_store_16(event, 15, channel->remote_cid);
149     little_endian_store_16(event, 17, channel->local_mtu);
150     little_endian_store_16(event, 19, channel->remote_mtu);
151     little_endian_store_16(event, 21, channel->flush_timeout);
152     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
153     l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event));
154 }
155 
156 void l2cap_emit_channel_closed(l2cap_channel_t *channel) {
157     log_info("L2CAP_EVENT_CHANNEL_CLOSED local_cid 0x%x", channel->local_cid);
158     uint8_t event[4];
159     event[0] = L2CAP_EVENT_CHANNEL_CLOSED;
160     event[1] = sizeof(event) - 2;
161     little_endian_store_16(event, 2, channel->local_cid);
162     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
163     l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event));
164 }
165 
166 void l2cap_emit_connection_request(l2cap_channel_t *channel) {
167     log_info("L2CAP_EVENT_INCOMING_CONNECTION addr %s handle 0x%x psm 0x%x local_cid 0x%x remote_cid 0x%x",
168              bd_addr_to_str(channel->address), channel->handle,  channel->psm, channel->local_cid, channel->remote_cid);
169     uint8_t event[16];
170     event[0] = L2CAP_EVENT_INCOMING_CONNECTION;
171     event[1] = sizeof(event) - 2;
172     bt_flip_addr(&event[2], channel->address);
173     little_endian_store_16(event,  8, channel->handle);
174     little_endian_store_16(event, 10, channel->psm);
175     little_endian_store_16(event, 12, channel->local_cid);
176     little_endian_store_16(event, 14, channel->remote_cid);
177     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
178     l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event));
179 }
180 
181 static void l2cap_emit_connection_parameter_update_response(uint16_t handle, uint16_t result){
182     uint8_t event[6];
183     event[0] = L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_RESPONSE;
184     event[1] = 4;
185     little_endian_store_16(event, 2, handle);
186     little_endian_store_16(event, 4, result);
187     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
188     (*packet_handler)(HCI_EVENT_PACKET, 0, event, sizeof(event));
189 }
190 
191 static l2cap_channel_t * l2cap_get_channel_for_local_cid(uint16_t local_cid){
192     btstack_linked_list_iterator_t it;
193     btstack_linked_list_iterator_init(&it, &l2cap_channels);
194     while (btstack_linked_list_iterator_has_next(&it)){
195         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
196         if ( channel->local_cid == local_cid) {
197             return channel;
198         }
199     }
200     return NULL;
201 }
202 
203 int  l2cap_can_send_packet_now(uint16_t local_cid){
204     l2cap_channel_t *channel = l2cap_get_channel_for_local_cid(local_cid);
205     if (!channel) return 0;
206     return hci_can_send_acl_packet_now(channel->handle);
207 }
208 
209 int  l2cap_can_send_prepared_packet_now(uint16_t local_cid){
210     l2cap_channel_t *channel = l2cap_get_channel_for_local_cid(local_cid);
211     if (!channel) return 0;
212     return hci_can_send_prepared_acl_packet_now(channel->handle);
213 }
214 
215 int  l2cap_can_send_fixed_channel_packet_now(uint16_t handle){
216     return hci_can_send_acl_packet_now(handle);
217 }
218 
219 uint16_t l2cap_get_remote_mtu_for_local_cid(uint16_t local_cid){
220     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
221     if (channel) {
222         return channel->remote_mtu;
223     }
224     return 0;
225 }
226 
227 static l2cap_channel_t * l2cap_channel_for_rtx_timer(btstack_timer_source_t * ts){
228     btstack_linked_list_iterator_t it;
229     btstack_linked_list_iterator_init(&it, &l2cap_channels);
230     while (btstack_linked_list_iterator_has_next(&it)){
231         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
232         if ( &channel->rtx == ts) {
233             return channel;
234         }
235     }
236     return NULL;
237 }
238 
239 static void l2cap_rtx_timeout(btstack_timer_source_t * ts){
240     l2cap_channel_t * channel = l2cap_channel_for_rtx_timer(ts);
241     if (!ts) return;
242 
243     log_info("l2cap_rtx_timeout for local cid 0x%02x", channel->local_cid);
244 
245     // "When terminating the channel, it is not necessary to send a L2CAP_DisconnectReq
246     //  and enter WAIT_DISCONNECT state. Channels can be transitioned directly to the CLOSED state."
247     // notify client
248     l2cap_emit_channel_opened(channel, L2CAP_CONNECTION_RESPONSE_RESULT_RTX_TIMEOUT);
249 
250     // discard channel
251     // no need to stop timer here, it is removed from list during timer callback
252     btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
253     btstack_memory_l2cap_channel_free(channel);
254 }
255 
256 static void l2cap_stop_rtx(l2cap_channel_t * channel){
257     log_info("l2cap_stop_rtx for local cid 0x%02x", channel->local_cid);
258     btstack_run_loop_remove_timer(&channel->rtx);
259 }
260 
261 static void l2cap_start_rtx(l2cap_channel_t * channel){
262     l2cap_stop_rtx(channel);
263     log_info("l2cap_start_rtx for local cid 0x%02x", channel->local_cid);
264     btstack_run_loop_set_timer_handler(&channel->rtx, l2cap_rtx_timeout);
265     btstack_run_loop_set_timer(&channel->rtx, L2CAP_RTX_TIMEOUT_MS);
266     btstack_run_loop_add_timer(&channel->rtx);
267 }
268 
269 static void l2cap_start_ertx(l2cap_channel_t * channel){
270     log_info("l2cap_start_ertx for local cid 0x%02x", channel->local_cid);
271     l2cap_stop_rtx(channel);
272     btstack_run_loop_set_timer_handler(&channel->rtx, l2cap_rtx_timeout);
273     btstack_run_loop_set_timer(&channel->rtx, L2CAP_ERTX_TIMEOUT_MS);
274     btstack_run_loop_add_timer(&channel->rtx);
275 }
276 
277 void l2cap_require_security_level_2_for_outgoing_sdp(void){
278     require_security_level2_for_outgoing_sdp = 1;
279 }
280 
281 static int l2cap_security_level_0_allowed_for_PSM(uint16_t psm){
282     return (psm == PSM_SDP) && (!require_security_level2_for_outgoing_sdp);
283 }
284 
285 static int l2cap_send_signaling_packet(hci_con_handle_t handle, L2CAP_SIGNALING_COMMANDS cmd, uint8_t identifier, ...){
286 
287     if (!hci_can_send_acl_packet_now(handle)){
288         log_info("l2cap_send_signaling_packet, cannot send");
289         return BTSTACK_ACL_BUFFERS_FULL;
290     }
291 
292     // log_info("l2cap_send_signaling_packet type %u", cmd);
293     hci_reserve_packet_buffer();
294     uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
295     va_list argptr;
296     va_start(argptr, identifier);
297     uint16_t len = l2cap_create_signaling_classic(acl_buffer, handle, cmd, identifier, argptr);
298     va_end(argptr);
299     // log_info("l2cap_send_signaling_packet con %u!", handle);
300     return hci_send_acl_packet_buffer(len);
301 }
302 
303 #ifdef ENABLE_BLE
304 static int l2cap_send_le_signaling_packet(hci_con_handle_t handle, L2CAP_SIGNALING_COMMANDS cmd, uint8_t identifier, ...){
305 
306     if (!hci_can_send_acl_packet_now(handle)){
307         log_info("l2cap_send_signaling_packet, cannot send");
308         return BTSTACK_ACL_BUFFERS_FULL;
309     }
310 
311     // log_info("l2cap_send_signaling_packet type %u", cmd);
312     hci_reserve_packet_buffer();
313     uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
314     va_list argptr;
315     va_start(argptr, identifier);
316     uint16_t len = l2cap_create_signaling_le(acl_buffer, handle, cmd, identifier, argptr);
317     va_end(argptr);
318     // log_info("l2cap_send_signaling_packet con %u!", handle);
319     return hci_send_acl_packet_buffer(len);
320 }
321 #endif
322 
323 uint8_t *l2cap_get_outgoing_buffer(void){
324     return hci_get_outgoing_packet_buffer() + COMPLETE_L2CAP_HEADER; // 8 bytes
325 }
326 
327 int l2cap_reserve_packet_buffer(void){
328     return hci_reserve_packet_buffer();
329 }
330 
331 void l2cap_release_packet_buffer(void){
332     hci_release_packet_buffer();
333 }
334 
335 
336 int l2cap_send_prepared(uint16_t local_cid, uint16_t len){
337 
338     if (!hci_is_packet_buffer_reserved()){
339         log_error("l2cap_send_prepared called without reserving packet first");
340         return BTSTACK_ACL_BUFFERS_FULL;
341     }
342 
343     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
344     if (!channel) {
345         log_error("l2cap_send_prepared no channel for cid 0x%02x", local_cid);
346         return -1;   // TODO: define error
347     }
348 
349     if (!hci_can_send_prepared_acl_packet_now(channel->handle)){
350         log_info("l2cap_send_prepared cid 0x%02x, cannot send", local_cid);
351         return BTSTACK_ACL_BUFFERS_FULL;
352     }
353 
354     log_debug("l2cap_send_prepared cid 0x%02x, handle %u, 1 credit used", local_cid, channel->handle);
355 
356     uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
357 
358     int pb = hci_non_flushable_packet_boundary_flag_supported() ? 0x00 : 0x02;
359 
360     // 0 - Connection handle : PB=pb : BC=00
361     little_endian_store_16(acl_buffer, 0, channel->handle | (pb << 12) | (0 << 14));
362     // 2 - ACL length
363     little_endian_store_16(acl_buffer, 2,  len + 4);
364     // 4 - L2CAP packet length
365     little_endian_store_16(acl_buffer, 4,  len + 0);
366     // 6 - L2CAP channel DEST
367     little_endian_store_16(acl_buffer, 6, channel->remote_cid);
368     // send
369     int err = hci_send_acl_packet_buffer(len+8);
370 
371     return err;
372 }
373 
374 int l2cap_send_prepared_connectionless(uint16_t handle, uint16_t cid, uint16_t len){
375 
376     if (!hci_is_packet_buffer_reserved()){
377         log_error("l2cap_send_prepared_connectionless called without reserving packet first");
378         return BTSTACK_ACL_BUFFERS_FULL;
379     }
380 
381     if (!hci_can_send_prepared_acl_packet_now(handle)){
382         log_info("l2cap_send_prepared_connectionless handle 0x%02x, cid 0x%02x, cannot send", handle, cid);
383         return BTSTACK_ACL_BUFFERS_FULL;
384     }
385 
386     log_debug("l2cap_send_prepared_connectionless handle %u, cid 0x%02x", handle, cid);
387 
388     uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
389 
390     int pb = hci_non_flushable_packet_boundary_flag_supported() ? 0x00 : 0x02;
391 
392     // 0 - Connection handle : PB=pb : BC=00
393     little_endian_store_16(acl_buffer, 0, handle | (pb << 12) | (0 << 14));
394     // 2 - ACL length
395     little_endian_store_16(acl_buffer, 2,  len + 4);
396     // 4 - L2CAP packet length
397     little_endian_store_16(acl_buffer, 4,  len + 0);
398     // 6 - L2CAP channel DEST
399     little_endian_store_16(acl_buffer, 6, cid);
400     // send
401     int err = hci_send_acl_packet_buffer(len+8);
402 
403     return err;
404 }
405 
406 int l2cap_send(uint16_t local_cid, uint8_t *data, uint16_t len){
407 
408     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
409     if (!channel) {
410         log_error("l2cap_send no channel for cid 0x%02x", local_cid);
411         return -1;   // TODO: define error
412     }
413 
414     if (len > channel->remote_mtu){
415         log_error("l2cap_send cid 0x%02x, data length exceeds remote MTU.", local_cid);
416         return L2CAP_DATA_LEN_EXCEEDS_REMOTE_MTU;
417     }
418 
419     if (!hci_can_send_acl_packet_now(channel->handle)){
420         log_info("l2cap_send cid 0x%02x, cannot send", local_cid);
421         return BTSTACK_ACL_BUFFERS_FULL;
422     }
423 
424     hci_reserve_packet_buffer();
425     uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
426 
427     memcpy(&acl_buffer[8], data, len);
428 
429     return l2cap_send_prepared(local_cid, len);
430 }
431 
432 int l2cap_send_connectionless(uint16_t handle, uint16_t cid, uint8_t *data, uint16_t len){
433 
434     if (!hci_can_send_acl_packet_now(handle)){
435         log_info("l2cap_send cid 0x%02x, cannot send", cid);
436         return BTSTACK_ACL_BUFFERS_FULL;
437     }
438 
439     hci_reserve_packet_buffer();
440     uint8_t *acl_buffer = hci_get_outgoing_packet_buffer();
441 
442     memcpy(&acl_buffer[8], data, len);
443 
444     return l2cap_send_prepared_connectionless(handle, cid, len);
445 }
446 
447 int l2cap_send_echo_request(uint16_t handle, uint8_t *data, uint16_t len){
448     return l2cap_send_signaling_packet(handle, ECHO_REQUEST, 0x77, len, data);
449 }
450 
451 static inline void channelStateVarSetFlag(l2cap_channel_t *channel, L2CAP_CHANNEL_STATE_VAR flag){
452     channel->state_var = (L2CAP_CHANNEL_STATE_VAR) (channel->state_var | flag);
453 }
454 
455 static inline void channelStateVarClearFlag(l2cap_channel_t *channel, L2CAP_CHANNEL_STATE_VAR flag){
456     channel->state_var = (L2CAP_CHANNEL_STATE_VAR) (channel->state_var & ~flag);
457 }
458 
459 
460 
461 // MARK: L2CAP_RUN
462 // process outstanding signaling tasks
463 static void l2cap_run(void){
464 
465     // log_info("l2cap_run: entered");
466 
467     // check pending signaling responses
468     while (signaling_responses_pending){
469 
470         hci_con_handle_t handle = signaling_responses[0].handle;
471 
472         if (!hci_can_send_acl_packet_now(handle)) break;
473 
474         uint8_t  sig_id = signaling_responses[0].sig_id;
475         uint16_t infoType = signaling_responses[0].data;    // INFORMATION_REQUEST
476         uint16_t result   = signaling_responses[0].data;    // CONNECTION_REQUEST, COMMAND_REJECT
477         uint8_t  response_code = signaling_responses[0].code;
478 
479         // remove first item before sending (to avoid sending response mutliple times)
480         signaling_responses_pending--;
481         int i;
482         for (i=0; i < signaling_responses_pending; i++){
483             memcpy(&signaling_responses[i], &signaling_responses[i+1], sizeof(l2cap_signaling_response_t));
484         }
485 
486         switch (response_code){
487             case CONNECTION_REQUEST:
488                 l2cap_send_signaling_packet(handle, CONNECTION_RESPONSE, sig_id, 0, 0, result, 0);
489                 // also disconnect if result is 0x0003 - security blocked
490                 if (result == 0x0003){
491                     hci_disconnect_security_block(handle);
492                 }
493                 break;
494             case ECHO_REQUEST:
495                 l2cap_send_signaling_packet(handle, ECHO_RESPONSE, sig_id, 0, NULL);
496                 break;
497             case INFORMATION_REQUEST:
498                 switch (infoType){
499                     case 1: { // Connectionless MTU
500                         uint16_t connectionless_mtu = hci_max_acl_data_packet_length();
501                         l2cap_send_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, infoType, 0, sizeof(connectionless_mtu), &connectionless_mtu);
502                         break;
503                     }
504                     case 2: { // Extended Features Supported
505                         // extended features request supported, features: fixed channels, unicast connectionless data reception
506                         uint32_t features = 0x280;
507                         l2cap_send_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, infoType, 0, sizeof(features), &features);
508                         break;
509                     }
510                     case 3: { // Fixed Channels Supported
511                         uint8_t map[8];
512                         memset(map, 0, 8);
513                         map[0] = 0x01;  // L2CAP Signaling Channel (0x01) + Connectionless reception (0x02)
514                         l2cap_send_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, infoType, 0, sizeof(map), &map);
515                         break;
516                     }
517                     default:
518                         // all other types are not supported
519                         l2cap_send_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, infoType, 1, 0, NULL);
520                         break;
521                 }
522                 break;
523             case COMMAND_REJECT:
524                 l2cap_send_signaling_packet(handle, COMMAND_REJECT, sig_id, result, 0, NULL);
525 #ifdef ENABLE_BLE
526             case COMMAND_REJECT_LE:
527                 l2cap_send_le_signaling_packet(handle, COMMAND_REJECT, sig_id, result, 0, NULL);
528                 break;
529 #endif
530             default:
531                 // should not happen
532                 break;
533         }
534     }
535 
536     uint8_t  config_options[4];
537     btstack_linked_list_iterator_t it;
538     btstack_linked_list_iterator_init(&it, &l2cap_channels);
539     while (btstack_linked_list_iterator_has_next(&it)){
540 
541         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
542         // log_info("l2cap_run: channel %p, state %u, var 0x%02x", channel, channel->state, channel->state_var);
543         switch (channel->state){
544 
545             case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE:
546             case L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT:
547                 if (!hci_can_send_acl_packet_now(channel->handle)) break;
548                 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND) {
549                     channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND);
550                     l2cap_send_signaling_packet(channel->handle, CONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid, 1, 0);
551                 }
552                 break;
553 
554             case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION:
555                 if (!hci_can_send_command_packet_now()) break;
556                 // send connection request - set state first
557                 channel->state = L2CAP_STATE_WAIT_CONNECTION_COMPLETE;
558                 // BD_ADDR, Packet_Type, Page_Scan_Repetition_Mode, Reserved, Clock_Offset, Allow_Role_Switch
559                 hci_send_cmd(&hci_create_connection, channel->address, hci_usable_acl_packet_types(), 0, 0, 0, 1);
560                 break;
561 
562             case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE:
563                 if (!hci_can_send_acl_packet_now(channel->handle)) break;
564                 channel->state = L2CAP_STATE_INVALID;
565                 l2cap_send_signaling_packet(channel->handle, CONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid, channel->reason, 0);
566                 // discard channel - l2cap_finialize_channel_close without sending l2cap close event
567                 l2cap_stop_rtx(channel);
568                 btstack_linked_list_iterator_remove(&it);
569                 btstack_memory_l2cap_channel_free(channel);
570                 break;
571 
572             case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT:
573                 if (!hci_can_send_acl_packet_now(channel->handle)) break;
574                 channel->state = L2CAP_STATE_CONFIG;
575                 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ);
576                 l2cap_send_signaling_packet(channel->handle, CONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid, 0, 0);
577                 break;
578 
579             case L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST:
580                 if (!hci_can_send_acl_packet_now(channel->handle)) break;
581                 // success, start l2cap handshake
582                 channel->local_sig_id = l2cap_next_sig_id();
583                 channel->state = L2CAP_STATE_WAIT_CONNECT_RSP;
584                 l2cap_send_signaling_packet( channel->handle, CONNECTION_REQUEST, channel->local_sig_id, channel->psm, channel->local_cid);
585                 l2cap_start_rtx(channel);
586                 break;
587 
588             case L2CAP_STATE_CONFIG:
589                 if (!hci_can_send_acl_packet_now(channel->handle)) break;
590                 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP){
591                     uint16_t flags = 0;
592                     channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP);
593                     if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT) {
594                         flags = 1;
595                     } else {
596                         channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP);
597                     }
598                     if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_INVALID){
599                         l2cap_send_signaling_packet(channel->handle, CONFIGURE_RESPONSE, channel->remote_sig_id, channel->remote_cid, flags, L2CAP_CONF_RESULT_UNKNOWN_OPTIONS, 0, NULL);
600                     } else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU){
601                         config_options[0] = 1; // MTU
602                         config_options[1] = 2; // len param
603                         little_endian_store_16( (uint8_t*)&config_options, 2, channel->remote_mtu);
604                         l2cap_send_signaling_packet(channel->handle, CONFIGURE_RESPONSE, channel->remote_sig_id, channel->remote_cid, flags, 0, 4, &config_options);
605                         channelStateVarClearFlag(channel,L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU);
606                     } else {
607                         l2cap_send_signaling_packet(channel->handle, CONFIGURE_RESPONSE, channel->remote_sig_id, channel->remote_cid, flags, 0, 0, NULL);
608                     }
609                     channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT);
610                 }
611                 else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ){
612                     channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ);
613                     channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_REQ);
614                     channel->local_sig_id = l2cap_next_sig_id();
615                     config_options[0] = 1; // MTU
616                     config_options[1] = 2; // len param
617                     little_endian_store_16( (uint8_t*)&config_options, 2, channel->local_mtu);
618                     l2cap_send_signaling_packet(channel->handle, CONFIGURE_REQUEST, channel->local_sig_id, channel->remote_cid, 0, 4, &config_options);
619                     l2cap_start_rtx(channel);
620                 }
621                 if (l2cap_channel_ready_for_open(channel)){
622                     channel->state = L2CAP_STATE_OPEN;
623                     l2cap_emit_channel_opened(channel, 0);  // success
624                 }
625                 break;
626 
627             case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE:
628                 if (!hci_can_send_acl_packet_now(channel->handle)) break;
629                 channel->state = L2CAP_STATE_INVALID;
630                 l2cap_send_signaling_packet( channel->handle, DISCONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid);
631                 // 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 :)
632                 l2cap_finialize_channel_close(channel);  // -- remove from list
633                 break;
634 
635             case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST:
636                 if (!hci_can_send_acl_packet_now(channel->handle)) break;
637                 channel->local_sig_id = l2cap_next_sig_id();
638                 channel->state = L2CAP_STATE_WAIT_DISCONNECT;
639                 l2cap_send_signaling_packet( channel->handle, DISCONNECTION_REQUEST, channel->local_sig_id, channel->remote_cid, channel->local_cid);
640                 break;
641             default:
642                 break;
643         }
644     }
645 
646 #ifdef ENABLE_BLE
647     // send l2cap con paramter update if necessary
648     hci_connections_get_iterator(&it);
649     while(btstack_linked_list_iterator_has_next(&it)){
650         hci_connection_t * connection = (hci_connection_t *) btstack_linked_list_iterator_next(&it);
651         if (connection->address_type != BD_ADDR_TYPE_LE_PUBLIC && connection->address_type != BD_ADDR_TYPE_LE_RANDOM) continue;
652         if (!hci_can_send_acl_packet_now(connection->con_handle)) continue;
653         switch (connection->le_con_parameter_update_state){
654             case CON_PARAMETER_UPDATE_SEND_REQUEST:
655                 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_NONE;
656                 l2cap_send_le_signaling_packet(connection->con_handle, CONNECTION_PARAMETER_UPDATE_REQUEST, connection->le_con_param_update_identifier,
657                                                connection->le_conn_interval_min, connection->le_conn_interval_max, connection->le_conn_latency, connection->le_supervision_timeout);
658                 break;
659             case CON_PARAMETER_UPDATE_SEND_RESPONSE:
660                 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_CHANGE_HCI_CON_PARAMETERS;
661                 l2cap_send_le_signaling_packet(connection->con_handle, CONNECTION_PARAMETER_UPDATE_RESPONSE, connection->le_con_param_update_identifier, 0);
662                 break;
663             case CON_PARAMETER_UPDATE_DENY:
664                 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_NONE;
665                 l2cap_send_le_signaling_packet(connection->con_handle, CONNECTION_PARAMETER_UPDATE_RESPONSE, connection->le_con_param_update_identifier, 1);
666                 break;
667             default:
668                 break;
669         }
670     }
671 #endif
672 
673     // log_info("l2cap_run: exit");
674 }
675 
676 uint16_t l2cap_max_mtu(void){
677     return HCI_ACL_PAYLOAD_SIZE - L2CAP_HEADER_SIZE;
678 }
679 
680 uint16_t l2cap_max_le_mtu(void){
681     return l2cap_max_mtu();
682 }
683 
684 static void l2cap_handle_connection_complete(uint16_t handle, l2cap_channel_t * channel){
685     if (channel->state == L2CAP_STATE_WAIT_CONNECTION_COMPLETE || channel->state == L2CAP_STATE_WILL_SEND_CREATE_CONNECTION) {
686         log_info("l2cap_handle_connection_complete expected state");
687         // success, start l2cap handshake
688         channel->handle = handle;
689         // check remote SSP feature first
690         channel->state = L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES;
691     }
692 }
693 
694 static void l2cap_handle_remote_supported_features_received(l2cap_channel_t * channel){
695     if (channel->state != L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES) return;
696 
697     // we have been waiting for remote supported features, if both support SSP,
698     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));
699     if (hci_ssp_supported_on_both_sides(channel->handle) && !l2cap_security_level_0_allowed_for_PSM(channel->psm)){
700         // request security level 2
701         channel->state = L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE;
702         gap_request_security_level(channel->handle, LEVEL_2);
703         return;
704     }
705     // fine, go ahead
706     channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST;
707 }
708 
709 /**
710  * @brief Creates L2CAP channel to the PSM of a remote device with baseband address. A new baseband connection will be initiated if necessary.
711  * @param packet_handler
712  * @param address
713  * @param psm
714  * @param mtu
715  * @param local_cid
716  */
717 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){
718     log_info("L2CAP_CREATE_CHANNEL addr %s psm 0x%x mtu %u", bd_addr_to_str(address), psm, mtu);
719 
720     // alloc structure
721     l2cap_channel_t * chan = btstack_memory_l2cap_channel_get();
722     if (!chan) {
723         return BTSTACK_MEMORY_ALLOC_FAILED;
724     }
725 
726      // Init memory (make valgrind happy)
727     memset(chan, 0, sizeof(l2cap_channel_t));
728     // limit local mtu to max acl packet length - l2cap header
729     if (mtu > l2cap_max_mtu()) {
730         mtu = l2cap_max_mtu();
731     }
732 
733     // fill in
734     BD_ADDR_COPY(chan->address, address);
735     chan->psm = psm;
736     chan->handle = 0;
737     chan->packet_handler = channel_packet_handler;
738     chan->remote_mtu = L2CAP_MINIMAL_MTU;
739     chan->local_mtu = mtu;
740     chan->local_cid = l2cap_next_local_cid();
741 
742     // set initial state
743     chan->state = L2CAP_STATE_WILL_SEND_CREATE_CONNECTION;
744     chan->state_var = L2CAP_CHANNEL_STATE_VAR_NONE;
745     chan->remote_sig_id = L2CAP_SIG_ID_INVALID;
746     chan->local_sig_id = L2CAP_SIG_ID_INVALID;
747     chan->required_security_level = LEVEL_0;
748 
749     // add to connections list
750     btstack_linked_list_add(&l2cap_channels, (btstack_linked_item_t *) chan);
751 
752     // store local_cid
753     if (out_local_cid){
754        *out_local_cid = chan->local_cid;
755     }
756 
757     // check if hci connection is already usable
758     hci_connection_t * conn = hci_connection_for_bd_addr_and_type(address, BD_ADDR_TYPE_CLASSIC);
759     if (conn){
760         log_info("l2cap_create_channel, hci connection already exists");
761         l2cap_handle_connection_complete(conn->con_handle, chan);
762         // check if remote supported fearures are already received
763         if (conn->bonding_flags & BONDING_RECEIVED_REMOTE_FEATURES) {
764             l2cap_handle_remote_supported_features_received(chan);
765         }
766     }
767 
768     l2cap_run();
769 
770     return 0;
771 }
772 
773 void
774 l2cap_disconnect(uint16_t local_cid, uint8_t reason){
775     log_info("L2CAP_DISCONNECT local_cid 0x%x reason 0x%x", local_cid, reason);
776     // find channel for local_cid
777     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
778     if (channel) {
779         channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST;
780     }
781     // process
782     l2cap_run();
783 }
784 
785 static void l2cap_handle_connection_failed_for_addr(bd_addr_t address, uint8_t status){
786     btstack_linked_list_iterator_t it;
787     btstack_linked_list_iterator_init(&it, &l2cap_channels);
788     while (btstack_linked_list_iterator_has_next(&it)){
789         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
790         if ( BD_ADDR_CMP( channel->address, address) != 0) continue;
791         // channel for this address found
792         switch (channel->state){
793             case L2CAP_STATE_WAIT_CONNECTION_COMPLETE:
794             case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION:
795                 // failure, forward error code
796                 l2cap_emit_channel_opened(channel, status);
797                 // discard channel
798                 l2cap_stop_rtx(channel);
799                 btstack_linked_list_iterator_remove(&it);
800                 btstack_memory_l2cap_channel_free(channel);
801                 break;
802             default:
803                 break;
804         }
805     }
806 }
807 
808 static void l2cap_handle_connection_success_for_addr(bd_addr_t address, hci_con_handle_t handle){
809     btstack_linked_list_iterator_t it;
810     btstack_linked_list_iterator_init(&it, &l2cap_channels);
811     while (btstack_linked_list_iterator_has_next(&it)){
812         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
813         if ( ! BD_ADDR_CMP( channel->address, address) ){
814             l2cap_handle_connection_complete(handle, channel);
815         }
816     }
817     // process
818     l2cap_run();
819 }
820 
821 static void l2cap_event_handler(uint8_t *packet, uint16_t size){
822 
823     bd_addr_t address;
824     hci_con_handle_t handle;
825     btstack_linked_list_iterator_t it;
826     int hci_con_used;
827 
828     switch(packet[0]){
829 
830         // handle connection complete events
831         case HCI_EVENT_CONNECTION_COMPLETE:
832             bt_flip_addr(address, &packet[5]);
833             if (packet[2] == 0){
834                 handle = little_endian_read_16(packet, 3);
835                 l2cap_handle_connection_success_for_addr(address, handle);
836             } else {
837                 l2cap_handle_connection_failed_for_addr(address, packet[2]);
838             }
839             break;
840 
841         // handle successful create connection cancel command
842         case HCI_EVENT_COMMAND_COMPLETE:
843             if ( COMMAND_COMPLETE_EVENT(packet, hci_create_connection_cancel) ) {
844                 if (packet[5] == 0){
845                     bt_flip_addr(address, &packet[6]);
846                     // CONNECTION TERMINATED BY LOCAL HOST (0X16)
847                     l2cap_handle_connection_failed_for_addr(address, 0x16);
848                 }
849             }
850             l2cap_run();    // try sending signaling packets first
851             break;
852 
853         case HCI_EVENT_COMMAND_STATUS:
854             l2cap_run();    // try sending signaling packets first
855             break;
856 
857         // handle disconnection complete events
858         case HCI_EVENT_DISCONNECTION_COMPLETE:
859             // send l2cap disconnect events for all channels on this handle and free them
860             handle = little_endian_read_16(packet, 3);
861             btstack_linked_list_iterator_init(&it, &l2cap_channels);
862             while (btstack_linked_list_iterator_has_next(&it)){
863                 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
864                 if (channel->handle != handle) continue;
865                 l2cap_emit_channel_closed(channel);
866                 l2cap_stop_rtx(channel);
867                 btstack_linked_list_iterator_remove(&it);
868                 btstack_memory_l2cap_channel_free(channel);
869             }
870             break;
871 
872         case HCI_EVENT_NUMBER_OF_COMPLETED_PACKETS:
873             l2cap_run();    // try sending signaling packets first
874             break;
875 
876         // HCI Connection Timeouts
877         case L2CAP_EVENT_TIMEOUT_CHECK:
878             handle = little_endian_read_16(packet, 2);
879             if (gap_get_connection_type(handle) != GAP_CONNECTION_ACL) break;
880             if (hci_authentication_active_for_handle(handle)) break;
881             hci_con_used = 0;
882             btstack_linked_list_iterator_init(&it, &l2cap_channels);
883             while (btstack_linked_list_iterator_has_next(&it)){
884                 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
885                 if (channel->handle != handle) continue;
886                 hci_con_used = 1;
887                 break;
888             }
889             if (hci_con_used) break;
890             if (!hci_can_send_command_packet_now()) break;
891             hci_send_cmd(&hci_disconnect, handle, 0x13); // remote closed connection
892             break;
893 
894         case DAEMON_EVENT_HCI_PACKET_SENT:
895             l2cap_run();    // try sending signaling packets first
896 
897             btstack_linked_list_iterator_init(&it, &l2cap_channels);
898             while (btstack_linked_list_iterator_has_next(&it)){
899                 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
900                 if (!channel->packet_handler) continue;
901                 (* (channel->packet_handler))(HCI_EVENT_PACKET, channel->local_cid, packet, size);
902             }
903             break;
904 
905         case HCI_EVENT_READ_REMOTE_SUPPORTED_FEATURES_COMPLETE:
906             handle = little_endian_read_16(packet, 3);
907             btstack_linked_list_iterator_init(&it, &l2cap_channels);
908             while (btstack_linked_list_iterator_has_next(&it)){
909                 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
910                 if (channel->handle != handle) continue;
911                 l2cap_handle_remote_supported_features_received(channel);
912                 break;
913             }
914             break;
915 
916         case GAP_EVENT_SECURITY_LEVEL:
917             handle = little_endian_read_16(packet, 2);
918             log_info("l2cap - security level update");
919             btstack_linked_list_iterator_init(&it, &l2cap_channels);
920             while (btstack_linked_list_iterator_has_next(&it)){
921                 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
922                 if (channel->handle != handle) continue;
923 
924                 log_info("l2cap - state %u", channel->state);
925 
926                 gap_security_level_t actual_level = (gap_security_level_t) packet[4];
927                 gap_security_level_t required_level = channel->required_security_level;
928 
929                 switch (channel->state){
930                     case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE:
931                         if (actual_level >= required_level){
932                             channel->state = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT;
933                             l2cap_emit_connection_request(channel);
934                         } else {
935                             channel->reason = 0x0003; // security block
936                             channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE;
937                         }
938                         break;
939 
940                     case L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE:
941                         if (actual_level >= required_level){
942                             channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST;
943                         } else {
944                             // disconnnect, authentication not good enough
945                             hci_disconnect_security_block(handle);
946                         }
947                         break;
948 
949                     default:
950                         break;
951                 }
952             }
953             break;
954 
955         default:
956             break;
957     }
958 
959     l2cap_run();
960 }
961 
962 static void l2cap_handle_disconnect_request(l2cap_channel_t *channel, uint16_t identifier){
963     channel->remote_sig_id = identifier;
964     channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE;
965     l2cap_run();
966 }
967 
968 static void l2cap_register_signaling_response(hci_con_handle_t handle, uint8_t code, uint8_t sig_id, uint16_t data){
969     // Vol 3, Part A, 4.3: "The DCID and SCID fields shall be ignored when the result field indi- cates the connection was refused."
970     if (signaling_responses_pending < NR_PENDING_SIGNALING_RESPONSES) {
971         signaling_responses[signaling_responses_pending].handle = handle;
972         signaling_responses[signaling_responses_pending].code = code;
973         signaling_responses[signaling_responses_pending].sig_id = sig_id;
974         signaling_responses[signaling_responses_pending].data = data;
975         signaling_responses_pending++;
976         l2cap_run();
977     }
978 }
979 
980 static void l2cap_handle_connection_request(hci_con_handle_t handle, uint8_t sig_id, uint16_t psm, uint16_t source_cid){
981 
982     // log_info("l2cap_handle_connection_request for handle %u, psm %u cid 0x%02x", handle, psm, source_cid);
983     l2cap_service_t *service = l2cap_get_service(psm);
984     if (!service) {
985         // 0x0002 PSM not supported
986         l2cap_register_signaling_response(handle, CONNECTION_REQUEST, sig_id, 0x0002);
987         return;
988     }
989 
990     hci_connection_t * hci_connection = hci_connection_for_handle( handle );
991     if (!hci_connection) {
992         //
993         log_error("no hci_connection for handle %u", handle);
994         return;
995     }
996 
997     // alloc structure
998     // log_info("l2cap_handle_connection_request register channel");
999     l2cap_channel_t * channel = btstack_memory_l2cap_channel_get();
1000     if (!channel){
1001         // 0x0004 No resources available
1002         l2cap_register_signaling_response(handle, CONNECTION_REQUEST, sig_id, 0x0004);
1003         return;
1004     }
1005     // Init memory (make valgrind happy)
1006     memset(channel, 0, sizeof(l2cap_channel_t));
1007     // fill in
1008     BD_ADDR_COPY(channel->address, hci_connection->address);
1009     channel->psm = psm;
1010     channel->handle = handle;
1011     channel->packet_handler = service->packet_handler;
1012     channel->local_cid  = l2cap_next_local_cid();
1013     channel->remote_cid = source_cid;
1014     channel->local_mtu  = service->mtu;
1015     channel->remote_mtu = L2CAP_DEFAULT_MTU;
1016     channel->remote_sig_id = sig_id;
1017     channel->required_security_level = service->required_security_level;
1018 
1019     // limit local mtu to max acl packet length - l2cap header
1020     if (channel->local_mtu > l2cap_max_mtu()) {
1021         channel->local_mtu = l2cap_max_mtu();
1022     }
1023 
1024     // set initial state
1025     channel->state =     L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE;
1026     channel->state_var = L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND;
1027 
1028     // add to connections list
1029     btstack_linked_list_add(&l2cap_channels, (btstack_linked_item_t *) channel);
1030 
1031     // assert security requirements
1032     gap_request_security_level(handle, channel->required_security_level);
1033 }
1034 
1035 void l2cap_accept_connection(uint16_t local_cid){
1036     log_info("L2CAP_ACCEPT_CONNECTION local_cid 0x%x", local_cid);
1037     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid);
1038     if (!channel) {
1039         log_error("l2cap_accept_connection called but local_cid 0x%x not found", local_cid);
1040         return;
1041     }
1042 
1043     channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT;
1044 
1045     // process
1046     l2cap_run();
1047 }
1048 
1049 void l2cap_decline_connection(uint16_t local_cid, uint8_t reason){
1050     log_info("L2CAP_DECLINE_CONNECTION local_cid 0x%x, reason %x", local_cid, reason);
1051     l2cap_channel_t * channel = l2cap_get_channel_for_local_cid( local_cid);
1052     if (!channel) {
1053         log_error( "l2cap_decline_connection called but local_cid 0x%x not found", local_cid);
1054         return;
1055     }
1056     channel->state  = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE;
1057     channel->reason = reason;
1058     l2cap_run();
1059 }
1060 
1061 static void l2cap_signaling_handle_configure_request(l2cap_channel_t *channel, uint8_t *command){
1062 
1063     channel->remote_sig_id = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET];
1064 
1065     uint16_t flags = little_endian_read_16(command, 6);
1066     if (flags & 1) {
1067         channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT);
1068     }
1069 
1070     // accept the other's configuration options
1071     uint16_t end_pos = 4 + little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
1072     uint16_t pos     = 8;
1073     while (pos < end_pos){
1074         uint8_t option_hint = command[pos] >> 7;
1075         uint8_t option_type = command[pos] & 0x7f;
1076         log_info("l2cap cid %u, hint %u, type %u", channel->local_cid, option_hint, option_type);
1077         pos++;
1078         uint8_t length = command[pos++];
1079         // MTU { type(8): 1, len(8):2, MTU(16) }
1080         if (option_type == 1 && length == 2){
1081             channel->remote_mtu = little_endian_read_16(command, pos);
1082             // log_info("l2cap cid 0x%02x, remote mtu %u", channel->local_cid, channel->remote_mtu);
1083             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU);
1084         }
1085         // Flush timeout { type(8):2, len(8): 2, Flush Timeout(16)}
1086         if (option_type == 2 && length == 2){
1087             channel->flush_timeout = little_endian_read_16(command, pos);
1088         }
1089         // check for unknown options
1090         if (option_hint == 0 && (option_type == 0 || option_type >= 0x07)){
1091             log_info("l2cap cid %u, unknown options", channel->local_cid);
1092             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_INVALID);
1093         }
1094         pos += length;
1095     }
1096 }
1097 
1098 static int l2cap_channel_ready_for_open(l2cap_channel_t *channel){
1099     // log_info("l2cap_channel_ready_for_open 0x%02x", channel->state_var);
1100     if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_RSP) == 0) return 0;
1101     if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP) == 0) return 0;
1102     // addition check that fixes re-entrance issue causing l2cap event channel opened twice
1103     if (channel->state == L2CAP_STATE_OPEN) return 0;
1104     return 1;
1105 }
1106 
1107 
1108 static void l2cap_signaling_handler_channel(l2cap_channel_t *channel, uint8_t *command){
1109 
1110     uint8_t  code       = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET];
1111     uint8_t  identifier = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET];
1112     uint16_t result = 0;
1113 
1114     log_info("L2CAP signaling handler code %u, state %u", code, channel->state);
1115 
1116     // handle DISCONNECT REQUESTS seperately
1117     if (code == DISCONNECTION_REQUEST){
1118         switch (channel->state){
1119             case L2CAP_STATE_CONFIG:
1120             case L2CAP_STATE_OPEN:
1121             case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST:
1122             case L2CAP_STATE_WAIT_DISCONNECT:
1123                 l2cap_handle_disconnect_request(channel, identifier);
1124                 break;
1125 
1126             default:
1127                 // ignore in other states
1128                 break;
1129         }
1130         return;
1131     }
1132 
1133     // @STATEMACHINE(l2cap)
1134     switch (channel->state) {
1135 
1136         case L2CAP_STATE_WAIT_CONNECT_RSP:
1137             switch (code){
1138                 case CONNECTION_RESPONSE:
1139                     l2cap_stop_rtx(channel);
1140                     result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4);
1141                     switch (result) {
1142                         case 0:
1143                             // successful connection
1144                             channel->remote_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
1145                             channel->state = L2CAP_STATE_CONFIG;
1146                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ);
1147                             break;
1148                         case 1:
1149                             // connection pending. get some coffee, but start the ERTX
1150                             l2cap_start_ertx(channel);
1151                             break;
1152                         default:
1153                             // channel closed
1154                             channel->state = L2CAP_STATE_CLOSED;
1155                             // map l2cap connection response result to BTstack status enumeration
1156                             l2cap_emit_channel_opened(channel, L2CAP_CONNECTION_RESPONSE_RESULT_SUCCESSFUL + result);
1157 
1158                             // drop link key if security block
1159                             if (L2CAP_CONNECTION_RESPONSE_RESULT_SUCCESSFUL + result == L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY){
1160                                 hci_drop_link_key_for_bd_addr(channel->address);
1161                             }
1162 
1163                             // discard channel
1164                             btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
1165                             btstack_memory_l2cap_channel_free(channel);
1166                             break;
1167                     }
1168                     break;
1169 
1170                 default:
1171                     //@TODO: implement other signaling packets
1172                     break;
1173             }
1174             break;
1175 
1176         case L2CAP_STATE_CONFIG:
1177             result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4);
1178             switch (code) {
1179                 case CONFIGURE_REQUEST:
1180                     channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP);
1181                     l2cap_signaling_handle_configure_request(channel, command);
1182                     if (!(channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT)){
1183                         // only done if continuation not set
1184                         channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_REQ);
1185                     }
1186                     break;
1187                 case CONFIGURE_RESPONSE:
1188                     l2cap_stop_rtx(channel);
1189                     switch (result){
1190                         case 0: // success
1191                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_RSP);
1192                             break;
1193                         case 4: // pending
1194                             l2cap_start_ertx(channel);
1195                             break;
1196                         default:
1197                             // retry on negative result
1198                             channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ);
1199                             break;
1200                     }
1201                     break;
1202                 default:
1203                     break;
1204             }
1205             if (l2cap_channel_ready_for_open(channel)){
1206                 // for open:
1207                 channel->state = L2CAP_STATE_OPEN;
1208                 l2cap_emit_channel_opened(channel, 0);
1209             }
1210             break;
1211 
1212         case L2CAP_STATE_WAIT_DISCONNECT:
1213             switch (code) {
1214                 case DISCONNECTION_RESPONSE:
1215                     l2cap_finialize_channel_close(channel);
1216                     break;
1217                 default:
1218                     //@TODO: implement other signaling packets
1219                     break;
1220             }
1221             break;
1222 
1223         case L2CAP_STATE_CLOSED:
1224             // @TODO handle incoming requests
1225             break;
1226 
1227         case L2CAP_STATE_OPEN:
1228             //@TODO: implement other signaling packets, e.g. re-configure
1229             break;
1230         default:
1231             break;
1232     }
1233     // log_info("new state %u", channel->state);
1234 }
1235 
1236 
1237 static void l2cap_signaling_handler_dispatch( hci_con_handle_t handle, uint8_t * command){
1238 
1239     // get code, signalind identifier and command len
1240     uint8_t code   = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET];
1241     uint8_t sig_id = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET];
1242 
1243     // not for a particular channel, and not CONNECTION_REQUEST, ECHO_[REQUEST|RESPONSE], INFORMATION_REQUEST
1244     if (code < 1 || code == ECHO_RESPONSE || code > INFORMATION_REQUEST){
1245         l2cap_register_signaling_response(handle, COMMAND_REJECT, sig_id, L2CAP_REJ_CMD_UNKNOWN);
1246         return;
1247     }
1248 
1249     // general commands without an assigned channel
1250     switch(code) {
1251 
1252         case CONNECTION_REQUEST: {
1253             uint16_t psm =        little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
1254             uint16_t source_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2);
1255             l2cap_handle_connection_request(handle, sig_id, psm, source_cid);
1256             return;
1257         }
1258 
1259         case ECHO_REQUEST:
1260             l2cap_register_signaling_response(handle, code, sig_id, 0);
1261             return;
1262 
1263         case INFORMATION_REQUEST: {
1264             uint16_t infoType = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
1265             l2cap_register_signaling_response(handle, code, sig_id, infoType);
1266             return;
1267         }
1268 
1269         default:
1270             break;
1271     }
1272 
1273 
1274     // Get potential destination CID
1275     uint16_t dest_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET);
1276 
1277     // Find channel for this sig_id and connection handle
1278     btstack_linked_list_iterator_t it;
1279     btstack_linked_list_iterator_init(&it, &l2cap_channels);
1280     while (btstack_linked_list_iterator_has_next(&it)){
1281         l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it);
1282         if (channel->handle != handle) continue;
1283         if (code & 1) {
1284             // match odd commands (responses) by previous signaling identifier
1285             if (channel->local_sig_id == sig_id) {
1286                 l2cap_signaling_handler_channel(channel, command);
1287                 break;
1288             }
1289         } else {
1290             // match even commands (requests) by local channel id
1291             if (channel->local_cid == dest_cid) {
1292                 l2cap_signaling_handler_channel(channel, command);
1293                 break;
1294             }
1295         }
1296     }
1297 }
1298 
1299 static void l2cap_acl_handler( uint8_t *packet, uint16_t size ){
1300 
1301     // Get Channel ID
1302     uint16_t channel_id = READ_L2CAP_CHANNEL_ID(packet);
1303     hci_con_handle_t handle = READ_ACL_CONNECTION_HANDLE(packet);
1304 
1305     switch (channel_id) {
1306 
1307         case L2CAP_CID_SIGNALING: {
1308 
1309             uint16_t command_offset = 8;
1310             while (command_offset < size) {
1311 
1312                 // handle signaling commands
1313                 l2cap_signaling_handler_dispatch(handle, &packet[command_offset]);
1314 
1315                 // increment command_offset
1316                 command_offset += L2CAP_SIGNALING_COMMAND_DATA_OFFSET + little_endian_read_16(packet, command_offset + L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET);
1317             }
1318             break;
1319         }
1320 
1321         case L2CAP_CID_ATTRIBUTE_PROTOCOL:
1322             if (attribute_protocol_packet_handler) {
1323                 (*attribute_protocol_packet_handler)(ATT_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER);
1324             }
1325             break;
1326 
1327         case L2CAP_CID_SECURITY_MANAGER_PROTOCOL:
1328             if (security_protocol_packet_handler) {
1329                 (*security_protocol_packet_handler)(SM_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER);
1330             }
1331             break;
1332 
1333         case L2CAP_CID_CONNECTIONLESS_CHANNEL:
1334             if (connectionless_channel_packet_handler) {
1335                 (*connectionless_channel_packet_handler)(UCD_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER);
1336             }
1337             break;
1338 
1339         case L2CAP_CID_SIGNALING_LE: {
1340             switch (packet[8]){
1341                 case CONNECTION_PARAMETER_UPDATE_RESPONSE: {
1342                     uint16_t result = little_endian_read_16(packet, 12);
1343                     l2cap_emit_connection_parameter_update_response(handle, result);
1344                     break;
1345                 }
1346                 case CONNECTION_PARAMETER_UPDATE_REQUEST: {
1347                     uint8_t event[10];
1348                     event[0] = L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_REQUEST;
1349                     event[1] = 8;
1350                     memcpy(&event[2], &packet[12], 8);
1351 
1352                     hci_connection_t * connection = hci_connection_for_handle(handle);
1353                     if (connection){
1354                         if (connection->role != HCI_ROLE_MASTER){
1355                             // reject command without notifying upper layer when not in master role
1356                             uint8_t sig_id = packet[COMPLETE_L2CAP_HEADER + 1];
1357                             l2cap_register_signaling_response(handle, COMMAND_REJECT_LE, sig_id, L2CAP_REJ_CMD_UNKNOWN);
1358                             break;
1359                         }
1360                         int update_parameter = 1;
1361                         le_connection_parameter_range_t existing_range;
1362                         gap_le_get_connection_parameter_range(existing_range);
1363                         uint16_t le_conn_interval_min = little_endian_read_16(packet,12);
1364                         uint16_t le_conn_interval_max = little_endian_read_16(packet,14);
1365                         uint16_t le_conn_latency = little_endian_read_16(packet,16);
1366                         uint16_t le_supervision_timeout = little_endian_read_16(packet,18);
1367 
1368                         if (le_conn_interval_min < existing_range.le_conn_interval_min) update_parameter = 0;
1369                         if (le_conn_interval_max > existing_range.le_conn_interval_max) update_parameter = 0;
1370 
1371                         if (le_conn_latency < existing_range.le_conn_latency_min) update_parameter = 0;
1372                         if (le_conn_latency > existing_range.le_conn_latency_max) update_parameter = 0;
1373 
1374                         if (le_supervision_timeout < existing_range.le_supervision_timeout_min) update_parameter = 0;
1375                         if (le_supervision_timeout > existing_range.le_supervision_timeout_max) update_parameter = 0;
1376 
1377                         if (update_parameter){
1378                             connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_SEND_RESPONSE;
1379                             connection->le_conn_interval_min = le_conn_interval_min;
1380                             connection->le_conn_interval_max = le_conn_interval_max;
1381                             connection->le_conn_latency = le_conn_latency;
1382                             connection->le_supervision_timeout = le_supervision_timeout;
1383                         } else {
1384                             connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_DENY;
1385                         }
1386                         connection->le_con_param_update_identifier = packet[COMPLETE_L2CAP_HEADER + 1];
1387                     }
1388 
1389                     hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
1390                     (*packet_handler)( HCI_EVENT_PACKET, 0, event, sizeof(event));
1391 
1392                     break;
1393                 }
1394                 default: {
1395                     uint8_t sig_id = packet[COMPLETE_L2CAP_HEADER + 1];
1396                     l2cap_register_signaling_response(handle, COMMAND_REJECT_LE, sig_id, L2CAP_REJ_CMD_UNKNOWN);
1397                     break;
1398                 }
1399             }
1400             break;
1401         }
1402 
1403         default: {
1404             // Find channel for this channel_id and connection handle
1405             l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(channel_id);
1406             if (channel) {
1407                 l2cap_dispatch_to_channel(channel, L2CAP_DATA_PACKET, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER);
1408             }
1409             break;
1410         }
1411     }
1412 }
1413 
1414 static void l2cap_packet_handler(uint8_t packet_type, uint8_t *packet, uint16_t size){
1415     switch (packet_type) {
1416         case HCI_EVENT_PACKET:
1417             l2cap_event_handler(packet, size);
1418             break;
1419         case HCI_ACL_DATA_PACKET:
1420             l2cap_acl_handler(packet, size);
1421             break;
1422         default:
1423             break;
1424     }
1425     l2cap_run();
1426 }
1427 
1428 // finalize closed channel - l2cap_handle_disconnect_request & DISCONNECTION_RESPONSE
1429 void l2cap_finialize_channel_close(l2cap_channel_t *channel){
1430     channel->state = L2CAP_STATE_CLOSED;
1431     l2cap_emit_channel_closed(channel);
1432     // discard channel
1433     l2cap_stop_rtx(channel);
1434     btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel);
1435     btstack_memory_l2cap_channel_free(channel);
1436 }
1437 
1438 static l2cap_service_t * l2cap_get_service_internal(btstack_linked_list_t * services, uint16_t psm){
1439     btstack_linked_list_iterator_t it;
1440     btstack_linked_list_iterator_init(&it, services);
1441     while (btstack_linked_list_iterator_has_next(&it)){
1442         l2cap_service_t * service = (l2cap_service_t *) btstack_linked_list_iterator_next(&it);
1443         if ( service->psm == psm){
1444             return service;
1445         };
1446     }
1447     return NULL;
1448 }
1449 
1450 static inline l2cap_service_t * l2cap_get_service(uint16_t psm){
1451     return l2cap_get_service_internal(&l2cap_services, psm);
1452 }
1453 
1454 
1455 uint8_t l2cap_register_service(btstack_packet_handler_t service_packet_handler, uint16_t psm, uint16_t mtu, gap_security_level_t security_level){
1456 
1457     log_info("L2CAP_REGISTER_SERVICE psm 0x%x mtu %u", psm, mtu);
1458 
1459     // check for alread registered psm
1460     // TODO: emit error event
1461     l2cap_service_t *service = l2cap_get_service(psm);
1462     if (service) {
1463         log_error("l2cap_register_service: PSM %u already registered", psm);
1464         return L2CAP_SERVICE_ALREADY_REGISTERED;
1465     }
1466 
1467     // alloc structure
1468     // TODO: emit error event
1469     service = btstack_memory_l2cap_service_get();
1470     if (!service) {
1471         log_error("l2cap_register_service: no memory for l2cap_service_t");
1472         return BTSTACK_MEMORY_ALLOC_FAILED;
1473     }
1474 
1475     // fill in
1476     service->psm = psm;
1477     service->mtu = mtu;
1478     service->packet_handler = service_packet_handler;
1479     service->required_security_level = security_level;
1480 
1481     // add to services list
1482     btstack_linked_list_add(&l2cap_services, (btstack_linked_item_t *) service);
1483 
1484     // enable page scan
1485     hci_connectable_control(1);
1486 
1487     return 0;
1488 }
1489 
1490 void l2cap_unregister_service(uint16_t psm){
1491 
1492     log_info("L2CAP_UNREGISTER_SERVICE psm 0x%x", psm);
1493 
1494     l2cap_service_t *service = l2cap_get_service(psm);
1495     if (!service) return;
1496     btstack_linked_list_remove(&l2cap_services, (btstack_linked_item_t *) service);
1497     btstack_memory_l2cap_service_free(service);
1498 
1499     // disable page scan when no services registered
1500     if (!btstack_linked_list_empty(&l2cap_services)) return;
1501     hci_connectable_control(0);
1502 }
1503 
1504 // Bluetooth 4.0 - allows to register handler for Attribute Protocol and Security Manager Protocol
1505 void l2cap_register_fixed_channel(btstack_packet_handler_t the_packet_handler, uint16_t channel_id) {
1506     switch(channel_id){
1507         case L2CAP_CID_ATTRIBUTE_PROTOCOL:
1508             attribute_protocol_packet_handler = the_packet_handler;
1509             break;
1510         case L2CAP_CID_SECURITY_MANAGER_PROTOCOL:
1511             security_protocol_packet_handler = the_packet_handler;
1512             break;
1513         case L2CAP_CID_CONNECTIONLESS_CHANNEL:
1514             connectionless_channel_packet_handler = the_packet_handler;
1515             break;
1516     }
1517 }
1518 
1519 #ifdef ENABLE_BLE
1520 
1521 
1522 #if 0
1523 static inline l2cap_service_t * l2cap_le_get_service(uint16_t psm){
1524     return l2cap_get_service_internal(&l2cap_le_services, psm);
1525 }
1526 /**
1527  * @brief Regster L2CAP LE Credit Based Flow Control Mode service
1528  * @param
1529  */
1530 void l2cap_le_register_service(btstack_packet_handler_t packet_handler, uint16_t psm,
1531     uint16_t mtu, uint16_t mps, uint16_t initial_credits, gap_security_level_t security_level){
1532 
1533     log_info("L2CAP_LE_REGISTER_SERVICE psm 0x%x mtu %u connection %p", psm, mtu, connection);
1534 
1535     // check for alread registered psm
1536     // TODO: emit error event
1537     l2cap_service_t *service = l2cap_le_get_service(psm);
1538     if (service) {
1539         log_error("l2cap_le_register_service_internal: PSM %u already registered", psm);
1540         l2cap_emit_service_registered(connection, L2CAP_SERVICE_ALREADY_REGISTERED, psm);
1541         return;
1542     }
1543 
1544     // alloc structure
1545     // TODO: emit error event
1546     service = btstack_memory_l2cap_service_get();
1547     if (!service) {
1548         log_error("l2cap_register_service_internal: no memory for l2cap_service_t");
1549         l2cap_emit_service_registered(connection, BTSTACK_MEMORY_ALLOC_FAILED, psm);
1550         return;
1551     }
1552 
1553     // fill in
1554     service->psm = psm;
1555     service->mtu = mtu;
1556     service->mps = mps;
1557     service->packet_handler = packet_handler;
1558     service->required_security_level = security_level;
1559 
1560     // add to services list
1561     btstack_linked_list_add(&l2cap_le_services, (btstack_linked_item_t *) service);
1562 
1563     // done
1564     l2cap_emit_service_registered(connection, 0, psm);
1565 }
1566 
1567 void l2cap_le_unregister_service(uint16_t psm) {
1568 
1569     log_info("L2CAP_LE_UNREGISTER_SERVICE psm 0x%x", psm);
1570 
1571     l2cap_service_t *service = l2cap_le_get_service(psm);
1572     if (!service) return;
1573     btstack_linked_list_remove(&l2cap_le_services, (btstack_linked_item_t *) service);
1574     btstack_memory_l2cap_service_free(service);
1575 }
1576 #endif
1577 #endif
1578