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 BLUEKITCHEN 24 * GMBH 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 * Logical Link Control and Adaption Protocol (L2CAP) 43 */ 44 45 #include "l2cap.h" 46 #include "hci.h" 47 #include "hci_dump.h" 48 #include "bluetooth_sdp.h" 49 #include "bluetooth_psm.h" 50 #include "btstack_bool.h" 51 #include "btstack_debug.h" 52 #include "btstack_event.h" 53 #include "btstack_memory.h" 54 55 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 56 // TODO avoid dependency on higher layer: used to trigger pairing for outgoing connections 57 #include "ble/sm.h" 58 #endif 59 60 #include <stdarg.h> 61 #include <string.h> 62 63 /* 64 * @brief L2CAP Supervisory function in S-Frames 65 */ 66 typedef enum { 67 L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY = 0, 68 L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT, 69 L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY, 70 L2CAP_SUPERVISORY_FUNCTION_SREJ_SELECTIVE_REJECT 71 } l2cap_supervisory_function_t; 72 73 /** 74 * @brief L2CAP Information Types used in Information Request & Response 75 */ 76 typedef enum { 77 L2CAP_INFO_TYPE_CONNECTIONLESS_MTU = 1, 78 L2CAP_INFO_TYPE_EXTENDED_FEATURES_SUPPORTED, 79 L2CAP_INFO_TYPE_FIXED_CHANNELS_SUPPORTED, 80 } l2cap_info_type_t; 81 82 /** 83 * @brief L2CAP Configuration Option Types used in Configurateion Request & Response 84 */ 85 typedef enum { 86 L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT = 1, 87 L2CAP_CONFIG_OPTION_TYPE_FLUSH_TIMEOUT, 88 L2CAP_CONFIG_OPTION_TYPE_QUALITY_OF_SERVICE, 89 L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL, 90 L2CAP_CONFIG_OPTION_TYPE_FRAME_CHECK_SEQUENCE, 91 L2CAP_CONFIG_OPTION_TYPE_EXTENDED_FLOW_SPECIFICATION, 92 L2CAP_CONFIG_OPTION_TYPE_EXTENDED_WINDOW_SIZE, 93 } l2cap_config_option_type_t; 94 95 96 #define L2CAP_SIG_ID_INVALID 0 97 98 // size of HCI ACL + L2CAP Header for regular data packets (8) 99 #define COMPLETE_L2CAP_HEADER (HCI_ACL_HEADER_SIZE + L2CAP_HEADER_SIZE) 100 101 // L2CAP Configuration Result Codes 102 #define L2CAP_CONF_RESULT_SUCCESS 0x0000 103 #define L2CAP_CONF_RESULT_UNACCEPTABLE_PARAMETERS 0x0001 104 #define L2CAP_CONF_RESULT_REJECT 0x0002 105 #define L2CAP_CONF_RESULT_UNKNOWN_OPTIONS 0x0003 106 #define L2CAP_CONF_RESULT_PENDING 0x0004 107 #define L2CAP_CONF_RESULT_FLOW_SPEC_REJECTED 0x0005 108 109 // L2CAP Reject Result Codes 110 #define L2CAP_REJ_CMD_UNKNOWN 0x0000 111 #define L2CAP_REJ_MTU_EXCEEDED 0x0001 112 #define L2CAP_REJ_INVALID_CID 0x0002 113 114 // Response Timeout eXpired 115 #define L2CAP_RTX_TIMEOUT_MS 10000 116 117 // Extended Response Timeout eXpired 118 #define L2CAP_ERTX_TIMEOUT_MS 120000 119 120 // nr of buffered acl packets in outgoing queue to get max performance 121 #define NR_BUFFERED_ACL_PACKETS 3 122 123 // used to cache l2cap rejects, echo, and informational requests 124 #define NR_PENDING_SIGNALING_RESPONSES 3 125 126 // nr of credits provided to remote if credits fall below watermark 127 #define L2CAP_CREDIT_BASED_FLOW_CONTROL_MODE_AUTOMATIC_CREDITS_WATERMARK 5 128 #define L2CAP_CREDIT_BASED_FLOW_CONTROL_MODE_AUTOMATIC_CREDITS_INCREMENT 5 129 130 // offsets for L2CAP SIGNALING COMMANDS 131 #define L2CAP_SIGNALING_COMMAND_CODE_OFFSET 0 132 #define L2CAP_SIGNALING_COMMAND_SIGID_OFFSET 1 133 #define L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET 2 134 #define L2CAP_SIGNALING_COMMAND_DATA_OFFSET 4 135 136 #if defined(ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE) && !defined(ENABLE_CLASSIC) 137 #error "ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE depends on ENABLE_CLASSIC." 138 #error "Please remove ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE or add ENABLE_CLASSIC in btstack_config.h" 139 #endif 140 141 142 #ifdef ENABLE_LE_DATA_CHANNELS 143 #warning "ENABLE_LE_DATA_CHANNELS has been deprecated." 144 #warning "Please use ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE instead in btstack_config.h" 145 #define ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 146 #endif 147 148 #if defined(ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE) || defined(ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE) 149 #define L2CAP_USES_CREDIT_BASED_CHANNELS 150 #endif 151 152 #if defined(L2CAP_USES_CREDIT_BASED_CHANNELS) || defined(ENABLE_CLASSIC) 153 #define L2CAP_USES_CHANNELS 154 #endif 155 156 // prototypes 157 static void l2cap_run(void); 158 static void l2cap_hci_event_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size); 159 static void l2cap_acl_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size ); 160 static void l2cap_notify_channel_can_send(void); 161 static void l2cap_emit_can_send_now(btstack_packet_handler_t packet_handler, uint16_t channel); 162 static uint8_t l2cap_next_sig_id(void); 163 static l2cap_fixed_channel_t * l2cap_fixed_channel_for_channel_id(uint16_t local_cid); 164 #ifdef ENABLE_CLASSIC 165 static void l2cap_handle_security_level_incoming_sufficient(l2cap_channel_t * channel); 166 static int l2cap_security_level_0_allowed_for_PSM(uint16_t psm); 167 static void l2cap_handle_remote_supported_features_received(l2cap_channel_t * channel); 168 static void l2cap_handle_connection_complete(hci_con_handle_t con_handle, l2cap_channel_t * channel); 169 static void l2cap_handle_information_request_complete(hci_connection_t * connection); 170 static inline l2cap_service_t * l2cap_get_service(uint16_t psm); 171 static void l2cap_emit_channel_opened(l2cap_channel_t *channel, uint8_t status); 172 static void l2cap_emit_channel_closed(l2cap_channel_t *channel); 173 static void l2cap_emit_incoming_connection(l2cap_channel_t *channel); 174 static int l2cap_channel_ready_for_open(l2cap_channel_t *channel); 175 static uint8_t l2cap_classic_send(l2cap_channel_t * channel, const uint8_t *data, uint16_t len); 176 #endif 177 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 178 static void l2cap_cbm_emit_channel_opened(l2cap_channel_t *channel, uint8_t status); 179 static void l2cap_cbm_emit_incoming_connection(l2cap_channel_t *channel); 180 static void l2cap_credit_based_notify_channel_can_send(l2cap_channel_t *channel); 181 static void l2cap_cbm_finialize_channel_close(l2cap_channel_t *channel); 182 static inline l2cap_service_t * l2cap_cbm_get_service(uint16_t le_psm); 183 #endif 184 #ifdef L2CAP_USES_CREDIT_BASED_CHANNELS 185 static uint8_t l2cap_credit_based_send_data(l2cap_channel_t * channel, const uint8_t * data, uint16_t size); 186 static void l2cap_credit_based_send_pdu(l2cap_channel_t *channel); 187 static void l2cap_credit_based_send_credits(l2cap_channel_t *channel); 188 static bool l2cap_credit_based_handle_credit_indication(hci_con_handle_t handle, const uint8_t * command, uint16_t len); 189 static void l2cap_credit_based_handle_pdu(l2cap_channel_t * l2cap_channel, const uint8_t * packet, uint16_t size); 190 #endif 191 #ifdef L2CAP_USES_CHANNELS 192 static uint16_t l2cap_next_local_cid(void); 193 static l2cap_channel_t * l2cap_get_channel_for_local_cid(uint16_t local_cid); 194 static void l2cap_emit_simple_event_with_cid(l2cap_channel_t * channel, uint8_t event_code); 195 static void l2cap_dispatch_to_channel(l2cap_channel_t *channel, uint8_t type, uint8_t * data, uint16_t size); 196 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, 197 uint16_t psm, uint16_t local_mtu, gap_security_level_t security_level); 198 static void l2cap_finalize_channel_close(l2cap_channel_t *channel); 199 static void l2cap_free_channel_entry(l2cap_channel_t * channel); 200 #endif 201 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 202 static void l2cap_ertm_notify_channel_can_send(l2cap_channel_t * channel); 203 static void l2cap_ertm_monitor_timeout_callback(btstack_timer_source_t * ts); 204 static void l2cap_ertm_retransmission_timeout_callback(btstack_timer_source_t * ts); 205 #endif 206 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 207 static void l2cap_ecbm_handle_security_level_incoming(l2cap_channel_t *channel); 208 static int l2cap_ecbm_signaling_handler_dispatch(hci_con_handle_t handle, uint16_t signaling_cid, uint8_t * command, uint8_t sig_id); 209 static void l2cap_run_trigger_callback(void * context); 210 #endif 211 212 // l2cap_fixed_channel_t entries 213 #ifdef ENABLE_BLE 214 static l2cap_fixed_channel_t l2cap_fixed_channel_le_att; 215 static l2cap_fixed_channel_t l2cap_fixed_channel_le_sm; 216 #endif 217 #ifdef ENABLE_CLASSIC 218 static l2cap_fixed_channel_t l2cap_fixed_channel_classic_connectionless; 219 static l2cap_fixed_channel_t l2cap_fixed_channel_classic_sm; 220 #endif 221 222 #ifdef ENABLE_CLASSIC 223 static btstack_linked_list_t l2cap_services; 224 static uint8_t l2cap_require_security_level2_for_outgoing_sdp; 225 static bd_addr_t l2cap_outgoing_classic_addr; 226 #endif 227 228 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 229 static btstack_linked_list_t l2cap_le_services; 230 #endif 231 232 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 233 static btstack_linked_list_t l2cap_enhanced_services; 234 static uint16_t l2cap_enhanced_mps_min; 235 static uint16_t l2cap_enhanced_mps_max; 236 static btstack_context_callback_registration_t l2cap_trigger_run_registration; 237 #endif 238 239 // single list of channels for connection-oriented channels (basic, ertm, cbm, ecbf) Classic Connectionless, ATT, and SM 240 static btstack_linked_list_t l2cap_channels; 241 #ifdef L2CAP_USES_CHANNELS 242 // next channel id for new connections 243 static uint16_t l2cap_local_source_cid; 244 #endif 245 // next signaling sequence number 246 static uint8_t l2cap_sig_seq_nr; 247 248 // used to cache l2cap rejects, echo, and informational requests 249 static l2cap_signaling_response_t l2cap_signaling_responses[NR_PENDING_SIGNALING_RESPONSES]; 250 static int l2cap_signaling_responses_pending; 251 static btstack_packet_callback_registration_t l2cap_hci_event_callback_registration; 252 253 static bool l2cap_call_notify_channel_in_run; 254 255 #ifdef ENABLE_BLE 256 // only used for connection parameter update events 257 static uint16_t l2cap_le_custom_max_mtu; 258 #endif 259 260 /* callbacks for events */ 261 static btstack_linked_list_t l2cap_event_handlers; 262 263 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 264 265 // enable for testing 266 // #define L2CAP_ERTM_SIMULATE_FCS_ERROR_INTERVAL 16 267 268 /* 269 * CRC lookup table for generator polynom D^16 + D^15 + D^2 + 1 270 */ 271 static const uint16_t crc16_table[256] = { 272 0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, 273 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, 274 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41, 275 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 276 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441, 277 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41, 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 278 0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40, 279 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 280 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441, 281 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 282 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40, 283 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 284 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 285 0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841, 286 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 287 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040, 288 }; 289 290 static uint16_t crc16_calc(uint8_t * data, uint16_t len){ 291 uint16_t crc = 0; // initial value = 0 292 while (len--){ 293 crc = (crc >> 8) ^ crc16_table[ (crc ^ ((uint16_t) *data++)) & 0x00FF ]; 294 } 295 return crc; 296 } 297 298 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){ 299 return (((uint16_t) sar) << 14) | (req_seq << 8) | (final << 7) | (tx_seq << 1) | 0; 300 } 301 302 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){ 303 return (req_seq << 8) | (final << 7) | (poll << 4) | (((int) supervisory_function) << 2) | 1; 304 } 305 306 static int l2cap_next_ertm_seq_nr(int seq_nr){ 307 return (seq_nr + 1) & 0x3f; 308 } 309 310 static bool l2cap_ertm_can_store_packet_now(l2cap_channel_t * channel){ 311 // get num free tx buffers 312 int num_free_tx_buffers = channel->num_tx_buffers - channel->num_stored_tx_frames; 313 // calculate num tx buffers for remote MTU 314 int num_tx_buffers_for_max_remote_mtu; 315 uint16_t effective_mps = btstack_min(channel->remote_mps, channel->local_mps); 316 if (channel->remote_mtu <= effective_mps){ 317 // MTU fits into single packet 318 num_tx_buffers_for_max_remote_mtu = 1; 319 } else { 320 // include SDU Length 321 num_tx_buffers_for_max_remote_mtu = (channel->remote_mtu + 2 + (effective_mps - 1)) / effective_mps; 322 } 323 log_debug("num_free_tx_buffers %u, num_tx_buffers_for_max_remote_mtu %u", num_free_tx_buffers, num_tx_buffers_for_max_remote_mtu); 324 return num_tx_buffers_for_max_remote_mtu <= num_free_tx_buffers; 325 } 326 327 static void l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel_t * l2cap_channel){ 328 log_info("Retransmit unacknowleged frames"); 329 l2cap_channel->unacked_frames = 0;; 330 l2cap_channel->tx_send_index = l2cap_channel->tx_read_index; 331 } 332 333 static void l2cap_ertm_next_tx_write_index(l2cap_channel_t * channel){ 334 channel->tx_write_index++; 335 if (channel->tx_write_index < channel->num_tx_buffers) return; 336 channel->tx_write_index = 0; 337 } 338 339 static void l2cap_ertm_start_monitor_timer(l2cap_channel_t * channel){ 340 log_info("Start Monitor timer"); 341 btstack_run_loop_remove_timer(&channel->monitor_timer); 342 btstack_run_loop_set_timer_handler(&channel->monitor_timer, &l2cap_ertm_monitor_timeout_callback); 343 btstack_run_loop_set_timer_context(&channel->monitor_timer, channel); 344 btstack_run_loop_set_timer(&channel->monitor_timer, channel->local_monitor_timeout_ms); 345 btstack_run_loop_add_timer(&channel->monitor_timer); 346 } 347 348 static void l2cap_ertm_stop_monitor_timer(l2cap_channel_t * channel){ 349 log_info("Stop Monitor timer"); 350 btstack_run_loop_remove_timer(&channel->monitor_timer); 351 } 352 353 static void l2cap_ertm_start_retransmission_timer(l2cap_channel_t * channel){ 354 log_info("Start Retransmission timer"); 355 btstack_run_loop_remove_timer(&channel->retransmission_timer); 356 btstack_run_loop_set_timer_handler(&channel->retransmission_timer, &l2cap_ertm_retransmission_timeout_callback); 357 btstack_run_loop_set_timer_context(&channel->retransmission_timer, channel); 358 btstack_run_loop_set_timer(&channel->retransmission_timer, channel->local_retransmission_timeout_ms); 359 btstack_run_loop_add_timer(&channel->retransmission_timer); 360 } 361 362 static void l2cap_ertm_stop_retransmission_timer(l2cap_channel_t * l2cap_channel){ 363 log_info("Stop Retransmission timer"); 364 btstack_run_loop_remove_timer(&l2cap_channel->retransmission_timer); 365 } 366 367 static void l2cap_ertm_monitor_timeout_callback(btstack_timer_source_t * ts){ 368 log_info("Monitor timeout"); 369 l2cap_channel_t * l2cap_channel = (l2cap_channel_t *) btstack_run_loop_get_timer_context(ts); 370 371 // TODO: we assume that it's the oldest packet 372 l2cap_ertm_tx_packet_state_t * tx_state; 373 tx_state = &l2cap_channel->tx_packets_state[l2cap_channel->tx_read_index]; 374 375 // check retry count 376 if (tx_state->retry_count < l2cap_channel->remote_max_transmit){ 377 // increment retry count 378 tx_state->retry_count++; 379 380 // start retransmit 381 l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel); 382 383 // start monitor timer 384 l2cap_ertm_start_monitor_timer(l2cap_channel); 385 386 // send RR/P=1 387 l2cap_channel->send_supervisor_frame_receiver_ready_poll = 1; 388 } else { 389 log_info("Monitor timer expired & retry count >= max transmit -> disconnect"); 390 l2cap_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 391 } 392 l2cap_run(); 393 } 394 395 static void l2cap_ertm_retransmission_timeout_callback(btstack_timer_source_t * ts){ 396 log_info("Retransmission timeout"); 397 l2cap_channel_t * l2cap_channel = (l2cap_channel_t *) btstack_run_loop_get_timer_context(ts); 398 399 // TODO: we assume that it's the oldest packet 400 l2cap_ertm_tx_packet_state_t * tx_state; 401 tx_state = &l2cap_channel->tx_packets_state[l2cap_channel->tx_read_index]; 402 403 // set retry count = 1 404 tx_state->retry_count = 1; 405 406 // start retransmit 407 l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel); 408 409 // start monitor timer 410 l2cap_ertm_start_monitor_timer(l2cap_channel); 411 412 // send RR/P=1 413 l2cap_channel->send_supervisor_frame_receiver_ready_poll = 1; 414 l2cap_run(); 415 } 416 417 static int l2cap_ertm_send_information_frame(l2cap_channel_t * channel, int index, int final){ 418 l2cap_ertm_tx_packet_state_t * tx_state = &channel->tx_packets_state[index]; 419 hci_reserve_packet_buffer(); 420 uint8_t *acl_buffer = hci_get_outgoing_packet_buffer(); 421 uint16_t control = l2cap_encanced_control_field_for_information_frame(tx_state->tx_seq, final, channel->req_seq, tx_state->sar); 422 log_info("I-Frame: control 0x%04x", control); 423 little_endian_store_16(acl_buffer, 8, control); 424 (void)memcpy(&acl_buffer[8 + 2], 425 &channel->tx_packets_data[index * channel->local_mps], 426 tx_state->len); 427 // (re-)start retransmission timer on 428 l2cap_ertm_start_retransmission_timer(channel); 429 // send 430 return l2cap_send_prepared(channel->local_cid, 2 + tx_state->len); 431 } 432 433 static void l2cap_ertm_store_fragment(l2cap_channel_t * channel, l2cap_segmentation_and_reassembly_t sar, uint16_t sdu_length, const uint8_t * data, uint16_t len){ 434 // get next index for storing packets 435 int index = channel->tx_write_index; 436 437 l2cap_ertm_tx_packet_state_t * tx_state = &channel->tx_packets_state[index]; 438 tx_state->tx_seq = channel->next_tx_seq; 439 tx_state->sar = sar; 440 tx_state->retry_count = 0; 441 442 uint8_t * tx_packet = &channel->tx_packets_data[index * channel->local_mps]; 443 log_debug("index %u, local mps %u, remote mps %u, packet tx %p, len %u", index, channel->local_mps, channel->remote_mps, tx_packet, len); 444 int pos = 0; 445 if (sar == L2CAP_SEGMENTATION_AND_REASSEMBLY_START_OF_L2CAP_SDU){ 446 little_endian_store_16(tx_packet, 0, sdu_length); 447 pos += 2; 448 } 449 (void)memcpy(&tx_packet[pos], data, len); 450 tx_state->len = pos + len; 451 452 // update 453 channel->num_stored_tx_frames++; 454 channel->next_tx_seq = l2cap_next_ertm_seq_nr(channel->next_tx_seq); 455 l2cap_ertm_next_tx_write_index(channel); 456 457 log_info("l2cap_ertm_store_fragment: tx_read_index %u, tx_write_index %u, num stored %u", channel->tx_read_index, channel->tx_write_index, channel->num_stored_tx_frames); 458 459 } 460 461 static uint8_t l2cap_ertm_send(l2cap_channel_t * channel, const uint8_t * data, uint16_t len){ 462 if (len > channel->remote_mtu){ 463 log_error("l2cap_ertm_send cid 0x%02x, data length exceeds remote MTU.", channel->local_cid); 464 return L2CAP_DATA_LEN_EXCEEDS_REMOTE_MTU; 465 } 466 467 if (!l2cap_ertm_can_store_packet_now(channel)){ 468 log_error("l2cap_ertm_send cid 0x%02x, fragment store full", channel->local_cid); 469 return BTSTACK_ACL_BUFFERS_FULL; 470 } 471 472 // check if it needs to get fragmented 473 uint16_t effective_mps = btstack_min(channel->remote_mps, channel->local_mps); 474 if (len > effective_mps){ 475 // fragmentation needed. 476 l2cap_segmentation_and_reassembly_t sar = L2CAP_SEGMENTATION_AND_REASSEMBLY_START_OF_L2CAP_SDU; 477 uint16_t chunk_len = 0; 478 while (len){ 479 switch (sar){ 480 case L2CAP_SEGMENTATION_AND_REASSEMBLY_START_OF_L2CAP_SDU: 481 chunk_len = effective_mps - 2; // sdu_length 482 l2cap_ertm_store_fragment(channel, sar, len, data, chunk_len); 483 sar = L2CAP_SEGMENTATION_AND_REASSEMBLY_CONTINUATION_OF_L2CAP_SDU; 484 break; 485 case L2CAP_SEGMENTATION_AND_REASSEMBLY_CONTINUATION_OF_L2CAP_SDU: 486 chunk_len = effective_mps; 487 if (chunk_len >= len){ 488 sar = L2CAP_SEGMENTATION_AND_REASSEMBLY_END_OF_L2CAP_SDU; 489 chunk_len = len; 490 } 491 l2cap_ertm_store_fragment(channel, sar, len, data, chunk_len); 492 break; 493 default: 494 btstack_unreachable(); 495 break; 496 } 497 len -= chunk_len; 498 data += chunk_len; 499 } 500 501 } else { 502 l2cap_ertm_store_fragment(channel, L2CAP_SEGMENTATION_AND_REASSEMBLY_UNSEGMENTED_L2CAP_SDU, 0, data, len); 503 } 504 505 // try to send 506 l2cap_notify_channel_can_send(); 507 return ERROR_CODE_SUCCESS; 508 } 509 510 static uint16_t l2cap_setup_options_ertm_request(l2cap_channel_t * channel, uint8_t * config_options){ 511 int pos = 0; 512 config_options[pos++] = L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL; 513 config_options[pos++] = 9; // length 514 config_options[pos++] = (uint8_t) channel->mode; 515 config_options[pos++] = channel->num_rx_buffers; // == TxWindows size 516 config_options[pos++] = channel->local_max_transmit; 517 little_endian_store_16( config_options, pos, channel->local_retransmission_timeout_ms); 518 pos += 2; 519 little_endian_store_16( config_options, pos, channel->local_monitor_timeout_ms); 520 pos += 2; 521 little_endian_store_16( config_options, pos, channel->local_mps); 522 pos += 2; 523 // 524 config_options[pos++] = L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT; 525 config_options[pos++] = 2; // length 526 little_endian_store_16(config_options, pos, channel->local_mtu); 527 pos += 2; 528 529 // Issue: iOS (e.g. 10.2) uses "No FCS" as default while Core 5.0 specifies "FCS" as default 530 // Workaround: try to actively negotiate FCS option 531 config_options[pos++] = L2CAP_CONFIG_OPTION_TYPE_FRAME_CHECK_SEQUENCE; 532 config_options[pos++] = 1; // length 533 config_options[pos++] = channel->fcs_option; 534 return pos; // 11+4+3=18 535 } 536 537 static uint16_t l2cap_setup_options_ertm_response(l2cap_channel_t * channel, uint8_t * config_options){ 538 int pos = 0; 539 config_options[pos++] = L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL; 540 config_options[pos++] = 9; // length 541 config_options[pos++] = (uint8_t) channel->mode; 542 // less or equal to remote tx window size 543 config_options[pos++] = btstack_min(channel->num_tx_buffers, channel->remote_tx_window_size); 544 // max transmit in response shall be ignored -> use sender values 545 config_options[pos++] = channel->remote_max_transmit; 546 // A value for the Retransmission time-out shall be sent in a positive Configuration Response 547 // and indicates the value that will be used by the sender of the Configuration Response -> use our value 548 little_endian_store_16( config_options, pos, channel->local_retransmission_timeout_ms); 549 pos += 2; 550 // A value for the Monitor time-out shall be sent in a positive Configuration Response 551 // and indicates the value that will be used by the sender of the Configuration Response -> use our value 552 little_endian_store_16( config_options, pos, channel->local_monitor_timeout_ms); 553 pos += 2; 554 // less or equal to remote mps 555 uint16_t effective_mps = btstack_min(channel->remote_mps, channel->local_mps); 556 little_endian_store_16( config_options, pos, effective_mps); 557 pos += 2; 558 // 559 config_options[pos++] = L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT; // MTU 560 config_options[pos++] = 2; // length 561 little_endian_store_16(config_options, pos, channel->remote_mtu); 562 pos += 2; 563 #if 0 564 // 565 config_options[pos++] = L2CAP_CONFIG_OPTION_TYPE_FRAME_CHECK_SEQUENCE; 566 config_options[pos++] = 1; // length 567 config_options[pos++] = channel->fcs_option; 568 #endif 569 return pos; // 11+4=15 570 } 571 572 static int l2cap_ertm_send_supervisor_frame(l2cap_channel_t * channel, uint16_t control){ 573 hci_reserve_packet_buffer(); 574 uint8_t *acl_buffer = hci_get_outgoing_packet_buffer(); 575 log_info("S-Frame: control 0x%04x", control); 576 little_endian_store_16(acl_buffer, 8, control); 577 return l2cap_send_prepared(channel->local_cid, 2); 578 } 579 580 static uint8_t l2cap_ertm_validate_local_config(l2cap_ertm_config_t * ertm_config){ 581 582 uint8_t result = ERROR_CODE_SUCCESS; 583 if (ertm_config->max_transmit < 1){ 584 log_error("max_transmit must be >= 1"); 585 result = ERROR_CODE_INVALID_HCI_COMMAND_PARAMETERS; 586 } 587 if (ertm_config->retransmission_timeout_ms < 2000){ 588 log_error("retransmission_timeout_ms must be >= 2000 ms"); 589 result = ERROR_CODE_INVALID_HCI_COMMAND_PARAMETERS; 590 } 591 if (ertm_config->monitor_timeout_ms < 12000){ 592 log_error("monitor_timeout_ms must be >= 12000 ms"); 593 result = ERROR_CODE_INVALID_HCI_COMMAND_PARAMETERS; 594 } 595 if (ertm_config->local_mtu < 48){ 596 log_error("local_mtu must be >= 48"); 597 result = ERROR_CODE_INVALID_HCI_COMMAND_PARAMETERS; 598 } 599 if (ertm_config->num_rx_buffers < 1){ 600 log_error("num_rx_buffers must be >= 1"); 601 result = ERROR_CODE_INVALID_HCI_COMMAND_PARAMETERS; 602 } 603 if (ertm_config->num_tx_buffers < 1){ 604 log_error("num_rx_buffers must be >= 1"); 605 result = ERROR_CODE_INVALID_HCI_COMMAND_PARAMETERS; 606 } 607 return result; 608 } 609 610 static void l2cap_ertm_setup_buffers(l2cap_channel_t * channel, uint8_t * buffer, uint32_t size){ 611 btstack_assert( (((uintptr_t) buffer) & 0x0f) == 0); 612 613 // setup state buffers - use void cast to avoid -Wcast-align warning 614 uint32_t pos = 0; 615 channel->rx_packets_state = (l2cap_ertm_rx_packet_state_t *) (void *) &buffer[pos]; 616 pos += channel->num_rx_buffers * sizeof(l2cap_ertm_rx_packet_state_t); 617 channel->tx_packets_state = (l2cap_ertm_tx_packet_state_t *) (void *) &buffer[pos]; 618 pos += channel->num_tx_buffers * sizeof(l2cap_ertm_tx_packet_state_t); 619 620 // setup reassembly buffer 621 channel->reassembly_buffer = &buffer[pos]; 622 pos += channel->local_mtu; 623 624 // setup rx buffers 625 channel->rx_packets_data = &buffer[pos]; 626 pos += channel->num_rx_buffers * channel->local_mps; 627 628 // setup tx buffers 629 channel->tx_packets_data = &buffer[pos]; 630 pos += channel->num_rx_buffers * channel->remote_mps; 631 632 btstack_assert(pos <= size); 633 UNUSED(pos); 634 } 635 636 static void l2cap_ertm_configure_channel(l2cap_channel_t * channel, l2cap_ertm_config_t * ertm_config, uint8_t * buffer, uint32_t size){ 637 638 channel->mode = L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION; 639 channel->ertm_mandatory = ertm_config->ertm_mandatory; 640 channel->local_max_transmit = ertm_config->max_transmit; 641 channel->local_retransmission_timeout_ms = ertm_config->retransmission_timeout_ms; 642 channel->local_monitor_timeout_ms = ertm_config->monitor_timeout_ms; 643 channel->local_mtu = ertm_config->local_mtu; 644 channel->num_rx_buffers = ertm_config->num_rx_buffers; 645 channel->num_tx_buffers = ertm_config->num_tx_buffers; 646 channel->fcs_option = ertm_config->fcs_option; 647 648 // align buffer to 16-byte boundary to assert l2cap_ertm_rx_packet_state_t is aligned 649 int bytes_till_alignment = 16 - (((uintptr_t) buffer) & 0x0f); 650 buffer += bytes_till_alignment; 651 size -= bytes_till_alignment; 652 653 // calculate space for rx and tx buffers 654 uint32_t state_len = channel->num_rx_buffers * sizeof(l2cap_ertm_rx_packet_state_t) + channel->num_tx_buffers * sizeof(l2cap_ertm_tx_packet_state_t); 655 uint32_t buffer_space = size - state_len - channel->local_mtu; 656 657 // divide rest of data equally for initial config 658 uint16_t mps = buffer_space / (ertm_config->num_rx_buffers + ertm_config->num_tx_buffers); 659 channel->local_mps = mps; 660 channel->remote_mps = mps; 661 l2cap_ertm_setup_buffers(channel, buffer, size); 662 663 log_info("Local MPS: %u", channel->local_mps); 664 } 665 666 uint8_t l2cap_ertm_create_channel(btstack_packet_handler_t packet_handler, bd_addr_t address, uint16_t psm, 667 l2cap_ertm_config_t * ertm_config, uint8_t * buffer, uint32_t size, uint16_t * out_local_cid){ 668 669 log_info("l2cap_ertm_create_channel addr %s, psm 0x%x, local mtu %u", bd_addr_to_str(address), psm, ertm_config->local_mtu); 670 671 // validate local config 672 uint8_t result = l2cap_ertm_validate_local_config(ertm_config); 673 if (result) return result; 674 675 // determine security level based on psm 676 const gap_security_level_t security_level = l2cap_security_level_0_allowed_for_PSM(psm) ? LEVEL_0 : gap_get_security_level(); 677 678 l2cap_channel_t * channel = l2cap_create_channel_entry(packet_handler, L2CAP_CHANNEL_TYPE_CLASSIC, address, BD_ADDR_TYPE_ACL, psm, ertm_config->local_mtu, security_level); 679 if (!channel) { 680 return BTSTACK_MEMORY_ALLOC_FAILED; 681 } 682 683 // configure ERTM 684 l2cap_ertm_configure_channel(channel, ertm_config, buffer, size); 685 686 // add to connections list 687 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 688 689 // store local_cid 690 if (out_local_cid){ 691 *out_local_cid = channel->local_cid; 692 } 693 694 // check if hci connection is already usable 695 hci_connection_t * conn = hci_connection_for_bd_addr_and_type(address, BD_ADDR_TYPE_ACL); 696 if (conn){ 697 log_info("l2cap_create_channel, hci connection already exists"); 698 l2cap_handle_connection_complete(conn->con_handle, channel); 699 // check if remote supported fearures are already received 700 if (hci_remote_features_available(conn->con_handle)) { 701 l2cap_handle_remote_supported_features_received(channel); 702 } else { 703 hci_remote_features_query(conn->con_handle); 704 }; 705 } 706 707 l2cap_run(); 708 709 return 0; 710 } 711 712 static void l2cap_ertm_notify_channel_can_send(l2cap_channel_t * channel){ 713 if (l2cap_ertm_can_store_packet_now(channel)){ 714 channel->waiting_for_can_send_now = 0; 715 l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid); 716 } 717 } 718 719 uint8_t l2cap_ertm_accept_connection(uint16_t local_cid, l2cap_ertm_config_t * ertm_config, uint8_t * buffer, uint32_t size){ 720 721 log_info("l2cap_ertm_accept_connection local_cid 0x%x", local_cid); 722 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 723 if (!channel) { 724 log_error("l2cap_accept_connection called but local_cid 0x%x not found", local_cid); 725 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 726 } 727 728 // validate local config 729 uint8_t result = l2cap_ertm_validate_local_config(ertm_config); 730 if (result) return result; 731 732 // configure L2CAP ERTM 733 l2cap_ertm_configure_channel(channel, ertm_config, buffer, size); 734 735 // we need to know if ERTM is supported before sending a config response 736 channel->state = L2CAP_STATE_WAIT_INCOMING_EXTENDED_FEATURES; 737 hci_connection_t * connection = hci_connection_for_handle(channel->con_handle); 738 btstack_assert(connection != NULL); 739 switch (connection->l2cap_state.information_state){ 740 case L2CAP_INFORMATION_STATE_IDLE: 741 connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST; 742 break; 743 case L2CAP_INFORMATION_STATE_DONE: 744 l2cap_handle_information_request_complete(connection); 745 break; 746 default: 747 break; 748 } 749 750 l2cap_run(); 751 752 return ERROR_CODE_SUCCESS; 753 } 754 755 uint8_t l2cap_ertm_decline_connection(uint16_t local_cid){ 756 l2cap_decline_connection(local_cid); 757 return ERROR_CODE_SUCCESS; 758 } 759 760 uint8_t l2cap_ertm_set_busy(uint16_t local_cid){ 761 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid( local_cid); 762 if (!channel) { 763 log_error( "l2cap_decline_connection called but local_cid 0x%x not found", local_cid); 764 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 765 } 766 if (!channel->local_busy){ 767 channel->local_busy = 1; 768 channel->send_supervisor_frame_receiver_not_ready = 1; 769 l2cap_run(); 770 } 771 return ERROR_CODE_SUCCESS; 772 } 773 774 uint8_t l2cap_ertm_set_ready(uint16_t local_cid){ 775 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid( local_cid); 776 if (!channel) { 777 log_error( "l2cap_decline_connection called but local_cid 0x%x not found", local_cid); 778 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 779 } 780 if (channel->local_busy){ 781 channel->local_busy = 0; 782 channel->send_supervisor_frame_receiver_ready_poll = 1; 783 l2cap_run(); 784 } 785 return ERROR_CODE_SUCCESS; 786 } 787 788 // Process-ReqSeq 789 static void l2cap_ertm_process_req_seq(l2cap_channel_t * l2cap_channel, uint8_t req_seq){ 790 int num_buffers_acked = 0; 791 l2cap_ertm_tx_packet_state_t * tx_state; 792 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); 793 while (true){ 794 795 // no unack packets left 796 if (l2cap_channel->unacked_frames == 0) { 797 // stop retransmission timer 798 l2cap_ertm_stop_retransmission_timer(l2cap_channel); 799 break; 800 } 801 802 tx_state = &l2cap_channel->tx_packets_state[l2cap_channel->tx_read_index]; 803 // calc delta 804 int delta = (req_seq - tx_state->tx_seq) & 0x03f; 805 if (delta == 0) break; // all packets acknowledged 806 if (delta > l2cap_channel->remote_tx_window_size) break; 807 808 num_buffers_acked++; 809 l2cap_channel->num_stored_tx_frames--; 810 l2cap_channel->unacked_frames--; 811 log_info("RR seq %u => packet with tx_seq %u done", req_seq, tx_state->tx_seq); 812 813 l2cap_channel->tx_read_index++; 814 if (l2cap_channel->tx_read_index >= l2cap_channel->num_rx_buffers){ 815 l2cap_channel->tx_read_index = 0; 816 } 817 } 818 if (num_buffers_acked){ 819 log_info("num_buffers_acked %u", num_buffers_acked); 820 l2cap_ertm_notify_channel_can_send(l2cap_channel); 821 } 822 } 823 824 static l2cap_ertm_tx_packet_state_t * l2cap_ertm_get_tx_state(l2cap_channel_t * l2cap_channel, uint8_t tx_seq){ 825 int i; 826 for (i=0;i<l2cap_channel->num_tx_buffers;i++){ 827 l2cap_ertm_tx_packet_state_t * tx_state = &l2cap_channel->tx_packets_state[i]; 828 if (tx_state->tx_seq == tx_seq) return tx_state; 829 } 830 return NULL; 831 } 832 833 // @param delta number of frames in the future, >= 1 834 // @assumption size <= l2cap_channel->local_mps (checked in l2cap_acl_classic_handler) 835 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){ 836 log_info("Store SDU with delta %u", delta); 837 // get rx state for packet to store 838 int index = l2cap_channel->rx_store_index + delta - 1; 839 if (index > l2cap_channel->num_rx_buffers){ 840 index -= l2cap_channel->num_rx_buffers; 841 } 842 log_info("Index of packet to store %u", index); 843 l2cap_ertm_rx_packet_state_t * rx_state = &l2cap_channel->rx_packets_state[index]; 844 // check if buffer is free 845 if (rx_state->valid){ 846 log_error("Packet buffer already used"); 847 return; 848 } 849 rx_state->valid = 1; 850 rx_state->sar = sar; 851 rx_state->len = size; 852 uint8_t * rx_buffer = &l2cap_channel->rx_packets_data[index]; 853 (void)memcpy(rx_buffer, payload, size); 854 } 855 856 // @assumption size <= l2cap_channel->local_mps (checked in l2cap_acl_classic_handler) 857 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){ 858 uint16_t reassembly_sdu_length; 859 switch (sar){ 860 case L2CAP_SEGMENTATION_AND_REASSEMBLY_UNSEGMENTED_L2CAP_SDU: 861 // assert total packet size <= our mtu 862 if (size > l2cap_channel->local_mtu) break; 863 // packet complete -> disapatch 864 l2cap_dispatch_to_channel(l2cap_channel, L2CAP_DATA_PACKET, (uint8_t*) payload, size); 865 break; 866 case L2CAP_SEGMENTATION_AND_REASSEMBLY_START_OF_L2CAP_SDU: 867 // read SDU len 868 reassembly_sdu_length = little_endian_read_16(payload, 0); 869 payload += 2; 870 size -= 2; 871 // assert reassembled size <= our mtu 872 if (reassembly_sdu_length > l2cap_channel->local_mtu) break; 873 // store start segment 874 l2cap_channel->reassembly_sdu_length = reassembly_sdu_length; 875 (void)memcpy(&l2cap_channel->reassembly_buffer[0], payload, size); 876 l2cap_channel->reassembly_pos = size; 877 break; 878 case L2CAP_SEGMENTATION_AND_REASSEMBLY_CONTINUATION_OF_L2CAP_SDU: 879 // assert size of reassembled data <= our mtu 880 if (l2cap_channel->reassembly_pos + size > l2cap_channel->local_mtu) break; 881 // store continuation segment 882 (void)memcpy(&l2cap_channel->reassembly_buffer[l2cap_channel->reassembly_pos], 883 payload, size); 884 l2cap_channel->reassembly_pos += size; 885 break; 886 case L2CAP_SEGMENTATION_AND_REASSEMBLY_END_OF_L2CAP_SDU: 887 // assert size of reassembled data <= our mtu 888 if (l2cap_channel->reassembly_pos + size > l2cap_channel->local_mtu) break; 889 // store continuation segment 890 (void)memcpy(&l2cap_channel->reassembly_buffer[l2cap_channel->reassembly_pos], 891 payload, size); 892 l2cap_channel->reassembly_pos += size; 893 // assert size of reassembled data matches announced sdu length 894 if (l2cap_channel->reassembly_pos != l2cap_channel->reassembly_sdu_length) break; 895 // packet complete -> disapatch 896 l2cap_dispatch_to_channel(l2cap_channel, L2CAP_DATA_PACKET, l2cap_channel->reassembly_buffer, l2cap_channel->reassembly_pos); 897 l2cap_channel->reassembly_pos = 0; 898 break; 899 default: 900 btstack_assert(false); 901 break; 902 } 903 } 904 905 static void l2cap_ertm_channel_send_information_frame(l2cap_channel_t * channel){ 906 channel->unacked_frames++; 907 int index = channel->tx_send_index; 908 channel->tx_send_index++; 909 if (channel->tx_send_index >= channel->num_tx_buffers){ 910 channel->tx_send_index = 0; 911 } 912 l2cap_ertm_send_information_frame(channel, index, 0); // final = 0 913 } 914 915 #endif 916 917 #ifdef L2CAP_USES_CHANNELS 918 static uint16_t l2cap_next_local_cid(void){ 919 do { 920 if (l2cap_local_source_cid == 0xfffeu) { 921 l2cap_local_source_cid = 0x40; 922 } else { 923 l2cap_local_source_cid++; 924 } 925 } while (l2cap_get_channel_for_local_cid(l2cap_local_source_cid) != NULL); 926 return l2cap_local_source_cid; 927 } 928 #endif 929 930 static uint8_t l2cap_next_sig_id(void){ 931 if (l2cap_sig_seq_nr == 0xffu) { 932 l2cap_sig_seq_nr = 1; 933 } else { 934 l2cap_sig_seq_nr++; 935 } 936 return l2cap_sig_seq_nr; 937 } 938 939 void l2cap_init(void){ 940 #ifdef L2CAP_USES_CHANNELS 941 l2cap_local_source_cid = 0x40; 942 #endif 943 l2cap_sig_seq_nr = 0xff; 944 945 #ifdef ENABLE_CLASSIC 946 // Setup Connectionless Channel 947 l2cap_fixed_channel_classic_connectionless.local_cid = L2CAP_CID_CONNECTIONLESS_CHANNEL; 948 l2cap_fixed_channel_classic_connectionless.channel_type = L2CAP_CHANNEL_TYPE_CONNECTIONLESS; 949 btstack_linked_list_add(&l2cap_channels, (btstack_linked_item_t *) &l2cap_fixed_channel_classic_connectionless); 950 #endif 951 952 #ifdef ENABLE_BLE 953 // Setup fixed ATT Channel 954 l2cap_fixed_channel_le_att.local_cid = L2CAP_CID_ATTRIBUTE_PROTOCOL; 955 l2cap_fixed_channel_le_att.channel_type = L2CAP_CHANNEL_TYPE_FIXED_LE; 956 btstack_linked_list_add(&l2cap_channels, (btstack_linked_item_t *) &l2cap_fixed_channel_le_att); 957 958 // Setup fixed SM Channel 959 l2cap_fixed_channel_le_sm.local_cid = L2CAP_CID_SECURITY_MANAGER_PROTOCOL; 960 l2cap_fixed_channel_le_sm.channel_type = L2CAP_CHANNEL_TYPE_FIXED_LE; 961 btstack_linked_list_add(&l2cap_channels, (btstack_linked_item_t *) &l2cap_fixed_channel_le_sm); 962 #endif 963 #ifdef ENABLE_CLASSIC 964 // Setup fixed SM Channel 965 l2cap_fixed_channel_classic_sm.local_cid = L2CAP_CID_BR_EDR_SECURITY_MANAGER; 966 l2cap_fixed_channel_classic_sm.channel_type = L2CAP_CHANNEL_TYPE_FIXED_CLASSIC; 967 btstack_linked_list_add(&l2cap_channels, (btstack_linked_item_t *) &l2cap_fixed_channel_classic_sm); 968 #endif 969 970 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 971 l2cap_enhanced_mps_min = 0x0001; 972 l2cap_enhanced_mps_max = 0xffff; 973 l2cap_trigger_run_registration.callback = &l2cap_run_trigger_callback; 974 #endif 975 976 // 977 // register callback with HCI 978 // 979 l2cap_hci_event_callback_registration.callback = &l2cap_hci_event_handler; 980 hci_add_event_handler(&l2cap_hci_event_callback_registration); 981 982 hci_register_acl_packet_handler(&l2cap_acl_handler); 983 984 #ifndef ENABLE_EXPLICIT_CONNECTABLE_MODE_CONTROL 985 #ifdef ENABLE_CLASSIC 986 gap_connectable_control(0); // no services yet 987 #endif 988 #endif 989 } 990 991 /** 992 * @brief De-Init L2CAP 993 */ 994 void l2cap_deinit(void){ 995 l2cap_channels = NULL; 996 l2cap_signaling_responses_pending = 0; 997 #ifdef ENABLE_CLASSIC 998 l2cap_require_security_level2_for_outgoing_sdp = 0; 999 (void)memset(&l2cap_fixed_channel_classic_connectionless, 0, sizeof(l2cap_fixed_channel_classic_connectionless)); 1000 l2cap_services = NULL; 1001 (void)memset(l2cap_outgoing_classic_addr, 0, 6); 1002 (void)memset(&l2cap_fixed_channel_classic_sm, 0, sizeof(l2cap_fixed_channel_classic_sm)); 1003 #endif 1004 #ifdef ENABLE_BLE 1005 l2cap_le_custom_max_mtu = 0; 1006 (void)memset(&l2cap_fixed_channel_le_att, 0, sizeof(l2cap_fixed_channel_le_att)); 1007 (void)memset(&l2cap_fixed_channel_le_sm, 0, sizeof(l2cap_fixed_channel_le_sm)); 1008 #endif 1009 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 1010 l2cap_le_services = NULL; 1011 #endif 1012 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 1013 l2cap_enhanced_services = NULL; 1014 #endif 1015 l2cap_event_handlers = NULL; 1016 } 1017 1018 void l2cap_add_event_handler(btstack_packet_callback_registration_t * callback_handler){ 1019 btstack_linked_list_add_tail(&l2cap_event_handlers, (btstack_linked_item_t*) callback_handler); 1020 } 1021 1022 void l2cap_remove_event_handler(btstack_packet_callback_registration_t * callback_handler){ 1023 btstack_linked_list_remove(&l2cap_event_handlers, (btstack_linked_item_t*) callback_handler); 1024 } 1025 1026 static void l2cap_emit_event(uint8_t *event, uint16_t size) { 1027 hci_dump_packet( HCI_EVENT_PACKET, 1, event, size); 1028 // dispatch to all event handlers 1029 btstack_linked_list_iterator_t it; 1030 btstack_linked_list_iterator_init(&it, &l2cap_event_handlers); 1031 while (btstack_linked_list_iterator_has_next(&it)){ 1032 btstack_packet_callback_registration_t * entry = (btstack_packet_callback_registration_t*) btstack_linked_list_iterator_next(&it); 1033 entry->callback(HCI_EVENT_PACKET, 0, event, size); 1034 } 1035 } 1036 1037 void l2cap_request_can_send_fix_channel_now_event(hci_con_handle_t con_handle, uint16_t channel_id){ 1038 UNUSED(con_handle); // ok: there is no con handle 1039 1040 l2cap_fixed_channel_t * channel = l2cap_fixed_channel_for_channel_id(channel_id); 1041 if (!channel) return; 1042 channel->waiting_for_can_send_now = 1; 1043 l2cap_notify_channel_can_send(); 1044 } 1045 1046 bool l2cap_can_send_fixed_channel_packet_now(hci_con_handle_t con_handle, uint16_t channel_id){ 1047 UNUSED(channel_id); // ok: only depends on Controller LE buffers 1048 1049 return hci_can_send_acl_packet_now(con_handle); 1050 } 1051 1052 uint8_t *l2cap_get_outgoing_buffer(void){ 1053 return hci_get_outgoing_packet_buffer() + COMPLETE_L2CAP_HEADER; // 8 bytes 1054 } 1055 1056 // only for L2CAP Basic Channels 1057 bool l2cap_reserve_packet_buffer(void){ 1058 return hci_reserve_packet_buffer(); 1059 } 1060 1061 // only for L2CAP Basic Channels 1062 void l2cap_release_packet_buffer(void){ 1063 hci_release_packet_buffer(); 1064 } 1065 1066 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){ 1067 // 0 - Connection handle : PB=pb : BC=00 1068 little_endian_store_16(acl_buffer, 0u, con_handle | (packet_boundary << 12u) | (0u << 14u)); 1069 // 2 - ACL length 1070 little_endian_store_16(acl_buffer, 2u, len + 4u); 1071 // 4 - L2CAP packet length 1072 little_endian_store_16(acl_buffer, 4u, len + 0u); 1073 // 6 - L2CAP channel DEST 1074 little_endian_store_16(acl_buffer, 6, remote_cid); 1075 } 1076 1077 // assumption - only on LE connections 1078 uint8_t l2cap_send_prepared_connectionless(hci_con_handle_t con_handle, uint16_t cid, uint16_t len){ 1079 1080 if (!hci_is_packet_buffer_reserved()){ 1081 log_error("l2cap_send_prepared_connectionless called without reserving packet first"); 1082 return BTSTACK_ACL_BUFFERS_FULL; 1083 } 1084 1085 if (!hci_can_send_prepared_acl_packet_now(con_handle)){ 1086 log_info("l2cap_send_prepared_connectionless handle 0x%02x, cid 0x%02x, cannot send", con_handle, cid); 1087 return BTSTACK_ACL_BUFFERS_FULL; 1088 } 1089 1090 log_debug("l2cap_send_prepared_connectionless handle %u, cid 0x%02x", con_handle, cid); 1091 1092 uint8_t *acl_buffer = hci_get_outgoing_packet_buffer(); 1093 l2cap_setup_header(acl_buffer, con_handle, 0, cid, len); 1094 // send 1095 return hci_send_acl_packet_buffer(len+8u); 1096 } 1097 1098 // assumption - only on LE connections 1099 uint8_t l2cap_send_connectionless(hci_con_handle_t con_handle, uint16_t cid, uint8_t *data, uint16_t len){ 1100 1101 if (!hci_can_send_acl_packet_now(con_handle)){ 1102 log_info("l2cap_send cid 0x%02x, cannot send", cid); 1103 return BTSTACK_ACL_BUFFERS_FULL; 1104 } 1105 1106 hci_reserve_packet_buffer(); 1107 uint8_t *acl_buffer = hci_get_outgoing_packet_buffer(); 1108 1109 (void)memcpy(&acl_buffer[8], data, len); 1110 1111 return l2cap_send_prepared_connectionless(con_handle, cid, len); 1112 } 1113 1114 static void l2cap_emit_can_send_now(btstack_packet_handler_t packet_handler, uint16_t channel) { 1115 log_debug("L2CAP_EVENT_CHANNEL_CAN_SEND_NOW local_cid 0x%x", channel); 1116 uint8_t event[4]; 1117 event[0] = L2CAP_EVENT_CAN_SEND_NOW; 1118 event[1] = sizeof(event) - 2u; 1119 little_endian_store_16(event, 2, channel); 1120 hci_dump_packet( HCI_EVENT_PACKET, 1, event, sizeof(event)); 1121 packet_handler(HCI_EVENT_PACKET, channel, event, sizeof(event)); 1122 } 1123 1124 #ifdef L2CAP_USES_CHANNELS 1125 static void l2cap_dispatch_to_channel(l2cap_channel_t *channel, uint8_t type, uint8_t * data, uint16_t size){ 1126 (* (channel->packet_handler))(type, channel->local_cid, data, size); 1127 } 1128 1129 static void l2cap_emit_simple_event_with_cid(l2cap_channel_t * channel, uint8_t event_code){ 1130 uint8_t event[4]; 1131 event[0] = event_code; 1132 event[1] = sizeof(event) - 2u; 1133 little_endian_store_16(event, 2, channel->local_cid); 1134 hci_dump_packet( HCI_EVENT_PACKET, 1, event, sizeof(event)); 1135 l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event)); 1136 } 1137 #endif 1138 1139 #ifdef ENABLE_CLASSIC 1140 void l2cap_emit_channel_opened(l2cap_channel_t *channel, uint8_t status) { 1141 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", 1142 status, bd_addr_to_str(channel->address), channel->con_handle, channel->psm, 1143 channel->local_cid, channel->remote_cid, channel->local_mtu, channel->remote_mtu, channel->flush_timeout); 1144 uint8_t event[26]; 1145 event[0] = L2CAP_EVENT_CHANNEL_OPENED; 1146 event[1] = sizeof(event) - 2; 1147 event[2] = status; 1148 reverse_bd_addr(channel->address, &event[3]); 1149 little_endian_store_16(event, 9, channel->con_handle); 1150 little_endian_store_16(event, 11, channel->psm); 1151 little_endian_store_16(event, 13, channel->local_cid); 1152 little_endian_store_16(event, 15, channel->remote_cid); 1153 little_endian_store_16(event, 17, channel->local_mtu); 1154 little_endian_store_16(event, 19, channel->remote_mtu); 1155 little_endian_store_16(event, 21, channel->flush_timeout); 1156 event[23] = (channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) ? 1 : 0; 1157 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1158 log_info("ERTM mode %u, fcs enabled %u", channel->mode, channel->fcs_option); 1159 event[24] = channel->mode; 1160 event[25] = channel->fcs_option; 1161 1162 #else 1163 event[24] = L2CAP_CHANNEL_MODE_BASIC; 1164 event[25] = 0; 1165 #endif 1166 hci_dump_packet( HCI_EVENT_PACKET, 1, event, sizeof(event)); 1167 l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event)); 1168 } 1169 1170 static void l2cap_emit_incoming_connection(l2cap_channel_t *channel) { 1171 log_info("L2CAP_EVENT_INCOMING_CONNECTION addr %s handle 0x%x psm 0x%x local_cid 0x%x remote_cid 0x%x", 1172 bd_addr_to_str(channel->address), channel->con_handle, channel->psm, channel->local_cid, channel->remote_cid); 1173 uint8_t event[16]; 1174 event[0] = L2CAP_EVENT_INCOMING_CONNECTION; 1175 event[1] = sizeof(event) - 2; 1176 reverse_bd_addr(channel->address, &event[2]); 1177 little_endian_store_16(event, 8, channel->con_handle); 1178 little_endian_store_16(event, 10, channel->psm); 1179 little_endian_store_16(event, 12, channel->local_cid); 1180 little_endian_store_16(event, 14, channel->remote_cid); 1181 hci_dump_packet( HCI_EVENT_PACKET, 1, event, sizeof(event)); 1182 l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event)); 1183 } 1184 1185 static void l2cap_handle_channel_open_failed(l2cap_channel_t * channel, uint8_t status){ 1186 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1187 // emit ertm buffer released, as it's not needed. if in basic mode, it was either not allocated or already released 1188 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 1189 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED); 1190 } 1191 #endif 1192 l2cap_emit_channel_opened(channel, status); 1193 } 1194 1195 #endif 1196 1197 #ifdef L2CAP_USES_CHANNELS 1198 1199 static void l2cap_emit_channel_closed(l2cap_channel_t *channel) { 1200 log_info("L2CAP_EVENT_CHANNEL_CLOSED local_cid 0x%x", channel->local_cid); 1201 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_CHANNEL_CLOSED); 1202 } 1203 1204 static void l2cap_handle_channel_closed(l2cap_channel_t * channel){ 1205 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1206 // emit ertm buffer released, as it's not needed anymore. if in basic mode, it was either not allocated or already released 1207 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 1208 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED); 1209 } 1210 #endif 1211 l2cap_emit_channel_closed(channel); 1212 } 1213 #endif 1214 1215 static l2cap_fixed_channel_t * l2cap_channel_item_by_cid(uint16_t cid){ 1216 btstack_linked_list_iterator_t it; 1217 btstack_linked_list_iterator_init(&it, &l2cap_channels); 1218 while (btstack_linked_list_iterator_has_next(&it)){ 1219 l2cap_fixed_channel_t * channel = (l2cap_fixed_channel_t*) btstack_linked_list_iterator_next(&it); 1220 if (channel->local_cid == cid) { 1221 return channel; 1222 } 1223 } 1224 return NULL; 1225 } 1226 1227 // used for fixed channels in LE (ATT/SM) and Classic (Connectionless Channel). CID < 0x04 1228 static l2cap_fixed_channel_t * l2cap_fixed_channel_for_channel_id(uint16_t local_cid){ 1229 if (local_cid >= 0x40u) return NULL; 1230 return (l2cap_fixed_channel_t*) l2cap_channel_item_by_cid(local_cid); 1231 } 1232 1233 #ifdef L2CAP_USES_CHANNELS 1234 1235 static int l2cap_is_dynamic_channel_type(l2cap_channel_type_t channel_type) { 1236 switch (channel_type) { 1237 case L2CAP_CHANNEL_TYPE_CLASSIC: 1238 case L2CAP_CHANNEL_TYPE_CHANNEL_CBM: 1239 case L2CAP_CHANNEL_TYPE_CHANNEL_ECBM: 1240 return 1; 1241 default: 1242 return 0; 1243 } 1244 } 1245 1246 static l2cap_channel_t * l2cap_get_channel_for_local_cid(uint16_t local_cid){ 1247 if (local_cid < 0x40u) return NULL; 1248 return (l2cap_channel_t*) l2cap_channel_item_by_cid(local_cid); 1249 } 1250 1251 static l2cap_channel_t * l2cap_get_channel_for_local_cid_and_handle(uint16_t local_cid, hci_con_handle_t con_handle){ 1252 if (local_cid < 0x40u) return NULL; 1253 l2cap_channel_t * l2cap_channel = (l2cap_channel_t*) l2cap_channel_item_by_cid(local_cid); 1254 if (l2cap_channel == NULL) return NULL; 1255 if (l2cap_channel->con_handle != con_handle) return NULL; 1256 return l2cap_channel; 1257 } 1258 #endif 1259 1260 #ifdef L2CAP_USES_CREDIT_BASED_CHANNELS 1261 static l2cap_channel_t * l2cap_get_channel_for_remote_handle_and_cid(hci_con_handle_t con_handle, uint16_t remote_cid){ 1262 btstack_linked_list_iterator_t it; 1263 btstack_linked_list_iterator_init(&it, &l2cap_channels); 1264 while (btstack_linked_list_iterator_has_next(&it)){ 1265 l2cap_fixed_channel_t * channel = (l2cap_fixed_channel_t*) btstack_linked_list_iterator_next(&it); 1266 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 1267 l2cap_channel_t * dynamic_channel = (l2cap_channel_t *) channel; 1268 if (dynamic_channel->con_handle != con_handle) continue; 1269 if (dynamic_channel->remote_cid != remote_cid) continue; 1270 return dynamic_channel; 1271 } 1272 return NULL; 1273 } 1274 #endif 1275 1276 #ifdef L2CAP_USES_CHANNELS 1277 uint8_t l2cap_request_can_send_now_event(uint16_t local_cid){ 1278 l2cap_channel_t *channel = l2cap_get_channel_for_local_cid(local_cid); 1279 if (!channel) return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 1280 channel->waiting_for_can_send_now = 1; 1281 switch (channel->channel_type){ 1282 case L2CAP_CHANNEL_TYPE_CLASSIC: 1283 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1284 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 1285 l2cap_ertm_notify_channel_can_send(channel); 1286 return ERROR_CODE_SUCCESS; 1287 } 1288 #endif 1289 l2cap_notify_channel_can_send(); 1290 break; 1291 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 1292 case L2CAP_CHANNEL_TYPE_CHANNEL_CBM: 1293 l2cap_credit_based_notify_channel_can_send(channel); 1294 break; 1295 #endif 1296 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 1297 case L2CAP_CHANNEL_TYPE_CHANNEL_ECBM: 1298 l2cap_credit_based_notify_channel_can_send(channel); 1299 break; 1300 #endif 1301 default: 1302 break; 1303 } 1304 return ERROR_CODE_SUCCESS; 1305 } 1306 1307 bool l2cap_can_send_packet_now(uint16_t local_cid){ 1308 l2cap_channel_t *channel = l2cap_get_channel_for_local_cid(local_cid); 1309 if (!channel) return false; 1310 if (channel->state != L2CAP_STATE_OPEN) return false; 1311 switch (channel->channel_type){ 1312 case L2CAP_CHANNEL_TYPE_CLASSIC: 1313 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1314 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 1315 return l2cap_ertm_can_store_packet_now(channel); 1316 } 1317 #endif 1318 return hci_can_send_acl_packet_now(channel->con_handle); 1319 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 1320 case L2CAP_CHANNEL_TYPE_CHANNEL_CBM: 1321 return channel->send_sdu_buffer == NULL; 1322 #endif 1323 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 1324 case L2CAP_CHANNEL_TYPE_CHANNEL_ECBM: 1325 return channel->send_sdu_buffer == NULL; 1326 #endif 1327 default: 1328 return false; 1329 } 1330 } 1331 1332 uint8_t l2cap_send(uint16_t local_cid, const uint8_t *data, uint16_t len){ 1333 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 1334 if (!channel) { 1335 log_error("l2cap_send no channel for cid 0x%02x", local_cid); 1336 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 1337 } 1338 switch (channel->channel_type){ 1339 #ifdef ENABLE_CLASSIC 1340 case L2CAP_CHANNEL_TYPE_CLASSIC: 1341 return l2cap_classic_send(channel, data, len); 1342 #endif 1343 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 1344 case L2CAP_CHANNEL_TYPE_CHANNEL_CBM: 1345 return l2cap_credit_based_send_data(channel, data, len); 1346 #endif 1347 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 1348 case L2CAP_CHANNEL_TYPE_CHANNEL_ECBM: 1349 return l2cap_credit_based_send_data(channel, data, len); 1350 #endif 1351 default: 1352 return ERROR_CODE_UNSPECIFIED_ERROR; 1353 } 1354 } 1355 #endif 1356 1357 #ifdef ENABLE_CLASSIC 1358 bool l2cap_can_send_prepared_packet_now(uint16_t local_cid){ 1359 l2cap_channel_t *channel = l2cap_get_channel_for_local_cid(local_cid); 1360 if (!channel) return false; 1361 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1362 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 1363 return false; 1364 } 1365 #endif 1366 return hci_can_send_prepared_acl_packet_now(channel->con_handle); 1367 } 1368 1369 #endif 1370 1371 #ifdef L2CAP_USES_CHANNELS 1372 uint16_t l2cap_get_remote_mtu_for_local_cid(uint16_t local_cid){ 1373 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 1374 if (channel) { 1375 return channel->remote_mtu; 1376 } 1377 return 0; 1378 } 1379 #endif 1380 1381 #ifdef ENABLE_CLASSIC 1382 // RTX Timer only exist for dynamic channels 1383 static l2cap_channel_t * l2cap_channel_for_rtx_timer(btstack_timer_source_t * ts){ 1384 btstack_linked_list_iterator_t it; 1385 btstack_linked_list_iterator_init(&it, &l2cap_channels); 1386 while (btstack_linked_list_iterator_has_next(&it)){ 1387 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 1388 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 1389 if (&channel->rtx == ts) { 1390 return channel; 1391 } 1392 } 1393 return NULL; 1394 } 1395 1396 static void l2cap_rtx_timeout(btstack_timer_source_t * ts){ 1397 l2cap_channel_t * channel = l2cap_channel_for_rtx_timer(ts); 1398 if (!channel) return; 1399 1400 log_info("l2cap_rtx_timeout for local cid 0x%02x", channel->local_cid); 1401 1402 // "When terminating the channel, it is not necessary to send a L2CAP_DisconnectReq 1403 // and enter WAIT_DISCONNECT state. Channels can be transitioned directly to the CLOSED state." 1404 // notify client 1405 l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_RTX_TIMEOUT); 1406 1407 // discard channel 1408 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 1409 l2cap_free_channel_entry(channel); 1410 } 1411 1412 static uint8_t l2cap_classic_packet_boundary_flag(void){ 1413 return (hci_non_flushable_packet_boundary_flag_supported() && (hci_automatic_flush_timeout() == 0)) ? 0x00 : 0x02; 1414 } 1415 #endif 1416 1417 #ifdef L2CAP_USES_CHANNELS 1418 static void l2cap_stop_rtx(l2cap_channel_t * channel){ 1419 log_info("l2cap_stop_rtx for local cid 0x%02x", channel->local_cid); 1420 btstack_run_loop_remove_timer(&channel->rtx); 1421 } 1422 #endif 1423 1424 static uint8_t l2cap_send_signaling_packet(hci_con_handle_t handle, uint8_t pb_flags, uint16_t cid, L2CAP_SIGNALING_COMMANDS cmd, int identifier, va_list argptr){ 1425 if (!hci_can_send_acl_packet_now(handle)){ 1426 log_info("l2cap_send_classic_signaling_packet, cannot send"); 1427 return BTSTACK_ACL_BUFFERS_FULL; 1428 } 1429 hci_reserve_packet_buffer(); 1430 uint8_t *acl_buffer = hci_get_outgoing_packet_buffer(); 1431 uint16_t len = l2cap_create_signaling_packet(acl_buffer, handle, pb_flags, cid, cmd, identifier, argptr); 1432 va_end(argptr); 1433 return hci_send_acl_packet_buffer(len); 1434 } 1435 1436 #ifdef L2CAP_USES_CREDIT_BASED_CHANNELS 1437 static int l2cap_send_general_signaling_packet(hci_con_handle_t handle, uint16_t signaling_cid, L2CAP_SIGNALING_COMMANDS cmd, int identifier, ...){ 1438 va_list argptr; 1439 va_start(argptr, identifier); 1440 uint8_t pb_flags = 0x00; 1441 #ifdef ENABLE_CLASSIC 1442 if (signaling_cid == L2CAP_CID_SIGNALING){ 1443 pb_flags = l2cap_classic_packet_boundary_flag(); 1444 } 1445 #endif 1446 uint8_t result = l2cap_send_signaling_packet(handle, pb_flags, signaling_cid, cmd, identifier, argptr); 1447 va_end(argptr); 1448 return result; 1449 } 1450 #endif 1451 1452 #ifdef ENABLE_CLASSIC 1453 1454 static void l2cap_start_rtx(l2cap_channel_t * channel){ 1455 l2cap_stop_rtx(channel); 1456 log_info("l2cap_start_rtx for local cid 0x%02x", channel->local_cid); 1457 btstack_run_loop_set_timer_handler(&channel->rtx, l2cap_rtx_timeout); 1458 btstack_run_loop_set_timer(&channel->rtx, L2CAP_RTX_TIMEOUT_MS); 1459 btstack_run_loop_add_timer(&channel->rtx); 1460 } 1461 1462 static void l2cap_start_ertx(l2cap_channel_t * channel){ 1463 log_info("l2cap_start_ertx for local cid 0x%02x", channel->local_cid); 1464 l2cap_stop_rtx(channel); 1465 btstack_run_loop_set_timer_handler(&channel->rtx, l2cap_rtx_timeout); 1466 btstack_run_loop_set_timer(&channel->rtx, L2CAP_ERTX_TIMEOUT_MS); 1467 btstack_run_loop_add_timer(&channel->rtx); 1468 } 1469 1470 void l2cap_require_security_level_2_for_outgoing_sdp(void){ 1471 l2cap_require_security_level2_for_outgoing_sdp = 1; 1472 } 1473 1474 static int l2cap_security_level_0_allowed_for_PSM(uint16_t psm){ 1475 return (psm == BLUETOOTH_PSM_SDP) && (!l2cap_require_security_level2_for_outgoing_sdp); 1476 } 1477 1478 static int l2cap_send_classic_signaling_packet(hci_con_handle_t handle, L2CAP_SIGNALING_COMMANDS cmd, int identifier, ...){ 1479 va_list argptr; 1480 va_start(argptr, identifier); 1481 uint8_t pb_flag = l2cap_classic_packet_boundary_flag(); 1482 uint8_t result = l2cap_send_signaling_packet(handle, pb_flag, L2CAP_CID_SIGNALING, cmd, identifier, argptr); 1483 va_end(argptr); 1484 return result; 1485 } 1486 1487 // assumption - only on Classic connections 1488 // cannot be used for L2CAP ERTM 1489 uint8_t l2cap_send_prepared(uint16_t local_cid, uint16_t len){ 1490 1491 if (!hci_is_packet_buffer_reserved()){ 1492 log_error("l2cap_send_prepared called without reserving packet first"); 1493 return BTSTACK_ACL_BUFFERS_FULL; 1494 } 1495 1496 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 1497 if (!channel) { 1498 log_error("l2cap_send_prepared no channel for cid 0x%02x", local_cid); 1499 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 1500 } 1501 1502 if (!hci_can_send_prepared_acl_packet_now(channel->con_handle)){ 1503 log_info("l2cap_send_prepared cid 0x%02x, cannot send", local_cid); 1504 return BTSTACK_ACL_BUFFERS_FULL; 1505 } 1506 1507 log_debug("l2cap_send_prepared cid 0x%02x, handle %u, 1 credit used", local_cid, channel->con_handle); 1508 1509 int fcs_size = 0; 1510 1511 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1512 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION && channel->fcs_option){ 1513 fcs_size = 2; 1514 } 1515 #endif 1516 1517 // set non-flushable packet boundary flag if supported on Controller 1518 uint8_t *acl_buffer = hci_get_outgoing_packet_buffer(); 1519 uint8_t packet_boundary_flag = l2cap_classic_packet_boundary_flag(); 1520 l2cap_setup_header(acl_buffer, channel->con_handle, packet_boundary_flag, channel->remote_cid, len + fcs_size); 1521 1522 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1523 if (fcs_size){ 1524 // calculate FCS over l2cap data 1525 uint16_t fcs = crc16_calc(acl_buffer + 4, 4 + len); 1526 log_info("I-Frame: fcs 0x%04x", fcs); 1527 little_endian_store_16(acl_buffer, 8 + len, fcs); 1528 } 1529 #endif 1530 1531 // send 1532 return hci_send_acl_packet_buffer(len+8+fcs_size); 1533 } 1534 1535 // assumption - only on Classic connections 1536 static uint8_t l2cap_classic_send(l2cap_channel_t * channel, const uint8_t *data, uint16_t len){ 1537 1538 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1539 // send in ERTM 1540 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 1541 return l2cap_ertm_send(channel, data, len); 1542 } 1543 #endif 1544 1545 if (len > channel->remote_mtu){ 1546 log_error("l2cap_send cid 0x%02x, data length exceeds remote MTU.", channel->local_cid); 1547 return L2CAP_DATA_LEN_EXCEEDS_REMOTE_MTU; 1548 } 1549 1550 if (!hci_can_send_acl_packet_now(channel->con_handle)){ 1551 log_info("l2cap_send cid 0x%02x, cannot send", channel->local_cid); 1552 return BTSTACK_ACL_BUFFERS_FULL; 1553 } 1554 1555 hci_reserve_packet_buffer(); 1556 uint8_t *acl_buffer = hci_get_outgoing_packet_buffer(); 1557 (void)memcpy(&acl_buffer[8], data, len); 1558 return l2cap_send_prepared(channel->local_cid, len); 1559 } 1560 1561 int l2cap_send_echo_request(hci_con_handle_t con_handle, uint8_t *data, uint16_t len){ 1562 return l2cap_send_classic_signaling_packet(con_handle, ECHO_REQUEST, l2cap_next_sig_id(), len, data); 1563 } 1564 1565 static inline void channelStateVarSetFlag(l2cap_channel_t *channel, uint16_t flag){ 1566 channel->state_var = channel->state_var | flag; 1567 } 1568 1569 static inline void channelStateVarClearFlag(l2cap_channel_t *channel, uint16_t flag){ 1570 channel->state_var = channel->state_var & ~flag; 1571 } 1572 #endif 1573 1574 1575 #ifdef ENABLE_BLE 1576 static int l2cap_send_le_signaling_packet(hci_con_handle_t handle, L2CAP_SIGNALING_COMMANDS cmd, int identifier, ...){ 1577 va_list argptr; 1578 va_start(argptr, identifier); 1579 uint8_t pb_flags = 0x00; // First non-automatically-flushable packet of a higher layer message 1580 uint8_t result = l2cap_send_signaling_packet(handle, pb_flags, L2CAP_CID_SIGNALING_LE, cmd, identifier, argptr); 1581 va_end(argptr); 1582 return result; 1583 } 1584 #endif 1585 1586 uint16_t l2cap_max_mtu(void){ 1587 return HCI_ACL_PAYLOAD_SIZE - L2CAP_HEADER_SIZE; 1588 } 1589 1590 #ifdef ENABLE_BLE 1591 uint16_t l2cap_max_le_mtu(void){ 1592 if (l2cap_le_custom_max_mtu != 0u) return l2cap_le_custom_max_mtu; 1593 return l2cap_max_mtu(); 1594 } 1595 1596 void l2cap_set_max_le_mtu(uint16_t max_mtu){ 1597 if (max_mtu < l2cap_max_mtu()){ 1598 l2cap_le_custom_max_mtu = max_mtu; 1599 } 1600 } 1601 #endif 1602 1603 #ifdef ENABLE_CLASSIC 1604 1605 static uint16_t l2cap_setup_options_mtu(uint8_t * config_options, uint16_t mtu){ 1606 config_options[0] = L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT; // MTU 1607 config_options[1] = 2; // len param 1608 little_endian_store_16(config_options, 2, mtu); 1609 return 4; 1610 } 1611 1612 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1613 static int l2cap_ertm_mode(l2cap_channel_t * channel){ 1614 hci_connection_t * connection = hci_connection_for_handle(channel->con_handle); 1615 return ((connection->l2cap_state.information_state == L2CAP_INFORMATION_STATE_DONE) 1616 && (connection->l2cap_state.extended_feature_mask & 0x08)); 1617 } 1618 #endif 1619 1620 static uint16_t l2cap_setup_options_request(l2cap_channel_t * channel, uint8_t * config_options){ 1621 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1622 // use ERTM options if supported by remote and channel ready to use it 1623 if (l2cap_ertm_mode(channel) && channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 1624 return l2cap_setup_options_ertm_request(channel, config_options); 1625 } 1626 #endif 1627 uint16_t mtu = channel->local_mtu; 1628 return l2cap_setup_options_mtu(config_options, mtu); 1629 } 1630 1631 static uint16_t l2cap_setup_options_mtu_response(l2cap_channel_t * channel, uint8_t * config_options){ 1632 uint16_t mtu = btstack_min(channel->local_mtu, channel->remote_mtu); 1633 return l2cap_setup_options_mtu(config_options, mtu); 1634 } 1635 1636 static uint32_t l2cap_extended_features_mask(void){ 1637 // extended features request supported, features: fixed channels, unicast connectionless data reception 1638 uint32_t features = 0x280; 1639 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1640 features |= 0x0028; 1641 #endif 1642 return features; 1643 } 1644 #endif 1645 1646 // 1647 #ifdef ENABLE_CLASSIC 1648 1649 // returns true if channel was finalized 1650 static bool l2cap_run_for_classic_channel(l2cap_channel_t * channel){ 1651 1652 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1653 uint8_t config_options[18]; 1654 #else 1655 uint8_t config_options[10]; 1656 #endif 1657 1658 switch (channel->state){ 1659 1660 case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE: 1661 case L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT: 1662 if (!hci_can_send_acl_packet_now(channel->con_handle)) return false; 1663 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND) { 1664 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND); 1665 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONN_RESP_PEND); 1666 l2cap_send_classic_signaling_packet(channel->con_handle, CONNECTION_RESPONSE, channel->remote_sig_id, 1667 channel->local_cid, channel->remote_cid, 1, 0); 1668 } 1669 break; 1670 1671 case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION: 1672 if (!hci_can_send_command_packet_now()) break; 1673 // send connection request - set state first 1674 channel->state = L2CAP_STATE_WAIT_CONNECTION_COMPLETE; 1675 // BD_ADDR, Packet_Type, Page_Scan_Repetition_Mode, Reserved, Clock_Offset, Allow_Role_Switch 1676 (void)memcpy(l2cap_outgoing_classic_addr, channel->address, 6); 1677 hci_send_cmd(&hci_create_connection, channel->address, hci_usable_acl_packet_types(), 0, 0, 0, hci_get_allow_role_switch()); 1678 break; 1679 1680 case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE: 1681 if (!hci_can_send_acl_packet_now(channel->con_handle)) return false; 1682 channel->state = L2CAP_STATE_INVALID; 1683 l2cap_send_classic_signaling_packet(channel->con_handle, CONNECTION_RESPONSE, channel->remote_sig_id, 1684 channel->local_cid, channel->remote_cid, channel->reason, 0); 1685 // discard channel - l2cap_finialize_channel_close without sending l2cap close event 1686 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 1687 l2cap_free_channel_entry(channel); 1688 channel = NULL; 1689 break; 1690 1691 case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT: 1692 if (!hci_can_send_acl_packet_now(channel->con_handle)) return false; 1693 channel->state = L2CAP_STATE_CONFIG; 1694 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ); 1695 l2cap_send_classic_signaling_packet(channel->con_handle, CONNECTION_RESPONSE, channel->remote_sig_id, 1696 channel->local_cid, channel->remote_cid, 0, 0); 1697 break; 1698 1699 case L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST: 1700 if (!hci_can_send_acl_packet_now(channel->con_handle)) return false; 1701 // success, start l2cap handshake 1702 channel->local_sig_id = l2cap_next_sig_id(); 1703 channel->state = L2CAP_STATE_WAIT_CONNECT_RSP; 1704 l2cap_send_classic_signaling_packet(channel->con_handle, CONNECTION_REQUEST, channel->local_sig_id, 1705 channel->psm, channel->local_cid); 1706 l2cap_start_rtx(channel); 1707 break; 1708 1709 case L2CAP_STATE_CONFIG: 1710 if (!hci_can_send_acl_packet_now(channel->con_handle)) return false; 1711 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1712 // fallback to basic mode if ERTM requested but not not supported by remote 1713 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 1714 if (!l2cap_ertm_mode(channel)){ 1715 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED); 1716 channel->mode = L2CAP_CHANNEL_MODE_BASIC; 1717 } 1718 } 1719 #endif 1720 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP){ 1721 uint16_t flags = 0; 1722 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP); 1723 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT) { 1724 flags = 1; 1725 } else { 1726 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP); 1727 } 1728 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_INVALID){ 1729 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP); 1730 l2cap_send_classic_signaling_packet(channel->con_handle, CONFIGURE_RESPONSE, channel->remote_sig_id, 1731 channel->remote_cid, flags, L2CAP_CONF_RESULT_UNKNOWN_OPTIONS, 1732 1, &channel->unknown_option); 1733 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1734 } else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_REJECTED){ 1735 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_REJECTED); 1736 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP); 1737 uint16_t options_size = l2cap_setup_options_ertm_response(channel, config_options); 1738 l2cap_send_classic_signaling_packet(channel->con_handle, CONFIGURE_RESPONSE, channel->remote_sig_id, 1739 channel->remote_cid, flags, 1740 L2CAP_CONF_RESULT_UNACCEPTABLE_PARAMETERS, options_size, 1741 &config_options); 1742 } else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM){ 1743 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM); 1744 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU); 1745 uint16_t options_size = l2cap_setup_options_ertm_response(channel, config_options); 1746 l2cap_send_classic_signaling_packet(channel->con_handle, CONFIGURE_RESPONSE, channel->remote_sig_id, 1747 channel->remote_cid, flags, L2CAP_CONF_RESULT_SUCCESS, 1748 options_size, &config_options); 1749 #endif 1750 } else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU){ 1751 channelStateVarClearFlag(channel,L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU); 1752 uint16_t options_size = l2cap_setup_options_mtu_response(channel, config_options); 1753 l2cap_send_classic_signaling_packet(channel->con_handle, CONFIGURE_RESPONSE, channel->remote_sig_id, 1754 channel->remote_cid, flags, L2CAP_CONF_RESULT_SUCCESS, 1755 options_size, &config_options); 1756 } else { 1757 l2cap_send_classic_signaling_packet(channel->con_handle, CONFIGURE_RESPONSE, channel->remote_sig_id, 1758 channel->remote_cid, flags, L2CAP_CONF_RESULT_SUCCESS, 0, NULL); 1759 } 1760 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT); 1761 } 1762 else if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ){ 1763 channelStateVarClearFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ); 1764 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SENT_CONF_REQ); 1765 channel->local_sig_id = l2cap_next_sig_id(); 1766 uint16_t options_size = l2cap_setup_options_request(channel, config_options); 1767 l2cap_send_classic_signaling_packet(channel->con_handle, CONFIGURE_REQUEST, channel->local_sig_id, 1768 channel->remote_cid, 0, options_size, &config_options); 1769 l2cap_start_rtx(channel); 1770 } 1771 if (l2cap_channel_ready_for_open(channel)){ 1772 channel->state = L2CAP_STATE_OPEN; 1773 l2cap_emit_channel_opened(channel, 0); // success 1774 } 1775 break; 1776 1777 case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE: 1778 if (!hci_can_send_acl_packet_now(channel->con_handle)) return false; 1779 channel->state = L2CAP_STATE_INVALID; 1780 l2cap_send_classic_signaling_packet(channel->con_handle, DISCONNECTION_RESPONSE, channel->remote_sig_id, 1781 channel->local_cid, channel->remote_cid); 1782 // 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 :) 1783 l2cap_finalize_channel_close(channel); // -- remove from list 1784 channel = NULL; 1785 break; 1786 1787 case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST: 1788 if (!hci_can_send_acl_packet_now(channel->con_handle)) return false; 1789 channel->local_sig_id = l2cap_next_sig_id(); 1790 channel->state = L2CAP_STATE_WAIT_DISCONNECT; 1791 l2cap_send_classic_signaling_packet(channel->con_handle, DISCONNECTION_REQUEST, channel->local_sig_id, 1792 channel->remote_cid, channel->local_cid); 1793 break; 1794 default: 1795 break; 1796 } 1797 1798 // handle channel finalize on L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE and L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE 1799 return channel == NULL; 1800 } 1801 1802 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 1803 static void l2cap_run_for_classic_channel_ertm(l2cap_channel_t * channel){ 1804 1805 // ERTM mode 1806 if (channel->mode != L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) return; 1807 1808 // check if we can still send 1809 if (channel->con_handle == HCI_CON_HANDLE_INVALID) return; 1810 if (!hci_can_send_acl_packet_now(channel->con_handle)) return; 1811 1812 if (channel->send_supervisor_frame_receiver_ready){ 1813 channel->send_supervisor_frame_receiver_ready = 0; 1814 log_info("Send S-Frame: RR %u, final %u", channel->req_seq, channel->set_final_bit_after_packet_with_poll_bit_set); 1815 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); 1816 channel->set_final_bit_after_packet_with_poll_bit_set = 0; 1817 l2cap_ertm_send_supervisor_frame(channel, control); 1818 return; 1819 } 1820 if (channel->send_supervisor_frame_receiver_ready_poll){ 1821 channel->send_supervisor_frame_receiver_ready_poll = 0; 1822 log_info("Send S-Frame: RR %u with poll=1 ", channel->req_seq); 1823 uint16_t control = l2cap_encanced_control_field_for_supevisor_frame( L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY, 1, 0, channel->req_seq); 1824 l2cap_ertm_send_supervisor_frame(channel, control); 1825 return; 1826 } 1827 if (channel->send_supervisor_frame_receiver_not_ready){ 1828 channel->send_supervisor_frame_receiver_not_ready = 0; 1829 log_info("Send S-Frame: RNR %u", channel->req_seq); 1830 uint16_t control = l2cap_encanced_control_field_for_supevisor_frame( L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY, 0, 0, channel->req_seq); 1831 l2cap_ertm_send_supervisor_frame(channel, control); 1832 return; 1833 } 1834 if (channel->send_supervisor_frame_reject){ 1835 channel->send_supervisor_frame_reject = 0; 1836 log_info("Send S-Frame: REJ %u", channel->req_seq); 1837 uint16_t control = l2cap_encanced_control_field_for_supevisor_frame( L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT, 0, 0, channel->req_seq); 1838 l2cap_ertm_send_supervisor_frame(channel, control); 1839 return; 1840 } 1841 if (channel->send_supervisor_frame_selective_reject){ 1842 channel->send_supervisor_frame_selective_reject = 0; 1843 log_info("Send S-Frame: SREJ %u", channel->expected_tx_seq); 1844 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); 1845 channel->set_final_bit_after_packet_with_poll_bit_set = 0; 1846 l2cap_ertm_send_supervisor_frame(channel, control); 1847 return; 1848 } 1849 1850 if (channel->srej_active){ 1851 int i; 1852 for (i=0;i<channel->num_tx_buffers;i++){ 1853 l2cap_ertm_tx_packet_state_t * tx_state = &channel->tx_packets_state[i]; 1854 if (tx_state->retransmission_requested) { 1855 tx_state->retransmission_requested = 0; 1856 uint8_t final = channel->set_final_bit_after_packet_with_poll_bit_set; 1857 channel->set_final_bit_after_packet_with_poll_bit_set = 0; 1858 l2cap_ertm_send_information_frame(channel, i, final); 1859 break; 1860 } 1861 } 1862 if (i == channel->num_tx_buffers){ 1863 // no retransmission request found 1864 channel->srej_active = 0; 1865 } else { 1866 // packet was sent 1867 return; 1868 } 1869 } 1870 } 1871 #endif /* ERTM */ 1872 #endif /* Classic */ 1873 1874 static void l2cap_run_signaling_response(void) { 1875 1876 // check pending signaling responses 1877 while (l2cap_signaling_responses_pending){ 1878 1879 hci_con_handle_t handle = l2cap_signaling_responses[0].handle; 1880 1881 if (!hci_can_send_acl_packet_now(handle)) break; 1882 1883 uint8_t sig_id = l2cap_signaling_responses[0].sig_id; 1884 uint8_t response_code = l2cap_signaling_responses[0].code; 1885 uint16_t result = l2cap_signaling_responses[0].data; // CONNECTION_REQUEST, COMMAND_REJECT, REJECT_SM_PAIRING, L2CAP_CREDIT_BASED_CONNECTION_REQUEST 1886 uint8_t buffer[4]; // REJECT_SM_PAIRING 1887 uint16_t source_cid = l2cap_signaling_responses[0].cid; // CONNECTION_REQUEST, REJECT_SM_PAIRING, DISCONNECT_REQUEST 1888 #ifdef ENABLE_CLASSIC 1889 uint16_t info_type = l2cap_signaling_responses[0].data; // INFORMATION_REQUEST 1890 #endif 1891 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 1892 uint8_t num_channels = l2cap_signaling_responses[0].cid >> 8; // L2CAP_CREDIT_BASED_CONNECTION_REQUEST 1893 uint16_t signaling_cid = (uint16_t) l2cap_signaling_responses[0].cid & 0xff; // L2CAP_CREDIT_BASED_CONNECTION_REQUEST, L2CAP_CREDIT_BASED_CONNECTION_REQUEST 1894 #endif 1895 1896 // remove first item before sending (to avoid sending response mutliple times) 1897 l2cap_signaling_responses_pending--; 1898 int i; 1899 for (i=0; i < l2cap_signaling_responses_pending; i++){ 1900 (void)memcpy(&l2cap_signaling_responses[i], 1901 &l2cap_signaling_responses[i + 1], 1902 sizeof(l2cap_signaling_response_t)); 1903 } 1904 1905 switch (response_code){ 1906 #ifdef ENABLE_CLASSIC 1907 case CONNECTION_REQUEST: 1908 l2cap_send_classic_signaling_packet(handle, CONNECTION_RESPONSE, sig_id, source_cid, 0, result, 0); 1909 break; 1910 case ECHO_REQUEST: 1911 l2cap_send_classic_signaling_packet(handle, ECHO_RESPONSE, sig_id, 0, NULL); 1912 break; 1913 case INFORMATION_REQUEST: 1914 switch (info_type){ 1915 case L2CAP_INFO_TYPE_CONNECTIONLESS_MTU: { 1916 uint16_t connectionless_mtu = hci_max_acl_data_packet_length(); 1917 l2cap_send_classic_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, info_type, 0, 1918 sizeof(connectionless_mtu), &connectionless_mtu); 1919 } 1920 break; 1921 case L2CAP_INFO_TYPE_EXTENDED_FEATURES_SUPPORTED: { 1922 uint32_t features = l2cap_extended_features_mask(); 1923 l2cap_send_classic_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, info_type, 0, 1924 sizeof(features), &features); 1925 } 1926 break; 1927 case L2CAP_INFO_TYPE_FIXED_CHANNELS_SUPPORTED: { 1928 uint8_t map[8]; 1929 memset(map, 0, 8); 1930 // L2CAP Signaling Channel + Connectionless reception 1931 map[0] = (1 << L2CAP_CID_SIGNALING) | (1 << L2CAP_CID_CONNECTIONLESS_CHANNEL); 1932 #if defined (ENABLE_EXPLICIT_BR_EDR_SECURITY_MANAGER) || (defined(ENABLE_BLE) && defined(ENABLE_CROSS_TRANSPORT_KEY_DERIVATION)) 1933 // BR/EDR Security Manager (bit 7) if BR/EDR Secure Connections possible 1934 if (gap_secure_connections_active()){ 1935 map[0] |= (1 << L2CAP_CID_BR_EDR_SECURITY_MANAGER); 1936 } 1937 #endif 1938 l2cap_send_classic_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, info_type, 0, 1939 sizeof(map), &map); 1940 } 1941 break; 1942 default: 1943 // all other types are not supported 1944 l2cap_send_classic_signaling_packet(handle, INFORMATION_RESPONSE, sig_id, info_type, 1, 0, NULL); 1945 break; 1946 } 1947 break; 1948 case COMMAND_REJECT: 1949 l2cap_send_classic_signaling_packet(handle, COMMAND_REJECT, sig_id, result, 0, NULL); 1950 break; 1951 #endif 1952 #ifdef ENABLE_BLE 1953 case LE_CREDIT_BASED_CONNECTION_REQUEST: 1954 l2cap_send_le_signaling_packet(handle, LE_CREDIT_BASED_CONNECTION_RESPONSE, sig_id, 0, 0, 0, 0, result); 1955 break; 1956 case DISCONNECTION_REQUEST: 1957 // Invalid CID, local cid, remote cid 1958 little_endian_store_16(buffer, 0, result); 1959 little_endian_store_16(buffer, 2, source_cid); 1960 l2cap_send_le_signaling_packet(handle, COMMAND_REJECT, sig_id, 0x0002, 4, buffer); 1961 break; 1962 case COMMAND_REJECT_LE: 1963 l2cap_send_le_signaling_packet(handle, COMMAND_REJECT, sig_id, result, 0, NULL); 1964 break; 1965 #endif 1966 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 1967 case L2CAP_CREDIT_BASED_CONNECTION_REQUEST: { 1968 // send variable size array or cids with each cid being zero 1969 uint16_t cids[6]; 1970 (void) memset(cids, 0xff, sizeof(cids)); 1971 (void) memset(cids, 0x00, num_channels * sizeof(uint16_t)); 1972 l2cap_send_general_signaling_packet(handle, signaling_cid, L2CAP_CREDIT_BASED_CONNECTION_RESPONSE, 1973 sig_id, 0, 0, 0, result, cids); 1974 break; 1975 } 1976 1977 case L2CAP_CREDIT_BASED_RECONFIGURE_REQUEST: 1978 l2cap_send_general_signaling_packet(handle, signaling_cid, L2CAP_CREDIT_BASED_RECONFIGURE_RESPONSE, 1979 sig_id, result); 1980 break; 1981 #endif 1982 case SM_PAIRING_FAILED: 1983 buffer[0] = SM_CODE_PAIRING_FAILED; 1984 buffer[1] = (uint8_t) result; 1985 l2cap_send_connectionless(handle, source_cid, buffer, 2); 1986 break; 1987 default: 1988 // should not happen 1989 break; 1990 } 1991 } 1992 } 1993 1994 #ifdef ENABLE_CLASSIC 1995 static bool l2ap_run_information_requests(void){ 1996 // send l2cap information request if requested 1997 btstack_linked_list_iterator_t it; 1998 hci_connections_get_iterator(&it); 1999 uint8_t info_type; 2000 l2cap_information_state_t new_state; 2001 while(btstack_linked_list_iterator_has_next(&it)){ 2002 hci_connection_t * connection = (hci_connection_t *) btstack_linked_list_iterator_next(&it); 2003 switch (connection->l2cap_state.information_state){ 2004 case L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST: 2005 info_type = L2CAP_INFO_TYPE_EXTENDED_FEATURES_SUPPORTED; 2006 new_state = L2CAP_INFORMATION_STATE_W4_EXTENDED_FEATURE_RESPONSE; 2007 break; 2008 case L2CAP_INFORMATION_STATE_W2_SEND_FIXED_CHANNELS_REQUEST: 2009 info_type = L2CAP_INFO_TYPE_FIXED_CHANNELS_SUPPORTED; 2010 new_state = L2CAP_INFORMATION_STATE_W4_FIXED_CHANNELS_RESPONSE; 2011 break; 2012 default: 2013 continue; 2014 } 2015 if (!hci_can_send_acl_packet_now(connection->con_handle)) break; 2016 2017 connection->l2cap_state.information_state = new_state; 2018 uint8_t sig_id = l2cap_next_sig_id(); 2019 l2cap_send_classic_signaling_packet(connection->con_handle, INFORMATION_REQUEST, sig_id, info_type); 2020 } 2021 return false; 2022 } 2023 #endif 2024 2025 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 2026 // returns true if channel has been closed 2027 static bool l2cap_cbm_run_channel(l2cap_channel_t * channel) { 2028 uint16_t mps; 2029 bool channel_closed = false; 2030 // log_info("l2cap_run: channel %p, state %u, var 0x%02x", channel, channel->state, channel->state_var); 2031 switch (channel->state){ 2032 case L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST: 2033 channel->state = L2CAP_STATE_WAIT_LE_CONNECTION_RESPONSE; 2034 // le psm, source cid, mtu, mps, initial credits 2035 channel->local_sig_id = l2cap_next_sig_id(); 2036 channel->credits_incoming = channel->new_credits_incoming; 2037 channel->new_credits_incoming = 0; 2038 channel->local_mps = btstack_min(l2cap_max_le_mtu(), channel->local_mtu); 2039 l2cap_send_le_signaling_packet( channel->con_handle, LE_CREDIT_BASED_CONNECTION_REQUEST, 2040 channel->local_sig_id, channel->psm, channel->local_cid, channel->local_mtu, 2041 channel->local_mps, channel->credits_incoming); 2042 break; 2043 case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_ACCEPT: 2044 // TODO: support larger MPS 2045 channel->state = L2CAP_STATE_OPEN; 2046 channel->credits_incoming = channel->new_credits_incoming; 2047 channel->new_credits_incoming = 0; 2048 mps = btstack_min(l2cap_max_le_mtu(), channel->local_mtu); 2049 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); 2050 // notify client 2051 l2cap_cbm_emit_channel_opened(channel, ERROR_CODE_SUCCESS); 2052 break; 2053 case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_DECLINE: 2054 channel->state = L2CAP_STATE_INVALID; 2055 l2cap_send_le_signaling_packet(channel->con_handle, LE_CREDIT_BASED_CONNECTION_RESPONSE, channel->remote_sig_id, 0, 0, 0, 0, channel->reason); 2056 channel_closed = true; 2057 break; 2058 case L2CAP_STATE_OPEN: 2059 if (channel->new_credits_incoming){ 2060 l2cap_credit_based_send_credits(channel); 2061 } 2062 break; 2063 case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST: 2064 channel->local_sig_id = l2cap_next_sig_id(); 2065 channel->state = L2CAP_STATE_WAIT_DISCONNECT; 2066 l2cap_send_le_signaling_packet( channel->con_handle, DISCONNECTION_REQUEST, channel->local_sig_id, channel->remote_cid, channel->local_cid); 2067 break; 2068 case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE: 2069 channel->state = L2CAP_STATE_INVALID; 2070 l2cap_send_le_signaling_packet( channel->con_handle, DISCONNECTION_RESPONSE, channel->remote_sig_id, channel->local_cid, channel->remote_cid); 2071 l2cap_cbm_finialize_channel_close(channel); // -- remove from list 2072 break; 2073 default: 2074 break; 2075 } 2076 return channel_closed; 2077 } 2078 2079 static void l2cap_cbm_run_channels(void){ 2080 btstack_linked_list_iterator_t it; 2081 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2082 while (btstack_linked_list_iterator_has_next(&it)){ 2083 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2084 2085 if (channel->channel_type != L2CAP_CHANNEL_TYPE_CHANNEL_CBM) continue; 2086 if (!hci_can_send_acl_packet_now(channel->con_handle)) continue; 2087 2088 bool channel_closed = l2cap_cbm_run_channel(channel); 2089 if (channel_closed) { 2090 // discard channel - l2cap_finialize_channel_close without sending l2cap close event 2091 btstack_linked_list_iterator_remove(&it); 2092 l2cap_free_channel_entry(channel); 2093 } 2094 } 2095 } 2096 2097 static inline uint8_t l2cap_cbm_status_for_result(uint16_t result) { 2098 switch (result) { 2099 case L2CAP_CBM_CONNECTION_RESULT_SUCCESS: 2100 return ERROR_CODE_SUCCESS; 2101 case L2CAP_CBM_CONNECTION_RESULT_SPSM_NOT_SUPPORTED: 2102 return L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_PSM; 2103 case L2CAP_CBM_CONNECTION_RESULT_NO_RESOURCES_AVAILABLE: 2104 return L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_RESOURCES; 2105 case L2CAP_CBM_CONNECTION_RESULT_INSUFFICIENT_AUTHENTICATION: 2106 case L2CAP_CBM_CONNECTION_RESULT_INSUFFICIENT_AUTHORIZATION: 2107 case L2CAP_CBM_CONNECTION_RESULT_ENCYRPTION_KEY_SIZE_TOO_SHORT: 2108 case L2CAP_CBM_CONNECTION_RESULT_INSUFFICIENT_ENCRYPTION: 2109 return L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY; 2110 default: 2111 // invalid Source CID, Source CID already allocated, unacceptable parameters 2112 return L2CAP_CONNECTION_RESPONSE_UNKNOWN_ERROR; 2113 } 2114 } 2115 2116 #endif 2117 2118 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 2119 2120 static void l2cap_run_trigger_callback(void * context){ 2121 UNUSED(context); 2122 l2cap_run(); 2123 } 2124 2125 static void l2cap_run_trigger(void){ 2126 btstack_run_loop_execute_on_main_thread(&l2cap_trigger_run_registration); 2127 } 2128 2129 // 11BH22222 2130 static void l2cap_ecbm_emit_channel_opened(l2cap_channel_t *channel, uint8_t status) { 2131 log_info("opened ecbm channel 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", 2132 status, channel->address_type, bd_addr_to_str(channel->address), channel->con_handle, channel->psm, 2133 channel->local_cid, channel->remote_cid, channel->local_mtu, channel->remote_mtu); 2134 uint8_t event[23]; 2135 event[0] = L2CAP_EVENT_ECBM_CHANNEL_OPENED; 2136 event[1] = sizeof(event) - 2u; 2137 event[2] = status; 2138 event[3] = channel->address_type; 2139 reverse_bd_addr(channel->address, &event[4]); 2140 little_endian_store_16(event, 10, channel->con_handle); 2141 event[12] = (channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) ? 1 : 0; 2142 little_endian_store_16(event, 13, channel->psm); 2143 little_endian_store_16(event, 15, channel->local_cid); 2144 little_endian_store_16(event, 17, channel->remote_cid); 2145 little_endian_store_16(event, 19, channel->local_mtu); 2146 little_endian_store_16(event, 21, channel->remote_mtu); 2147 hci_dump_packet(HCI_EVENT_PACKET, 1, event, sizeof(event)); 2148 l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event)); 2149 } 2150 2151 static void l2cap_ecbm_emit_reconfigure_complete(l2cap_channel_t *channel, uint16_t result) { 2152 // emit event 2153 uint8_t event[6]; 2154 event[0] = L2CAP_EVENT_ECBM_RECONFIGURATION_COMPLETE; 2155 event[1] = sizeof(event) - 2; 2156 little_endian_store_16(event, 2, channel->local_cid); 2157 little_endian_store_16(event, 4, result); 2158 l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event)); 2159 } 2160 2161 static void l2cap_ecbm_run_channels(void) { 2162 hci_con_handle_t con_handle = HCI_CON_HANDLE_INVALID; 2163 // num max channels + 1 for signaling pdu generator 2164 uint16_t cids[L2CAP_ECBM_MAX_CID_ARRAY_SIZE + 1]; 2165 uint8_t num_cids = 0; 2166 uint8_t sig_id; 2167 uint16_t spsm; 2168 L2CAP_STATE matching_state; 2169 bool match_remote_sig_cid; 2170 uint8_t result = 0; 2171 uint16_t local_mtu; 2172 uint16_t initial_credits; 2173 uint16_t signaling_cid; 2174 L2CAP_STATE new_state; 2175 uint16_t local_mps; 2176 2177 // pick first channel that needs to send a combined signaling pdu and setup collection via break 2178 // then collect all others that belong to the same pdu 2179 btstack_linked_list_iterator_t it; 2180 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2181 while (btstack_linked_list_iterator_has_next(&it)) { 2182 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2183 if (channel->channel_type != L2CAP_CHANNEL_TYPE_CHANNEL_ECBM) continue; 2184 if (con_handle == HCI_CON_HANDLE_INVALID) { 2185 switch (channel->state) { 2186 case L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_REQUEST: 2187 if (!hci_can_send_acl_packet_now(channel->con_handle)) continue; 2188 local_mtu = channel->local_mtu; 2189 local_mps = channel->local_mps; 2190 spsm = channel->psm; 2191 result = channel->reason; 2192 initial_credits = channel->credits_incoming; 2193 sig_id = channel->local_sig_id; 2194 new_state = L2CAP_STATE_WAIT_ENHANCED_CONNECTION_RESPONSE; 2195 match_remote_sig_cid = false; 2196 break; 2197 case L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_RESPONSE: 2198 if (!hci_can_send_acl_packet_now(channel->con_handle)) continue; 2199 local_mtu = channel->local_mtu; 2200 local_mps = channel->local_mps; 2201 initial_credits = channel->credits_incoming; 2202 sig_id = channel->remote_sig_id; 2203 new_state = L2CAP_STATE_OPEN; 2204 match_remote_sig_cid = true; 2205 break; 2206 case L2CAP_STATE_WILL_SEND_EHNANCED_RENEGOTIATION_REQUEST: 2207 if (!hci_can_send_acl_packet_now(channel->con_handle)) continue; 2208 sig_id = channel->local_sig_id; 2209 local_mtu = channel->renegotiate_mtu; 2210 local_mps = channel->local_mps; 2211 new_state = L2CAP_STATE_WAIT_ENHANCED_RENEGOTIATION_RESPONSE; 2212 match_remote_sig_cid = false; 2213 break; 2214 case L2CAP_STATE_OPEN: 2215 if (!hci_can_send_acl_packet_now(channel->con_handle)) continue; 2216 if (channel->new_credits_incoming) { 2217 l2cap_credit_based_send_credits(channel); 2218 } 2219 continue; 2220 case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST: 2221 if (!hci_can_send_acl_packet_now(channel->con_handle)) continue; 2222 channel->local_sig_id = l2cap_next_sig_id(); 2223 channel->state = L2CAP_STATE_WAIT_DISCONNECT; 2224 signaling_cid = channel->address_type == BD_ADDR_TYPE_ACL ? L2CAP_CID_SIGNALING : L2CAP_CID_SIGNALING_LE; 2225 l2cap_send_general_signaling_packet(channel->con_handle, signaling_cid, DISCONNECTION_REQUEST, 2226 channel->local_sig_id, channel->remote_cid, channel->local_cid); 2227 continue; 2228 case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE: 2229 if (!hci_can_send_acl_packet_now(channel->con_handle)) continue; 2230 channel->state = L2CAP_STATE_INVALID; 2231 signaling_cid = channel->address_type == BD_ADDR_TYPE_ACL ? L2CAP_CID_SIGNALING : L2CAP_CID_SIGNALING_LE; 2232 l2cap_send_general_signaling_packet(channel->con_handle, signaling_cid, DISCONNECTION_RESPONSE, 2233 channel->remote_sig_id, channel->local_cid, 2234 channel->remote_cid); 2235 l2cap_cbm_finialize_channel_close(channel); // -- remove from list 2236 continue; 2237 default: 2238 continue; 2239 } 2240 2241 // channel picked - setup cid array and collect info 2242 (void) memset(cids, 0xff, sizeof(cids)); 2243 (void) memset(cids, 0, channel->num_cids * sizeof(uint16_t)); 2244 matching_state = channel->state; 2245 con_handle = channel->con_handle; 2246 signaling_cid = channel->address_type == BD_ADDR_TYPE_ACL ? L2CAP_CID_SIGNALING : L2CAP_CID_SIGNALING_LE; 2247 num_cids = channel->num_cids; 2248 2249 } else { 2250 // check if it matches first channel by state, con_handle, and signaling id 2251 if (matching_state != channel->state) continue; 2252 if (channel->con_handle != con_handle) continue; 2253 if (match_remote_sig_cid) { 2254 if (channel->remote_sig_id != sig_id) continue; 2255 } else { 2256 if (channel->local_sig_id != sig_id) continue; 2257 } 2258 } 2259 2260 // add this cid 2261 cids[channel->cid_index] = channel->local_cid; 2262 2263 // set new state 2264 channel->state = new_state; 2265 2266 // handle open for L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_RESPONSE 2267 if (matching_state == L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_RESPONSE) { 2268 if (channel->reason == L2CAP_ECBM_CONNECTION_RESULT_ALL_SUCCESS) { 2269 l2cap_ecbm_emit_channel_opened(channel, ERROR_CODE_SUCCESS); 2270 } else { 2271 result = channel->reason; 2272 btstack_linked_list_iterator_remove(&it); 2273 btstack_memory_l2cap_channel_free(channel); 2274 } 2275 } 2276 } 2277 2278 if (con_handle != HCI_CON_HANDLE_INVALID) { 2279 switch (matching_state) { 2280 case L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_REQUEST: 2281 log_info("send combined connection request for %u cids", num_cids); 2282 l2cap_send_general_signaling_packet(con_handle, signaling_cid, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, 2283 sig_id, spsm, local_mtu, local_mps, initial_credits, cids); 2284 break; 2285 case L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_RESPONSE: 2286 log_info("send combined connection response for %u cids", num_cids); 2287 l2cap_send_general_signaling_packet(con_handle, signaling_cid, L2CAP_CREDIT_BASED_CONNECTION_RESPONSE, 2288 sig_id, local_mtu, local_mps, initial_credits, result, cids); 2289 break; 2290 case L2CAP_STATE_WILL_SEND_EHNANCED_RENEGOTIATION_REQUEST: 2291 log_info("send combined renegotiation request for %u cids", num_cids); 2292 l2cap_send_general_signaling_packet(con_handle, signaling_cid, L2CAP_CREDIT_BASED_RECONFIGURE_REQUEST, 2293 sig_id, local_mtu, local_mps, cids); 2294 break; 2295 default: 2296 break; 2297 } 2298 } 2299 } 2300 #endif 2301 2302 // MARK: L2CAP_RUN 2303 // process outstanding signaling tasks 2304 static void l2cap_run(void){ 2305 2306 // log_info("l2cap_run: entered"); 2307 l2cap_run_signaling_response(); 2308 2309 #ifdef ENABLE_CLASSIC 2310 bool done = l2ap_run_information_requests(); 2311 if (done) return; 2312 #endif 2313 2314 #if defined(ENABLE_CLASSIC) || defined(ENABLE_BLE) 2315 btstack_linked_list_iterator_t it; 2316 #endif 2317 2318 #ifdef ENABLE_CLASSIC 2319 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2320 while (btstack_linked_list_iterator_has_next(&it)){ 2321 2322 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2323 2324 if (channel->channel_type != L2CAP_CHANNEL_TYPE_CLASSIC) continue; 2325 2326 // log_info("l2cap_run: channel %p, state %u, var 0x%02x", channel, channel->state, channel->state_var); 2327 bool finalized = l2cap_run_for_classic_channel(channel); 2328 2329 if (!finalized) { 2330 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 2331 l2cap_run_for_classic_channel_ertm(channel); 2332 #endif 2333 } 2334 } 2335 #endif 2336 2337 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 2338 l2cap_cbm_run_channels(); 2339 #endif 2340 2341 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 2342 l2cap_ecbm_run_channels(); 2343 #endif 2344 2345 #ifdef ENABLE_BLE 2346 // send l2cap con paramter update if necessary 2347 hci_connections_get_iterator(&it); 2348 while(btstack_linked_list_iterator_has_next(&it)){ 2349 hci_connection_t * connection = (hci_connection_t *) btstack_linked_list_iterator_next(&it); 2350 if ((connection->address_type != BD_ADDR_TYPE_LE_PUBLIC) && (connection->address_type != BD_ADDR_TYPE_LE_RANDOM)) continue; 2351 if (!hci_can_send_acl_packet_now(connection->con_handle)) continue; 2352 switch (connection->le_con_parameter_update_state){ 2353 case CON_PARAMETER_UPDATE_SEND_REQUEST: 2354 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_NONE; 2355 l2cap_send_le_signaling_packet(connection->con_handle, CONNECTION_PARAMETER_UPDATE_REQUEST, l2cap_next_sig_id(), 2356 connection->le_conn_interval_min, connection->le_conn_interval_max, connection->le_conn_latency, connection->le_supervision_timeout); 2357 break; 2358 case CON_PARAMETER_UPDATE_SEND_RESPONSE: 2359 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_CHANGE_HCI_CON_PARAMETERS; 2360 l2cap_send_le_signaling_packet(connection->con_handle, CONNECTION_PARAMETER_UPDATE_RESPONSE, connection->le_con_param_update_identifier, 0); 2361 break; 2362 case CON_PARAMETER_UPDATE_DENY: 2363 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_NONE; 2364 l2cap_send_le_signaling_packet(connection->con_handle, CONNECTION_PARAMETER_UPDATE_RESPONSE, connection->le_con_param_update_identifier, 1); 2365 break; 2366 default: 2367 break; 2368 } 2369 } 2370 #endif 2371 2372 if (l2cap_call_notify_channel_in_run){ 2373 l2cap_call_notify_channel_in_run = false; 2374 l2cap_notify_channel_can_send(); 2375 } 2376 2377 // log_info("l2cap_run: exit"); 2378 } 2379 2380 #ifdef ENABLE_CLASSIC 2381 static void l2cap_ready_to_connect(l2cap_channel_t * channel){ 2382 2383 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 2384 // assumption: outgoing connection 2385 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 2386 // ERTM requested: trigger information request if not already started then wait for response 2387 hci_connection_t * connection = hci_connection_for_handle(channel->con_handle); 2388 switch (connection->l2cap_state.information_state){ 2389 case L2CAP_INFORMATION_STATE_DONE: 2390 break; 2391 case L2CAP_INFORMATION_STATE_IDLE: 2392 connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST; 2393 /* fall through */ 2394 default: 2395 channel->state = L2CAP_STATE_WAIT_OUTGOING_EXTENDED_FEATURES; 2396 return; 2397 } 2398 } 2399 #endif 2400 2401 // fine, go ahead 2402 channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST; 2403 } 2404 2405 static void l2cap_handle_connection_complete(hci_con_handle_t con_handle, l2cap_channel_t * channel){ 2406 if ((channel->state == L2CAP_STATE_WAIT_CONNECTION_COMPLETE) || (channel->state == L2CAP_STATE_WILL_SEND_CREATE_CONNECTION)) { 2407 log_info("connection complete con_handle %04x - for channel %p cid 0x%04x", (int) con_handle, channel, channel->local_cid); 2408 channel->con_handle = con_handle; 2409 // query remote features if pairing is required 2410 if (channel->required_security_level > LEVEL_0){ 2411 channel->state = L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES; 2412 hci_remote_features_query(con_handle); 2413 } else { 2414 l2cap_ready_to_connect(channel); 2415 } 2416 } 2417 } 2418 2419 static void l2cap_handle_remote_supported_features_received(l2cap_channel_t * channel){ 2420 if (channel->state != L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES) return; 2421 2422 bool security_required = channel->required_security_level > LEVEL_0; 2423 2424 if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) != 0){ 2425 2426 // Core V5.2, Vol 3, Part C, 5.2.2.2 - Security Mode 4 2427 // When a remote device attempts to access a service offered by a Bluetooth device that is in security mode 4 2428 // and a sufficient link key exists and authentication has not been performed the local device shall authenticate 2429 // the remote device and enable encryption after the channel establishment request is received but before a channel 2430 // establishment confirmation (L2CAP_ConnectRsp with result code of 0x0000 or a higher-level channel establishment 2431 // confirmation such as that of RFCOMM) is sent. 2432 2433 // If the remote device has indicated support for Secure Simple Pairing, a channel establishment request is 2434 // received for a service other than SDP, and encryption has not yet been enabled, then the local device shall 2435 // disconnect the ACL link with error code 0x05 - Authentication Failure. 2436 2437 // => Disconnect if l2cap request received in mode 4 and ssp supported, non-sdp psm, not encrypted, no link key available 2438 if ((gap_get_security_mode() == GAP_SECURITY_MODE_4) 2439 && gap_ssp_supported_on_both_sides(channel->con_handle) 2440 && (channel->psm != PSM_SDP) 2441 && (gap_encryption_key_size(channel->con_handle) == 0)){ 2442 hci_disconnect_security_block(channel->con_handle); 2443 return; 2444 } 2445 2446 // incoming: assert security requirements 2447 channel->state = L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE; 2448 if (channel->required_security_level <= gap_security_level(channel->con_handle)){ 2449 l2cap_handle_security_level_incoming_sufficient(channel); 2450 } else { 2451 // send connection pending if not already done 2452 if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_SENT_CONN_RESP_PEND) == 0){ 2453 channel->state_var |= L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND; 2454 } 2455 gap_request_security_level(channel->con_handle, channel->required_security_level); 2456 } 2457 } else { 2458 // outgoing: we have been waiting for remote supported features 2459 if (security_required){ 2460 // request security level 2461 channel->state = L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE; 2462 gap_request_security_level(channel->con_handle, channel->required_security_level); 2463 } else { 2464 l2cap_ready_to_connect(channel); 2465 } 2466 } 2467 } 2468 #endif 2469 2470 #ifdef L2CAP_USES_CHANNELS 2471 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, 2472 uint16_t psm, uint16_t local_mtu, gap_security_level_t security_level){ 2473 2474 l2cap_channel_t * channel = btstack_memory_l2cap_channel_get(); 2475 if (!channel) { 2476 return NULL; 2477 } 2478 2479 // fill in 2480 channel->packet_handler = packet_handler; 2481 channel->channel_type = channel_type; 2482 bd_addr_copy(channel->address, address); 2483 channel->address_type = address_type; 2484 channel->psm = psm; 2485 channel->local_mtu = local_mtu; 2486 channel->remote_mtu = L2CAP_DEFAULT_MTU; 2487 channel->required_security_level = security_level; 2488 2489 // 2490 channel->local_cid = l2cap_next_local_cid(); 2491 channel->con_handle = HCI_CON_HANDLE_INVALID; 2492 2493 // set initial state 2494 channel->state = L2CAP_STATE_WILL_SEND_CREATE_CONNECTION; 2495 channel->state_var = L2CAP_CHANNEL_STATE_VAR_NONE; 2496 channel->remote_sig_id = L2CAP_SIG_ID_INVALID; 2497 channel->local_sig_id = L2CAP_SIG_ID_INVALID; 2498 2499 log_info("create channel %p, local_cid 0x%04x", channel, channel->local_cid); 2500 2501 return channel; 2502 } 2503 2504 static void l2cap_free_channel_entry(l2cap_channel_t * channel){ 2505 log_info("free channel %p, local_cid 0x%04x", channel, channel->local_cid); 2506 // assert all timers are stopped 2507 l2cap_stop_rtx(channel); 2508 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 2509 l2cap_ertm_stop_retransmission_timer(channel); 2510 l2cap_ertm_stop_monitor_timer(channel); 2511 #endif 2512 // free memory 2513 btstack_memory_l2cap_channel_free(channel); 2514 } 2515 #endif 2516 2517 #ifdef ENABLE_CLASSIC 2518 2519 /** 2520 * @brief Creates L2CAP channel to the PSM of a remote device with baseband address. A new baseband connection will be initiated if necessary. 2521 * @param packet_handler 2522 * @param address 2523 * @param psm 2524 * @param mtu 2525 * @param local_cid 2526 */ 2527 2528 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){ 2529 // limit MTU to the size of our outgoing HCI buffer 2530 uint16_t local_mtu = btstack_min(mtu, l2cap_max_mtu()); 2531 2532 // determine security level based on psm 2533 const gap_security_level_t security_level = l2cap_security_level_0_allowed_for_PSM(psm) ? LEVEL_0 : gap_get_security_level(); 2534 log_info("create channel addr %s psm 0x%x mtu %u -> local mtu %u, sec level %u", bd_addr_to_str(address), psm, mtu, local_mtu, (int) security_level); 2535 2536 l2cap_channel_t * channel = l2cap_create_channel_entry(channel_packet_handler, L2CAP_CHANNEL_TYPE_CLASSIC, address, BD_ADDR_TYPE_ACL, psm, local_mtu, security_level); 2537 if (!channel) { 2538 return BTSTACK_MEMORY_ALLOC_FAILED; 2539 } 2540 2541 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 2542 channel->mode = L2CAP_CHANNEL_MODE_BASIC; 2543 #endif 2544 2545 // add to connections list 2546 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 2547 2548 // store local_cid 2549 if (out_local_cid){ 2550 *out_local_cid = channel->local_cid; 2551 } 2552 2553 // state: L2CAP_STATE_WILL_SEND_CREATE_CONNECTION 2554 2555 // check if hci connection is already usable, 2556 hci_connection_t * conn = hci_connection_for_bd_addr_and_type(address, BD_ADDR_TYPE_ACL); 2557 if (conn && conn->state == OPEN){ 2558 // simulate connection complete 2559 l2cap_handle_connection_complete(conn->con_handle, channel); 2560 2561 // state: L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES or L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST 2562 2563 // simulate if remote supported features if requested and already received 2564 if ((channel->state == L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES) && hci_remote_features_available(conn->con_handle)) { 2565 // simulate remote features received 2566 l2cap_handle_remote_supported_features_received(channel); 2567 } 2568 } 2569 2570 l2cap_run(); 2571 2572 return ERROR_CODE_SUCCESS; 2573 } 2574 2575 static void l2cap_handle_connection_failed_for_addr(bd_addr_t address, uint8_t status){ 2576 // mark all channels before emitting open events as these could trigger new connetion requests to the same device 2577 btstack_linked_list_iterator_t it; 2578 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2579 while (btstack_linked_list_iterator_has_next(&it)){ 2580 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2581 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 2582 if (bd_addr_cmp( channel->address, address) != 0) continue; 2583 // channel for this address found 2584 switch (channel->state){ 2585 case L2CAP_STATE_WAIT_CONNECTION_COMPLETE: 2586 case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION: 2587 channel->state = L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD; 2588 break; 2589 default: 2590 break; 2591 } 2592 } 2593 // emit and free marked entries. restart loop to deal with list changes 2594 int done = 0; 2595 while (!done) { 2596 done = 1; 2597 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2598 while (btstack_linked_list_iterator_has_next(&it)){ 2599 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2600 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 2601 if (channel->state == L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD){ 2602 done = 0; 2603 // failure, forward error code 2604 l2cap_handle_channel_open_failed(channel, status); 2605 // discard channel 2606 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 2607 l2cap_free_channel_entry(channel); 2608 break; 2609 } 2610 } 2611 } 2612 2613 } 2614 2615 static void l2cap_handle_connection_success_for_addr(bd_addr_t address, hci_con_handle_t handle){ 2616 btstack_linked_list_iterator_t it; 2617 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2618 while (btstack_linked_list_iterator_has_next(&it)){ 2619 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2620 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 2621 if ( ! bd_addr_cmp( channel->address, address) ){ 2622 l2cap_handle_connection_complete(handle, channel); 2623 } 2624 } 2625 2626 #ifdef ENABLE_L2CAP_INFORMATION_REQUESTS_ON_CONNECT 2627 // trigger query of extended features and fixed channels right away (instead of later) 2628 hci_connection_t * hci_connection = hci_connection_for_handle(handle); 2629 btstack_assert(hci_connection != NULL); 2630 hci_connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST; 2631 #endif 2632 2633 // process 2634 l2cap_run(); 2635 } 2636 #endif 2637 2638 static bool l2cap_channel_ready_to_send(l2cap_channel_t * channel){ 2639 switch (channel->channel_type){ 2640 #ifdef ENABLE_CLASSIC 2641 case L2CAP_CHANNEL_TYPE_CLASSIC: 2642 if (channel->state != L2CAP_STATE_OPEN) return false; 2643 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 2644 // send if we have more data and remote windows isn't full yet 2645 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) { 2646 if (channel->unacked_frames >= btstack_min(channel->num_stored_tx_frames, channel->remote_tx_window_size)) return false; 2647 return hci_can_send_acl_packet_now(channel->con_handle); 2648 } 2649 #endif 2650 if (!channel->waiting_for_can_send_now) return false; 2651 return hci_can_send_acl_packet_now(channel->con_handle); 2652 case L2CAP_CHANNEL_TYPE_FIXED_CLASSIC: 2653 case L2CAP_CHANNEL_TYPE_CONNECTIONLESS: 2654 if (!channel->waiting_for_can_send_now) return false; 2655 return hci_can_send_acl_classic_packet_now(); 2656 #endif 2657 #ifdef ENABLE_BLE 2658 case L2CAP_CHANNEL_TYPE_FIXED_LE: 2659 if (!channel->waiting_for_can_send_now) return false; 2660 return hci_can_send_acl_le_packet_now(); 2661 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 2662 case L2CAP_CHANNEL_TYPE_CHANNEL_CBM: 2663 if (channel->state != L2CAP_STATE_OPEN) return false; 2664 if (channel->send_sdu_buffer == NULL) return false; 2665 if (channel->credits_outgoing == 0u) return false; 2666 return hci_can_send_acl_packet_now(channel->con_handle); 2667 #endif 2668 #endif 2669 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 2670 case L2CAP_CHANNEL_TYPE_CHANNEL_ECBM: 2671 if (channel->state != L2CAP_STATE_OPEN) return false; 2672 if (channel->send_sdu_buffer == NULL) return false; 2673 if (channel->credits_outgoing == 0u) return false; 2674 return hci_can_send_acl_packet_now(channel->con_handle); 2675 #endif 2676 default: 2677 return false; 2678 } 2679 } 2680 2681 static void l2cap_channel_trigger_send(l2cap_channel_t * channel){ 2682 switch (channel->channel_type){ 2683 #ifdef ENABLE_CLASSIC 2684 case L2CAP_CHANNEL_TYPE_CLASSIC: 2685 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 2686 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) { 2687 l2cap_ertm_channel_send_information_frame(channel); 2688 return; 2689 } 2690 #endif 2691 channel->waiting_for_can_send_now = 0; 2692 l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid); 2693 break; 2694 case L2CAP_CHANNEL_TYPE_CONNECTIONLESS: 2695 case L2CAP_CHANNEL_TYPE_FIXED_CLASSIC: 2696 channel->waiting_for_can_send_now = 0; 2697 l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid); 2698 break; 2699 #endif 2700 #ifdef ENABLE_BLE 2701 case L2CAP_CHANNEL_TYPE_FIXED_LE: 2702 channel->waiting_for_can_send_now = 0; 2703 l2cap_emit_can_send_now(channel->packet_handler, channel->local_cid); 2704 break; 2705 #endif 2706 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 2707 case L2CAP_CHANNEL_TYPE_CHANNEL_CBM: 2708 l2cap_credit_based_send_pdu(channel); 2709 break; 2710 #endif 2711 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 2712 case L2CAP_CHANNEL_TYPE_CHANNEL_ECBM: 2713 l2cap_credit_based_send_pdu(channel); 2714 break; 2715 #endif 2716 default: 2717 btstack_unreachable(); 2718 break; 2719 } 2720 } 2721 2722 static void l2cap_notify_channel_can_send(void){ 2723 bool done = false; 2724 while (!done){ 2725 done = true; 2726 btstack_linked_list_iterator_t it; 2727 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2728 while (btstack_linked_list_iterator_has_next(&it)){ 2729 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2730 bool ready = l2cap_channel_ready_to_send(channel); 2731 if (!ready) continue; 2732 2733 // requeue channel for fairness 2734 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 2735 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 2736 2737 // trigger sending 2738 l2cap_channel_trigger_send(channel); 2739 2740 // exit inner loop as we just broke the iterator, but try again 2741 done = false; 2742 break; 2743 } 2744 } 2745 } 2746 2747 #ifdef L2CAP_USES_CHANNELS 2748 2749 uint8_t l2cap_disconnect(uint16_t local_cid){ 2750 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 2751 if (!channel) { 2752 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 2753 } 2754 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 2755 l2cap_run(); 2756 return ERROR_CODE_SUCCESS; 2757 } 2758 2759 static int l2cap_send_open_failed_on_hci_disconnect(l2cap_channel_t * channel){ 2760 // open cannot fail for for incoming connections 2761 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) return 0; 2762 2763 // check state 2764 switch (channel->state){ 2765 case L2CAP_STATE_WILL_SEND_CREATE_CONNECTION: 2766 case L2CAP_STATE_WAIT_CONNECTION_COMPLETE: 2767 case L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES: 2768 case L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE: 2769 case L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT: 2770 case L2CAP_STATE_WAIT_OUTGOING_EXTENDED_FEATURES: 2771 case L2CAP_STATE_WAIT_CONNECT_RSP: 2772 case L2CAP_STATE_CONFIG: 2773 case L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST: 2774 case L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST: 2775 case L2CAP_STATE_WAIT_LE_CONNECTION_RESPONSE: 2776 case L2CAP_STATE_EMIT_OPEN_FAILED_AND_DISCARD: 2777 return 1; 2778 2779 case L2CAP_STATE_OPEN: 2780 case L2CAP_STATE_CLOSED: 2781 case L2CAP_STATE_WAIT_INCOMING_EXTENDED_FEATURES: 2782 case L2CAP_STATE_WAIT_DISCONNECT: 2783 case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_INSUFFICIENT_SECURITY: 2784 case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE: 2785 case L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT: 2786 case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST: 2787 case L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE: 2788 case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_DECLINE: 2789 case L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_ACCEPT: 2790 case L2CAP_STATE_INVALID: 2791 case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE: 2792 return 0; 2793 2794 default: 2795 // get a "warning" about new states 2796 btstack_assert(false); 2797 return 0; 2798 } 2799 } 2800 #endif 2801 2802 #ifdef ENABLE_CLASSIC 2803 static void l2cap_handle_hci_disconnect_event(l2cap_channel_t * channel){ 2804 if (l2cap_send_open_failed_on_hci_disconnect(channel)){ 2805 l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_BASEBAND_DISCONNECT); 2806 } else { 2807 l2cap_handle_channel_closed(channel); 2808 } 2809 l2cap_free_channel_entry(channel); 2810 } 2811 #endif 2812 2813 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 2814 static void l2cap_handle_hci_le_disconnect_event(l2cap_channel_t * channel){ 2815 if (l2cap_send_open_failed_on_hci_disconnect(channel)){ 2816 l2cap_cbm_emit_channel_opened(channel, L2CAP_CONNECTION_BASEBAND_DISCONNECT); 2817 } else { 2818 l2cap_emit_channel_closed(channel); 2819 } 2820 l2cap_free_channel_entry(channel); 2821 } 2822 #endif 2823 2824 #ifdef ENABLE_CLASSIC 2825 static void l2cap_check_classic_timeout(hci_con_handle_t handle){ 2826 if (gap_get_connection_type(handle) != GAP_CONNECTION_ACL) { 2827 return; 2828 } 2829 if (hci_authentication_active_for_handle(handle)) { 2830 return; 2831 } 2832 bool hci_con_used = false; 2833 btstack_linked_list_iterator_t it; 2834 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2835 while (btstack_linked_list_iterator_has_next(&it)){ 2836 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2837 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 2838 if (channel->con_handle != handle) continue; 2839 hci_con_used = true; 2840 break; 2841 } 2842 if (hci_con_used) { 2843 return; 2844 } 2845 if (!hci_can_send_command_packet_now()) { 2846 return; 2847 } 2848 hci_send_cmd(&hci_disconnect, handle, 0x13); // remote closed connection 2849 } 2850 2851 static void l2cap_handle_features_complete(hci_con_handle_t handle){ 2852 if (hci_remote_features_available(handle) == false){ 2853 return; 2854 } 2855 btstack_linked_list_iterator_t it; 2856 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2857 while (btstack_linked_list_iterator_has_next(&it)){ 2858 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2859 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 2860 if (channel->con_handle != handle) continue; 2861 log_info("remote supported features, channel %p, cid %04x - state %u", channel, channel->local_cid, channel->state); 2862 l2cap_handle_remote_supported_features_received(channel); 2863 } 2864 } 2865 2866 static void l2cap_handle_security_level_incoming_sufficient(l2cap_channel_t * channel){ 2867 channel->state = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT; 2868 l2cap_emit_incoming_connection(channel); 2869 } 2870 2871 static void l2cap_handle_security_level(hci_con_handle_t handle, gap_security_level_t actual_level){ 2872 log_info("security level update for handle 0x%04x", handle); 2873 2874 // trigger l2cap information requests 2875 if (actual_level > LEVEL_0){ 2876 hci_connection_t * hci_connection = hci_connection_for_handle(handle); 2877 btstack_assert(hci_connection != NULL); 2878 if (hci_connection->l2cap_state.information_state == L2CAP_INFORMATION_STATE_IDLE){ 2879 hci_connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W2_SEND_EXTENDED_FEATURE_REQUEST; 2880 } 2881 } 2882 2883 bool done = false; 2884 while (!done){ 2885 done = true; 2886 btstack_linked_list_iterator_t it; 2887 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2888 while (btstack_linked_list_iterator_has_next(&it)){ 2889 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2890 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 2891 if (channel->con_handle != handle) continue; 2892 2893 gap_security_level_t required_level = channel->required_security_level; 2894 2895 log_info("channel %p, cid %04x - state %u: actual %u >= required %u?", channel, channel->local_cid, channel->state, actual_level, required_level); 2896 2897 switch (channel->state){ 2898 case L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE: 2899 if (actual_level >= required_level){ 2900 l2cap_handle_security_level_incoming_sufficient(channel); 2901 } else { 2902 channel->reason = L2CAP_CONNECTION_RESULT_SECURITY_BLOCK; 2903 channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE; 2904 } 2905 break; 2906 2907 case L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE: 2908 if (actual_level >= required_level){ 2909 l2cap_ready_to_connect(channel); 2910 } else { 2911 // security level insufficient, report error and free channel 2912 l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY); 2913 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 2914 l2cap_free_channel_entry(channel); 2915 } 2916 break; 2917 2918 default: 2919 break; 2920 } 2921 } 2922 } 2923 } 2924 #endif 2925 2926 #ifdef L2CAP_USES_CHANNELS 2927 static void l2cap_handle_disconnection_complete(hci_con_handle_t handle){ 2928 // collect channels to close 2929 btstack_linked_list_t channels_to_close = NULL; 2930 btstack_linked_list_iterator_t it; 2931 btstack_linked_list_iterator_init(&it, &l2cap_channels); 2932 while (btstack_linked_list_iterator_has_next(&it)) { 2933 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2934 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 2935 if (channel->con_handle != handle) continue; 2936 btstack_linked_list_iterator_remove(&it); 2937 btstack_linked_list_add(&channels_to_close, (btstack_linked_item_t *) channel); 2938 } 2939 // send l2cap open failed or closed events for all channels on this handle and free them 2940 btstack_linked_list_iterator_init(&it, &channels_to_close); 2941 while (btstack_linked_list_iterator_has_next(&it)) { 2942 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 2943 btstack_linked_list_iterator_remove(&it); 2944 switch(channel->channel_type){ 2945 #ifdef ENABLE_CLASSIC 2946 case L2CAP_CHANNEL_TYPE_CLASSIC: 2947 l2cap_handle_hci_disconnect_event(channel); 2948 break; 2949 #endif 2950 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 2951 case L2CAP_CHANNEL_TYPE_CHANNEL_CBM: 2952 l2cap_handle_hci_le_disconnect_event(channel); 2953 break; 2954 #endif 2955 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 2956 case L2CAP_CHANNEL_TYPE_CHANNEL_ECBM: 2957 switch (channel->state) { 2958 case L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_REQUEST: 2959 case L2CAP_STATE_WAIT_ENHANCED_CONNECTION_RESPONSE: 2960 // emit open failed if disconnected before connection complete 2961 l2cap_ecbm_emit_channel_opened(channel, L2CAP_CONNECTION_BASEBAND_DISCONNECT); 2962 break; 2963 case L2CAP_STATE_WILL_SEND_EHNANCED_RENEGOTIATION_REQUEST: 2964 case L2CAP_STATE_WAIT_ENHANCED_RENEGOTIATION_RESPONSE: 2965 // emit reconfigure failure - result = 0xffff 2966 l2cap_ecbm_emit_reconfigure_complete(channel, 0xffff); 2967 break; 2968 default: 2969 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_CHANNEL_CLOSED); 2970 break; 2971 } 2972 l2cap_free_channel_entry(channel); 2973 break; 2974 #endif 2975 default: 2976 break; 2977 } 2978 } 2979 } 2980 #endif 2981 2982 static void l2cap_hci_event_handler(uint8_t packet_type, uint16_t cid, uint8_t *packet, uint16_t size){ 2983 2984 UNUSED(packet_type); // ok: registered with hci_event_callback_registration 2985 UNUSED(cid); // ok: there is no channel 2986 UNUSED(size); // ok: fixed format events read from HCI buffer 2987 2988 #ifdef ENABLE_CLASSIC 2989 bd_addr_t address; 2990 gap_security_level_t security_level; 2991 #endif 2992 #ifdef L2CAP_USES_CHANNELS 2993 hci_con_handle_t handle; 2994 #endif 2995 2996 switch(hci_event_packet_get_type(packet)){ 2997 2998 // Notify channel packet handler if they can send now 2999 case HCI_EVENT_TRANSPORT_PACKET_SENT: 3000 case HCI_EVENT_NUMBER_OF_COMPLETED_PACKETS: 3001 case BTSTACK_EVENT_NR_CONNECTIONS_CHANGED: 3002 #ifdef ENABLE_TESTING_SUPPORT 3003 case HCI_EVENT_NOP: 3004 #endif 3005 l2cap_call_notify_channel_in_run = true; 3006 break; 3007 3008 case HCI_EVENT_COMMAND_STATUS: 3009 #ifdef ENABLE_CLASSIC 3010 // check command status for create connection for errors 3011 if (hci_event_command_status_get_command_opcode(packet) == HCI_OPCODE_HCI_CREATE_CONNECTION){ 3012 // cache outgoing address and reset 3013 (void)memcpy(address, l2cap_outgoing_classic_addr, 6); 3014 memset(l2cap_outgoing_classic_addr, 0, 6); 3015 // error => outgoing connection failed 3016 uint8_t status = hci_event_command_status_get_status(packet); 3017 if (status){ 3018 l2cap_handle_connection_failed_for_addr(address, status); 3019 } 3020 } 3021 #endif 3022 l2cap_run(); // try sending signaling packets first 3023 break; 3024 3025 #ifdef ENABLE_CLASSIC 3026 // handle connection complete events 3027 case HCI_EVENT_CONNECTION_COMPLETE: 3028 reverse_bd_addr(&packet[5], address); 3029 if (packet[2] == 0){ 3030 handle = little_endian_read_16(packet, 3); 3031 l2cap_handle_connection_success_for_addr(address, handle); 3032 } else { 3033 l2cap_handle_connection_failed_for_addr(address, packet[2]); 3034 } 3035 break; 3036 3037 // handle successful create connection cancel command 3038 case HCI_EVENT_COMMAND_COMPLETE: 3039 if (hci_event_command_complete_get_command_opcode(packet) == HCI_OPCODE_HCI_CREATE_CONNECTION_CANCEL) { 3040 if (packet[5] == 0){ 3041 reverse_bd_addr(&packet[6], address); 3042 // CONNECTION TERMINATED BY LOCAL HOST (0X16) 3043 l2cap_handle_connection_failed_for_addr(address, 0x16); 3044 } 3045 } 3046 l2cap_run(); // try sending signaling packets first 3047 break; 3048 #endif 3049 3050 #ifdef L2CAP_USES_CHANNELS 3051 // handle disconnection complete events 3052 case HCI_EVENT_DISCONNECTION_COMPLETE: 3053 handle = little_endian_read_16(packet, 3); 3054 l2cap_handle_disconnection_complete(handle); 3055 break; 3056 #endif 3057 3058 // HCI Connection Timeouts 3059 #ifdef ENABLE_CLASSIC 3060 case L2CAP_EVENT_TIMEOUT_CHECK: 3061 handle = little_endian_read_16(packet, 2); 3062 l2cap_check_classic_timeout(handle); 3063 break; 3064 3065 case HCI_EVENT_READ_REMOTE_SUPPORTED_FEATURES_COMPLETE: 3066 case HCI_EVENT_READ_REMOTE_EXTENDED_FEATURES_COMPLETE: 3067 handle = little_endian_read_16(packet, 3); 3068 l2cap_handle_features_complete(handle); 3069 break; 3070 3071 case GAP_EVENT_SECURITY_LEVEL: 3072 handle = little_endian_read_16(packet, 2); 3073 security_level = (gap_security_level_t) packet[4]; 3074 l2cap_handle_security_level(handle, security_level); 3075 break; 3076 #endif 3077 default: 3078 break; 3079 } 3080 3081 l2cap_run(); 3082 } 3083 3084 static void l2cap_register_signaling_response(hci_con_handle_t handle, uint8_t code, uint8_t sig_id, uint16_t cid, uint16_t data){ 3085 // Vol 3, Part A, 4.3: "The DCID and SCID fields shall be ignored when the result field indicates the connection was refused." 3086 if (l2cap_signaling_responses_pending < NR_PENDING_SIGNALING_RESPONSES) { 3087 l2cap_signaling_responses[l2cap_signaling_responses_pending].handle = handle; 3088 l2cap_signaling_responses[l2cap_signaling_responses_pending].code = code; 3089 l2cap_signaling_responses[l2cap_signaling_responses_pending].sig_id = sig_id; 3090 l2cap_signaling_responses[l2cap_signaling_responses_pending].cid = cid; 3091 l2cap_signaling_responses[l2cap_signaling_responses_pending].data = data; 3092 l2cap_signaling_responses_pending++; 3093 l2cap_run(); 3094 } 3095 } 3096 3097 #ifdef ENABLE_CLASSIC 3098 static void l2cap_handle_disconnect_request(l2cap_channel_t *channel, uint8_t identifier){ 3099 switch (channel->state){ 3100 case L2CAP_STATE_CONFIG: 3101 case L2CAP_STATE_OPEN: 3102 case L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST: 3103 case L2CAP_STATE_WAIT_DISCONNECT: 3104 break; 3105 default: 3106 // ignore in other states 3107 return; 3108 } 3109 3110 channel->remote_sig_id = identifier; 3111 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE; 3112 l2cap_run(); 3113 } 3114 3115 static void l2cap_handle_connection_request(hci_con_handle_t handle, uint8_t sig_id, uint16_t psm, uint16_t source_cid){ 3116 3117 // log_info("l2cap_handle_connection_request for handle %u, psm %u cid 0x%02x", handle, psm, source_cid); 3118 l2cap_service_t *service = l2cap_get_service(psm); 3119 if (!service) { 3120 l2cap_register_signaling_response(handle, CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CONNECTION_RESULT_PSM_NOT_SUPPORTED); 3121 return; 3122 } 3123 3124 hci_connection_t * hci_connection = hci_connection_for_handle( handle ); 3125 if (!hci_connection) { 3126 // 3127 log_error("no hci_connection for handle %u", handle); 3128 return; 3129 } 3130 3131 // if SC only mode is active and service requires encryption, reject connection if SC not active or use security level 3132 gap_security_level_t required_level = service->required_security_level; 3133 if (gap_get_secure_connections_only_mode() && (required_level != LEVEL_0)){ 3134 if (gap_secure_connection(handle)){ 3135 required_level = LEVEL_4; 3136 } else { 3137 l2cap_register_signaling_response(handle, CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CONNECTION_RESULT_SECURITY_BLOCK); 3138 return; 3139 } 3140 } 3141 3142 // alloc structure 3143 l2cap_channel_t * channel = l2cap_create_channel_entry(service->packet_handler, L2CAP_CHANNEL_TYPE_CLASSIC, hci_connection->address, BD_ADDR_TYPE_ACL, 3144 psm, service->mtu, required_level); 3145 if (!channel){ 3146 l2cap_register_signaling_response(handle, CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CONNECTION_RESULT_NO_RESOURCES_AVAILABLE); 3147 return; 3148 } 3149 3150 channel->con_handle = handle; 3151 channel->remote_cid = source_cid; 3152 channel->remote_sig_id = sig_id; 3153 3154 // limit local mtu to max acl packet length - l2cap header 3155 if (channel->local_mtu > l2cap_max_mtu()) { 3156 channel->local_mtu = l2cap_max_mtu(); 3157 } 3158 3159 // set initial state 3160 channel->state = L2CAP_STATE_WAIT_REMOTE_SUPPORTED_FEATURES; 3161 channel->state_var = L2CAP_CHANNEL_STATE_VAR_INCOMING; 3162 3163 // add to connections list 3164 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 3165 3166 // 3167 if (required_level > LEVEL_0){ 3168 // send conn resp pending if remote supported features have not been received yet 3169 if (hci_remote_features_available(handle)) { 3170 l2cap_handle_remote_supported_features_received(channel); 3171 } else { 3172 channel->state_var |= L2CAP_CHANNEL_STATE_VAR_SEND_CONN_RESP_PEND; 3173 hci_remote_features_query(handle); 3174 } 3175 } else { 3176 l2cap_handle_security_level_incoming_sufficient(channel); 3177 } 3178 } 3179 3180 void l2cap_accept_connection(uint16_t local_cid){ 3181 log_info("L2CAP_ACCEPT_CONNECTION local_cid 0x%x", local_cid); 3182 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 3183 if (!channel) { 3184 log_error("accept called but local_cid 0x%x not found", local_cid); 3185 return; 3186 } 3187 3188 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3189 // configure L2CAP Basic mode 3190 channel->mode = L2CAP_CHANNEL_MODE_BASIC; 3191 #endif 3192 3193 channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT; 3194 3195 // process 3196 l2cap_run(); 3197 } 3198 3199 void l2cap_decline_connection(uint16_t local_cid){ 3200 log_info("decline local_cid 0x%x", local_cid); 3201 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid( local_cid); 3202 if (!channel) { 3203 log_error( "l2cap_decline_connection called but local_cid 0x%x not found", local_cid); 3204 return; 3205 } 3206 channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE; 3207 channel->reason = L2CAP_CONNECTION_RESULT_NO_RESOURCES_AVAILABLE; 3208 l2cap_run(); 3209 } 3210 3211 // @pre command len is valid, see check in l2cap_signaling_handler_channel 3212 static void l2cap_signaling_handle_configure_request(l2cap_channel_t *channel, uint8_t *command){ 3213 3214 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3215 uint8_t use_fcs = 1; 3216 #endif 3217 3218 channel->remote_sig_id = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET]; 3219 3220 uint16_t flags = little_endian_read_16(command, 6); 3221 if (flags & 1) { 3222 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT); 3223 } 3224 3225 // accept the other's configuration options 3226 uint16_t end_pos = 4 + little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET); 3227 uint16_t pos = 8; 3228 while (pos < end_pos){ 3229 uint8_t option_hint = command[pos] >> 7; 3230 uint8_t option_type = command[pos] & 0x7f; 3231 // log_info("l2cap cid %u, hint %u, type %u", channel->local_cid, option_hint, option_type); 3232 pos++; 3233 uint8_t length = command[pos++]; 3234 // MTU { type(8): 1, len(8):2, MTU(16) } 3235 if ((option_type == L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT) && (length == 2)){ 3236 channel->remote_mtu = little_endian_read_16(command, pos); 3237 log_info("Remote MTU %u", channel->remote_mtu); 3238 if (channel->remote_mtu > l2cap_max_mtu()){ 3239 log_info("Remote MTU %u larger than outgoing buffer, only using MTU = %u", channel->remote_mtu, l2cap_max_mtu()); 3240 channel->remote_mtu = l2cap_max_mtu(); 3241 } 3242 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_MTU); 3243 } 3244 // Flush timeout { type(8):2, len(8): 2, Flush Timeout(16)} 3245 if ((option_type == L2CAP_CONFIG_OPTION_TYPE_FLUSH_TIMEOUT) && (length == 2)){ 3246 channel->flush_timeout = little_endian_read_16(command, pos); 3247 log_info("Flush timeout: %u ms", channel->flush_timeout); 3248 } 3249 3250 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3251 // Retransmission and Flow Control Option 3252 if (option_type == L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL && length == 9){ 3253 l2cap_channel_mode_t mode = (l2cap_channel_mode_t) command[pos]; 3254 switch(channel->mode){ 3255 case L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION: 3256 // Store remote config 3257 channel->remote_tx_window_size = command[pos+1]; 3258 channel->remote_max_transmit = command[pos+2]; 3259 channel->remote_retransmission_timeout_ms = little_endian_read_16(command, pos + 3); 3260 channel->remote_monitor_timeout_ms = little_endian_read_16(command, pos + 5); 3261 { 3262 uint16_t remote_mps = little_endian_read_16(command, pos + 7); 3263 // optimize our tx buffer configuration based on actual remote mps if remote mps is smaller than planned 3264 if (remote_mps < channel->remote_mps){ 3265 // get current tx storage 3266 uint16_t num_bytes_per_tx_buffer_before = sizeof(l2cap_ertm_tx_packet_state_t) + channel->remote_mps; 3267 uint16_t tx_storage = channel->num_tx_buffers * num_bytes_per_tx_buffer_before; 3268 3269 channel->remote_mps = remote_mps; 3270 uint16_t num_bytes_per_tx_buffer_now = sizeof(l2cap_ertm_tx_packet_state_t) + channel->remote_mps; 3271 channel->num_tx_buffers = tx_storage / num_bytes_per_tx_buffer_now; 3272 uint32_t total_storage = (sizeof(l2cap_ertm_rx_packet_state_t) + channel->local_mps) * channel->num_rx_buffers + tx_storage + channel->local_mtu; 3273 l2cap_ertm_setup_buffers(channel, (uint8_t *) channel->rx_packets_state, total_storage); 3274 } 3275 // limit remote mtu by our tx buffers. Include 2 bytes SDU Length 3276 uint16_t effective_mtu = channel->remote_mps * channel->num_tx_buffers - 2; 3277 channel->remote_mtu = btstack_min( effective_mtu, channel->remote_mtu); 3278 } 3279 log_info("FC&C config: tx window: %u, max transmit %u, retrans timeout %u, monitor timeout %u, mps %u", 3280 channel->remote_tx_window_size, 3281 channel->remote_max_transmit, 3282 channel->remote_retransmission_timeout_ms, 3283 channel->remote_monitor_timeout_ms, 3284 channel->remote_mps); 3285 // If ERTM mandatory, but remote doens't offer ERTM -> disconnect 3286 if (channel->ertm_mandatory && mode != L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 3287 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 3288 } else { 3289 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM); 3290 } 3291 break; 3292 case L2CAP_CHANNEL_MODE_BASIC: 3293 switch (mode){ 3294 case L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION: 3295 // remote asks for ERTM, but we want basic mode. disconnect if this happens a second time 3296 if (channel->state_var & L2CAP_CHANNEL_STATE_VAR_BASIC_FALLBACK_TRIED){ 3297 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 3298 } 3299 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_BASIC_FALLBACK_TRIED); 3300 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_REJECTED); 3301 break; 3302 default: // case L2CAP_CHANNEL_MODE_BASIC: 3303 // TODO store and evaluate configuration 3304 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM); 3305 break; 3306 } 3307 break; 3308 default: 3309 break; 3310 } 3311 } 3312 if (option_type == L2CAP_CONFIG_OPTION_TYPE_FRAME_CHECK_SEQUENCE && length == 1){ 3313 use_fcs = command[pos]; 3314 } 3315 #endif 3316 // check for unknown options 3317 if ((option_hint == 0) && ((option_type < L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT) || (option_type > L2CAP_CONFIG_OPTION_TYPE_EXTENDED_WINDOW_SIZE))){ 3318 log_info("l2cap cid %u, unknown option 0x%02x", channel->local_cid, option_type); 3319 channel->unknown_option = option_type; 3320 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_INVALID); 3321 } 3322 pos += length; 3323 } 3324 3325 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3326 // "FCS" has precedence over "No FCS" 3327 uint8_t update = channel->fcs_option || use_fcs; 3328 log_info("local fcs: %u, remote fcs: %u -> %u", channel->fcs_option, use_fcs, update); 3329 channel->fcs_option = update; 3330 // If ERTM mandatory, but remote didn't send Retransmission and Flowcontrol options -> disconnect 3331 if (((channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_ERTM) == 0) & (channel->ertm_mandatory)){ 3332 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 3333 } 3334 #endif 3335 } 3336 3337 // @pre command len is valid, see check in l2cap_signaling_handler_channel 3338 static void l2cap_signaling_handle_configure_response(l2cap_channel_t *channel, uint16_t result, uint8_t *command){ 3339 log_info("l2cap_signaling_handle_configure_response"); 3340 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3341 uint16_t end_pos = 4 + little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET); 3342 uint16_t pos = 10; 3343 while (pos < end_pos){ 3344 uint8_t option_hint = command[pos] >> 7; 3345 uint8_t option_type = command[pos] & 0x7f; 3346 // log_info("l2cap cid %u, hint %u, type %u", channel->local_cid, option_hint, option_type); 3347 pos++; 3348 uint8_t length = command[pos++]; 3349 3350 // Retransmission and Flow Control Option 3351 if (option_type == L2CAP_CONFIG_OPTION_TYPE_RETRANSMISSION_AND_FLOW_CONTROL && length == 9){ 3352 switch (channel->mode){ 3353 case L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION: 3354 if (channel->ertm_mandatory){ 3355 // ?? 3356 } else { 3357 // On 'Reject - Unacceptable Parameters' to our optional ERTM request, fall back to BASIC mode 3358 if (result == L2CAP_CONF_RESULT_UNACCEPTABLE_PARAMETERS){ 3359 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED); 3360 channel->mode = L2CAP_CHANNEL_MODE_BASIC; 3361 } 3362 } 3363 break; 3364 case L2CAP_CHANNEL_MODE_BASIC: 3365 if (result == L2CAP_CONF_RESULT_UNACCEPTABLE_PARAMETERS){ 3366 // On 'Reject - Unacceptable Parameters' to our Basic mode request, disconnect 3367 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 3368 } 3369 break; 3370 default: 3371 break; 3372 } 3373 } 3374 3375 // check for unknown options 3376 if (option_hint == 0 && (option_type < L2CAP_CONFIG_OPTION_TYPE_MAX_TRANSMISSION_UNIT || option_type > L2CAP_CONFIG_OPTION_TYPE_EXTENDED_WINDOW_SIZE)){ 3377 log_info("l2cap cid %u, unknown option 0x%02x", channel->local_cid, option_type); 3378 channel->unknown_option = option_type; 3379 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_INVALID); 3380 } 3381 3382 pos += length; 3383 } 3384 #else 3385 UNUSED(channel); // ok: no code 3386 UNUSED(result); // ok: no code 3387 UNUSED(command); // ok: no code 3388 #endif 3389 } 3390 3391 static int l2cap_channel_ready_for_open(l2cap_channel_t *channel){ 3392 // log_info("l2cap_channel_ready_for_open 0x%02x", channel->state_var); 3393 if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_RSP) == 0) return 0; 3394 if ((channel->state_var & L2CAP_CHANNEL_STATE_VAR_SENT_CONF_RSP) == 0) return 0; 3395 // addition check that fixes re-entrance issue causing l2cap event channel opened twice 3396 if (channel->state == L2CAP_STATE_OPEN) return 0; 3397 return 1; 3398 } 3399 3400 3401 // @pre command len is valid, see check in l2cap_signaling_handler_dispatch 3402 static void l2cap_signaling_handler_channel(l2cap_channel_t *channel, uint8_t *command){ 3403 3404 uint8_t code = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET]; 3405 uint8_t identifier = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET]; 3406 uint16_t cmd_len = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET); 3407 uint16_t result = 0; 3408 3409 log_info("L2CAP signaling handler code %u, state %u", code, channel->state); 3410 3411 // handle DISCONNECT REQUESTS seperately 3412 if (code == DISCONNECTION_REQUEST){ 3413 l2cap_handle_disconnect_request(channel, identifier); 3414 return; 3415 } 3416 3417 // @STATEMACHINE(l2cap) 3418 switch (channel->state) { 3419 3420 case L2CAP_STATE_WAIT_CONNECT_RSP: 3421 switch (code){ 3422 case CONNECTION_RESPONSE: 3423 if (cmd_len < 8){ 3424 // command imcomplete 3425 l2cap_register_signaling_response(channel->con_handle, COMMAND_REJECT, identifier, 0, L2CAP_REJ_CMD_UNKNOWN); 3426 break; 3427 } 3428 l2cap_stop_rtx(channel); 3429 result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4); 3430 switch (result) { 3431 case 0: 3432 // successful connection 3433 channel->remote_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3434 channel->state = L2CAP_STATE_CONFIG; 3435 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ); 3436 break; 3437 case 1: 3438 // connection pending. get some coffee, but start the ERTX 3439 l2cap_start_ertx(channel); 3440 break; 3441 default: 3442 // channel closed 3443 channel->state = L2CAP_STATE_CLOSED; 3444 // map l2cap connection response result to BTstack status enumeration 3445 l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_SUCCESSFUL + result); 3446 3447 // drop link key if security block 3448 if ((L2CAP_CONNECTION_RESPONSE_RESULT_SUCCESSFUL + result) == L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY){ 3449 gap_drop_link_key_for_bd_addr(channel->address); 3450 } 3451 3452 // discard channel 3453 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 3454 l2cap_free_channel_entry(channel); 3455 break; 3456 } 3457 break; 3458 3459 default: 3460 //@TODO: implement other signaling packets 3461 break; 3462 } 3463 break; 3464 3465 case L2CAP_STATE_CONFIG: 3466 switch (code) { 3467 case CONFIGURE_REQUEST: 3468 if (cmd_len < 4){ 3469 // command incomplete 3470 l2cap_register_signaling_response(channel->con_handle, COMMAND_REJECT, identifier, 0, L2CAP_REJ_CMD_UNKNOWN); 3471 break; 3472 } 3473 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP); 3474 l2cap_signaling_handle_configure_request(channel, command); 3475 if (!(channel->state_var & L2CAP_CHANNEL_STATE_VAR_SEND_CONF_RSP_CONT)){ 3476 // only done if continuation not set 3477 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_REQ); 3478 } 3479 break; 3480 case CONFIGURE_RESPONSE: 3481 if (cmd_len < 6){ 3482 // command incomplete 3483 l2cap_register_signaling_response(channel->con_handle, COMMAND_REJECT, identifier, 0, L2CAP_REJ_CMD_UNKNOWN); 3484 break; 3485 } 3486 result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4); 3487 l2cap_stop_rtx(channel); 3488 l2cap_signaling_handle_configure_response(channel, result, command); 3489 switch (result){ 3490 case 0: // success 3491 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_RCVD_CONF_RSP); 3492 break; 3493 case 4: // pending 3494 l2cap_start_ertx(channel); 3495 break; 3496 default: 3497 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3498 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION && channel->ertm_mandatory){ 3499 // remote does not offer ertm but it's required 3500 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 3501 break; 3502 } 3503 #endif 3504 // retry on negative result 3505 channelStateVarSetFlag(channel, L2CAP_CHANNEL_STATE_VAR_SEND_CONF_REQ); 3506 break; 3507 } 3508 break; 3509 default: 3510 break; 3511 } 3512 if (l2cap_channel_ready_for_open(channel)){ 3513 3514 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3515 // assert that packet can be stored in fragment buffers in ertm 3516 if (channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 3517 uint16_t effective_mps = btstack_min(channel->remote_mps, channel->local_mps); 3518 uint16_t usable_mtu = channel->num_tx_buffers == 1 ? effective_mps : channel->num_tx_buffers * effective_mps - 2; 3519 if (usable_mtu < channel->remote_mtu){ 3520 log_info("Remote MTU %u > max storable ERTM packet, only using MTU = %u", channel->remote_mtu, usable_mtu); 3521 channel->remote_mtu = usable_mtu; 3522 } 3523 } 3524 #endif 3525 // for open: 3526 channel->state = L2CAP_STATE_OPEN; 3527 l2cap_emit_channel_opened(channel, 0); 3528 } 3529 break; 3530 3531 case L2CAP_STATE_WAIT_DISCONNECT: 3532 switch (code) { 3533 case DISCONNECTION_RESPONSE: 3534 l2cap_finalize_channel_close(channel); 3535 break; 3536 default: 3537 //@TODO: implement other signaling packets 3538 break; 3539 } 3540 break; 3541 3542 case L2CAP_STATE_CLOSED: 3543 // @TODO handle incoming requests 3544 break; 3545 3546 case L2CAP_STATE_OPEN: 3547 //@TODO: implement other signaling packets, e.g. re-configure 3548 break; 3549 default: 3550 break; 3551 } 3552 // log_info("new state %u", channel->state); 3553 } 3554 3555 #ifdef ENABLE_CLASSIC 3556 static void l2cap_handle_information_request_complete(hci_connection_t * connection){ 3557 3558 connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_DONE; 3559 3560 // emit event 3561 uint8_t event[8]; 3562 event[0] = L2CAP_EVENT_INFORMATION_RESPONSE; 3563 event[1] = sizeof(event) - 2; 3564 little_endian_store_16(event, 2, connection->con_handle); 3565 little_endian_store_16(event, 4, connection->l2cap_state.extended_feature_mask); 3566 little_endian_store_16(event, 6, connection->l2cap_state.fixed_channels_supported); 3567 l2cap_emit_event(event, sizeof(event)); 3568 3569 // trigger connection request 3570 btstack_linked_list_iterator_t it; 3571 btstack_linked_list_iterator_init(&it, &l2cap_channels); 3572 while (btstack_linked_list_iterator_has_next(&it)){ 3573 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 3574 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 3575 if (channel->con_handle != connection->con_handle) continue; 3576 3577 // incoming connection: information request was triggered after user has accepted connection, 3578 // now: verify channel configuration, esp. if ertm will be mandatory 3579 if (channel->state == L2CAP_STATE_WAIT_INCOMING_EXTENDED_FEATURES){ 3580 // default: continue 3581 channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_ACCEPT; 3582 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3583 if ((channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) && ((connection->l2cap_state.extended_feature_mask & 0x08) == 0)){ 3584 // ERTM not possible, select basic mode and release buffer 3585 channel->mode = L2CAP_CHANNEL_MODE_BASIC; 3586 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED); 3587 3588 // bail if ERTM is mandatory 3589 if (channel->ertm_mandatory){ 3590 // We chose 'no resources available' for "ERTM mandatory but you don't even know ERTM exists" 3591 log_info("ERTM mandatory -> reject connection"); 3592 channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_RESPONSE_DECLINE; 3593 channel->reason = L2CAP_CONNECTION_RESULT_NO_RESOURCES_AVAILABLE; 3594 } else { 3595 log_info("ERTM not supported by remote -> use Basic mode"); 3596 } 3597 } 3598 #endif 3599 continue; 3600 } 3601 3602 // outgoing connection: information request is triggered before connection request 3603 if (channel->state == L2CAP_STATE_WAIT_OUTGOING_EXTENDED_FEATURES){ 3604 3605 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 3606 // if ERTM was requested, but is not listed in extended feature mask: 3607 if ((channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION) && ((connection->l2cap_state.extended_feature_mask & 0x08) == 0)){ 3608 3609 if (channel->ertm_mandatory){ 3610 // bail if ERTM is mandatory 3611 channel->state = L2CAP_STATE_CLOSED; 3612 // map l2cap connection response result to BTstack status enumeration 3613 l2cap_handle_channel_open_failed(channel, L2CAP_CONNECTION_RESPONSE_RESULT_ERTM_NOT_SUPPORTED); 3614 // discard channel 3615 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 3616 l2cap_free_channel_entry(channel); 3617 continue; 3618 3619 } else { 3620 // fallback to Basic mode 3621 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_ERTM_BUFFER_RELEASED); 3622 channel->mode = L2CAP_CHANNEL_MODE_BASIC; 3623 } 3624 } 3625 #endif 3626 3627 // respond to connection request 3628 channel->state = L2CAP_STATE_WILL_SEND_CONNECTION_REQUEST; 3629 continue; 3630 } 3631 } 3632 } 3633 #endif 3634 3635 // @pre command len is valid, see check in l2cap_acl_classic_handler 3636 static void l2cap_signaling_handler_dispatch(hci_con_handle_t handle, uint8_t * command){ 3637 3638 hci_connection_t * connection; 3639 btstack_linked_list_iterator_t it; 3640 3641 // get code, signal identifier and command len 3642 uint8_t code = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET]; 3643 uint8_t sig_id = command[L2CAP_SIGNALING_COMMAND_SIGID_OFFSET]; 3644 uint16_t cmd_len = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET); 3645 3646 // general commands without an assigned channel 3647 switch(code) { 3648 3649 case CONNECTION_REQUEST: 3650 if (cmd_len == 4){ 3651 uint16_t psm = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3652 uint16_t source_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2); 3653 l2cap_handle_connection_request(handle, sig_id, psm, source_cid); 3654 } else { 3655 l2cap_register_signaling_response(handle, COMMAND_REJECT, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN); 3656 } 3657 return; 3658 3659 case ECHO_REQUEST: 3660 l2cap_register_signaling_response(handle, code, sig_id, 0, 0); 3661 return; 3662 3663 case INFORMATION_REQUEST: 3664 if (cmd_len == 2) { 3665 uint16_t info_type = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3666 l2cap_register_signaling_response(handle, code, sig_id, 0, info_type); 3667 return; 3668 } 3669 break; 3670 3671 case INFORMATION_RESPONSE: 3672 connection = hci_connection_for_handle(handle); 3673 if (!connection) return; 3674 switch (connection->l2cap_state.information_state){ 3675 case L2CAP_INFORMATION_STATE_W4_EXTENDED_FEATURE_RESPONSE: 3676 // get extended features from response if valid 3677 if (cmd_len >= 6) { 3678 uint16_t info_type = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3679 uint16_t result = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2); 3680 if (result == 0 && info_type == L2CAP_INFO_TYPE_EXTENDED_FEATURES_SUPPORTED) { 3681 connection->l2cap_state.extended_feature_mask = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4); 3682 } 3683 log_info("extended features mask 0x%02x", connection->l2cap_state.extended_feature_mask); 3684 if ((connection->l2cap_state.extended_feature_mask & 0x80) != 0){ 3685 connection->l2cap_state.information_state = L2CAP_INFORMATION_STATE_W2_SEND_FIXED_CHANNELS_REQUEST; 3686 } else { 3687 // information request complete 3688 l2cap_handle_information_request_complete(connection); 3689 } 3690 } 3691 break; 3692 case L2CAP_INFORMATION_STATE_W4_FIXED_CHANNELS_RESPONSE: 3693 if (cmd_len >= 12) { 3694 uint16_t info_type = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3695 uint16_t result = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2); 3696 if (result == 0 && info_type == L2CAP_INFO_TYPE_FIXED_CHANNELS_SUPPORTED) { 3697 connection->l2cap_state.fixed_channels_supported = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 4); 3698 } 3699 log_info("fixed channels mask 0x%02x", connection->l2cap_state.fixed_channels_supported); 3700 // information request complete 3701 l2cap_handle_information_request_complete(connection); 3702 } 3703 break; 3704 default: 3705 break; 3706 } 3707 return; 3708 3709 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 3710 case L2CAP_CREDIT_BASED_CONNECTION_REQUEST: 3711 case L2CAP_CREDIT_BASED_CONNECTION_RESPONSE: 3712 case L2CAP_CREDIT_BASED_RECONFIGURE_REQUEST: 3713 case L2CAP_CREDIT_BASED_RECONFIGURE_RESPONSE: 3714 l2cap_ecbm_signaling_handler_dispatch(handle, L2CAP_CID_SIGNALING, command, sig_id); 3715 return; 3716 case L2CAP_FLOW_CONTROL_CREDIT_INDICATION: 3717 // return if valid 3718 if (l2cap_credit_based_handle_credit_indication(handle, command, cmd_len)) return; 3719 break; 3720 3721 case COMMAND_REJECT: 3722 btstack_linked_list_iterator_init(&it, &l2cap_channels); 3723 while (btstack_linked_list_iterator_has_next(&it)) { 3724 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 3725 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 3726 if (channel->con_handle != handle) continue; 3727 if (channel->local_sig_id != sig_id) continue; 3728 if (channel->state != L2CAP_STATE_WAIT_ENHANCED_CONNECTION_RESPONSE) continue; 3729 3730 // open failed 3731 channel->state = L2CAP_STATE_CLOSED; 3732 l2cap_ecbm_emit_channel_opened(channel, 3733 ERROR_CODE_CONNECTION_REJECTED_DUE_TO_LIMITED_RESOURCES); 3734 // drop failed channel 3735 btstack_linked_list_iterator_remove(&it); 3736 l2cap_free_channel_entry(channel); 3737 } 3738 break; 3739 #endif 3740 3741 default: 3742 break; 3743 } 3744 3745 // Get potential destination CID 3746 uint16_t dest_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3747 3748 // Find channel for this sig_id and connection handle 3749 btstack_linked_list_iterator_init(&it, &l2cap_channels); 3750 while (btstack_linked_list_iterator_has_next(&it)){ 3751 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 3752 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 3753 if (channel->con_handle != handle) continue; 3754 if (code & 1) { 3755 // match odd commands (responses) by previous signaling identifier 3756 if (channel->local_sig_id == sig_id) { 3757 l2cap_signaling_handler_channel(channel, command); 3758 return; 3759 } 3760 } else { 3761 // match even commands (requests) by local channel id 3762 if (channel->local_cid == dest_cid) { 3763 l2cap_signaling_handler_channel(channel, command); 3764 return; 3765 } 3766 } 3767 } 3768 3769 // If dynamic channel cannot be found, either never set-up or already finalized, assume state CLOSED 3770 // Handle events as described in Core 5.4, Vol 3. Host, 6.1.1 CLOSED state 3771 switch (code){ 3772 case CONNECTION_RESPONSE: 3773 case CONFIGURE_RESPONSE: 3774 case DISCONNECTION_RESPONSE: 3775 // Ignore request 3776 break; 3777 default: 3778 // send command reject with reason unknown command 3779 l2cap_register_signaling_response(handle, COMMAND_REJECT, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN); 3780 break; 3781 } 3782 } 3783 #endif 3784 3785 #ifdef L2CAP_USES_CHANNELS 3786 static l2cap_service_t * l2cap_get_service_internal(btstack_linked_list_t * services, uint16_t psm){ 3787 btstack_linked_list_iterator_t it; 3788 btstack_linked_list_iterator_init(&it, services); 3789 while (btstack_linked_list_iterator_has_next(&it)){ 3790 l2cap_service_t * service = (l2cap_service_t *) btstack_linked_list_iterator_next(&it); 3791 if ( service->psm == psm){ 3792 return service; 3793 }; 3794 } 3795 return NULL; 3796 } 3797 #endif 3798 3799 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 3800 3801 static uint8_t l2cap_ecbm_setup_channels(btstack_linked_list_t * channels, 3802 btstack_packet_handler_t packet_handler, uint8_t num_channels, 3803 hci_connection_t * connection, uint16_t psm, uint16_t mtu, gap_security_level_t security_level){ 3804 uint8_t i; 3805 uint8_t status = ERROR_CODE_SUCCESS; 3806 for (i=0;i<num_channels;i++){ 3807 l2cap_channel_t * channel = l2cap_create_channel_entry(packet_handler, L2CAP_CHANNEL_TYPE_CHANNEL_ECBM, connection->address, connection->address_type, psm, mtu, security_level); 3808 if (!channel) { 3809 status = BTSTACK_MEMORY_ALLOC_FAILED; 3810 break; 3811 } 3812 channel->con_handle = connection->con_handle; 3813 btstack_linked_list_add_tail(channels, (btstack_linked_item_t *) channel); 3814 } 3815 3816 // free channels if not all allocated 3817 if (status != ERROR_CODE_SUCCESS){ 3818 while (true) { 3819 l2cap_channel_t * channel = (l2cap_channel_t *) btstack_linked_list_pop(channels); 3820 if (channel == NULL) break; 3821 l2cap_free_channel_entry(channel); 3822 } 3823 } 3824 3825 return status; 3826 } 3827 3828 static inline l2cap_service_t * l2cap_ecbm_get_service(uint16_t spsm){ 3829 return l2cap_get_service_internal(&l2cap_enhanced_services, spsm); 3830 } 3831 3832 static inline uint8_t l2cap_ecbm_status_for_result(uint16_t result) { 3833 switch (result) { 3834 case L2CAP_ECBM_CONNECTION_RESULT_ALL_SUCCESS: 3835 return ERROR_CODE_SUCCESS; 3836 case L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_SPSM_NOT_SUPPORTED: 3837 return L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_PSM; 3838 case L2CAP_ECBM_CONNECTION_RESULT_SOME_REFUSED_INSUFFICIENT_RESOURCES_AVAILABLE: 3839 return L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_RESOURCES; 3840 case L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_INSUFFICIENT_AUTHENTICATION: 3841 case L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_INSUFFICIENT_AUTHORIZATION: 3842 case L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_ENCYRPTION_KEY_SIZE_TOO_SHORT: 3843 case L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_INSUFFICIENT_ENCRYPTION: 3844 return L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_SECURITY; 3845 default: 3846 // invalid Source CID, Source CID already allocated, unacceptable parameters 3847 return L2CAP_CONNECTION_RESPONSE_UNKNOWN_ERROR; 3848 } 3849 } 3850 3851 static void 3852 l2cap_ecbm_emit_incoming_connection(l2cap_channel_t *channel, uint8_t num_channels) { 3853 uint8_t event[16]; 3854 event[0] = L2CAP_EVENT_ECBM_INCOMING_CONNECTION; 3855 event[1] = sizeof(event) - 2; 3856 event[2] = channel->address_type; 3857 reverse_bd_addr(channel->address, &event[3]); 3858 little_endian_store_16(event, 9, channel->con_handle); 3859 little_endian_store_16(event, 11, channel->psm); 3860 event[13] = num_channels; 3861 little_endian_store_16(event, 14, channel->local_cid); 3862 hci_dump_packet(HCI_EVENT_PACKET, 1, event, sizeof(event)); 3863 (*channel->packet_handler)(HCI_EVENT_PACKET, 0, event, sizeof(event)); 3864 } 3865 3866 static uint8_t 3867 l2cap_ecbm_security_status_for_connection_request(hci_con_handle_t handle, gap_security_level_t required_security_level, 3868 bool requires_authorization) { 3869 // check security in increasing error priority 3870 uint8_t security_status = L2CAP_ECBM_CONNECTION_RESULT_ALL_SUCCESS; 3871 3872 // security: check encryption 3873 if (required_security_level >= LEVEL_2) { 3874 if (gap_encryption_key_size(handle) < 16) { 3875 security_status = L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_ENCYRPTION_KEY_SIZE_TOO_SHORT; 3876 } 3877 if (gap_encryption_key_size(handle) == 0){ 3878 security_status = L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_INSUFFICIENT_ENCRYPTION; 3879 } 3880 } 3881 3882 // security: check authentication 3883 if (required_security_level >= LEVEL_3) { 3884 if (!gap_authenticated(handle)) { 3885 security_status = requires_authorization ? 3886 L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_INSUFFICIENT_AUTHORIZATION : 3887 L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_INSUFFICIENT_AUTHENTICATION; 3888 } 3889 } 3890 return security_status; 3891 } 3892 3893 static void l2cap_ecbm_handle_security_level_incoming(l2cap_channel_t * channel){ 3894 // count number of l2cap_channels in state L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE with same remote_sig_id 3895 uint8_t sig_id = channel->remote_sig_id; 3896 hci_con_handle_t con_handle = channel->con_handle; 3897 3898 uint8_t security_status = l2cap_ecbm_security_status_for_connection_request(channel->con_handle, 3899 channel->required_security_level, 3900 false); 3901 bool security_sufficient = security_status == L2CAP_ECBM_CONNECTION_RESULT_ALL_SUCCESS; 3902 3903 uint8_t num_channels = 0; 3904 btstack_linked_list_iterator_t it; 3905 btstack_linked_list_iterator_init(&it, &l2cap_channels); 3906 while (btstack_linked_list_iterator_has_next(&it)) { 3907 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 3908 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 3909 if (channel->con_handle != con_handle) continue; 3910 if (channel->remote_sig_id != sig_id) continue; 3911 if (channel->state != L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE) continue; 3912 num_channels++; 3913 3914 if (security_sufficient){ 3915 channel->state = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT; 3916 } else { 3917 btstack_linked_list_iterator_remove(&it); 3918 btstack_memory_l2cap_channel_free(channel); 3919 } 3920 } 3921 3922 if (security_sufficient){ 3923 l2cap_ecbm_emit_incoming_connection(channel, num_channels); 3924 } else { 3925 // combine signaling cid and number channels for l2cap_register_signaling_response 3926 uint16_t signaling_cid = L2CAP_CID_SIGNALING; 3927 uint16_t num_channels_and_signaling_cid = (num_channels << 8) | signaling_cid; 3928 l2cap_register_signaling_response(con_handle, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, sig_id, 3929 num_channels_and_signaling_cid, security_status); 3930 } 3931 } 3932 3933 void l2cap_ecbm_trigger_pending_connection_responses(hci_con_handle_t con_handle){ 3934 bool done = false; 3935 while (!done) { 3936 done = true; 3937 btstack_linked_list_iterator_t it; 3938 btstack_linked_list_iterator_init(&it, &l2cap_channels); 3939 while (btstack_linked_list_iterator_has_next(&it)) { 3940 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 3941 if (channel->channel_type != L2CAP_CHANNEL_TYPE_CHANNEL_ECBM) continue; 3942 if (channel->con_handle != con_handle) continue; 3943 if (channel->state == L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE) { 3944 l2cap_ecbm_handle_security_level_incoming(channel); 3945 done = false; 3946 }; 3947 } 3948 } 3949 } 3950 3951 static int l2cap_ecbm_signaling_handler_dispatch(hci_con_handle_t handle, uint16_t signaling_cid, uint8_t *command, 3952 uint8_t sig_id) { 3953 3954 hci_connection_t *connection; 3955 btstack_linked_list_iterator_t it; 3956 l2cap_service_t *service; 3957 uint16_t spsm; 3958 uint8_t num_channels; 3959 uint16_t num_channels_and_signaling_cid; 3960 uint8_t i; 3961 uint16_t new_mtu; 3962 uint16_t new_mps; 3963 uint16_t initial_credits; 3964 uint16_t result; 3965 uint8_t status; 3966 3967 uint8_t code = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET]; 3968 uint16_t len = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET); 3969 log_info("enhanced dispatch: command 0x%02x, sig id %u, len %u", code, sig_id, len); 3970 3971 switch (code) { 3972 case L2CAP_CREDIT_BASED_CONNECTION_REQUEST: 3973 // check size 3974 if (len < 10u) return 0u; 3975 3976 // get hci connection, bail if not found (must not happen) 3977 connection = hci_connection_for_handle(handle); 3978 btstack_assert(connection != NULL); 3979 3980 // get num channels to establish 3981 num_channels = (len - 8) / sizeof(uint16_t); 3982 3983 // combine signaling cid and number channels for l2cap_register_signaling_response 3984 num_channels_and_signaling_cid = (num_channels << 8) | signaling_cid; 3985 3986 // check if service registered 3987 spsm = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 3988 service = l2cap_ecbm_get_service(spsm); 3989 3990 if (service) { 3991 3992 uint16_t remote_mtu = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2); 3993 uint16_t remote_mps = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 4); 3994 uint16_t credits_outgoing = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 6); 3995 3996 // param: check remote mtu 3997 if (service->mtu > remote_mtu) { 3998 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, sig_id, 3999 num_channels_and_signaling_cid, L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_INVALID_PARAMETERS); 4000 return 1; 4001 } 4002 4003 // check if authentication is required and possible 4004 bool send_pending = false; 4005 uint8_t security_status = l2cap_ecbm_security_status_for_connection_request(handle, 4006 service->required_security_level, 4007 service->requires_authorization); 4008 if (security_status != L2CAP_ECBM_CONNECTION_RESULT_ALL_SUCCESS) { 4009 if (gap_get_bondable_mode() != 0) { 4010 // if possible, send pending and continue 4011 send_pending = true; 4012 } else { 4013 // otherwise, send refused and abort 4014 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, sig_id, 4015 num_channels_and_signaling_cid, security_status); 4016 return 1; 4017 } 4018 } 4019 4020 // report the last result code != 0 4021 result = 0; 4022 // store one of the local channels for the event 4023 l2cap_channel_t * a_channel = NULL; 4024 for (i = 0; i < num_channels; i++) { 4025 4026 // check source cids 4027 uint16_t source_cid = little_endian_read_16(command, 12 + (i * 2)); 4028 if (source_cid < 0x40u) { 4029 result = L2CAP_ECBM_CONNECTION_RESULT_SOME_REFUSED_INVALID_SOURCE_CID; 4030 continue; 4031 } 4032 4033 // go through list of channels for this ACL connection and check if we get a match 4034 btstack_linked_list_iterator_init(&it, &l2cap_channels); 4035 bool source_cid_allocated = false; 4036 while (btstack_linked_list_iterator_has_next(&it)) { 4037 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 4038 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 4039 if (channel->con_handle != handle) continue; 4040 if (channel->remote_cid != source_cid) continue; 4041 source_cid_allocated = true; 4042 break; 4043 } 4044 if (source_cid_allocated) { 4045 result = 0x00a; 4046 continue; 4047 } 4048 4049 // setup channel 4050 l2cap_channel_t *channel = l2cap_create_channel_entry(service->packet_handler, 4051 L2CAP_CHANNEL_TYPE_CHANNEL_ECBM, 4052 connection->address, 4053 connection->address_type, spsm, 4054 service->mtu, 4055 service->required_security_level); 4056 4057 if (channel == NULL) { 4058 // Some connections refused – insufficient resources available 4059 result = 0x004; 4060 continue; 4061 } 4062 4063 // setup state 4064 channel->state = L2CAP_STATE_WAIT_INCOMING_SECURITY_LEVEL_UPDATE; 4065 channel->state_var |= L2CAP_CHANNEL_STATE_VAR_INCOMING; 4066 channel->con_handle = connection->con_handle; 4067 channel->remote_sig_id = sig_id; 4068 channel->remote_cid = source_cid; 4069 channel->remote_mtu = remote_mtu; 4070 channel->remote_mps = remote_mps; 4071 channel->credits_outgoing = credits_outgoing; 4072 channel->cid_index = i; 4073 channel->num_cids = num_channels; 4074 4075 // if more than one error, we can report any of them 4076 channel->reason = result; 4077 4078 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 4079 4080 a_channel = channel; 4081 } 4082 4083 // if no channels have been created, all have been refused, and we can respond right away 4084 if (a_channel == NULL) { 4085 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, sig_id, 4086 num_channels_and_signaling_cid, result); 4087 return 1; 4088 } 4089 4090 // if security is pending, send intermediate response, otherwise, ask user 4091 if (send_pending){ 4092 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, sig_id, 4093 num_channels_and_signaling_cid, L2CAP_ECBM_CONNECTION_RESULT_ALL_PENDING_AUTHENTICATION); 4094 } else { 4095 // if security is ok but authorization is required, send intermediate response and ask user 4096 if (service->requires_authorization){ 4097 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, sig_id, 4098 num_channels_and_signaling_cid, L2CAP_ECBM_CONNECTION_RESULT_ALL_PENDING_AUTHORIZATION); 4099 } 4100 l2cap_ecbm_handle_security_level_incoming(a_channel); 4101 } 4102 4103 } else { 4104 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_CONNECTION_REQUEST, sig_id, 4105 num_channels_and_signaling_cid, L2CAP_ECBM_CONNECTION_RESULT_ALL_REFUSED_SPSM_NOT_SUPPORTED); 4106 } 4107 return 1; 4108 4109 case L2CAP_CREDIT_BASED_CONNECTION_RESPONSE: 4110 // check size 4111 if (len < 10u) return 0u; 4112 4113 // get hci connection, ignore if not found 4114 connection = hci_connection_for_handle(handle); 4115 if (connection == NULL) return 0; 4116 4117 // get channel config: mtu, mps, initial credits, result 4118 new_mtu = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0); 4119 new_mps = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2); 4120 initial_credits = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 4); 4121 result = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 6); 4122 status = l2cap_ecbm_status_for_result(result); 4123 4124 // get num channels to modify 4125 num_channels = (len - 8) / sizeof(uint16_t); 4126 btstack_linked_list_iterator_init(&it, &l2cap_channels); 4127 while (btstack_linked_list_iterator_has_next(&it)) { 4128 uint8_t channel_status = status; 4129 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 4130 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 4131 if (channel->con_handle != handle) continue; 4132 if (channel->local_sig_id != sig_id) continue; 4133 if (channel->state != L2CAP_STATE_WAIT_ENHANCED_CONNECTION_RESPONSE) continue; 4134 if (channel->cid_index < num_channels) { 4135 uint16_t remote_cid = little_endian_read_16(command, 12 + channel->cid_index * sizeof(uint16_t)); 4136 if (remote_cid != 0) { 4137 // check for duplicate remote CIDs 4138 l2cap_channel_t * original_channel = l2cap_get_channel_for_remote_handle_and_cid(handle, remote_cid); 4139 if (original_channel == NULL){ 4140 channel->state = L2CAP_STATE_OPEN; 4141 channel->remote_cid = remote_cid; 4142 channel->remote_mtu = new_mtu; 4143 channel->remote_mps = new_mps; 4144 channel->credits_outgoing = initial_credits; 4145 l2cap_ecbm_emit_channel_opened(channel, ERROR_CODE_SUCCESS); 4146 continue; 4147 } 4148 // close original channel 4149 original_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 4150 channel_status = ERROR_CODE_ACL_CONNECTION_ALREADY_EXISTS; 4151 } 4152 } 4153 // open failed 4154 l2cap_ecbm_emit_channel_opened(channel, channel_status); 4155 // drop failed channel 4156 btstack_linked_list_iterator_remove(&it); 4157 btstack_memory_l2cap_channel_free(channel); 4158 } 4159 return 1; 4160 4161 case L2CAP_CREDIT_BASED_RECONFIGURE_REQUEST: 4162 // check minimal size 4163 if (len < 6) return 0u; 4164 4165 // get hci connection, bail if not found (must not happen) 4166 connection = hci_connection_for_handle(handle); 4167 btstack_assert(connection != NULL); 4168 4169 // get num channels to modify 4170 num_channels = (len - 4) / sizeof(uint16_t); 4171 4172 // get new mtu and mps 4173 new_mtu = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0); 4174 new_mps = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2); 4175 4176 // validate request 4177 result = 0; 4178 for (i = 0; i < num_channels; i++) { 4179 // check cid 4180 uint16_t remote_cid = little_endian_read_16(command, 8 + (i * sizeof(uint16_t))); 4181 l2cap_channel_t *channel = l2cap_get_channel_for_remote_handle_and_cid(handle, remote_cid); 4182 if (channel == NULL) { 4183 result = L2CAP_ECBM_RECONFIGURE_FAILED_DESTINATION_CID_INVALID; 4184 break; 4185 } 4186 // check MTU is not reduced 4187 if (channel->remote_mtu > new_mtu) { 4188 result = L2CAP_ECBM_RECONFIGURE_FAILED_MTU_REDUCTION_NOT_ALLOWED; 4189 break; 4190 } 4191 // check MPS reduction 4192 if ((num_channels > 1) && (channel->remote_mps > new_mps)) { 4193 result = L2CAP_ECBM_RECONFIGURE_FAILED_MPS_REDUCTION_MULTIPLE_CHANNELS; 4194 break; 4195 } 4196 // check MPS valid 4197 if (new_mps < l2cap_enhanced_mps_min) { 4198 result = L2CAP_ECBM_RECONFIGURE_FAILED_UNACCEPTABLE_PARAMETERS; 4199 break; 4200 } 4201 } 4202 4203 // send reject 4204 if (result != 0) { 4205 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_RECONFIGURE_REQUEST, sig_id, signaling_cid, 4206 result); 4207 return 1; 4208 } 4209 4210 // update channels 4211 for (i = 0; i < num_channels; i++) { 4212 uint16_t remote_cid = little_endian_read_16(command, 8 + (i * sizeof(uint16_t))); 4213 l2cap_channel_t *channel = l2cap_get_channel_for_remote_handle_and_cid(handle, remote_cid); 4214 channel->remote_mps = new_mps; 4215 channel->remote_mtu = new_mtu; 4216 // emit event 4217 uint8_t event[8]; 4218 event[0] = L2CAP_EVENT_ECBM_RECONFIGURED; 4219 event[1] = sizeof(event) - 2; 4220 little_endian_store_16(event, 2, channel->local_cid); 4221 little_endian_store_16(event, 4, new_mtu); 4222 little_endian_store_16(event, 6, new_mps); 4223 l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event)); 4224 } 4225 4226 // send accept 4227 l2cap_register_signaling_response(handle, L2CAP_CREDIT_BASED_RECONFIGURE_REQUEST, sig_id, signaling_cid, 0); 4228 return 1; 4229 4230 case L2CAP_CREDIT_BASED_RECONFIGURE_RESPONSE: 4231 // check size 4232 if (len < 2u) return 0u; 4233 4234 result = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0); 4235 btstack_linked_list_iterator_init(&it, &l2cap_channels); 4236 while (btstack_linked_list_iterator_has_next(&it)) { 4237 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 4238 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 4239 if (channel->con_handle != handle) continue; 4240 if (channel->local_sig_id != sig_id) continue; 4241 if (channel->state != L2CAP_STATE_WAIT_ENHANCED_RENEGOTIATION_RESPONSE) continue; 4242 // complete request 4243 if (result == 0) { 4244 channel->receive_sdu_buffer = channel->renegotiate_sdu_buffer; 4245 channel->local_mtu = channel->renegotiate_mtu; 4246 } 4247 channel->state = L2CAP_STATE_OPEN; 4248 // emit event 4249 l2cap_ecbm_emit_reconfigure_complete(channel, result); 4250 } 4251 break; 4252 4253 default: 4254 btstack_unreachable(); 4255 break; 4256 } 4257 return 0; 4258 } 4259 4260 #endif 4261 4262 #ifdef ENABLE_BLE 4263 4264 static void l2cap_emit_connection_parameter_update_response(hci_con_handle_t con_handle, uint16_t result){ 4265 uint8_t event[6]; 4266 event[0] = L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_RESPONSE; 4267 event[1] = 4; 4268 little_endian_store_16(event, 2, con_handle); 4269 little_endian_store_16(event, 4, result); 4270 l2cap_emit_event(event, sizeof(event)); 4271 } 4272 4273 // @return valid 4274 static int l2cap_le_signaling_handler_dispatch(hci_con_handle_t handle, uint8_t * command, uint8_t sig_id){ 4275 hci_connection_t * connection; 4276 uint16_t result; 4277 uint8_t event[12]; 4278 4279 #ifdef L2CAP_USES_CREDIT_BASED_CHANNELS 4280 l2cap_channel_t * channel; 4281 btstack_linked_list_iterator_t it; 4282 #endif 4283 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 4284 uint16_t local_cid; 4285 uint16_t le_psm; 4286 l2cap_service_t * service; 4287 uint16_t source_cid; 4288 #endif 4289 4290 uint8_t code = command[L2CAP_SIGNALING_COMMAND_CODE_OFFSET]; 4291 uint16_t len = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET); 4292 log_info("le dispatch: command 0x%02x, sig id %u, len %u", code, sig_id, len); 4293 4294 switch (code){ 4295 4296 case CONNECTION_PARAMETER_UPDATE_REQUEST: 4297 // check size 4298 if (len < 8u) return 0u; 4299 connection = hci_connection_for_handle(handle); 4300 if (connection != NULL){ 4301 if (connection->role != HCI_ROLE_MASTER){ 4302 // reject command without notifying upper layer when not in master role 4303 return 0; 4304 } 4305 le_connection_parameter_range_t existing_range; 4306 gap_get_connection_parameter_range(&existing_range); 4307 uint16_t le_conn_interval_min = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET); 4308 uint16_t le_conn_interval_max = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET+2); 4309 uint16_t le_conn_latency = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET+4); 4310 uint16_t le_supervision_timeout = little_endian_read_16(command,L2CAP_SIGNALING_COMMAND_DATA_OFFSET+6); 4311 4312 int update_parameter = gap_connection_parameter_range_included(&existing_range, le_conn_interval_min, le_conn_interval_max, le_conn_latency, le_supervision_timeout); 4313 if (update_parameter){ 4314 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_SEND_RESPONSE; 4315 connection->le_conn_interval_min = le_conn_interval_min; 4316 connection->le_conn_interval_max = le_conn_interval_max; 4317 connection->le_conn_latency = le_conn_latency; 4318 connection->le_supervision_timeout = le_supervision_timeout; 4319 } else { 4320 connection->le_con_parameter_update_state = CON_PARAMETER_UPDATE_DENY; 4321 } 4322 connection->le_con_param_update_identifier = sig_id; 4323 } 4324 4325 event[0] = L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_REQUEST; 4326 event[1] = 10; 4327 little_endian_store_16(event, 2, handle); 4328 (void)memcpy(&event[4], &command[4], 8); 4329 l2cap_emit_event(event, sizeof(event)); 4330 break; 4331 4332 case CONNECTION_PARAMETER_UPDATE_RESPONSE: 4333 // check size 4334 if (len < 2u) return 0u; 4335 result = little_endian_read_16(command, 4); 4336 l2cap_emit_connection_parameter_update_response(handle, result); 4337 break; 4338 4339 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 4340 case L2CAP_CREDIT_BASED_CONNECTION_REQUEST: 4341 case L2CAP_CREDIT_BASED_CONNECTION_RESPONSE: 4342 case L2CAP_CREDIT_BASED_RECONFIGURE_REQUEST: 4343 case L2CAP_CREDIT_BASED_RECONFIGURE_RESPONSE: 4344 return l2cap_ecbm_signaling_handler_dispatch(handle, L2CAP_CID_SIGNALING_LE, command, sig_id); 4345 #endif 4346 4347 #ifdef L2CAP_USES_CREDIT_BASED_CHANNELS 4348 case COMMAND_REJECT: 4349 btstack_linked_list_iterator_init(&it, &l2cap_channels); 4350 while (btstack_linked_list_iterator_has_next(&it)){ 4351 channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 4352 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 4353 if (channel->con_handle != handle) continue; 4354 if (channel->local_sig_id != sig_id) continue; 4355 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 4356 // if received while waiting for le connection response, assume legacy device 4357 if (channel->state == L2CAP_STATE_WAIT_LE_CONNECTION_RESPONSE){ 4358 channel->state = L2CAP_STATE_CLOSED; 4359 // no official value for this, use: Connection refused – LE_PSM not supported 4360 l2cap_cbm_emit_channel_opened(channel, L2CAP_CBM_CONNECTION_RESULT_SPSM_NOT_SUPPORTED); 4361 4362 // discard channel 4363 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 4364 l2cap_free_channel_entry(channel); 4365 continue; 4366 } 4367 #endif 4368 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 4369 // if received while waiting for le connection response, assume legacy device 4370 if (channel->state == L2CAP_STATE_WAIT_ENHANCED_CONNECTION_RESPONSE){ 4371 channel->state = L2CAP_STATE_CLOSED; 4372 // treat as SPSM not supported 4373 l2cap_ecbm_emit_channel_opened(channel, L2CAP_CONNECTION_RESPONSE_RESULT_REFUSED_PSM); 4374 4375 // discard channel 4376 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 4377 l2cap_free_channel_entry(channel); 4378 continue; 4379 } 4380 #endif 4381 } 4382 break; 4383 #endif 4384 4385 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 4386 case LE_CREDIT_BASED_CONNECTION_REQUEST: 4387 // check size 4388 if (len < 10u) return 0u; 4389 4390 // get hci connection, bail if not found (must not happen) 4391 connection = hci_connection_for_handle(handle); 4392 if (!connection) return 0; 4393 4394 // check if service registered 4395 le_psm = little_endian_read_16(command, 4); 4396 service = l2cap_cbm_get_service(le_psm); 4397 source_cid = little_endian_read_16(command, 6); 4398 4399 if (service){ 4400 if (source_cid < 0x40u){ 4401 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_INVALID_SOURCE_CID); 4402 return 1; 4403 } 4404 4405 // go through list of channels for this ACL connection and check if we get a match 4406 btstack_linked_list_iterator_init(&it, &l2cap_channels); 4407 while (btstack_linked_list_iterator_has_next(&it)){ 4408 l2cap_channel_t * a_channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 4409 if (!l2cap_is_dynamic_channel_type(a_channel->channel_type)) continue; 4410 if (a_channel->con_handle != handle) continue; 4411 if (a_channel->remote_cid != source_cid) continue; 4412 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_SOURCE_CID_ALREADY_ALLOCATED); 4413 return 1; 4414 } 4415 4416 // security: check encryption 4417 if (service->required_security_level >= LEVEL_2){ 4418 if (gap_encryption_key_size(handle) == 0){ 4419 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_INSUFFICIENT_ENCRYPTION); 4420 return 1; 4421 } 4422 // anything less than 16 byte key size is insufficient 4423 if (gap_encryption_key_size(handle) < 16){ 4424 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_ENCYRPTION_KEY_SIZE_TOO_SHORT); 4425 return 1; 4426 } 4427 } 4428 4429 // security: check authentication 4430 if (service->required_security_level >= LEVEL_3){ 4431 if (!gap_authenticated(handle)){ 4432 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_INSUFFICIENT_AUTHENTICATION); 4433 return 1; 4434 } 4435 } 4436 4437 // security: check authorization 4438 if (service->required_security_level >= LEVEL_4){ 4439 if (gap_authorization_state(handle) != AUTHORIZATION_GRANTED){ 4440 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_INSUFFICIENT_AUTHORIZATION); 4441 return 1; 4442 } 4443 } 4444 4445 // allocate channel 4446 channel = l2cap_create_channel_entry(service->packet_handler, L2CAP_CHANNEL_TYPE_CHANNEL_CBM, connection->address, 4447 BD_ADDR_TYPE_LE_RANDOM, le_psm, service->mtu, service->required_security_level); 4448 if (!channel){ 4449 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_NO_RESOURCES_AVAILABLE); 4450 return 1; 4451 } 4452 4453 channel->con_handle = handle; 4454 channel->remote_cid = source_cid; 4455 channel->remote_sig_id = sig_id; 4456 channel->remote_mtu = little_endian_read_16(command, 8); 4457 channel->remote_mps = little_endian_read_16(command, 10); 4458 channel->credits_outgoing = little_endian_read_16(command, 12); 4459 4460 // set initial state 4461 channel->state = L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT; 4462 channel->state_var |= L2CAP_CHANNEL_STATE_VAR_INCOMING; 4463 4464 // add to connections list 4465 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 4466 4467 // post connection request event 4468 l2cap_cbm_emit_incoming_connection(channel); 4469 4470 } else { 4471 l2cap_register_signaling_response(handle, LE_CREDIT_BASED_CONNECTION_REQUEST, sig_id, source_cid, L2CAP_CBM_CONNECTION_RESULT_SPSM_NOT_SUPPORTED); 4472 } 4473 break; 4474 4475 case LE_CREDIT_BASED_CONNECTION_RESPONSE: 4476 // check size 4477 if (len < 10u) return 0u; 4478 4479 // Find channel for this sig_id and connection handle 4480 channel = NULL; 4481 btstack_linked_list_iterator_init(&it, &l2cap_channels); 4482 while (btstack_linked_list_iterator_has_next(&it)){ 4483 l2cap_channel_t * a_channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 4484 if (!l2cap_is_dynamic_channel_type(a_channel->channel_type)) continue; 4485 if (a_channel->con_handle != handle) continue; 4486 if (a_channel->local_sig_id != sig_id) continue; 4487 channel = a_channel; 4488 break; 4489 } 4490 if (!channel) break; 4491 4492 // cid + 0 4493 result = little_endian_read_16 (command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET+8); 4494 if (result){ 4495 channel->state = L2CAP_STATE_CLOSED; 4496 uint8_t status = l2cap_cbm_status_for_result(result); 4497 l2cap_cbm_emit_channel_opened(channel, status); 4498 4499 // discard channel 4500 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 4501 l2cap_free_channel_entry(channel); 4502 break; 4503 } 4504 4505 // success 4506 channel->remote_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0); 4507 channel->remote_mtu = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2); 4508 channel->remote_mps = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 4); 4509 channel->credits_outgoing = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 6); 4510 channel->state = L2CAP_STATE_OPEN; 4511 l2cap_cbm_emit_channel_opened(channel, ERROR_CODE_SUCCESS); 4512 break; 4513 #endif 4514 4515 #ifdef L2CAP_USES_CREDIT_BASED_CHANNELS 4516 case L2CAP_FLOW_CONTROL_CREDIT_INDICATION: 4517 return l2cap_credit_based_handle_credit_indication(handle, command, len) ? 1 : 0; 4518 4519 case DISCONNECTION_REQUEST: 4520 // check size 4521 if (len < 4u) return 0u; 4522 4523 // find channel 4524 local_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0); 4525 channel = l2cap_get_channel_for_local_cid_and_handle(local_cid, handle); 4526 if (!channel) { 4527 l2cap_register_signaling_response(handle, DISCONNECTION_REQUEST, sig_id, 4528 little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2), local_cid); 4529 break; 4530 } 4531 channel->remote_sig_id = sig_id; 4532 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_RESPONSE; 4533 break; 4534 4535 case DISCONNECTION_RESPONSE: 4536 // check size 4537 if (len < 4u) return 0u; 4538 4539 // find channel 4540 local_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0); 4541 channel = l2cap_get_channel_for_local_cid_and_handle(local_cid, handle); 4542 if (!channel) break; 4543 if (channel->local_sig_id == sig_id) { 4544 if (channel->state == L2CAP_STATE_WAIT_DISCONNECT){ 4545 l2cap_finalize_channel_close(channel); 4546 } 4547 } 4548 break; 4549 #endif 4550 4551 default: 4552 // command unknown -> reject command 4553 return 0; 4554 } 4555 return 1; 4556 } 4557 #endif 4558 4559 #ifdef ENABLE_CLASSIC 4560 static void l2cap_acl_classic_handler_for_channel(l2cap_channel_t * l2cap_channel, uint8_t * packet, uint16_t size){ 4561 4562 // forward data only in OPEN state 4563 if (l2cap_channel->state != L2CAP_STATE_OPEN) return; 4564 4565 #ifdef L2CAP_USES_CREDIT_BASED_CHANNELS 4566 if (l2cap_channel->channel_type == L2CAP_CHANNEL_TYPE_CHANNEL_ECBM){ 4567 l2cap_credit_based_handle_pdu(l2cap_channel, packet, size); 4568 return; 4569 } 4570 #endif 4571 4572 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 4573 if (l2cap_channel->mode == L2CAP_CHANNEL_MODE_ENHANCED_RETRANSMISSION){ 4574 4575 int fcs_size = l2cap_channel->fcs_option ? 2 : 0; 4576 4577 // assert control + FCS fields are inside 4578 if (size < COMPLETE_L2CAP_HEADER+2+fcs_size) return; 4579 4580 if (l2cap_channel->fcs_option){ 4581 // verify FCS (required if one side requested it) 4582 uint16_t fcs_calculated = crc16_calc(&packet[4], size - (4+2)); 4583 uint16_t fcs_packet = little_endian_read_16(packet, size-2); 4584 4585 #ifdef L2CAP_ERTM_SIMULATE_FCS_ERROR_INTERVAL 4586 // simulate fcs error 4587 static int counter = 0; 4588 if (++counter == L2CAP_ERTM_SIMULATE_FCS_ERROR_INTERVAL) { 4589 log_info("Simulate fcs error"); 4590 fcs_calculated++; 4591 counter = 0; 4592 } 4593 #endif 4594 4595 if (fcs_calculated == fcs_packet){ 4596 log_info("Packet FCS 0x%04x verified", fcs_packet); 4597 } else { 4598 log_error("FCS mismatch! Packet 0x%04x, calculated 0x%04x", fcs_packet, fcs_calculated); 4599 // ERTM State Machine in Bluetooth Spec does not handle 'I-Frame with invalid FCS' 4600 return; 4601 } 4602 } 4603 4604 // switch on packet type 4605 uint16_t control = little_endian_read_16(packet, COMPLETE_L2CAP_HEADER); 4606 uint8_t req_seq = (control >> 8) & 0x3f; 4607 int final = (control >> 7) & 0x01; 4608 if (control & 1){ 4609 // S-Frame 4610 int poll = (control >> 4) & 0x01; 4611 l2cap_supervisory_function_t s = (l2cap_supervisory_function_t) ((control >> 2) & 0x03); 4612 log_info("Control: 0x%04x => Supervisory function %u, ReqSeq %02u", control, (int) s, req_seq); 4613 l2cap_ertm_tx_packet_state_t * tx_state; 4614 switch (s){ 4615 case L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY: 4616 log_info("L2CAP_SUPERVISORY_FUNCTION_RR_RECEIVER_READY"); 4617 l2cap_ertm_process_req_seq(l2cap_channel, req_seq); 4618 if (poll && final){ 4619 // S-frames shall not be transmitted with both the F-bit and the P-bit set to 1 at the same time. 4620 log_error("P=F=1 in S-Frame"); 4621 break; 4622 } 4623 if (poll){ 4624 // check if we did request selective retransmission before <==> we have stored SDU segments 4625 int i; 4626 int num_stored_out_of_order_packets = 0; 4627 for (i=0;i<l2cap_channel->num_rx_buffers;i++){ 4628 int index = l2cap_channel->rx_store_index + i; 4629 if (index >= l2cap_channel->num_rx_buffers){ 4630 index -= l2cap_channel->num_rx_buffers; 4631 } 4632 l2cap_ertm_rx_packet_state_t * rx_state = &l2cap_channel->rx_packets_state[index]; 4633 if (!rx_state->valid) continue; 4634 num_stored_out_of_order_packets++; 4635 } 4636 if (num_stored_out_of_order_packets){ 4637 l2cap_channel->send_supervisor_frame_selective_reject = 1; 4638 } else { 4639 l2cap_channel->send_supervisor_frame_receiver_ready = 1; 4640 } 4641 l2cap_channel->set_final_bit_after_packet_with_poll_bit_set = 1; 4642 } 4643 if (final){ 4644 // Stop-MonitorTimer 4645 l2cap_ertm_stop_monitor_timer(l2cap_channel); 4646 // If UnackedFrames > 0 then Start-RetransTimer 4647 if (l2cap_channel->unacked_frames){ 4648 l2cap_ertm_start_retransmission_timer(l2cap_channel); 4649 } 4650 // final bit set <- response to RR with poll bit set. All not acknowledged packets need to be retransmitted 4651 l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel); 4652 } 4653 break; 4654 case L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT: 4655 log_info("L2CAP_SUPERVISORY_FUNCTION_REJ_REJECT"); 4656 l2cap_ertm_process_req_seq(l2cap_channel, req_seq); 4657 // restart transmittion from last unacknowledted packet (earlier packets already freed in l2cap_ertm_process_req_seq) 4658 l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel); 4659 break; 4660 case L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY: 4661 log_error("L2CAP_SUPERVISORY_FUNCTION_RNR_RECEIVER_NOT_READY"); 4662 break; 4663 case L2CAP_SUPERVISORY_FUNCTION_SREJ_SELECTIVE_REJECT: 4664 log_info("L2CAP_SUPERVISORY_FUNCTION_SREJ_SELECTIVE_REJECT"); 4665 if (poll){ 4666 l2cap_ertm_process_req_seq(l2cap_channel, req_seq); 4667 } 4668 // find requested i-frame 4669 tx_state = l2cap_ertm_get_tx_state(l2cap_channel, req_seq); 4670 if (tx_state){ 4671 log_info("Retransmission for tx_seq %u requested", req_seq); 4672 l2cap_channel->set_final_bit_after_packet_with_poll_bit_set = poll; 4673 tx_state->retransmission_requested = 1; 4674 l2cap_channel->srej_active = 1; 4675 } 4676 break; 4677 default: 4678 break; 4679 } 4680 } else { 4681 // I-Frame 4682 // get control 4683 l2cap_segmentation_and_reassembly_t sar = (l2cap_segmentation_and_reassembly_t) (control >> 14); 4684 uint8_t tx_seq = (control >> 1) & 0x3f; 4685 log_info("Control: 0x%04x => SAR %u, ReqSeq %02u, R?, TxSeq %02u", control, (int) sar, req_seq, tx_seq); 4686 log_info("SAR: pos %u", l2cap_channel->reassembly_pos); 4687 log_info("State: expected_tx_seq %02u, req_seq %02u", l2cap_channel->expected_tx_seq, l2cap_channel->req_seq); 4688 l2cap_ertm_process_req_seq(l2cap_channel, req_seq); 4689 if (final){ 4690 // final bit set <- response to RR with poll bit set. All not acknowledged packets need to be retransmitted 4691 l2cap_ertm_retransmit_unacknowleded_frames(l2cap_channel); 4692 } 4693 4694 // get SDU 4695 const uint8_t * payload_data = &packet[COMPLETE_L2CAP_HEADER+2]; 4696 uint16_t payload_len = size-(COMPLETE_L2CAP_HEADER+2+fcs_size); 4697 4698 // assert SDU size is smaller or equal to our buffers 4699 uint16_t max_payload_size = 0; 4700 switch (sar){ 4701 case L2CAP_SEGMENTATION_AND_REASSEMBLY_UNSEGMENTED_L2CAP_SDU: 4702 case L2CAP_SEGMENTATION_AND_REASSEMBLY_START_OF_L2CAP_SDU: 4703 // SDU Length + MPS 4704 max_payload_size = l2cap_channel->local_mps + 2; 4705 break; 4706 case L2CAP_SEGMENTATION_AND_REASSEMBLY_CONTINUATION_OF_L2CAP_SDU: 4707 case L2CAP_SEGMENTATION_AND_REASSEMBLY_END_OF_L2CAP_SDU: 4708 max_payload_size = l2cap_channel->local_mps; 4709 break; 4710 default: 4711 btstack_assert(false); 4712 break; 4713 } 4714 if (payload_len > max_payload_size){ 4715 log_info("payload len %u > max payload %u -> drop packet", payload_len, max_payload_size); 4716 return; 4717 } 4718 4719 // check ordering 4720 if (l2cap_channel->expected_tx_seq == tx_seq){ 4721 log_info("Received expected frame with TxSeq == ExpectedTxSeq == %02u", tx_seq); 4722 l2cap_channel->expected_tx_seq = l2cap_next_ertm_seq_nr(l2cap_channel->expected_tx_seq); 4723 l2cap_channel->req_seq = l2cap_channel->expected_tx_seq; 4724 4725 // process SDU 4726 l2cap_ertm_handle_in_sequence_sdu(l2cap_channel, sar, payload_data, payload_len); 4727 4728 // process stored segments 4729 while (true){ 4730 int index = l2cap_channel->rx_store_index; 4731 l2cap_ertm_rx_packet_state_t * rx_state = &l2cap_channel->rx_packets_state[index]; 4732 if (!rx_state->valid) break; 4733 4734 log_info("Processing stored frame with TxSeq == ExpectedTxSeq == %02u", l2cap_channel->expected_tx_seq); 4735 l2cap_channel->expected_tx_seq = l2cap_next_ertm_seq_nr(l2cap_channel->expected_tx_seq); 4736 l2cap_channel->req_seq = l2cap_channel->expected_tx_seq; 4737 4738 rx_state->valid = 0; 4739 l2cap_ertm_handle_in_sequence_sdu(l2cap_channel, rx_state->sar, &l2cap_channel->rx_packets_data[index], rx_state->len); 4740 4741 // update rx store index 4742 index++; 4743 if (index >= l2cap_channel->num_rx_buffers){ 4744 index = 0; 4745 } 4746 l2cap_channel->rx_store_index = index; 4747 } 4748 4749 // 4750 l2cap_channel->send_supervisor_frame_receiver_ready = 1; 4751 4752 } else { 4753 int delta = (tx_seq - l2cap_channel->expected_tx_seq) & 0x3f; 4754 if (delta < 2){ 4755 // store segment 4756 l2cap_ertm_handle_out_of_sequence_sdu(l2cap_channel, sar, delta, payload_data, payload_len); 4757 4758 log_info("Received unexpected frame TxSeq %u but expected %u -> send S-SREJ", tx_seq, l2cap_channel->expected_tx_seq); 4759 l2cap_channel->send_supervisor_frame_selective_reject = 1; 4760 } else { 4761 log_info("Received unexpected frame TxSeq %u but expected %u -> send S-REJ", tx_seq, l2cap_channel->expected_tx_seq); 4762 l2cap_channel->send_supervisor_frame_reject = 1; 4763 } 4764 } 4765 } 4766 return; 4767 } 4768 #endif 4769 4770 // check size 4771 uint16_t payload_size = size - COMPLETE_L2CAP_HEADER; 4772 if (l2cap_channel->local_mtu < payload_size) return; 4773 4774 l2cap_dispatch_to_channel(l2cap_channel, L2CAP_DATA_PACKET, &packet[COMPLETE_L2CAP_HEADER], payload_size); 4775 } 4776 #endif 4777 4778 static void l2cap_acl_classic_handler(hci_con_handle_t handle, uint8_t *packet, uint16_t size){ 4779 #ifdef ENABLE_CLASSIC 4780 l2cap_channel_t * l2cap_channel; 4781 l2cap_fixed_channel_t * l2cap_fixed_channel; 4782 4783 uint16_t channel_id = READ_L2CAP_CHANNEL_ID(packet); 4784 uint8_t broadcast_flag = READ_ACL_FLAGS(packet) >> 2; 4785 switch (channel_id) { 4786 4787 case L2CAP_CID_SIGNALING: { 4788 if (broadcast_flag != 0) break; 4789 uint32_t command_offset = 8; 4790 while ((command_offset + L2CAP_SIGNALING_COMMAND_DATA_OFFSET) < size) { 4791 // assert signaling command is fully inside packet 4792 uint16_t data_len = little_endian_read_16(packet, command_offset + L2CAP_SIGNALING_COMMAND_LENGTH_OFFSET); 4793 uint32_t next_command_offset = command_offset + L2CAP_SIGNALING_COMMAND_DATA_OFFSET + data_len; 4794 if (next_command_offset > size){ 4795 log_error("l2cap signaling command len invalid -> drop"); 4796 break; 4797 } 4798 // handle signaling command 4799 l2cap_signaling_handler_dispatch(handle, &packet[command_offset]); 4800 // go to next command 4801 command_offset = next_command_offset; 4802 } 4803 break; 4804 } 4805 4806 case L2CAP_CID_CONNECTIONLESS_CHANNEL: 4807 if (broadcast_flag == 0) break; 4808 l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_CONNECTIONLESS_CHANNEL); 4809 if (!l2cap_fixed_channel) break; 4810 if (!l2cap_fixed_channel->packet_handler) break; 4811 (*l2cap_fixed_channel->packet_handler)(UCD_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER); 4812 break; 4813 4814 #ifdef ENABLE_BLE 4815 case L2CAP_CID_BR_EDR_SECURITY_MANAGER: 4816 l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_BR_EDR_SECURITY_MANAGER); 4817 if ((l2cap_fixed_channel == NULL) || (l2cap_fixed_channel->packet_handler == NULL)){ 4818 // Pairing Failed 4819 l2cap_register_signaling_response(handle, (uint8_t) SM_PAIRING_FAILED, 0, L2CAP_CID_BR_EDR_SECURITY_MANAGER, SM_REASON_PAIRING_NOT_SUPPORTED); 4820 } else { 4821 (*l2cap_fixed_channel->packet_handler)(SM_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER); 4822 } 4823 break; 4824 #endif 4825 4826 default: 4827 if (broadcast_flag != 0) break; 4828 // Find channel for this channel_id and connection handle 4829 l2cap_channel = l2cap_get_channel_for_local_cid_and_handle(channel_id, handle); 4830 if (l2cap_channel != NULL){ 4831 l2cap_acl_classic_handler_for_channel(l2cap_channel, packet, size); 4832 } 4833 break; 4834 } 4835 #else 4836 UNUSED(handle); // ok: no code 4837 UNUSED(packet); // ok: no code 4838 UNUSED(size); // ok: no code 4839 #endif 4840 } 4841 4842 static void l2cap_acl_le_handler(hci_con_handle_t handle, uint8_t *packet, uint16_t size){ 4843 #ifdef ENABLE_BLE 4844 4845 l2cap_fixed_channel_t * l2cap_fixed_channel; 4846 4847 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 4848 l2cap_channel_t * l2cap_channel; 4849 #endif 4850 uint16_t channel_id = READ_L2CAP_CHANNEL_ID(packet); 4851 switch (channel_id) { 4852 4853 case L2CAP_CID_SIGNALING_LE: { 4854 uint8_t sig_id = packet[COMPLETE_L2CAP_HEADER + 1]; 4855 uint16_t len = little_endian_read_16(packet, COMPLETE_L2CAP_HEADER + 2); 4856 if ((COMPLETE_L2CAP_HEADER + 4u + len) > size) break; 4857 int valid = l2cap_le_signaling_handler_dispatch(handle, &packet[COMPLETE_L2CAP_HEADER], sig_id); 4858 if (!valid){ 4859 l2cap_register_signaling_response(handle, COMMAND_REJECT_LE, sig_id, 0, L2CAP_REJ_CMD_UNKNOWN); 4860 } 4861 break; 4862 } 4863 4864 case L2CAP_CID_ATTRIBUTE_PROTOCOL: 4865 l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_ATTRIBUTE_PROTOCOL); 4866 if (!l2cap_fixed_channel) break; 4867 if (!l2cap_fixed_channel->packet_handler) break; 4868 (*l2cap_fixed_channel->packet_handler)(ATT_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER); 4869 break; 4870 4871 case L2CAP_CID_SECURITY_MANAGER_PROTOCOL: 4872 l2cap_fixed_channel = l2cap_fixed_channel_for_channel_id(L2CAP_CID_SECURITY_MANAGER_PROTOCOL); 4873 if ((l2cap_fixed_channel == NULL) || (l2cap_fixed_channel->packet_handler == NULL)){ 4874 // Pairing Failed 4875 l2cap_register_signaling_response(handle, (uint8_t) SM_PAIRING_FAILED, 0, L2CAP_CID_SECURITY_MANAGER_PROTOCOL, SM_REASON_PAIRING_NOT_SUPPORTED); 4876 } else { 4877 (*l2cap_fixed_channel->packet_handler)(SM_DATA_PACKET, handle, &packet[COMPLETE_L2CAP_HEADER], size-COMPLETE_L2CAP_HEADER); 4878 } 4879 break; 4880 4881 default: 4882 4883 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 4884 l2cap_channel = l2cap_get_channel_for_local_cid_and_handle(channel_id, handle); 4885 if (l2cap_channel != NULL) { 4886 l2cap_credit_based_handle_pdu(l2cap_channel, packet, size); 4887 } 4888 #endif 4889 break; 4890 } 4891 #else 4892 UNUSED(handle); // ok: no code 4893 UNUSED(packet); // ok: no code 4894 UNUSED(size); // ok: no code 4895 #endif 4896 } 4897 4898 static void l2cap_acl_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ 4899 UNUSED(packet_type); // ok: registered with hci_register_acl_packet_handler 4900 UNUSED(channel); // ok: there is no channel 4901 4902 // Assert full L2CAP header present 4903 if (size < COMPLETE_L2CAP_HEADER) return; 4904 4905 // Dispatch to Classic or LE handler (SCO packets are not dispatched to L2CAP) 4906 hci_con_handle_t handle = READ_ACL_CONNECTION_HANDLE(packet); 4907 hci_connection_t *conn = hci_connection_for_handle(handle); 4908 if (!conn) return; 4909 if (conn->address_type == BD_ADDR_TYPE_ACL){ 4910 l2cap_acl_classic_handler(handle, packet, size); 4911 } else { 4912 l2cap_acl_le_handler(handle, packet, size); 4913 } 4914 4915 l2cap_run(); 4916 } 4917 4918 // Bluetooth 4.0 - allows to register handler for Attribute Protocol and Security Manager Protocol 4919 void l2cap_register_fixed_channel(btstack_packet_handler_t packet_handler, uint16_t channel_id) { 4920 l2cap_fixed_channel_t * channel = l2cap_fixed_channel_for_channel_id(channel_id); 4921 if (!channel) return; 4922 channel->packet_handler = packet_handler; 4923 } 4924 4925 #ifdef L2CAP_USES_CHANNELS 4926 // finalize closed channel - l2cap_handle_disconnect_request & DISCONNECTION_RESPONSE 4927 void l2cap_finalize_channel_close(l2cap_channel_t * channel){ 4928 channel->state = L2CAP_STATE_CLOSED; 4929 l2cap_handle_channel_closed(channel); 4930 // discard channel 4931 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 4932 l2cap_free_channel_entry(channel); 4933 } 4934 #endif 4935 4936 #ifdef ENABLE_CLASSIC 4937 static inline l2cap_service_t * l2cap_get_service(uint16_t psm){ 4938 return l2cap_get_service_internal(&l2cap_services, psm); 4939 } 4940 4941 static void l2cap_update_minimal_security_level(void){ 4942 // update minimal service security level 4943 gap_security_level_t minimal_level = LEVEL_1; 4944 btstack_linked_list_iterator_t it; 4945 btstack_linked_list_iterator_init(&it, &l2cap_services); 4946 while (btstack_linked_list_iterator_has_next(&it)){ 4947 l2cap_service_t * service = (l2cap_service_t *) btstack_linked_list_iterator_next(&it); 4948 if (service->required_security_level > minimal_level){ 4949 minimal_level = service->required_security_level; 4950 }; 4951 } 4952 gap_set_minimal_service_security_level(minimal_level); 4953 } 4954 4955 uint8_t l2cap_register_service(btstack_packet_handler_t service_packet_handler, uint16_t psm, uint16_t mtu, gap_security_level_t security_level){ 4956 4957 log_info("L2CAP_REGISTER_SERVICE psm 0x%x mtu %u", psm, mtu); 4958 4959 // check for alread registered psm 4960 l2cap_service_t *service = l2cap_get_service(psm); 4961 if (service) { 4962 log_error("register: PSM %u already registered", psm); 4963 return L2CAP_SERVICE_ALREADY_REGISTERED; 4964 } 4965 4966 // alloc structure 4967 service = btstack_memory_l2cap_service_get(); 4968 if (!service) { 4969 log_error("register: no memory for l2cap_service_t"); 4970 return BTSTACK_MEMORY_ALLOC_FAILED; 4971 } 4972 4973 // fill in 4974 service->psm = psm; 4975 service->mtu = mtu; 4976 service->packet_handler = service_packet_handler; 4977 service->required_security_level = security_level; 4978 4979 // add to services list 4980 btstack_linked_list_add(&l2cap_services, (btstack_linked_item_t *) service); 4981 4982 l2cap_update_minimal_security_level(); 4983 4984 #ifndef ENABLE_EXPLICIT_CONNECTABLE_MODE_CONTROL 4985 // enable page scan 4986 gap_connectable_control(1); 4987 #endif 4988 4989 4990 return ERROR_CODE_SUCCESS; 4991 } 4992 4993 uint8_t l2cap_unregister_service(uint16_t psm){ 4994 4995 log_info("unregister psm 0x%x", psm); 4996 4997 l2cap_service_t *service = l2cap_get_service(psm); 4998 if (!service) return L2CAP_SERVICE_DOES_NOT_EXIST; 4999 btstack_linked_list_remove(&l2cap_services, (btstack_linked_item_t *) service); 5000 btstack_memory_l2cap_service_free(service); 5001 5002 l2cap_update_minimal_security_level(); 5003 5004 #ifndef ENABLE_EXPLICIT_CONNECTABLE_MODE_CONTROL 5005 // disable page scan when no services registered 5006 if (btstack_linked_list_empty(&l2cap_services)) { 5007 gap_connectable_control(0); 5008 } 5009 #endif 5010 5011 return ERROR_CODE_SUCCESS; 5012 } 5013 #endif 5014 5015 5016 #ifdef L2CAP_USES_CREDIT_BASED_CHANNELS 5017 5018 static void l2cap_credit_based_send_pdu(l2cap_channel_t *channel) { 5019 btstack_assert(channel != NULL); 5020 btstack_assert(channel->send_sdu_buffer != NULL); 5021 btstack_assert(channel->credits_outgoing > 0); 5022 5023 // send part of SDU 5024 hci_reserve_packet_buffer(); 5025 uint8_t *acl_buffer = hci_get_outgoing_packet_buffer(); 5026 uint8_t *l2cap_payload = acl_buffer + 8; 5027 uint16_t pos = 0; 5028 if (!channel->send_sdu_pos) { 5029 // store SDU len 5030 channel->send_sdu_pos += 2u; 5031 little_endian_store_16(l2cap_payload, pos, channel->send_sdu_len); 5032 pos += 2u; 5033 } 5034 uint16_t payload_size = btstack_min(channel->send_sdu_len + 2u - channel->send_sdu_pos, channel->remote_mps - pos); 5035 log_info("len %u, pos %u => payload %u, credits %u", channel->send_sdu_len, channel->send_sdu_pos, payload_size, 5036 channel->credits_outgoing); 5037 (void) memcpy(&l2cap_payload[pos], 5038 &channel->send_sdu_buffer[channel->send_sdu_pos - 2u], 5039 payload_size); // -2 for virtual SDU len 5040 pos += payload_size; 5041 channel->send_sdu_pos += payload_size; 5042 l2cap_setup_header(acl_buffer, channel->con_handle, 0, channel->remote_cid, pos); 5043 5044 channel->credits_outgoing--; 5045 5046 // update state (mark SDU as done) before calling hci_send_acl_packet_buffer (trigger l2cap_le_send_pdu again) 5047 bool done = channel->send_sdu_pos >= (channel->send_sdu_len + 2u); 5048 if (done) { 5049 channel->send_sdu_buffer = NULL; 5050 } 5051 5052 hci_send_acl_packet_buffer(8u + pos); 5053 5054 if (done) { 5055 // send done event 5056 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_PACKET_SENT); 5057 // inform about can send now 5058 l2cap_credit_based_notify_channel_can_send(channel); 5059 } 5060 } 5061 5062 static uint8_t l2cap_credit_based_send_data(l2cap_channel_t * channel, const uint8_t * data, uint16_t size){ 5063 5064 if (size > channel->remote_mtu){ 5065 log_error("l2cap send, cid 0x%02x, data length exceeds remote MTU.", channel->local_cid); 5066 return L2CAP_DATA_LEN_EXCEEDS_REMOTE_MTU; 5067 } 5068 5069 if (channel->send_sdu_buffer){ 5070 log_info("l2cap send, cid 0x%02x, cannot send", channel->local_cid); 5071 return BTSTACK_ACL_BUFFERS_FULL; 5072 } 5073 5074 channel->send_sdu_buffer = data; 5075 channel->send_sdu_len = size; 5076 channel->send_sdu_pos = 0; 5077 5078 l2cap_notify_channel_can_send(); 5079 return ERROR_CODE_SUCCESS; 5080 } 5081 5082 static uint8_t l2cap_credit_based_provide_credits(uint16_t local_cid, uint16_t credits){ 5083 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 5084 if (!channel) { 5085 log_error("le credits no channel for cid 0x%02x", local_cid); 5086 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 5087 } 5088 5089 // check state 5090 if (channel->state != L2CAP_STATE_OPEN){ 5091 log_error("le credits but channel 0x%02x not open yet", local_cid); 5092 } 5093 5094 // ignore if set to automatic credits 5095 if (channel->automatic_credits) return ERROR_CODE_SUCCESS; 5096 5097 // assert incoming credits + credits <= 0xffff 5098 uint32_t total_credits = channel->credits_incoming; 5099 total_credits += channel->new_credits_incoming; 5100 total_credits += credits; 5101 if (total_credits > 0xffffu){ 5102 log_error("le credits overrun: current %u, scheduled %u, additional %u", channel->credits_incoming, 5103 channel->new_credits_incoming, credits); 5104 } 5105 5106 // set credits_granted 5107 channel->new_credits_incoming += credits; 5108 5109 // go 5110 l2cap_run(); 5111 return ERROR_CODE_SUCCESS; 5112 } 5113 5114 static void l2cap_credit_based_send_credits(l2cap_channel_t *channel) { 5115 log_info("l2cap: sending %u credits", channel->new_credits_incoming); 5116 channel->local_sig_id = l2cap_next_sig_id(); 5117 uint16_t new_credits = channel->new_credits_incoming; 5118 channel->new_credits_incoming = 0; 5119 channel->credits_incoming += new_credits; 5120 uint16_t signaling_cid = channel->address_type == BD_ADDR_TYPE_ACL ? L2CAP_CID_SIGNALING : L2CAP_CID_SIGNALING_LE; 5121 l2cap_send_general_signaling_packet(channel->con_handle, signaling_cid, L2CAP_FLOW_CONTROL_CREDIT_INDICATION, channel->local_sig_id, channel->local_cid, new_credits); 5122 } 5123 5124 // @return valid 5125 static bool l2cap_credit_based_handle_credit_indication(hci_con_handle_t handle, const uint8_t * command, uint16_t len){ 5126 // check size 5127 if (len < 4u) return false; 5128 5129 // find channel 5130 uint16_t remote_cid = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 0); 5131 l2cap_channel_t * channel = l2cap_get_channel_for_remote_handle_and_cid(handle, remote_cid); 5132 if (!channel) { 5133 log_error("credit: no channel for handle 0x%04x/cid 0x%02x", handle, remote_cid); 5134 return true; 5135 } 5136 uint16_t new_credits = little_endian_read_16(command, L2CAP_SIGNALING_COMMAND_DATA_OFFSET + 2); 5137 uint16_t credits_before = channel->credits_outgoing; 5138 channel->credits_outgoing += new_credits; 5139 // check for credit overrun 5140 if (credits_before > channel->credits_outgoing) { 5141 log_error("credit: new credits caused overrrun for cid 0x%02x, disconnecting", channel->local_cid); 5142 channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 5143 return true; 5144 } 5145 log_info("credit: %u credits for 0x%02x, now %u", new_credits, channel->local_cid, channel->credits_outgoing); 5146 l2cap_call_notify_channel_in_run = true; 5147 return true; 5148 } 5149 5150 static void l2cap_credit_based_handle_pdu(l2cap_channel_t * l2cap_channel, const uint8_t * packet, uint16_t size){ 5151 // ignore empty packets 5152 if (size == COMPLETE_L2CAP_HEADER) return; 5153 5154 // credit counting 5155 if (l2cap_channel->credits_incoming == 0u){ 5156 log_info("(e)CBM: packet received but no incoming credits"); 5157 l2cap_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 5158 return; 5159 } 5160 l2cap_channel->credits_incoming--; 5161 5162 // automatic credits 5163 if ((l2cap_channel->credits_incoming < L2CAP_CREDIT_BASED_FLOW_CONTROL_MODE_AUTOMATIC_CREDITS_WATERMARK) && l2cap_channel->automatic_credits){ 5164 l2cap_channel->new_credits_incoming = L2CAP_CREDIT_BASED_FLOW_CONTROL_MODE_AUTOMATIC_CREDITS_INCREMENT; 5165 } 5166 5167 // first fragment 5168 uint16_t pos = 0; 5169 if (!l2cap_channel->receive_sdu_len){ 5170 if (size < (COMPLETE_L2CAP_HEADER + 2)) return; 5171 uint16_t sdu_len = little_endian_read_16(packet, COMPLETE_L2CAP_HEADER); 5172 if (sdu_len > l2cap_channel->local_mtu) { 5173 log_info("(e)CBM: packet received larger than MTU"); 5174 l2cap_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 5175 return; 5176 } 5177 l2cap_channel->receive_sdu_len = sdu_len; 5178 l2cap_channel->receive_sdu_pos = 0; 5179 pos += 2u; 5180 size -= 2u; 5181 } 5182 5183 uint16_t fragment_size = size-COMPLETE_L2CAP_HEADER; 5184 5185 // check fragment_size 5186 if (fragment_size > l2cap_channel->local_mps) { 5187 log_info("(e)CBM: fragment larger than local MPS"); 5188 l2cap_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 5189 return; 5190 } 5191 5192 // check sdu overrun 5193 if ((l2cap_channel->receive_sdu_pos + fragment_size) > l2cap_channel->receive_sdu_len){ 5194 log_info("(e)CBM: fragments larger than SDU"); 5195 l2cap_channel->state = L2CAP_STATE_WILL_SEND_DISCONNECT_REQUEST; 5196 return; 5197 } 5198 5199 (void)memcpy(&l2cap_channel->receive_sdu_buffer[l2cap_channel->receive_sdu_pos], 5200 &packet[COMPLETE_L2CAP_HEADER + pos], 5201 fragment_size); 5202 l2cap_channel->receive_sdu_pos += fragment_size; 5203 5204 // done? 5205 log_debug("le packet pos %u, len %u", l2cap_channel->receive_sdu_pos, l2cap_channel->receive_sdu_len); 5206 if (l2cap_channel->receive_sdu_pos >= l2cap_channel->receive_sdu_len){ 5207 l2cap_dispatch_to_channel(l2cap_channel, L2CAP_DATA_PACKET, l2cap_channel->receive_sdu_buffer, l2cap_channel->receive_sdu_len); 5208 l2cap_channel->receive_sdu_len = 0; 5209 } 5210 } 5211 5212 static void l2cap_credit_based_notify_channel_can_send(l2cap_channel_t *channel){ 5213 if (!channel->waiting_for_can_send_now) return; 5214 if (channel->send_sdu_buffer) return; 5215 channel->waiting_for_can_send_now = 0; 5216 log_debug("le can send now, local_cid 0x%x", channel->local_cid); 5217 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_CAN_SEND_NOW); 5218 } 5219 #endif 5220 5221 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 5222 // 1BH2222 5223 static void l2cap_cbm_emit_incoming_connection(l2cap_channel_t *channel) { 5224 log_info("le incoming addr_type %u, addr %s handle 0x%x psm 0x%x local_cid 0x%x remote_cid 0x%x, remote_mtu %u", 5225 channel->address_type, bd_addr_to_str(channel->address), channel->con_handle, channel->psm, channel->local_cid, channel->remote_cid, channel->remote_mtu); 5226 uint8_t event[19]; 5227 event[0] = L2CAP_EVENT_CBM_INCOMING_CONNECTION; 5228 event[1] = sizeof(event) - 2u; 5229 event[2] = channel->address_type; 5230 reverse_bd_addr(channel->address, &event[3]); 5231 little_endian_store_16(event, 9, channel->con_handle); 5232 little_endian_store_16(event, 11, channel->psm); 5233 little_endian_store_16(event, 13, channel->local_cid); 5234 little_endian_store_16(event, 15, channel->remote_cid); 5235 little_endian_store_16(event, 17, channel->remote_mtu); 5236 hci_dump_packet( HCI_EVENT_PACKET, 1, event, sizeof(event)); 5237 l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event)); 5238 } 5239 // 11BH22222 5240 static void l2cap_cbm_emit_channel_opened(l2cap_channel_t *channel, uint8_t status) { 5241 log_info("opened le channel 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", 5242 status, channel->address_type, bd_addr_to_str(channel->address), channel->con_handle, channel->psm, 5243 channel->local_cid, channel->remote_cid, channel->local_mtu, channel->remote_mtu); 5244 uint8_t event[23]; 5245 event[0] = L2CAP_EVENT_CBM_CHANNEL_OPENED; 5246 event[1] = sizeof(event) - 2u; 5247 event[2] = status; 5248 event[3] = channel->address_type; 5249 reverse_bd_addr(channel->address, &event[4]); 5250 little_endian_store_16(event, 10, channel->con_handle); 5251 event[12] = (channel->state_var & L2CAP_CHANNEL_STATE_VAR_INCOMING) ? 1 : 0; 5252 little_endian_store_16(event, 13, channel->psm); 5253 little_endian_store_16(event, 15, channel->local_cid); 5254 little_endian_store_16(event, 17, channel->remote_cid); 5255 little_endian_store_16(event, 19, channel->local_mtu); 5256 little_endian_store_16(event, 21, channel->remote_mtu); 5257 hci_dump_packet( HCI_EVENT_PACKET, 1, event, sizeof(event)); 5258 l2cap_dispatch_to_channel(channel, HCI_EVENT_PACKET, event, sizeof(event)); 5259 } 5260 5261 // finalize closed channel - l2cap_handle_disconnect_request & DISCONNECTION_RESPONSE 5262 void l2cap_cbm_finialize_channel_close(l2cap_channel_t * channel){ 5263 channel->state = L2CAP_STATE_CLOSED; 5264 l2cap_emit_simple_event_with_cid(channel, L2CAP_EVENT_CHANNEL_CLOSED); 5265 // discard channel 5266 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 5267 l2cap_free_channel_entry(channel); 5268 } 5269 5270 static inline l2cap_service_t * l2cap_cbm_get_service(uint16_t le_psm){ 5271 return l2cap_get_service_internal(&l2cap_le_services, le_psm); 5272 } 5273 5274 uint8_t l2cap_cbm_register_service(btstack_packet_handler_t packet_handler, uint16_t psm, gap_security_level_t security_level){ 5275 5276 log_info("l2cap_cbm_register_service psm 0x%x", psm); 5277 5278 // check for alread registered psm 5279 l2cap_service_t *service = l2cap_cbm_get_service(psm); 5280 if (service) { 5281 return L2CAP_SERVICE_ALREADY_REGISTERED; 5282 } 5283 5284 // alloc structure 5285 service = btstack_memory_l2cap_service_get(); 5286 if (!service) { 5287 log_error("register: no memory for l2cap_service_t"); 5288 return BTSTACK_MEMORY_ALLOC_FAILED; 5289 } 5290 5291 // fill in 5292 service->psm = psm; 5293 service->mtu = 0; 5294 service->packet_handler = packet_handler; 5295 service->required_security_level = security_level; 5296 service->requires_authorization = false; 5297 5298 // add to services list 5299 btstack_linked_list_add(&l2cap_le_services, (btstack_linked_item_t *) service); 5300 5301 // done 5302 return ERROR_CODE_SUCCESS; 5303 } 5304 5305 uint8_t l2cap_cbm_unregister_service(uint16_t psm) { 5306 log_info("l2cap_cbm_unregister_service psm 0x%x", psm); 5307 l2cap_service_t *service = l2cap_cbm_get_service(psm); 5308 if (!service) return L2CAP_SERVICE_DOES_NOT_EXIST; 5309 5310 btstack_linked_list_remove(&l2cap_le_services, (btstack_linked_item_t *) service); 5311 btstack_memory_l2cap_service_free(service); 5312 return ERROR_CODE_SUCCESS; 5313 } 5314 5315 uint8_t l2cap_cbm_accept_connection(uint16_t local_cid, uint8_t * receive_sdu_buffer, uint16_t mtu, uint16_t initial_credits){ 5316 // get channel 5317 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 5318 if (!channel) return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 5319 5320 // validate state 5321 if (channel->state != L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT){ 5322 return ERROR_CODE_COMMAND_DISALLOWED; 5323 } 5324 5325 // set state accept connection 5326 channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_ACCEPT; 5327 channel->receive_sdu_buffer = receive_sdu_buffer; 5328 channel->local_mtu = mtu; 5329 channel->new_credits_incoming = initial_credits; 5330 channel->automatic_credits = initial_credits == L2CAP_LE_AUTOMATIC_CREDITS; 5331 5332 // go 5333 l2cap_run(); 5334 return ERROR_CODE_SUCCESS; 5335 } 5336 5337 uint8_t l2cap_cbm_decline_connection(uint16_t local_cid, uint16_t result) { 5338 // get channel 5339 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 5340 if (!channel) return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 5341 5342 // validate state 5343 if (channel->state != L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT){ 5344 return ERROR_CODE_COMMAND_DISALLOWED; 5345 } 5346 5347 // set state decline connection 5348 channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_RESPONSE_DECLINE; 5349 channel->reason = result; 5350 l2cap_run(); 5351 return ERROR_CODE_SUCCESS; 5352 } 5353 5354 static gap_security_level_t l2cap_cbm_security_level_for_connection(hci_con_handle_t con_handle){ 5355 uint8_t encryption_key_size = gap_encryption_key_size(con_handle); 5356 if (encryption_key_size == 0) return LEVEL_0; 5357 5358 bool authenticated = gap_authenticated(con_handle); 5359 if (!authenticated) return LEVEL_2; 5360 5361 return encryption_key_size == 16 ? LEVEL_4 : LEVEL_3; 5362 } 5363 5364 // used to handle pairing complete after triggering to increase 5365 static void l2cap_cbm_sm_packet_handler(uint8_t packet_type, uint16_t channel_nr, uint8_t *packet, uint16_t size) { 5366 UNUSED(channel_nr); 5367 UNUSED(size); 5368 UNUSED(packet_type); 5369 btstack_assert(packet_type == HCI_EVENT_PACKET); 5370 if (hci_event_packet_get_type(packet) != SM_EVENT_PAIRING_COMPLETE) return; 5371 hci_con_handle_t con_handle = sm_event_pairing_complete_get_handle(packet); 5372 btstack_linked_list_iterator_t it; 5373 btstack_linked_list_iterator_init(&it, &l2cap_channels); 5374 while (btstack_linked_list_iterator_has_next(&it)) { 5375 l2cap_channel_t *channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 5376 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 5377 if (channel->con_handle != con_handle) continue; 5378 if (channel->state != L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE) continue; 5379 5380 // found channel, check security level 5381 if (l2cap_cbm_security_level_for_connection(con_handle) < channel->required_security_level){ 5382 // pairing failed or wasn't good enough, inform user 5383 l2cap_cbm_emit_channel_opened(channel, ERROR_CODE_INSUFFICIENT_SECURITY); 5384 // discard channel 5385 btstack_linked_list_remove(&l2cap_channels, (btstack_linked_item_t *) channel); 5386 l2cap_free_channel_entry(channel); 5387 } else { 5388 // send conn request now 5389 channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST; 5390 l2cap_run(); 5391 } 5392 } 5393 } 5394 5395 uint8_t l2cap_cbm_create_channel(btstack_packet_handler_t packet_handler, hci_con_handle_t con_handle, 5396 uint16_t psm, uint8_t * receive_sdu_buffer, uint16_t mtu, uint16_t initial_credits, gap_security_level_t security_level, 5397 uint16_t * out_local_cid) { 5398 5399 static btstack_packet_callback_registration_t sm_event_callback_registration; 5400 static bool sm_callback_registered = false; 5401 5402 log_info("create, handle 0x%04x psm 0x%x mtu %u", con_handle, psm, mtu); 5403 5404 hci_connection_t * connection = hci_connection_for_handle(con_handle); 5405 if (!connection) { 5406 log_error("no hci_connection for handle 0x%04x", con_handle); 5407 return ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER; 5408 } 5409 5410 l2cap_channel_t * channel = l2cap_create_channel_entry(packet_handler, L2CAP_CHANNEL_TYPE_CHANNEL_CBM, connection->address, connection->address_type, psm, mtu, security_level); 5411 if (!channel) { 5412 return BTSTACK_MEMORY_ALLOC_FAILED; 5413 } 5414 log_info("created %p", channel); 5415 5416 // store local_cid 5417 if (out_local_cid){ 5418 *out_local_cid = channel->local_cid; 5419 } 5420 5421 // setup channel entry 5422 channel->con_handle = con_handle; 5423 channel->receive_sdu_buffer = receive_sdu_buffer; 5424 channel->new_credits_incoming = initial_credits; 5425 channel->automatic_credits = initial_credits == L2CAP_LE_AUTOMATIC_CREDITS; 5426 5427 // add to connections list 5428 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 5429 5430 // check security level 5431 if (l2cap_cbm_security_level_for_connection(con_handle) < channel->required_security_level){ 5432 if (!sm_callback_registered){ 5433 sm_callback_registered = true; 5434 // lazy registration for SM events 5435 sm_event_callback_registration.callback = &l2cap_cbm_sm_packet_handler; 5436 sm_add_event_handler(&sm_event_callback_registration); 5437 } 5438 5439 // start pairing 5440 channel->state = L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE; 5441 sm_request_pairing(con_handle); 5442 } else { 5443 // send conn request right away 5444 channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST; 5445 l2cap_run(); 5446 } 5447 5448 return ERROR_CODE_SUCCESS; 5449 } 5450 5451 uint8_t l2cap_cbm_provide_credits(uint16_t local_cid, uint16_t credits){ 5452 return l2cap_credit_based_provide_credits(local_cid, credits); 5453 } 5454 #endif 5455 5456 #ifdef ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE 5457 5458 uint8_t l2cap_ecbm_register_service(btstack_packet_handler_t packet_handler, uint16_t psm, uint16_t min_remote_mtu, 5459 gap_security_level_t security_level, bool authorization_required) { 5460 5461 // check for already registered psm 5462 l2cap_service_t *service = l2cap_ecbm_get_service(psm); 5463 if (service) { 5464 return L2CAP_SERVICE_ALREADY_REGISTERED; 5465 } 5466 5467 // alloc structure 5468 service = btstack_memory_l2cap_service_get(); 5469 if (!service) { 5470 log_error("register: no memory for l2cap_service_t"); 5471 return BTSTACK_MEMORY_ALLOC_FAILED; 5472 } 5473 5474 // fill in 5475 service->psm = psm; 5476 service->mtu = min_remote_mtu; 5477 service->packet_handler = packet_handler; 5478 service->required_security_level = security_level; 5479 service->requires_authorization = authorization_required; 5480 5481 // add to services list 5482 btstack_linked_list_add(&l2cap_enhanced_services, (btstack_linked_item_t *) service); 5483 5484 // done 5485 return ERROR_CODE_SUCCESS; 5486 } 5487 5488 uint8_t l2cap_ecbm_unregister_service(uint16_t psm) { 5489 l2cap_service_t *service = l2cap_ecbm_get_service(psm); 5490 if (!service) return L2CAP_SERVICE_DOES_NOT_EXIST; 5491 5492 btstack_linked_list_remove(&l2cap_enhanced_services, (btstack_linked_item_t *) service); 5493 btstack_memory_l2cap_service_free(service); 5494 return ERROR_CODE_SUCCESS; 5495 } 5496 5497 void l2cap_ecbm_mps_set_min(uint16_t mps_min){ 5498 l2cap_enhanced_mps_min = mps_min; 5499 } 5500 5501 void l2cap_ecbm_mps_set_max(uint16_t mps_max){ 5502 l2cap_enhanced_mps_max = mps_max; 5503 } 5504 5505 uint8_t l2cap_ecbm_create_channels(btstack_packet_handler_t packet_handler, hci_con_handle_t con_handle, 5506 gap_security_level_t security_level, 5507 uint16_t psm, uint8_t num_channels, uint16_t initial_credits, uint16_t mtu, 5508 uint8_t ** receive_sdu_buffers, uint16_t * out_local_cid){ 5509 5510 log_info("create enhanced, handle 0x%04x psm 0x%x mtu %u", con_handle, psm, mtu); 5511 5512 hci_connection_t * connection = hci_connection_for_handle(con_handle); 5513 if (!connection) { 5514 log_error("no hci_connection for handle 0x%04x", con_handle); 5515 return ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER; 5516 } 5517 5518 // setup all channels 5519 btstack_linked_list_t channels = NULL; 5520 uint8_t status = l2cap_ecbm_setup_channels(&channels, packet_handler, num_channels, connection, psm, mtu, 5521 security_level); 5522 uint16_t local_mps = btstack_min(l2cap_enhanced_mps_max, btstack_min(l2cap_max_le_mtu(), mtu)); 5523 5524 // add to connections list and set state + local_sig_id 5525 l2cap_channel_t * channel; 5526 uint8_t i = 0; 5527 uint8_t local_sig_id = l2cap_next_sig_id(); 5528 while (true) { 5529 channel = (l2cap_channel_t *) btstack_linked_list_pop(&channels); 5530 if (channel == NULL) break; 5531 channel->state = L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_REQUEST; 5532 channel->local_sig_id = local_sig_id; 5533 channel->local_mps = local_mps; 5534 channel->cid_index = i; 5535 channel->num_cids = num_channels; 5536 channel->credits_incoming = initial_credits; 5537 channel->automatic_credits = initial_credits == L2CAP_LE_AUTOMATIC_CREDITS; 5538 channel->receive_sdu_buffer = receive_sdu_buffers[i]; 5539 // store local_cid 5540 if (out_local_cid){ 5541 out_local_cid[i] = channel->local_cid; 5542 } 5543 btstack_linked_list_add_tail(&l2cap_channels, (btstack_linked_item_t *) channel); 5544 i++; 5545 } 5546 5547 #if 0 5548 // check security level 5549 if (l2cap_le_security_level_for_connection(con_handle) < channel->required_security_level){ 5550 if (!sm_callback_registered){ 5551 sm_callback_registered = true; 5552 // lazy registration for SM events 5553 sm_event_callback_registration.callback = &l2cap_sm_packet_handler; 5554 sm_add_event_handler(&sm_event_callback_registration); 5555 } 5556 5557 // start pairing 5558 channel->state = L2CAP_STATE_WAIT_OUTGOING_SECURITY_LEVEL_UPDATE; 5559 sm_request_pairing(con_handle); 5560 } else { 5561 // send conn request right away 5562 channel->state = L2CAP_STATE_WILL_SEND_LE_CONNECTION_REQUEST; 5563 l2cap_run(); 5564 } 5565 #endif 5566 5567 l2cap_run(); 5568 5569 return status; 5570 } 5571 5572 uint8_t l2cap_ecbm_accept_channels(uint16_t local_cid, uint8_t num_channels, uint16_t initial_credits, 5573 uint16_t receive_buffer_size, uint8_t ** receive_buffers, uint16_t * out_local_cids){ 5574 5575 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 5576 if (!channel) { 5577 5578 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 5579 } 5580 5581 uint16_t local_mps = btstack_min(l2cap_enhanced_mps_max, btstack_min(l2cap_max_le_mtu(), receive_buffer_size)); 5582 5583 // 5584 hci_con_handle_t con_handle = channel->con_handle; 5585 uint8_t local_sig_id = channel->local_sig_id; 5586 uint8_t channel_index = 0; 5587 btstack_linked_list_iterator_t it; 5588 btstack_linked_list_iterator_init(&it, &l2cap_channels); 5589 while (btstack_linked_list_iterator_has_next(&it)) { 5590 channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 5591 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 5592 if (channel->con_handle != con_handle) continue; 5593 if (channel->local_sig_id != local_sig_id) continue; 5594 if (channel->state != L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT) continue; 5595 5596 if (channel_index < num_channels){ 5597 // assign buffer and cid 5598 out_local_cids[channel_index] = channel->local_cid; 5599 channel->receive_sdu_buffer = receive_buffers[channel_index]; 5600 channel->local_mtu = receive_buffer_size; 5601 channel->local_mps = local_mps; 5602 channel->credits_incoming = initial_credits; 5603 channel->automatic_credits = initial_credits == L2CAP_LE_AUTOMATIC_CREDITS; 5604 channel_index++; 5605 } else { 5606 // clear local cid for response packet 5607 channel->local_cid = 0; 5608 channel->reason = L2CAP_ECBM_CONNECTION_RESULT_SOME_REFUSED_INSUFFICIENT_RESOURCES_AVAILABLE; 5609 } 5610 // update state 5611 channel->state = L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_RESPONSE; 5612 } 5613 l2cap_run_trigger(); 5614 return ERROR_CODE_SUCCESS; 5615 } 5616 5617 uint8_t l2cap_ecbm_decline_channels(uint16_t local_cid, uint16_t result){ 5618 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cid); 5619 if (!channel) { 5620 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 5621 } 5622 // 5623 hci_con_handle_t con_handle = channel->con_handle; 5624 uint8_t local_sig_id = channel->local_sig_id; 5625 btstack_linked_list_iterator_t it; 5626 btstack_linked_list_iterator_init(&it, &l2cap_channels); 5627 while (btstack_linked_list_iterator_has_next(&it)) { 5628 channel = (l2cap_channel_t *) btstack_linked_list_iterator_next(&it); 5629 if (!l2cap_is_dynamic_channel_type(channel->channel_type)) continue; 5630 if (channel->con_handle != con_handle) continue; 5631 if (channel->local_sig_id != local_sig_id) continue; 5632 if (channel->state != L2CAP_STATE_WAIT_CLIENT_ACCEPT_OR_REJECT) continue; 5633 5634 // prepare response 5635 channel->local_cid = 0; 5636 channel->reason = result; 5637 channel->state = L2CAP_STATE_WILL_SEND_ENHANCED_CONNECTION_RESPONSE; 5638 } 5639 l2cap_run_trigger(); 5640 return ERROR_CODE_SUCCESS; 5641 } 5642 5643 uint8_t l2cap_ecbm_reconfigure_channels(uint8_t num_cids, uint16_t * local_cids, int16_t receive_buffer_size, uint8_t ** receive_buffers){ 5644 btstack_assert(receive_buffers != NULL); 5645 btstack_assert(local_cids != NULL); 5646 5647 if (num_cids > L2CAP_ECBM_MAX_CID_ARRAY_SIZE){ 5648 return ERROR_CODE_UNACCEPTABLE_CONNECTION_PARAMETERS; 5649 } 5650 5651 // check if all cids exist and have the same con handle 5652 uint8_t i; 5653 hci_con_handle_t con_handle = HCI_CON_HANDLE_INVALID; 5654 for (i = 0 ; i < num_cids ; i++){ 5655 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cids[i]); 5656 if (!channel) { 5657 return L2CAP_LOCAL_CID_DOES_NOT_EXIST; 5658 } 5659 if (channel->state != L2CAP_STATE_OPEN){ 5660 return ERROR_CODE_COMMAND_DISALLOWED; 5661 } 5662 if (con_handle == HCI_CON_HANDLE_INVALID){ 5663 con_handle = channel->con_handle; 5664 } else if (con_handle != channel->con_handle){ 5665 return ERROR_CODE_UNACCEPTABLE_CONNECTION_PARAMETERS; 5666 } 5667 } 5668 // set renegotiation data and state 5669 uint8_t sig_id = l2cap_next_sig_id(); 5670 for (i = 0 ; i < num_cids ; i++){ 5671 l2cap_channel_t * channel = l2cap_get_channel_for_local_cid(local_cids[i]); 5672 channel->cid_index = i; 5673 channel->num_cids = num_cids; 5674 channel->local_sig_id = sig_id; 5675 channel->renegotiate_mtu = receive_buffer_size; 5676 channel->renegotiate_sdu_buffer = receive_buffers[i]; 5677 channel->state = L2CAP_STATE_WILL_SEND_EHNANCED_RENEGOTIATION_REQUEST; 5678 } 5679 5680 5681 l2cap_run(); 5682 return ERROR_CODE_SUCCESS; 5683 } 5684 5685 uint8_t l2cap_ecbm_provide_credits(uint16_t local_cid, uint16_t credits){ 5686 return l2cap_credit_based_provide_credits(local_cid, credits); 5687 } 5688 #endif 5689 5690 #ifdef ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE 5691 // @deprecated - please use l2cap_ertm_create_channel 5692 uint8_t l2cap_create_ertm_channel(btstack_packet_handler_t packet_handler, bd_addr_t address, uint16_t psm, 5693 l2cap_ertm_config_t * ertm_contig, uint8_t * buffer, uint32_t size, uint16_t * out_local_cid){ 5694 log_error("deprecated - please use l2cap_ertm_create_channel"); 5695 return l2cap_ertm_create_channel(packet_handler, address, psm, ertm_contig, buffer, size, out_local_cid); 5696 }; 5697 5698 // @deprecated - please use l2cap_ertm_accept_connection 5699 uint8_t l2cap_accept_ertm_connection(uint16_t local_cid, l2cap_ertm_config_t * ertm_contig, uint8_t * buffer, uint32_t size){ 5700 log_error("deprecated - please use l2cap_ertm_accept_connection"); 5701 return l2cap_ertm_accept_connection(local_cid, ertm_contig, buffer, size); 5702 } 5703 #endif 5704 5705 #ifdef ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE 5706 // @deprecated - please use l2cap_cbm_register_service 5707 uint8_t l2cap_le_register_service(btstack_packet_handler_t packet_handler, uint16_t psm, gap_security_level_t security_level){ 5708 log_error("deprecated - please use l2cap_cbm_register_service"); 5709 return l2cap_cbm_register_service(packet_handler, psm, security_level); 5710 } 5711 5712 // @deprecated - please use l2cap_cbm_unregister_service 5713 uint8_t l2cap_le_unregister_service(uint16_t psm){ 5714 log_error("deprecated - please use l2cap_cbm_unregister_service"); 5715 return l2cap_cbm_unregister_service(psm); 5716 } 5717 5718 // @deprecated - please use l2cap_cbm_accept_connection 5719 uint8_t l2cap_le_accept_connection(uint16_t local_cid, uint8_t * receive_sdu_buffer, uint16_t mtu, uint16_t initial_credits){ 5720 log_error("deprecated - please use l2cap_cbm_accept_connection"); 5721 return l2cap_cbm_accept_connection(local_cid, receive_sdu_buffer, mtu, initial_credits); 5722 } 5723 5724 // @deprecated - please use l2cap_cbm_decline_connection 5725 uint8_t l2cap_le_decline_connection(uint16_t local_cid){ 5726 log_error("deprecated - please use l2cap_cbm_decline_connection"); 5727 return l2cap_cbm_decline_connection(local_cid, L2CAP_CBM_CONNECTION_RESULT_NO_RESOURCES_AVAILABLE); 5728 } 5729 5730 // @deprecated - please use l2cap_cbm_create_channel 5731 uint8_t l2cap_le_create_channel(btstack_packet_handler_t packet_handler, hci_con_handle_t con_handle, 5732 uint16_t psm, uint8_t * receive_sdu_buffer, uint16_t mtu, uint16_t initial_credits, gap_security_level_t security_level, 5733 uint16_t * out_local_cid){ 5734 log_error("deprecated - please use l2cap_cbm_create_channel"); 5735 return l2cap_cbm_create_channel(packet_handler, con_handle, psm, receive_sdu_buffer, mtu, initial_credits, security_level, out_local_cid); 5736 } 5737 5738 // @deprecated - please use l2cap_cbm_provide_credits 5739 uint8_t l2cap_le_provide_credits(uint16_t local_cid, uint16_t credits){ 5740 log_error("deprecated - please use l2cap_cbm_provide_credits"); 5741 return l2cap_cbm_provide_credits(local_cid, credits); 5742 } 5743 5744 // @deprecated - please use l2cap_can_send_packet_now 5745 bool l2cap_le_can_send_now(uint16_t local_cid){ 5746 log_error("deprecated - please use l2cap_can_send_packet_now"); 5747 return l2cap_can_send_packet_now(local_cid); 5748 } 5749 5750 // @deprecated - please use l2cap_request_can_send_now_event 5751 uint8_t l2cap_le_request_can_send_now_event(uint16_t local_cid){ 5752 log_error("deprecated - please use l2cap_request_can_send_now_event"); 5753 return l2cap_request_can_send_now_event(local_cid); 5754 } 5755 5756 // @deprecated - please use l2cap_cbm_send_data 5757 uint8_t l2cap_le_send_data(uint16_t local_cid, const uint8_t * data, uint16_t size){ 5758 log_error("deprecated - please use l2cap_cbm_send_data"); 5759 return l2cap_send(local_cid, data, size); 5760 } 5761 5762 // @deprecated - please use l2cap_disconnect 5763 uint8_t l2cap_le_disconnect(uint16_t local_cid){ 5764 log_error("deprecated - please use l2cap_disconnect"); 5765 return l2cap_disconnect(local_cid); 5766 } 5767 #endif 5768